Browse Source

Merge remote-tracking branch 'origin/master'

xiahan 1 year ago
parent
commit
9e37d6fe93
18 changed files with 449 additions and 233 deletions
  1. 24 0
      bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClient.java
  2. 33 0
      bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClientError.java
  3. 1 0
      bs-common/src/main/java/com/rongwei/safecommon/fegin/CXCommonFeginClient.java
  4. 47 16
      bs-common/src/main/java/com/rongwei/safecommon/utils/CXCommonUtils.java
  5. 1 1
      bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java
  6. 13 11
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/config/EquMaintenanceStandardListener.java
  7. 34 22
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquMaintenanceStandardTemplate.java
  8. 2 2
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceOrderService.java
  9. 8 6
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceOrderServiceImpl.java
  10. 1 1
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceTaskServiceImpl.java
  11. 153 149
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquipmentSendNotifyServiceImpl.java
  12. 25 21
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/utils/ExcelUtils.java
  13. BIN
      cx-equipment/cx-equipment-common/src/main/resources/template/设备部位重复故障问题.xls
  14. 10 3
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/TaskStatusEnum.java
  15. 3 0
      cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquipmentSendNotifyController.java
  16. 21 1
      cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/MaintenanceController.java
  17. 16 0
      cx-safe-check/cx-save-check-entity/src/main/java/com/rongwe/scentity/vo/PushMessageToAppRequestVo.java
  18. 57 0
      cx-safe-check/cx-save-check-server/src/main/java/com/rongwei/savecheck/controller/AppPushMessageController.java

+ 24 - 0
bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClient.java

@@ -0,0 +1,24 @@
+package com.rongwei.safecommon.fegin;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.CriteriaQuery;
+import com.rongwei.rwcommon.vo.MailDo;
+import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
+import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(value = "rw-admin",fallback = CXAdminFeginClientError.class,contextId = "adminFeign")
+public interface CXAdminFeginClient {
+    @PostMapping("sys/generalCRUD/getDataBySql")
+    R getDataBySql(@RequestBody CriteriaQuery query);
+
+    @PostMapping("sys/generalCRUD/batchSaveList")
+    R batchSaveList(@RequestBody BatchSaveVo batchSaveVo);
+}

+ 33 - 0
bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClientError.java

@@ -0,0 +1,33 @@
+package com.rongwei.safecommon.fegin;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.CriteriaQuery;
+import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * Hysitx class
+ *
+ * @author XH
+ * @date 2023/05/30
+ */
+@Component
+public class CXAdminFeginClientError implements CXAdminFeginClient {
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+
+    @Override
+    public R getDataBySql(CriteriaQuery query) {
+        log.error("执行自定义sql失败:{}", query);
+        return R.error();
+    }
+
+    @Override
+    public R batchSaveList(BatchSaveVo batchSaveVo) {
+        log.error("批量保存失败:{}", batchSaveVo);
+        return R.error();
+    }
+
+
+}

+ 1 - 0
bs-common/src/main/java/com/rongwei/safecommon/fegin/CXCommonFeginClient.java

@@ -1,6 +1,7 @@
 package com.rongwei.safecommon.fegin;
 
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.CriteriaQuery;
 import com.rongwei.rwcommon.vo.MailDo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
 import org.springframework.cloud.openfeign.FeignClient;

+ 47 - 16
bs-common/src/main/java/com/rongwei/safecommon/utils/CXCommonUtils.java

@@ -1,5 +1,6 @@
 package com.rongwei.safecommon.utils;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -10,8 +11,12 @@ import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.rwcommon.vo.CriteriaQuery;
+import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
+import com.rongwei.rwcommon.vo.generalsql.GeneralInsertVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
+import com.rongwei.safecommon.fegin.CXAdminFeginClient;
 import com.rongwei.safecommon.fegin.CXCommonFeginClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,12 +27,10 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.rongwei.safecommon.utils.SaveConstans.AQ_ORG_CODE_MAP;
