Jelajahi Sumber

Merge remote-tracking branch 'origin/develop' into develop

lijie 3 tahun lalu
induk
melakukan
78ad018b58
52 mengubah file dengan 758 tambahan dan 277 penghapusan
  1. 6 6
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/service/impl/DictDataMapServiceImpl.java
  2. 3 3
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/service/impl/DictDataServiceImpl.java
  3. 6 4
      dmp-business/dmp-rwd-version/src/main/java/com/persagy/dmp/rwd/demand/controller/DictionaryDemandController.java
  4. 1 5
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/CalRuleTypeEnum.java
  5. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/ComputationalStateEnum.java
  6. 1 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/GeoToolsUtil.java
  7. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java
  8. 8 11
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/DigitalEquipClassRelServiceImpl.java
  9. 2 5
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/RelationDefineServiceImpl.java
  10. 5 9
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
  11. 8 9
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java
  12. 2 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java
  13. 1 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java
  14. 3 3
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/iot/service/impl/SettingIotServiceImpl.java
  15. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/InfoDataFactory.java
  16. 1 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/impl/BooleanInfoParser.java
  17. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/impl/MEnumInfoParser.java
  18. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/dao/EquipmentReportMapper.java
  19. 7 7
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/EquipmentReportServiceImpl.java
  20. 1 3
      dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/config/HDFSFileConfiguration.java
  21. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/MessageController.java
  22. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/MessageTypeController.java
  23. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/SenderRegisterController.java
  24. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/MessageMapper.java
  25. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/MessageTypeMapper.java
  26. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/SenderRegisterMapper.java
  27. 30 0
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/dto/AttachmentDTO.java
  28. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/MessageType.java
  29. 11 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/MessageVO.java
  30. 1 1
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/SenderRegister.java
  31. 1 2
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/IMessageService.java
  32. 1 2
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/IMessageTypeService.java
  33. 1 2
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/ISenderRegisterService.java
  34. 2 8
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/MessageServiceImpl.java
  35. 1 6
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/MessageTypeServiceImpl.java
  36. 1 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/SenderRegisterServiceImpl.java
  37. 2 2
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/controller/MessageSenderController.java
  38. 3 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/IMessageSender.java
  39. 3 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/MessageSenderFactory.java
  40. 2 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/AppMessageSender.java
  41. 131 4
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/MailMessageSender.java
  42. 2 3
      dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/SmsMessageSender.java
  43. 14 12
      dmp-cloud/dmp-message/src/main/resources/db/init/schema.sql
  44. 12 0
      dmp-common/pom.xml
  45. 1 1
      dmp-common/src/main/java/com/persagy/dmp/common/handler/CommonExceptionHandler.java
  46. 63 0
      dmp-common/src/main/java/com/persagy/dmp/common/utils/Base64Utils.java
  47. 114 108
      dmp-common/src/main/java/com/persagy/dmp/common/utils/DateHelper.java
  48. 278 0
      dmp-common/src/main/java/com/persagy/dmp/common/utils/ExcelUtils.java
  49. 4 4
      dmp-common/src/main/java/com/persagy/dmp/common/utils/JsonHelper.java
  50. 0 8
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsStorageServiceImpl.java
  51. 0 4
      dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioStorageServiceImpl.java
  52. 13 12
      dmp-server/src/main/java/com/persagy/aspects/RequestLogAspect.java

+ 6 - 6
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/service/impl/DictDataMapServiceImpl.java

