Bladeren bron

设备校准重构

WuYi 8 uur geleden
bovenliggende
commit
9765b53300

+ 149 - 225
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/plan/job/EquipmentMaintenancePlanJob.java

@@ -2,6 +2,7 @@ package com.lc.ibps.platform.plan.job;
 
 
 import com.lc.ibps.base.core.util.AppUtil;
 import com.lc.ibps.base.core.util.AppUtil;
 import com.lc.ibps.base.core.util.BeanUtils;
 import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.core.util.Collections;
 import com.lc.ibps.base.core.util.JacksonUtil;
 import com.lc.ibps.base.core.util.JacksonUtil;
 import com.lc.ibps.base.core.util.string.StringUtil;
 import com.lc.ibps.base.core.util.string.StringUtil;
 import com.lc.ibps.base.framework.id.UniqueIdUtil;
 import com.lc.ibps.base.framework.id.UniqueIdUtil;
@@ -23,6 +24,7 @@ import org.slf4j.LoggerFactory;
 
 
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDate;
+import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -37,6 +39,7 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
     public static final String HS_DAY1 = "日保养";
     public static final String HS_DAY1 = "日保养";
     public static final String HS_DAY2 = "每天";
     public static final String HS_DAY2 = "每天";
     private static final int DEFAULT_ADVANCE_DAYS = 30;
     private static final int DEFAULT_ADVANCE_DAYS = 30;
+    private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
 
     @Override
     @Override
     public void executeJob(JobExecutionContext context) throws Exception {
     public void executeJob(JobExecutionContext context) throws Exception {
@@ -48,8 +51,6 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
         transform(list, queryParam);
         transform(list, queryParam);
 
 
         if (BeanUtils.isNotEmpty(list)){
         if (BeanUtils.isNotEmpty(list)){
-            //恒生医院增加写入逻辑
-            addPusher(list);
             //step4: 写入数据库
             //step4: 写入数据库
             generateRecords(list);
             generateRecords(list);
         }
         }
@@ -62,118 +63,7 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
 
 
     }
     }
 
 
