From 6e781bc28dd55c4bb5c5652ead746d947b7aeafa Mon Sep 17 00:00:00 2001 From: 王佳豪 <g675230687@126.com> Date: 星期六, 19 六月 2021 11:29:34 +0800 Subject: [PATCH] 1.原单入库生成单号传入erp --- src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 294 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java index cfdbba9..b4ca5b9 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocNormalServiceImpl.java @@ -1,19 +1,46 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.core.common.Cools; +import com.core.exception.CoolException; import com.zy.asrs.entity.LocNormal; +import com.zy.asrs.entity.WaitPakin; +import com.zy.asrs.entity.WaitPakinLog; +import com.zy.asrs.entity.param.ERPselectParam; import com.zy.asrs.mapper.LocNormalMapper; +import com.zy.asrs.mapper.OutStockMapper; import com.zy.asrs.service.LocNormalService; +import com.zy.asrs.service.WaitPakinLogService; +import com.zy.asrs.service.WaitPakinService; +import com.zy.common.service.erp.ErpSqlServer; +import com.zy.common.service.erp.entity.CPICMO; +import com.zy.common.service.erp.entity.OutStockBillEntry; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; +@Slf4j @Service("locNormalService") public class LocNormalServiceImpl extends ServiceImpl<LocNormalMapper, LocNormal> implements LocNormalService { + @Autowired + ErpSqlServer erpSqlServer; + @Autowired + OutStockMapper outStockMapper; + @Autowired + LocNormalService locNormalService; + @Autowired + WaitPakinService waitPakinService; + @Autowired + WaitPakinLogService waitPakinLogService; @Override public List<LocNormal> getLocNormalData() { @@ -21,17 +48,278 @@ } @Override - public void updateLocNormal(String matnr, Double anfme, Long modiUser, Date modiTime) { - baseMapper.updateLocNormal(matnr, anfme, modiUser, modiTime); + public void updateLocNormal(String matnr, BigDecimal anfme, Long modiUser, Date modiTime, Integer id) { + baseMapper.updateLocNormal(matnr, anfme, modiUser, modiTime, id); } @Override - public void outLocNormal(String matnr, Long modiUser, Date modiTime) { - baseMapper.outLocNormal(matnr, modiUser, modiTime); + public void outLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) { + baseMapper.outLocNormal(matnr, modiUser, modiTime, id); } @Override - public void removeLocNormal(String matnr, Long modiUser, Date modiTime) { - baseMapper.removeLocNormal(matnr, modiUser, modiTime); + public void removeLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) { + baseMapper.removeLocNormal(matnr, modiUser, modiTime, id); + } + + @Override + public void locNormalIn(List<LocNormal> list) { + // 骞充粨鍏ュ簱鍚庢洿鏂颁腑闂磋〃鏁版嵁锛孎flag_finish鏀逛负1锛岃〃绀哄钩浠撳叆搴撴垚鍔� + if (list.size() > 0) { + for (Integer i = 0; i < list.size(); i++) { + List<LocNormal> addList = new ArrayList<>(); + List<LocNormal> updateList = new ArrayList<>(); + if (!Cools.isEmpty(list.get(i).getSupplier())) { // 瀛樺湪鍏ュ簱鍗曞彿鐨勬墠杩涜erp鏇存柊 + // 鍒ゆ柇鍘熷厛骞充粨鏄惁瀛樺湪鏈夎揣,濡傛灉鏈夎揣鏁伴噺杩涜绱姞 + LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper<LocNormal>().eq("supplier", list.get(i).getSupplier()).and().eq("state", "1").eq("warehouse", list.get(i).getWarehouse())); + if (!Cools.isEmpty(oldLocList)) { + // erp鏇存柊 + updateCPICMO(list.get(i)); + Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); + // 骞充粨鍏ュ簱锛堟洿鏂帮級閫昏緫 + list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); + updateList.add(list.get(i)); + if (baseMapper.pdaLocNormalUpdate(updateList) > 0) { + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 + custWaitPakinToLog(list.get(i), updateAnfme); + } + } else { + // erp鏇存柊 + updateCPICMO(list.get(i)); + // 骞充粨鍏ュ簱閫昏緫 + addList.add(list.get(i)); + if (baseMapper.pdaLocNormalIn(addList) > 0) { + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 + custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); + } + } + } else { + // throw new CoolException("閫氱煡鍗曞彿涓嶅彲涓虹┖"); 閫氱煡鍗曞彿绌虹殑鎯呭喌涓嬶紝寰�CPICMO琛ㄦ彃鍏ユ墜鍔ㄥ叆搴撴暟鎹� + // 鍒ゆ柇鍘熷厛骞充粨鏄惁瀛樺湪鏈夎揣,濡傛灉鏈夎揣鏁伴噺杩涜绱姞 + LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper<LocNormal>().eq("matnr", list.get(i).getMatnr()).and().eq("warehouse", list.get(i).getWarehouse()).and().eq("mnemonic", list.get(i).getMnemonic()).and().eq("state", "1")); + if (!Cools.isEmpty(oldLocList)) { + // erp鏇存柊 + if (Cools.isEmpty(list.get(i).getSupplier())) { + String maxKeySql = "select max(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, list.get(i).getAnfme(), list.get(i).getAnfme(), list.get(i).getAnfme(), list.get(i).getMatnr(), list.get(i).getAnfme(), list.get(i).getMnemonic()); + erpSqlServer.update(ErpSql); + } +// Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); + // 骞充粨鍏ュ簱锛堟洿鏂帮級閫昏緫 + list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); + updateList.add(list.get(i)); + if (baseMapper.withoutSupplierLocNormalUpdate(updateList) > 0) { + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 +// custWaitPakinToLog(list.get(i), updateAnfme); + } + } else { + // erp鏇存柊 + if (Cools.isEmpty(list.get(i).getSupplier())) { + String maxKeySql = "select max(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, list.get(i).getAnfme(), list.get(i).getAnfme(), list.get(i).getAnfme(), list.get(i).getMatnr(), list.get(i).getAnfme(), list.get(i).getMnemonic()); + erpSqlServer.update(ErpSql); + } + // 骞充粨鍏ュ簱閫昏緫 + addList.add(list.get(i)); + if (baseMapper.pdaLocNormalIn(addList) > 0) { + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 +// custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); + } + } + } + } + } + } + + /** + * 鎴愬搧鍏ュ簱鍗曟爣璁板畬鎴� + */ + private boolean completeCPakIn(String FBillNo, String Fnumber){ + String sql = "update CPICMO set Fflag_finish = 1 where FBillNo = ''{0}'' and Fnumber = ''{1}''"; + sql = MessageFormat.format(sql, FBillNo, Fnumber); + return erpSqlServer.update(sql) > 0; + } + + @Override + public void pdaLocNormalIn(List<LocNormal> list) { + // 骞充粨鍏ュ簱鍚庢洿鏂颁腑闂磋〃鏁版嵁锛孎flag_finish鏀逛负1锛岃〃绀哄钩浠撳叆搴撴垚鍔� + if (list.size() > 0) { + for (Integer i = 0; i < list.size(); i++) { + List<LocNormal> addList = new ArrayList<>(); + List<LocNormal> updateList = new ArrayList<>(); + if (!Cools.isEmpty(list.get(i).getSupplier())) { // 瀛樺湪鍏ュ簱鍗曞彿鐨勬墠杩涜erp鏇存柊 + // 鍒ゆ柇鍘熷厛骞充粨鏄惁瀛樺湪鏈夎揣,濡傛灉鏈夎揣鏁伴噺杩涜绱姞 + LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper<LocNormal>().eq("supplier", list.get(i).getSupplier()).and().eq("state", "1").and().eq("warehouse", list.get(i).getWarehouse())); + if (!Cools.isEmpty(oldLocList)) { + // erp鏇存柊 + updateCPICMO(list.get(i)); + Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); + // 骞充粨鍏ュ簱锛堟洿鏂伴�昏緫) + list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); + updateList.add(list.get(i)); + if (baseMapper.pdaLocNormalUpdate(updateList) > 0) { + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 + custWaitPakinToLog(list.get(i), updateAnfme); + } + } else { + // erp鏇存柊 + updateCPICMO(list.get(i)); + // 骞充粨鍏ュ簱閫昏緫 + addList.add(list.get(i)); + if (baseMapper.pdaLocNormalIn(addList) > 0){ + // cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 + custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); + } + } + } else { + throw new CoolException("閫氱煡鍗曞彿涓嶅彲涓虹┖"); + } + } + + } + } + + /* cust_wait_pakin杞琧ust_wait_pakin_log锛屽苟鏇存柊鏁伴噺 */ + private boolean custWaitPakinToLog(LocNormal list, Double updateAnfme) { + WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("supplier", list.getSupplier()).and().eq("matnr", list.getMatnr())); + if(!Cools.isEmpty(waitPakin)){ + WaitPakinLog waitPakinLog = new WaitPakinLog(); + waitPakinLog.setAnfme(updateAnfme); + waitPakinLog.setMatnr(waitPakin.getMatnr()); + waitPakinLog.setMaktx(waitPakin.getMaktx()); + waitPakinLog.setLgnum(waitPakin.getLgnum()); + waitPakinLog.setType(waitPakin.getType()); + waitPakinLog.setMnemonic(waitPakin.getMnemonic()); + waitPakinLog.setSupplier(waitPakin.getSupplier()); + waitPakinLog.setWarehouse(waitPakin.getWarehouse()); + waitPakinLog.setBrand(waitPakin.getBrand()); + waitPakinLog.setAltme(waitPakin.getAltme()); + waitPakinLog.setZpallet(waitPakin.getZpallet()); + waitPakinLog.setBname(waitPakin.getBname()); + waitPakinLog.setLocNo(waitPakin.getLocNo()); + waitPakinLog.setStatus(waitPakin.getStatus()); + waitPakinLog.setIoStatus(waitPakin.getIoStatus()); + waitPakinLog.setMemo(waitPakin.getMemo()); + waitPakinLog.setModiTime(waitPakin.getModiTime()); + waitPakinLog.setModiUser(waitPakin.getModiUser()); + waitPakinLog.setAppeTime(waitPakin.getAppeTime()); + waitPakinLog.setAppeUser(waitPakin.getAppeUser()); + // 杞叆搴撻�氱煡鍘嗗彶妗� + waitPakinLogService.insert(waitPakinLog); + // 淇敼鍏ュ簱鍚屽織妗g墿鏂欐暟閲� + Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>(); + wrapper.eq("supplier", list.getSupplier()) + .eq("matnr", list.getMatnr()) + .isNull("zpallet"); + WaitPakin pakin = new WaitPakin(); + pakin.setAnfme(waitPakin.getAnfme() - updateAnfme); + waitPakinService.update(pakin, wrapper); + } + return true; + } + + /* 鏇存柊erp鍏ュ簱琛� */ + private boolean updateCPICMO(LocNormal list) { + String sqlSelect = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''"; + sqlSelect = MessageFormat.format(sqlSelect, list.getMatnr(), list.getSupplier()); + List<CPICMO> CPICMOList = erpSqlServer.select(sqlSelect,CPICMO.class); + if (CPICMOList.size() > 0) { // 璇存槑erp鏈夊搴旂殑鍏ュ簱鍗� + String sql = "update CPICMO set FAuxCommitQty = (FAuxCommitQty + {0,number,#}) where 1=1 and Fnumber = ''{1}'' and FBillNo = ''{2}''"; + sql = MessageFormat.format(sql, list.getAnfme(), list.getMatnr(), list.getSupplier()); + if (erpSqlServer.update(sql) > 0) { + sql = "select * from CPICMO where 1=1 and Fnumber = ''{0}'' and FBillNo = ''{1}''"; + sql = MessageFormat.format(sql, list.getMatnr(), list.getSupplier()); + List<CPICMO> select = erpSqlServer.select(sql, CPICMO.class); + CPICMO cpicmo = select.get(0); + boolean complete = false; + if (cpicmo.getFQty() > 0) { + if (Double.doubleToLongBits(cpicmo.getFAuxCommitQty()) == Double.doubleToLongBits(cpicmo.getFQty())) { + complete = true; + } + } else { + if (Double.doubleToLongBits(cpicmo.getFAuxCommitQty()) == Double.doubleToLongBits(cpicmo.getFAuxQty())) { + complete = true; + } + } + if (complete) { + if (!completeCPakIn(list.getSupplier(), list.getMatnr())) { + log.error("{}骞充粨鍏ュ簱鍗曟爣璁板畬鎴愬け璐�", list.getSupplier()); + } + } + } + } else { + throw new CoolException("ERP鏌ヨ涓嶅埌瀵瑰簲閫氱煡鍗�"); + } + + return true; + } + + @Override + public List<LocNormal> pdaLocNormalQuery(String matnr, String warehouse, String billNo) { + return baseMapper.pdaLocNormalQuery(matnr, warehouse, billNo); + } + + @Override + public void pdaLocNormalOut(List<LocNormal> list) { + for (Integer i = 0; i < list.size(); i++) { + if (list.get(i).getAnfme().equals(list.get(i).getAnfmeOut())) { + baseMapper.pdaLocNormalOut1(list.get(i).getId(), list.get(i).getMatnr(), list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse()); + } + if (list.get(i).getAnfmeOut().compareTo(list.get(i).getAnfme()) == -1) { + BigDecimal diff = (list.get(i).getAnfme()).subtract(list.get(i).getAnfmeOut()); + baseMapper.pdaLocNormalOut2(list.get(i).getId(), list.get(i).getMatnr(), diff, list.get(i).getModiUser(), list.get(i).getModiTime(), list.get(i).getWarehouse()); + } + } + } + + @Override + public List<LocNormal> pdaLocNormalWarehouseQuery(String warehouse, String matnr) { + return baseMapper.pdaLocNormalWarehouseQuery(warehouse, matnr); + } + + @Override + public void pdaLocNormalMove(List<LocNormal> list) { + baseMapper.pdaLocNormalMove(list); + } + + @Override + public List<LocNormal> queryLocNorlMatnr(String fbillNo) { + List<OutStockBillEntry> matList = outStockMapper.queryMatnrWithBillNo(fbillNo); + List<LocNormal> locNormal = new ArrayList<>(); + List<LocNormal> locNormalResult = new ArrayList<>(); + for (Integer i = 0; i < matList.size(); i++) { + locNormal = baseMapper.queryLocNorlMatnr(matList.get(i).getFnumber()) ; + if (locNormal.size() > 0) { + for (LocNormal e:locNormal) { + LocNormal obj = new LocNormal(); + obj.setMatnr(e.getMatnr()); + obj.setMaktx(e.getMaktx()); + obj.setLgnum(e.getLgnum()); + obj.setType(e.getType()); + obj.setMnemonic(e.getMnemonic()); + obj.setSupplier(e.getSupplier()); + obj.setWarehouse(e.getWarehouse()); + obj.setBrand(e.getBrand()); + obj.setAnfme(e.getAnfme()); + obj.setBname(e.getBname()); + obj.setMemo(e.getMemo()); + obj.setModiUser(e.getModiUser()); + obj.setModiTime(e.getModiTime()); + obj.setAppeUser(e.getAppeUser()); + obj.setAppeTime(e.getAppeTime()); + obj.setState(e.getState()); + obj.setWarehouseName(e.getWarehouseName()); + obj.setId(e.getId()); + locNormalResult.add(obj); + } + } + } + return locNormalResult; } } -- Gitblit v1.9.1