@@ -67,8 +67,8 @@ public class DictDataMapServiceImpl implements DictDataMapService {
      */
     @Override
     public DictDataMap update(DictDataMap vo) {
-        DictDataMap DictDataMap = dao.selectById(vo.getId());
-        if (DictDataMap == null || 0 == DictDataMap.getValid()) {
+        DictDataMap dictDataMap = dao.selectById(vo.getId());
+        if (dictDataMap == null || 0 == dictDataMap.getValid()) {
             throw new BusinessException("数据不存在!");
         }
         dao.updateById(vo);
@@ -82,12 +82,12 @@ public class DictDataMapServiceImpl implements DictDataMapService {
      */
     @Override
     public void delete(DictDataMap vo) {
-        DictDataMap DictDataMap = dao.selectById(vo.getId());
-        if (DictDataMap == null || 0 == DictDataMap.getValid()) {
+        DictDataMap dictDataMap = dao.selectById(vo.getId());
+        if (dictDataMap == null || 0 == dictDataMap.getValid()) {
             throw new BusinessException("数据不存在!");
         }
-        DictDataMap.setValid(ValidEnum.FALSE.getType());
-        dao.updateById(DictDataMap);
+        dictDataMap.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(dictDataMap);
     }
 }
 

+ 3 - 3
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/service/impl/DictDataServiceImpl.java

@@ -76,8 +76,8 @@ public class DictDataServiceImpl implements DictDataService {
      */
     @Override
     public DictData update(DictData vo) {
-        DictData DictData = dao.selectById(vo.getId());
-        if (DictData == null || 0 == DictData.getValid()) {
+        DictData dictData = dao.selectById(vo.getId());
+        if (dictData == null || 0 == dictData.getValid()) {
             throw new BusinessException("数据不存在!");
         }
         dao.updateById(vo);
@@ -122,7 +122,7 @@ public class DictDataServiceImpl implements DictDataService {
         List<DictDataMap> dictDataMapList = dictDataMapService.queryByCondition(queryMapWrapper);
 
         //存储映射关系
-        Map<String, DictDataMap> dtDataMapMap = new HashMap<>();
+        Map<String, DictDataMap> dtDataMapMap = new HashMap<>(16);
         for(DictDataMap dictDataMap : dictDataMapList){
            dtDataMapMap.put(dictDataMap.getTargetCode(),dictDataMap);
         }

+ 6 - 4
dmp-business/dmp-rwd-version/src/main/java/com/persagy/dmp/rwd/demand/controller/DictionaryDemandController.java

@@ -58,8 +58,9 @@ public class DictionaryDemandController {
     public CommonResult<DictionaryDemand> save(@Valid @RequestBody DictionaryDemand vo) {
         ParamCheckUtil.checkParam(CommonConstant.QUERY_USERID);
         // 校验
-        if(vo.getBillState() != null && !(DemandBillState.SAVING.getIndex().equals(vo.getBillState())
-                || DemandBillState.SEND_BACK.getIndex().equals(vo.getBillState()))) {
+        boolean canEdit = vo.getBillState() != null && (DemandBillState.SAVING.getIndex().equals(vo.getBillState())
+                || DemandBillState.SEND_BACK.getIndex().equals(vo.getBillState()));
+        if(!canEdit) {
             throw new BusinessException("只有待提交和待完善的需求可以修改");
         }
         vo = service.saveOrSubmit(vo, false);
@@ -75,8 +76,9 @@ public class DictionaryDemandController {
     public CommonResult<DictionaryDemand> submit(@Valid @RequestBody DictionaryDemand vo) {
         ParamCheckUtil.checkParam(CommonConstant.QUERY_USERID);
         // 校验
-        if(vo.getBillState() != null && !(DemandBillState.SAVING.getIndex().equals(vo.getBillState())
-                || DemandBillState.SEND_BACK.getIndex().equals(vo.getBillState()))) {
+        boolean canEdit = vo.getBillState() != null && (DemandBillState.SAVING.getIndex().equals(vo.getBillState())
+                || DemandBillState.SEND_BACK.getIndex().equals(vo.getBillState()));
+        if(!canEdit) {
             throw new BusinessException("只有待提交和待完善的需求可以修改");
         }
         vo = service.saveOrSubmit(vo, true);

+ 1 - 5
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/CalRuleTypeEnum.java

@@ -1,10 +1,6 @@
 package com.persagy.dmp.rwd.basic.constant;
 
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.EnumUtil;
-import lombok.Data;
 import lombok.Getter;
-import lombok.Setter;
 import org.apache.commons.lang3.EnumUtils;
 
 import java.util.List;
@@ -19,7 +15,7 @@ import java.util.stream.Collectors;
  */
 @Getter
 public enum CalRuleTypeEnum {
-
+    /** 计算规则种类 */
     REL_CHAIN("1","relChainCalculateService"),
     COORDINATE("2","coordinateCalculateService"),
     REL_EXTEND("3","relExtendCalculateService");

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/ComputationalStateEnum.java

@@ -10,7 +10,7 @@ import lombok.Getter;
  */
 @Getter
 public enum ComputationalStateEnum {
-
+    /** 计算状态 */
     INIT(1,"初始状态"),
     NEED_COMPUTE(2,"需要计算"),
     COMPUTING(3,"计算中"),

+ 1 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/GeoToolsUtil.java

@@ -55,8 +55,7 @@ public class GeoToolsUtil {
         //注意数据的闭合
         Coordinate[] coordinates = objects.toArray(new Coordinate[0]);
         LinearRing ring = geometryFactory.createLinearRing(coordinates);
-        LinearRing holes[] = null;
-        Polygon polygon = geometryFactory.createPolygon(ring, holes);
+        Polygon polygon = geometryFactory.createPolygon(ring, null);
 
         return polygon;
    }

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java

@@ -109,7 +109,7 @@ public class ObjectInfoController {
         if (StrUtil.isNotBlank(objectTypeDefine.getParentCode())){
             arrayNode.add(objectTypeDefine.getParentCode());
         }
-        objectNode.put(ObjectDigital.CLASS_CODE_HUM,arrayNode);
+        objectNode.set(ObjectDigital.CLASS_CODE_HUM,arrayNode);
     }
 
     @PostMapping("/create")

+ 8 - 11
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/DigitalEquipClassRelServiceImpl.java

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.dmp.basic.dto.DefineRequestData;
-import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.ResponseCode;
@@ -20,7 +19,6 @@ import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.DigitalEquipClassRel;
 import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
-import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
 import com.persagy.dmp.rwd.define.dao.DigitalEquipClassRelMapper;
 import com.persagy.dmp.rwd.define.service.DigitalEquipClassRelService;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
@@ -60,17 +58,16 @@ implements DigitalEquipClassRelService {
         Set<String> calcNames = new HashSet<>();
         // 1.如果关系类型code与图类型编码为空且calcName为空则报错
         for (DigitalEquipClassRel vo : voList) {
-            if ((StrUtil.isBlank(vo.getGraphCode())
-                    || StrUtil.isBlank(vo.getRelCode()))
-                    && StrUtil.isBlank(vo.getCalcName())){
-                throw new BusinessException(ResponseCode.A0402.getCode(),"缺少图类型编码和关系类型编码");
-            }
             if (StrUtil.isNotBlank(vo.getCalcName())){
                 calcNames.add(vo.getCalcName());
+                continue;
+            }
+            if (StrUtil.isBlank(vo.getGraphCode()) || StrUtil.isBlank(vo.getRelCode())){
+                throw new BusinessException(ResponseCode.A0402.getCode(),"缺少图类型编码和关系类型编码");
             }
         }
         // 2.根据名称填充图类型编码及关系类型编码
-        Map<String, RelationDefine> relationDefineMap = new HashMap<>();
+        Map<String, RelationDefine> relationDefineMap = new HashMap<>(16);
         if (CollUtil.isNotEmpty(calcNames)){
             // 根据名称查询图类型编码和关系类型编码
             List<RelationDefine> defines = queryRelationDefinesByRelNames(calcNames);
@@ -193,7 +190,7 @@ implements DigitalEquipClassRelService {
         if (StrUtil.isNotBlank(AppContext.getContext().getProjectId())){
             queryWrapper.eq(DigitalEquipClassRel::getProjectId,AppContext.getContext().getProjectId());
         }
-        Map<String, String> relNameMap = new HashMap<>();
+        Map<String, String> relNameMap = new HashMap<>(16);
         if (CollUtil.isNotEmpty(defineRequestData.getRelNames())){
             queryWrapper.and(wrapper->{
                 Set<String> relNames = defineRequestData.getRelNames();
@@ -230,12 +227,12 @@ implements DigitalEquipClassRelService {
      */
     private Map<String, RelationDefine> queryRelationDefineMapByRelNames(Set<String> relNames) {
         if (CollUtil.isEmpty(relNames)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         // 1.根据边类型名称查询边类型定义
         List<RelationDefine> defines = queryRelationDefinesByRelNames(relNames);
         if (CollUtil.isEmpty(defines)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         // 获得名称与边类型的映射
         return defines.stream()

+ 2 - 5
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/RelationDefineServiceImpl.java

@@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.dmp.common.constant.ValidEnum;
-import com.persagy.dmp.define.entity.DigitalEquipClassRel;
 import com.persagy.dmp.define.entity.RelationDefine;
-import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
-import com.persagy.dmp.rwd.define.dao.DigitalEquipClassRelMapper;
 import com.persagy.dmp.rwd.define.dao.RelationDefineMapper;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
 import org.springframework.stereotype.Service;
@@ -81,7 +78,7 @@ public class RelationDefineServiceImpl  extends ServiceImpl<RelationDefineMapper
     public Map<String, RelationDefine> queryRelMapByCodes(Set<String> graphCodes, Set<String> relCodes) {
         if (CollUtil.isEmpty(graphCodes)
                 || CollUtil.isEmpty(relCodes)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         LambdaQueryWrapper<RelationDefine> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.in(RelationDefine::getGraphCode,graphCodes);
@@ -89,7 +86,7 @@ public class RelationDefineServiceImpl  extends ServiceImpl<RelationDefineMapper
         queryWrapper.eq(RelationDefine::getValid,true);
         List<RelationDefine> relationDefines = this.list(queryWrapper);
         if (CollUtil.isEmpty(relationDefines)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         return relationDefines.stream().collect(Collectors.toMap(relationDefine -> relationDefine.getGraphCode()
                 + StrUtil.UNDERLINE+relationDefine.getCode(),relationDefine -> relationDefine,(k1,k2)->k1));

+ 5 - 9
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -4,16 +4,15 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.mysql.cj.xdevapi.JsonArray;
 import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.model.QueryOperator;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.basic.validations.QueryClassCodeVadition;
 import com.persagy.dmp.basic.validations.QueryFloorIdVadition;
 import com.persagy.dmp.basic.validations.QuerySpaceIdVadition;
@@ -28,9 +27,6 @@ import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
-import com.persagy.dmp.mybatis.utils.ConditionUtil;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
-import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
@@ -330,7 +326,7 @@ public class ObjectDigitalController{
         if (StrUtil.isNotBlank(requestData.getClassCode())){
             ObjectNode classCodeObj = objectMapper.createObjectNode();
             classCodeObj.put(QueryOperator.LIKE_RIGHT.getIndex(),requestData.getClassCode());
-            objectNode.put(ObjectDigital.CLASS_CODE_HUM,classCodeObj);
+            objectNode.set(ObjectDigital.CLASS_CODE_HUM,classCodeObj);
         }
         // 楼层id
         if (StrUtil.isNotBlank(requestData.getFloorId())){
@@ -338,7 +334,7 @@ public class ObjectDigitalController{
             ObjectNode criteriaObj = objectMapper.createObjectNode();
             criteriaObj.put(ObjectRelation.REL_CODE_HUM, DigitalRelCode.EQ_2_FL.getIndex());
             criteriaObj.put(ObjectRelation.OBJ_TO_HUM, requestData.getFloorId());
-            objectNode.put(ObjectRelation.RELATION_FROM_HUM,criteriaObj);
+            objectNode.set(ObjectRelation.RELATION_FROM_HUM,criteriaObj);
         }
         // 系统id
         if (StrUtil.isNotBlank(requestData.getSystemId())){
@@ -346,7 +342,7 @@ public class ObjectDigitalController{
             ObjectNode criteriaObj = objectMapper.createObjectNode();
             criteriaObj.put(ObjectRelation.REL_CODE_HUM, DigitalRelCode.SY_2_EQ.getIndex());
             criteriaObj.put(ObjectRelation.OBJ_FROM_HUM, requestData.getFloorId());
-            objectNode.put(ObjectRelation.RELATION_TO_HUM,criteriaObj);
+            objectNode.set(ObjectRelation.RELATION_TO_HUM,criteriaObj);
         }
         // installLocation安装位置
         if (StrUtil.isNotBlank(requestData.getInstallLocation())){
@@ -368,7 +364,7 @@ public class ObjectDigitalController{
         if (StrUtil.isNotBlank(requestData.getKeyword())){
             ObjectNode keywordObj = objectMapper.createObjectNode();
             keywordObj.put(QueryOperator.LIKE.getIndex(),requestData.getKeyword());
-            objectNode.put(ObjectDigital.LOCAL_NAME_HUM,keywordObj);
+            objectNode.set(ObjectDigital.LOCAL_NAME_HUM,keywordObj);
         }
         // 传值数组
         if (CollUtil.isNotEmpty(requestData.getProjectIds())){

+ 8 - 9
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -45,7 +45,6 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -144,11 +143,11 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
             ObjectDigital newDbVO = dbVO;
             // 合并通用信息点数据
             if (!vo.getObjType().equals(vo.getClassCode())){
-                Map<String, ObjectInfoDefine> commonInfoMap = allInfoMap.getOrDefault(vo.getObjType(), new HashMap<>());
+                Map<String, ObjectInfoDefine> commonInfoMap = allInfoMap.getOrDefault(vo.getObjType(), new HashMap<>(16));
                 dataMerge(newDbVO,vo,commonInfoMap,fieldSet);
             }
             // 合并对象分类信息点数据
-            Map<String, ObjectInfoDefine> infoDefineMap = allInfoMap.getOrDefault(vo.getClassCode(),new HashMap<>());
+            Map<String, ObjectInfoDefine> infoDefineMap = allInfoMap.getOrDefault(vo.getClassCode(),new HashMap<>(16));
             dataMerge(newDbVO,vo,infoDefineMap,fieldSet);
 
             //移除需要删除的信息点
@@ -657,7 +656,7 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
         // 信息点校验器
         for(ObjectDigital vo:voList) {
             //设置自定义信息点
-            Map<String, ObjectInfoDefine> infoMap = new HashMap<>();
+            Map<String, ObjectInfoDefine> infoMap = new HashMap<>(16);
             if(CollUtil.isNotEmpty(allInfoMap)){
                 Map<String, ObjectInfoDefine> infoDefineMap = allInfoMap.get(vo.getClassCode());
                 if(CollUtil.isNotEmpty(infoDefineMap)){
@@ -667,7 +666,7 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
             String objType = objTypeMap.getOrDefault(vo.getClassCode(),"");
             //设置通用信息点
             if(!objType.equals(vo.getClassCode()) && MapUtil.isNotEmpty(allInfoMap)){
-                Map<String, ObjectInfoDefine> commonInfoDefineMap = allInfoMap.getOrDefault(objType,new HashMap<>());
+                Map<String, ObjectInfoDefine> commonInfoDefineMap = allInfoMap.getOrDefault(objType,new HashMap<>(16));
                 if(null!=commonInfoDefineMap && commonInfoDefineMap.size()>0){
                     infoMap.putAll(commonInfoDefineMap);
                 }
@@ -704,7 +703,7 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      * @return
      */
     private Map<String, Object> getRemoveInfo(List<ObjectDigital> voList){
-        Map<String, Object> removeMap = new HashMap<>();
+        Map<String, Object> removeMap = new HashMap<>(16);
         for (ObjectDigital digital : voList) {
             ObjectNode infos = digital.getInfos();
             if(infos!=null){
@@ -789,16 +788,16 @@ public class ObjectDigitalServiceImpl extends ServiceImpl<ObjectDigitalMapper, O
      * 删除需要移除的信息点
      * @param dbVO
      * @param remove
-     * @param BasicfieldSet
+     * @param basicFieldSet
      */
-    private void remove(ObjectDigital dbVO,Object remove,Set<String> BasicfieldSet){
+    private void remove(ObjectDigital dbVO,Object remove,Set<String> basicFieldSet){
         if(remove == null){
             return;
         }
         JSONArray array = JSONArray.parseArray(remove.toString());
         array.forEach(item->{
             String removeCode = (String) item;
-            if(BasicfieldSet.contains(removeCode)){
+            if(basicFieldSet.contains(removeCode)){
                 //基础信息
                 if("name".equals(removeCode)){
                     dbVO.setName(null);

+ 2 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java

@@ -376,7 +376,7 @@ public class RelationCalServiceImpl implements RelationCalService {
      */
     private Map<String, ObjectRelation> queryObjectRelationMapByFromIdAndToIds(String fromId, List<String> toIds) {
         if (StrUtil.isBlank(fromId) || CollUtil.isEmpty(toIds)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         LambdaQueryWrapper<ObjectRelation> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.in(ObjectRelation::getObjTo,toIds);
@@ -384,7 +384,7 @@ public class RelationCalServiceImpl implements RelationCalService {
         queryWrapper.eq(ObjectRelation::getValid,true);
         List<ObjectRelation> objectRelations = objectRelationService.list(queryWrapper);
         if (CollUtil.isEmpty(objectRelations)){
-            return new HashMap<>();
+            return new HashMap<>(16);
         }
         return objectRelations.stream()
                 .collect(Collectors.toMap(objectRelation -> StrUtil.format(CommonConstant.RELATION_UNIQUE_KEY_FORMAT,

+ 1 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java

@@ -16,7 +16,6 @@ import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
-import org.apache.commons.lang.StringUtils;
 
 import java.util.*;
 
@@ -82,7 +81,7 @@ public class ObjectDigitalCriteriaHelper {
      */
     private static void ensureJsonCond(ObjectNode criteria) {
         Iterator<String> fieldNames = criteria.fieldNames();
-        Map<String, JsonNode> valueMap = new HashMap<>();
+        Map<String, JsonNode> valueMap = new HashMap<>(16);
         while (fieldNames.hasNext()) {
             String infoCode = fieldNames.next();
             // 20210903 grouping字段特殊处理,解决mysql关键字问题

+ 3 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/iot/service/impl/SettingIotServiceImpl.java

@@ -3,7 +3,6 @@ package com.persagy.dmp.rwd.iot.service.impl;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -87,7 +86,7 @@ public class SettingIotServiceImpl implements SettingIotService {
         //查询虚拟信息点
         Map<String, List<String>> virtualCodeMap = getVirtualCodeMap(param);
 
-        Map<String, Set<String>> virtualPointCache = new HashMap<>();
+        Map<String, Set<String>> virtualPointCache = new HashMap<>(16);
         for (SettingDataModel model : param) {
             model.setStatus("success");
 
@@ -119,7 +118,8 @@ public class SettingIotServiceImpl implements SettingIotService {
             ObjectNode point = pointValueList.addObject();
             point.put("meter", meter);
             point.put("funcid", Long.parseLong(function));
-            point.put("data", model.getValue()); // TODO 要细分类型
+            // TODO 要细分类型
+            point.put("data", model.getValue());
 
             //设置虚拟信息点
             if (!virtualPointCache.containsKey(objectId)) {

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/InfoDataFactory.java

@@ -48,7 +48,7 @@ public class InfoDataFactory {
             parserMap.put(DigitalDataType.INTEGER.getIndex(), new IntegerInfoParser());
             parserMap.put(DigitalDataType.STRING.getIndex(), new StringInfoParser());
             parserMap.put(DigitalDataType.PIC.getIndex(), new PicInfoParser());
-            parserMap.put(DigitalDataType.MENUM.getIndex(), new MEnumInfoParser());
+            parserMap.put(DigitalDataType.MENUM.getIndex(), new MenumInfoParser());
         }
         // 校验类型传值
         if(!parserMap.containsKey(dataType)) {

+ 1 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/impl/BooleanInfoParser.java

@@ -47,6 +47,7 @@ public class BooleanInfoParser extends AbstractInfoDataParser {
      * @param <T>
      * @return
      */
+    @Override
     protected <T> T formatValue(JsonNode value, Class<T> clazz) throws IOException {
         if(value == null || JsonNodeType.NULL == value.getNodeType()) {
             return null;

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/impl/MEnumInfoParser.java

@@ -17,7 +17,7 @@ import java.util.Set;
  * @author Charlie Yu
  * @date 2021-08-11
  */
-public class MEnumInfoParser extends AbstractInfoDataParser {
+public class MenumInfoParser extends AbstractInfoDataParser {
 
     @Override
     protected void validateDefine(ParserResult result) throws IOException {

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/dao/EquipmentReportMapper.java

@@ -36,7 +36,7 @@ public interface EquipmentReportMapper {
      * @date :2021/9/13 21:50
      * Update By lijie 2021/9/13 21:50
      */
-    List<Map<String, Object>> queryObjectCountByObjInfos(@Param("param") RequestData requestData,@Param("groups") List<GroupDTO> groupDTOS);
+    List<Map<String, Object>> queryObjectCountByObjInfos(@Param("param") RequestData requestData,@Param("groups") List<GroupDTO> groups);
 
     /**
      * 统计当前设备下部件分类及数量

+ 7 - 7
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/EquipmentReportServiceImpl.java

@@ -37,15 +37,15 @@ public class EquipmentReportServiceImpl implements IEquipmentReportService {
     public List<Map<String, Object>> queryExpectScrapCountByProjects(List<String> projectIds) {
         Date date = DateHelper.addMonth(new Date(), 6);
         // 日期格式,标准字典是yyyy-MM-dd,应该不会改。有改动再改为查字典获取格式
-        String scrapDate = DateHelper.DateToString(date, "yyyy-MM-dd");
+        String scrapDate = DateHelper.dateToString(date, "yyyy-MM-dd");
         return mapper.queryExpectScrapCountByProjects(scrapDate, projectIds);
     }
 
     @Override
     public List<CountTypeEquipmentVO> queryEquipmentCountByType(List<String> projectIds) {
         // TODO 获取专业、系统的code,name对照 - 先不转了,回头再加
-        Map<String, String> majorMap = new HashMap<>();
-        Map<String, String> systemMap = new HashMap<>();
+        Map<String, String> majorMap = new HashMap<>(16);
+        Map<String, String> systemMap = new HashMap<>(16);
         // 项目不为空,把平台级和集团级的加上
         if(CollUtil.isNotEmpty(projectIds)) {
             projectIds.add(CommonConstant.DEFAULT_ID);
@@ -69,15 +69,15 @@ public class EquipmentReportServiceImpl implements IEquipmentReportService {
         requestData.setProjectId(AppContext.getContext().getProjectId());
         Set<String> digitalFields = ObjectDigitalCriteriaHelper.DIGITAL_FIELDS;
         List<String> groups = requestData.getGroups();
-        List<GroupDTO> groupDTOS = new ArrayList<>();
+        List<GroupDTO> groupDos = new ArrayList<>();
         for (String group : groups) {
             if (digitalFields.contains(group)){
-                groupDTOS.add(GroupDTO.builder().field(group).column(StrUtil.toUnderlineCase(group)).fieldFlag(true).build());
+                groupDos.add(GroupDTO.builder().field(group).column(StrUtil.toUnderlineCase(group)).fieldFlag(true).build());
                 continue;
             }
-            groupDTOS.add(GroupDTO.builder().field(group).column(group).fieldFlag(false).build());
+            groupDos.add(GroupDTO.builder().field(group).column(group).fieldFlag(false).build());
         }
-        return mapper.queryObjectCountByObjInfos(requestData,groupDTOS);
+        return mapper.queryObjectCountByObjInfos(requestData,groupDos);
     }
 
     /**

+ 1 - 3
dmp-cloud/dmp-file/src/main/java/com/persagy/dmp/file/config/HDFSFileConfiguration.java

@@ -2,9 +2,7 @@ package com.persagy.dmp.file.config;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
-import com.persagy.dmp.file.service.IFileService;
 import lombok.Data;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 
@@ -13,7 +11,7 @@ import java.util.Map;
 @Data
 @Configuration
 @ConfigurationProperties(prefix = "persagy.hdfs.file")
-public class HDFSFileConfiguration {
+public class HdfsFileConfiguration {
 
     private static Map<String,String> accounts;
 

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/MessageController.java

@@ -10,7 +10,7 @@ import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.message.model.MessageVO;
+import com.persagy.dmp.message.model.vo.MessageVO;
 import com.persagy.dmp.message.service.IMessageService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/MessageTypeController.java

@@ -9,7 +9,7 @@ import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.message.model.MessageType;
+import com.persagy.dmp.message.model.vo.MessageType;
 import com.persagy.dmp.message.service.IMessageTypeService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/controller/SenderRegisterController.java

@@ -9,7 +9,7 @@ import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.message.service.ISenderRegisterService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/MessageMapper.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.persagy.dmp.message.model.MessageVO;
+import com.persagy.dmp.message.model.vo.MessageVO;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/MessageTypeMapper.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.persagy.dmp.message.model.MessageType;
+import com.persagy.dmp.message.model.vo.MessageType;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/dao/SenderRegisterMapper.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 30 - 0
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/dto/AttachmentDTO.java

@@ -0,0 +1,30 @@
+package com.persagy.dmp.message.model.dto;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 邮件所附属附件DTO
+ * @author linhuili
+ * @date 2021-09-30
+ */
+@Data
+public class AttachmentDTO {
+
+    /** 附件名称 */
+    private String attachmentName;
+
+    /** 附件base64字符串 */
+    private String attachmentValue;
+
+    /** sheet页名称 */
+    private String sheetName;
+
+    /** sheetLines */
+    private JSONArray sheetLines;
+
+    /** 此参数生成带excel的附件,数组为每一行数据 */
+    private List<AttachmentDTO> attachmentExcelArray;
+}

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/MessageType.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.message.model;
+package com.persagy.dmp.message.model.vo;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.BaseEntity;

+ 11 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/MessageVO.java

@@ -1,12 +1,15 @@
-package com.persagy.dmp.message.model;
+package com.persagy.dmp.message.model.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
+import com.persagy.dmp.message.model.dto.AttachmentDTO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * 消息
@@ -21,14 +24,19 @@ public class MessageVO extends AuditableEntity {
     /** 消息类型 */
     @NotNull(message = "消息类型ID不允许为空")
     private String typeId;
-    /** 接收用户 */
+    /** 接收用户,多个接收者可以用逗号分隔,最多100个地址 */
     private String userId;
+    /** 抄送用户, 多个抄送者可以用逗号分隔,最多100个地址(主要用于邮箱发送) */
+    private String copyToUserId;
     /** 消息标题 */
     @NotNull(message = "消息标题不允许为空")
     private String title;
     /** 消息详情 */
     @NotNull(message = "消息内容不允许为空")
     private String content;
+    /** 消息附件 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<AttachmentDTO> attachments;
     /** 关联业务主键 */
     private String businessId;
     /** 所属项目 */

+ 1 - 1
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/model/SenderRegister.java

@@ -1,4 +1,4 @@
-package com.persagy.dmp.message.model;
+package com.persagy.dmp.message.model.vo;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.BaseEntity;

+ 1 - 2
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/IMessageService.java

@@ -2,8 +2,7 @@ package com.persagy.dmp.message.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
 import com.persagy.dmp.sender.service.IMessageSender;
 
 import java.util.List;

+ 1 - 2
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/IMessageTypeService.java

@@ -2,8 +2,7 @@ package com.persagy.dmp.message.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.message.model.MessageType;
+import com.persagy.dmp.message.model.vo.MessageType;
 
 import java.util.List;
 

+ 1 - 2
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/ISenderRegisterService.java

@@ -2,8 +2,7 @@ package com.persagy.dmp.message.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.persagy.dmp.message.model.MessageType;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 
 import java.util.List;
 

+ 2 - 8
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/MessageServiceImpl.java

@@ -1,17 +1,14 @@
 package com.persagy.dmp.message.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.text.StrFormatter;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.message.dao.MessageMapper;
-import com.persagy.dmp.message.model.MessageType;
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.message.service.IMessageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Primary;
@@ -19,9 +16,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * 消息 服务实现
@@ -122,5 +117,4 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, MessageVO> im
     public List<MessageVO> load(List<String> ids) {
         return dao.selectBatchIds(ids);
     }
-
 }

+ 1 - 6
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/MessageTypeServiceImpl.java

@@ -4,17 +4,13 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.text.StrFormatter;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.message.dao.MessageTypeMapper;
-import com.persagy.dmp.message.model.MessageType;
+import com.persagy.dmp.message.model.vo.MessageType;
 import com.persagy.dmp.message.service.IMessageTypeService;
-import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +19,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * 消息类型 服务实现

+ 1 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/message/service/impl/SenderRegisterServiceImpl.java

@@ -9,9 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.message.dao.SenderRegisterMapper;
-import com.persagy.dmp.message.dao.SenderRegisterMapper;
-import com.persagy.dmp.message.model.SenderRegister;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.message.service.ISenderRegisterService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;

+ 2 - 2
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/controller/MessageSenderController.java

@@ -3,7 +3,7 @@ package com.persagy.dmp.sender.controller;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
-import com.persagy.dmp.message.model.MessageVO;
+import com.persagy.dmp.message.model.vo.MessageVO;
 import com.persagy.dmp.sender.service.IMessageSender;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -28,7 +28,7 @@ public class MessageSenderController {
      * @param messageVO
      */
     @PostMapping("/send")
-    public CommonResult<MessageVO> send(@RequestBody MessageVO messageVO){
+    public CommonResult<MessageVO> send(@RequestBody MessageVO messageVO) throws Exception{
        if(messageVO == null){
            throw new BusinessException(ResponseCode.A0400.getCode(), "消息体不能为空!");
        }

+ 3 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/IMessageSender.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.sender.service;
 
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 
 /**
  * 消息 执行接口
@@ -21,5 +21,5 @@ public interface IMessageSender {
      * 发送消息
      * @param vo
      */
-    void send(MessageVO vo);
+    void send(MessageVO vo) throws Exception;
 }

+ 3 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/MessageSenderFactory.java

@@ -5,8 +5,8 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.helper.SpringHelper;
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.message.service.ISenderRegisterService;
 import lombok.extern.slf4j.Slf4j;
 
@@ -29,7 +29,7 @@ public class MessageSenderFactory {
      * 发送消息
      * @param vo
      */
-    public void sendMessage(MessageVO vo) {
+    public void sendMessage(MessageVO vo) throws Exception{
         if(vo == null || StrUtil.isBlank(vo.getTypeId())
                 || StrUtil.isBlank(vo.getSendChannel())) {
             return;

+ 2 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/AppMessageSender.java

@@ -9,11 +9,10 @@ import com.aliyuncs.profile.IClientProfile;
 import com.aliyuncs.push.model.v20160801.PushRequest;
 import com.aliyuncs.push.model.v20160801.PushResponse;
 import com.aliyuncs.utils.ParameterHelper;
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.sender.service.IMessageSender;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;

+ 131 - 4
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/MailMessageSender.java

@@ -1,13 +1,26 @@
 package com.persagy.dmp.sender.service.impl;
 
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.common.utils.Base64Utils;
+import com.persagy.dmp.common.utils.ExcelUtils;
+import com.persagy.dmp.message.model.dto.AttachmentDTO;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.sender.service.IMessageSender;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
-import org.springframework.stereotype.Component;
+import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Service;
 
+import javax.mail.internet.MimeMessage;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -21,6 +34,9 @@ public class MailMessageSender implements IMessageSender {
     @Autowired
     private JavaMailSenderImpl mailSender;
 
+    @Value("${spring.mail.username}")
+    private String userFrom;
+
     @Override
     public boolean initParam(SenderRegister register) {
         Properties javaMailProperties = new Properties();
@@ -32,7 +48,118 @@ public class MailMessageSender implements IMessageSender {
     }
 
     @Override
-    public void send(MessageVO vo) {
+    public void send(MessageVO vo) throws Exception{
+        //邮件发送参数校验
+        checkParam(vo);
+        //邮件发送
+        this.push(vo);
+    }
+
+    /**
+     * 邮件发送
+     * @param vo
+     */
+    private void push(MessageVO vo){
+        MimeMessage mimeMessage = this.mailSender.createMimeMessage();
+        List<String> tempFiles = new ArrayList<>();
+        MimeMessageHelper helper = null;
+        try {
+            helper = new MimeMessageHelper(mimeMessage, true);
+            //设置发送人
+            helper.setFrom(userFrom);
+            //设置接收人
+            helper.setTo(vo.getUserId());
+            //设置抄送人
+            if (StringUtils.isNotEmpty(vo.getCopyToUserId())) {
+                helper.setCc(vo.getCopyToUserId().split(","));
+            }
+            //设置主题
+            helper.setSubject(vo.getTitle());
+            //设置邮件内容
+            helper.setText(vo.getContent());
+
+            //设置邮件附件信息
+            List<AttachmentDTO> attachments = vo.getAttachments();
+            String html = "";
+            for (AttachmentDTO attachment : attachments) {
+                //根据附件base64字符串添加附件信息
+                if(StringUtils.isNotEmpty(attachment.getAttachmentValue())){
+                    File file = Base64Utils.base64ToFile(attachment.getAttachmentValue());
+                    helper.addAttachment(attachment.getAttachmentName(), file);
+                    tempFiles.add(file.getAbsolutePath());
+                    continue;
+                }
+
+                //根据sheet页填充附件内容
+                ExcelUtils.ExcelModel excelModel = new ExcelUtils.ExcelModel();
+                for (int i = 0; i < attachment.getAttachmentExcelArray().size(); i++) {
+                    AttachmentDTO attachmentExcel = attachment.getAttachmentExcelArray().get(i);
+                    ExcelUtils.ExcelModel sheet = new ExcelUtils.ExcelModel();
+                    sheet.setSheetName(attachmentExcel.getSheetName());
+                    sheet.setSheetLines(attachmentExcel.getSheetLines());
+                    html += ExcelUtils.html(attachmentExcel.getSheetLines());
+                    excelModel.addSheet(sheet);
+                }
+                //添加附件信息
+                String tempFile = attachment.getAttachmentName().endsWith("xls") ? IdUtil.simpleUUID() + "xls" : IdUtil.simpleUUID() + ".xlsx";
+                ExcelUtils.writeInfoToExcel(tempFile, excelModel);
+                helper.addAttachment(attachment.getAttachmentName(), new File(tempFile));
+                tempFiles.add(tempFile);
+            }
+            //邮件发送
+            mailSender.send(mimeMessage);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            //删除临时文件
+            if (tempFiles.size() > 0) {
+                for (String tempFile : tempFiles) {
+                    ExcelUtils.deleteFile(tempFile);
+                }
+            }
+        }
+    }
+
+    /**
+     * 邮箱发送请求校验
+     * @param messageVO
+     * @throws Exception
+     */
+    private void checkParam(MessageVO messageVO) throws Exception{
+        //校验邮箱发送时间是否超时
+        long creationTime = messageVO.getCreationTime().getDate().getTime();
+        long nowDate = new Date().getTime();
+        if(nowDate - creationTime > 1000*60*10){
+            throw new BusinessException("请求超时");
+        }
+        List<AttachmentDTO> attachments = messageVO.getAttachments();
+        if(CollUtil.isNotEmpty(attachments)){
+            for (AttachmentDTO attachment : attachments) {
+                String attachmentName = attachment.getAttachmentName();
+                //附件名称校验
+                if(StringUtils.isNotEmpty(attachmentName)){
+                    throw new BusinessException("附件名称不能为空");
+                }
 
+                //附件内容校验
+                String attachmentValue = attachment.getAttachmentValue();
+                List<AttachmentDTO> attachmentExcelArray = attachment.getAttachmentExcelArray();
+                if (StringUtils.isEmpty(attachmentValue) && CollUtil.isEmpty(attachmentExcelArray)) {
+                    throw new BusinessException("attachmentValue或attachmentExcelArray不能同时为空");
+                }
+                if(CollUtil.isNotEmpty(attachmentExcelArray)){
+                    for (AttachmentDTO attach : attachmentExcelArray) {
+                        //sheet页名称非空校验
+                        if(StringUtils.isEmpty(attach.getSheetName())){
+                            throw new BusinessException("未设置excel sheet名称");
+                        }
+                        //excel内容非空校验
+                        if(CollUtil.isEmpty(attach.getSheetLines())){
+                            throw new BusinessException("excel未设置内容");
+                        }
+                    }
+                }
+            }
+        }
     }
 }

+ 2 - 3
dmp-cloud/dmp-message/src/main/java/com/persagy/dmp/sender/service/impl/SmsMessageSender.java

@@ -1,9 +1,8 @@
 package com.persagy.dmp.sender.service.impl;
 
-import com.persagy.dmp.message.model.MessageVO;
-import com.persagy.dmp.message.model.SenderRegister;
+import com.persagy.dmp.message.model.vo.MessageVO;
+import com.persagy.dmp.message.model.vo.SenderRegister;
 import com.persagy.dmp.sender.service.IMessageSender;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 
 /**

+ 14 - 12
dmp-cloud/dmp-message/src/main/resources/db/init/schema.sql

@@ -45,18 +45,20 @@ CREATE TABLE IF NOT EXISTS "dt_message" (
 "id" varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id',
 "type_id" varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息类型',
 "user_id" varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '接收用户',
-"title" varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息标题',
-"content" text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息详情',
-"business_id" varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '关联业务主键',
-"project_id" varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '所属项目',
-"send_channel" varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发送渠道',
+"copy_to_user_id" text COMMENT '抄送用户,多个抄送者可以用逗号分隔,最多100个地址(主要用于邮箱发送)',
+"title" varchar(255) NOT NULL,
+"content" text NOT NULL,
+"business_id" varchar(40) DEFAULT NULL,
+"project_id" varchar(40) DEFAULT NULL,
+"send_channel" varchar(255) NOT NULL COMMENT '发送渠道',
 "read_flag" tinyint(1) DEFAULT NULL COMMENT '已读标示',
 "top_flag" tinyint(1) DEFAULT NULL COMMENT '置顶标示',
-"creator" varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人',
-"creation_time" char(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建时间',
-"modifier" varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改人',
-"modified_time" char(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改时间',
-"valid" tinyint(1) DEFAULT NULL COMMENT '合法标识',
-"ts" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '乐观锁',
+"attachments" json DEFAULT NULL COMMENT '附件',
+"creator" varchar(32) DEFAULT NULL,
+"creation_time" char(14) DEFAULT NULL,
+"modifier" varchar(32) DEFAULT NULL,
+"modified_time" char(14) DEFAULT NULL,
+"valid" tinyint(1) DEFAULT NULL,
+"ts" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY ("id") USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

+ 12 - 0
dmp-common/pom.xml

@@ -36,5 +36,17 @@
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.17</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.17</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 1 - 1
dmp-common/src/main/java/com/persagy/dmp/common/handler/CommonExceptionHandler.java

@@ -51,7 +51,7 @@ public class CommonExceptionHandler {
      * @return
      */
     @ExceptionHandler(SQLException.class)
-    public CommonResult handleSQLException(SQLException e) {
+    public CommonResult handleSqlException(SQLException e) {
         log.error(e.getMessage(), e);
         return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getMessage());
     }

+ 63 - 0
dmp-common/src/main/java/com/persagy/dmp/common/utils/Base64Utils.java

@@ -0,0 +1,63 @@
+package com.persagy.dmp.common.utils;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Base64;
+
+
+ /**
+ * Base64Utils
+ * @author linhuili
+ * @date 2021-09-30
+ */
+public class Base64Utils {
+
+     /**
+      * base64编码格式的数据转成文件
+      * @param base64
+      * @return
+      */
+    public static File base64ToFile(String base64) {
+
+        if (base64 == null || "".equals(base64)) {
+            return null;
+        }
+        byte[] buff = Base64.getDecoder().decode(base64);
+        File file = null;
+        FileOutputStream fout = null;
+        try {
+            file = File.createTempFile("tmp", null);
+            fout = new FileOutputStream(file);
+            fout.write(buff);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (fout != null) {
+                try {
+                    fout.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return file;
+    }
+
+
+    public static String encryptToBase64(String filePath) {
+        if (filePath == null) {
+            return null;
+        }
+        try {
+            byte[] b = Files.readAllBytes(Paths.get(filePath));
+            return Base64.getEncoder().encodeToString(b);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+}

+ 114 - 108
dmp-common/src/main/java/com/persagy/dmp/common/utils/DateHelper.java

@@ -18,9 +18,9 @@ import java.util.*;
 @Slf4j
 public class DateHelper {
 
-	private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>();
+	private static final ThreadLocal<SimpleDateFormat> THREAD_LOCAL = new ThreadLocal<>();
 
-	private static final Object object = new Object();
+	private static final Object INSTANCE = new Object();
 
 	/**
 	 * 获取SimpleDateFormat
@@ -30,13 +30,13 @@ public class DateHelper {
 	 * @throws RuntimeException 异常:非法日期格式
 	 */
 	private static SimpleDateFormat getDateFormat(String pattern) throws RuntimeException {
-		SimpleDateFormat dateFormat = threadLocal.get();
+		SimpleDateFormat dateFormat = THREAD_LOCAL.get();
 		if (dateFormat == null) {
-			synchronized (object) {
+			synchronized (INSTANCE) {
 				if (dateFormat == null) {
 					dateFormat = new SimpleDateFormat(pattern);
 					dateFormat.setLenient(false);
-					threadLocal.set(dateFormat);
+					THREAD_LOCAL.set(dateFormat);
 				}
 			}
 		}
@@ -73,9 +73,9 @@ public class DateHelper {
 		String dateString = null;
 		DateStyle dateStyle = getDateStyle(date);
 		if (dateStyle != null) {
-			Date myDate = StringToDate(date, dateStyle);
+			Date myDate = stringToDate(date, dateStyle);
 			myDate = addInteger(myDate, dateType, amount);
-			dateString = DateToString(myDate, dateStyle);
+			dateString = dateToString(myDate, dateStyle);
 		}
 		return dateString;
 	}
@@ -124,7 +124,7 @@ public class DateHelper {
 	private static Date getAccurateDate(List<Long> timestamps) {
 		Date date = null;
 		long timestamp = 0;
-		Map<Long, long[]> map = new HashMap<Long, long[]>();
+		Map<Long, long[]> map = new HashMap<>(16);
 		List<Long> absoluteValues = new ArrayList<Long>();
 
 		if (timestamps != null && timestamps.size() > 0) {
@@ -194,8 +194,8 @@ public class DateHelper {
 	 */
 	public static DateStyle getDateStyle(String date) {
 		DateStyle dateStyle = null;
-		Map<Long, DateStyle> map = new HashMap<Long, DateStyle>();
-		List<Long> timestamps = new ArrayList<Long>();
+		Map<Long, DateStyle> map = new HashMap<>(16);
+		List<Long> timestamps = new ArrayList<>();
 		for (DateStyle style : DateStyle.values()) {
 			if (style.isShowOnly()) {
 				continue;
@@ -229,9 +229,9 @@ public class DateHelper {
 	 * @param date 日期字符串
 	 * @return 日期
 	 */
-	public static Date StringToDate(String date) {
+	public static Date stringToDate(String date) {
 		DateStyle dateStyle = getDateStyle(date);
-		return StringToDate(date, dateStyle);
+		return stringToDate(date, dateStyle);
 	}
 
 	/**
@@ -241,7 +241,7 @@ public class DateHelper {
 	 * @param pattern 日期格式
 	 * @return 日期
 	 */
-	public static Date StringToDate(String date, String pattern) {
+	public static Date stringToDate(String date, String pattern) {
 		Date myDate = null;
 		if (date != null) {
 			try {
@@ -259,10 +259,10 @@ public class DateHelper {
 	 * @param dateStyle 日期风格
 	 * @return 日期
 	 */
-	public static Date StringToDate(String date, DateStyle dateStyle) {
+	public static Date stringToDate(String date, DateStyle dateStyle) {
 		Date myDate = null;
 		if (dateStyle != null) {
-			myDate = StringToDate(date, dateStyle.getValue());
+			myDate = stringToDate(date, dateStyle.getValue());
 		}
 		return myDate;
 	}
@@ -274,7 +274,7 @@ public class DateHelper {
 	 * @param pattern 日期格式
 	 * @return 日期字符串
 	 */
-	public static String DateToString(Date date, String pattern) {
+	public static String dateToString(Date date, String pattern) {
 		String dateString = null;
 		if (date != null) {
 			try {
@@ -292,10 +292,10 @@ public class DateHelper {
 	 * @param dateStyle 日期风格
 	 * @return 日期字符串
 	 */
-	public static String DateToString(Date date, DateStyle dateStyle) {
+	public static String dateToString(Date date, DateStyle dateStyle) {
 		String dateString = null;
 		if (dateStyle != null) {
-			dateString = DateToString(date, dateStyle.getValue());
+			dateString = dateToString(date, dateStyle.getValue());
 		}
 		return dateString;
 	}
@@ -307,9 +307,9 @@ public class DateHelper {
 	 * @param newPattern 新日期格式
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, String newPattern) {
+	public static String stringToString(String date, String newPattern) {
 		DateStyle oldDateStyle = getDateStyle(date);
-		return StringToString(date, oldDateStyle, newPattern);
+		return stringToString(date, oldDateStyle, newPattern);
 	}
 
 	/**
@@ -319,9 +319,9 @@ public class DateHelper {
 	 * @param newDateStyle 新日期风格
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, DateStyle newDateStyle) {
+	public static String stringToString(String date, DateStyle newDateStyle) {
 		DateStyle oldDateStyle = getDateStyle(date);
-		return StringToString(date, oldDateStyle, newDateStyle);
+		return stringToString(date, oldDateStyle, newDateStyle);
 	}
 
 	/**
@@ -332,8 +332,8 @@ public class DateHelper {
 	 * @param newPattern 新日期格式
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, String olddPattern, String newPattern) {
-		return DateToString(StringToDate(date, olddPattern), newPattern);
+	public static String stringToString(String date, String olddPattern, String newPattern) {
+		return dateToString(stringToDate(date, olddPattern), newPattern);
 	}
 
 	/**
@@ -344,10 +344,10 @@ public class DateHelper {
 	 * @param newParttern 新日期格式
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, DateStyle olddDteStyle, String newParttern) {
+	public static String stringToString(String date, DateStyle olddDteStyle, String newParttern) {
 		String dateString = null;
 		if (olddDteStyle != null) {
-			dateString = StringToString(date, olddDteStyle.getValue(), newParttern);
+			dateString = stringToString(date, olddDteStyle.getValue(), newParttern);
 		}
 		return dateString;
 	}
@@ -360,10 +360,10 @@ public class DateHelper {
 	 * @param newDateStyle 新日期风格
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, String olddPattern, DateStyle newDateStyle) {
+	public static String stringToString(String date, String olddPattern, DateStyle newDateStyle) {
 		String dateString = null;
 		if (newDateStyle != null) {
-			dateString = StringToString(date, olddPattern, newDateStyle.getValue());
+			dateString = stringToString(date, olddPattern, newDateStyle.getValue());
 		}
 		return dateString;
 	}
@@ -376,10 +376,10 @@ public class DateHelper {
 	 * @param newDateStyle 新日期风格
 	 * @return 新日期字符串
 	 */
-	public static String StringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) {
+	public static String stringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) {
 		String dateString = null;
 		if (olddDteStyle != null && newDateStyle != null) {
-			dateString = StringToString(date, olddDteStyle.getValue(), newDateStyle.getValue());
+			dateString = stringToString(date, olddDteStyle.getValue(), newDateStyle.getValue());
 		}
 		return dateString;
 	}
@@ -523,7 +523,7 @@ public class DateHelper {
 	 * @return 年份
 	 */
 	public static int getYear(String date) {
-		return getYear(StringToDate(date));
+		return getYear(stringToDate(date));
 	}
 
 	/**
@@ -543,7 +543,7 @@ public class DateHelper {
 	 * @return 月份
 	 */
 	public static int getMonth(String date) {
-		return getMonth(StringToDate(date));
+		return getMonth(stringToDate(date));
 	}
 
 	/**
@@ -563,7 +563,7 @@ public class DateHelper {
 	 * @return 天
 	 */
 	public static int getDay(String date) {
-		return getDay(StringToDate(date));
+		return getDay(stringToDate(date));
 	}
 
 	/**
@@ -583,7 +583,7 @@ public class DateHelper {
 	 * @return 小时
 	 */
 	public static int getHour(String date) {
-		return getHour(StringToDate(date));
+		return getHour(stringToDate(date));
 	}
 
 	/**
@@ -603,7 +603,7 @@ public class DateHelper {
 	 * @return 分钟
 	 */
 	public static int getMinute(String date) {
-		return getMinute(StringToDate(date));
+		return getMinute(stringToDate(date));
 	}
 
 	/**
@@ -623,7 +623,7 @@ public class DateHelper {
 	 * @return 秒钟
 	 */
 	public static int getSecond(String date) {
-		return getSecond(StringToDate(date));
+		return getSecond(stringToDate(date));
 	}
 
 	/**
@@ -643,7 +643,7 @@ public class DateHelper {
 	 * @return 日期
 	 */
 	public static String getDate(String date) {
-		return StringToString(date, DateStyle.YYYY_MM_DD);
+		return stringToString(date, DateStyle.YYYY_MM_DD);
 	}
 
 	/**
@@ -653,7 +653,7 @@ public class DateHelper {
 	 * @return 日期
 	 */
 	public static String getDate(Date date) {
-		return DateToString(date, DateStyle.YYYY_MM_DD);
+		return dateToString(date, DateStyle.YYYY_MM_DD);
 	}
 
 	/**
@@ -663,7 +663,7 @@ public class DateHelper {
 	 * @return 时间
 	 */
 	public static String getTime(String date) {
-		return StringToString(date, DateStyle.HH_MM_SS);
+		return stringToString(date, DateStyle.HH_MM_SS);
 	}
 
 	/**
@@ -673,7 +673,7 @@ public class DateHelper {
 	 * @return 时间
 	 */
 	public static String getTime(Date date) {
-		return DateToString(date, DateStyle.HH_MM_SS);
+		return dateToString(date, DateStyle.HH_MM_SS);
 	}
 
 	/**
@@ -684,7 +684,7 @@ public class DateHelper {
 	 * @return 相差天数。如果失败则返回-1
 	 */
 	public static int getIntervalDays(String date, String otherDate) {
-		return getIntervalDays(StringToDate(date), StringToDate(otherDate));
+		return getIntervalDays(stringToDate(date), stringToDate(otherDate));
 	}
 
 	/**
@@ -694,8 +694,8 @@ public class DateHelper {
 	 */
 	public static int getIntervalDays(Date date, Date otherDate) {
 		int num = -1;
-		Date dateTmp = DateHelper.StringToDate(DateHelper.getDate(date), DateStyle.YYYY_MM_DD);
-		Date otherDateTmp = DateHelper.StringToDate(DateHelper.getDate(otherDate), DateStyle.YYYY_MM_DD);
+		Date dateTmp = DateHelper.stringToDate(DateHelper.getDate(date), DateStyle.YYYY_MM_DD);
+		Date otherDateTmp = DateHelper.stringToDate(DateHelper.getDate(otherDate), DateStyle.YYYY_MM_DD);
 		if (dateTmp != null && otherDateTmp != null) {
 			long time = Math.abs(dateTmp.getTime() - otherDateTmp.getTime());
 			num = (int) (time / (24 * 60 * 60 * 1000));
@@ -711,7 +711,7 @@ public class DateHelper {
 	 */
 	public static Date getDayStart(Date date) {
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
-		return StringToDate(sdf.format(date));
+		return stringToDate(sdf.format(date));
 	}
 
 	/**
@@ -722,7 +722,7 @@ public class DateHelper {
 	 */
 	public static Date getDayEnd(Date date) {
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
-		return StringToDate(sdf.format(date));
+		return stringToDate(sdf.format(date));
 	}
 
 	/**
@@ -731,11 +731,12 @@ public class DateHelper {
 	 * @return
 	 */
 	public static Date getCurrentWeekStart(Date date) {
-		Map<String, String> map = new HashMap<String, String>();
+		Map<String, String> map = new HashMap<>(16);
 		Calendar cal = Calendar.getInstance();
 		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
-		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 获取本周一的日期
-		return StringToDate(df.format(cal.getTime()));
+		// 获取本周一的日期
+		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+		return stringToDate(df.format(cal.getTime()));
 	}
 
 	/**
@@ -744,13 +745,13 @@ public class DateHelper {
 	 * @return
 	 */
 	public static Date getCurrentWeekEnd() {
-		Map<String, String> map = new HashMap<String, String>();
+		Map<String, String> map = new HashMap<>(16);
 		Calendar cal = Calendar.getInstance();
 		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
 		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
 		// 增加一个星期,才是我们中国人理解的本周日的日期
 		cal.add(Calendar.WEEK_OF_YEAR, 1);
-		return StringToDate(df.format(cal.getTime()));
+		return stringToDate(df.format(cal.getTime()));
 	}
 
 	/**
@@ -759,11 +760,13 @@ public class DateHelper {
 	 * @return
 	 */
 	public static Date getCurrentMonthStart() {
-		Calendar cal = Calendar.getInstance();// 获取当前日期
+		// 获取当前日期
+		Calendar cal = Calendar.getInstance();
 		cal.add(Calendar.MONTH, 0);
-		cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+		// 设置为1号,当前日期既为本月第一天
+		cal.set(Calendar.DAY_OF_MONTH, 1);
 		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
-		return StringToDate(df.format(cal.getTime()));
+		return stringToDate(df.format(cal.getTime()));
 	}
 
 	/**
@@ -776,7 +779,7 @@ public class DateHelper {
 		// 设置为1号,当前日期既为本月第一天
 		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
 		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
-		return StringToDate(df.format(cal.getTime()));
+		return stringToDate(df.format(cal.getTime()));
 	}
 
 	/**
@@ -787,17 +790,19 @@ public class DateHelper {
 	 * @return
 	 */
 	public static Date getMonthStart(String strYear, String strMonth) {
-		Calendar cal = Calendar.getInstance();// 获取当前日期
+		// 获取当前日期
+		Calendar cal = Calendar.getInstance();
 		cal.set(Calendar.YEAR, Integer.parseInt(strYear));
 		cal.set(Calendar.MONTH, Integer.parseInt(strMonth));
-		cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+		// 设置为1号,当前日期既为本月第一天
+		cal.set(Calendar.DAY_OF_MONTH, 1);
 		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
 		cal.set(Calendar.DAY_OF_MONTH, 1);
 		cal.add(Calendar.DAY_OF_MONTH, -1);
 		cal.set(Calendar.DAY_OF_MONTH, 1);
 		Date firstDate = cal.getTime();
 
-		return StringToDate(df.format(firstDate));
+		return stringToDate(df.format(firstDate));
 	}
 
 	/**
@@ -817,7 +822,7 @@ public class DateHelper {
 		cal.set(Calendar.DAY_OF_MONTH, 1);
 		cal.add(Calendar.DAY_OF_MONTH, -1);
 		Date lastDate = cal.getTime();
-		return StringToDate(df.format(lastDate));
+		return stringToDate(df.format(lastDate));
 	}
 
 	/**
@@ -872,7 +877,8 @@ public class DateHelper {
 			list = new ArrayList<String>();
 
 			String firstDay = StrUtil.EMPTY;
-			Date date = new SimpleDateFormat("yyyy-MM").parse(month);// 定义起始日期
+			// 定义起始日期
+			Date date = new SimpleDateFormat("yyyy-MM").parse(month);
 
 			Date now = new Date();
 
@@ -880,13 +886,13 @@ public class DateHelper {
 				date = now;
 			}
 
-			List<String> mlist = getYearMonthBetweenDate(DateToString(date, "yyyy-MM"), DateToString(now, "yyyy-MM"));
+			List<String> mlist = getYearMonthBetweenDate(dateToString(date, "yyyy-MM"), dateToString(now, "yyyy-MM"));
 
 			if (mlist.size() <= offset) {
 				int preOffSet = offset * 2 + 1 - mlist.size();
 				for (int i = preOffSet; i >= 1; i--) {
 					Date d = addMonth(date, i * -1);
-					list.add(DateToString(d, "yyyy-MM"));
+					list.add(dateToString(d, "yyyy-MM"));
 				}
 				list.addAll(mlist);
 				return list;
@@ -895,7 +901,7 @@ public class DateHelper {
 			// 往前数n月
 			for (int i = offset; i >= 1; i--) {
 				Date d = addMonth(date, i * -1);
-				list.add(DateToString(d, "yyyy-MM"));
+				list.add(dateToString(d, "yyyy-MM"));
 			}
 
 			list.add(month);
@@ -903,7 +909,7 @@ public class DateHelper {
 			// 往后数n月
 			for (int i = 1; i <= offset; i++) {
 				Date d = addMonth(date, i);
-				list.add(DateToString(d, "yyyy-MM"));
+				list.add(dateToString(d, "yyyy-MM"));
 			}
 
 		} catch (ParseException e) {
@@ -913,61 +919,53 @@ public class DateHelper {
 		return list;
 	}
 
+	/**
+	 * 获取两个日期间的年月
+	 * @param startDate
+	 * @param endDate
+	 * @return
+	 */
 	public static List<String> getYearMonthBetweenDate(String startDate, String endDate) {
-		List<String> list = null;
+		List<String> list = new ArrayList<>();
 		try {
-			list = new ArrayList<String>();
-
-			String firstDay = StrUtil.EMPTY;
-			String lastDay = StrUtil.EMPTY;
-			Date d1 = new SimpleDateFormat("yyyy-MM").parse(startDate);// 定义起始日期
-			Date d2 = new SimpleDateFormat("yyyy-MM").parse(endDate);// 定义结束日期
+			Date d1 = new SimpleDateFormat("yyyy-MM").parse(startDate);
+			Date d2 = new SimpleDateFormat("yyyy-MM").parse(endDate);
 
-			Calendar dd = Calendar.getInstance();// 定义日期实例
-			dd.setTime(d1);// 设置日期起始时间
+			Calendar calendar1 = Calendar.getInstance();
+			calendar1.setTime(d1);
+			Calendar calendar2 = Calendar.getInstance();
+			calendar2.setTime(d2);
 			Calendar cale = Calendar.getInstance();
 
-			Calendar c = Calendar.getInstance();
-			c.setTime(d2);
-
-			int startDay = d1.getDate();
-			int endDay = d2.getDate();
+			int startDay = calendar1.get(Calendar.DAY_OF_MONTH);
+			int endDay = calendar2.get(Calendar.DAY_OF_MONTH);
 			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
-
-			String keyValueForDate = null;
-
-			while (dd.getTime().compareTo(d2) <= 0) {// 判断是否到结束日期
-				keyValueForDate = new String();
-				cale.setTime(dd.getTime());
-
-				if (dd.getTime().equals(d1)) {
-					cale.set(Calendar.DAY_OF_MONTH, dd.getActualMaximum(Calendar.DAY_OF_MONTH));
-					keyValueForDate = sdf.format(d1);
-
-				} else if (dd.get(Calendar.MONTH) == d2.getMonth() && dd.get(Calendar.YEAR) == c.get(Calendar.YEAR)) {
-					cale.set(Calendar.DAY_OF_MONTH, 1);// 取第一天
-					firstDay = sdf.format(cale.getTime());
-					keyValueForDate = firstDay;
-
+			// 判断是否到结束日期
+			while (calendar1.compareTo(calendar2) <= 0) {
+				cale.setTime(calendar1.getTime());
+				// 如果是同一天
+				if (calendar1.equals(calendar2)) {
+					cale.set(Calendar.DAY_OF_MONTH, calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));
+					list.add(sdf.format(d1));
+				} else if (calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH)
+						&& calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)) {
+					// 如果是同月 - 取第一天
+					cale.set(Calendar.DAY_OF_MONTH, 1);
+					list.add(sdf.format(cale.getTime()));
 				} else {
-					cale.set(Calendar.DAY_OF_MONTH, 1);// 取第一天
-					firstDay = sdf.format(cale.getTime());
-					cale.set(Calendar.DAY_OF_MONTH, dd.getActualMaximum(Calendar.DAY_OF_MONTH));
-					keyValueForDate = firstDay;
-
+					// 非同月 - 取第一天
+					cale.set(Calendar.DAY_OF_MONTH, 1);
+					list.add(sdf.format(cale.getTime()));
+					cale.set(Calendar.DAY_OF_MONTH, calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));
 				}
-				list.add(keyValueForDate);
-				dd.add(Calendar.MONTH, 1);// 进行当前日期月份加1
+				// 进行当前日期月份加1
+				calendar1.add(Calendar.MONTH, 1);
 			}
-
 			if (endDay < startDay) {
-				keyValueForDate = new String();
-
 				cale.setTime(d2);
-				cale.set(Calendar.DAY_OF_MONTH, 1);// 取第一天
-				firstDay = sdf.format(cale.getTime());
-				keyValueForDate = firstDay;
-				list.add(keyValueForDate);
+				// 取第一天
+				cale.set(Calendar.DAY_OF_MONTH, 1);
+				list.add(sdf.format(cale.getTime()));
 			}
 		} catch (ParseException e) {
 			return null;
@@ -980,7 +978,8 @@ public class DateHelper {
 		startDate.set(Calendar.YEAR, year);
 		startDate.set(Calendar.MONTH, month-1);
 		startDate.set(Calendar.DAY_OF_MONTH,1);
-		startDate.set(Calendar.HOUR_OF_DAY , 0);    //HOUR是12小时制
+		//HOUR是12小时制
+		startDate.set(Calendar.HOUR_OF_DAY, 0);
 		startDate.set(Calendar.MINUTE, 0);
 		startDate.set(Calendar.SECOND, 0);
 		startDate.set(Calendar.MILLISECOND, 0);
@@ -1015,6 +1014,13 @@ public class DateHelper {
 		return new BigDecimal(diff / nh).setScale(2,   BigDecimal.ROUND_HALF_UP);
 	}
 
+	/**
+	 * 清理缓存
+	 */
+	public static void clear() {
+		THREAD_LOCAL.remove();
+	}
+
 	public static void main(String[] args) {
 		//getMonthWithOffset("2017-03", 3);
 //		System.out.println(getDateTimeDifferenceHours(

+ 278 - 0
dmp-common/src/main/java/com/persagy/dmp/common/utils/ExcelUtils.java

@@ -0,0 +1,278 @@
+package com.persagy.dmp.common.utils;
+
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Data;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * ExcelUtils
+ * @author linhuili
+ * @date 2021-09-30
+ */
+public class ExcelUtils {
+
+    public static void main(String[] args) throws Exception {
+        // 读测试
+     /*   InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("excel/equipment.xlsx");
+        List<List<String>> result = getExcelSheetInfo(in,"设备");*/
+
+        // 写测试
+        ExcelModel excelModel = new ExcelModel();
+
+        JSONArray rowList = new JSONArray();
+        JSONArray columnList = new JSONArray();
+        columnList.add("1你好");
+        columnList.add("2");
+        columnList.add("3");
+        rowList.add(columnList);
+        ExcelModel sheet1 = new ExcelModel();
+        sheet1.setSheetName("1");
+        sheet1.setSheetLines(rowList);
+
+        ExcelModel sheet2 = new ExcelModel();
+        sheet2.setSheetName("2");
+        sheet2.setSheetLines(rowList);
+        excelModel.addSheet(sheet1);
+        excelModel.addSheet(sheet2);
+        writeInfoToExcel("temp.xls", excelModel);
+    }
+
+    @Data
+    public static class ExcelModel {
+        private List<ExcelModel> sheetDatas;
+        private String sheetName;
+        private JSONArray sheetLines;
+
+        public void addSheet(ExcelModel sheet) {
+            if (sheetDatas == null) {
+                sheetDatas = new ArrayList<>();
+            }
+            sheetDatas.add(sheet);
+        }
+    }
+
+
+    /**
+     * description 读取excel模版 将数据写入excel
+     *
+     * @param filePath   生成的excel文件的path
+     * @param excelModel excel数据
+     * @return void
+     * @author feng
+     * @since 17:35 2018/7/11
+     */
+    public static void writeInfoToExcel(String filePath, ExcelModel excelModel) throws Exception {
+        // 根据模板,创建工作簿
+        Workbook workBook = null;
+        // 输出流
+        OutputStream out = null;
+        try {
+            out = new FileOutputStream(new File(filePath));
+            int maxLines = 65535;
+            if (filePath.endsWith("xls")) {
+                workBook = new HSSFWorkbook();
+            } else {
+                maxLines = 1048575;
+                workBook = new SXSSFWorkbook(10000);
+            }
+            for (ExcelModel sheetData : excelModel.getSheetDatas()) {
+                JSONArray rowInfoList = sheetData.getSheetLines();
+                String sheetName = sheetData.getSheetName();
+                Sheet sheet = workBook.createSheet(sheetName);
+                // 输出流
+                for (int rowNumber = 0; rowNumber < rowInfoList.size(); rowNumber++) {
+                    if (rowNumber == maxLines) {
+                        break;
+                    }
+                    JSONArray lines = rowInfoList.getJSONArray(rowNumber);
+                    for (int columnNumber = 0; columnNumber < lines.size(); columnNumber++) {
+                        createCell(workBook, sheet, rowNumber, columnNumber, lines.getString(columnNumber));
+                    }
+                }
+            }
+
+            workBook.write(out);
+        } finally {
+            if (out != null) {
+                out.flush();
+                out.close();
+            }
+            if (workBook != null) {
+                workBook.close();
+            }
+        }
+    }
+
+    /**
+     * description 读取excel信息
+     *
+     * @param in        文件输入流
+     * @param sheetName sheet名称
+     * @return java.util.List<java.util.List < java.lang.String>> 行信息的集合
+     * @author feng
+     * @since 16:16 2018/7/11
+     */
+    public static List<List<String>> getExcelSheetInfo(InputStream in, String sheetName) throws Exception {
+        Workbook workBook = WorkbookFactory.create(in);
+        // 遍历excel中的sheet
+        for (int numSheet = 0; numSheet < workBook.getNumberOfSheets(); numSheet++) {
+            List<List<String>> resultInfo = new ArrayList<>();
+            Sheet sheet = workBook.getSheetAt(numSheet);
+            if (sheet == null || !sheetName.equals(sheet.getSheetName())) {
+                continue;
+            }
+
+            int lastColumnNum = 0;
+            for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
+                Row row = sheet.getRow(rowNum);
+                if (row == null) {
+                    continue;
+                }
+                if (lastColumnNum < row.getLastCellNum()) {
+                    lastColumnNum = row.getLastCellNum();
+                }
+            }
+
+            for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
+                Row row = sheet.getRow(rowNum);
+                ArrayList<String> curarr = new ArrayList<>();
+                if (row == null) {
+                    for (int columnNum = 0; columnNum < lastColumnNum; columnNum++) {
+                        curarr.add("");
+                    }
+                } else {
+                    for (int columnNum = 0; columnNum < lastColumnNum; columnNum++) {
+                        Cell cell = row.getCell(columnNum);
+                        curarr.add(getCellStringValue(cell));
+                    }
+                }
+                resultInfo.add(curarr);
+            }
+            return resultInfo;
+
+        }
+        return null;
+    }
+
+    /**
+     * 创建excel
+     * @param workbook
+     * @param sheet
+     * @param rowNumber
+     * @param cellNumber
+     * @param content
+     */
+    public static void createCell(Workbook workbook, Sheet sheet, int rowNumber, int cellNumber, String content) {
+
+        Row row = sheet.getRow(rowNumber);
+        if (row == null) {
+            row = sheet.createRow(rowNumber);
+        }
+
+        Cell cell = row.getCell(cellNumber);
+        if (cell == null) {
+            cell = row.createCell(cellNumber);
+        }
+
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+        cell.setCellStyle(cellStyle);
+        if (content == null) {
+            content = "";
+        }
+        cell.setCellValue(content);
+    }
+
+    /**
+     * 获取单元格值
+     * @param cell
+     * @return
+     * @throws Exception
+     */
+    public static String getCellStringValue(Cell cell) throws Exception {
+        if (cell == null) {
+            return "";
+        }
+        String value;
+        switch (cell.getCellTypeEnum()) {
+            case STRING:
+                value = cell.getStringCellValue();
+                break;
+            case NUMERIC:
+                if (DateUtil.isCellDateFormatted(cell)) {
+                    value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue());
+                } else {
+                    value = new BigDecimal(Double.toString(cell.getNumericCellValue())).longValue() + "";
+                }
+                break;
+            case BOOLEAN:
+                value = String.valueOf(cell.getBooleanCellValue());
+                break;
+            case BLANK:
+                value = "";
+                break;
+            case ERROR:
+                throw new Exception("can not resolve this cell! CELL_TYPE_ERROR! ");
+            case FORMULA:
+                value = cell.getCellFormula();
+                break;
+            default:
+                value = cell.getStringCellValue();
+                break;
+        }
+
+        return value;
+    }
+
+    /**
+     * 删除单个文件
+     *
+     * @param sPath 被删除文件的文件名
+     */
+    public static void deleteFile(String sPath) {
+        File file = new File(sPath);
+        // 路径为文件且不为空则进行删除
+        if (file.isFile() && file.exists()) {
+            file.delete();
+        }
+    }
+
+
+    /**
+     * 生成html格式的数据
+     * @param datas
+     * @return
+     */
+    public static String html(JSONArray datas){
+        StringBuilder content = new StringBuilder("<html><head><style>.table-d table {background: #000;margin-top: 50px;}.table-d table td {background: #FFF;" +
+                "font-size: 11.0pt;font-weight: 400;font-style: normal;text-decoration: none;font-family: 宋体;white-space: nowrap}</style></head><body>");
+        content.append("<div class=\"table-d\"><table width=\"auto\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">");
+        for (int i = 0; i < datas.size(); i++) {
+            JSONArray data = datas.getJSONArray(i);
+            content.append("<tr>");
+            for (int i1 = 0; i1 < data.size(); i1++) {
+                content.append("<td>" + data.getString(i1) + "</td>"); //第一列
+            }
+            content.append("</tr>");
+        }
+        content.append("</div></table>");
+        content.append("</body></html>");
+        return content.toString();
+    }
+
+}

+ 4 - 4
dmp-common/src/main/java/com/persagy/dmp/common/utils/JsonHelper.java

@@ -41,7 +41,7 @@ public class JsonHelper {
      * @param obj
      * @return
      */
-    public static JSONObject toJSONObjectQuietly(Object obj) {
+    public static JSONObject toJsonObjectQuietly(Object obj) {
         String jsonStr = toJsonStrQuietly(obj);
         return JSONObject.parseObject(jsonStr);
     }
@@ -51,7 +51,7 @@ public class JsonHelper {
      * @param obj
      * @return
      */
-    public static JSONArray toJSONArrayQuietly(Object obj) {
+    public static JSONArray toJsonArrayQuietly(Object obj) {
         String jsonStr = toJsonStrQuietly(obj);
         return JSONArray.parseArray(jsonStr);
     }
@@ -105,7 +105,7 @@ public class JsonHelper {
      * @param obj
      * @return
      */
-    public static JSONObject toJSONObject(Object obj) throws IOException {
+    public static JSONObject toJsonObject(Object obj) throws IOException {
         String jsonStr = toJsonStr(obj);
         return JSONObject.parseObject(jsonStr);
     }
@@ -115,7 +115,7 @@ public class JsonHelper {
      * @param obj
      * @return
      */
-    public static JSONArray toJSONArray(Object obj) throws IOException {
+    public static JSONArray toJsonArray(Object obj) throws IOException {
         String jsonStr = toJsonStr(obj);
         return JSONArray.parseArray(jsonStr);
     }

+ 0 - 8
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/impl/HdfsStorageServiceImpl.java

@@ -4,30 +4,22 @@ import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.dmp.storage.constant.FileCommonConst;
 import com.persagy.dmp.storage.service.IFileStorageService;
-import com.sun.imageio.plugins.common.ImageUtil;
-import io.minio.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
 
 /**
  * MinIO存储服务实现类
  * @author Charlie Yu
  * @date 2021-05-15
  */
-// @Service
 @Slf4j
 @RequiredArgsConstructor
 public class HdfsStorageServiceImpl implements IFileStorageService {

+ 0 - 4
dmp-comp/dmp-file-starter/src/main/java/com/persagy/dmp/storage/service/impl/MinioStorageServiceImpl.java

@@ -7,10 +7,7 @@ import com.persagy.dmp.storage.service.IFileStorageService;
 import io.minio.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
 import java.io.InputStream;
 
 /**
@@ -18,7 +15,6 @@ import java.io.InputStream;
  * @author Charlie Yu
  * @date 2021-05-15
  */
-// @Service
 @Slf4j
 @RequiredArgsConstructor
 public class MinioStorageServiceImpl implements IFileStorageService {

+ 13 - 12
dmp-server/src/main/java/com/persagy/aspects/RequestLogAspect.java

@@ -32,10 +32,11 @@ import java.util.List;
 @EnableAspectJAutoProxy
 public class RequestLogAspect {
 
-	private static final ThreadLocal<LogData> dataStorage = new ThreadLocal<>();
+	private static final ThreadLocal<LogData> DATA_STORAGE = new ThreadLocal<>();
 
+	/** @Pointcut("execution(* *(..))") */
 	@Pointcut("execution(public * com.persagy.dmp..*.controller.*.*(..))")
-	//@Pointcut("execution(* *(..))")
+
 	public void controllerPoint() {
 	}
 
@@ -51,7 +52,7 @@ public class RequestLogAspect {
 			return;
 		}
 		LogData data = initFlag(request);
-		dataStorage.set(data);
+		DATA_STORAGE.set(data);
 		log.info("{} REQUEST URL      : {} {} {} {}", data.intFlag, data.method, data.url, data.remoteIp, data.remotePort);
 		log.info("{} REQUEST ARGS     : {} ", data.intFlag, JsonHelper.toJsonStrQuietly(prepare(joinPoint)));
 	}
@@ -80,10 +81,10 @@ public class RequestLogAspect {
 
 	@AfterReturning(returning = "ret", pointcut = "controllerPoint()")
 	public void doAfterReturning(Object ret) {
-		if (null==dataStorage.get()){
+		if (null== DATA_STORAGE.get()){
 			return;
 		}
-		LogData data = dataStorage.get();
+		LogData data = DATA_STORAGE.get();
 		String result = null;
 		if (ret != null) {
 			if (ret instanceof CommonResult) {
@@ -93,17 +94,17 @@ public class RequestLogAspect {
 			}
 		}
 		log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, result, data.url);
-		dataStorage.remove();
+		DATA_STORAGE.remove();
 	}
 
 	@AfterThrowing(throwing = "ex", pointcut = "controllerPoint()")
 	public void doAfterThrowing(Throwable ex) {
-		if (null==dataStorage.get()){
+		if (null== DATA_STORAGE.get()){
 			return;
 		}
-		LogData data = dataStorage.get();
+		LogData data = DATA_STORAGE.get();
 		log.error("{} REQUEST EXCEPTION: {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, data.url, ex);
-		dataStorage.remove();
+		DATA_STORAGE.remove();
 	}
 
 	/**
@@ -119,11 +120,11 @@ public class RequestLogAspect {
 		data.remotePort = request.getRemotePort();
 		data.timestamp = System.currentTimeMillis();
 		data.method = request.getMethod();
-		String requestURI = request.getRequestURI();
+		String uri = request.getRequestURI();
 		String queryString = request.getQueryString();
-		data.url = StrUtil.isBlank(queryString) ? requestURI : StrUtil.concat(true, requestURI, "?", queryString);
+		data.url = StrUtil.isBlank(queryString) ? uri : StrUtil.concat(true, uri, "?", queryString);
 		data.intFlag = IdUtil.fastSimpleUUID();
-		dataStorage.set(data);
+		DATA_STORAGE.set(data);
 		return data;
 	}