Procházet zdrojové kódy

定时任务:保养工单生成、保养工单生成提前提醒 消息提醒目前采用系统消息提醒

sl před 1 rokem
rodič
revize
dcdb83ddfc

+ 4 - 4
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeep/entity/CmmsUpkeep.java

@@ -40,16 +40,16 @@ public class CmmsUpkeep implements Serializable {
     @ApiModelProperty(value = "创建者")
     private java.lang.String createBy;
 	/**创建时间*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "创建时间")
     private java.util.Date createTime;
 	/**更新者*/
     @ApiModelProperty(value = "更新者")
     private java.lang.String updateBy;
 	/**更新时间*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "更新时间")
     private java.util.Date updateTime;
 	/**备注*/

+ 145 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeep/task/CmmsUpkeepCreateJob.java

@@ -0,0 +1,145 @@
+package org.jeecg.modules.cmmsUpkeep.task;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.constant.enums.MessageTypeEnum;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.cmmsOrderNode.entity.CmmsOrderNode;
+import org.jeecg.modules.cmmsOrderNode.service.ICmmsOrderNodeService;
+import org.jeecg.modules.cmmsUpkeep.entity.CmmsUpkeep;
+import org.jeecg.modules.cmmsUpkeep.service.ICmmsUpkeepService;
+import org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlan;
+import org.jeecg.modules.cmmsUpkeepPlan.service.ICmmsUpkeepPlanService;
+import org.jeecg.modules.util.AutoCodeUtil;
+import org.jeecg.modules.util.PlanToOrderUtils;
+import org.jeecg.modules.util.UserConstants;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * ClassName: CmmsUpkeepCreateJob
+ * Package: org.jeecg.modules.cmmsUpkeep.task
+ * Description:
+ *
+ * @Author sl
+ * @Create 2024/1/18 16:57
+ * @Version 1.0
+ */
+@Slf4j
+public class CmmsUpkeepCreateJob implements Job {
+
+    @Autowired
+    private ISysBaseAPI sysBaseApi;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private ICmmsUpkeepPlanService cmmsUpkeepPlanService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private ICmmsUpkeepService cmmsUpkeepService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private ICmmsOrderNodeService cmmsOrderNodeService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private AutoCodeUtil autoCodeUtil;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        System.out.println("进入生成保养工单任务函数");
+        PlanToOrderUtils planToOrderUtils = new PlanToOrderUtils();
+        // 获取所有保养计划(根据状态来获取,获取启用的保养计划)
+        List<CmmsUpkeepPlan> cmmsUpkeepPlanList = cmmsUpkeepPlanService.getCmmsUpkeepPlanByStatus("0");
+        if(cmmsUpkeepPlanList == null || cmmsUpkeepPlanList.size() < 1){
+            return;
+        }
+        //如果存在启用的保养计划  判断是否需要生成保养工单,生成保养工单的保养计划要更新计划开始时间、下次计划开始时间以及消息提醒时间
+        String dateNowStr = DateUtils.getDate("yyyy-MM-dd HH:mm:ss");//获取当前时间字符串
+        System.out.println(dateNowStr);
+        //创建需要更新的保养计划列表
+        List<CmmsUpkeepPlan> updateCmmsUpkeepPlanList = new ArrayList<>();
+        //创建保养工单列表用来存放需要生成的保养工单
+        List<CmmsUpkeep> cmmsUpkeepList = new ArrayList<>();
+        //创建工单操作记录列表
+        List<CmmsOrderNode> nodeList = new ArrayList<>();
+        Date dateNow = new Date();
+        for(CmmsUpkeepPlan cmmsUpkeepPlan:cmmsUpkeepPlanList){
+            //如果保养计划下次执行时间未到,则不生成保养工单
+            if (cmmsUpkeepPlan.getNexttime() == null || cmmsUpkeepPlan.getNexttime().after(dateNow)) {
+                continue;
+            }
+            //更新保养计划 下次计划执行时间以及提醒时间
+            cmmsUpkeepPlan.setNexttime(planToOrderUtils.generateNextTime(cmmsUpkeepPlan.getRepeatnum(), cmmsUpkeepPlan.getRepeattype()));
+            cmmsUpkeepPlan.setNoticetime(planToOrderUtils.generateNoticeTime(cmmsUpkeepPlan.getNexttime(), cmmsUpkeepPlan.getNoticenum(), cmmsUpkeepPlan.getNoticetype()));
+            cmmsUpkeepPlan.setIfnotice("否");
+//                cmmsUpkeepPlanService.update(cmmsUpkeepPlan);
+            updateCmmsUpkeepPlanList.add(cmmsUpkeepPlan);
+            //生成保养工单
+            CmmsUpkeep cmmsUpkeep = new CmmsUpkeep();
+            cmmsUpkeep.setId(IdWorker.getIdStr());//生成雪花id
+            cmmsUpkeep.setUpkeepcode(autoCodeUtil.genSerialCode(UserConstants.CMMSUPKEEP_CODE, null));//保养工单编号
+            cmmsUpkeep.setUpkeepname(cmmsUpkeepPlan.getPlanname() + "-" + dateNowStr);//保养工单名称:保养计划名称-当前时间
+            cmmsUpkeep.setUpkeepplanid(cmmsUpkeepPlan.getId());//保养计划id
+            cmmsUpkeep.setUpkeepprojid(cmmsUpkeepPlan.getUpkeepprojid());//保养工作项目id 可无
+            cmmsUpkeep.setProjectname(cmmsUpkeepPlan.getProjectname());//保养工作项目名称 可无
+            cmmsUpkeep.setPlanname(cmmsUpkeepPlan.getPlanname());//保养计划名称
+            cmmsUpkeep.setAddress(cmmsUpkeepPlan.getAddress());//地点
+            cmmsUpkeep.setSupplier(cmmsUpkeepPlan.getSupplier());//厂商名称 可无
+            cmmsUpkeep.setSuppliertel(cmmsUpkeepPlan.getSuppliertel());//厂商电话  可无
+            cmmsUpkeep.setLinker(cmmsUpkeepPlan.getLinker());//联系人
+            cmmsUpkeep.setLinkertel(cmmsUpkeepPlan.getLinkertel());//联系人电话
+            cmmsUpkeep.setChargeruser(cmmsUpkeepPlan.getChargeruser());//负责人
+            cmmsUpkeep.setUpkeepdesc(cmmsUpkeepPlan.getPlandesc());//描述
+            cmmsUpkeep.setStatus("0");//保养工单状态
+//                cmmsUpkeepService.save(cmmsUpkeep);
+            cmmsUpkeepList.add(cmmsUpkeep);
+            //保养操作记录生成
+            CmmsOrderNode node = new CmmsOrderNode();
+            node.setNodename("0");
+            node.setRelid(cmmsUpkeep.getId());//操作记录对应的工单id
+            node.setCreateBy("admin");
+            node.setCreateTime(dateNow);
+            node.setHandledate(dateNow);
+            node.setOpinion("——");
+            nodeList.add(node);
+        }
+        System.out.println(nodeList);
+
+        if (cmmsUpkeepPlanList != null && cmmsUpkeepPlanList.size() > 0) {
+            //批量更新保养计划表  批量生成保养工单  批量生成操作记录
+            cmmsUpkeepPlanService.updateBatchById(updateCmmsUpkeepPlanList);
+            cmmsUpkeepService.saveBatch(cmmsUpkeepList);
+            cmmsOrderNodeService.saveBatch(nodeList);
+            System.out.println("生成保养工单、更新保养计划、生成工单操作记录完成!");
+
+            // 生成消息通知
+            for(CmmsUpkeep cmmsUpkeep:cmmsUpkeepList){
+                MessageDTO messageDTO = new MessageDTO();
+                messageDTO.setToAll(false);
+                messageDTO.setToUser(cmmsUpkeep.getChargeruser());//发送给负责人
+                messageDTO.setTitle("保养工单[" + cmmsUpkeep.getUpkeepcode() + " " + cmmsUpkeep.getUpkeepname() + "]已生成,请及时处理!");
+                //推送消息类型
+                messageDTO.setType(MessageTypeEnum.XT.getType());
+                messageDTO.setIsMarkdown(false);
+                messageDTO.setFromUser("system");
+                messageDTO.setContent(" ");
+                log.info("------------消息发送对象:{}--------------", JSON.toJSONString(messageDTO));
+                sysBaseApi.sendTemplateMessage(messageDTO);//发送系统消息
+            }
+
+        }
+
+    }
+}