-    private void addPusher(List<Map<String, Object>> list) {
-        //step1 读取恒生医院配置
-        if(!"深圳恒生医院".equals(getSetting())){
-            return;
-        }
-        logger.warn("深圳恒生医院设备使用与维护添加推送人start");
-        HashMap<String, String> deptRelatPusher = new HashMap<>();//编制部门对应该推送的人
-        Map<String, String> sbglxzfzrMap = new HashMap<>();//四级部门设备管理组组长
-        //step2 便利插入的数据增加推送人字段
-        for(Map data : list){
-            //设备的编制部门,设备的编制部门在编制计划的时候不允许为空,所以这里不用校验了
-            String sbDept = data.get("bian_zhi_bu_men_").toString();
-            String pusher = "";
-            //如果是每天维护的数据则无需添加指定的推送人
-            String zhuZhouQi = data.get("zhu_zhou_qi_").toString();
-            if(BeanUtils.isNotEmpty(zhuZhouQi) &&
-                    (HS_DAY1.equals(zhuZhouQi) || HS_DAY2.equals(zhuZhouQi))){//每天都要推送的跳过指定推送人
-                logger.warn("每天都要推送的跳过指定推送人");
-                continue;
-            }
-            if(BeanUtils.isEmpty(deptRelatPusher.get(sbDept))){
-                pusher = getDeptRelatPusher(data,sbglxzfzrMap);
-                data.put("ke_tui_song_ren_",pusher);
-                deptRelatPusher.put(data.get("bian_zhi_bu_men_").toString(),pusher);
-            }else{
-                data.put("ke_tui_song_ren_",deptRelatPusher.get(sbDept));
-            }
-        }
-    }
 
 
-    private String getDeptRelatPusher(Map data,Map sbglxzfzrMap) {
-        String sbDept = data.get("bian_zhi_bu_men_").toString();
-        String sbglyID = "sbglyID";           //设备管理员
-        String sbglxzfzrID = "sbglxzfzrID";   //设备管理组组长id
-        String zhsfzrID = "zhsfzrID";         //专业组组长id
-
-        String Level3Sbglxzfzr ="";//三级部门推送要加上名下所有四级部门的设备管理组长角色
-        Boolean deptLevel3 = false;
-        Boolean deptLevel4 = true;//默认只存在四级部门
-        String result = "";
-        //1.0 获取设备管理员和设备管理组长角色ID
-        String roleIdsSql = "SELECT ROLE_ALIAS_,ID_ FROM ibps_party_role WHERE ROLE_ALIAS_ IN ('sbgly','sbglxzfzr','zhsfzr')";
-
-
-        List<Map<String, Object>> equipList = (List<Map<String, Object>>) commonDao.query(roleIdsSql);
-        if (BeanUtils.isNotEmpty(equipList)){
-            for(Map<String, Object> role : equipList){
-                if("sbgly".equals(role.get("ROLE_ALIAS_"))){
-                    sbglyID = (String) role.get("ID_");
-                }
-                if("sbglxzfzr".equals(role.get("ROLE_ALIAS_"))){
-                    sbglxzfzrID = (String) role.get("ID_");
-                }
-                if("zhsfzr".equals(role.get("ROLE_ALIAS_"))){
-                    zhsfzrID = (String) role.get("ID_");
-                }
-            }
-        }
-
-        //2.0 判断是三级部门(检验科)还是四级部门(临检组)
-        Map<String, String> allSbglxzfzrMap = new HashMap<>();
-        String levelSql = "select * from ibps_party_entity where party_type_='position' and  PATH_ like '%"+sbDept+"%';";
-        List<Map<String, Object>> dataList = (List<Map<String, Object>>) commonDao.query(levelSql);
-        if (BeanUtils.isNotEmpty(dataList)){
-            for(Map<String, Object> dept : dataList){
-                int depthLevel = findPosition(dept.get("PATH_").toString(), sbDept.trim());
-                if("3".equals(String.valueOf(depthLevel))){
-                    deptLevel3 = true;
-                    deptLevel4 = false;
-                    //获取该三级部门下所有的四级部门设备管理组组长(如果有)
-                     allSbglxzfzrMap = getAllSbglxzfzr(sbDept, sbglxzfzrID, sbglxzfzrMap);
-                    break;
-                }
-                if("4".equals(String.valueOf(depthLevel))){
-                    deptLevel3 = false;
-                    deptLevel4 = true;
-                    Map<String, Object> path = getNumberByIndex(dept.get("PATH_").toString(), 3);//获取三级部门ID
-                    allSbglxzfzrMap = getAllSbglxzfzr((String) path.get("id"), sbglxzfzrID, sbglxzfzrMap);
-                }
-            }
-
-        }
-
-        //3.0 查找不到指定推送人则推送所有人
-        String pusherIdsSql = "select GROUP_CONCAT(ID_ SEPARATOR ',') as id_concat,\n" +
-                " GROUP_CONCAT(NAME_ SEPARATOR ',') as name_concat from ibps_party_employee where POSITIONS_ like '%"+sbDept+"%' " +
-                "and (JOB_ like '%"+sbglyID+"%' or JOB_ like '%"+sbglxzfzrID+"%' or JOB_ like '%"+zhsfzrID+"%')";//指定部门的推送人
-        Map<String, Object> pusherIds =  commonDao.queryOne(pusherIdsSql);
-
-        if (BeanUtils.isEmpty(pusherIds) ||
-                BeanUtils.isEmpty(pusherIds.get("id_concat"))) {
-            if(deptLevel4){
-                logger.warn("查询不到四级编制部门为:{},角色ID包含{},或者{},或者{}的账号数据", sbDept,sbglyID,sbglxzfzrID,zhsfzrID);
-                return "";
-            }
-            if(deptLevel3 && allSbglxzfzrMap.isEmpty()){
-                logger.warn("查询不到三级编制部门为:{},角色ID包含{},或者{},或者{}的账号数据,{}", sbDept,sbglyID,sbglxzfzrID,zhsfzrID);
-                return "";
-            }
-        }
-        if (BeanUtils.isEmpty(pusherIds) || pusherIds.get("id_concat").toString().isEmpty()) {
-            result = allSbglxzfzrMap.isEmpty() ? "" : String.join(",", allSbglxzfzrMap.values());
-        } else if (allSbglxzfzrMap.isEmpty()) {
-            result = pusherIds.get("id_concat").toString();
-        } else {
-            result = String.join(",", allSbglxzfzrMap.values()) + "," + pusherIds.get("id_concat").toString();
-        }
-        result = Arrays.stream(result.split(","))
-                .distinct()
-                .collect(Collectors.joining(","));
-        return result;
-    }
     /**
     /**
      * 获取所有四级部门 设备管理组组长
      * 获取所有四级部门 设备管理组组长
      * @param sbDept 三级部门ID
      * @param sbDept 三级部门ID
@@ -272,43 +162,6 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
 
 
     private List<Map<String, Object>> fetchRecords(String[] queryParam) {
     private List<Map<String, Object>> fetchRecords(String[] queryParam) {
         String querySql ="";
         String querySql ="";
-
-        String setting = getSetting();
-        if(setting.contains("金山")){
-            querySql = "SELECT * FROM (SELECT YEAR(#{p0}) AS ji_hua_nian_du_ , " +
-                    "    CASE device.wei_hu_lei_xing_" +
-                    "    WHEN '日保养' THEN DATE_FORMAT(#{p0}, '%j')  " +
-                    "    WHEN '周保养' THEN DATE_FORMAT(#{p0}, '%u')  " +
-                    "    WHEN '月保养' THEN MONTH(#{p0})  " +
-                    "    WHEN '季度保养' THEN QUARTER(#{p0})  " +
-                    "    WHEN '半年保养' THEN IF(MONTH(#{p0})-6>0,2,1) " +
-                    "    WHEN '年保养' THEN YEAR(#{p0})  " +
-                    "    WHEN '间隔保养' THEN DATEDIFF(#{p0},startDate)/(ri_qi_shu_zi_+1)" +
-                    "    ELSE CONCAT (DATE_FORMAT(#{p0}, '%u'),'.',WEEKDAY(#{p0})+1) " +
-                    "    END AS period_num,device.wei_hu_ri_qi_ AS zhu_zhou_qi_ ,device.id_ AS she_bei_bian_hao_,device.bian_zhi_bu_men_,  " +
-                    "    device.gui_ge_xing_hao_, " +   //增加规格型号字段到设备使用与维护表(t_mjsbwhbyjlby)
-                    "    device.she_bei_ming_cheng_ AS she_bei_ming_chen,device.she_bei_shi_bie_h AS ri_qi_,device.cun_fang_di_dian_ AS sheng_xiao_ri_qi_,  " +
-                    "    jhb.id_ AS ji_hua_zong_wai_j,jhzb.id_  AS ji_hua_wai_jian_ ,device.wei_hu_fang_shi_ AS wei_hu_gang_wei_ ,  " +
-                    "    device.di_dian_ ,device.wei_hu_lei_xing_,device.yuan_she_bei_bian AS original_device_n ,'' as ke_tui_song_ren_  " +
-                    "    FROM `t_mjsbwhjhb` jhb,`t_mjsbwhjhzb` jhzb,`v_device_devicemaintenance` device  " +
-                    "    WHERE jhb.shi_fou_guo_shen_='已完成'  AND jhb.zhi_xing_zhuang_t='正常'  " +
-                    "    AND jhb.id_ = jhzb.parent_id_  " +
-                    "    AND device.wei_hu_lei_xing_ IS NOT NULL" +
-                    "    AND jhzb.she_bei_bian_hao_ = device.id_ AND device.id_  NOT IN  " +
-                    "   (SELECT id_ FROM v_device_devicemaintenance WHERE " +
-                    "   (wei_hu_lei_xing_ ='日保养' AND FIND_IN_SET(WEEKDAY(#{p0})+1,ri_qi_shu_zi_)=0 ) OR" +
-                    "   (wei_hu_lei_xing_ ='周保养' AND ri_qi_shu_zi_ <> (WEEKDAY(#{p0}) + 1) ) OR"  +
-                    "   (wei_hu_lei_xing_ ='月保养' AND ri_qi_shu_zi_ - DAY(#{p0})  >0 ) OR" +
-                    "   (wei_hu_lei_xing_ ='季度保养' AND ri_qi_shu_zi_ MOD 3 <> MONTH(#{p0}) MOD 3 ) OR" +
-                    "   (wei_hu_lei_xing_ ='半年保养' AND ri_qi_shu_zi_ MOD 6 <> MONTH(#{p0}) MOD 6  ) OR" +
-                    "   (wei_hu_lei_xing_ ='年保养' AND ri_qi_shu_zi_ - MONTH(#{p0})  >0 ) OR" +
-                    "   (wei_hu_lei_xing_='间隔保养' AND (DATEDIFF(#{p0},startDate)<0 OR MOD(DATEDIFF(#{p0},startDate),ri_qi_shu_zi_+1)<>0))" +
-                    "   )) plan  " +
-                    "    WHERE NOT EXISTS (SELECT 1 FROM `t_mjsbwhbyjlby` jlb WHERE jlb.she_bei_bian_hao_ = plan.she_bei_bian_hao_ " +
-                    "    AND jlb.period_num = plan.period_num AND jlb.ji_hua_nian_du_=plan.ji_hua_nian_du_)" +
-                    "       ORDER BY she_bei_bian_hao_,ji_hua_zong_wai_j DESC";
-
-        }else {
              querySql = "SELECT * FROM (SELECT YEAR(#{p0}) AS ji_hua_nian_du_ , " +
              querySql = "SELECT * FROM (SELECT YEAR(#{p0}) AS ji_hua_nian_du_ , " +
                     "    CASE device.wei_hu_lei_xing_" +
                     "    CASE device.wei_hu_lei_xing_" +
                     "    WHEN '日保养' THEN DATE_FORMAT(#{p0}, '%j')  " +
                     "    WHEN '日保养' THEN DATE_FORMAT(#{p0}, '%j')  " +
@@ -342,7 +195,6 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
                     "    WHERE NOT EXISTS (SELECT 1 FROM `t_mjsbwhbyjlby` jlb WHERE jlb.she_bei_bian_hao_ = plan.she_bei_bian_hao_ " +
                     "    WHERE NOT EXISTS (SELECT 1 FROM `t_mjsbwhbyjlby` jlb WHERE jlb.she_bei_bian_hao_ = plan.she_bei_bian_hao_ " +
                     "    AND jlb.period_num = plan.period_num AND jlb.ji_hua_nian_du_=plan.ji_hua_nian_du_)" +
                     "    AND jlb.period_num = plan.period_num AND jlb.ji_hua_nian_du_=plan.ji_hua_nian_du_)" +
                     "       ORDER BY she_bei_bian_hao_,ji_hua_zong_wai_j DESC";
                     "       ORDER BY she_bei_bian_hao_,ji_hua_zong_wai_j DESC";
-        }
 
 
         List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(querySql, queryParam);
         List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(querySql, queryParam);
         Iterator<Map<String, Object>> iterator = list.iterator();
         Iterator<Map<String, Object>> iterator = list.iterator();
@@ -393,37 +245,135 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
         return new String[]{planDate};
         return new String[]{planDate};
     }
     }
 
 
-    private void startSbjdjzjlFlow(){
-        // 关联 task-1716-设备校准功能改进
-        // 配置校准计划(t_mjsbjdxzjh、子表t_mjsbjdxzjhzb)后,按复校日期发提醒(默认--该日期提前一个月)
-        // 开流程推送到负责人(设备档案卡t_sbdj中的保管人guan_li_ren_)
-        // 根据主表流程结束的数据查询子表   当前日期加30天==子表计划日期即开启检定校准记录流程
-        // 1917 设备检定校准改进
-        // insertRecordsFromTemplate("sbjdjzjl");
-
-        // 2025-04-10 修改  不再新增校准记录,用计划记录开流程
-      /*  String sql = "UPDATE t_mjsbjdxzjhzb a JOIN t_mjsbjdxzjh b ON a.parent_id_ = b.id_ SET a.marks_ = 'record' " +
-                "WHERE b.shi_fou_guo_shen_ = '已完成' and a.ji_hua_ri_qi_<>'' and a.ji_hua_ri_qi_ is not null " +
-                "AND a.ji_hua_ri_qi_ <= DATE_ADD(CURDATE(), INTERVAL 30 DAY) AND a.ji_hua_ri_qi_>= CURRENT_DATE AND a.shi_fou_guo_shen_='待处理' " +
-                "AND (a.dsrw_ is null or a.dsrw_ ='') ";*/
-        int advanceDays = getAdvanceDays();//华创启德提前90天推送
-        String sql = "UPDATE t_mjsbjdxzjhzb a " +
-                "JOIN t_mjsbjdxzjh b ON a.parent_id_ = b.id_ " +
-                "JOIN t_sbdj d ON a.she_bei_bian_hao_ = d.id_ " +
-                "SET a.marks_ = 'record' " +
-                "WHERE b.shi_fou_guo_shen_ = '已完成' " +
-                "  AND a.ji_hua_ri_qi_ <> '' AND a.ji_hua_ri_qi_ IS NOT NULL " +
-                "  AND a.ji_hua_ri_qi_ <= DATE_ADD(CURDATE(), INTERVAL "+advanceDays+" DAY) " +
-                "  AND a.ji_hua_ri_qi_ >= CURRENT_DATE " +
-                "  AND a.shi_fou_guo_shen_ = '待处理' " +
-                "  AND (a.dsrw_ IS NULL OR a.dsrw_ = '') " +
-                "  AND d.she_bei_zhuang_ta NOT IN ('暂停使用', '停止使用')";
-        commonDao.execute(sql);
-
-        // 检定/校准计划与实施记录表_子表
-        this.startWorkflow("t_mjsbjdxzjhzb","jdxzjlb","Process_1drpy0r");
+    private void startSbjdjzjlFlow() throws Exception{
+        List<Map<String, Object>> addList = new ArrayList<>();
+        //1查出所有计划的数据并且去重
+        String sql = "SELECT .she_bei_ming_chen,s.she_bei_bian_hao_ ,s.yuan_she_bei_bian ,s.can_shu_ ,s.liang_cheng_ , " +
+                " s.xiu_zheng_yin_zi_ ,s.jian_ding_zhou_qi,s.yi_jian_xiao_ri_q,s.fu_ze_ren_,s.ji_hua_ri_qi_,s.jian_ding_xiang_m , " +
+                " s.jian_ding_dan_wei ,s.di_dian_,s.dan_wei_id ,a.bian_zhi_bu_men_ ,s.id_ as zid_,f.id_ as fid_ " +
+                " FROM t_mjsbjdxzjhzb s " +
+                " JOIN t_mjsbjdxzjh f ON s.parent_id_ = f.id_ " +
+                " JOIN t_sbdj a ON s.she_bei_bian_hao_ = a.id_ " +
+                " JOIN ( " +
+                "    SELECT s2.she_bei_bian_hao_, MAX(s2.create_time_) AS max_create_time_ " +
+                "    FROM t_mjsbjdxzjhzb s2 " +
+                "    JOIN t_mjsbjdxzjh f2 ON s2.parent_id_ = f2.id_ " +
+                "    JOIN t_sbdj a2 ON s2.she_bei_bian_hao_ = a2.id_ " +
+                "    WHERE f2.shi_fou_guo_shen_ = '已完成' " +
+                "      AND f2.ji_hua_nian_du_ = YEAR(NOW()) " +
+                "      AND a2.she_bei_zhuang_ta = '正常使用' " +
+                "    GROUP BY s2.she_bei_bian_hao_ " +
+                " ) t ON s.she_bei_bian_hao_ = t.she_bei_bian_hao_ " +
+                "   AND s.create_time_ = t.max_create_time_ " +
+                " WHERE f.shi_fou_guo_shen_ = '已完成' " +
+                "  AND f.ji_hua_nian_du_ = YEAR(NOW()) " +
+                "  AND a.she_bei_zhuang_ta = '正常使用'" ;
+        List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(sql);
+        if(Collections.isEmpty(list)){
+            return ;
+        }
+        //2根据上面的数据分别计算上次校准日期+校准周期是否等于今天,是则推送校准记录
+        LocalDate today = LocalDate.now();
+        int currentYear = today.getYear();
+
+        for (Map<String,Object> item:list) {
+            String startData = item.get("ji_hua_ri_qi_").toString();
+            LocalDate start = LocalDate.parse(startData, FMT);
+            //开始计算
+            int cycleMonths = Integer.parseInt(item.get("zhou_qi_").toString());
+            if (cycleMonths <= 0) {
+                continue;
+            }
+            // 保持原始"日",用于月末边界(如 1-31 + 1月 → 2-28)
+            int originalDay = start.getDayOfMonth();
+
+            // 从 start 往后推,找到本年内第一个周期日
+            LocalDate cursor = start;
+            while (cursor.getYear() < currentYear) {
+                cursor = plusMonthsKeepDay(cursor, cycleMonths, originalDay);
+            }
+
+            // 判断今天是否是周期日
+            while (cursor.getYear() == currentYear) {
+                if (cursor.equals(today)) {
+                    addList.add(item);
+                    break;
+                }
+                if (cursor.isAfter(today)) {
+                    break; // 已超过今天,不用再往后看
+                }
+                cursor = plusMonthsKeepDay(cursor, cycleMonths, originalDay);
+            }
+        }
+        //需要查询当天是否已经推送过了,不能重复推送
+        List<String> dislodge = dislodge(addList);
+        if(Collections.isEmpty(dislodge)){
+            return;
+        }
+        this.startWorkflow(dislodge);
+    }
+
+    /**
+     * 加 N 个月,保持原始"日"不变;目标月没有该日则取月末
+     */
+    private static LocalDate plusMonthsKeepDay(LocalDate date, int months, int originalDay) {
+        YearMonth targetYm = YearMonth.from(date).plusMonths(months);
+        return targetYm.atDay(Math.min(originalDay, targetYm.lengthOfMonth()));
+    }
+
+    private List<String> dislodge(List<Map<String, Object>> added) throws Exception{
+        List<Map<String, Object>> addList = new ArrayList<>();
+        List<String> result = new ArrayList<>();
+        if(Collections.isEmpty(added)){
+            return null;
+        }
+        String ids = added.stream()
+                .map(map -> String.valueOf(map.get("she_bei_bian_hao_")))
+                .collect(Collectors.joining(","));
+        String date = LocalDate.now().toString();
+        String sql = "select * from t_xzjlb where find_in_set(she_bei_id_,'"+ids+"') and bian_zhi_shi_jian like '%"+date+"'%";
+        List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(sql);
+        if(Collections.isNotEmpty(list)){
+            Set<String> bCodes = list.stream()
+                    .map(it -> (String) it.get("she_bei_id_"))
+                    .collect(Collectors.toSet());
+            addList = added.stream()
+                    .filter(it -> !bCodes.contains(it.get("she_bei_id_")))
+                    .collect(Collectors.toList());
+        }else{
+            //当天还没有进行推送
+            addList=added;
+        }
+        for (Map<String,Object> item:addList) {
+            Map<String, Object> map = new HashMap<>();
+            String id = UniqueIdUtil.getId();
+            map.put("id_",id);
+            map.put("bian_zhi_bu_men_",item.get("bian_zhi_bu_men_").toString());
+            map.put("di_dian_",item.get("di_dian_").toString());
+            map.put("bian_zhi_ren_",item.get("fu_ze_ren_").toString());
+            map.put("bian_zhi_shi_jian",date+" 06:00");
+            map.put("she_bei_id_",item.get("she_bei_bian_hao_").toString());
+            map.put("she_bei_bian_hao_",item.get("yuan_she_bei_bian").toString());
+            map.put("she_bei_ming_chen",item.get("she_bei_ming_chen").toString());
+            map.put("jian_ding_xiao_zh",item.get("can_shu_").toString());
+            map.put("yu_qi_shi_yong_fa",item.get("liang_cheng_").toString());
+            map.put("xiao_zhun_dian_bi",item.get("xiu_zheng_yin_zi_").toString());
+            map.put("zhun_que_du_ce_li",item.get("jian_ding_xiang_m").toString());
+            map.put("xiao_zhun_dan_wei",item.get("jian_ding_dan_wei").toString());
+            map.put("dan_wei_id_",item.get("dan_wei_id").toString());
+            map.put("zhou_qi_",item.get("jian_ding_zhou_qi").toString());
+            map.put("shang_ci_jian_din",item.get("yi_jian_xiao_ri_q").toString());
+            map.put("fu_ze_ren_",item.get("fu_ze_ren_").toString());
+            map.put("ji_hua_ri_qi_",item.get("ji_hua_ri_qi_").toString());
+            map.put("ji_hua_zi_biao_id",item.get("zid_").toString());
+            map.put("ji_hua_zhu_biao_i",item.get("fid_").toString());
+            result.add(id);
+            commonDao.execute(this.buildInsertSql(map, "t_xzjlb"));
+        }
+        return result;
     }
     }
 
 
