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