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.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.LocNormalLog; 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.LocNormalLogService; import com.zy.asrs.service.LocNormalService; import com.zy.asrs.service.WaitPakinLogService; import com.zy.asrs.service.WaitPakinService; import com.zy.asrs.utils.VersionUtils; import com.zy.common.service.erp.ErpService; 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 implements LocNormalService { @Autowired ErpSqlServer erpSqlServer; @Autowired OutStockMapper outStockMapper; @Autowired LocNormalService locNormalService; @Autowired WaitPakinService waitPakinService; @Autowired WaitPakinLogService waitPakinLogService; @Autowired ErpService erpService; @Autowired LocNormalLogService locNormalLogService; @Override public List getLocNormalData() { return baseMapper.getLocNormalData(); } @Override 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, Integer id) { baseMapper.outLocNormal(matnr, modiUser, modiTime, id); LocNormal data = locNormalService.selectOne(new EntityWrapper().eq("id", id)); // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, data); locLog.setAnfme(data.getAnfme().doubleValue()); locLog.setIoType(2); locLog.setCreateTime(new Date()); locLog.setCreateUser(modiUser); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓出库记录插入失败,数据:" + logStr); } } @Override public void removeLocNormal(String matnr, Long modiUser, Date modiTime, Integer id) { baseMapper.removeLocNormal(matnr, modiUser, modiTime, id); LocNormal data = locNormalService.selectOne(new EntityWrapper().eq("id", id)); // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, data); locLog.setAnfme(data.getAnfme().doubleValue()); locLog.setIoType(4); // 删除 locLog.setCreateTime(new Date()); locLog.setCreateUser(modiUser); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓库存删除记录插入失败,数据:" + logStr); } } @Override public void locNormalIn(List list) { // 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功 if (list.size() > 0) { for (Integer i = 0; i < list.size(); i++) { List addList = new ArrayList<>(); List updateList = new ArrayList<>(); if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新 // 判断原先平仓是否存在有货,如果有货数量进行累加 LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper().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转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), updateAnfme); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(updateAnfme); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } else { // erp更新 updateCPICMO(list.get(i)); // 平仓入库逻辑 addList.add(list.get(i)); if (baseMapper.pdaLocNormalIn(addList) > 0) { // cust_wait_pakin转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(list.get(i).getAnfme().doubleValue()); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } } else { // throw new CoolException("通知单号不可为空"); 通知单号空的情况下,往CPICMO表插入手动入库数据 // 判断原先平仓是否存在有货,如果有货数量进行累加 LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper().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 min(FInterID) as num from CPICMO"; List 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转cust_wait_pakin_log,并更新数量 // custWaitPakinToLog(list.get(i), updateAnfme); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(updateAnfme); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } else { // erp更新 if (Cools.isEmpty(list.get(i).getSupplier())) { String maxKeySql = "select min(FInterID) as num from CPICMO"; List 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转cust_wait_pakin_log,并更新数量 // custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(list.get(i).getAnfme().doubleValue()); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } } } } } @Override public void locNormalInSource(List list) { // 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功 if (list.size() > 0) { for (Integer i = 0; i < list.size(); i++) { List addList = new ArrayList<>(); List updateList = new ArrayList<>(); if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新 // 判断原先平仓是否存在有货,如果有货数量进行累加 LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper().eq("supplier", list.get(i).getSupplier()).and().eq("state", "1").eq("warehouse", list.get(i).getWarehouse()).and().eq("matnr", list.get(i).getMatnr())); if (!Cools.isEmpty(oldLocList)) { Double updateAnfme = new Double(list.get(i).getAnfme().doubleValue()); // 平仓入库(更新)逻辑 BigDecimal increaseAnfme = new BigDecimal(String.valueOf(list.get(i).getAnfme())); list.get(i).setAnfme(oldLocList.getAnfme().add(list.get(i).getAnfme())); updateList.add(list.get(i)); if (baseMapper.pdaLocNormalUpdate(updateList) > 0) { // cust_wait_pakin转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), updateAnfme); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); if (Cools.isEmpty(locLog.getMemo())) { locLog.setMemo("原材料"); } locLog.setAnfme(increaseAnfme.doubleValue()); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓材料入库记录插入失败,数据:" + logStr); } // erp更新 InStockbill和InStockBillEntry erpService.incrementPakIn(list.get(i).getSupplier(), list.get(i).getMatnr(), increaseAnfme.doubleValue()); } else { // 平仓入库逻辑 addList.add(list.get(i)); if (baseMapper.pdaLocNormalIn(addList) > 0) { // cust_wait_pakin转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(list.get(i).getAnfme().doubleValue()); if (Cools.isEmpty(locLog.getMemo())) { locLog.setMemo("原材料"); } locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓材料入库记录插入失败,数据:" + logStr); } // erp更新 InStockbill和InStockBillEntry erpService.incrementPakIn(list.get(i).getSupplier(), list.get(i).getMatnr(), list.get(i).getAnfme().doubleValue()); } } else { // throw new CoolException("通知单号不可为空"); 通知单号空的情况下,往CPICMO表插入手动入库数据 // 判断原先平仓是否存在有货,如果有货数量进行累加 LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper().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 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转cust_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 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转cust_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 list) { // 平仓入库后更新中间表数据,Fflag_finish改为1,表示平仓入库成功 if (list.size() > 0) { for (Integer i = 0; i < list.size(); i++) { List addList = new ArrayList<>(); List updateList = new ArrayList<>(); if (!Cools.isEmpty(list.get(i).getSupplier())) { // 存在入库单号的才进行erp更新 // 判断原先平仓是否存在有货,如果有货数量进行累加 LocNormal oldLocList = locNormalService.selectOne(new EntityWrapper().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转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), updateAnfme); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(updateAnfme); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } else { // erp更新 updateCPICMO(list.get(i)); // 平仓入库逻辑 addList.add(list.get(i)); if (baseMapper.pdaLocNormalIn(addList) > 0){ // cust_wait_pakin转cust_wait_pakin_log,并更新数量 custWaitPakinToLog(list.get(i), list.get(i).getAnfme().doubleValue()); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(list.get(i).getAnfme().doubleValue()); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } } } else { throw new CoolException("通知单号不可为空"); } } } } /* cust_wait_pakin转cust_wait_pakin_log,并更新数量 */ private boolean custWaitPakinToLog(LocNormal list, Double updateAnfme) { WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper().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); // 修改入库同志档物料数量 Wrapper wrapper = new EntityWrapper(); 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 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 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 pdaLocNormalQuery(String matnr, String warehouse, String billNo) { return baseMapper.pdaLocNormalQuery(matnr, warehouse, billNo); } @Override public void pdaLocNormalOut(List 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()); // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme(list.get(i).getAnfmeOut().doubleValue()); locLog.setIoType(2); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓出库记录插入失败,数据:" + logStr); } } 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()); // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, list.get(i)); locLog.setAnfme((list.get(i).getAnfmeOut()).doubleValue()); locLog.setIoType(2); locLog.setCreateTime(new Date()); locLog.setCreateUser(list.get(i).getAppeUser()); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓出库记录插入失败,数据:" + logStr); } } } } @Override public List pdaLocNormalWarehouseQuery(String warehouse, String matnr) { return baseMapper.pdaLocNormalWarehouseQuery(warehouse, matnr); } @Override public void pdaLocNormalMove(List list) { baseMapper.pdaLocNormalMove(list); } @Override public List queryLocNorlMatnr(String fbillNo, String mnemonic) { List matList = outStockMapper.queryMatnrWithBillNo(fbillNo); List locNormal = new ArrayList<>(); List locNormalResult = new ArrayList<>(); for (Integer i = 0; i < matList.size(); i++) { locNormal = baseMapper.queryLocNorlMatnr(matList.get(i).getFnumber(), mnemonic) ; 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; } }