+ 87 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeep/task/CmmsUpkeepNoticeJob.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.cmmsUpkeep.task;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.constant.enums.MessageTypeEnum;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.cmmsOrderNode.entity.CmmsOrderNode;
+import org.jeecg.modules.cmmsUpkeep.entity.CmmsUpkeep;
+import org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlan;
+import org.jeecg.modules.cmmsUpkeepPlan.service.ICmmsUpkeepPlanService;
+import org.jeecg.modules.util.PlanToOrderUtils;
+import org.jeecg.modules.util.UserConstants;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * ClassName: CmmsUpkeepNoticeJob
+ * Package: org.jeecg.modules.cmmsUpkeep.task
+ * Description:
+ *
+ * @Author sl
+ * @Create 2024/1/22 13:30
+ * @Version 1.0
+ */
+@Slf4j
+public class CmmsUpkeepNoticeJob implements Job {
+
+    @Autowired
+    private ISysBaseAPI sysBaseApi;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private ICmmsUpkeepPlanService cmmsUpkeepPlanService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        System.out.println("进入保养工单生成提醒任务函数");
+        PlanToOrderUtils planToOrderUtils = new PlanToOrderUtils();
+        Date now = DateUtils.getDate();
+        // 1、保养计划
+        // 获取所有启用的保养计划
+        List<CmmsUpkeepPlan> cmmsUpkeepPlanList = cmmsUpkeepPlanService.getCmmsUpkeepPlanByStatus("0");
+        List<CmmsUpkeepPlan> updateCmmsUpkeepPlanList = new ArrayList<>();//用来存放需要更新的保养计划
+        if (cmmsUpkeepPlanList != null && cmmsUpkeepPlanList.size() > 0) {
+            for (CmmsUpkeepPlan cmmsUpkeepPlan : cmmsUpkeepPlanList) {
+                // 如果保养计划的下次通知时间为空或时间未到,则不生成消息
+                if (cmmsUpkeepPlan.getNoticetime() == null || cmmsUpkeepPlan.getNoticetime().after(now) || "是".equals(cmmsUpkeepPlan.getIfnotice())) {
+                    continue;
+                }
+                cmmsUpkeepPlan.setIfnotice("是");
+                updateCmmsUpkeepPlanList.add(cmmsUpkeepPlan);
+
+                // 生成消息
+                MessageDTO messageDTO = new MessageDTO();
+                messageDTO.setToAll(false);
+                messageDTO.setToUser(cmmsUpkeepPlan.getChargeruser());//发送给负责人
+                messageDTO.setTitle("保养工单[" + cmmsUpkeepPlan.getPlancode() + " " + cmmsUpkeepPlan.getPlanname() + "]即将生成保养工单,请及时处理!");
+                //推送消息类型
+                messageDTO.setType(MessageTypeEnum.XT.getType());
+                messageDTO.setIsMarkdown(false);
+                messageDTO.setFromUser("system");
+                messageDTO.setContent(" ");
+                log.info("------------消息发送对象:{}--------------", JSON.toJSONString(messageDTO));
+                sysBaseApi.sendTemplateMessage(messageDTO);//发送系统消息
+            }
+        }
+
+        // 3、修改保养计划、巡检计划的通知信息
+        if (updateCmmsUpkeepPlanList != null && updateCmmsUpkeepPlanList.size() > 0) {
+            cmmsUpkeepPlanService.updateCmmsUpkeepPlanIfnoticeByIds(updateCmmsUpkeepPlanList);
+            // 更新保养计划缓存信息
+//            upkeepPlanService.setRedisCache();
+        }
+
+
+    }
+
+}

