|
@@ -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();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|