hxx 3 settimane fa
parent
commit
475113461f

+ 26 - 0
mjava-kabeiyi/pom.xml

@@ -45,6 +45,32 @@
             <artifactId>alibabacloud-ocr_api20210707</artifactId>
             <version>3.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.34</version> <!-- 推荐使用最新稳定版 -->
+            <scope>provided</scope> <!-- 必须是 provided -->
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.33</version>  <!-- 必须 >= 8.0 -->
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.14</version> <!-- 4.x 版本 -->
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20231013</version> <!-- 或最新版本 -->
+        </dependency>
 
     </dependencies>
 

+ 35 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/controller/KabeiyiController.java

@@ -1,6 +1,8 @@
 package com.malk.kabeiyi.controller;
 
+import com.malk.kabeiyi.entity.OperatingRecordEntity;
 import com.malk.kabeiyi.service.KabeiyiService;
+import com.malk.kabeiyi.service.OperatingRecordService;
 import com.malk.server.common.McR;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Workflow;
@@ -27,6 +29,9 @@ public class KabeiyiController {
     @Autowired
     private KabeiyiService kabeiyiService;
 
+    @Autowired
+    private OperatingRecordService  operatingRecordServiceImpl;
+
     //审批实例url前缀
     private static final String PROC_INST_PREFIX_URL = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=dingc3a744cb591a7346f2c783f7214b6d69#/plainapproval?procInstId=";
     @GetMapping("test")
@@ -105,4 +110,34 @@ public class KabeiyiController {
         kabeiyiService.addVoucher(map);
         return McR.success();
     }
+
+//    付款推送cbs
+    @PostMapping("pushCbs")
+    public McR puchCBS(@RequestBody Map map){
+        kabeiyiService.puchCBS(map);
+        return McR.success();
+    }
+
+//    定时查询cbs付款情况并推送u8凭证
+    @Scheduled(cron = "0 0/40 8-19 * * ?")
+    public McR schedulePaymentCBSToU8() {
+        try {
+            String[] statusList = {"1"};
+            List<OperatingRecordEntity> rescords = operatingRecordServiceImpl.findByStatusAndResCode(statusList);
+            log.info("开始获取排程单,并推送用友,推送数量为:{}",rescords.size());
+            if(rescords.isEmpty() || rescords.size()==0){
+                log.info("没有需要推送的订单。");
+                return McR.success();
+            }
+            for(OperatingRecordEntity entity:rescords){
+                log.info("开始推送订单:{}",entity.toString());
+                kabeiyiService.schedulePaymentCBSToU8(entity);
+            }
+
+            return McR.success();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }

+ 5 - 0
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/KabeiyiService.java

@@ -1,5 +1,6 @@
 package com.malk.kabeiyi.service;
 
+import com.malk.kabeiyi.entity.OperatingRecordEntity;
 import com.malk.server.common.McR;
 import org.springframework.scheduling.annotation.Async;
 
@@ -39,4 +40,8 @@ public interface KabeiyiService {
     void addVoucher(Map map);
 
     String getWeekRange(String dateStr);
+
+    void puchCBS(Map map);
+
+    void schedulePaymentCBSToU8(OperatingRecordEntity entity);
 }

File diff suppressed because it is too large
+ 612 - 393
mjava-kabeiyi/src/main/java/com/malk/kabeiyi/service/impl/KabeiyiServiceImpl.java


+ 37 - 0
mjava-kabeiyi/src/main/resources/application-dev.yml

@@ -17,6 +17,13 @@ logging:
   level:
     com.malk.*: debug
 
+spring:
+  datasource:
+    url: jdbc:mysql://114.55.244.55:3306/kby?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
+    username: root
+    password: Kabeiyi@2025++
+    driver-class-name: com.mysql.cj.jdbc.Driver
+
 mybatis-plus:
   configuration:
     #开启驼峰命名自动映射
@@ -70,3 +77,33 @@ u8:
   appKey : opa52c74dd3e0563458
   appSecret : 5b96fad7470a489bbae369ec79406fb1
 
+#cbs:
+#  ADDRESS: https://cbs8-openapi-reprd.csuat.cmburl.cn/
+#  APP_ID: WmBnthl
+#  APP_SECRET: e8f2a01b20ad4a31ed2f1783578db4cfde1badb5
+#  GRANT_TYPE: client_credentials
+#  PLATFORM_PUBLIC_KEY: 04D56804DC5CB1BC710E6DA73FD9FEDECD82110B0D1B629688C6849AE349BE5B3CB1A5C11528B7ECDCDC2CC20464B232F54C01F2C3B049EEBB4A8158B8C006987A
+#  ENTERPRISE_PRIVATE_KEY: bbb04781d69d4d74a707ee3b22dd28e73190d5919c5279c5de0d4562509182f7
+
+yida:
+  company: selectField_lxwwvggb # 公司抬头
+  schPayAccount : selectField_lxydz0ub  # 付款账号
+  revName: textField_lxwwvggc # 收款人名称
+  revAccount: textField_lxwwvgge # 收款账号
+  revBankName: textField_lxwwvggd # 收款银行
+  revCnapsCode: numberField_lycr2xlb # 收款银行联行号
+  deptName: textField_m2sekyf7 # 部门名称
+  orderCode: textField_lxwwvggg # 合同(订单)名称编号
+  dsSequence: numberField_m2o5b8sh # 数据源序号
+  type: selectField_m2sdpe2p # 类型 固定:采购部专用资金审批
+  purpose: textField_lxwwvggy # 付款用途
+  currency: textField_mhivb4yf # 币种
+  expectTime: dateField_lxwwvggf # 预计付款时间
+  displayUnitCode: textField_mhiyxcb3 # 显示单位编码
+  applyAmount: numberField_lxwwvggi # 申请金额
+  details: tableField_lxwwvggl # 付款明细
+  producter: textField_mhiyxcb4 # 制单人
+  detailMapping:
+    productName: textField_lxwwvggm  #货物或劳务名称
+
+

+ 14 - 0
mjava-kabeiyi/src/main/resources/application-prod.yml

@@ -16,6 +16,12 @@ logging:
   path: /home/server/kabeiyi/log/
   level:
     com.malk.*: info
+spring:
+  datasource:
+    url: jdbc:mysql://114.55.244.55:3306/kby?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
+    username: root
+    password: Kabeiyi@2025++
+    driver-class-name: com.mysql.cj.jdbc.Driver
 
 mybatis-plus:
   configuration:
@@ -69,3 +75,11 @@ u8:
   toAccount: kbeapi
   appKey : opa52c74dd3e0563458
   appSecret : 5b96fad7470a489bbae369ec79406fb1
+
+cbs:
+  ADDRESS: https://cbs8-openapi-reprd.csuat.cmburl.cn/
+  APP_ID: WmBnthl
+  APP_SECRET: e8f2a01b20ad4a31ed2f1783578db4cfde1badb5
+  GRANT_TYPE: client_credentials
+  PLATFORM_PUBLIC_KEY: 04CF771DF8D041481D91F274DADDD404EB271ABB2EF1AF287FF48753477C30B60F0262D21430B6D26AF20A62C5E6D83735EAF2F011C71901661E4F0AF4B9DFA6F6
+  ENTERPRISE_PRIVATE_KEY: 24c0ebb4b3c074ce38318c1a83449200c472bb6ef7bbfe8a7146128e70f96571

+ 1 - 1
mjava-kabeiyi/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: dev
   servlet:
     multipart:
       max-file-size: 100MB

+ 0 - 1
mjava-tonglibo/pom.xml

@@ -22,7 +22,6 @@
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 37 - 22
mjava-tonglibo/src/main/java/com/malk/tonglibo/controller/machineController.java

@@ -47,44 +47,51 @@ public class machineController {
             log.info("设备数据paramsStr:{}", paramsStr);
             String fixedStr = repairMalformedKFields(paramsStr);
             JSONObject params = JSONObject.parseObject(fixedStr);
-
             log.info("修复后设备数据JSON:{}", params);
-
-            // 解析时间
             LocalDateTime time;
             try {
                 time = LocalDateTime.parse((String) params.get("time"), FORMATTER);
             } catch (Exception e) {
-                log.warn("时间解析失败,使用当前时间。原值:{}", params.get("time"));
+                log.warn("时间解析失败:{}", params.get("time"));
                 time = LocalDateTime.now();
             }
             String timeStr = time.format(OUTPUT_FORMATTER);
-            String deviceId = params.getString("id");
+            String paramId = params.getString("id");
             Pattern kPattern = Pattern.compile("^k\\d+$");
             boolean hasValidData = false;
-            // 遍历所有 k* 字段,放入缓冲队列
             for (Map.Entry<String, Object> entry : params.entrySet()) {
                 String key = entry.getKey();
                 if (kPattern.matcher(key).matches()) {
                     try {
                         Object dataObj = entry.getValue();
                         if (dataObj instanceof List) {
+                            List<?> rawDataList = (List<?>) dataObj;
                             List<String> data = new ArrayList<>();
-                            for (Object item : (List<?>) dataObj) {
-                                if (item instanceof Number) {
-                                    data.add(item.toString());
-                                } else if (item == null) {
-                                    data.add("null");
+                            // 转换为字符串,并判断是否有有效值
+                            boolean fieldHasValidValue = false;
+                            for (Object item : rawDataList) {
+                                String strVal;
+                                if (item == null) {
+                                    strVal = "null";
                                 } else {
-                                    data.add(item.toString());
+                                    strVal = item.toString().trim();
+                                }
+                                data.add(strVal);
+                                // 判断这个值是否是“有效值”
+                                if (isValidDataValue(strVal)) {
+                                    fieldHasValidValue = true;
                                 }
                             }
-                            // 创建原始数据对象,放入缓冲队列
-                            RawDeviceData raw = new RawDeviceData(deviceId, time, timeStr, key, data);
-                            if (dataBuffer.offer(raw)) {
-                                hasValidData = true;
+                            // 只有当前字段至少有一个有效值,才放入缓冲队列
+                            if (fieldHasValidValue) {
+                                RawDeviceData raw = new RawDeviceData(paramId, time, timeStr, key, data);
+                                if (dataBuffer.offer(raw)) {
+                                    hasValidData = true;
+                                } else {
+                                    log.warn("缓冲队列已满,丢弃数据 设备编号={}, paramId={}", key, paramId);
+                                }
                             } else {
-                                log.warn("缓冲队列已满,丢弃数据 key={}, deviceId={}", key, deviceId);
+                                log.debug("字段 {} 的所有值均为无效(全0或空),跳过:{}", key, data);
                             }
                         }
                     } catch (Exception fieldEx) {
@@ -92,12 +99,15 @@ public class machineController {
                     }
                 }
             }
-            // 立即返回成功,不等待数据库写入
+
+            // ===== 最终判断:是否真的有有效数据 =====
             if (hasValidData) {
                 return McR.success("设备数据接收成功");
             } else {
+                log.warn("设备数据无效:所有 k* 字段均为 0 或空,paramId={}, time={}", paramId, timeStr);
                 return McR.errorParam("未解析到有效数据");
             }
+
         } catch (Exception e) {
             log.error("设备数据同步异常:", e);
             return McR.errorParam("设备数据同步异常");
@@ -113,7 +123,7 @@ public class machineController {
         for(int i = 0; i < machineData.size(); i++){
             MachineData machinedata = (MachineData) machineData.get(i);
             Map map =new HashMap();
-            map.put("content", machinedata.getMachineNo());
+            map.put("content", machinedata.getMachineFlag());
             map.put("value", machinedata.getJqyxsh());
             result.add(map);
         }
@@ -127,7 +137,7 @@ public class machineController {
         for(int i = 0; i < data.size(); i++){
             MachineData machinedata = (MachineData) data.get(i);
             Map map =new HashMap();
-            map.put("s", machinedata.getMachineNo());
+            map.put("s", machinedata.getMachineFlag());
             map.put("y", machinedata.getZcn());
             map.put("x", machinedata.getTimestr());
             result.add(map);
@@ -151,10 +161,15 @@ public class machineController {
         // 1. 修复 "k1":] → "k1":[]
         result = result.replaceAll("(\"k\\d+\"\\s*:\\s*)\\]", "$1[]");
         // 2. 修复 "k1":  → "k1":[]
-        //    (即冒号后直接跟逗号或其他字符,中间无内容)
-        //    先找这种结构:"k1": ,  或 "k1": }
         result = result.replaceAll("(\"k\\d+\"\\s*:\\s*)([\\,\\}])", "$1[]$2");
         return result;
     }
 
+    private boolean isValidDataValue(String value) {
+        if (value == null || value.isEmpty() || "null".equalsIgnoreCase(value)) {
+            return false;
+        }
+        return !value.matches("^0+(\\.0+)?$");
+    }
+
 }

+ 7 - 0
mjava-tonglibo/src/main/java/com/malk/tonglibo/entity/MachineData.java

@@ -39,8 +39,15 @@ public class MachineData {
     private String xjsj;
     private String tssj;
     private String zysj;
+    private String dn;
     @TableField("machineNo")
     private String machineNo;
+    @TableField("machineName")
+    private String machineName;
+    @TableField("machineCode")
+    private String machineCode;
+    @TableField("machineFlag")
+    private String machineFlag;
 
     private String timestr;
 

+ 5 - 4
mjava-tonglibo/src/main/java/com/malk/tonglibo/utils/ChangeDetector.java

@@ -20,10 +20,10 @@ public class ChangeDetector {
      * 判断当前数据是否为新状态(MD5 指纹不同)
      */
     public boolean isChanged(MachineData data) {
-        String paramId = data.getParamId();
+        String machineNo = data.getMachineNo();
         String fingerprint = generateFingerprint(data);
 
-        String lastFingerprint = lastFingerprintMap.get(paramId);
+        String lastFingerprint = lastFingerprintMap.get(machineNo);
         if (lastFingerprint == null) {
             return true; // 第一次上报,算变化
         }
@@ -34,8 +34,8 @@ public class ChangeDetector {
     /**
      * 记录当前指纹为最新状态
      */
-    public void recordAsCurrent(String paramId, String fingerprint) {
-        lastFingerprintMap.put(paramId, fingerprint);
+    public void recordAsCurrent(String machineNo, String fingerprint) {
+        lastFingerprintMap.put(machineNo, fingerprint);
     }
 
     String concatFields(MachineData data) {
@@ -62,6 +62,7 @@ public class ChangeDetector {
                 .append(defaultString(data.getXjsj()))
                 .append(defaultString(data.getTssj()))
                 .append(defaultString(data.getZysj()))
+                .append(defaultString(data.getDn()))
                 .toString();
     }
 

+ 81 - 31
mjava-tonglibo/src/main/java/com/malk/tonglibo/utils/DeviceDataPersistTask.java

@@ -1,7 +1,15 @@
 package com.malk.tonglibo.utils;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
+import com.malk.service.aliwork.YDClient;
 import com.malk.tonglibo.Mapper.MachineDataMapper;
+import com.malk.tonglibo.Mapper.MachineDetailMapper;
 import com.malk.tonglibo.Service.IMachineDataService;
+import com.malk.tonglibo.entity.MachineDetail;
 import com.malk.tonglibo.entity.RawDeviceData;
 import com.malk.tonglibo.entity.MachineData;
 import lombok.extern.slf4j.Slf4j;
@@ -26,12 +34,16 @@ public class DeviceDataPersistTask {
     private MachineDataMapper machineDataMapper;
     @Autowired
     private IMachineDataService machineDataService;
+    @Autowired
+    private MachineDetailMapper machineDetailMapper;
 
     @Autowired
     private DataBuffer dataBuffer;
 
     @Autowired
     private ChangeDetector changeDetector;
+    @Autowired
+    private YDClient ydClient;
 
 
     @Scheduled(fixedDelay = 1000) // 每秒执行一次
@@ -39,29 +51,48 @@ public class DeviceDataPersistTask {
         List<RawDeviceData> dataList = dataBuffer.drain(500);
         if (dataList.isEmpty()) return;
 
-        List<MachineData> toInsert = new ArrayList<>();
-        int unchangedCount = 0;
+        // "machineNo + 分钟"
+        Map<String, MachineData> latestPerMinute = new HashMap<>();
 
         for (RawDeviceData item : dataList) {
             MachineData data = convertToMachineData(item);
-            if (data == null) continue;
+            if (data == null) {
+                log.warn("设备数据转换失败,跳过: {}", item);
+                continue;
+            }
+
+            //生成 key:machineNo + 时间分钟
+            String minuteKey = data.getMachineNo() + "_" +
+                    data.getTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
+            // 保留最新的数据
+            MachineData existing = latestPerMinute.get(minuteKey);
+            if (existing == null || data.getTime().isAfter(existing.getTime())) {
+                latestPerMinute.put(minuteKey, data);
+            }
+        }
+
+        //对每分钟最新数据进行 MD5 变化检测
+        List<MachineData> toInsert = new ArrayList<>();
+        int unchangedCount = 0;
 
-            //使用 MD5 判断是否变化
+        for (MachineData data : latestPerMinute.values()) {
             if (changeDetector.isChanged(data)) {
-                String fingerprint = MD5Util.md5(changeDetector.concatFields(data)); // 或在 convert 时生成
+                String fingerprint = MD5Util.md5(changeDetector.concatFields(data));
                 data.setDataFingerprint(fingerprint);
                 toInsert.add(data);
-                changeDetector.recordAsCurrent(data.getParamId(), fingerprint);
+                changeDetector.recordAsCurrent(data.getMachineNo(), fingerprint); // 更新为当前指纹
             } else {
                 unchangedCount++;
             }
         }
 
+        // 批量入库
         if (!toInsert.isEmpty()) {
             machineDataService.saveBatch(toInsert, 100);
-            log.info("入库 {} 条(变化数据),跳过 {} 条未变数据", toInsert.size(), unchangedCount);
+            log.info("入库 {} 条(每设备每分钟最新且变化数据),跳过 {} 条未变数据,原始上报 {} 条",
+                    toInsert.size(), unchangedCount, dataList.size());
         } else if (unchangedCount > 0) {
-            log.debug("跳过 {} 条未变化数据", unchangedCount);
+            log.debug("跳过 {} 条未变化数据(已按分钟合并)", unchangedCount);
         }
     }
 
@@ -81,30 +112,44 @@ public class DeviceDataPersistTask {
 
             // 填充字段(根据索引取值)
             machineData.setJqyxsh(safeGet(data, 0));
-            machineData.setZcn(safeGet(data, 2));
-            machineData.setZqsj(safeGet(data, 4));
-            machineData.setSgdyl(safeGet(data, 6));
-            machineData.setXgdyl(safeGet(data, 8));
-            machineData.setYskqyl1(safeGet(data, 10));
-            machineData.setYskqyl2(safeGet(data, 12));
-            machineData.setZymwd1(safeGet(data, 14));
-            machineData.setZymwd2(safeGet(data, 16));
-            machineData.setZymwd3(safeGet(data, 18));
-            machineData.setZymwd4(safeGet(data, 20));
-            machineData.setSmwd1(safeGet(data, 22));
-            machineData.setSmwd2(safeGet(data, 24));
-            machineData.setSmwd3(safeGet(data, 26));
-            machineData.setSmwd4(safeGet(data, 28));
-            machineData.setXmwd1(safeGet(data, 30));
-            machineData.setXmwd2(safeGet(data, 32));
-            machineData.setXmwd3(safeGet(data, 34));
-            machineData.setXmwd4(safeGet(data, 36));
-            machineData.setXjsj(safeGet(data, 38));
-            machineData.setTssj(safeGet(data, 40));
-            machineData.setZysj(safeGet(data, 42));
+            machineData.setZcn(safeGet(data, 1));
+            machineData.setDn(safeGet(data, 2));
+            machineData.setZqsj(safeGet(data, 3));
+            machineData.setSgdyl(safeGet(data, 4));
+            machineData.setXgdyl(safeGet(data, 5));
+            machineData.setYskqyl1(safeGet(data, 6));
+            machineData.setYskqyl2(safeGet(data, 7));
+            machineData.setZymwd1(safeGet(data, 8));
+            machineData.setZymwd2(safeGet(data, 9));
+            machineData.setZymwd3(safeGet(data, 10));
+            machineData.setZymwd4(safeGet(data, 11));
+            machineData.setSmwd1(safeGet(data, 12));
+            machineData.setSmwd2(safeGet(data, 13));
+            machineData.setSmwd3(safeGet(data, 14));
+            machineData.setSmwd4(safeGet(data, 15));
+            machineData.setXmwd1(safeGet(data, 16));
+            machineData.setXmwd2(safeGet(data, 17));
+            machineData.setXmwd3(safeGet(data, 18));
+            machineData.setXmwd4(safeGet(data, 19));
+            machineData.setXjsj(safeGet(data, 20));
+            machineData.setTssj(safeGet(data, 21));
+            machineData.setZysj(safeGet(data, 22));
+            List<MachineDetail> machineList = machineDetailMapper.selectList(new QueryWrapper<MachineDetail>().eq("machine_no", key));
+            if (machineList != null && !machineList.isEmpty()){
+                MachineDetail yidaParam = machineList.get(0);
+                String machineName = yidaParam.getMachineName();
+                String machineCode = yidaParam.getMachineCode();
+                String machineFlag = yidaParam.getMachineFlag();
+                if (machineName != null) {
+                    machineData.setMachineName(machineName);
+                    machineData.setMachineCode(machineCode);
+                    machineData.setMachineFlag(machineFlag);
+                } else {
+                    log.warn("未在宜搭中找到设备编号 {} 对应的名称,使用默认值", key);
+                }
+            }
 
             return machineData;
-
         } catch (Exception e) {
             log.error("转换数据失败: {}", item, e);
             return null;
@@ -114,7 +159,12 @@ public class DeviceDataPersistTask {
     // 安全获取索引值
     private String safeGet(List<String> list, int index) {
         if (index >= 0 && index < list.size()) {
-            return list.get(index);
+            String value = list.get(index);
+            // 切割掉 . 后面的数据
+            if (value != null) {
+                String[] parts = value.split("\\.");
+                return parts[0]; // 返回点号前面的部分
+            }
         }
         return "";
     }

+ 5 - 4
mjava-tonglibo/src/main/resources/application-dev.yml

@@ -32,13 +32,14 @@ logging:
 # dingtalk
 dingtalk:
   agentId: 3914874648
-  appKey: dingyedbqoqricilvyog
-  appSecret: CAPT0hNRO5y-rHp81fmzMHz4LXYJhzkHqG1kh1L6OdM_LQPANR9IOoLtJrNLPVCc
+  appKey: dinggps3rba7eb9cexqe
+  appSecret: pjiEz7AR8Meov0tui7-lJ00oQRxGDWAnIKxS_uH7HDe9rop7H2ZdmW1tDuqaEH_F
   corpId: dingf11f7d6ff834577b
   aesKey: UqJRA1RTxarywiIWOK76BN8BSLfAN4gTDo6nEco4sqG
   token: CpR7AsWa026FQV5VBNU5YrO5
 
 aliwork:
-  appType: APP_HJJ3X3QN4WEWDHU2BJR2
-  systemToken: 7X866C81QPIHJKBFFM1QW4S8BV1U3U4MFO5RLY1
+  appType: APP_C83FAK1HS55UIQLP1MBX
+  systemToken: K4666XA1ZQ5O2PYSAKA7M4ZQAFPX3KYNUEK0MZT9
+
 

+ 4 - 4
mjava-tonglibo/src/main/resources/application-prod.yml

@@ -28,13 +28,13 @@ mybatis-plus:
 # dingtalk
 dingtalk:
   agentId: 3914874648
-  appKey: dingyedbqoqricilvyog
-  appSecret: CAPT0hNRO5y-rHp81fmzMHz4LXYJhzkHqG1kh1L6OdM_LQPANR9IOoLtJrNLPVCc
+  appKey: dinggps3rba7eb9cexqe
+  appSecret: pjiEz7AR8Meov0tui7-lJ00oQRxGDWAnIKxS_uH7HDe9rop7H2ZdmW1tDuqaEH_F
   corpId: dingf11f7d6ff834577b
   aesKey: UqJRA1RTxarywiIWOK76BN8BSLfAN4gTDo6nEco4sqG
   token: CpR7AsWa026FQV5VBNU5YrO5
 
 aliwork:
-  appType: APP_HJJ3X3QN4WEWDHU2BJR2
-  systemToken: 7X866C81QPIHJKBFFM1QW4S8BV1U3U4MFO5RLY1
+  appType: APP_C83FAK1HS55UIQLP1MBX
+  systemToken: K4666XA1ZQ5O2PYSAKA7M4ZQAFPX3KYNUEK0MZT9
 

+ 27 - 23
mjava-tonglibo/src/main/resources/mapper/MachineDataMapper.xml

@@ -9,6 +9,7 @@
         SELECT
             paramId,
             machineNo,
+            machineFlag,
             jqyxsh,
             zcn,
             timeStr,
@@ -17,6 +18,7 @@
                  SELECT
                      paramId,
                      machineNo,
+                     machineFlag,
                      zcn,
                      timeStr,
                      jqyxsh,
@@ -57,12 +59,14 @@
         SELECT
             date,
             machineNo,
+            machineFlag,
             zcn,
             timeStr
         FROM (
             SELECT
             DATE(time) AS date,
             machineNo AS machineNo,
+            machineFlag,
             zcn,
             timeStr,
             ROW_NUMBER() OVER (PARTITION BY DATE(time), machineNo ORDER BY time ASC) AS rn
@@ -76,34 +80,34 @@
     </select>
 
     <select id="selectDailyShiftOutput" resultType="map">
-        SELECT
-        CASE
-        WHEN HOUR(time) < 8 THEN DATE_SUB(DATE(time), INTERVAL 1 DAY)
-        ELSE DATE(time)
-        END AS date,
+<!--        SELECT-->
+<!--        CASE-->
+<!--        WHEN HOUR(time) < 8 THEN DATE_SUB(DATE(time), INTERVAL 1 DAY)-->
+<!--        ELSE DATE(time)-->
+<!--        END AS date,-->
 
-        CASE
-        WHEN HOUR(time) >= 8 AND HOUR(time) < 16 THEN '早班'
-        WHEN HOUR(time) >= 16 THEN '中班'
-        ELSE '晚班'
-        END AS shift,
+<!--        CASE-->
+<!--        WHEN HOUR(time) >= 8 AND HOUR(time) < 16 THEN '早班'-->
+<!--        WHEN HOUR(time) >= 16 THEN '中班'-->
+<!--        ELSE '晚班'-->
+<!--        END AS shift,-->
 
-        SUM(CAST(zcn AS DECIMAL(10,2))) AS output
+<!--        SUM(CAST(zcn AS DECIMAL(10,2))) AS output-->
 
-        FROM T_TLB_MACHINEDATA
-        WHERE zcn REGEXP '^[0-9]+(\\.[0-9]+)?$'
-        AND time >= #{startDate}
-        AND time &lt; #{endDate}
+<!--        FROM T_TLB_MACHINEDATA-->
+<!--        WHERE zcn REGEXP '^[0-9]+(\\.[0-9]+)?$'-->
+<!--        AND time >= #{startDate}-->
+<!--        AND time &lt; #{endDate}-->
 
-        GROUP BY
-        CASE WHEN HOUR(time) < 8 THEN DATE_SUB(DATE(time), INTERVAL 1 DAY) ELSE DATE(time) END,
-        CASE
-        WHEN HOUR(time) >= 8 AND HOUR(time) < 16 THEN '早班'
-        WHEN HOUR(time) >= 16 THEN '中班'
-        ELSE '晚班'
-        END
+<!--        GROUP BY-->
+<!--        CASE WHEN HOUR(time) < 8 THEN DATE_SUB(DATE(time), INTERVAL 1 DAY) ELSE DATE(time) END,-->
+<!--        CASE-->
+<!--        WHEN HOUR(time) >= 8 AND HOUR(time) < 16 THEN '早班'-->
+<!--        WHEN HOUR(time) >= 16 THEN '中班'-->
+<!--        ELSE '晚班'-->
+<!--        END-->
 
-        ORDER BY date, FIELD(shift, '早班', '中班', '晚班')
+<!--        ORDER BY date, FIELD(shift, '早班', '中班', '晚班')-->
     </select>
 
 </mapper>