Selaa lähdekoodia

设备之系统——消息提醒 V3.0
1、保养/润滑跨月未完成提醒
2、月末保养/润滑未完成提醒

hyq 1 vuosi sitten
vanhempi
commit
f3c638568f
15 muutettua tiedostoa jossa 753 lisäystä ja 15 poistoa
  1. 27 0
      bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java
  2. 103 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquLubricationTaskManagementTemplate.java
  3. 121 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquMaintenanceTaskTemplate.java
  4. 2 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquLubricationTaskDetailService.java
  5. 3 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquLubricationTaskManagementService.java
  6. 2 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquMaintenanceTaskService.java
  7. 21 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquipmentSendNotifyService.java
  8. 8 0
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquLubricationTaskDetailServiceImpl.java
  9. 16 4
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquLubricationTaskManagementServiceImpl.java
  10. 11 1
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquMaintenanceTaskServiceImpl.java
  11. 311 4
      cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquipmentSendNotifyServiceImpl.java
  12. 43 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/LubricationFrequencyEnum.java
  13. 2 1
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/PlannedStatusEnum.java
  14. 41 0
      cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/TaskStatusEnum.java
  15. 42 5
      cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquipmentSendNotifyController.java

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

@@ -152,6 +152,14 @@ public class SaveConstans {
          * 设备报废申请审批通过通知
          */
         public static final String EQU_SCRAP_TASK = "equscraptask";
+        /**
+         * 设备报废申请审批通过通知
+         */
+        public static final String PREVIOUS_UNFINISHED_TASK = "nextmonthmaintenance";
+        /**
+         * 设备报废申请审批通过通知
+         */
+        public static final String END_UNFINISHED_TASK = "endmonthmaintenance";
 
         /**
          * 故障停机提醒
@@ -248,6 +256,14 @@ public class SaveConstans {
          * 故障停机提醒
          */
         public static final String FAUL_STOP_TITLE = "故障停机提醒";
+        /**
+         * 保养/润滑跨月未完成提醒
+         */
+        public static final String PREVIOUS_UNFINISHED_TASK_TITLE = "保养/润滑跨月未完成提醒";
+        /**
+         * 保养/润滑月末未完成提醒
+         */
+        public static final String END_UNFINISHED_TASK_TITLE = "保养/润滑月末未完成提醒";
     }
 
     public static class NotifyContent {
@@ -336,6 +352,17 @@ public class SaveConstans {
          */
         public static final String FAUL_STOP_CONTEXT = "【%s】【%s】在【%s】发生停机故障(问题说明:【%s】),请及时安排维修工程跟进处理,(申请人/时间:【%s】【%s】)";
 
+
+        /**
+         * 保养/润滑跨月未完成提醒内容
+         */
+        public static final String PREVIOUS_UNFINISHED_TASK_CONTENT = "【%s】保养任务有【%s】个、润滑任务有【%s】个已经跨月未登记完成,请各车间相关保养负责人及时跟进处理,具体任务详见附件清单。";
+
+        /**
+         * 保养/润滑月末未完成提醒内容
+         */
+        public static final String END_UNFINISHED_TASK_CONTENT = "截止【%s】本月末【%s】有保养任务有【%s】个、润滑任务有【%s】个已经跨月未登记完成,请各车间相关保养负责人及时跟进处理,具体任务详见附件清单。";
+
     }
 
     /**

+ 103 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquLubricationTaskManagementTemplate.java

@@ -0,0 +1,103 @@
+package com.rongwei.bscommon.sys.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author shangmi
+ * @title EquLubricationTaskManagementTemplate
+ * @date 2024/1/31 10:19
+ * @description 润滑任务提醒导出模板
+ */
+@Data
+// @EqualsAndHashCode
+public class EquLubricationTaskManagementTemplate {
+
+    /**
+     * table name:PLANT
+     * table type:varchar(35)
+     * table comment:所属工厂
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "所属工厂",index = 0)
+    private String plant;
+
+    /**
+     * 年份
+     */
+    @ExcelProperty(value = "年",index = 1)
+    private Integer year;
+
+    /**
+     * 月份
+     */
+    @ExcelProperty(value = "月",index = 2)
+    private Integer month;
+
+    /**
+     * 润滑任务编号
+     */
+    @ColumnWidth(14)
+    @ExcelProperty(value = "任务编号",index = 3)
+    private String tasknumber;
+    /**
+     * 设备使用车间名称
+     */
+    @ColumnWidth(16)
+    @ExcelProperty(value = "设备使用车间",index = 4)
+    private String equipmentworkshop;
+    /**
+     * 设备名称
+     */
+    @ColumnWidth(16)
+    @ExcelProperty(value = "润滑设备名称",index = 5)
+    private String equipment;
+    /**
+     * 设备编号
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "设备编号",index = 6)
+    private String equipmentnumber;
+    /**
+     * 润滑部位
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "润滑部位",index = 7)
+    private String lubricationposition;
+    /**
+     * 频率
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "周期",index = 8)
+    private String frequency;
+
+    /**
+     * 润滑油品
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "润滑油品",index = 9)
+    private String lubricants;
+
+    /**
+     * 润滑量
+     */
+    @ExcelProperty(value = "润滑量",index = 10)
+    private BigDecimal lubricationamount;
+
+    /**
+     * 润滑人
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "润滑人",index = 11)
+    private String lubricator;
+
+    /**
+     * 是否润滑完成
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "是否完成",index = 12)
+    private String islubricationcompleted;
+}

+ 121 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/excel/EquMaintenanceTaskTemplate.java

@@ -0,0 +1,121 @@
+package com.rongwei.bscommon.sys.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author shangmi
+ * @title EquMaintenanceTaskTemplate
+ * @date 2024/1/31 10:00
+ * @description 保养任务提醒导出模板
+ */
+@Data
+@EqualsAndHashCode
+public class EquMaintenanceTaskTemplate {
+    /**
+     * table name:PLANT
+     * table type:varchar(35)
+     * table comment:所属工厂
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "所属工厂",index = 0)
+    private String plant;
+
+    /**
+     * table name:PLANYEAR
+     * table type:int
+     * table comment:计划年份
+     */
+    @ExcelProperty(value = "年",index = 1)
+    private Integer planyear;
+    /**
+     * table name:MONTH
+     * table type:int
+     * table comment:计划月份
+     */
+    @ExcelProperty(value = "月",index = 2)
+    private String month;
+    /**
+     * table name:TASKID
+     * table type:varchar(50)
+     * table comment:任务号
+     */
+    @ColumnWidth(14)
+    @ExcelProperty(value = "任务编号",index = 3)
+    private String taskid;
+    /**
+     * table name:WORKSHOP
+     * table type:varchar(50)
+     * table comment:使用车间
+     */
+    @ColumnWidth(16)
+    @ExcelProperty(value = "设备使用车间",index = 4)
+    private String workshop;
+    /**
+     * table name:EQUIPMENTNAME
+     * table type:varchar(50)
+     * table comment:设备名称
+     */
+    @ColumnWidth(16)
+    @ExcelProperty(value = "设备名称",index = 5)
+    private String equipmentname;
+    /**
+     * table name:EQUIPMENTNUMBER
+     * table type:varchar(50)
+     * table comment:设备编号
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "设备编号",index = 6)
+    private String equipmentnumber;
+    /**
+     * table name:MAINTENANCESITE
+     * table type:text
+     * table comment:保养部位
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "保养部位",index = 7)
+    private String maintenancesite;
+    /**
+     * table name:MAINTENANCECONTENT
+     * table type:text
+     * table comment:问题点/计划保养内容
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "保养内容",index = 8)
+    private String maintenancecontent;
+    /**
+     * table name:PRINCIPAL
+     * table type:text
+     * table comment:责任人
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "保养责任人",index = 9)
+    private String principal;
+    /**
+     * table name:OTHERENGINEERS
+     * table type:text
+     * table comment:其他工程师
+     */
+    @ColumnWidth(20)
+    @ExcelProperty(value = "其他工程师",index = 10)
+    private String otherengineers;
+    /**
+     * table name:MAINTENANCETYPE
+     * table type:varchar(20)
+     * table comment:保养检修分类
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "保养分类",index = 11)
+    private String maintenancetype;
+    /**
+     * table name:TASKSTATE
+     * table type:varchar(20)
+     * table comment:任务状态
+     */
+    @ColumnWidth(11)
+    @ExcelProperty(value = "任务状态",index = 12)
+    private String taskstate;
+
+}

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

@@ -21,4 +21,6 @@ public interface EquLubricationTaskDetailService extends IService<EquLubrication
      * @return
      */
     List<EquLubricationTaskDetailVo> queryAllTaskDetailList(String tenantId);
+
+    List<EquLubricationTaskDetailDo> getDetailByMasterId(List<String> lubricationIds);
 }

+ 3 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquLubricationTaskManagementService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.EquLubricationTaskManagementDo;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -22,4 +23,6 @@ public interface EquLubricationTaskManagementService extends IService<EquLubrica
      * @param response
      */
     void wordExportLubricationTask(Map<String, Object> parameter, HttpServletResponse response);
+
+    List<EquLubricationTaskManagementDo> getListByTimeQuantum(String newDate, String oldDate);
 }

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

