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-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java |  498 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 498 insertions(+), 0 deletions(-)

diff --git a/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java
new file mode 100644
index 0000000..77972e0
--- /dev/null
+++ b/fzzy-igdss-web/src/main/java/com/fzzy/sys/manager/grain/GrainManager.java
@@ -0,0 +1,498 @@
+package com.fzzy.sys.manager.grain;
+
+import com.fzzy.igds.constant.OrderRespEnum;
+import com.fzzy.igds.constant.RespCodeEnum;
+import com.fzzy.igds.data.*;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.DepotConf;
+import com.fzzy.igds.domain.DeviceSer;
+import com.fzzy.igds.domain.Grain;
+import com.fzzy.igds.io.manager.RemoteManager;
+import com.fzzy.igds.io.order.ExeOrderService;
+import com.fzzy.igds.io.service.RemoteGrainService;
+import com.fzzy.igds.request.ExeBaseRequest;
+import com.fzzy.igds.request.GrainReqData;
+import com.fzzy.igds.request.ReqStatus;
+import com.fzzy.igds.response.GrainResponse;
+import com.fzzy.igds.service.DepotConfService;
+import com.fzzy.igds.service.DepotService;
+import com.fzzy.igds.service.DeviceSerService;
+import com.fzzy.igds.service.GrainService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.fzzy.igds.utils.GrainDataBuilder;
+import com.fzzy.igds.utils.GrainPrintBuilder;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.text.Collator;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/12/9 9:56
+ */
+@Slf4j
+@Component
+public class GrainManager {
+
+    @Resource
+    private DepotService depotService;
+    @Resource
+    private DepotConfService depotConfService;
+    @Resource
+    private GrainService grainService;
+    @Resource
+    private DeviceSerService deviceSerService;
+    @Resource
+    private RemoteManager remoteManager;
+    @Resource
+    private ExeOrderService exeOrderService;
+    @Resource
+    private GrainExportBuilder grainExportBuilder;
+
+    public PageResponse<List<GrainData>> queryListGrainData(GrainParam param) {
+        if (StringUtils.isEmpty(param.getDepotId())) {
+            return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(),
+                    "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁般��");
+        }
+        if (StringUtils.isEmpty(param.getCompanyId())) {
+            param.setCompanyId(ContextUtil.getCompanyId());
+        }
+
+        if (null != param.getCheckDate()) {
+            param.setStart(DateUtil.getCurZero(param.getCheckDate()));
+            param.setEnd(DateUtil.getNextZero(param.getCheckDate()));
+            param.setCheckDate(null);
+        }
+
+        if (null != param.getCheckMonth()) {
+            param.setStart(DateUtil.getMonthFirst(param.getCheckMonth()));
+            param.setEnd(DateUtil.getNextMonthFirst(param.getCheckMonth()));
+            param.setCheckMonth(null);
+        }
+
+        List<Grain> list = grainService.listData(param);
+        if (null == list || list.isEmpty()) {
+            return null;
+        }
+
+        // 娣诲姞浠撳簱淇℃伅
+        Depot depotData = depotService.getCacheDepot(param.getCompanyId(), param.getDepotId());
+        if (null == depotData) {
+            log.error("鏈幏鍙栧埌浠撳簱淇℃伅");
+        }
+
+        List<GrainData> result = new ArrayList<>();
+        DepotConf depotConf;
+        GrainData data;
+        for (Grain grain : list) {
+            depotConf = depotConfService.getCacheDepotConfByDepotId(grain.getCompanyId(), grain.getDepotId());
+            data = new GrainData();
+            BeanUtils.copyProperties(grain, data);
+            GrainDataBuilder.updateGrainData(data, depotConf, depotData.getDepotType());
+            data.setDepotData(depotData);
+            result.add(data);
+        }
+
+
+        for (GrainData grainData : result) {
+            grainData.setDepotData(depotData);
+        }
+        return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+    }
+
+    /**
+     * 鍗曚粨閲囬泦
+     *
+     * @param param
+     * @return
+     */
+    public GrainResponse checkSingle(GrainParam param) {
+        if (StringUtils.isEmpty(param.getCompanyId())) {
+            param.setCompanyId(ContextUtil.getCompanyId());
+        }
+
+        if (StringUtils.isEmpty(param.getDeptId())) {
+            param.setDeptId(ContextUtil.subDeptId(null));
+        }
+
+        if (StringUtils.isEmpty(param.getDepotId())) {
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝璇烽噸鏂伴�夋嫨浠撳簱骞舵墽琛岋紒");
+        }
+
+        try {
+            // 缂撳瓨鑾蜂粨搴撻厤缃俊鎭�
+            DepotConf depotConf = depotConfService.getCacheDepotConfByDepotId(param.getCompanyId(), param.getDepotId());
+
+            if (null == depotConf) {
+                return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "褰撳墠浠撳簱娌℃湁閰嶇疆绮儏鍙傛暟锛屾墽琛岃鎷掔粷锛�");
+            }
+
+            // 鑾峰彇鍒嗘満淇℃伅
+            DeviceSer deviceSer = deviceSerService.getCacheSer(param.getCompanyId(), depotConf.getGrainSer());
+
+            if (null == deviceSer) {
+                return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                        "褰撳墠浠撳簱娌℃湁閰嶇疆绮儏鍒嗘満锛屾墽琛岃鎷掔粷锛�");
+            }
+
+            Depot depot = depotService.getCacheDepot(depotConf.getCompanyId(), depotConf.getDepotId());
+
+            //鏁版嵁灏佽
+            ExeBaseRequest request = new ExeBaseRequest<GrainReqData>();
+            request.setDepotId(param.getDepotId());
+            request.setCompanyId(param.getCompanyId());
+            request.setBizType("grain");
+            request.setExeUser(ContextUtil.getLoginUserName());
+            request.setDepotName(depot.getName());
+            request.setDeptId(ContextUtil.subDeptId(null));
+            request.setProtocol(deviceSer.getProtocol());
+            request.setAddLogTag(true);
+            request.setIp(deviceSer.getIp());
+            request.setPort(deviceSer.getPort());
+            request.setSerId(deviceSer.getId());
+            request.setSerName(deviceSer.getName());
+            request.setSn(deviceSer.getSn());
+
+            request.setExeMsg("绮儏閲囬泦锛屼粨搴�=" + request.getDepotName());
+
+            GrainReqData reqData = new GrainReqData();
+            reqData.setCableStart(depotConf.getCableStart());
+            reqData.setCableEnd(depotConf.getCableEnd());
+            reqData.setCableRule(depotConf.getCableRule());
+            // 鏂板娓╂箍搴︿俊鎭�
+            reqData.setThSerId(depotConf.getThSer());
+            reqData.setThConf(depotConf.getThConf());
+            //澶氫粨骞跺彂鏍囧織
+            reqData.setIsMoreDepot(deviceSer.getIsMoreDepot());
+
+            request.setReqData(reqData);
+
+            RemoteGrainService remoteGrainService = remoteManager.getRemoteGrainService(deviceSer.getProtocol());
+
+            if (null == remoteGrainService) {
+                String msg = "绯荤粺娌℃湁" + request.getProtocol() + "鐨勫崗璁疄鐜帮紝鎵ц琚嫆缁濓紒";
+                request.setErrorMsg(msg);
+                request.setStatus(ReqStatus.SEND_ERROR.getCode());
+                exeOrderService.addLogAndCache(request);
+                return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), msg);
+            }
+
+            GrainResponse result = remoteGrainService.checkGrain(request);
+
+            if (!OrderRespEnum.ORDER_SUCCESS.getCode().equals(result.getCode())) {
+                String msg = request.getDepotName() + "璇锋眰澶辫触:" + result.getMsg();
+                request.setErrorMsg(msg);
+                request.setStatus(ReqStatus.SEND_ERROR.getCode());
+            }
+
+            exeOrderService.addLogAndCache(request);
+            return result;
+
+        } catch (Exception e) {
+            log.error("绮儏鎵ц寮傚父锛歿}", e.getLocalizedMessage());
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "绯荤粺寮傚父锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鎵归噺閲囬泦
+     *
+     * @param param
+     * @return
+     */
+    public GrainResponse checkBatch(GrainParam param) {
+        if (null == param.getDepotIds()) {
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝璇烽噸鏂伴�夋嫨浠撳簱骞舵墽琛岋紒");
+        }
+        if (StringUtils.isEmpty(param.getCompanyId())) {
+            param.setCompanyId(ContextUtil.getCompanyId());
+        }
+
+        if (StringUtils.isEmpty(param.getDeptId())) {
+            param.setDeptId(ContextUtil.subDeptId(null));
+        }
+
+        try {
+            String[] attr = param.getDepotIds().split(",");
+
+            // 缂撳瓨鑾蜂粨搴撻厤缃俊鎭�
+            DepotConf depotConf;
+            // 鑾峰彇鍒嗘満淇℃伅
+            DeviceSer deviceSer;
+            ExeBaseRequest request;
+            GrainReqData reqData;
+            //鎵ц鍙戦�佸懡浠�
+            RemoteGrainService remoteGrainService;
+            GrainResponse result;
+            Depot depot;
+            for (String depotId : attr) {
+                param.setDepotId(depotId);
+
+                //鏁版嵁灏佽
+                request = new ExeBaseRequest<GrainReqData>();
+                request.setDepotId(param.getDepotId());
+                request.setCompanyId(param.getCompanyId());
+                request.setBizType("grain");
+                request.setExeUser(ContextUtil.getLoginUserName());
+
+                request.setDeptId(ContextUtil.subDeptId(null));
+                request.setAddLogTag(true);
+
+                reqData = new GrainReqData();
+
+                depotConf = depotConfService.getCacheDepotConfByDepotId(param.getCompanyId(), param.getDepotId());
+
+                depot = depotService.getCacheDepot(depotConf.getCompanyId(), depotConf.getDepotId());
+
+                if (null == depotConf) {
+                    request.setErrorMsg("鎵ц澶辫触锛屾病鏈夎幏鍙栫伯鎯呭弬鏁伴厤缃�");
+                    request.setReqData(reqData);
+                    request.setStatus(ReqStatus.SEND_ERROR.getCode());
+                    exeOrderService.addLogAndCache(request);
+                    continue;
+                }
+                request.setDepotName(depot.getName());
+
+                deviceSer = deviceSerService.getCacheSer(param.getCompanyId(), depotConf.getGrainSer());
+
+                if (null == deviceSer) {
+                    request.setErrorMsg("鎵ц澶辫触锛屾病鏈夎幏鍙栧埌鍒嗘満淇℃伅");
+                    request.setReqData(reqData);
+                    request.setStatus(ReqStatus.SEND_ERROR.getCode());
+                    exeOrderService.addLogAndCache(request);
+                    continue;
+                }
+
+                request.setProtocol(deviceSer.getProtocol());
+                request.setIp(deviceSer.getIp());
+                request.setPort(deviceSer.getPort());
+                request.setSerId(deviceSer.getId());
+                request.setSerName(deviceSer.getName());
+                request.setSn(deviceSer.getSn());
+
+                request.setExeMsg("绮儏閲囬泦锛屼粨搴�=" + request.getDepotName());
+
+                reqData.setCableStart(depotConf.getCableStart());
+                reqData.setCableEnd(depotConf.getCableEnd());
+                reqData.setCableRule(depotConf.getCableRule());
+
+                // 鏂板娓╂箍搴︿俊鎭�
+                reqData.setThSerId(depotConf.getThSer());
+                reqData.setThConf(depotConf.getThConf());
+                //澶氫粨骞跺彂
+                reqData.setIsMoreDepot(deviceSer.getIsMoreDepot());
+                request.setReqData(reqData);
+
+                //鎵ц鍛戒护
+                remoteGrainService = remoteManager.getRemoteGrainService(deviceSer.getProtocol());
+                if (null == remoteGrainService) {
+                    //鍙戦�佸紓甯�
+                    request.setErrorMsg("绯荤粺娌℃湁" + request.getProtocol() + "鐨勫崗璁疄鐜帮紝鎵ц琚嫆缁濓紒");
+                    request.setStatus(ReqStatus.SEND_ERROR.getCode());
+                    exeOrderService.addLogAndCache(request);
+                    continue;
+                }
+
+                result = remoteGrainService.checkGrain(request);
+                if (!OrderRespEnum.ORDER_SUCCESS.getCode().equals(result.getCode())) {
+                    request.setErrorMsg(request.getDepotName() + "璇锋眰澶辫触:" + result.getMsg());
+                    request.setStatus(ReqStatus.SEND_ERROR.getCode());
+                }
+
+                exeOrderService.addLogAndCache(request);
+
+                Thread.sleep(200);
+            }
+        } catch (Exception e) {
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "鍚庡彴鎵ц寮傚父锛�" + e.getMessage());
+        }
+        return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                "鎵归噺鎵ц绮儏妫�娴嬪懡浠ゅ彂閫佹垚鍔燂紝璇风瓑寰呯粓绔搷搴斺�︹��");
+    }
+
+    /**
+     *
+     * @param param
+     * @return
+     */
+    public PageResponse<List<GrainData>> pageListGrainData(GrainParam param) {
+        if (StringUtils.isEmpty(param.getCompanyId())) {
+            param.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(param.getDepotId())) {
+            return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(),
+                    "娌℃湁鑾峰彇鍒颁粨搴撳弬鏁帮紝鎵ц澶辫触锛�");
+        }
+
+        param.setTagUpdate(false);
+        List<Grain> list = grainService.listData(param);
+
+        DepotConf depotConf;
+        GrainData data;
+        Depot depotData;
+        List<GrainData> result = new ArrayList<>();
+        for (Grain grain : list) {
+            depotConf = depotConfService.getCacheDepotConfByDepotId(grain.getCompanyId(), grain.getDepotId());
+            data = new GrainData();
+            BeanUtils.copyProperties(grain, data);
+            // 娣诲姞浠撳簱淇℃伅
+            depotData = depotService.getCacheDepot(param.getCompanyId(), param.getDepotId());
+            GrainDataBuilder.updateGrainData(data, depotConf, depotData.getDepotType());
+            result.add(data);
+        }
+
+        if (null == result) {
+            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "褰撳墠鏉′欢涓嬫病鏈夎幏鍙栧埌绮儏淇℃伅锛侊紒");
+        }
+
+        return new PageResponse<List<GrainData>>(RespCodeEnum.CODE_0000, result);
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟鑾峰彇褰撳墠鎵撳嵃闇�瑕佺殑妯℃澘
+     *
+     * @param param
+     * @return
+     */
+    public PageResponse<PrintModeData> buildPrintModel(GrainParam param) {
+        if (null == param.getCompanyId()) {
+            param.setCompanyId(ContextUtil.getCompanyId());
+        }
+        if (StringUtils.isEmpty(param.getDepotType())) {
+            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+                    "娌℃湁鑾峰彇鍒板綋鍓嶄粨搴撶殑浠撳簱绫诲瀷");
+        }
+        if (StringUtils.isEmpty(param.getCableRule()) && StringUtils.isEmpty(param.getCableCir())) {
+            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+                    "娌℃湁鑾峰彇褰撳墠浠撳簱鐨勫竷绾胯鍒�");
+        }
+        PrintModeData result = GrainPrintBuilder.buildPrintModel(param);
+
+        if (null == result) {
+            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+                    "绯荤粺娌℃湁鑾峰彇褰撳墠浠撳簱鐨勮〃鍗曟ā鏉�");
+        }
+
+        if (StringUtils.isNotEmpty(result.getMsg())) {
+            return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(),
+                    result.getMsg());
+        }
+
+        return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+    }
+
+    /**
+     *
+     * @param param
+     * @return
+     */
+    public PageResponse<Map<String, PrintModeData>> buildPrintModelAll(GrainParam param) {
+
+        Map<String, PrintModeData> result = new HashMap<>();
+
+        List<DepotConf> depotConfList = depotConfService.getCacheDepotConfList(param.getCompanyId());
+        PrintModeData modeData;
+        String key;
+        Depot cacheDepot;
+        for (DepotConf conf : depotConfList) {
+            cacheDepot = depotService.getCacheDepot(param.getCompanyId(), conf.getDepotId());
+            param.setCableRule(conf.getCableRule());
+            param.setDepotId(conf.getDepotId());
+            param.setCableCir(conf.getCableCir());
+            param.setDepotType(cacheDepot.getDepotType());
+
+            if (StringUtils.isNotEmpty(param.getCableCir())) {
+                key = param.getDepotType() + "_" + param.getCableRule() + "_" + param.getCableCir();
+            } else {
+                key = param.getDepotType() + "_" + param.getCableRule();
+            }
+            if (null == result.get(key)) {
+                modeData = GrainPrintBuilder.buildPrintModel(param);
+                result.put(key, modeData);
+            }
+        }
+        return new PageResponse<>(RespCodeEnum.CODE_0000, result);
+    }
+
+    /**
+     *
+     * @param param
+     * @return
+     */
+    public GrainResponse exportBatch(GrainParam param) {
+
+        //鏍规嵁鏉′欢鑾峰彇闇�瑕佹墦鍗扮殑绮儏淇℃伅
+
+        if (null != param.getCheckDate()) {
+            param.setStart(DateUtil.getCurZero(param.getCheckDate()));
+            param.setEnd(DateUtil.getNextZero(param.getCheckDate()));
+            param.setCheckDate(null);
+        }
+
+        //鑾峰彇宸茬粡绮儏鏍煎紡鍖栧畬鎴愮殑绮儏鏁版嵁
+        param.setTagUpdate(true);
+        PageResponse<List<GrainData>> listPageResponse = this.pageListGrainData(param);
+        List<GrainData> list = listPageResponse.getData();
+
+        if (null == list || list.isEmpty()) {
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "褰撳墠鏉′欢涓嬫病鏈夋煡璇㈠埌绮儏妫�娴嬭褰曪紝鍙栨秷瀵煎嚭");
+        }
+
+        //鎸夌収浠撳簱缂栫爜浠庢柊鎺掑簭
+        Collator sortChina = Collator.getInstance(Locale.CHINA);
+        Collections.sort(list, (a, b) -> sortChina.compare(a.getDepotId(), b.getDepotId()));
+
+        //鑾峰彇缂撳瓨鐨勪粨搴撳垪琛紝鐢ㄤ簬鑾峰彇浠撳簱鍚嶇О
+        List<Depot> listDepot = depotService.getCacheDepotList(param.getCompanyId(), param.getDeptId());
+
+        //鍘婚櫎閲嶅鐨勭伯鎯呮暟鎹�
+        LinkedHashMap<String, GrainData> dataMap = new LinkedHashMap<>();
+        for (GrainData data : list) {
+            if (null != dataMap.get(data.getDepotId())) continue;
+
+            dataMap.put(data.getDepotId(), data);
+        }
+
+
+        String fileName = grainExportBuilder.exportByMapData(dataMap, listDepot);
+
+        if (fileName.startsWith("ERROR")) {
+            return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+                    "鎵ц瀵煎嚭鍑虹幇閿欒锛�" + fileName);
+        }
+
+        return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+                fileName);
+    }
+
+    /**
+     *
+     * @param deptId
+     * @return
+     */
+    public List<ExeBaseRequest> orderList(String deptId) {
+        return exeOrderService.getAllOrderByDeptId("grain","BIZ", deptId, 2 * 60 * 8);
+    }
+
+    /**
+     *
+     * @param param
+     * @return
+     */
+    public PageResponse<String> cleanOrderList(IgdsBaseParam param) {
+        exeOrderService.clean(param.getCompanyId(), "grain", param.getDeptId());
+
+        return new PageResponse<>(RespCodeEnum.CODE_0000, "鎵ц鎴愬姛");
+    }
+}

--
Gitblit v1.9.3