package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.VersionUtils; import com.zy.common.service.erp.ErpService; import com.zy.common.service.erp.entity.OutStockBillEntry; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * Created by vincent on 2020/7/6 */ @Slf4j @Service @RestController public class WorkLogHandler extends AbstractHandler { @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Autowired private WrkDetlService wrkDetlService; @Autowired private WrkDetlLogService wrkDetlLogService; @Autowired private WaitPakinService waitPakinService; @Autowired private WaitPakinLogService waitPakinLogService; @Autowired private ErpService erpService; @Autowired private OutStockService outStockService; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private OutStockDanService outStockDanService; @Autowired private LocNormalService locNormalService; @Autowired private LocNormalLogService locNormalLogService; @Transactional public ReturnT start(WrkMast wrkMast) { try { if (!Cools.isEmpty(wrkMast.getBarcode())) { Wrapper wrapper = new EntityWrapper().eq("zpallet", wrkMast.getBarcode()); // erp关联订单处理 List waitPakins = waitPakinService.selectList(wrapper); for (WaitPakin waitPakin : waitPakins) { if (!Cools.isEmpty(waitPakin.getMemo())) { if (waitPakin.getMemo().equals("原材料")) { if (!erpService.incrementPakIn(waitPakin.getSupplier(), waitPakin.getMatnr(), waitPakin.getAnfme())) { exceptionHandle("更新ERP原材料入库数据[matnr={0}]失败", waitPakin.getMatnr()); } } else if (waitPakin.getMemo().equals("成品")) { if (!erpService.incrementCPakIn(waitPakin.getSupplier(), waitPakin.getMatnr(), waitPakin.getAnfme())) { exceptionHandle("更新ERP成品入库数据[matnr={0}]失败", waitPakin.getMatnr()); } } } } // 保存入库通知档历史档 waitPakinLogService.save(wrkMast.getBarcode()); // 删除入库通知档 waitPakinService.delete(wrapper); } // erp关联出库订单处理 if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 53) { EntityWrapper wrapper = new EntityWrapper<>(); // 获取工作档内物料清单 List wrkDetls = wrkDetlService.selectList(wrapper.eq("wrk_no", wrkMast.getWrkNo()).and().isNotNull("supplier")); for (WrkDetl wrkDetl: wrkDetls) { if (!Cools.isEmpty(wrkDetl)) { Integer FInterI = outStockDanService.queryOutStockFInterID(wrkDetl.getSupplier()); // 获取出库单主表主键 if (!Cools.isEmpty(FInterI)) { if (!erpService.incrementCPakOut(FInterI, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getSupplier())) { exceptionHandle("[xtyasrs_dual]更新ERP成品出库数据[matnr={0},FBillNo={1}]失败", wrkDetl.getMatnr(),wrkDetl.getSupplier()); } if (!outStockDanService.incrementCPakOut(FInterI, wrkDetl.getMatnr(), wrkDetl.getAnfme(), wrkDetl.getSupplier())) { exceptionHandle("[xtyasrs]更新ERP成品出库数据[matnr={0},FBillNo={1}]失败", wrkDetl.getMatnr(),wrkDetl.getSupplier()); } } } } } if (!Cools.isEmpty(wrkMast.getPdcType()) && wrkMast.getPdcType().equals("Y")){ List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (Cools.isEmpty(wrkDetls)){ log.error("出库(移库)作业时,未查询到工作明细"); }else { for (WrkDetl wrkDetl : wrkDetls) { EntityWrapper locNormalEntityWrapper = new EntityWrapper<>(); locNormalEntityWrapper.eq("matnr",wrkDetl.getMatnr()); locNormalEntityWrapper.eq("mnemonic",wrkDetl.getMnemonic()); locNormalEntityWrapper.eq("state","1"); locNormalEntityWrapper.eq("warehouse",wrkMast.getLogErrMemo()); LocNormal locNormal = locNormalService.selectOne(locNormalEntityWrapper); if (Cools.isEmpty(locNormal)){ Date now = new Date(); LocNormal locNormal1 = new LocNormal(); locNormal1.setMatnr(wrkDetl.getMatnr()); locNormal1.setMaktx(wrkDetl.getMaktx()); locNormal1.setLgnum(wrkDetl.getLgnum()); locNormal1.setType(wrkDetl.getType()); locNormal1.setMnemonic(wrkDetl.getMnemonic()); locNormal1.setSupplier(wrkDetl.getSupplier()); locNormal1.setWarehouse(wrkMast.getLogErrMemo()); locNormal1.setAnfme(BigDecimal.valueOf(wrkDetl.getAnfme())); locNormal1.setModiTime(now); locNormal1.setModiUser(9527L); locNormal1.setAppeUser(9527L); locNormal1.setAppeTime(now); locNormal1.setState("1"); boolean insert = locNormalService.insert(locNormal1); if (!insert){ log.error("出库(移库)作业时,插入平库物料失败"); } // 生成平仓出入库记录 LocNormalLog locLog = new LocNormalLog(); VersionUtils.setLocNormalLog(locLog, locNormal1); locLog.setAnfme(locNormal1.getAnfme().doubleValue()); locLog.setIoType(1); locLog.setCreateTime(new Date()); locLog.setCreateUser(9527L); if (!locNormalLogService.insert(locLog)) { String logStr = JSON.toJSONString(locLog); log.info("平仓入库记录插入失败,数据:" + logStr); } }else { locNormal.setAnfme(locNormal.getAnfme().add(BigDecimal.valueOf(wrkDetl.getAnfme()))); boolean update = locNormalService.update(locNormal, locNormalEntityWrapper); if (!update){ log.error("出库(移库)作业时,更新平库物料失败"); } } } } } // 保存工作主档历史档 if (!wrkMastLogService.save(wrkMast.getWrkNo())) { exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除工作主档 if (!wrkMastService.deleteById(wrkMast)) { exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); } // 保存工作明细档历史档 if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { // exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除工作明细档 if (!wrkDetlService.delete(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo()))) { // exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); } } catch (Exception e) { log.error("fail", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setContent(e); } return SUCCESS; } }