@@ -18,4 +18,6 @@ public interface EquMaintenanceTaskService extends IService<EquMaintenanceTaskDo
     int insertBatch(List<EquMaintenanceTaskDo> equMaintenanceTaskDos);
 
     List<EquMaintenanceTaskDo> getListByYearAndMonth(int year, int month);
+
+    List<EquMaintenanceTaskDo> getListByTimeQuantum(String newDate, String oldDate);
 }

+ 21 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquipmentSendNotifyService.java

@@ -73,9 +73,30 @@ public interface EquipmentSendNotifyService {
      */
     R deviceRepeatedlyFailsNotify();
 
+
+    /**
+     * 保养/润滑跨月未完成提醒
+     *
+     * @return {@link R}
+     * @date 2024/1/30 15:08
+     * @author shangmi
+     *
+     */
+    R previousUnfinishedTaskNotify();
+
     /**
      * 故障停机提醒
      * @param parameter
      */
     void sendFaultStopRemind(Map<String, String> parameter);
+
+    /**
+     * 保养/润滑月末未完成提醒
+     *
+     * @return {@link R}
+     * @date 2024/1/30 15:08
+     * @author shangmi
+     *
+     */
+    R endUnfinishedTaskNotify();
 }

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

@@ -1,5 +1,6 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.EquLubricationTaskDetailMapperDao;
 import com.rongwei.bscommon.sys.service.EquLubricationTaskDetailService;
