diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/IsMustEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/IsMustEnum.java new file mode 100644 index 000000000..e2729e565 --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/IsMustEnum.java @@ -0,0 +1,37 @@ +package com.jero.common.constant.enums; + +/** + * 中英文切换标识 + * @description + * @date 2022/1/21 15:22 + * @auth zhn + */ +public enum IsMustEnum { + YES("是","0"), + NO("否","1"); + + + String name; + String value; + + private IsMustEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java index c6712e45a..60c42825d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java @@ -646,5 +646,26 @@ public class DateUtils extends PropertyEditorSupport { calendar.setTime(getDate()); return calendar.get(Calendar.YEAR); } + /*** + * @Description: 判断多个日期是否都符合日期格式 + * @Author: yangxuenan + * @Date: 2020/12/31 11:31 + * @Param: [str] + * @Return: boolean + */ + public static boolean isValidDate(String str){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String[] strArr = str.split(","); + for (String dateStr : strArr) { + String replace = dateStr.replace("/", "-"); + try { + simpleDateFormat.setLenient(false); + simpleDateFormat.parse(replace); + } catch (Exception e){ + return false; + } + } + return true; + } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/controller/BussDocumentLibraryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/controller/BussDocumentLibraryEOController.java index ff3c249e8..e8f88c00d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/controller/BussDocumentLibraryEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/controller/BussDocumentLibraryEOController.java @@ -413,16 +413,8 @@ public class BussDocumentLibraryEOController extends JeroController importZip(@RequestParam(value = "file", required = false) MultipartFile file) throws Exception { - //验证文件名是否合格 - //截取后缀名 - int pos = file.getOriginalFilename().lastIndexOf("."); - String str = file.getOriginalFilename().substring(pos+1).toLowerCase(); - String filenameorg = file.getOriginalFilename().substring(0,pos); - //判断上传文件必须是zip - if (!str.equals("zip")) { - return Result.error("请上传zip文件"); - } - return Result.OK("导入成功"); + String result = bussDocumentLibraryEOService.importZip(file); + return Result.OK(result); } @ApiOperation(value = "推送") diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/BussDocumentLibraryEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/BussDocumentLibraryEOMapper.java index 06ace19ea..0f90c43a9 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/BussDocumentLibraryEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/BussDocumentLibraryEOMapper.java @@ -78,4 +78,7 @@ public interface BussDocumentLibraryEOMapper extends BaseMapper> getInfoListByReplaceStandard(@Param("replaceStandard") String replaceStandard); + List> getListBySerialNumber(@Param("serialNumbers") String serialNumbers); + + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml index 8ddc33411..a8b0524f0 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml @@ -70,5 +70,16 @@ + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/IBussDocumentLibraryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/IBussDocumentLibraryEOService.java index 39941478f..d780a39f3 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/IBussDocumentLibraryEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/IBussDocumentLibraryEOService.java @@ -3,7 +3,7 @@ package com.jero.modules.document.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.modules.document.entity.BussDocumentLibraryEO; -import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -13,164 +13,180 @@ import java.util.Map; /** * @Description: 文档库信息表 * @Author: jero-boot - * @Date: 2022-01-21 + * @Date: 2022-01-21 * @Version: V1.0 */ public interface IBussDocumentLibraryEOService extends IService { - /** - * 通过id删除 - * - * @param id - * @return - */ + /** + * 通过id删除 + * + * @param id + * @return + */ void deleteById(String id); - /** - * 批量删除 - * - * @param ids - * @return - */ + /** + * 批量删除 + * + * @param ids + * @return + */ void deleteByIds(List ids); - /** - * 通过id查询 - * - * @param id - * @return - */ + /** + * 通过id查询 + * + * @param id + * @return + */ BussDocumentLibraryEO queryById(String id); /** - * 列表查询 - * - * @return - */ + * 列表查询 + * + * @return + */ List queryList(); /** - * 查询条件 - * - * @return - */ - List> queryCondition(String flag,String cut); + * 查询条件 + * + * @return + */ + List> queryCondition(String flag, String cut); /** - * 列表表头 - * - * @return - */ - List> getHeader(String flag,String cut); + * 列表表头 + * + * @return + */ + List> getHeader(String flag, String cut); /** - * 新增表单 - * - * @return - */ - List> getAddForm(String flag,String cut,String type); + * 新增表单 + * + * @return + */ + List> getAddForm(String flag, String cut, String type); - /** - * 编辑数据查询 - * @param id - * @return - */ - List> getDocumentInfoById(String id,String cut); + /** + * 编辑数据查询 + * + * @param id + * @return + */ + List> getDocumentInfoById(String id, String cut); - /** - * 详情数据查询 - * @param id - * @return - */ - List> getInfoById(String id,String cut); + /** + * 详情数据查询 + * + * @param id + * @return + */ + List> getInfoById(String id, String cut); - /** - * 新增数据 - * @param map - */ - void addInfo(Map map); + /** + * 新增数据 + * + * @param map + */ + void addInfo(Map map); - /** - * 编辑数据 - * @param map - */ - void updateInfo(Map map); + /** + * 编辑数据 + * + * @param map + */ + void updateInfo(Map map); - /** - * 分页 - * @param parameter - * @return - */ - IPage getInfoPage(Map parameter); + /** + * 分页 + * + * @param parameter + * @return + */ + IPage getInfoPage(Map parameter); - /** - * 代替标准分页 - * @param parameter - * @return - */ - IPage replacePageInfo(Map parameter); + /** + * 代替标准分页 + * + * @param parameter + * @return + */ + IPage replacePageInfo(Map parameter); - /** - * ocr识别调取已入库文件分页 - * @param parameter - * @return - */ - IPage ocrPageInfo(Map parameter); + /** + * ocr识别调取已入库文件分页 + * + * @param parameter + * @return + */ + IPage ocrPageInfo(Map parameter); - /** - * 添加收藏 - * @param id - */ - void addCollect(String id); + /** + * 添加收藏 + * + * @param id + */ + void addCollect(String id); - /** - * 取消收藏 - * @param id - */ - void cancelCollect(String id); + /** + * 取消收藏 + * + * @param id + */ + void cancelCollect(String id); - /** - * 添加订阅 - * @param id - */ - void addSubscribe(String id); + /** + * 添加订阅 + * + * @param id + */ + void addSubscribe(String id); - /** - * 取消订阅 - * @param id - */ - void cancelSubscribe(String id); + /** + * 取消订阅 + * + * @param id + */ + void cancelSubscribe(String id); - /** - * 导出excel - * @param map - * @param response - * @param request - */ - void exportExcel(Map map, - HttpServletResponse response, - HttpServletRequest request); + /** + * 导出excel + * + * @param map + * @param response + * @param request + */ + void exportExcel(Map map, + HttpServletResponse response, + HttpServletRequest request); - void exportZip(Map map, - HttpServletResponse response, - HttpServletRequest request); + void exportZip(Map map, + HttpServletResponse response, + HttpServletRequest request); - /** - * 模板下载 - * @param response - * @param request - */ - void exportTemplate(Map map,HttpServletResponse response, HttpServletRequest request); + /** + * 模板下载 + * + * @param response + * @param request + */ + void exportTemplate(Map map, HttpServletResponse response, HttpServletRequest request); - /** - * ocr识别调取已入库文件-中英文切换 - * @param flag - * @param cut - * @return - */ - List> getHeaderOrConditionForOcr(String flag, String cut); + /** + * ocr识别调取已入库文件-中英文切换 + * + * @param flag + * @param cut + * @return + */ + List> getHeaderOrConditionForOcr(String flag, String cut); - String pullMessage(String departIds,String ids,String documentIds); + String pullMessage(String departIds, String ids, String documentIds); + + String importZip(MultipartFile file); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index 39a839166..8731bb640 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -10,12 +10,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.CommonConstant; import com.jero.common.constant.WebsocketConst; import com.jero.common.constant.enums.CutEnum; +import com.jero.common.constant.enums.IsMustEnum; import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.common.constant.enums.ModuleEnum; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.DateUtils; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl; import com.jero.modules.collection.entity.OnlCgformCollection; @@ -30,6 +32,7 @@ import com.jero.modules.log.service.IBussLogEOService; import com.jero.modules.message.websocket.WebSocket; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.split.common.FileUnZip; import com.jero.modules.subscribe.entity.OnlCgformSubscribe; import com.jero.modules.subscribe.service.IOnlCgformSubscribeService; import com.jero.modules.system.entity.SysAnnouncement; @@ -44,9 +47,13 @@ import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; import com.jero.modules.tag.entity.OnlCgformArea; import com.jero.modules.tag.service.impl.OnlCgformAreaServiceImpl; +import lombok.SneakyThrows; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -57,6 +64,7 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; @@ -64,7 +72,9 @@ import org.aspectj.util.FileUtil; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -74,6 +84,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -81,12 +92,14 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; + /** * @Description: 文档库信息表 * @Author: jero-boot @@ -211,11 +224,11 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl> list = new ArrayList<>(); for (OnlCgformField onlCgformField : fieldList) { Map map = new HashMap<>(); - if("technology_territory".equals(onlCgformField.getDbFieldName())){ + if ("technology_territory".equals(onlCgformField.getDbFieldName())) { List sysCategoryTreeVOList = sysCategoryTree.stream().filter(e -> onlCgformField.getDictId().equals(e.getDictId())).collect(Collectors.toList()); - map.put("tree",sysCategoryTreeVOList); - }else{ - map.put("tree",new ArrayList<>()); + map.put("tree", sysCategoryTreeVOList); + } else { + map.put("tree", new ArrayList<>()); } map.put("field_show_type", onlCgformField.getFieldShowType());//类型(判断是下拉还是输入框,等等) @@ -289,7 +302,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) && !"replaced_standard" .equals(e.getDbFieldName())) + .filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) && !"replaced_standard".equals(e.getDbFieldName())) .collect(Collectors.toList()); } else { fieldList = fieldList.stream() @@ -312,12 +325,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysCategoryTreeVOList = new ArrayList<>(); - if(StringUtils.isNotBlank(dictId)){ + if (StringUtils.isNotBlank(dictId)) { sysCategoryTreeVOList = sysCategoryTree.stream().filter(e -> dictId.equals(e.getDictId())).collect(Collectors.toList()); } Map map = new HashMap<>(); - mapPut(cut, map, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName,sysCategoryTreeVOList); - map.put("field_must_input", onlCgformField.getFieldMustInput());//区域 + mapPut(cut, map, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName, sysCategoryTreeVOList); + map.put("field_must_input", onlCgformField.getFieldMustInput());//是否必填 + map.put("db_length", onlCgformField.getDbLength());//字段长度 result.add(map); } } @@ -378,9 +392,9 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl replaceStandardNameList = new ArrayList<>();//代替标准编码 List replacedStandardNameList = new ArrayList<>();//被代替标准编码 - List> listCorrespondingStandard = new ArrayList<>(); - List> listReplaceStandard = new ArrayList<>(); - List> listReplacedStandard = new ArrayList<>(); + List> listCorrespondingStandard = new ArrayList<>(); + List> listReplaceStandard = new ArrayList<>(); + List> listReplacedStandard = new ArrayList<>(); //处理被代替标准和对应标准 for (Map map : mapList) { - Map mapTemp = new HashMap<>(); + Map mapTemp = new HashMap<>(); //对应标准处理 if (StringUtils.isNotBlank(correspondingStandardId) && correspondingStandardId.contains((String) map.get("id"))) { correspondingStandardNameList.add((String) map.get("serial_number")); - mapTemp.put("title",(String) map.get("serial_number")); - mapTemp.put("id",(String) map.get("id")); - if(ObjectUtils.isNotEmpty(mapTemp)){ + mapTemp.put("title", (String) map.get("serial_number")); + mapTemp.put("id", (String) map.get("id")); + if (ObjectUtils.isNotEmpty(mapTemp)) { listCorrespondingStandard.add(mapTemp); } } //代替标准 - if(StringUtils.isNotBlank(replaceStandardId) && replaceStandardId.contains((String) map.get("id"))){ + if (StringUtils.isNotBlank(replaceStandardId) && replaceStandardId.contains((String) map.get("id"))) { replaceStandardNameList.add((String) map.get("serial_number")); - mapTemp.put("title",(String) map.get("serial_number")); - mapTemp.put("id",(String) map.get("id")); - if(ObjectUtils.isNotEmpty(mapTemp)){ + mapTemp.put("title", (String) map.get("serial_number")); + mapTemp.put("id", (String) map.get("id")); + if (ObjectUtils.isNotEmpty(mapTemp)) { listReplaceStandard.add(mapTemp); } } @@ -443,9 +457,9 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl { //下拉选处理数据字典 - treeDictItem(categoryList, entry, treeFieldList,cut); + treeDictItem(categoryList, entry, treeFieldList, cut); }); //下拉单选和下拉多选数据字典处理 dataList.get(0).entrySet().forEach(entry -> { if (fieldPullList.contains(entry.getKey())) { //下拉选处理数据字典 - dictItem(sysDictItems, entry, onlCgformFieldList,cut); + dictItem(sysDictItems, entry, onlCgformFieldList, cut); } }); @@ -528,7 +542,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl mapNew = new HashMap<>(); mapNew.put("value", fileInfo); - mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName,null); + mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName, null); resultTemp.add(mapNew); } } @@ -536,13 +550,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl mapNew = new HashMap<>(); mapNew.put("value", fileInfos.get(0)); - mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName,null); + mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName, null); resultTemp.add(mapNew); } - }else{ + } else { Map mapNew = new HashMap<>(); mapNew.put("value", ""); - mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName,null); + mapPut(cut, mapNew, "field_show_type", onlCgformField.getFieldShowType(), "dict_field", onlCgformField.getDictField(), "db_field_name", onlCgformField.getDbFieldName(), "db_field_txt", onlCgformField.getDbFieldTxt(), "db_field_en_name", onlCgformField.getDbFieldEnName(), "area", areaName, null); resultTemp.add(mapNew); } } else { @@ -553,22 +567,22 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysCategoryTreeVOS) { + String area, String showArea, List sysCategoryTreeVOS) { map.put(field_show_type, fieldShowType2);//类型(判断是下拉还是输入框,等等) map.put(dict_field, dictField); map.put(db_field_name, dbFieldName2);//字段 @@ -616,7 +630,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl> dataList = bussDocumentLibraryEOMapper.selectMaps(queryWrapper); - Map mapTemp = new HashMap<>(); + Map mapTemp = new HashMap<>(); mapCopy(map, mapTemp); - List> dataListTemp = new ArrayList<>(); + List> dataListTemp = new ArrayList<>(); for (Map stringObjectMap : dataList) { - Map mapT = new HashMap<>(); + Map mapT = new HashMap<>(); mapCopy(stringObjectMap, mapT); dataListTemp.add(mapT); } //更新log - updateLog(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList,cut); + updateLog(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList, cut); //判断该条数据是否订阅 //处理修改代替标准,发送通知 - sendMessageUpdate(mapTemp, dataListTemp, fieldList, fieldDateList, fieldFileList, fieldPullList,cut); + sendMessageUpdate(mapTemp, dataListTemp, fieldList, fieldDateList, fieldFileList, fieldPullList, cut); //字段 StringBuilder fieldsBuilder = new StringBuilder(); @@ -872,14 +886,14 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl entry.getKey().equals(e.getDictField())) .collect(Collectors.toList()); //下拉选处理数据字典 - dictItem(sysDictItems, entry, collect,cut); + dictItem(sysDictItems, entry, collect, cut); } for (Map.Entry entry : mapTemp.entrySet()) { List collect = fieldPullList.stream() .filter(e -> entry.getKey().equals(e.getDictField())) .collect(Collectors.toList()); //下拉选处理数据字典 - dictItem(sysDictItems, entry, collect,cut); + dictItem(sysDictItems, entry, collect, cut); } StringBuilder sb = new StringBuilder(); @@ -953,11 +967,11 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - String valueStr = (String )value; + String valueStr = (String) value; lambdaQueryWrapper.in(BussDocumentLibraryEO::getId, Arrays.asList(valueStr.split(","))); List> mapList = this.listMaps(lambdaQueryWrapper); List serialNumberList = new ArrayList<>(); for (Map stringObjectMap : mapList) { serialNumberList.add((String) stringObjectMap.get("serial_number")); } - if(serialNumberList.size() != 0){ - value = StringUtils.join(serialNumberList,","); + if (serialNumberList.size() != 0) { + value = StringUtils.join(serialNumberList, ","); } return value; } @@ -1002,28 +1016,28 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl map, - List> dataList, - List fieldList, - List fieldDateList, - List fieldFileList, - List fieldPullList, - String cut) { + List> dataList, + List fieldList, + List fieldDateList, + List fieldFileList, + List fieldPullList, + String cut) { //1. 处理订阅的发送消息 //修改的内容 StringBuilder sb = getUpdateInfo(map, dataList, fieldList, fieldDateList, fieldFileList, fieldPullList, cut); String sbStr = ""; - if(ObjectUtils.isNotEmpty(sb)){ - sbStr = sb.substring(0,sb.length()-1); + if (ObjectUtils.isNotEmpty(sb)) { + sbStr = sb.substring(0, sb.length() - 1); } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String serialNumber = (String) dataList.get(0).get("serial_number"); //只要修改了标准,就需要向订阅用户发送消息(内容为-->XXX对“GB 7258 进行了修改请及时查看”) //1.先判断是否订阅 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(OnlCgformSubscribe::getDocumentId, (String)map.get("id")); + lambdaQueryWrapper.in(OnlCgformSubscribe::getDocumentId, (String) map.get("id")); List onlCgformSubscribeList = iOnlCgformSubscribeService.list(lambdaQueryWrapper); List userNameList = new ArrayList<>(); - if(onlCgformSubscribeList.size() != 0){ + if (onlCgformSubscribeList.size() != 0) { for (OnlCgformSubscribe onlCgformSubscribe : onlCgformSubscribeList) { userNameList.add(onlCgformSubscribe.getCreateBy()); } @@ -1034,14 +1048,14 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl"+serialNumber+""; + "&serial_number:" + serialNumber + "'" + " target='_blank'>" + serialNumber + ""; - String content = sysUser.getRealname()+"对"+serialNumber+"进行了修改请及时查看"; - String contentInfo = sysUser.getRealname()+"修改标准"+href+"中"+sbStr.toString(); + String content = sysUser.getRealname() + "对" + serialNumber + "进行了修改请及时查看"; + String contentInfo = sysUser.getRealname() + "修改标准" + href + "中" + sbStr.toString(); //封装消息的实体类 SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, content, contentInfo); sysAnnouncementService.saveAnnouncement(sysAnnouncement); - sendWebsocket((String) map.get("id"),(String) map.get("id")); + sendWebsocket((String) map.get("id"), (String) map.get("id")); } //2. 处理修改代替标准的发送消息 //处理修改代替标准,发送通知 @@ -1059,17 +1073,17 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl listNew = list.stream().filter(e -> !listTemp.contains(e)).collect(Collectors.toList()); //向listNew对应的工程师发飞书通知 replaceStandardSend(listNew); - sendWebsocket((String) map.get("id"),(String) map.get("id")); - } else if(StringUtils.isBlank(replaceStandardTemp) && StringUtils.isNotBlank(replaceStandard)) { + sendWebsocket((String) map.get("id"), (String) map.get("id")); + } else if (StringUtils.isBlank(replaceStandardTemp) && StringUtils.isNotBlank(replaceStandard)) { //(2)此种情况为编辑前代替标准没有数据 //向replaceStandard对应的工程师发飞书通知 replaceStandardSend(Arrays.asList(replaceStandard.split(","))); - sendWebsocket((String) map.get("id"),(String) map.get("id")); + sendWebsocket((String) map.get("id"), (String) map.get("id")); } } } - private void sendWebsocket(String msgId,String msgTet) { + private void sendWebsocket(String msgId, String msgTet) { JSONObject obj = new JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); obj.put(WebsocketConst.MSG_ID, msgId); @@ -1092,13 +1106,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl"+serialNumber+","; + "&title:" + title + + "&serial_number:" + serialNumber + "'" + " target='_blank'>" + serialNumber + ","; sb.append(href); } String sbStr = ""; - if(ObjectUtils.isNotEmpty(sb)){ - sbStr = sb.substring(0,sb.length()-1); + if (ObjectUtils.isNotEmpty(sb)) { + sbStr = sb.substring(0, sb.length() - 1); } List userList = sysUserMapper.getUserListByNames(StringUtils.join(userNameListTemp, ",")); List userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList()); @@ -1107,7 +1121,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl state = stateList.stream().filter(e -> e.getItemValue().equals(entry.getValue())).collect(Collectors.toList()); if (state.size() != 0) { - if(CutEnum.CN.getValue().equals((String) parameter.get("cut"))){ + if (CutEnum.CN.getValue().equals((String) parameter.get("cut"))) { entry.setValue(state.get(0).getItemText()); - }else{ + } else { entry.setValue(state.get(0).getEnName()); } } @@ -1341,8 +1355,8 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl entry.getKey().equals(e.getDictField()) && !FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) .collect(Collectors.toList()); //下拉选处理数据字典 - dictItem(sysDictItems, entry, collect,cut); - treeDictItem(categoryList, entry, treeFieldList,cut); + dictItem(sysDictItems, entry, collect, cut); + treeDictItem(categoryList, entry, treeFieldList, cut); } } //收藏和订阅 @@ -1428,13 +1442,13 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.in(OnlCgformCollection::getDocumentId, idList); - wrapper.eq(OnlCgformCollection::getCreateBy,sysUser.getUsername()); + wrapper.eq(OnlCgformCollection::getCreateBy, sysUser.getUsername()); List collectList = iOnlCgformCollectionService.list(wrapper); List collectIdList = collectList.stream().map(OnlCgformCollection::getDocumentId).collect(Collectors.toList()); //订阅 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.in(OnlCgformSubscribe::getDocumentId, idList); - lambdaQueryWrapper.eq(OnlCgformSubscribe::getCreateBy,sysUser.getUsername()); + lambdaQueryWrapper.eq(OnlCgformSubscribe::getCreateBy, sysUser.getUsername()); List subscribeList = iOnlCgformSubscribeService.list(lambdaQueryWrapper); List subscribeIdList = subscribeList.stream().map(OnlCgformSubscribe::getDocumentId).collect(Collectors.toList()); @@ -1463,7 +1477,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysDictItems, Map.Entry entry, List collect,String cut) { + private void dictItem(List sysDictItems, Map.Entry entry, List collect, String cut) { Map map = new HashMap<>(); //通过dictField判断字段是否为下拉选(不为空则为下拉选) if (collect.size() != 0 && StringUtils.isNotBlank(collect.get(0).getDictField())) { @@ -1483,9 +1497,9 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl itemText = new ArrayList<>(); - if(CutEnum.CN.getValue().equals(cut)){ + if (CutEnum.CN.getValue().equals(cut)) { itemText = dictItems.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); - }else { + } else { itemText = dictItems.stream().map(SysDictItem::getEnName).collect(Collectors.toList()); } dictItemsCh.addAll(itemText); @@ -1494,9 +1508,9 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl !FieldTypeEnum.FILE.getValue().equals(e.getFieldShowType())).collect(Collectors.toList()); } - if(CutEnum.CN.getValue().equals(cut)){ + if (CutEnum.CN.getValue().equals(cut)) { headerFieldList = fieldListTemp.stream().map(OnlCgformField::getDbFieldTxt).collect(Collectors.toList()); - }else{ + } else { headerFieldList = fieldListTemp.stream().map(OnlCgformField::getDbFieldEnName).collect(Collectors.toList()); } } @@ -1642,7 +1656,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl> datas) { List> datasTemp = new ArrayList<>(); for (Map data : datas) { - Map mapTemp = new HashMap<>(); - mapCopy(data,mapTemp); + Map mapTemp = new HashMap<>(); + mapCopy(data, mapTemp); datasTemp.add(mapTemp); } for (Map data : datas) { @@ -1733,40 +1748,40 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl{ + datasTemp.forEach(entry -> { String id = (String) entry.get("id"); String replaceStandardTemp = (String) entry.get("replace_standard"); //对应标准 - if(StringUtils.isNotBlank(correspondingStandard) && correspondingStandard.contains(id)){ - correspondingStandardSb.append((String) entry.get("serial_number")+","); + if (StringUtils.isNotBlank(correspondingStandard) && correspondingStandard.contains(id)) { + correspondingStandardSb.append((String) entry.get("serial_number") + ","); } //代替标准 - if(StringUtils.isNotBlank(replaceStandard) && replaceStandard.contains(id)){ - replaceStandardSb.append((String) entry.get("serial_number")+","); + if (StringUtils.isNotBlank(replaceStandard) && replaceStandard.contains(id)) { + replaceStandardSb.append((String) entry.get("serial_number") + ","); } //被代替标准 - if(StringUtils.isNotBlank(replaceStandardTemp) && replaceStandardTemp.contains(idTemp)){ - replacedStandardSb.append((String) entry.get("serial_number")+","); + if (StringUtils.isNotBlank(replaceStandardTemp) && replaceStandardTemp.contains(idTemp)) { + replacedStandardSb.append((String) entry.get("serial_number") + ","); } }); //对应标准 - if(StringUtils.isNotBlank(correspondingStandardSb)){ + if (StringUtils.isNotBlank(correspondingStandardSb)) { String correspondingStandardStr = correspondingStandardSb.substring(0, correspondingStandardSb.length() - 1); - data.put("corresponding_standard",correspondingStandardStr); + data.put("corresponding_standard", correspondingStandardStr); } //代替标准 - if(StringUtils.isNotBlank(replaceStandardSb)){ + if (StringUtils.isNotBlank(replaceStandardSb)) { String replaceStandardStr = replaceStandardSb.substring(0, replaceStandardSb.length() - 1); - data.put("replace_standard",replaceStandardStr); + data.put("replace_standard", replaceStandardStr); } - if(StringUtils.isNotBlank(replacedStandardSb)){ + if (StringUtils.isNotBlank(replacedStandardSb)) { String replacedStandardStr = replacedStandardSb.substring(0, replacedStandardSb.length() - 1); - data.put("replaced_standard",replacedStandardStr); + data.put("replaced_standard", replacedStandardStr); } } } - public void createDatas(Workbook workbook, Sheet sheet, List> datas, String header, List fieldList,String cut) { + public void createDatas(Workbook workbook, Sheet sheet, List> datas, String header, List fieldList, String cut) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); CellStyle cellStyle = workbook.createCellStyle();//初始化单元格格式对象 cellStyle.setAlignment(HorizontalAlignment.CENTER); @@ -1803,13 +1818,12 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl entry.getKey().equals(e.getDictField()) && !FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) .collect(Collectors.toList()); //下拉选处理数据字典 - dictItem(sysDictItems, entry, collect,cut); + dictItem(sysDictItems, entry, collect, cut); //处理树形数据字典 - treeDictItem(categoryList, entry, treeFieldList,cut); + treeDictItem(categoryList, entry, treeFieldList, cut); } - Row row = sheet.createRow(i + 1); i++; int sheetNum = 0; @@ -2182,21 +2196,22 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl userIdList = new ArrayList<>(); - if(StringUtils.isNotBlank(departIds)){ + if (StringUtils.isNotBlank(departIds)) { //查询部门下的人员 List userList = sysUserService.getUserListByDepIds(Arrays.asList(departIds.split(","))); - if(userList.size() != 0){ + if (userList.size() != 0) { userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList()); } } @@ -2204,44 +2219,443 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper(); - lambdaQueryWrapper.in(BussDocumentLibraryEO::getId,Arrays.asList(documentIds.split(","))); + lambdaQueryWrapper.in(BussDocumentLibraryEO::getId, Arrays.asList(documentIds.split(","))); List> mapList = this.listMaps(lambdaQueryWrapper); List serialNumberList = new ArrayList<>(); for (Map map : mapList) { serialNumberList.add((String) map.get("serial_number")); } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String content = sysUser.getRealname()+"向内推送了"+StringUtils.join(serialNumberList,",")+",请注意查看。"; - String contentInfo = sysUser.getRealname()+"向内推送了"+StringUtils.join(serialNumberList,",")+",请注意查看。"; + String content = sysUser.getRealname() + "向内推送了" + StringUtils.join(serialNumberList, ",") + ",请注意查看。"; + String contentInfo = sysUser.getRealname() + "向内推送了" + StringUtils.join(serialNumberList, ",") + ",请注意查看。"; //封装消息的实体类 SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, content, contentInfo); sysAnnouncementService.saveAnnouncement(sysAnnouncement); - return "推送成功" ; + return "推送成功"; } + /** * 属性字典处理中文 + * * @param categoryList * @param entry * @param treeFieldList * @param cut */ - private void treeDictItem(List categoryList ,Map.Entry entry,List treeFieldList,String cut){ + private void treeDictItem(List categoryList, Map.Entry entry, List treeFieldList, String cut) { List treeFields = treeFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); String key = entry.getKey(); - if(treeFields.contains(entry.getKey())){ + if (treeFields.contains(entry.getKey())) { String value = (String) entry.getValue(); - if(StringUtils.isNotBlank(value)){ + if (StringUtils.isNotBlank(value)) { List idList = Arrays.asList(value.split(",")); List sysCategoryList = categoryList.stream().filter(e -> idList.contains(e.getId())).collect(Collectors.toList()); List nameList = sysCategoryList.stream().map(SysCategory::getName).collect(Collectors.toList()); List nameEnList = sysCategoryList.stream().map(SysCategory::getEnName).collect(Collectors.toList()); - if(CutEnum.CN.getValue().equals(cut)){ - entry.setValue(StringUtils.join(nameList,",")); - }else{ - entry.setValue(StringUtils.join(nameEnList,",")); + if (CutEnum.CN.getValue().equals(cut)) { + entry.setValue(StringUtils.join(nameList, ",")); + } else { + entry.setValue(StringUtils.join(nameEnList, ",")); } } } } + + + @SneakyThrows + @Override + public String importZip(MultipartFile file) { + List list = getWorkbookTitle("cn"); + String result = ""; + int pos = file.getOriginalFilename().lastIndexOf("."); + String str = file.getOriginalFilename().substring(pos + 1).toLowerCase(); + String filenameorg = file.getOriginalFilename().substring(0, pos); + //判断上传文件必须是zip + if (!str.equals("zip") && !str.equals("rar")) { + return "请上传zip格式的文件或rar格式的文件"; + } + String path = uploadpath + "/modal/" + filenameorg; + File saveDirectory = new File(path); + if (!saveDirectory.isDirectory()) { + saveDirectory.mkdir(); + } + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + "/" + file.getOriginalFilename())); + //解压缩 + String zipEntryName = FileUnZip.unZipFiles(path + "/" + file.getOriginalFilename(), path); + // 数据相关处理, + // 1.获取其中的Excel, + List excelfilelist = FileUnZip.readImpExcelFile(zipEntryName); + System.gc(); + if (excelfilelist.size() < 1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return "压缩包内没有上传Excel数据"; + } else if (excelfilelist.size() > 1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return "压缩包内有多个Excel数据源"; + } + File excelfile = excelfilelist.get(0); + + + Workbook workbook = WorkbookFactory.create(excelfile); + List> dataList = new ArrayList<>(); + if (workbook != null) { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet != null) { + StringBuilder headerSb = new StringBuilder(); + int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数 + for (int i = 0; i <= rowNos; i++) {// 遍历行 + if (i == 1) { + continue; + } + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(0); + boolean isBlank = isRowEmpty(row); + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + Map rowList = new LinkedHashMap<>(); + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + headerSb.append(cell.getStringCellValue() + ","); + } else { + if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + rowList.put(headerCell.getStringCellValue(), df.format(d)); + } else { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rowList.put(headerCell.getStringCellValue(), replace); + } + } + } + } else { + if (i != 0) { + rowList.put(headerCell.getStringCellValue(), ""); + } + } + } + if (i != 0) { + dataList.add(rowList); + } + } + } + // 校验头部是否符合模板 + String fields = list.get(0); + String substring = headerSb.substring(0, headerSb.length() - 1); + String excelHeader = substring.toString(); + if (!fields.equals(excelHeader)) { + workbook.close(); + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return "读取失败,请严格按照模板文件导入数据"; + } + } + } + //树形数据字典 + List categoryList = sysCategoryService.list(); + //普通数据字典 + List dictItemList = sysDictItemServiceImpl.selectItemsAll(); + //表头 + List> addForm = getAddForm(ModuleEnum.DOCUMENT_LIBRARY.getValue(), "cn", "add"); + result = exportDatas(dataList, addForm, categoryList, dictItemList, zipEntryName); + return result; + + } + + String exportDatas(List> dataList, + List> fieldList, + List categoryList, + List dictItemList, + String zipEntryName) { + //树形数据字典 + List treeNameList = categoryList.stream().map(SysCategory::getName).collect(Collectors.toList()); + //普通数据字典 + List itemNameList = dictItemList.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + int i = 2; + List msgList = new ArrayList<>(); + Map mapResult = new HashMap<>(); + for (Map stringStringMap : dataList) { + i++; + for (Map.Entry entry : stringStringMap.entrySet()) { + int countError = 0; //记录失败数据数量 + String errorMsg = "第" + i + "行:"; + String key = entry.getKey(); + if (key.contains("*")) { + key = key.replace("*", ""); + } + String value = entry.getValue(); + String field = ""; + for (Map map : fieldList) { + String fieldNameCn = (String) map.get("db_field_txt");//中文名称 + String fieldName = (String) map.get("db_field_name");//字段名 + String mustInput = (String) map.get("field_must_input");//是否必填 + String dbLength = map.get("db_length").toString();//字段长度 + String fieldShowType = (String) map.get("field_show_type");//字段类型 + + if (key.equals(fieldNameCn)) { + field = fieldName; + //验证字段是否必填,长度,下拉框和树形的值是否匹配 + if (FieldTypeEnum.TREE.getValue().equals(fieldShowType)) { + //树形 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //判断数据是否匹配 + if (StringUtils.isNotBlank(value)) { + for (String valueTemp : value.split(",")) { + if (!treeNameList.contains(valueTemp)) { + errorMsg += key + "中的" + valueTemp + "与数据字典不匹配"; + countError++; + } + } + } + String valueId = ""; + //文字转ID + if (StringUtils.isNotBlank(value)) { + for (String valueTemp : value.split(",")) { + if (treeNameList.contains(valueTemp)) { + List collect = categoryList.stream().filter(e -> e.getName().equals(valueTemp)).collect(Collectors.toList()); + valueId += collect.get(0).getId(); + } + } + value = valueId; + } + + } else if (FieldTypeEnum.TEXT_STRING.getValue().equals(fieldShowType)) { + //输入框 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //判断长度 + if (StringUtils.isNotBlank(value) && value.length() > Long.parseLong(dbLength)) { + errorMsg += key + "不能超过" + dbLength + "个字符"; + countError++; + } + + } else if (FieldTypeEnum.TEXT_NUMBER.getValue().equals(fieldShowType)) { + //正则判断仅能为 负号(-),小数点(.)和数字 + + + } else if (FieldTypeEnum.PULL_SINGLE.getValue().equals(fieldShowType)) { + //下拉单选或下拉多选 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //判断是否是单选 + if (StringUtils.isNotBlank(value) && value.contains(",")) { + errorMsg += key + "为单选项"; + countError++; + } + //判断数据是否匹配 + if (StringUtils.isNotBlank(value)) { + if (!itemNameList.contains(value)) { + errorMsg += key + "中的" + value + "与数据字典不匹配"; + countError++; + } + } + //文字转数据字典编码 + if (itemNameList.contains(value)) { + String finalValue = value; + List collect = dictItemList.stream().filter(e -> e.getItemText().equals(finalValue)).collect(Collectors.toList()); + value = collect.get(0).getItemValue(); + } + + } else if (FieldTypeEnum.PULL_MORE.getValue().equals(fieldShowType)) { + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //下拉多选 + for (String valueTemp : value.split(",")) { + if (!itemNameList.contains(valueTemp)) { + errorMsg += key + "中的" + valueTemp + "与数据字典不匹配"; + countError++; + } + } + + String valueId = ""; + //文字转数据字典id + if (StringUtils.isNotBlank(value)) { + for (String valueTemp : value.split(",")) { + if (itemNameList.contains(valueTemp)) { + List collect = dictItemList.stream().filter(e -> e.getItemText().equals(valueTemp)).collect(Collectors.toList()); + valueId += collect.get(0).getItemValue(); + } + } + value = valueId; + } + + + } else if (FieldTypeEnum.DATE_SINGLE.getValue().equals(fieldShowType)) { + //单选日期 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //a判断是否是单日期选择 + if (StringUtils.isNotBlank(value) && value.contains(",")) { + errorMsg += key + "为单日期选项"; + countError++; + } + //判断格式是否正确 + if (!DateUtils.isValidDate((String) value)) { + errorMsg += key + "格式不正确,正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日"; + countError++; + } + + } else if (FieldTypeEnum.DATE_SINGLE.getValue().equals(fieldShowType)) { + //多选日期 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //判断格式是否正确 + if (!DateUtils.isValidDate((String) value)) { + errorMsg += key + "格式不正确,正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日"; + countError++; + } + + + } else if (FieldTypeEnum.FILE.getValue().equals(fieldShowType)) { + //文件 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + if (StringUtils.isNotBlank(value)) { + for (String fileName : value.split(",")) { + List nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName); + if (nowFileList.size() == 0) { + errorMsg += key + "压缩包中没有" + fileName + "文件; "; + countError++; + } else { + try { + FileInputStream input = new FileInputStream(nowFileList.get(0)); + MultipartFile multipartFile = + new MockMultipartFile(nowFileList.get(0).getName(), nowFileList.get(0).getName(), "text/plain", input); + //文件存入文件表 + OSSFile ossFile = iOSSFileService.uploadLocal(multipartFile, ""); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + } else if (FieldTypeEnum.STANDARD.getValue().equals(fieldShowType)) { + //标准选择 + //判断是否必填 + if (IsMustEnum.YES.getValue().equals(mustInput) && StringUtils.isBlank(value)) { + errorMsg += key + "为必填项,不能为空"; + countError++; + } + //判断库中是否存在,如果存在则存id,如果不存在则存输入的值 + List> listBySerialNumber = getListBySerialNumber(value); + String serialNumberStr = ""; + StringBuilder sb = new StringBuilder(); + List list = new ArrayList<>(); + for (Map stringObjectMap : listBySerialNumber) { + sb.append((String) stringObjectMap.get("id") + ","); + list.add((String) stringObjectMap.get("serial_number")); + } + for (String s : value.split(",")) { + if (!list.contains(s)) { + sb.append(s); + } + } + if (ObjectUtils.isNotEmpty(sb)) { + String substring = sb.substring(0, sb.length() - 1); + value = substring; + } + } + } + } + + if (countError > 0) { + msgList.add(errorMsg); + } + mapResult.put(field, value); + } + } + if (msgList.size() > 0) { + //返回报错信息 + String html = ""; + for (String s : msgList) { + html += s + "
"; + } + return html; + } else { + this.addInfo(mapResult); + } + return "数据导入成功"; + + } + + + //判断row是否为空 空返回true + public boolean isRowEmpty(Row row) { + if (null == row) { + return true; + } + int firstCellNum = row.getFirstCellNum(); //第一个列位置 + int lastCellNum = row.getLastCellNum(); //最后一列位置 + int nullCellNum = 0; //空列数量 + for (int c = firstCellNum; c < lastCellNum; c++) { + Cell cell = row.getCell(c); + if (null == cell) { + nullCellNum++; + continue; + } + String value = ""; + switch (cell.getCellType()) { + case HSSFCell.CELL_TYPE_NUMERIC: // 数字 + //如果为时间格式的内容 + value = String.valueOf(cell.getNumericCellValue()); + break; + case HSSFCell.CELL_TYPE_STRING: // 字符串 + value = cell.getStringCellValue(); + break; + case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean + value = cell.getBooleanCellValue() + ""; + break; + case HSSFCell.CELL_TYPE_FORMULA: // 公式 + value = cell.getCellFormula() + ""; + break; + default: + break; + } + if (org.apache.commons.lang.StringUtils.isEmpty(value)) { + nullCellNum++; + } + } + //所有列都为空 + if (nullCellNum == (lastCellNum - firstCellNum)) { + return true; + } + return false; + } + + public List> getListBySerialNumber(String serialNumbers) { + return bussDocumentLibraryEOMapper.getListBySerialNumber(serialNumbers); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java index a5c3af002..bf01fb74b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java @@ -152,4 +152,21 @@ public class FileUnZip { } } + public static List readImpExcelFile(String path) { + File file = new File(path); + List resultlist = new ArrayList<>(); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File fi : files) { + // 对文件进行过滤,只读取Excel文件 + String name = fi.getName(); +// "导入模板".equals(fi.getName()) || "导入模板.xlsx".equals(fi.getName()) + if (name != null &&( fi.getName().contains(".xls") || fi.getName().contains(".xlsx") )){ + resultlist.add(fi); + } + } + } + return resultlist; + } + }