From 67da83c698e77ccf178669a31e4bd3a4e8fc1ca7 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期二, 03 八月 2021 16:10:05 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java |  241 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 230 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 829b519..d382ec9 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1,34 +1,55 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.BasAgv;
 import com.zy.asrs.entity.MatCode;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.entity.param.ERPselectParam;
+import com.zy.asrs.entity.param.FullStoreParam;
+import com.zy.asrs.service.BasAgvService;
 import com.zy.asrs.service.MatCodeService;
 import com.zy.asrs.service.MobileService;
 import com.zy.asrs.service.WaitPakinService;
 import com.zy.asrs.utils.VersionUtils;
+import com.zy.common.model.agv.AgvCommand;
+import com.zy.common.model.agv.AgvResult;
+import com.zy.common.service.erp.ErpSqlServer;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
+import java.text.MessageFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 绉诲姩绔湇鍔℃牳蹇冪被
  * Created by vincent on 2020/6/28
  */
+@Slf4j
 @Service
 public class MobileServiceImpl implements MobileService {
 
+    @Value("${agv.url}")
+    private String agvUrl;
     @Autowired
     private MatCodeService matCodeService;
     @Autowired
     private WaitPakinService waitPakinService;
+    @Autowired
+    private BasAgvService basAgvService;
+    @Autowired
+    private ErpSqlServer erpSqlServer;
 
     @Override
     @Transactional
@@ -61,11 +82,60 @@
                     waitPakin.setModiUser(userId);
                     waitPakin.setModiTime(new Date());
                     VersionUtils.setWaitPakIn(waitPakin, matCode);
+                    // 濡傛灉鐢熸垚鍗曞彿涓嶄负绌烘彃鍏ョ敓浜у崟鍙�
+                    if (!Cools.isEmpty(combMat.getMnemonic())) {
+                        waitPakin.setMnemonic(combMat.getMnemonic());
+                    }
 
                     if (!waitPakinService.insert(waitPakin)) {
                         throw new CoolException("淇濆瓨鏁版嵁澶辫触");
                     }
                 }
