| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | 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.ints.entity.IoComplete; |
| | | import com.zy.ints.entity.WaitMatin; |
| | | import com.zy.ints.entity.WaitMatout; |
| | | import com.zy.ints.service.IoCompleteService; |
| | | import com.zy.ints.service.WaitMatinService; |
| | | import com.zy.ints.service.WaitMatoutService; |
| | | 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 org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.util.Date; |
| | |
| | | * Created by vincent on 2020/7/4 |
| | | */ |
| | | @Service |
| | | @Transactional |
| | | public class WorkMastHandler extends AbstractHandler<String> { |
| | | |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private WaitPakinService waitPakinService; |
| | | private WaitMatinService waitMatinService; |
| | | @Autowired |
| | | private WaitMatoutService waitMatoutService; |
| | | @Autowired |
| | | private IoCompleteService ioCompleteService; |
| | | @Autowired |
| | | private PltBarcodeService pltBarcodeService; |
| | | @Autowired |
| | | private MatCodeService matCodeService; |
| | | /** |
| | | * ERP接口是否启用 |
| | | */ |
| | | @Value("${erp.enabled}") |
| | | private Boolean erpEnabled; |
| | | |
| | | public ReturnT<String> start(WrkMast wrkMast) { |
| | | // 4.入库完成 |
| | |
| | | case 10: |
| | | // 修改库位状态=D |
| | | if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) { |
| | | locMast.setFullPlt(wrkMast.getFullPlt()); |
| | | locMast.setLocSts("D"); |
| | | locMast.setIoTime(now); |
| | | locMast.setModiTime(now); |
| | |
| | | } |
| | | // 遍历工作明细,更新库存明细和入库通知档 |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("matnr", wrkDetl.getMatnr())); |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo()).eq("supplier", wrkDetl.getSupplier())); |
| | | if (null != locDetl) { |
| | | boolean res = locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr()); |
| | | boolean res = locDetlService.updateAnfme(wrkDetl.getQty()+locDetl.getQty(), wrkMast.getLocNo(), wrkDetl.getMatNo(),wrkDetl.getSupplier()); |
| | | |
| | | |
| | | if (!res) { |
| | | exceptionHandle("全板入库 ===>> 更新库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | } |
| | | } else { |
| | | WrkDetl wrk_no = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>() |
| | | .eq("wrk_no", wrkMast.getWrkNo()).eq("mat_no",wrkDetl.getMatNo()).eq("supplier",wrkDetl.getSupplier())); |
| | | |
| | | MatCode matCode = matCodeService.selectOne(new EntityWrapper<MatCode>().eq("mat_no", wrkDetl.getMatNo())); |
| | | locDetl = new LocDetl(); |
| | | |
| | | locDetl.setLocNo(wrkMast.getLocNo()); // 库位号 |
| | | locDetl.setMemo(wrkMast.getMemo()); |
| | | VersionUtils.setLocDetl(locDetl, wrkDetl); // 版本控制 |
| | | locDetl.setModiTime(now); |
| | | locDetl.setAppeTime(now); |
| | | locDetl.setAllQty(wrk_no.getAllQty()); |
| | | locDetl.setAllWeight(wrk_no.getAllWeight()); |
| | | locDetl.setSource(wrk_no.getSource()); |
| | | locDetl.setVendor(wrk_no.getVendor()); |
| | | locDetl.setWeight(matCode.getWeight()); |
| | | locDetl.setQtyBox(matCode.getStr6()); |
| | | locDetl.setStr3(matCode.getStr3()); |
| | | locDetl.setStr4(matCode.getStr4()); |
| | | locDetl.setStr5(matCode.getStr5()); |
| | | if (!Cools.isEmpty(wrk_no)){ |
| | | locDetl.setMemo(wrk_no.getMemo()); |
| | | locDetl.setSupplier(wrk_no.getSupplier()); |
| | | } |
| | | if (!locDetlService.insert(locDetl)) { |
| | | exceptionHandle("全板入库 ===>> 添加库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | } |
| | | } |
| | | // 更新入库通知档 status ===>> Y |
| | | WaitPakin setParam = new WaitPakin(); |
| | | setParam.setStatus("Y"); |
| | | boolean updateRes = waitPakinService.update(setParam |
| | | , new EntityWrapper<WaitPakin>().eq("barcode", wrkDetl.getZpallet()) |
| | | .eq("matnr", wrkDetl.getMatnr()) |
| | | .eq("anfme", wrkDetl.getAnfme())); |
| | | if (!updateRes && updateRes) { |
| | | exceptionHandle("全板入库 ===>> 更新入库通知档失败;[workNo={0}]", wrkMast.getWrkNo()); |
| | | |
| | | //更新组托数据状态为入库完成 IoStatus ====>> 2 |
| | | Wrapper<PltBarcode> wrapper = new EntityWrapper<PltBarcode>().eq("barcode", wrkDetl.getZpallet()) |
| | | .eq("bill_no", wrkDetl.getBillNo()).eq("seq_no", wrkDetl.getSeqNo()).eq("mat_no", wrkDetl.getMatNo()); |
| | | PltBarcode pltBarcode = pltBarcodeService.selectOne(wrapper); |
| | | if(null != pltBarcode) { |
| | | pltBarcode.setIoStatus(2);//入库完成 |
| | | boolean res = pltBarcodeService.update(pltBarcode, wrapper); |
| | | if(!res){ |
| | | // exceptionHandle("全板入库 ===>> 更新组托数据失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | // 更新入库通知档 ioStatus ====>> 2 |
| | | WaitMatin waitMatin = waitMatinService.selectOne(new EntityWrapper<WaitMatin>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(null != waitMatin && waitMatin.getInQty() >= waitMatin.getQty()){ |
| | | waitMatin.setIoStatus(2); |
| | | waitMatin.setModiTime(now); |
| | | boolean res = waitMatinService.update(waitMatin, new EntityWrapper<WaitMatin>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(!res){ |
| | | exceptionHandle("全板入库 ===>> 更新入库通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | //插入回报档 insert ====>> io_complete |
| | | if(erpEnabled && "Y".equals(wrkMast.getLinkMis())){ |
| | | IoComplete ioComplete = new IoComplete(); |
| | | ioComplete.setBillNo(wrkDetl.getBillNo()); |
| | | ioComplete.setSeqNo(wrkDetl.getSeqNo()); |
| | | ioComplete.setTaskType(1);//入库 |
| | | ioComplete.setLocNo(wrkMast.getLocNo()); |
| | | ioComplete.setZpallet(wrkMast.getBarcode()); |
| | | ioComplete.setMatNo(wrkDetl.getMatNo()); |
| | | ioComplete.setMatName(wrkDetl.getMatName()); |
| | | ioComplete.setQty(wrkDetl.getQty()); |
| | | ioComplete.setUpdStatus(0);//上报状态,待处理 |
| | | ioComplete.setModiTime(now); |
| | | ioComplete.setAppeTime(now); |
| | | boolean res = ioCompleteService.insert(ioComplete); |
| | | if(!res){ |
| | | exceptionHandle("全板入库 ===>> 插入回报通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | // 修改库位状态 S ====>> F |
| | | if (locMast.getLocSts().equals("S")) { |
| | | locMast.setFullPlt(wrkMast.getFullPlt()); |
| | | locMast.setLocSts("F"); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setIoTime(now); |
| | |
| | | } |
| | | for (WrkDetl wrkDetl:wrkDetls53) { |
| | | // 修改库存明细数量,如果工作明细数量为0时,删除库存明细 |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr())); |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo())); |
| | | if (null != locDetl) { |
| | | if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) { |
| | | if (!locDetlService.updateAnfme(locDetl.getQty() - wrkDetl.getQty(), locMast.getLocNo(), wrkDetl.getMatNo(),wrkDetl.getSupplier())) { |
| | | exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); |
| | | } |
| | | // todo:luxiaotao 3)修改出库通知档 status ==> Y |
| | | |
| | | // 更新出库通知档 ioStatus ====>> 2 |
| | | WaitMatout waitMatout = waitMatoutService.selectOne(new EntityWrapper<WaitMatout>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(null != waitMatout && waitMatout.getOutQty() >= waitMatout.getQty()){ |
| | | waitMatout.setIoStatus(2); |
| | | waitMatout.setModiTime(now); |
| | | boolean res = waitMatoutService.update(waitMatout, new EntityWrapper<WaitMatout>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(!res){ |
| | | exceptionHandle("拣料出库 ===>> 更新出库通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | //插入回报档 insert ====>> io_complete |
| | | if(erpEnabled && "Y".equals(wrkMast.getLinkMis())){ |
| | | IoComplete ioComplete = new IoComplete(); |
| | | ioComplete.setBillNo(wrkDetl.getBillNo()); |
| | | ioComplete.setSeqNo(wrkDetl.getSeqNo()); |
| | | ioComplete.setTaskType(2);//出库 |
| | | ioComplete.setLocNo(wrkMast.getLocNo()); |
| | | ioComplete.setZpallet(wrkMast.getBarcode()); |
| | | ioComplete.setMatNo(wrkDetl.getMatNo()); |
| | | ioComplete.setMatName(wrkDetl.getMatName()); |
| | | ioComplete.setQty(wrkDetl.getQty()); |
| | | ioComplete.setUpdStatus(0);//上报状态,待处理 |
| | | ioComplete.setModiTime(now); |
| | | ioComplete.setAppeTime(now); |
| | | boolean res = ioCompleteService.insert(ioComplete); |
| | | if(!res){ |
| | | exceptionHandle("拣料出库 ===>> 插入回报通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // 修改库位状态 Q ====>> F |
| | | if (locMast.getLocSts().equals("Q")) { |
| | | locMast.setFullPlt(wrkMast.getFullPlt()); |
| | | locMast.setLocSts("F"); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setIoTime(now); |
| | |
| | | } |
| | | // 修改库存明细数量,如无库存,曾新增 |
| | | for (WrkDetl wrkDetl:wrkDetls54) { |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr())); |
| | | LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo())); |
| | | if (null != locDetl) { |
| | | if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) { |
| | | exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); |
| | | if (!locDetlService.updateAnfme(wrkDetl.getQty()+locDetl.getQty(), locMast.getLocNo(), wrkDetl.getMatNo(),wrkDetl.getSupplier())) { |
| | | exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matNo={1}]", wrkMast.getWrkNo(), wrkDetl.getMatNo()); |
| | | } |
| | | } else { |
| | | locDetl = new LocDetl(); |
| | |
| | | locDetl.setModiTime(now); |
| | | locDetl.setAppeTime(now); |
| | | if (!locDetlService.insert(locDetl)) { |
| | | exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); |
| | | exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matNo={1}]", wrkMast.getWrkNo(), wrkDetl.getMatNo()); |
| | | } |
| | | } |
| | | // todo:luxiaotao 3)修改出库通知档 status ==> Y |
| | | |
| | | // 更新入库通知档 ioStatus ====>> 2 |
| | | WaitMatin waitMatin = waitMatinService.selectOne(new EntityWrapper<WaitMatin>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(null != waitMatin && waitMatin.getInQty() >= waitMatin.getQty()){ |
| | | waitMatin.setIoStatus(2); |
| | | waitMatin.setModiTime(now); |
| | | boolean res = waitMatinService.update(waitMatin, new EntityWrapper<WaitMatin>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(!res){ |
| | | exceptionHandle("并板入库 ===>> 更新入库通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | //插入回报档 insert ====>> io_complete |
| | | if(erpEnabled && "Y".equals(wrkMast.getLinkMis())){ |
| | | IoComplete ioComplete = new IoComplete(); |
| | | ioComplete.setBillNo(wrkDetl.getBillNo()); |
| | | ioComplete.setSeqNo(wrkDetl.getSeqNo()); |
| | | ioComplete.setTaskType(1);//入库 |
| | | ioComplete.setLocNo(wrkMast.getLocNo()); |
| | | ioComplete.setZpallet(wrkMast.getBarcode()); |
| | | ioComplete.setMatNo(wrkDetl.getMatNo()); |
| | | ioComplete.setMatName(wrkDetl.getMatName()); |
| | | ioComplete.setQty(wrkDetl.getQty()); |
| | | ioComplete.setUpdStatus(0);//上报状态,待处理 |
| | | ioComplete.setModiTime(now); |
| | | ioComplete.setAppeTime(now); |
| | | boolean res = ioCompleteService.insert(ioComplete); |
| | | if(!res){ |
| | | exceptionHandle("并板入库 ===>> 插入回报通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | // 修改库位状态 Q ====>> F |
| | | if (locMast.getLocSts().equals("Q")) { |
| | | locMast.setFullPlt(wrkMast.getFullPlt()); |
| | | locMast.setLocSts("F"); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setIoTime(now); |
| | |
| | | if (wrkDetls57.isEmpty()) { |
| | | exceptionHandle("盘点入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); |
| | | } |
| | | // todo:luxiaotao 3)修改盘点通知档 status ==> Y |
| | | // 修改库位状态 Q ====>> F |
| | | if (locMast.getLocSts().equals("Q")) { |
| | | locMast.setFullPlt(wrkMast.getFullPlt()); |
| | | locMast.setLocSts("F"); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setIoTime(now); |
| | |
| | | exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo()); |
| | | } |
| | | } |
| | | // todo:luxiaotao 3)修改盘点通知档 status ==> Y |
| | | // 修改源库位状态 ==> O |
| | | LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | String fullPlt = sourceLoc.getFullPlt(); |
| | | if (null != sourceLoc) { |
| | | sourceLoc.setFullPlt("N"); |
| | | sourceLoc.setBarcode(""); |
| | | sourceLoc.setLocSts("O"); |
| | | sourceLoc.setModiTime(now); |
| | |
| | | } |
| | | } |
| | | // 修改目标库位状态 ==> .locSts |
| | | locMast.setFullPlt(fullPlt); |
| | | locMast.setLocSts(locSts); |
| | | locMast.setBarcode(wrkMast.getBarcode()); |
| | | locMast.setIoTime(now); |
| | |
| | | exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); |
| | | } |
| | | for (WrkDetl wrkDetl : wrkDetls101) { |
| | | // todo:luxiaotao 3)修改出库通知档 status ==> Y |
| | | WaitMatout waitMatout = waitMatoutService.selectOne(new EntityWrapper<WaitMatout>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(null != waitMatout && waitMatout.getOutQty() >= waitMatout.getQty()){ |
| | | waitMatout.setIoStatus(2); |
| | | waitMatout.setModiTime(now); |
| | | boolean res = waitMatoutService.update(waitMatout, new EntityWrapper<WaitMatout>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo())); |
| | | if(!res){ |
| | | exceptionHandle("全板出库 ===>> 更新出库通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | |
| | | //插入回报档 insert ====>> io_complete |
| | | if(erpEnabled && "Y".equals(wrkMast.getLinkMis())){ |
| | | IoComplete ioComplete = new IoComplete(); |
| | | ioComplete.setBillNo(wrkDetl.getBillNo()); |
| | | ioComplete.setSeqNo(wrkDetl.getSeqNo()); |
| | | ioComplete.setTaskType(2);//出库 |
| | | ioComplete.setLocNo(wrkMast.getLocNo()); |
| | | ioComplete.setZpallet(wrkMast.getBarcode()); |
| | | ioComplete.setMatNo(wrkDetl.getMatNo()); |
| | | ioComplete.setMatName(wrkDetl.getMatName()); |
| | | ioComplete.setQty(wrkDetl.getQty()); |
| | | ioComplete.setUpdStatus(0);//上报状态,待处理 |
| | | ioComplete.setModiTime(now); |
| | | ioComplete.setAppeTime(now); |
| | | boolean res = ioCompleteService.insert(ioComplete); |
| | | if(!res){ |
| | | exceptionHandle("全板出库 ===>> 插入回报通知档失败;[workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo()); |
| | | } |
| | | } |
| | | } |
| | | // 删除工作档源库位的库存明细 |
| | | if (!locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()))) { |
| | |
| | | } |
| | | // 修改源库位状态 R ===>> O |
| | | if (locMast.getLocSts().equals("R")) { |
| | | locMast.setFullPlt("N"); |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setModiTime(now); |
| | |
| | | case 110: |
| | | // 修改库位状态 R ===>> O |
| | | if (locMast.getLocSts().equals("R")) { |
| | | locMast.setFullPlt("N"); |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setModiTime(now); |