+ 49 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeep/task/TestBySlJob.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.cmmsUpkeep.task;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.constant.enums.MessageTypeEnum;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.util.DateUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * ClassName: TestBySlJob
+ * Package: org.jeecg.modules.cmmsUpkeep.task
+ * Description:
+ *
+ * @Author sl
+ * @Create 2024/1/18 16:59
+ * @Version 1.0
+ */
+@Slf4j
+public class TestBySlJob implements Job {
+
+    @Autowired
+    private ISysBaseAPI sysBaseApi;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        log.info(String.format(" sl测试 Jeecg-module-ems 普通定时任务 SampleJob !  时间:" + DateUtils.getTimestamp()));
+        //测试发送消息
+        //推送消息
+        MessageDTO messageDTO = new MessageDTO();
+        messageDTO.setToAll(false);
+        messageDTO.setToUser("admin");
+        messageDTO.setCategory("1");
+        messageDTO.setTitle("消息发送测试");
+        //推送消息类型
+        messageDTO.setType(MessageTypeEnum.XT.getType());
+        messageDTO.setIsMarkdown(false);
+        messageDTO.setFromUser("system");
+        messageDTO.setContent("消息发送测试1111111111");
+        log.info("------------消息发送对象:{}--------------", JSON.toJSONString(messageDTO));
+        sysBaseApi.sendTemplateMessage(messageDTO);
+
+    }
+
+}