@@ -28,4 +29,11 @@ public class EquLubricationTaskDetailServiceImpl extends ServiceImpl<EquLubricat
     public List<EquLubricationTaskDetailVo> queryAllTaskDetailList(String tenantId) {
         return equLubricationTaskDetailMapperDao.queryAllTaskDetailList(tenantId);
     }
+
+    @Override
+    public List<EquLubricationTaskDetailDo> getDetailByMasterId(List<String> lubricationIds) {
+        LambdaQueryWrapper<EquLubricationTaskDetailDo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(EquLubricationTaskDetailDo::getMasterid,lubricationIds);
+        return equLubricationTaskDetailMapperDao.selectList(queryWrapper);
+    }
 }

+ 16 - 4
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquLubricationTaskManagementServiceImpl.java

@@ -3,6 +3,7 @@ package com.rongwei.bscommon.sys.service.impl;
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.CommonDao;
 import com.rongwei.bscommon.sys.dao.EquLubricationTaskManagementMapperDao;
@@ -14,6 +15,7 @@ import com.rongwei.bsentity.domain.EquLubricationTaskDetailVo;
 import com.rongwei.bsentity.domain.EquLubricationTaskManagementDo;
 import com.rongwei.rwadmincommon.system.domain.SysDictDo;
 import com.rongwei.rwadmincommon.system.service.SysDictService;
