Explorar o código

[task-1638]【后端】中大七院冰箱温控数据对接 / 七院冰箱温控后台job

Li Yuan %!s(int64=2) %!d(string=hai) anos
pai
achega
7363a4b2b1

+ 73 - 0
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/plan/job/BinXiangJob.java

@@ -0,0 +1,73 @@
+package com.lc.ibps.platform.plan.job;
+
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.core.util.JacksonUtil;
+import com.lc.ibps.base.core.util.string.StringUtil;
+import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.components.quartz.BaseJob2;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+
+public class BinXiangJob extends BaseJob2 {
+
+    private static final Logger logger = LoggerFactory.getLogger(BinXiangJob.class);
+
+    private ICommonDao<?> commonDao = AppUtil.getBean(ICommonDao.class);
+    public static final String PLAN_TIME = "plan-time"; //default: 8,12,17
+    public static final String UNCONTROL_TIMES = "uncontrol-times"; //default: 4
+    @Override
+    public void executeJob(JobExecutionContext context) throws Exception {
+        Map<String, Object> objectMap = buildQueryParam(context);
+        //检查失控数据
+        checkUncontrolBx((String)objectMap.get(UNCONTROL_TIMES));
+
+        //创建日记录
+        createDailyRecord((String[])objectMap.get(PLAN_TIME));
+    }
+
+    private void checkUncontrolBx(String uncontrolTimes){
+        String sql ="SELECT bing_xiang_id_,COUNT(id_) total FROM t_dsfbxwdjl " +
+                " WHERE (CONVERT(wen_du_,SIGNED) > CONVERT(wen_du_shang_xian,SIGNED) OR  CONVERT(wen_du_,SIGNED) < CONVERT(wen_du_xia_xian_,SIGNED) )" +
+                " AND DATE(cai_ji_shi_jian_)= CURDATE() GROUP BY bing_xiang_id_ HAVING total >= 4";
+
+        //根据返回的冰箱ID,再去查当天温度记录,确定是否有连续4个点失控。
+        //如果有,走温度失控流程。
+
+    }
+
+
+    private void createDailyRecord(String[] planTime){
+        String sql = "SELECT * FROM t_dsfbxwdjl a, (SELECT bing_xiang_id_,MAX(cai_ji_shi_jian_) cai_ji_shi_jian_ FROM t_dsfbxwdjl " +
+                " WHERE cai_ji_shi_jian_<'2024-04-07 08:00:00' GROUP BY bing_xiang_id_) b" +
+                " WHERE a.bing_xiang_id_=b.bing_xiang_id_ AND a.cai_ji_shi_jian_ = b.cai_ji_shi_jian_";
+    }
+
+    private Map<String,Object> buildQueryParam(JobExecutionContext context) {
+        JobDataMap dataMap = context.getMergedJobDataMap();
+        logger.warn("group={} job={} trigger={} is running.",
+                context.getJobDetail().getKey().getGroup(),
+                context.getJobDetail().getKey().getName(),
+                context.getTrigger().getKey().getName());
+        logger.warn("jobDataMap=is {}.", JacksonUtil.toJsonString(dataMap.getWrappedMap()));
+        String[] planTime ={"8","12","17"};
+        String planDateParam = dataMap.getString(PLAN_TIME);
+        if(StringUtil.isNotBlank(planDateParam)){
+            planTime = planDateParam.split(",");
+        }
+        String uncontrolTimes = "4";
+        if(StringUtil.isNotBlank(dataMap.getString(UNCONTROL_TIMES))){
+            uncontrolTimes = dataMap.getString(UNCONTROL_TIMES);
+        }
+        HashMap map = new HashMap<String,Object>();
+        map.put(PLAN_TIME,planTime);
+        map.put(UNCONTROL_TIMES,uncontrolTimes);
+        return map;
+    }
+}