From f6abc8c724eed706487b7616bc6c816e5db5c939 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期二, 09 十二月 2025 20:13:48 +0800
Subject: [PATCH] 数量检测页面提交

---
 fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java |  341 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 341 insertions(+), 0 deletions(-)

diff --git a/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java
new file mode 100644
index 0000000..d5321bd
--- /dev/null
+++ b/fzzy-igdss-io/src/main/java/com/fzzy/igds/io/order/ExeOrderService.java
@@ -0,0 +1,341 @@
+package com.fzzy.igds.io.order;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.LogOperation;
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.request.ReqStatus;
+import com.fzzy.igds.request.ThReqData;
+import com.fzzy.igds.service.LogOperationService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Description 鍛戒护鎵ц鏍¢獙绛変俊鎭帴鍙�
+ * @Author CZT
+ * @Date 2025/12/9 10:19
+ */
+@Service
+public class ExeOrderService {
+
+    @Resource
+    private RedisCache redisCache;
+    @Resource
+    private LogOperationService logService;
+
+    /**
+     *
+     * @param baseRequest
+     */
+    public void addCache(ExeBaseRequest baseRequest) {
+        // 娣诲姞缂撳瓨
+        this.addReqCache(baseRequest);
+    }
+
+    /**
+     *
+     * @param request
+     */
+    public void addLog(ExeBaseRequest request) {
+        // 娣诲姞鏃ュ織
+        this.addLogByExeReq(request);
+    }
+
+    /**
+     *
+     * @param baseRequest
+     */
+    public void addLogAndCache(ExeBaseRequest baseRequest) {
+
+        // 娣诲姞缂撳瓨
+        this.addReqCache(baseRequest);
+
+        // 娣诲姞鏃ュ織
+        this.addLogByExeReq(baseRequest);
+    }
+
+    /**
+     * 瀛樻斁娓╂箍搴﹀懡浠ょ紦瀛�
+     * @param request
+     */
+    public void addThCache(ExeBaseRequest request) {
+
+        ThReqData reqData = (ThReqData) request.getReqData();
+
+        if (null == reqData) return;
+
+        String key = this.buildExeOrderKey(request.getBizType(),
+                request.getDeptId(), request.getSerId() + "_" + reqData.getThConf(), request.getRequestId());
+
+        redisCache.setCacheObject(key, request, 8 * 60, TimeUnit.MINUTES);
+    }
+
+    /**
+     *
+     * @param companyId
+     * @param serId
+     * @return
+     */
+    public ExeBaseRequest getControlCache(String companyId, String serId) {
+        String key = Constant.APP_NAME + ":" + companyId + ":DEVICE_CTRL:" + serId;
+        return (ExeBaseRequest) redisCache.getCacheObject(key);
+    }
+
+    /**
+     *
+     * @param bizType
+     * @param type
+     * @param id
+     * @return
+     */
+    public List<ExeBaseRequest> getInProgressOrderById(String bizType, String type, String id) {
+        if (StringUtils.isEmpty(bizType)){
+            return null;
+        }
+        if (StringUtils.isEmpty(type)){
+            return null;
+        }
+        if (StringUtils.isEmpty(id)){
+            return null;
+        }
+
+        bizType = ":" + bizType;
+        type = ":" + type + ":";
+        id = ":" + id + ":";
+
+        String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + bizType + type + "*";
+
+        Collection<String> keys = redisCache.keys(pattern);
+
+        if (null == keys || keys.isEmpty())
+            return null;
+
+        List<ExeBaseRequest> result = new ArrayList<>();
+        ExeBaseRequest exeRequest;
+        for (String key : keys) {
+            if (key.indexOf(id) > 0) {
+                exeRequest = (ExeBaseRequest) redisCache.getCacheObject(key);
+                if (null == exeRequest){
+                    continue;
+                }
+                result.add(exeRequest);
+//                if (ReqStatus.IN_PROGRESS.getCode().equals(
+//                        exeRequest.getStatus())) {
+//                    result.add(exeRequest);
+//                }
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     *
+     * @param bizType
+     * @param type
+     * @param deptId
+     * @param timout
+     * @return
+     */
+    public List<ExeBaseRequest> getAllOrderByDeptId(String bizType,String type, String deptId, int timout) {
+        if (StringUtils.isEmpty(bizType))
+            return null;
+        if (StringUtils.isEmpty(deptId))
+            return null;
+        bizType = ":" + bizType;
+        type = ":" + type;
+
+        String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + bizType + type + "*";
+
+        Collection<String> keys = redisCache.keys(pattern);
+
+        if (null == keys || keys.isEmpty())
+            return null;
+
+        List<ExeBaseRequest> result = new ArrayList<>();
+        ExeBaseRequest exeRequest;
+        for (String key : keys) {
+            exeRequest = redisCache.getCacheObject(key);
+            if (null == exeRequest){
+                continue;
+            }
+            if(exeRequest.getDeptId().equals(deptId)){
+                if (ReqStatus.IN_PROGRESS.getCode().equals(exeRequest.getStatus()) && timout > 0) {
+                    if (System.currentTimeMillis() - exeRequest.getExeTime().getTime() > (timout * 1000)) {
+                        exeRequest.setExeMsg("绛夊緟瓒呰繃" + timout + "绉掑悗缁堢娌℃湁鍙嶉");
+                        exeRequest.setStatus(ReqStatus.TIMEOUT_ERROR.getCode());
+                    }
+                }
+
+                result.add(exeRequest);
+            }
+        }
+        return result;
+    }
+
+    /**
+     *
+     * @param request
+     * @param isDel
+     */
+    public void completeCache(ExeBaseRequest request, boolean isDel) {
+        request.setStatus(ReqStatus.COMPLETE.getCode());
+
+        if (StringUtils.isNotEmpty(request.getErrorMsg())) {
+            request.setStatus(ReqStatus.ANALYSIS_ERROR.getCode());
+        }
+
+        if (isDel) {
+            delReqCache(request);
+        } else {
+            addCache(request);
+        }
+    }
+
+    /**
+     *
+     * @param companyId
+     * @param bizType
+     * @param deptId
+     */
+    public void clean(String companyId, String bizType, String deptId) {
+        if (StringUtils.isEmpty(bizType))
+            return;
+        if (StringUtils.isEmpty(deptId))
+            return;
+
+        String pattern = Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE
+                + ":" + bizType + ":" + "*";
+
+        Collection<String> keys = redisCache.keys(pattern);
+
+        if (null == keys || keys.isEmpty())
+            return;
+
+        for (String key : keys) {
+            redisCache.deleteObject(key);
+        }
+    }
+
+    /**
+     * @param request
+     */
+    public void addLogByExeReq(ExeBaseRequest request) {
+        LogOperation log = new LogOperation();
+        log.setCompanyId(request.getCompanyId());
+        log.setOperateUser(ContextUtil.getLoginUserName());
+        log.setOperateTime(new Date());
+        log.setBizType(request.getBizType());
+        log.setDeptId(request.getDeptId());
+        log.setOperateInfo(request.getExeMsg());
+        if (StringUtils.isNotEmpty(request.getErrorMsg())) {
+            log.setOperateInfo(request.getExeMsg() + "銆�" + request.getErrorMsg());
+        }
+
+        logService.addLog(log);
+    }
+
+    /**
+     * 娉ㄦ剰锛氬綋鍓嶅瓨鏀剧殑鏄笟鍔℃墽琛岀殑鍛戒护淇℃伅,鍒ゆ柇鏄惁瀛樻斁鍔熻兘缂撳瓨锛岄粯璁ゅ瓨鏀�
+     *
+     * @param request
+     */
+    public void addReqCache(ExeBaseRequest request) {
+
+        //娣诲姞涓氬姟缂撳瓨
+        String key = this.buildReqKeyByBiz(request.getBizType(),request.getDepotId(), request.getRequestId());
+        redisCache.setCacheObject(key, request, 60, TimeUnit.MINUTES);
+
+        //娣诲姞鍔熻兘缂撳瓨
+        if(request.isAddCacheTag()){
+            key = this.buildReqKeyByFun(request.getBizType(),request.getSerId(), request.getRequestId());
+            redisCache.setCacheObject(key, request, 60, TimeUnit.MINUTES);
+        }
+    }
+
+    /**
+     * 娉ㄦ剰锛氬綋鍓嶅瓨鏀剧殑鏄笟鍔℃墽琛岀殑鍛戒护淇℃伅
+     *
+     * @param request
+     */
+    public void delReqCache(ExeBaseRequest request) {
+
+        //鍒犻櫎涓氬姟缂撳瓨
+        String key = this.buildReqKeyByBiz(request.getBizType(), request.getDepotId(), request.getRequestId());
+        redisCache.deleteObject(key);
+
+        //鍒犻櫎鍔熻兘缂撳瓨
+        if(request.isAddCacheTag()){
+            key = this.buildReqKeyByFun(request.getBizType(),request.getSerId(), request.getRequestId());
+            redisCache.deleteObject(key);
+        }
+    }
+
+    /**
+     * 涓氬姟缂撳瓨key,鐢熸垚瑙勫垯锛歩gds:ORDER:bizType:BIZ:serId:orderId
+     *
+     * @param bizType
+     * @param depotId
+     * @param orderId
+     * @return
+     */
+    private String buildReqKeyByBiz(String bizType, String depotId, String orderId) {
+        if (StringUtils.isEmpty(bizType))
+            bizType = "sys";
+
+        if (StringUtils.isEmpty(orderId))
+            orderId = ContextUtil.getTimeId(10000, 99999);
+
+        return Constant.APP_NAME + ":" +RedisConst.KEY_ORDER_PRE + ":" + bizType + ":BIZ:" + depotId + ":" + orderId;
+    }
+
+    /**
+     * 鍔熻兘缂撳瓨key,鐢熸垚瑙勫垯锛歩gds:ORDER:bizType:FUN:serId:orderId
+     *
+     * @param bizType
+     * @param serId
+     * @param orderId
+     * @return
+     */
+    private String buildReqKeyByFun(String bizType, String serId, String orderId) {
+        if (StringUtils.isEmpty(bizType))
+            bizType = "sys";
+
+        if (StringUtils.isEmpty(orderId))
+            orderId = ContextUtil.getTimeId(10000, 99999);
+
+        return Constant.APP_NAME + ":" +RedisConst.KEY_ORDER_PRE + ":" + bizType  + ":FUN:" + serId + ":" + orderId;
+    }
+
+    /**
+     * 鍛戒护缂撳瓨鐢熸垚瑙勫垯锛歛ppName:KEY_KEY_ORDER:bizType:deptId:serId:orderId
+     *
+     * @param bizType 涓氬姟绫诲瀷
+     * @param deptId  搴撳尯缂栫爜
+     * @param serId   鍒嗘満缂栫爜
+     * @param orderId
+     * @return
+     */
+    private String buildExeOrderKey(String bizType, String deptId,
+                                    String serId, String orderId) {
+        if (StringUtils.isEmpty(bizType))
+            bizType = "sys";
+        if (StringUtils.isEmpty(deptId))
+            deptId = "01";
+        if (StringUtils.isEmpty(serId))
+            serId = "0001";
+        if (StringUtils.isEmpty(orderId))
+            orderId = "5000";
+
+        return Constant.APP_NAME + ":" + RedisConst.KEY_ORDER_PRE + ":"
+                + bizType + ":" + deptId + ":" + serId + ":" + orderId;
+    }
+}

--
Gitblit v1.9.3