+import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.utils.StringUtils;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.slf4j.Logger;
@@ -22,10 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -49,6 +48,9 @@ public class EquLubricationTaskManagementServiceImpl extends ServiceImpl<EquLubr
     @Autowired
     private SysDictService sysDictService;
 
+    @Autowired
+    private EquLubricationTaskManagementMapperDao lubricationTaskManagementMapperDao;
+
     @Override
     public void wordExportLubricationTask(Map<String, Object> parameter, HttpServletResponse response) {
         log.info("开始导出润滑任务明细");
@@ -96,4 +98,14 @@ public class EquLubricationTaskManagementServiceImpl extends ServiceImpl<EquLubr
             ExceptionUtils.printExceptionDetail(e,"润滑任务明细导出异常");
         }
     }
+
+    @Override
+    public List<EquLubricationTaskManagementDo> getListByTimeQuantum(String newDate, String oldDate) {
+        LambdaQueryWrapper<EquLubricationTaskManagementDo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(EquLubricationTaskManagementDo::getTaskstatus, Arrays.asList(10,20,70))
+                .lt(BaseDo::getCreatedate,newDate)
+                .gt(BaseDo::getCreatedate,oldDate)
+                .eq(BaseDo::getDeleted,0);
+        return lubricationTaskManagementMapperDao.selectList(queryWrapper);
+    }
 }

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

@@ -9,8 +9,8 @@ import com.rongwei.bsentity.dto.TaskCreatorDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * @author shangmi
@@ -63,4 +63,14 @@ public class EquMaintenanceTaskServiceImpl extends ServiceImpl<EquMaintenanceTas
                 .eq(EquMaintenanceTaskDo::getDeleted,0);
         return maintenanceTaskDao.selectList(queryWrapper);
     }
+
+    @Override
+    public List<EquMaintenanceTaskDo> getListByTimeQuantum(String newDate, String oldDate) {
+        LambdaQueryWrapper<EquMaintenanceTaskDo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(EquMaintenanceTaskDo::getTaskstart, Arrays.asList(10,30,70))
+                .lt(EquMaintenanceTaskDo::getCreatedate,newDate)
+                .ge(EquMaintenanceTaskDo::getCreatedate,oldDate)
+                .eq(EquMaintenanceTaskDo::getDeleted,0);
+        return maintenanceTaskDao.selectList(queryWrapper);
+    }
 }

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

@@ -1,16 +1,23 @@
 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.rongwei.bscommon.sys.dao.CommonDao;
+import com.rongwei.bscommon.sys.excel.EquLubricationTaskManagementTemplate;
+import com.rongwei.bscommon.sys.excel.EquMaintenanceTaskTemplate;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.ExcelUtils;
-import com.rongwei.bsentity.domain.AspCheckItems;
-import com.rongwei.bsentity.domain.EquLubricationTaskManagementDo;
-import com.rongwei.bsentity.domain.EquMaintenanceOrderDo;
-import com.rongwei.bsentity.domain.EquMaintenanceTaskDo;
+import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.dto.EquMaintenanceOrderSumDTO;
 import com.rongwei.bsentity.dto.EquipmentDisposeDTO;
+import com.rongwei.bsentity.enums.LubricationFrequencyEnum;
+import com.rongwei.bsentity.enums.MaintenanceTypeEnum;
 import com.rongwei.bsentity.enums.PlantEnum;
+import com.rongwei.bsentity.enums.TaskStatusEnum;
 import com.rongwei.rwadmincommon.system.domain.SysDictDo;
 import com.rongwei.rwadmincommon.system.service.SysDictService;
 import com.rongwei.rwcommon.base.R;
@@ -21,9 +28,13 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
 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.*;
@@ -58,6 +69,9 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
     @Autowired
     private EquLubricationTaskManagementService equLubricationTaskManagementService;
 
+    @Autowired
+    private EquLubricationTaskDetailService lubricationTaskDetailService;
+
     @Autowired
     private EquMaintenanceOrderService equMaintenanceOrderService;
 