+
     // 设备档案增加使用年限字段,并且到期提前1年提醒设备保管人到期,需要进行报废的消息
     // 设备档案增加使用年限字段,并且到期提前1年提醒设备保管人到期,需要进行报废的消息
     // 根据  出厂日期  和使用年限判断
     // 根据  出厂日期  和使用年限判断
     private void equipmentScrapReminder(){
     private void equipmentScrapReminder(){
@@ -595,42 +545,16 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
     }
     }
 
 
 
 
-    protected void startWorkflow(String tableName, String formKey, String defKey) {
-      /*  String fetchSql = "SELECT a.id_ id_ FROM t_mjsbjdxzjhzb a inner join t_mjsbjdxzjh b on a.parent_id_=b.id_ " +
-                "where b.shi_fou_guo_shen_='已完成' and a.marks_ = 'record' and a.ji_hua_ri_qi_<>'' and a.ji_hua_ri_qi_ is not null " +
-                " and a.ji_hua_ri_qi_<=DATE_ADD(CURDATE(),INTERVAL 30 DAY) and a.ji_hua_ri_qi_>=CURRENT_DATE and a.shi_fou_guo_shen_='待处理' " +
-                " AND (a.dsrw_ is null or a.dsrw_ ='') ";*/
-        int advanceDays = getAdvanceDays();
-        String fetchSql = "SELECT a.id_ id_ " +
-                "FROM t_mjsbjdxzjhzb a " +
-                "INNER JOIN t_mjsbjdxzjh b ON a.parent_id_ = b.id_ " +
-                "INNER JOIN t_sbdj d ON a.she_bei_bian_hao_ = d.id_ " +
-                "WHERE b.shi_fou_guo_shen_ = '已完成' " +
-                "  AND a.marks_ = 'record' " +
-                "  AND a.ji_hua_ri_qi_ <> '' AND a.ji_hua_ri_qi_ IS NOT NULL " +
-                "  AND a.ji_hua_ri_qi_ <= DATE_ADD(CURDATE(), INTERVAL "+advanceDays+" DAY) " +
-                "  AND a.ji_hua_ri_qi_ >= CURRENT_DATE " +
-                "  AND a.shi_fou_guo_shen_ = '待处理' " +
-                "  AND (a.dsrw_ IS NULL OR a.dsrw_ = '') " +
-                "  AND d.she_bei_zhuang_ta NOT IN ('暂停使用', '停止使用')";
-        fetchSql = String.format(fetchSql,tableName);
-        List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(fetchSql);
-        if (BeanUtils.isEmpty(list)) return;
+    protected void startWorkflow(List<String> dislodge) {
+        if (Collections.isEmpty(dislodge)) return;
         IBpmInstService bpmInstService = AppUtil.getBean(IBpmInstService.class);
         IBpmInstService bpmInstService = AppUtil.getBean(IBpmInstService.class);
         if (StringUtils.isBlank(ContextUtil.getCurrentAccessToken())) {
         if (StringUtils.isBlank(ContextUtil.getCurrentAccessToken())) {
             ITenantTokenService tenantTokenService = AppUtil.getBean(ITenantTokenService.class);
             ITenantTokenService tenantTokenService = AppUtil.getBean(ITenantTokenService.class);
             String accessToken = tenantTokenService.getAccessToken();
             String accessToken = tenantTokenService.getAccessToken();
             ContextUtil.setCurrentAccessToken(accessToken);
             ContextUtil.setCurrentAccessToken(accessToken);
         }
         }
-        for (Map<String, Object> objectMap : list) {
-            APIResult<String> result = bpmInstService.startFlowFromList(new String[]{(String) objectMap.get("id_")}, formKey, defKey);
-            int state = result.getState();
-            if("200".equals(String.valueOf(state))){
-                //已经推送过流程的数据防止重复推送,dsrw_=1 表示数据是t_dsrw推送的数据
-                String sql = "UPDATE t_mjsbjdxzjhzb SET dsrw_ = '2' where id_= '"+(String) objectMap.get("id_")+"' ";
-                commonDao.execute(sql);
-            }
-        }
+        String[] arr = dislodge.toArray(new String[0]);
+        bpmInstService.startFlowFromList(arr, "yqsbjdxzjlb", "Process_1drpy0r");
     }
     }
 
 
     public String getSetting() {
     public String getSetting() {
@@ -642,21 +566,6 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
         }
         }
         return danWeiMingChen;
         return danWeiMingChen;
     }
     }