+ 19 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeepPlan/mapper/CmmsUpkeepPlanMapper.java

@@ -36,6 +36,13 @@ public interface CmmsUpkeepPlanMapper extends BaseMapper<CmmsUpkeepPlan> {
 
     /**
      *
+     * 根据status查找启用的保养计划
+     *
+     */
+    public List<CmmsUpkeepPlan> getCmmsUpkeepPlanByStatus(@Param("status") String status);
+
+    /**
+     *
      * 更新保养计划表
      *
      */
@@ -47,4 +54,16 @@ public interface CmmsUpkeepPlanMapper extends BaseMapper<CmmsUpkeepPlan> {
      */
     public int updateCmmsUpkeepPlanStatusById(@Param("cmmsUpkeepPlan") CmmsUpkeepPlan cmmsUpkeepPlan);
 
+    /**
+     * 根据保养计划批量更新下次生成工单时间及通知信息
+     *
+     */
+    public int updateCmmsUpkeepCreateNoticeByIds(@Param("cmmsUpkeepPlanList") List<CmmsUpkeepPlan> cmmsUpkeepPlanList);
+
+    /**
+     * 根据保养计划批量更新保养计划是否提前通知提醒ifnotice
+     *
+     */
+    public int updateCmmsUpkeepPlanIfnoticeByIds(@Param("cmmsUpkeepPlanList") List<CmmsUpkeepPlan> cmmsUpkeepPlanList);
+
 }

+ 20 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeepPlan/mapper/xml/CmmsUpkeepPlanMapper.xml

@@ -50,6 +50,10 @@
         where a.id = #{id}
     </select>
 
+    <select id="getCmmsUpkeepPlanByStatus" parameterType="String" resultType="org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlan">
+        select * from ems_cmms_upkeep_plan where status=#{status}
+    </select>
+
     <update id="updateCmmsUpkeepPlanContentById" parameterType="org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlanDto">
         update ems_cmms_upkeep_plan
         <trim prefix="SET" suffixOverrides=",">
@@ -86,4 +90,20 @@
         update ems_cmms_upkeep_plan set status = #{cmmsUpkeepPlan.status} where id=#{cmmsUpkeepPlan.id}
     </update>
 
+    <!--修改下次生成工单时间及通知信息-->
+    <update id="updateCmmsUpkeepCreateNoticeByIds" parameterType="org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlan">
+        <foreach item="item" collection="cmmsUpkeepPlanList" index="index" open="(" separator="," close=")">
+            update ems_cmms_upkeep_plan set nexttime = #{item.nexttime}, ifnotice = #{item.ifnotice}, noticetime = #{item.noticetime}
+            where id=#{item.id};
+        </foreach>
+    </update>
+
+    <!--修改是否已发送通知信息-->
+    <update id="updateCmmsUpkeepPlanIfnoticeByIds" parameterType="org.jeecg.modules.cmmsUpkeepPlan.entity.CmmsUpkeepPlan">
+        <foreach item="item" collection="cmmsUpkeepPlanList">
+            update ems_cmms_upkeep_plan set ifnotice = #{item.ifnotice} where id=#{item.id}
+        </foreach>
+    </update>
+
+
 </mapper>

+ 17 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeepPlan/service/ICmmsUpkeepPlanService.java

@@ -24,6 +24,11 @@ public interface ICmmsUpkeepPlanService extends IService<CmmsUpkeepPlan> {
     public List<CmmsUpkeepPlanDto> getAllCmmsUpkeepPlan(Page<CmmsUpkeepPlanDto> page, CmmsUpkeepPlan cmmsUpkeepPlan);
 
     /**
+     * 根据status查找启用的保养计划
+     */
+    public List<CmmsUpkeepPlan> getCmmsUpkeepPlanByStatus(String status);
+
+    /**
      * 新增保养计划 保养计划-保养项
      *
      * @param cmmsUpkeepPlanDto 保养计划
@@ -50,4 +55,16 @@ public interface ICmmsUpkeepPlanService extends IService<CmmsUpkeepPlan> {
      */
     public int updateCmmsUpkeepPlanStatusById(CmmsUpkeepPlan cmmsUpkeepPlan);
 
+    /**
+     * 根据保养计划批量更新下次生成工单时间及通知信息
+     *
+     */
+    public int updateCmmsUpkeepCreateNoticeByIds(List<CmmsUpkeepPlan> cmmsUpkeepPlanList);
+
+    /**
+     * 根据保养计划批量更新保养计划是否提前通知提醒ifnotice
+     *
+     */
+    public int updateCmmsUpkeepPlanIfnoticeByIds(List<CmmsUpkeepPlan> cmmsUpkeepPlanList);
+
 }

+ 52 - 11
jeecg_module_ems/src/main/java/org/jeecg/modules/cmmsUpkeepPlan/service/impl/CmmsUpkeepPlanServiceImpl.java

@@ -50,27 +50,37 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
     public Date getNextTime(Date beginTime, String timeType, Integer timeNum){
         Calendar rightNow = Calendar.getInstance();
         rightNow.setTime(beginTime);
+        Date nextTime;
         switch (timeType) {
             case "年":
                 rightNow.add(Calendar.YEAR, timeNum);
+                nextTime = rightNow.getTime();
                 break;
             case "月":
                 rightNow.add(Calendar.MONTH, timeNum);
+                nextTime = rightNow.getTime();
                 break;
             case "周":
                 rightNow.add(Calendar.WEEK_OF_YEAR, timeNum);
+                nextTime = rightNow.getTime();
                 break;
             case "天":
                 rightNow.add(Calendar.DATE, timeNum);
+                nextTime = rightNow.getTime();
                 break;
             case "小时":
                 rightNow.add(Calendar.HOUR_OF_DAY, timeNum);
+                nextTime = rightNow.getTime();
                 break;
             case "分钟":
                 rightNow.add(Calendar.MINUTE, timeNum);
+                nextTime = rightNow.getTime();
+                break;
+            default:
+                nextTime = null;
                 break;
         }
-        return rightNow.getTime();
+        return nextTime;
     }
 
 
@@ -84,6 +94,13 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
     }
 
     /**
+     * 根据status查找启用的保养计划
+     */
+    public List<CmmsUpkeepPlan> getCmmsUpkeepPlanByStatus(String status){
+        return cmmsUpkeepPlanMapper.getCmmsUpkeepPlanByStatus(status);
+    }
+
+    /**
      * 新增保养计划
      *
      * @param cmmsUpkeepPlanDto 保养计划
@@ -97,7 +114,17 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
         //保养计划编号
         if(cmmsUpkeepPlanDto.getPlancode() == null || "".equals(cmmsUpkeepPlanDto.getPlancode())) cmmsUpkeepPlan.setPlancode(autoCodeUtil.genSerialCode(UserConstants.CMMSUPKEEPPLAN_CODE, null));
         if(cmmsUpkeepPlanDto.getPlanname() != null) cmmsUpkeepPlan.setPlanname(cmmsUpkeepPlanDto.getPlanname());//保养计划名称
-        if(cmmsUpkeepPlanDto.getBegintime() != null) cmmsUpkeepPlan.setBegintime(cmmsUpkeepPlanDto.getBegintime());//保养计划开始时间
+        if(cmmsUpkeepPlanDto.getUpkeepprojid() != null) cmmsUpkeepPlan.setUpkeepprojid(cmmsUpkeepPlanDto.getUpkeepprojid());//保养工作项目id
+        if(cmmsUpkeepPlanDto.getProjectname() != null) cmmsUpkeepPlan.setProjectname(cmmsUpkeepPlanDto.getProjectname());//保养工作项目名称
+        if(cmmsUpkeepPlanDto.getAddress() != null) cmmsUpkeepPlan.setAddress(cmmsUpkeepPlanDto.getAddress());//地点
+        if(cmmsUpkeepPlanDto.getSupplier() != null) cmmsUpkeepPlan.setSupplier(cmmsUpkeepPlanDto.getSupplier());//厂商名称
+        if(cmmsUpkeepPlanDto.getSuppliertel() != null) cmmsUpkeepPlan.setSuppliertel(cmmsUpkeepPlanDto.getSuppliertel());//厂商电话
+        if(cmmsUpkeepPlanDto.getLinker() != null) cmmsUpkeepPlan.setLinker(cmmsUpkeepPlanDto.getLinker());//联系人
+        if(cmmsUpkeepPlanDto.getLinkertel() != null) cmmsUpkeepPlan.setLinkertel(cmmsUpkeepPlanDto.getLinkertel());//联系人电话
+        if(cmmsUpkeepPlanDto.getChargeruser() != null) cmmsUpkeepPlan.setChargeruser(cmmsUpkeepPlanDto.getChargeruser());//负责人
+        if(cmmsUpkeepPlanDto.getPlandesc() != null) cmmsUpkeepPlan.setPlandesc(cmmsUpkeepPlanDto.getPlandesc());//描述
+        if(cmmsUpkeepPlanDto.getBegintime() != null) cmmsUpkeepPlan.setBegintime(cmmsUpkeepPlanDto.getBegintime());//保养计划第一次开始时间
+        if(cmmsUpkeepPlanDto.getBegintime() != null) cmmsUpkeepPlan.setNexttime(cmmsUpkeepPlanDto.getBegintime());//保养计划下次执行开始时间
         if(cmmsUpkeepPlanDto.getRepeatnum() != null) cmmsUpkeepPlan.setRepeatnum(cmmsUpkeepPlanDto.getRepeatnum());//保养计划间隔重复的时间
         if(cmmsUpkeepPlanDto.getRepeattype() != null) cmmsUpkeepPlan.setRepeattype(cmmsUpkeepPlanDto.getRepeattype());//保养计划间隔重复的时间单位
         if(cmmsUpkeepPlanDto.getNoticenum() != null) cmmsUpkeepPlan.setNoticenum(cmmsUpkeepPlanDto.getNoticenum());//保养计划执行提前通知时间
@@ -106,7 +133,7 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
         if(cmmsUpkeepPlanDto.getIfnotice() != null) cmmsUpkeepPlan.setIfnotice(cmmsUpkeepPlanDto.getIfnotice());//保养计划即将执行是否已通知 是/否
         if(cmmsUpkeepPlanDto.getEquipmentid() != null) cmmsUpkeepPlan.setEquipmentid(cmmsUpkeepPlanDto.getEquipmentid());//保养计划对应的设备id
         if(cmmsUpkeepPlanDto.getRemark() != null & (!("".equals(cmmsUpkeepPlanDto.getRemark())))) cmmsUpkeepPlan.setRemark(cmmsUpkeepPlanDto.getRemark());//保养计划备注
-        cmmsUpkeepPlan.setNexttime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getRepeattype(), cmmsUpkeepPlanDto.getRepeatnum()));//下次保养计划执行时间
+//        cmmsUpkeepPlan.setNexttime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getRepeattype(), cmmsUpkeepPlanDto.getRepeatnum()));//下次保养计划执行时间
         cmmsUpkeepPlan.setNoticetime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getNoticetype(), -(cmmsUpkeepPlanDto.getNoticenum())));//保养计划执行提醒时间
         boolean b1 = this.save(cmmsUpkeepPlan);
 
@@ -131,16 +158,13 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
         //一、删除之前保养计划-保养项表中关于该计划的保养项  通过planid删除
         int ifdelplanitem = cmmsUpkeepPlanItemService.delCmmsUpkeepPlanItemByPid(cmmsUpkeepPlanDto.getId());
 
-        //二、更新保养计划表 // 如果当前时间超过了计划开始时间,不管以前有没有通过此计划生成过保养工单,都将下次执行时间赋值为开始时间,同时修改通知时间
-        if (cmmsUpkeepPlanDto.getBegintime().before(new Date())) {
-            //根据当前时间获取下次执行时间(因为不知道开始时间是否修改了,所以更新一下下次执行时间)
-            cmmsUpkeepPlanDto.setNexttime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getRepeattype(), cmmsUpkeepPlanDto.getRepeatnum()));
-            //当前时间已经超过了计划时间,将下次计划执行时间赋成计划开始时间
-            cmmsUpkeepPlanDto.setBegintime(cmmsUpkeepPlanDto.getNexttime());
+        //二、更新保养计划表 // 如果计划第一次开始时间还没到时间执行,不管以前有没有通过此计划生成过保养工单,都将下次执行时间赋值为开始时间,同时修改通知时间;如果已经过了时间说明计划开始时间未改,下次执行时间等不变
+        if (cmmsUpkeepPlanDto.getBegintime().after(new Date())) {
+            //将下次执行时间赋值为开始时间
+            cmmsUpkeepPlanDto.setNexttime(cmmsUpkeepPlanDto.getBegintime());
             cmmsUpkeepPlanDto.setIfnotice("否");//更新计划是否已经通知
+            cmmsUpkeepPlanDto.setNoticetime(getNextTime(cmmsUpkeepPlanDto.getNexttime(), cmmsUpkeepPlanDto.getNoticetype(), -(cmmsUpkeepPlanDto.getNoticenum())));//更新保养计划执行提醒时间
         }
-        cmmsUpkeepPlanDto.setNexttime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getRepeattype(), cmmsUpkeepPlanDto.getRepeatnum()));//更新下次保养计划执行时间
-        cmmsUpkeepPlanDto.setNoticetime(getNextTime(cmmsUpkeepPlanDto.getBegintime(), cmmsUpkeepPlanDto.getNoticetype(), -(cmmsUpkeepPlanDto.getNoticenum())));//更新保养计划执行提醒时间
         int ifupdateplan = updateCmmsUpkeepPlanContentById(cmmsUpkeepPlanDto);
 
         //三、将新的保养计划对应的保养项存入保养计划-保养项表
@@ -176,4 +200,21 @@ public class CmmsUpkeepPlanServiceImpl extends ServiceImpl<CmmsUpkeepPlanMapper,
         return cmmsUpkeepPlanMapper.updateCmmsUpkeepPlanStatusById(cmmsUpkeepPlan);
     }
 
+    /**
+     * 根据保养计划批量更新下次生成工单时间及通知信息
+     *
+     */
+    public int updateCmmsUpkeepCreateNoticeByIds(List<CmmsUpkeepPlan> cmmsUpkeepPlanList){
+        return cmmsUpkeepPlanMapper.updateCmmsUpkeepCreateNoticeByIds(cmmsUpkeepPlanList);
+    }
+
+
+    /**
+     * 根据保养计划批量更新保养计划是否提前通知提醒ifnotice
+     *
+     */
+    public int updateCmmsUpkeepPlanIfnoticeByIds(List<CmmsUpkeepPlan> cmmsUpkeepPlanList){
+        return cmmsUpkeepPlanMapper.updateCmmsUpkeepPlanIfnoticeByIds(cmmsUpkeepPlanList);
+    }
+
 }