@@ -305,6 +319,159 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
         CXCommonUtils.sendNotify(FAUL_STOP_TITLE, context, null, userId.stream().distinct().collect(Collectors.toList()), dataId, FAUL_STOP_REMIND, true);
     }
 
+    /**
+     * 保养/润滑跨月未完成提醒
+     *
+     * @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);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String newDate = simpleDateFormat.format(date);
+        calendar.set(Calendar.MONTH,-12);
+        String oldDate = simpleDateFormat.format(calendar.getTime());
+        //查询距近一年时间内未完成保养/润滑任务
+        List<EquMaintenanceTaskDo> maintenanceTaskDoList =  maintenanceTaskService.getListByTimeQuantum(newDate,oldDate);
+        List<EquLubricationTaskManagementDo> lubricationTaskManagementDoList = equLubricationTaskManagementService
+                .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);
+
+        //删除提醒
+        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){
+                continue;
+            }
+            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList,plantId);
+            // 发送内容
+            String context = String.format(PREVIOUS_UNFINISHED_TASK_CONTENT,
+                    plantEnum.getName(),
+                    maintenanceTaskList.size(),
+                    lubricationTaskDetailList.size());
+
+            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);
+
+            excelWriter.finish();
+
+            byte[] byteArray = byteArrayOutputStream.toByteArray();
+
+            MultipartFile multipartFile = new MockMultipartFile("file", newDate+"-保养/润滑跨月未完成.xlsx"  , "application/vnd.ms-excel", byteArray);
+            R upload = CXCommonUtils.upload(multipartFile);
+            String fileItemId = "";
+            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();
+            }
+
+
+            CXCommonUtils.sendNotify(PREVIOUS_UNFINISHED_TASK_TITLE, context,plantId , userIdList.stream().distinct().collect(Collectors.toList()),
+                    fileItemId, PREVIOUS_UNFINISHED_TASK, true);
+        }
+
+        return R.ok();
+    }
+
+    @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);
+        String oldDate = simpleDateFormat.format(calendar.getTime());
+        //查询距近一年时间内未完成保养/润滑任务
+        List<EquMaintenanceTaskDo> maintenanceTaskDoList =  maintenanceTaskService.getListByTimeQuantum(newDate,oldDate);
+        List<EquLubricationTaskManagementDo> lubricationTaskManagementDoList = equLubricationTaskManagementService
+                .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);
+        //删除提醒
+        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){
+                continue;
+            }
+            List<String> userIdList = extractUsersByTask(maintenanceTaskList, lubricationTaskManagementList,plantId);
+            // 发送内容
+            String context = String.format(END_UNFINISHED_TASK_CONTENT,
+                    newDate,
+                    plantEnum.getName(),
+                    maintenanceTaskList.size(),
+                    lubricationTaskDetailList.size());
+
+            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);
+
+            excelWriter.finish();
+
+            byte[] byteArray = byteArrayOutputStream.toByteArray();
+
+            MultipartFile multipartFile = new MockMultipartFile("file", newDate+"-保养/润滑月末未完成.xlsx"  , "application/vnd.ms-excel", byteArray);
+            R upload = CXCommonUtils.upload(multipartFile);
+            String fileItemId = "";
+            if ("200".equals(upload.getCode())){
+                JSONObject jsonObject = JSONUtil.parseObj(upload.getData());
+                fileItemId =jsonObject.get("id").toString();
+            }
+            CXCommonUtils.sendNotify(END_UNFINISHED_TASK_TITLE, context, plantId, userIdList.stream().distinct().collect(Collectors.toList()),
+                    fileItemId, END_UNFINISHED_TASK, true);
+        }
+
+        return R.ok();
+    }
+
     /**
      * 生成设备部位重复故障问题提醒
      *
@@ -429,6 +596,146 @@ public class EquipmentSendNotifyServiceImpl implements EquipmentSendNotifyServic
         return calendar.getTime();
 
     }
+
+    /**
+     * 润滑任务导出数据迁移
+     *
+     * @param plantEnum 工厂
+     * @param lubricationTaskManagementList 润滑主表
+     * @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){
+            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){
+                    taskfrequency.append(',');
+                }
+            }
+
+            equLubricationTaskManagementTemplates.addAll(
+                    //遍历子表转移数据
+                    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())?"是":"否");
+                        lubricationTaskTemplate.setFrequency(taskfrequency.toString());
+                        return lubricationTaskTemplate;
+                    }).collect(Collectors.toList())
+            );
+        }
+        return equLubricationTaskManagementTemplates;
+    }
+
+    /**
+     * 获得提醒用户ID
+     *
+     * @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){
+
+        //车间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){
+                stringBuilder.append(",");
+            }
+        }
+        //需接收提醒用户ID
+        List<String> userIds = commonDao.getRoleUserIds(
+                "'车间主任','车间保养主管'", "so.ID IN (" + stringBuilder + ")"
+        );
+        userIds.addAll(
+                commonDao.getRoleUserIds(
+                        "'设备部部门长','设备部保养主管'", "(so.FULLPID like '," + plantId + "%' or so.ID='" + plantId + "')"
+                )
+        );
+
+        return userIds;
+    }
+
+
+    /**
+     * 为sheep页塞数据
+     *
+     * @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){
+
+        WriteSheet maintainSheet = EasyExcel.writerSheet(0, isTrue?"保养任务跨月未完成":"保养任务月末未完成")
+                .head(EquMaintenanceTaskTemplate.class).build();
+        WriteSheet lubricationSheet = EasyExcel.writerSheet(1, isTrue?"润滑任务跨月未完成":"润滑任务月末未完成")
+                .head(EquLubricationTaskManagementTemplate.class).build();
+        excelWriter.write(equMaintenanceTaskTemplates,maintainSheet);
+        excelWriter.write(lubricationTaskManagementTemplates,lubricationSheet);
+    }
+
+    /**
+     * 保养任务导出数据迁移
+     *
+     * @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 ->{
+            EquMaintenanceTaskTemplate equMaintenanceTaskTemplate = new EquMaintenanceTaskTemplate();
+            BeanUtils.copyProperties(info,equMaintenanceTaskTemplate);
+
+            equMaintenanceTaskTemplate.setPlant(plantEnum.getName());
+            equMaintenanceTaskTemplate.setMaintenancetype(MaintenanceTypeEnum.messageOf(info.getMaintenancetype()));
+            equMaintenanceTaskTemplate.setTaskstate(TaskStatusEnum.massageOf(info.getTaskstate()));
+
+            return equMaintenanceTaskTemplate;
+        }).collect(Collectors.toList());
+    }
 }
 
 

+ 43 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/LubricationFrequencyEnum.java

@@ -0,0 +1,43 @@
+package com.rongwei.bsentity.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * @author shangmi
+ * @title lubricationFrequencyEnum
+ * @date 2024/1/31 16:37
+ * @description 润滑频率周期
+ */
+public enum LubricationFrequencyEnum {
+    WEEKLY("20","每周"),
+    MONTHLY("40","每月"),
+    PER_QUARTER("60","每季度"),
+    SEMIANNUALLY("70","每半年"),
+    ;
+
+    private String code;
+
+    private String massage;
+
+    LubricationFrequencyEnum(String code, String massage) {
+        this.code = code;
+        this.massage = massage;
+    }
+
+
+    public static String massageOf(String code){
+        return getTaskStatusByCode(code,null).massage;
+    }
+
+    public static LubricationFrequencyEnum getTaskStatusByCode(String code,LubricationFrequencyEnum lubricationFrequencyEnum){
+        return Stream.of(values()).filter(info->code.equals(info.code)).findFirst().orElse(lubricationFrequencyEnum);
+    }
+
+    public static String codeOf(String massage){
+        return getTaskStatusByMassage(massage,null).code;
+    }
+
+    public static LubricationFrequencyEnum getTaskStatusByMassage(String massage,LubricationFrequencyEnum lubricationFrequencyEnum){
+        return Stream.of(values()).filter(info->massage.equals(info.massage)).findFirst().orElse(lubricationFrequencyEnum);
+    }
+}