-    private int getAdvanceDays() {
-        try {
-            String setting = ContextUtil.getSetting();
-            if (StringUtils.isNotEmpty(setting)) {
-                ObjectMapper objectMapper = new ObjectMapper();
-                Map<String, Object> map = objectMapper.readValue(setting, Map.class);
-                if (map != null && map.containsKey(ADVANCE_DAYS)) {
-                    return Integer.parseInt(map.get(ADVANCE_DAYS).toString());
-                }
-            }
-        } catch (Exception e) {
-            logger.warn("从setting中读取advance_days失败,使用默认值{}天", DEFAULT_ADVANCE_DAYS, e);
-        }
-        return DEFAULT_ADVANCE_DAYS;
-    }
 
 
     public String convertToSqlInFormat(String input) {
     public String convertToSqlInFormat(String input) {
         String[] parts = input.split(",");
         String[] parts = input.split(",");
@@ -664,4 +573,19 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
         return "('" + quoted + "')"; // 首尾加括号和引号
         return "('" + quoted + "')"; // 首尾加括号和引号
     }
     }
 
 
+    public String buildInsertSql(Map<String, Object> map , String tableName) throws Exception {
+
+        StringBuilder sql = new StringBuilder("insert into "+tableName+" (");
+        for (Object key : map.keySet()) {
+            sql.append(key).append(",");
+        }
+        sql.delete(sql.length()-1,sql.length());
+        sql.append(") values(");
+        for (Object val : map.values()) {
+            sql.append("'").append(val).append("'").append(",");
+        }
+        sql.delete(sql.length()-1,sql.length());
+        sql.append(")");
+        return sql.toString();
+    }
 }
 }