@@ -46,6 +49,8 @@ public class CXCommonUtils {
     private RedisService autoRedisService;
     @Autowired
     private CXCommonFeginClient autoCommonFeginClient;
+    @Resource
+    private CXAdminFeginClient autoAdminFeginClient;
     @Autowired
     private SysSerialNumberService autoSysSerialNumberService;
 
@@ -54,14 +59,15 @@ public class CXCommonUtils {
     private static RedisService redisService;
 
     private static CXCommonFeginClient commonFeginClient;
+    private static CXAdminFeginClient adminFeginClient;
     public static final String DEFAULT_NOTIFY_STATUS = "3";
 
 
-
     @PostConstruct
     public void info() {
         redisService = autoRedisService;
         commonFeginClient = autoCommonFeginClient;
+        adminFeginClient = autoAdminFeginClient;
         sysSerialNumberService = autoSysSerialNumberService;
     }
 
@@ -144,11 +150,37 @@ public class CXCommonUtils {
     public static void sendNotify(String title, String content, String remark,
                                   List<String> recipientIds, String roption,
                                   String notifyStatus) {
-        sendNotify(title, content, remark, recipientIds, roption, notifyStatus,true);
+        sendNotify(title, content, remark, recipientIds, roption, notifyStatus, true);
     }
 
 
-    public static void pushApp(String title, String content, List<String> recipientIds){
+    public static void pushApp(String title, String content, List<String> recipientIds) {
+        if(recipientIds.size() <= 0){
+            return;
+        }
+        BatchSaveVo batchSaveVo = new BatchSaveVo();
+        LinkedList<GeneralInsertVo> generalInserts = new LinkedList<>();
+        for (String recipientId : recipientIds) {
+            String uuid = SecurityUtil.getUUID();
+
+            Map<String, Object> map = new HashMap<>();
+            map.put("ID",uuid);
+            map.put("DELETED","0");
+            map.put("CREATEDATE",DateUtil.now());
+            map.put("TITLE", title);
+            map.put("CONTENT", content);
+            map.put("USERID", recipientId);
+
+            GeneralInsertVo generalInsertVo = new GeneralInsertVo();
+            generalInsertVo.setTablename("app_push_message");
+            generalInsertVo.setInsertcolumns(map);
+            generalInsertVo.setAutoGenId(false);
+            generalInsertVo.setIdCol("ID");
+            generalInserts.add(generalInsertVo);
+        }
+        batchSaveVo.setGeneralInserts(generalInserts);
+        adminFeginClient.batchSaveList(batchSaveVo);
+
         //推送websocket消息给app
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("title", title);
@@ -158,7 +190,6 @@ public class CXCommonUtils {
     }
 
 
-
     /**
      * 发送消息提醒
      *
@@ -171,9 +202,9 @@ public class CXCommonUtils {
      * @param notifyStatus  消息提醒类型
      * @param pushWebsocket 是否向webSocket推送消息
      */
-    public static void sendNotify(String id,String title, String content, String remark,
+    public static void sendNotify(String id, String title, String content, String remark,
                                   List<String> recipientIds, String roption,
-                                  String notifyStatus,boolean pushWebsocket) {
+                                  String notifyStatus, boolean pushWebsocket) {
         if (recipientIds == null || recipientIds.isEmpty()) {
             log.debug("接收人ID为空");
             return;
@@ -184,7 +215,7 @@ public class CXCommonUtils {
         sysNotifyAnnounceVo.setNotifytype(notifyStatus);
         sysNotifyAnnounceVo.setNotifystatus(DEFAULT_NOTIFY_STATUS);
         sysNotifyAnnounceVo.setNotifytitle(title);
-        sysNotifyAnnounceVo.setNotifycontent(content.replace("null"," "));
+        sysNotifyAnnounceVo.setNotifycontent(content.replace("null", " "));
         sysNotifyAnnounceVo.setRemark(remark);
         // 特殊处理
         if (StringUtils.isNotBlank(roption)) {
@@ -194,9 +225,9 @@ public class CXCommonUtils {
         log.debug("开始通过fegin发送消息通知: {}", sysNotifyAnnounceVo);
         commonFeginClient.sendNotify(sysNotifyAnnounceVo);
         // 通过webSocket推送数据
-        if(pushWebsocket){
+        if (pushWebsocket) {
             //防止推送用户过多,导致调用接口报错,实行分流
-            Lists.partition(recipientIds, 10).forEach(userIds->{
+            Lists.partition(recipientIds, 10).forEach(userIds -> {
                 pushApp(title, content, userIds);
             });
         }
@@ -262,6 +293,7 @@ public class CXCommonUtils {
 
     /**
      * 计算时间和当前时间相差几天
+     *
      * @param startDate
      * @return
      */
@@ -281,13 +313,12 @@ public class CXCommonUtils {
      * @return
      * @date 2024/1/29 17:12
      * @author shangmi
-     *
      */
 
-    public static void deleteSendNotify(String notifyType, String roption){
+    public static void deleteSendNotify(String notifyType, String roption) {
         JSONArray data = JSONUtil.parseArray(commonFeginClient.list(new HashMap<String, Object>() {{
             this.put("NOTIFYTYPE", notifyType);
-            if (roption!=null){
+            if (roption != null) {
                 this.put("ROPTION", roption);
             }
         }}).getData());

+ 1 - 1
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -408,7 +408,7 @@ public class SaveConstans {
         /**
          * 设备部位重复故障问题 生成excel名称
          */
-        public static final String DEVICE_REPEATEDLY_FAILS_FILE_NAME = "设备部位重复故障问题.xls";
+        public static final String DEVICE_REPEATEDLY_FAILS_FILE_NAME = "设备部位重复故障问题";
 
         /**
          * 大修任务超期未完成 生成excel名称

+ 13 - 11
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/config/EquMaintenanceStandardListener.java

@@ -3,11 +3,9 @@ package com.rongwei.bscommon.sys.config;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.rongwei.bscommon.sys.excel.EquMaintenanceStandardTemplate;
-import com.rongwei.bscommon.sys.utils.CommonUtils;
 import com.rongwei.bsentity.domain.EquMaintenanceStandardDo;
-import com.rongwei.bsentity.enums.EquipmentTypeEnum;
 import com.rongwei.bsentity.enums.MaintenanceTypeEnum;
-import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.bsentity.enums.PlantEnum;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -24,7 +22,7 @@ import java.util.*;
 @Slf4j
 public class EquMaintenanceStandardListener extends AnalysisEventListener<EquMaintenanceStandardTemplate> {
 
-    private static final String[] NON_SET = {"equipmenttype", "maintenancetype", "maintenancesite", "maintenancecontext", "precontrol", "means"};
+    private static final String[] NON_SET = {"plantName","equipmentName","maintenancetype", "maintenancesite", "maintenancecontext", "isoutsource"};
 
     private List<EquMaintenanceStandardDo> maintenanceStandardList = new ArrayList<>();
 
@@ -76,20 +74,24 @@ public class EquMaintenanceStandardListener extends AnalysisEventListener<EquMai
     private EquMaintenanceStandardDo migrateDate(EquMaintenanceStandardTemplate equMaintenanceStandardTemplate) {
         Date date = new Date();
         StringBuilder planMonth = new StringBuilder();
-        SysUserVo currentUser = CommonUtils.getCurrentUser();
+        // SysUserVo currentUser = CommonUtils.getCurrentUser();
         EquMaintenanceStandardDo equMaintenanceStandardDo = new EquMaintenanceStandardDo();
         BeanUtils.copyProperties(equMaintenanceStandardTemplate, equMaintenanceStandardDo);
         equMaintenanceStandardDo.setMaintenancetype(MaintenanceTypeEnum.messageOf(equMaintenanceStandardTemplate.getMaintenancetype()).toString())
-                .setEquipmenttype(EquipmentTypeEnum.messageOf(equMaintenanceStandardTemplate.getEquipmenttype()).toString())
+                // .setEquipmenttype(EquipmentTypeEnum.messageOf(equMaintenanceStandardTemplate.getEquipmenttype()).toString())
                 .setCreatedate(date)
                 .setModifydate(date)
                 .setId(SecurityUtil.getUUID())
-                .setTenantid(currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1])
+                // .setTenantid(currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1])
+                .setTenantid(PlantEnum.idOf(equMaintenanceStandardTemplate.getPlantName()))
+                .setPlant(equMaintenanceStandardTemplate.getPlantName())
                 //                .setTenantid("0001S31000000000J0TR")
-                .setCreateusername(currentUser.getName())
-                .setCreateuserid(currentUser.getId())
-                .setModifyusername(currentUser.getName())
-                .setModifyuserid(currentUser.getId())
+                // .setCreateusername(currentUser.getName())
+                // .setCreateuserid(currentUser.getId())
+                // .setModifyusername(currentUser.getName())
+                // .setModifyuserid(currentUser.getId())
+                .setEquipmentNumber(equMaintenanceStandardTemplate.getEquipmentnumber())
+                .setEquipmentName(equMaintenanceStandardTemplate.getEquipmentName())
                 .setIsoutsource(String.valueOf("是".equals(equMaintenanceStandardTemplate.getIsoutsource()) ? 0 : 1));
         if("是".equals(equMaintenanceStandardTemplate.getJan()) ){
             equMaintenanceStandardDo.setJan(1);

+ 34 - 22
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquMaintenanceStandardTemplate.java

@@ -15,20 +15,32 @@ import lombok.EqualsAndHashCode;
 public class EquMaintenanceStandardTemplate {
 
 
+    /**
+     * 工厂名称
+     */
+    @ExcelProperty(index = 1)
+    private String plantName;
+
+    /**
+     * 设备名称
+     */
+    @ExcelProperty(index = 2)
+    private String equipmentName;
+
     /**
      * table name:EQUIPMENTTYPE
      * table type:varchar(20)
-     * table comment:设备分类
+     * table comment:设备编号
      */
-    @ExcelProperty(index = 1)
-    private String equipmenttype;
+    @ExcelProperty(index = 3)
+    private String equipmentnumber;
 
     /**
      * table name:MAINTENANCETYPE
      * table type:varchar(20)
      * table comment:保养分类
      */
-    @ExcelProperty(index = 2)
+    @ExcelProperty(index = 4)
     private String maintenancetype;
 
     /**
@@ -36,7 +48,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:text
      * table comment:保养部位
      */
-    @ExcelProperty(index = 3)
+    @ExcelProperty(index = 5)
     private String maintenancesite;
 
     /**
@@ -44,7 +56,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:text
      * table comment:保养内容
      */
-    @ExcelProperty(index = 4)
+    @ExcelProperty(index = 6)
     private String maintenancecontext;
 
     /**
@@ -52,7 +64,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:text
      * table comment:预控标准要求
      */
-    @ExcelProperty(index = 5)
+    @ExcelProperty(index = 7)
     private String precontrol;
 
     /**
@@ -60,7 +72,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:text
      * table comment:设备保障域控措施
      */
-    @ExcelProperty(index = 6)
+    @ExcelProperty(index = 8)
     private String equipmentsupport;
 
     /**
@@ -68,7 +80,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:text
      * table comment:保养/预防方法
      */
-    @ExcelProperty(index = 7)
+    @ExcelProperty(index = 9)
     private String means;
 
     /**
@@ -76,7 +88,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:varchar(10)
      * table comment:是否委外
      */
-    @ExcelProperty(index = 8)
+    @ExcelProperty(index = 10)
     private String isoutsource;
 
     /**
@@ -84,7 +96,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:1月
      */
-    @ExcelProperty(index = 9)
+    @ExcelProperty(index = 11)
     private String jan;
 
     /**
@@ -92,7 +104,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:2月
      */
-    @ExcelProperty(index = 10)
+    @ExcelProperty(index = 12)
     private String feb;
 
     /**
@@ -100,7 +112,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:3月
      */
-    @ExcelProperty(index = 11)
+    @ExcelProperty(index = 13)
     private String mar;
 
     /**
@@ -108,7 +120,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:4月
      */
-    @ExcelProperty(index = 12)
+    @ExcelProperty(index = 14)
     private String apr;
 
     /**
@@ -116,7 +128,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:5月
      */
-    @ExcelProperty(index = 13)
+    @ExcelProperty(index = 15)
     private String may;
 
     /**
@@ -124,7 +136,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:6月
      */
-    @ExcelProperty(index = 14)
+    @ExcelProperty(index = 16)
     private String jun;
 
     /**
@@ -132,7 +144,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:7月
      */
-    @ExcelProperty(index = 15)
+    @ExcelProperty(index = 17)
     private String jul;
 
     /**
@@ -140,7 +152,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:8月
      */
-    @ExcelProperty(index = 16)
+    @ExcelProperty(index = 18)
     private String aug;
 
     /**
@@ -148,7 +160,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:9月
      */
-    @ExcelProperty(index = 17)
+    @ExcelProperty(index = 19)
     private String sep;
 
     /**
@@ -156,7 +168,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:10月
      */
-    @ExcelProperty(index = 18)
+    @ExcelProperty(index = 20)
     private String oct;
 
     /**
@@ -164,7 +176,7 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:11月
      */
-    @ExcelProperty(index = 19)
+    @ExcelProperty(index = 21)
     private String nov;
 
     /**
@@ -172,6 +184,6 @@ public class EquMaintenanceStandardTemplate {
      * table type:int
      * table comment:12月
      */
-    @ExcelProperty(index = 20)
+    @ExcelProperty(index = 22)
     private String december;
 }

+ 2 - 2
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceOrderService.java

@@ -3,7 +3,6 @@ package com.rongwei.bscommon.sys.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.EquMaintenanceOrderDo;
 import com.rongwei.bsentity.dto.EquMaintenanceOrderSumDTO;
-import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 
 import java.util.List;
 
@@ -34,7 +33,8 @@ public interface EquMaintenanceOrderService extends IService<EquMaintenanceOrder
      * 维修单excel 生成
      *
      * @param list
+     * @param noticeId
      * @return
      */
-    SysFileItemDo generateDeviceRepeatedlyFailsExcel(List<EquMaintenanceOrderSumDTO> list);
+    String generateDeviceRepeatedlyFailsExcel(List<EquMaintenanceOrderSumDTO> list, String noticeId);
 }

+ 8 - 6
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceOrderServiceImpl.java

@@ -13,7 +13,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import java.io.InputStream;
@@ -22,9 +21,11 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD;
+import static com.rongwei.safecommon.utils.SaveConstans.FileName.DEVICE_REPEATEDLY_FAILS_FILE_NAME;
+import static com.rongwei.safecommon.utils.SaveConstans.FileSuffix.XLSX;
 import static com.rongwei.safecommon.utils.SaveConstans.TemplatePath.DEVICE_REPEATEDLY_FAILS_TEMPLATE_NAME;
 
 @Service
@@ -89,13 +90,14 @@ public class EquMaintenanceOrderServiceImpl extends ServiceImpl<EquMaintenanceOr
      * 生成 备部位重复故障问题 excel 记录
      *
      * @param
+     * @param noticeId
      * @return
      */
     @Override
-    public SysFileItemDo generateDeviceRepeatedlyFailsExcel(List<EquMaintenanceOrderSumDTO> list) {
+    public String generateDeviceRepeatedlyFailsExcel(List<EquMaintenanceOrderSumDTO> list, String noticeId) {
 
         SysFileItemDo fileItemDo=null;
-
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_PATTERN_YMD);
         try {
             //1.获取模板
             ClassPathResource classPathResource = new ClassPathResource(DEVICE_REPEATEDLY_FAILS_TEMPLATE_NAME);
@@ -132,13 +134,13 @@ public class EquMaintenanceOrderServiceImpl extends ServiceImpl<EquMaintenanceOr
             fillPlantData(listMap.get(PlantEnum.CXLB.getId()), sheet3);
             //3数据填充生成文件
           //  String id = ExcelUtils.feginCommonUpload(workbook, DEVICE_REPEATEDLY_FAILS_FILE_NAME);
-             fileItemDo = ExcelUtils.feginCommonUpload(workbook);
+            return ExcelUtils.feginCommonUpload(workbook,noticeId,DEVICE_REPEATEDLY_FAILS_FILE_NAME + simpleDateFormat.format(new Date()) + XLSX );
 
         } catch (Exception e) {
             log.error("生成设备部位重复故障excel 失败:{}",e.getMessage());
 
         }
-        return fileItemDo;
+        return "";
     }
 
     /**

+ 1 - 1
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceTaskServiceImpl.java

@@ -67,7 +67,7 @@ public class EquMaintenanceTaskServiceImpl extends ServiceImpl<EquMaintenanceTas
     @Override
     public List<EquMaintenanceTaskDo> getListByTimeQuantum(String newDate, String oldDate) {
         LambdaQueryWrapper<EquMaintenanceTaskDo> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(EquMaintenanceTaskDo::getTaskstart, Arrays.asList(10,30,70))
+        queryWrapper.in(EquMaintenanceTaskDo::getTaskstate, Arrays.asList("10","30","70"))
                 .lt(EquMaintenanceTaskDo::getCreatedate,newDate)
                 .ge(EquMaintenanceTaskDo::getCreatedate,oldDate)
                 .eq(EquMaintenanceTaskDo::getDeleted,0);

+ 153 - 149
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquipmentSendNotifyServiceImpl.java

@@ -1,11 +1,10 @@
 package com.rongwei.bscommon.sys.service.impl;
-import cn.hutool.core.io.resource.ClassPathResource;
+
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.rongwei.bscommon.sys.dao.CommonDao;
 import com.rongwei.bscommon.sys.excel.EquLubricationTaskManagementTemplate;
 import com.rongwei.bscommon.sys.excel.EquMaintenanceTaskTemplate;
@@ -28,7 +27,6 @@ import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 import com.rongwei.safecommon.fegin.CXCommonFeginClient;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,13 +35,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static com.rongwei.safecommon.utils.SaveConstans.FileName.DEVICE_REPEATEDLY_FAILS_FILE_NAME;
 import static com.rongwei.safecommon.utils.SaveConstans.FileName.PLANNING_TASK_FILE_NAME;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.*;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.*;
@@ -89,49 +85,54 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     /**
      * 根据任务ID发送 提醒
      *
-     * @param id 保养任务ID
+     * @param ids 保养任务ID
      * @return {@link R}
      * @date 2024/1/18 17:16
      * @author shangmi
      */
     @Override
-    public R maintainCreateTaskNotify(String id) {
-        if (StringUtils.isBlank(id)) {
+    public R maintainCreateTaskNotify(String ids) {
+        if (StringUtils.isBlank(ids)) {
             log.info("任务ID为空");
             return R.ok();
         }
-        EquMaintenanceTaskDo maintenanceTaskDo = maintenanceTaskService.getById(id);
+        String[] idList = ids.split(",");
+        for (String id : idList) {
 
-        if (null == maintenanceTaskDo) {
-            log.info("无法通过id:{}获取到任务列表", id);
-            return R.ok();
-        }
 
-        // 发送人
-        List<String> userId = new ArrayList<>();
-        if (maintenanceTaskDo.getPrincipalid() != null) {
-            userId.addAll(Arrays.asList(maintenanceTaskDo.getPrincipalid().split(",")));
-        }
-        if (maintenanceTaskDo.getOtherengineersid() != null) {
-            userId.addAll(Arrays.asList(maintenanceTaskDo.getOtherengineersid().split(",")));
-        }
+            EquMaintenanceTaskDo maintenanceTaskDo = maintenanceTaskService.getById(id);
 
-        if (userId.isEmpty()) {
-            log.info("id为{}的任务无提醒人", id);
-            return R.ok();
-        }
-        // 发送标题
-        String title = MAINTAIN_SYSTEM_TITLE;
-        // 发送内容
-        String context = String.format(MAINTAIN_SYSTEM_CONTENT, maintenanceTaskDo.getPlanyear() + "-" + maintenanceTaskDo.getMonth(),
-                maintenanceTaskDo.getWorkshop(), maintenanceTaskDo.getEquipmentname(), maintenanceTaskDo.getEquipmentnumber(),
-                maintenanceTaskDo.getMaintenancesite(), maintenanceTaskDo.getPrincipal(), maintenanceTaskDo.getOtherengineers());
-        //删除提醒
-        CXCommonUtils.deleteSendNotify("maintain", id);
+            if (null == maintenanceTaskDo) {
+                log.info("无法通过id:{}获取到任务列表", id);
+                return R.ok();
+            }
 
-        //发送提醒
-        CXCommonUtils.sendNotify(title, context, null, userId.stream().distinct().collect(Collectors.toList()),
-                maintenanceTaskDo.getId(), MAINTAIN, false);
+            // 发送人
+            List<String> userId = new ArrayList<>();
+            if (maintenanceTaskDo.getPrincipalid() != null) {
+                userId.addAll(Arrays.asList(maintenanceTaskDo.getPrincipalid().split(",")));
+            }
+            if (maintenanceTaskDo.getOtherengineersid() != null) {
+                userId.addAll(Arrays.asList(maintenanceTaskDo.getOtherengineersid().split(",")));
+            }
+
+            if (userId.isEmpty()) {
+                log.info("id为{}的任务无提醒人", id);
+                return R.ok();
+            }
+            // 发送标题
+            String title = MAINTAIN_SYSTEM_TITLE;
+            // 发送内容
+            String context = String.format(MAINTAIN_SYSTEM_CONTENT, maintenanceTaskDo.getPlanyear() + "-" + maintenanceTaskDo.getMonth(),
+                    maintenanceTaskDo.getWorkshop(), maintenanceTaskDo.getEquipmentname(), maintenanceTaskDo.getEquipmentnumber(),
+                    maintenanceTaskDo.getMaintenancesite(), maintenanceTaskDo.getPrincipal(), maintenanceTaskDo.getOtherengineers());
+            // 删除提醒
+            CXCommonUtils.deleteSendNotify("maintain", id);
+
+            // 发送提醒
+            CXCommonUtils.sendNotify(title, context, null, userId.stream().distinct().collect(Collectors.toList()),
+                    maintenanceTaskDo.getId(), MAINTAIN, false);
+        }
         return R.ok();
     }
 
@@ -164,7 +165,7 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
                 maintenanceTaskDo.getMaintenancesite(), simpleDateFormat.format(maintenanceTaskDo.getTaskendtime()), maintenanceTaskDo.getPrincipal(),
                 maintenanceTaskDo.getOtherengineers());
 
-        //删除提醒
+        // 删除提醒
         CXCommonUtils.deleteSendNotify("maintain", id);
 
         CXCommonUtils.sendNotify(ACCEPTANCE_SYSTEM_TITLE, context, null, userId.stream().distinct().collect(Collectors.toList()),
@@ -214,18 +215,18 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     }
 
     @Override
-    public void sendPlanningTasksNotify(String planyear, String belongfactory, Integer taskquantity, String taskId,List<String> userId,String fileItemId) {
+    public void sendPlanningTasksNotify(String planyear, String belongfactory, Integer taskquantity, String taskId, List<String> userId, String fileItemId) {
         String notifyId = SecurityUtil.getUUID();
-        String formatFileNameAndId = PLANNING_TASK_FILE_NAME+"-;-"+fileItemId;
+        String formatFileNameAndId = PLANNING_TASK_FILE_NAME + "-;-" + fileItemId;
         CXCommonUtils.deleteSendNotify("mobilePlanningTask", null);
         // 发送消息提醒
-        CXCommonUtils.sendNotify(notifyId,PLANNING_TASK_TITLE,
-                String.format(PLANNING_TASK_CONTENT, planyear, belongfactory, taskquantity),formatFileNameAndId
+        CXCommonUtils.sendNotify(notifyId, PLANNING_TASK_TITLE,
+                String.format(PLANNING_TASK_CONTENT, planyear, belongfactory, taskquantity), formatFileNameAndId
                 , userId.stream().distinct().collect(Collectors.toList()), taskId, MOBILE_PLANNING_TASK, true);
         SysFileItemDo sysFileItemDo = new SysFileItemDo();
         sysFileItemDo.setId(fileItemId);
         sysFileItemDo.setRelationid(notifyId);
-        sysFileItemDo.setFilename(StringUtil.insertSpecificCharacter(PLANNING_TASK_FILE_NAME,TimeUtils.formatDayNumeral(new Date())));
+        sysFileItemDo.setFilename(StringUtil.insertSpecificCharacter(PLANNING_TASK_FILE_NAME, TimeUtils.formatDayNumeral(new Date())));
         sysFileItemDo.setModifydate(new Date());
         sysFileItemDo.setModifyusername("系统操作");
         sysFileItemDo.setModifyuserid("0");
@@ -271,7 +272,6 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     }
 
 
-
     /**
      * 故障停机提醒
      *
@@ -318,7 +318,7 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
      */
     @Override
     public R deviceRepeatedlyFailsNotify() {
-        //查询维修单汇总数据:根据故障发生时间自动查询每个工厂近3个月内 (以本月在往前倒推三个月至当前时间)所有
+        // 查询维修单汇总数据:根据故障发生时间自动查询每个工厂近3个月内 (以本月在往前倒推三个月至当前时间)所有
         // 除去 无需维修、已关闭  且  维修对象分类 为 档案设备、工装 的 维修任务记录中,
         // 然后根据所属工厂、设备类型、发生部位 分组查询对应分组类型的 数量记录 中 > 1的记录
         List<EquMaintenanceOrderSumDTO> list = equMaintenanceOrderService.selectOrderSummaryData();
@@ -326,82 +326,78 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
             log.info("记录为空,则不生成附件,也不生成提醒信息");
             return R.ok();
         }
-        //2.生成excel 文件,返回文件信息
-        SysFileItemDo fileItem = equMaintenanceOrderService.generateDeviceRepeatedlyFailsExcel(list);
+        // 消息提醒id
+        String noticeId = SecurityUtil.getUUID();
+        // 生成附件返回对象
+        String fileNameAndId = equMaintenanceOrderService.generateDeviceRepeatedlyFailsExcel(list, noticeId);
 
-        //3.消息提醒
-           // 3.1发送人  取车间维修主管、设备部部长、设备部维修主管 角色中所有人员
+        // 3.消息提醒
+        // 3.1发送人  取车间维修主管、设备部部长、设备部维修主管 角色中所有人员
         List<String> userId = equMaintenanceOrderService.selectRoleList();
         if (userId.isEmpty()) {
             log.info("车间维修主管、设备部部长、设备部维修主管角色无提醒人");
             return R.ok();
         }
-        //3.2发送消息
-        String id = SecurityUtil.getUUID();
-        //附件关联业务字段存入消息主键
-        fileItem.setRelationid(id);
-        fileItem.setFilename(DEVICE_REPEATEDLY_FAILS_FILE_NAME);
-
-        //消息提醒的remark 存放附件的名称+id
-        String remark = fileItem.getFilename()+"-;-"+fileItem.getId();
-        CXCommonUtils.sendNotify(id,DEVICE_REPEATEDLY_FAILS_TITLE, DEVICE_REPEATEDLY_FAILS_CONTEXT, remark, userId.stream().distinct().collect(Collectors.toList()),
+
+        CXCommonUtils.sendNotify(noticeId, DEVICE_REPEATEDLY_FAILS_TITLE, DEVICE_REPEATEDLY_FAILS_CONTEXT, fileNameAndId, userId.stream().distinct().collect(Collectors.toList()),
                 null, DEVICE_REPEATEDLY_FAILS_NOTICETYPE, true);
 
-        //4.修改附件
-        sysFileItemService.updateById(fileItem);
+
         return R.ok();
     }
 
 
-
     /**
      * 保养/润滑跨月未完成提醒
      *
      * @return {@link R}
      * @date 2024/1/30 15:08
      * @author shangmi
-     *
      */
     @Override
     public R previousUnfinishedTaskNotify() {
-        //时间处理
+        // 时间处理
         Calendar calendar = Calendar.getInstance();
         Date date = new Date();
         calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH,1);
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        String newDate = simpleDateFormat.format(date);
-        calendar.set(Calendar.MONTH,-12);
+        String newDate = simpleDateFormat.format(calendar.getTime());
+        calendar.set(Calendar.MONTH, -11);
         String oldDate = simpleDateFormat.format(calendar.getTime());
-        //查询距近一年时间内未完成保养/润滑任务
-        List<EquMaintenanceTaskDo> maintenanceTaskDoList =  maintenanceTaskService.getListByTimeQuantum(newDate,oldDate);
+        // 查询距近一年时间内未完成保养/润滑任务
+        List<EquMaintenanceTaskDo> maintenanceTaskDoList = maintenanceTaskService.getListByTimeQuantum(newDate, oldDate);
         List<EquLubricationTaskManagementDo> lubricationTaskManagementDoList = equLubricationTaskManagementService
-                .getListByTimeQuantum(newDate,oldDate);
-        if (maintenanceTaskDoList.size()+lubricationTaskManagementDoList.size()==0){
+                .getListByTimeQuantum(newDate, oldDate);
+        if (maintenanceTaskDoList.size() + lubricationTaskManagementDoList.size() == 0) {
             return R.ok();
         }
-        List<String> lubricationIds = lubricationTaskManagementDoList.stream().map(EquLubricationTaskManagementDo::getId).collect(Collectors.toList());
-        List<EquLubricationTaskDetailDo> lubricationTaskDetailDoList = lubricationTaskDetailService.getDetailByMasterId(lubricationIds);
+        List<EquLubricationTaskDetailDo> lubricationTaskDetailDoList =new ArrayList<>();
 
-        //删除提醒
-        CXCommonUtils.deleteSendNotify(PREVIOUS_UNFINISHED_TASK,null);
-        //遍历三个工厂 分别给每个工厂发送提醒
-        for (PlantEnum plantEnum : PlantEnum.values()){
+        List<String> lubricationIds = lubricationTaskManagementDoList.stream().map(EquLubricationTaskManagementDo::getId).collect(Collectors.toList());
+        if(!lubricationIds.isEmpty()){
+            lubricationTaskDetailDoList = lubricationTaskDetailService.getDetailByMasterId(lubricationIds);
+        }
+        // 删除提醒
+        CXCommonUtils.deleteSendNotify(PREVIOUS_UNFINISHED_TASK, null);
+        // 遍历三个工厂 分别给每个工厂发送提醒
+        for (PlantEnum plantEnum : PlantEnum.values()) {
             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
             // String fileUrl="E:\\Desktop\\test.xlsx";
             String plantId = plantEnum.getId();
-            //赛选出该工厂保养任务信息
+            // 赛选出该工厂保养任务信息
             List<EquMaintenanceTaskDo> maintenanceTaskList = maintenanceTaskDoList.stream()
                     .filter(info -> info.getTenantid().equals(plantId)).collect(Collectors.toList());
-            //赛选出该工厂润滑任务信息
+            // 赛选出该工厂润滑任务信息
             List<EquLubricationTaskManagementDo> lubricationTaskManagementList = lubricationTaskManagementDoList.stream()
                     .filter(info -> plantId.equals(info.getTenantid())).collect(Collectors.toList());
-            //赛选出该工厂下的润滑任务信息
+            // 赛选出该工厂下的润滑任务信息
             List<EquLubricationTaskDetailDo> lubricationTaskDetailList = lubricationTaskDetailDoList.stream()
                     .filter(info -> plantId.equals(info.getTenantid())).collect(Collectors.toList());
-            if (maintenanceTaskList.size()+lubricationTaskDetailList.size()==0){
+            if (maintenanceTaskList.size() + lubricationTaskDetailList.size() == 0) {
                 continue;
             }
-            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList,plantId);
+            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList, plantId);
             // 发送内容
             String context = String.format(PREVIOUS_UNFINISHED_TASK_CONTENT,
                     plantEnum.getName(),
@@ -409,26 +405,32 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
                     lubricationTaskDetailList.size());
 
             ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).build();
+            // ExcelWriter excelWriter = EasyExcel.write(fileUrl).build();
 
             List<EquMaintenanceTaskTemplate> equMaintenanceTaskTemplates = maintainDeriveDate(plantEnum, maintenanceTaskList);
-            List<EquLubricationTaskManagementTemplate> lubricationTaskManagementTemplates = lubricationDeriveDate(plantEnum,lubricationTaskManagementList,lubricationTaskDetailList);
-            generateExcel(excelWriter,equMaintenanceTaskTemplates,lubricationTaskManagementTemplates,Boolean.TRUE);
+            List<EquLubricationTaskManagementTemplate> lubricationTaskManagementTemplates = lubricationDeriveDate(plantEnum, lubricationTaskManagementList, lubricationTaskDetailList);
+            generateExcel(excelWriter, equMaintenanceTaskTemplates, lubricationTaskManagementTemplates, Boolean.TRUE);
 
             excelWriter.finish();
 
             byte[] byteArray = byteArrayOutputStream.toByteArray();
 
-            MultipartFile multipartFile = new MockMultipartFile("file", newDate+"-保养/润滑跨月未完成.xlsx"  , "application/vnd.ms-excel", byteArray);
-            R upload = CXCommonUtils.upload(multipartFile);
+            MultipartFile multipartFile = new MockMultipartFile("file", newDate + "-保养/润滑跨月未完成.xlsx", "application/vnd.ms-excel", byteArray);
+
+            // 消息提醒id
+            String noticeId = SecurityUtil.getUUID();
+
+            R upload = CXCommonUtils.upload(multipartFile, noticeId);
             String fileItemId = "";
-            if ("200".equals(upload.getCode())){
+            if ("200".equals(upload.getCode())) {
                 JSONObject jsonObject = JSONUtil.parseObj(upload.getData());
                 // Map<String,String> map = (Map<String, String>) JSON.parse(upload.getData().toString());
-                fileItemId =jsonObject.get("id").toString();
+                fileItemId = jsonObject.get("filename").toString() + "-;-" + jsonObject.get("id").toString();
+                ;
             }
 
 
-            CXCommonUtils.sendNotify(PREVIOUS_UNFINISHED_TASK_TITLE, context,plantId , userIdList.stream().distinct().collect(Collectors.toList()),
+            CXCommonUtils.sendNotify(noticeId, PREVIOUS_UNFINISHED_TASK_TITLE, context, plantId, userIdList.stream().distinct().collect(Collectors.toList()),
                     fileItemId, PREVIOUS_UNFINISHED_TASK, true);
         }
 
@@ -438,44 +440,48 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     @Override
     public R endUnfinishedTaskNotify() {
 
-        //时间处理
+        // 时间处理
         Calendar calendar = Calendar.getInstance();
         Date date = new Date();
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
         calendar.setTime(date);
         String newDate = simpleDateFormat.format(date);
         // int sky = calendar.get(Calendar.DAY_OF_MONTH)-1;
-        calendar.set(Calendar.DAY_OF_MONTH,1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
         String oldDate = simpleDateFormat.format(calendar.getTime());
-        //查询距近一年时间内未完成保养/润滑任务
-        List<EquMaintenanceTaskDo> maintenanceTaskDoList =  maintenanceTaskService.getListByTimeQuantum(newDate,oldDate);
+        // 查询距近一年时间内未完成保养/润滑任务
+        List<EquMaintenanceTaskDo> maintenanceTaskDoList = maintenanceTaskService.getListByTimeQuantum(newDate, oldDate);
         List<EquLubricationTaskManagementDo> lubricationTaskManagementDoList = equLubricationTaskManagementService
-                .getListByTimeQuantum(newDate,oldDate);
-        if (maintenanceTaskDoList.size()+lubricationTaskManagementDoList.size()==0){
+                .getListByTimeQuantum(newDate, oldDate);
+        if (maintenanceTaskDoList.size() + lubricationTaskManagementDoList.size() == 0) {
             return R.ok();
         }
+        List<EquLubricationTaskDetailDo> lubricationTaskDetailDoList = new ArrayList<>();
         List<String> lubricationIds = lubricationTaskManagementDoList.stream().map(EquLubricationTaskManagementDo::getId).collect(Collectors.toList());
-        List<EquLubricationTaskDetailDo> lubricationTaskDetailDoList = lubricationTaskDetailService.getDetailByMasterId(lubricationIds);
-        //删除提醒
-        CXCommonUtils.deleteSendNotify(END_UNFINISHED_TASK,null);
-        //遍历三个工厂 分别给每个工厂发送提醒
-        for (PlantEnum plantEnum : PlantEnum.values()){
+        if (!lubricationIds.isEmpty()){
+            lubricationTaskDetailDoList = lubricationTaskDetailService.getDetailByMasterId(lubricationIds);
+        }
+
+        // 删除提醒
+        CXCommonUtils.deleteSendNotify(END_UNFINISHED_TASK, null);
+        // 遍历三个工厂 分别给每个工厂发送提醒
+        for (PlantEnum plantEnum : PlantEnum.values()) {
             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
             // String fileUrl="E:\\Desktop\\test.xlsx";
             String plantId = plantEnum.getId();
-            //赛选出该工厂保养任务信息
+            // 赛选出该工厂保养任务信息
             List<EquMaintenanceTaskDo> maintenanceTaskList = maintenanceTaskDoList.stream()
                     .filter(info -> info.getTenantid().equals(plantId)).collect(Collectors.toList());
-            //赛选出该工厂润滑任务信息
+            // 赛选出该工厂润滑任务信息
             List<EquLubricationTaskManagementDo> lubricationTaskManagementList = lubricationTaskManagementDoList.stream()
                     .filter(info -> plantId.equals(info.getTenantid())).collect(Collectors.toList());
-            //赛选出该工厂下的润滑任务信息
+            // 赛选出该工厂下的润滑任务信息
             List<EquLubricationTaskDetailDo> lubricationTaskDetailList = lubricationTaskDetailDoList.stream()
                     .filter(info -> plantId.equals(info.getTenantid())).collect(Collectors.toList());
-            if (maintenanceTaskList.size()+lubricationTaskDetailList.size()==0){
+            if (maintenanceTaskList.size() + lubricationTaskDetailList.size() == 0) {
                 continue;
             }
-            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList,plantId);
+            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList, plantId);
             // 发送内容
             String context = String.format(END_UNFINISHED_TASK_CONTENT,
                     newDate,
@@ -486,21 +492,26 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
             ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).build();
 
             List<EquMaintenanceTaskTemplate> equMaintenanceTaskTemplates = maintainDeriveDate(plantEnum, maintenanceTaskList);
-            List<EquLubricationTaskManagementTemplate> lubricationTaskManagementTemplates = lubricationDeriveDate(plantEnum,lubricationTaskManagementList,lubricationTaskDetailList);
-            generateExcel(excelWriter,equMaintenanceTaskTemplates,lubricationTaskManagementTemplates,Boolean.TRUE);
+            List<EquLubricationTaskManagementTemplate> lubricationTaskManagementTemplates = lubricationDeriveDate(plantEnum, lubricationTaskManagementList, lubricationTaskDetailList);
+            generateExcel(excelWriter, equMaintenanceTaskTemplates, lubricationTaskManagementTemplates, Boolean.TRUE);
 
             excelWriter.finish();
 
             byte[] byteArray = byteArrayOutputStream.toByteArray();
 
-            MultipartFile multipartFile = new MockMultipartFile("file", newDate+"-保养/润滑月末未完成.xlsx"  , "application/vnd.ms-excel", byteArray);
-            R upload = CXCommonUtils.upload(multipartFile);
+            MultipartFile multipartFile = new MockMultipartFile("file", newDate + "-保养/润滑月末未完成.xlsx", "application/vnd.ms-excel", byteArray);
+
+            // 消息提醒id
+            String noticeId = SecurityUtil.getUUID();
+
+            R upload = CXCommonUtils.upload(multipartFile, noticeId);
             String fileItemId = "";
-            if ("200".equals(upload.getCode())){
+            if ("200".equals(upload.getCode())) {
                 JSONObject jsonObject = JSONUtil.parseObj(upload.getData());
-                fileItemId =jsonObject.get("id").toString();
+                fileItemId = jsonObject.get("filename").toString() + "-;-" + jsonObject.get("id").toString();
+                ;
             }
-            CXCommonUtils.sendNotify(END_UNFINISHED_TASK_TITLE, context, plantId, userIdList.stream().distinct().collect(Collectors.toList()),
+            CXCommonUtils.sendNotify(noticeId, END_UNFINISHED_TASK_TITLE, context, plantId, userIdList.stream().distinct().collect(Collectors.toList()),
                     fileItemId, END_UNFINISHED_TASK, true);
         }
 
@@ -508,48 +519,45 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     }
 
 
-
-
     /**
      * 润滑任务导出数据迁移
      *
-     * @param plantEnum 工厂
+     * @param plantEnum                     工厂
      * @param lubricationTaskManagementList 润滑主表
-     * @param lubricationTaskDetailList 润滑明细(部位)
+     * @param lubricationTaskDetailList     润滑明细(部位)
      * @return {@link List<EquLubricationTaskManagementTemplate>}
      * @date 2024/1/31 16:55
      * @author shangmi
-     *
      */
 
     private List<EquLubricationTaskManagementTemplate> lubricationDeriveDate(
             PlantEnum plantEnum,
             List<EquLubricationTaskManagementDo> lubricationTaskManagementList,
             List<EquLubricationTaskDetailDo> lubricationTaskDetailList) {
-        //模板数据
+        // 模板数据
         List<EquLubricationTaskManagementTemplate> equLubricationTaskManagementTemplates = new ArrayList<>();
-        //遍历主表
-        for (EquLubricationTaskManagementDo lubricationTaskManagementDo : lubricationTaskManagementList){
+        // 遍历主表
+        for (EquLubricationTaskManagementDo lubricationTaskManagementDo : lubricationTaskManagementList) {
             List<EquLubricationTaskDetailDo> lubricationTaskDetailDoList = lubricationTaskDetailList.stream()
                     .filter(info -> lubricationTaskManagementDo.getId().equals(info.getMasterid())).collect(Collectors.toList());
             String[] split = lubricationTaskManagementDo.getTaskfrequency().split(",");
             StringBuilder taskfrequency = new StringBuilder();
-            //遍历润滑周期
+            // 遍历润滑周期
             for (int i = 0; i < split.length; i++) {
                 taskfrequency.append(LubricationFrequencyEnum.massageOf(split[i]));
-                if (i!=split.length-1){
+                if (i != split.length - 1) {
                     taskfrequency.append(',');
                 }
             }
 
             equLubricationTaskManagementTemplates.addAll(
-                    //遍历子表转移数据
-                    lubricationTaskDetailDoList.stream().map(info ->{
+                    // 遍历子表转移数据
+                    lubricationTaskDetailDoList.stream().map(info -> {
                         EquLubricationTaskManagementTemplate lubricationTaskTemplate = new EquLubricationTaskManagementTemplate();
-                        BeanUtils.copyProperties(lubricationTaskManagementDo,lubricationTaskTemplate);
-                        BeanUtils.copyProperties(info,lubricationTaskTemplate);
-                        lubricationTaskTemplate.setPlant(PlantEnum.nameOf(plantEnum.getId()));
-                        lubricationTaskTemplate.setIslubricationcompleted("y".equals(info.getIslubricationcompleted())?"是":"否");
+                        BeanUtils.copyProperties(lubricationTaskManagementDo, lubricationTaskTemplate);
+                        BeanUtils.copyProperties(info, lubricationTaskTemplate);
+                        lubricationTaskTemplate.setPlant(plantEnum.getName());
+                        lubricationTaskTemplate.setIslubricationcompleted("y".equals(info.getIslubricationcompleted()) ? "是" : "否");
                         lubricationTaskTemplate.setFrequency(taskfrequency.toString());
                         return lubricationTaskTemplate;
                     }).collect(Collectors.toList())
@@ -561,32 +569,31 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     /**
      * 获得提醒用户ID
      *
-     * @param maintenanceTaskList               保养任务
-     * @param lubricationTaskManagementList     润滑任务
+     * @param maintenanceTaskList           保养任务
+     * @param lubricationTaskManagementList 润滑任务
      * @return {@link List<String>}
      * @date 2024/1/31 11:32
      * @author shangmi
-     *
      */
 
     public List<String> extractUsersByTask(List<EquMaintenanceTaskDo> maintenanceTaskList,
                                            List<EquLubricationTaskManagementDo> lubricationTaskManagementList,
-                                           String plantId){
+                                           String plantId) {
 
-        //车间ID
+        // 车间ID
         StringBuilder stringBuilder = new StringBuilder();
-        //赛选出所以车间 并去重
+        // 赛选出所以车间 并去重
         List<String> workshops = Stream.concat(maintenanceTaskList.stream().map(EquMaintenanceTaskDo::getWorkshopid),
                         lubricationTaskManagementList.stream().map(EquLubricationTaskManagementDo::getEquipmentworkshopid))
                 .distinct().collect(Collectors.toList());
-        //拼接车间信息
+        // 拼接车间信息
         for (int i = 0; i < workshops.size(); i++) {
             stringBuilder.append("'").append(workshops.get(i)).append("'");
-            if (i!= workshops.size()-1){
+            if (i != workshops.size() - 1) {
                 stringBuilder.append(",");
             }
         }
-        //需接收提醒用户ID
+        // 需接收提醒用户ID
         List<String> userIds = commonDao.getRoleUserIds(
                 "'车间主任','车间保养主管'", "so.ID IN (" + stringBuilder + ")"
         );
@@ -603,49 +610,46 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     /**
      * 为sheep页塞数据
      *
-     * @param excelWriter 表格
+     * @param excelWriter                        表格
      * @param equMaintenanceTaskTemplates
      * @param lubricationTaskManagementTemplates
      * @return
      * @date 2024/1/31 16:58
      * @author shangmi
-     *
      */
 
     public void generateExcel(
             ExcelWriter excelWriter,
             List<EquMaintenanceTaskTemplate> equMaintenanceTaskTemplates,
             List<EquLubricationTaskManagementTemplate> lubricationTaskManagementTemplates,
-            Boolean isTrue){
+            Boolean isTrue) {
 
-        WriteSheet maintainSheet = EasyExcel.writerSheet(0, isTrue?"保养任务跨月未完成":"保养任务月末未完成")
+        WriteSheet maintainSheet = EasyExcel.writerSheet(0, isTrue ? "保养任务跨月未完成" : "保养任务月末未完成")
                 .head(EquMaintenanceTaskTemplate.class).build();
-        WriteSheet lubricationSheet = EasyExcel.writerSheet(1, isTrue?"润滑任务跨月未完成":"润滑任务月末未完成")
+        WriteSheet lubricationSheet = EasyExcel.writerSheet(1, isTrue ? "润滑任务跨月未完成" : "润滑任务月末未完成")
                 .head(EquLubricationTaskManagementTemplate.class).build();
-        excelWriter.write(equMaintenanceTaskTemplates,maintainSheet);
-        excelWriter.write(lubricationTaskManagementTemplates,lubricationSheet);
+        excelWriter.write(equMaintenanceTaskTemplates, maintainSheet);
+        excelWriter.write(lubricationTaskManagementTemplates, lubricationSheet);
     }
 
     /**
      * 保养任务导出数据迁移
      *
-     * @param plantEnum 工厂枚举
+     * @param plantEnum           工厂枚举
      * @param maintenanceTaskList 任务数据
      * @return {@link List<EquMaintenanceTaskTemplate>}
      * @date 2024/1/31 15:49
      * @author shangmi
-     *
      */
 
-    public List<EquMaintenanceTaskTemplate> maintainDeriveDate(PlantEnum plantEnum, List<EquMaintenanceTaskDo> maintenanceTaskList){
-        return maintenanceTaskList.stream().map(info ->{
+    public List<EquMaintenanceTaskTemplate> maintainDeriveDate(PlantEnum plantEnum, List<EquMaintenanceTaskDo> maintenanceTaskList) {
+        return maintenanceTaskList.stream().map(info -> {
             EquMaintenanceTaskTemplate equMaintenanceTaskTemplate = new EquMaintenanceTaskTemplate();
-            BeanUtils.copyProperties(info,equMaintenanceTaskTemplate);
+            BeanUtils.copyProperties(info, equMaintenanceTaskTemplate);
 
             equMaintenanceTaskTemplate.setPlant(plantEnum.getName());
-            equMaintenanceTaskTemplate.setMaintenancetype(MaintenanceTypeEnum.messageOf(info.getMaintenancetype()));
-            equMaintenanceTaskTemplate.setTaskstate(TaskStatusEnum.massageOf(info.getTaskstate()));
-
+            equMaintenanceTaskTemplate.setMaintenancetype(info.getMaintenancetype()!=null?MaintenanceTypeEnum.typeOf(info.getMaintenancetype()):null);
+            equMaintenanceTaskTemplate.setTaskstate(info.getTaskstate()!=null?TaskStatusEnum.massageOf(info.getTaskstate()):null);
             return equMaintenanceTaskTemplate;
         }).collect(Collectors.toList());
     }

+ 25 - 21
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/utils/ExcelUtils.java

@@ -1,10 +1,11 @@
 package com.rongwei.bscommon.sys.utils;
 
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.rongwei.rwcommon.base.R;
-import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
@@ -14,6 +15,7 @@ import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.nio.file.Files;
 import java.util.Map;
 
 /**
@@ -42,38 +44,40 @@ public class ExcelUtils {
 
 
     /**
-     * 调用接口生成文件
+     * 生成附件返回附件信息
+     *
      * @param workbook
-
+     * @param noticeId
+     * @param originalFilename
      * @return
      */
-    public static  SysFileItemDo feginCommonUpload(HSSFWorkbook workbook){
+    public static String feginCommonUpload(HSSFWorkbook workbook, String noticeId, String originalFilename){
 
-        SysFileItemDo fileItemDo =null;
+        String returnStr =null;
         try {
-            // 创建临时文件
-            File tempFile = File.createTempFile("tempFile",".xls");
-
+            // 1. 将workbook保存为临时文件
+            File tempFile = File.createTempFile("workbook", ".xlsx");
+            try (FileOutputStream fos = new FileOutputStream(tempFile)) {
+                workbook.write(fos);
+            }
+            // 2. 读取临时文件的内容并将其转换为byte[] byteArray
+            byte[] byteArray = Files.readAllBytes(tempFile.toPath());
             tempFile.deleteOnExit();
-            //数据写入临时文件中
-            FileOutputStream outputStream = new FileOutputStream(tempFile);
-            workbook.write(outputStream);
-            outputStream.close();
-            // 获取临时文件的InputStream
-            InputStream inputStream = new FileInputStream(tempFile);
-            // 使用临时文件创建一个 MultipartFile 实例
-            MultipartFile multipartFile = new MockMultipartFile("file", tempFile.getName() , "application/vnd.ms-excel", inputStream);
+
+            MultipartFile multipartFile = new MockMultipartFile("file",
+                    originalFilename,
+                    SaveConstans.ContentType.XLSX, byteArray);
             //文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
-            R upload = CXCommonUtils.upload(multipartFile);
+            R upload = CXCommonUtils.upload(multipartFile,noticeId);
             if (upload.getCode().equals("200")){
-                 fileItemDo = JSONUtil.toBean(upload.getData().toString(), SysFileItemDo.class);
-
+                JSONObject jsonObject = JSONUtil.parseObj(upload.getData());
+                returnStr = jsonObject.get("filename").toString() + "-;-" + jsonObject.get("id").toString();
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
 
-        return  fileItemDo;
+        return  returnStr;
     }
 
     /**
@@ -97,7 +101,7 @@ public class ExcelUtils {
             // 使用临时文件创建一个 MultipartFile 实例
             MultipartFile multipartFile = new MockMultipartFile("file", tempFile.getName() , "application/vnd.ms-excel", inputStream);
             //文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
-            R upload = CXCommonUtils.upload(multipartFile);
+            R upload = CXCommonUtils.upload(multipartFile,"");
             if (upload.getCode().equals("200")){
                 Map<String,String> map = (Map<String, String>) JSON.parse(upload.getData().toString());
                 id =map.get("id");

BIN
cx-equipment/cx-equipment-common/src/main/resources/template/设备部位重复故障问题.xls


+ 10 - 3
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/TaskStatusEnum.java

@@ -2,6 +2,7 @@ package com.rongwei.bsentity.enums;
 
 import lombok.Getter;
 
+import java.util.Objects;
 import java.util.stream.Stream;
 
 /**
@@ -12,8 +13,14 @@ import java.util.stream.Stream;
  */
 @Getter
 public enum TaskStatusEnum {
-    EXPORT_DISTRIBUTION("10","待派发")
-
+    EXPORT_DISTRIBUTION("10","待派发"),
+    UNDER_WAY("30","进行中"),
+    CLOSED("40","已关闭"),
+    WAIT_ACCEPTANCE("50","待验收"),
+    DONE("60","已完成"),
+    SPARE_PARTS_READY("70","备件已准备"),
+    REWORK_MAINTENANCE("20","返工保养"),
+    REWORK_OVERHAUL("80","返工大修")
     ;
     public String code;
     public String massage;
@@ -28,7 +35,7 @@ public enum TaskStatusEnum {
     }
 
     public static TaskStatusEnum getTaskStatusByCode(String code,TaskStatusEnum taskStatusEnum){
-        return Stream.of(values()).filter(info->code==info.code).findFirst().orElse(taskStatusEnum);
+        return Stream.of(values()).filter(info-> Objects.equals(code, info.code)).findFirst().orElse(taskStatusEnum);
     }
 
     public static String codeOf(String massage){

+ 3 - 0
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquipmentSendNotifyController.java

@@ -6,6 +6,7 @@ import com.rongwei.bsentity.dto.IdGeneralDTO;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -142,6 +143,7 @@ public class EquipmentSendNotifyController {
      * @date 2024/1/30 15:08
      * @author shangmi
      */
+    @Scheduled(cron = "0 0 4 * * 1,3 ")
     @PostMapping("/previousUnfinishedTaskNotify")
     public R previousUnfinishedTaskNotify() {
         try {
@@ -161,6 +163,7 @@ public class EquipmentSendNotifyController {
      * @date 2024/1/30 15:08
      * @author shangmi
      */
+    @Scheduled(cron = "0 10 4 25/1 * ? ")
     @PostMapping("/endUnfinishedTaskNotify")
     public R endUnfinishedTaskNotify() {
         try {

+ 21 - 1
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/MaintenanceController.java

@@ -78,7 +78,7 @@ public class MaintenanceController {
      *
      */
 
-    @Scheduled(cron = "0 0 22 10/1 * *")
+    @Scheduled(cron = "0 0 22 28/1 * *")
     @PostMapping("batchSavePlansTiming")
     public R batchSavePlansTiming(){
         try {
@@ -90,6 +90,16 @@ public class MaintenanceController {
         }
     }
 
+    /**
+     * 生成年度任务
+     *
+     * @param planYearCopy
+     * @return {@link R}
+     * @date 2024/2/5 10:36
+     * @author shangmi
+     *
+     */
+
     @PostMapping("saveYearByTask")
     public R saveYearByTask(@RequestBody PlanYearCopyDTO planYearCopy){
         try {
@@ -101,6 +111,16 @@ public class MaintenanceController {
         }
     }
 
+    /**
+     * 附件导入
+     *
+     * @param multipartFile
+     * @return {@link R}
+     * @date 2024/2/5 10:35
+     * @author shangmi
+     *
+     */
+
     @PostMapping("importStandardSave")
     public R uploadStandardSave(@RequestParam("file") MultipartFile multipartFile){
         try {

+ 16 - 0
cx-safe-check/cx-save-check-entity/src/main/java/com/rongwe/scentity/vo/PushMessageToAppRequestVo.java

@@ -0,0 +1,16 @@
+package com.rongwe.scentity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/2/5
+ */
+@Data
+public class PushMessageToAppRequestVo {
+    private String title;
+    private String content;
+    private List<String> userIds;
+}

+ 57 - 0
cx-safe-check/cx-save-check-server/src/main/java/com/rongwei/savecheck/controller/AppPushMessageController.java

@@ -0,0 +1,57 @@
+package com.rongwei.savecheck.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.rongwe.scentity.vo.PushMessageToAppRequestVo;
+import com.rongwei.safecommon.utils.CXCommonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/2/5
+ */
+@RestController
+@RequestMapping("app/pushMessage")
+@Slf4j
+public class AppPushMessageController {
+    /**
+     * 旧版批量替换沿用版本post,url传参
+     * @param message
+     */
+    @PostMapping("/old/pushToApp")
+    public void pushToWeb(@RequestParam String message){
+        try {
+            JSONObject jsonObject = JSONObject.parseObject(message);
+            String title = jsonObject.getString("title");
+            String content = jsonObject.getString("content");
+            List<String> userIdList = JSON.parseArray(jsonObject.getJSONArray("userIds").toJSONString(), String.class);
+            Lists.partition(userIdList, 10).forEach(userIds -> CXCommonUtils.pushApp(title, content, userIds));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 新版可用此方式,post实体类传参
+     */
+    @PostMapping("/new/pushToApp")
+    public void pushToWeb(@RequestBody PushMessageToAppRequestVo model){
+        try {
+            String title = model.getTitle();
+            String content = model.getContent();
+            List<String> userIdList = model.getUserIds();
+            Lists.partition(userIdList, 10).forEach(userIds -> CXCommonUtils.pushApp(title, content, userIds));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+
+}