+ 2 - 1
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/PlannedStatusEnum.java

@@ -13,7 +13,8 @@ public enum PlannedStatusEnum {
     UNLOCKED("未锁定","unlocked"),
     LOCKED("锁定","Locked"),
     PUBLISHED_TASK("部分任务生成","published_task"),
-    PUBLISHED_TASK_ALL("任务全部生成","published_task_all")
+    PUBLISHED_TASK_ALL("任务全部生成","published_task_all"),
+    SCRAP("停用","scrap")
     ;
     private String Status;
     private String value;

+ 41 - 0
cx-equipment/cx-equipment-entity/src/main/java/com/rongwei/bsentity/enums/TaskStatusEnum.java

@@ -0,0 +1,41 @@
+package com.rongwei.bsentity.enums;
+
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+/**
+ * @author shangmi
+ * @title TaskStatusEnum
+ * @date 2024/1/31 15:08
+ * @description 任务状态
+ */
+@Getter
+public enum TaskStatusEnum {
+    EXPORT_DISTRIBUTION("10","待派发")
+
+    ;
+    public String code;
+    public String massage;
+
+    TaskStatusEnum(String code, String massage) {
+        this.code = code;
+        this.massage = massage;
+    }
+
+    public static String massageOf(String code){
+        return getTaskStatusByCode(code,null).massage;
+    }
+
+    public static TaskStatusEnum getTaskStatusByCode(String code,TaskStatusEnum taskStatusEnum){
+        return Stream.of(values()).filter(info->code==info.code).findFirst().orElse(taskStatusEnum);
+    }
+
+    public static String codeOf(String massage){
+        return getTaskStatusByMassage(massage,null).code;
+    }
+
+    public static TaskStatusEnum getTaskStatusByMassage(String massage,TaskStatusEnum taskStatusEnum){
+        return Stream.of(values()).filter(info->massage.equals(info.massage)).findFirst().orElse(taskStatusEnum);
+    }
+}

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

@@ -49,7 +49,7 @@ public class EquipmentSendNotifyController {
         }
     }
 