+                // 灏忚溅鍏ュ簱鎼繍鍛戒护 ----------------------------------------------------
+                if (!Cools.isEmpty(param.getAgvSite())) {
+                    // 鍒ゆ柇鏄惁鏈夌┖闂插皬杞�
+                    if (basAgvService.haveIdleAgv()) {
+                        AgvCommand command = new AgvCommand();
+                        command.setAgvId(0);
+                        command.setInterCode(basAgvService.getAgvWorkNo());
+                        command.setBeginLoc(String.valueOf(param.getAgvSite()));
+                        command.setEndLoc("1088");
+                        log.info(JSON.toJSONString(command));
+                        String result;
+                        try {
+                            result = new HttpHandler.Builder()
+                                    .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty")
+                                    .setJson(JSON.toJSONString(command))
+                                    .build()
+                                    .doPost();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                            throw new CoolException("璁块棶AGV鎺ュ彛澶辫触");
+                        }
+                        AgvResult agvResult = JSON.parseObject(result, AgvResult.class);
+                        log.info(JSON.toJSONString(agvResult));
+                        if (!agvResult.getResult()) {
+                            log.error("agv鍛戒护鍙戦�佸け璐agvId={}]锛岄敊璇俊鎭�={}", command.getAgvId(), agvResult.getExplain());
+                            throw new CoolException("agv鍛戒护鍙戦�佸け璐agvId=" + command.getAgvId() + "]锛岄敊璇俊鎭�=" + agvResult.getExplain());
+                        }
+                    } else {
+                        throw new CoolException("娌℃湁绌洪棽灏忚溅");
+                    }
+
+                }
+                // 鍒ゆ柇鏃犻�氱煡鍗曞彿supplier鐨勫叆搴撴暟鎹紝CPICMO鎻掑叆鏁版嵁
+                List<CombParam.CombMat> erpMatList = param.getCombMats();
+                for (CombParam.CombMat es : erpMatList) {
+                    if (Cools.isEmpty(es.getSupplier())) {
+                        String maxKeySql = "select min(FInterID) as num from CPICMO";
+                        List<ERPselectParam> maxKeyList = erpSqlServer.select(maxKeySql, ERPselectParam.class);
+                        Integer maxKey = maxKeyList.get(0).getNum();
+                        String ErpSql = "insert into CPICMO(FBrNo, FSourceBillNo, FBillNo, FTranType, FStatus, FMRP, FItemID, FQty, FCommitQty, FSourceEntryID, FClosed, FUnitID, FAuxCommitQty, FCancellation, FQtyFinish, FQtyScrap, FQtyLost, FAuxQtyFinish, FAuxQtyScrap, FAuxQtyLost, FMrpClosed, FBomInterID, FQtyPass, FAuxQtyPass, FQtyBack, FAuxQtyBack, FFinishTime, FReadyTIme, FPowerCutTime, FFixTime, FWaitItemTime, FWaitToolTime, FTaskID, FWorkTypeID, FCostObjID, FStockQty, FAuxStockQty, FSuspend, FReleasedQty, FReleasedAuxQty, FUnScheduledQty, FUnScheduledAuxQty, FSubEntryID, FScheduleID, FPlanOrderInterID, FProcessPrice, FProcessFee, FGMPBatchNo, FGMPCollectRate, FGMPItemBalance, FGMPBulkQty, FCustID, FMRPLockFlag, FHandworkClose, FInHighLimit, FInHighLimitQty, FInLowLimit, FInLowLimitQty, FChangeTimes, FCheckCommitQty, FAuxCheckCommitQty, FPlanConfirmed, FPlanMode, FMTONo, FPrintCount, FFinClosed, FStockFlag, FStartFlag, FVchBillNo, FVchInterID, FCardClosed, FHRReadyTime, FSourceTranType, FSourceInterId, FInterID, FAuxQty, FAuxInHighLimitQty, FAuxInLowLimitQty, Fnumber, FWorkShop) values (0, ''{6}'', '0', 85, 0, 1052, 0, 0, 0, 0, 0, 250, {5,number,#}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14036, '0', 0, 0, 14215, 0, '0', 0, 1059, 0, 0, 0, 0, {0,number,#}, {1,number,#}, {2,number,#}, {3,number,#}, ''{4}'', 11378)";
+                        ErpSql = MessageFormat.format(ErpSql, maxKey - 1, es.getCount(), es.getCount(), es.getCount(), es.getMatNo(), es.getCount(), es.getMnemonic());
+                        erpSqlServer.update(ErpSql);
+                    }
+                }
+
             } else {
                 WaitPakin waitPakin = new WaitPakin();
                 waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
@@ -90,12 +160,24 @@
                 if (!waitPakinService.insert(waitPakin)) {
                     throw new CoolException("淇濆瓨鏁版嵁澶辫触");
                 }
+                // 鍒ゆ柇鏃犻�氱煡鍗曞彿supplier鐨勫叆搴撴暟鎹紝CPICMO鎻掑叆鏁版嵁
+                List<CombParam.CombMat> erpMatList = param.getCombMats();
+                for (CombParam.CombMat es : erpMatList) {
+                    if (Cools.isEmpty(es.getSupplier())) {
+                        String maxKeySql = "select min(FInterID) as num from CPICMO";
+                        List<ERPselectParam> maxKeyList = erpSqlServer.select(maxKeySql, ERPselectParam.class);
+                        Integer maxKey = maxKeyList.get(0).getNum();
+                        String ErpSql = "insert into CPICMO(FBrNo, FSourceBillNo, FBillNo, FTranType, FStatus, FMRP, FItemID, FQty, FCommitQty, FSourceEntryID, FClosed, FUnitID, FAuxCommitQty, FCancellation, FQtyFinish, FQtyScrap, FQtyLost, FAuxQtyFinish, FAuxQtyScrap, FAuxQtyLost, FMrpClosed, FBomInterID, FQtyPass, FAuxQtyPass, FQtyBack, FAuxQtyBack, FFinishTime, FReadyTIme, FPowerCutTime, FFixTime, FWaitItemTime, FWaitToolTime, FTaskID, FWorkTypeID, FCostObjID, FStockQty, FAuxStockQty, FSuspend, FReleasedQty, FReleasedAuxQty, FUnScheduledQty, FUnScheduledAuxQty, FSubEntryID, FScheduleID, FPlanOrderInterID, FProcessPrice, FProcessFee, FGMPBatchNo, FGMPCollectRate, FGMPItemBalance, FGMPBulkQty, FCustID, FMRPLockFlag, FHandworkClose, FInHighLimit, FInHighLimitQty, FInLowLimit, FInLowLimitQty, FChangeTimes, FCheckCommitQty, FAuxCheckCommitQty, FPlanConfirmed, FPlanMode, FMTONo, FPrintCount, FFinClosed, FStockFlag, FStartFlag, FVchBillNo, FVchInterID, FCardClosed, FHRReadyTime, FSourceTranType, FSourceInterId, FInterID, FAuxQty, FAuxInHighLimitQty, FAuxInLowLimitQty, Fnumber, FWorkShop) values (0, ''{6}'', '0', 85, 0, 1052, 0, 0, 0, 0, 0, 250, {5,number,#}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14036, '0', 0, 0, 14215, 0, '0', 0, 1059, 0, 0, 0, 0, {0,number,#}, {1,number,#}, {2,number,#}, {3,number,#}, ''{4}'', 11378)";
+                        ErpSql = MessageFormat.format(ErpSql, maxKey - 1, es.getCount(), es.getCount(), es.getCount(), es.getMatNo(), es.getCount(), es.getMnemonic());
+                        erpSqlServer.update(ErpSql);
+                    }
+                }
             }
         } else {
             // 鍏宠仈閫氱煡鍗曠粍鎵�
             for (CombParam.CombMat combMat : param.getCombMats()) {
                 WaitPakin one = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
-                        .eq("supplier", param.getBillNo())
+                        .eq("supplier", combMat.getSupplier())
                         .eq("matnr", combMat.getMatNo())
                         .isNull("zpallet"));
                 if (one == null) {
@@ -115,34 +197,32 @@
                 waitPakin.setAppeTime(new Date());
                 waitPakin.setModiUser(userId);
                 waitPakin.setModiTime(new Date());
+                waitPakin.setSupplier(combMat.getSupplier());
                 if (!waitPakinService.insert(waitPakin)) {
                     throw new CoolException("淇濆瓨鏁版嵁澶辫触");
                 }
                 // 鍑忓皯閫氱煡鍗曚笂璇ョ墿鏂欑粍鎵樻暟閲�
                 if (waitPakin.getAnfme() >= one.getAnfme()) {
                     waitPakinService.delete(new EntityWrapper<WaitPakin>()
-                            .eq("supplier", param.getBillNo())
+                            .eq("supplier", combMat.getSupplier())
                             .eq("matnr", combMat.getMatNo())
-                            .eq("warehouse", param.getWarehouse())
+                            .eq("mnemonic", param.getMnemonic())
                             .isNull("zpallet"));
                 } else {
                     Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
-                    if ("".equals(param.getWarehouse())) {
-                        wrapper.eq("supplier", param.getBillNo())
+                    if ("".equals(param.getMnemonic())) {
+                        wrapper.eq("supplier", combMat.getSupplier())
                                 .eq("matnr", combMat.getMatNo())
                                 .isNull("zpallet");
                     } else {
-                        wrapper.eq("supplier", param.getBillNo())
+                        wrapper.eq("supplier", combMat.getSupplier())
                                 .eq("matnr", combMat.getMatNo())
-                                .eq("warehouse", param.getWarehouse())
+                                .eq("mnemonic", param.getMnemonic())
                                 .isNull("zpallet");
                     }
                     WaitPakin pakin = new WaitPakin();
                     pakin.setAnfme(one.getAnfme() - waitPakin.getAnfme());
-                    if (!waitPakinService.update(pakin, wrapper.eq("supplier", param.getBillNo())
-                            .eq("matnr", combMat.getMatNo())
-                            .eq("warehouse", param.getWarehouse())
-                            .isNull("zpallet"))) {
+                    if (!waitPakinService.update(pakin, wrapper)) {
                         throw new CoolException("鏇存柊鏁版嵁澶辫触");
                     }
 
@@ -150,10 +230,149 @@
 
             }
 
+            // 灏忚溅鍏ュ簱鎼繍鍛戒护 ----------------------------------------------------
+            if (!Cools.isEmpty(param.getCombMats()) && !Cools.isEmpty(param.getAgvSite())) {
+                // 鍒ゆ柇鏄惁鏈夌┖闂插皬杞�
+                if (basAgvService.haveIdleAgv()) {
+                    AgvCommand command = new AgvCommand();
+                    command.setAgvId(0);
+                    command.setInterCode(basAgvService.getAgvWorkNo());
+                    command.setBeginLoc(String.valueOf(param.getAgvSite()));
+                    command.setEndLoc("1088");
+                    log.info(JSON.toJSONString(command));
+                    String result;
+                    try {
+                        result = new HttpHandler.Builder()
+                                .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty")
+                                .setJson(JSON.toJSONString(command))
+                                .build()
+                                .doPost();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        throw new CoolException("璁块棶AGV鎺ュ彛澶辫触");
+                    }
+                    AgvResult agvResult = JSON.parseObject(result, AgvResult.class);
+                    log.info(JSON.toJSONString(agvResult));
+                    if (!agvResult.getResult()) {
+                        log.error("agv鍛戒护鍙戦�佸け璐agvId={}]锛岄敊璇俊鎭�={}", command.getAgvId(), agvResult.getExplain());
+                        throw new CoolException("agv鍛戒护鍙戦�佸け璐agvId=" + command.getAgvId() + "]锛岄敊璇俊鎭�=" + agvResult.getExplain());
+                    }
+                } else {
+                    throw new CoolException("娌℃湁绌洪棽灏忚溅");
+                }
+
+            }
 
         }
 
 
     }
 
+    @Override
+    @Transactional
+    public void combBatch(CombParam param, Long userId) {
+        if (Cools.isEmpty(param.getBarcode())) {
+            throw new CoolException(BaseRes.PARAM);
+        }
+        if (Cools.isEmpty(param.getCombMats()) && Cools.isEmpty(param.getProductCode())) {
+            throw new CoolException(BaseRes.PARAM);
+        }
+        int count = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
+                eq("zpallet", param.getBarcode()).eq("io_status", "N"));
+        if (count > 0) {
+            throw new CoolException("鏉$爜鏁版嵁宸插瓨鍦�");
+        }
+        // 鍏宠仈閫氱煡鍗曠粍鎵�
+        for (CombParam.CombMat combMat : param.getCombMats()) {
+            WaitPakin one = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
+                    .eq("supplier", combMat.getSupplier())
+                    .eq("matnr", combMat.getMatNo())
+                    .isNull("zpallet"));
+            if (one == null) {
+                throw new CoolException("閫氱煡鍗曚笉瀛樺湪" + combMat.getMatNo() + "鏁版嵁锛�");
+            }
+            if (combMat.getCount() > one.getAnfme()) {
+                throw new CoolException(combMat.getMatNo() + "鐗╂枡鏁伴噺涓嶈冻锛�");
+            }
+            MatCode matCode = matCodeService.selectById(combMat.getMatNo());
+            if (Cools.isEmpty(matCode)) {
+                throw new CoolException("鐗╂枡鏁版嵁閿欒");
+            }
+            WaitPakin waitPakin = one.clone();
+            waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
+            waitPakin.setAnfme(combMat.getCount());  // 鏁伴噺
+            waitPakin.setAppeUser(userId);
+            waitPakin.setAppeTime(new Date());
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(new Date());
+            waitPakin.setSupplier(combMat.getSupplier());
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+            }
+            // 鍑忓皯閫氱煡鍗曚笂璇ョ墿鏂欑粍鎵樻暟閲�
+            if (waitPakin.getAnfme() >= one.getAnfme()) {
+                waitPakinService.delete(new EntityWrapper<WaitPakin>()
+                        .eq("supplier", combMat.getSupplier())
+                        .eq("matnr", combMat.getMatNo())
+                        .eq("mnemonic", combMat.getMnemonic())
+                        .isNull("zpallet"));
+            } else {
+                Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>();
+                if ("".equals(param.getMnemonic())) {
+                    wrapper.eq("supplier", combMat.getSupplier())
+                            .eq("matnr", combMat.getMatNo())
+                            .isNull("zpallet");
+                } else {
+                    wrapper.eq("supplier", combMat.getSupplier())
+                            .eq("matnr", combMat.getMatNo())
+                            .eq("mnemonic", combMat.getMnemonic())
+                            .isNull("zpallet");
+                }
+                WaitPakin pakin = new WaitPakin();
+                pakin.setAnfme(one.getAnfme() - waitPakin.getAnfme());
+                pakin.setSupplier(combMat.getSupplier());
+                pakin.setMatnr(combMat.getMatNo());
+                pakin.setMnemonic(combMat.getMnemonic());
+                if (!waitPakinService.update(pakin, wrapper)) {
+                    throw new CoolException("鏇存柊鏁版嵁澶辫触");
+                }
+
+            }
+
+        }
+        // 灏忚溅鍏ュ簱鎼繍鍛戒护 ----------------------------------------------------
+        if (!Cools.isEmpty(param.getCombMats()) && !Cools.isEmpty(param.getAgvSite())) {
+            // 鍒ゆ柇鏄惁鏈夌┖闂插皬杞�
+            if (basAgvService.haveIdleAgv()) {
+                AgvCommand command = new AgvCommand();
+                command.setAgvId(0);
+                command.setInterCode(basAgvService.getAgvWorkNo());
+                command.setBeginLoc(String.valueOf(param.getAgvSite()));
+                command.setEndLoc("1088");
+                log.info(JSON.toJSONString(command));
+                String result;
+                try {
+                    result = new HttpHandler.Builder()
+                            .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty")
+                            .setJson(JSON.toJSONString(command))
+                            .build()
+                            .doPost();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    throw new CoolException("璁块棶AGV鎺ュ彛澶辫触");
+                }
+                AgvResult agvResult = JSON.parseObject(result, AgvResult.class);
+                log.info(JSON.toJSONString(agvResult));
+                if (!agvResult.getResult()) {
+                    log.error("agv鍛戒护鍙戦�佸け璐agvId={}]锛岄敊璇俊鎭�={}", command.getAgvId(), agvResult.getExplain());
+                    throw new CoolException("agv鍛戒护鍙戦�佸け璐agvId=" + command.getAgvId() + "]锛岄敊璇俊鎭�=" + agvResult.getExplain());
+                }
+            } else {
+                throw new CoolException("娌℃湁绌洪棽灏忚溅");
+            }
+
+        }
+
+
+    }
 }

--
Gitblit v1.9.1