+ 117 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/util/PlanToOrderUtils.java

@@ -0,0 +1,117 @@
+package org.jeecg.modules.util;
+
+import org.jeecg.common.util.DateUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * ClassName: PlanToOrderUtils
+ * Package: org.jeecg.modules.util
+ * Description:
+ *
+ * @Author sl
+ * @Create 2024/1/19 11:32
+ * @Version 1.0
+ */
+public class PlanToOrderUtils {
+
+    /**
+     * 根据当前时间获取下次执行时间
+     * @param repeatnum 重复时长
+     * @param repeattype 重复类型
+     * @return
+     */
+    public Date generateNextTime(Integer repeatnum, String repeattype) {
+        Date now = DateUtils.getDate();
+        Calendar cal = Calendar.getInstance();
+        //设置起时间
+        cal.setTime(now);
+        Date nextTime;
+
+        switch (repeattype) {
+            case "年":
+                cal.add(Calendar.YEAR, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "月":
+                cal.add(Calendar.MONTH, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "周":
+                cal.add(Calendar.WEEK_OF_YEAR, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "日":
+                cal.add(Calendar.DATE, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "天":
+                cal.add(Calendar.DATE, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "小时":
+                cal.add(Calendar.HOUR, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            case "分钟":
+                cal.add(Calendar.MINUTE, repeatnum);
+                nextTime = cal.getTime();
+                break;
+            default:
+                nextTime = null;
+                break;
+        }
+        return nextTime;
+    }
+
+    /**
+     * 根据当前时间获取下次执行时间
+     * @param nextTime 下次生成工单时间
+     * @param noticenum 重复时长
+     * @param noticetype 重复类型
+     * @return
+     */
+    public Date generateNoticeTime(Date nextTime, Integer noticenum, String noticetype) {
+        Calendar cal = Calendar.getInstance();
+        //设置起时间
+        cal.setTime(nextTime);
+        Date noticeTime;
+
+        switch (noticetype) {
+            case "年":
+                cal.add(Calendar.YEAR, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "月":
+                cal.add(Calendar.MONTH, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "周":
+                cal.add(Calendar.WEEK_OF_YEAR, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "日":
+                cal.add(Calendar.DATE, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "天":
+                cal.add(Calendar.DATE, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "小时":
+                cal.add(Calendar.HOUR, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            case "分钟":
+                cal.add(Calendar.MINUTE, -noticenum);
+                noticeTime = cal.getTime();
+                break;
+            default:
+                noticeTime = null;
+                break;
+        }
+        return noticeTime;
+    }
+
+}