-    ;
+
 
 
     /**
@@ -73,7 +73,7 @@ public class EquipmentSendNotifyController {
         }
     }
 
-    ;
+
 
     /**
      * 根据润滑任务ID发送验收 提醒
@@ -96,7 +96,6 @@ public class EquipmentSendNotifyController {
         }
     }
 
-    ;
 
 
     /**
@@ -116,7 +115,6 @@ public class EquipmentSendNotifyController {
         }
     }
 
-    ;
 
     /**
      * 故障停机提醒
@@ -135,6 +133,45 @@ public class EquipmentSendNotifyController {
         }
     }
 
-    ;
+
+
+    /**
+     * 保养/润滑跨月未完成提醒
+     *
+     * @return {@link R}
+     * @date 2024/1/30 15:08
+     * @author shangmi
+     */
+    @PostMapping("/previousUnfinishedTaskNotify")
+    public R previousUnfinishedTaskNotify() {
+        try {
+            log.info("进入接口:/send-notify/previousUnfinishedTaskNotify;入参为:无");
+            return sendNotifyService.previousUnfinishedTaskNotify();
+        } catch (Exception e) {
+            ExceptionUtils.printExceptionDetail(e, "发送消息提醒失败,异常为:");
+            log.info(e.getMessage());
+            return R.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 保养/润滑月末未完成提醒
+     *
+     * @return {@link R}
+     * @date 2024/1/30 15:08
+     * @author shangmi
+     */
+    @PostMapping("/endUnfinishedTaskNotify")
+    public R endUnfinishedTaskNotify() {
+        try {
+            log.info("进入接口:/send-notify/previousUnfinishedTaskNotify;入参为:无");
+            return sendNotifyService.endUnfinishedTaskNotify();
+        } catch (Exception e) {
+            ExceptionUtils.printExceptionDetail(e, "发送消息提醒失败,异常为:");
+            log.info(e.getMessage());
+            return R.error(e.getMessage());
+        }
+    }
+
 
 }