package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.exception.CoolException; 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.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @Service public class AutoReplenishmentHandler extends AbstractHandler { @Autowired private OrderDetlService orderDetlService; @Autowired private LocDetlService locDetlService; @Autowired private LocMastService locMastService; @Autowired private CommonService commonService; @Autowired private WrkMastService wrkMastService; @Autowired private WrkDetlService wrkDetlService; @Autowired private OrderService orderService; @Transactional public ReturnT start(Order order) { Date now = new Date(); Set locNos = pakoutLoc(order); for (String locNo : locNos){ LocMast locMast = locMastService.selectByLoc(locNo); if(!"F".equals(locMast.getLocSts())){ throw new CoolException("库位状态已变更"); } //生成工作档 WrkMast wrkMast = createWrkMast(locNo,locMast.getBarcode(),now); //生成工作档明细 List locDetls = locDetlService.selectByLocNo(locNo); createWrkDetl(locDetls, wrkMast,order.getOrderNo(),now); //修改库位状态 locMast.setLocSts("R"); locMastService.updateByLocNo(locMast); } order.setSettle(2L); orderService.updateById(order); return SUCCESS; } private Set pakoutLoc(Order order){ //需要出库的库位 Set locNos = new HashSet<>(); //根据订单生成四项库出库工作档 List orderDetlList = orderDetlService.selectList(new EntityWrapper().eq("order_no", order.getOrderNo())); for(OrderDetl orderDetl : orderDetlList){ if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ continue; } String matnr = orderDetl.getMatnr(); String batch = orderDetl.getBatch(); String csocode = orderDetl.getThreeCode(); String isocode = orderDetl.getDeadTime(); Double orderAnfme = orderDetl.getAnfme(); //List locNosSearch = locDetlService.selectLocNo(matnr); Set locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode); for(String locNo : locNosSearch){ List locDetls = locDetlService.selectByLocNo(locNo); locNos.add(locNo); for (LocDetl locDetl :locDetls){ if(matnr.equals(locDetl.getMatnr())){ orderAnfme -= locDetl.getAnfme(); } } if(orderAnfme <= 0){ orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); orderDetlService.updateById(orderDetl); break; } } } // orderDetlList.forEach(orderDetl -> { // // if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ // cont // } // // String matnr = orderDetl.getMatnr(); // Double orderAnfme = orderDetl.getAnfme(); // // List locNosSearch = locDetlService.selectLocNo(matnr); // // for(String locNo : locNosSearch){ // List locDetls = locDetlService.selectByLocNo(locNo); // locNos.add(locNo); // for (LocDetl locDetl :locDetls){ // if(matnr.equals(locDetl.getMatnr())){ // orderAnfme -= locDetl.getAnfme(); // } // } // if(orderAnfme <= 0){ // orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); // orderDetlService.updateById(orderDetl); // break; // } // } // // }); return locNos; } private WrkMast createWrkMast(String locNo,String barCode,Date now){ int ioType = 101; int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务 wrkMast.setIoType(ioType); // 入出库状态 wrkMast.setIoPri(300D); // 优先级:13 //wrkMast.setOutMost(outMost?1:0);; //wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo()); //wrkMast.setSourceStaNo(loc); // 源站 wrkMast.setStaNo(300); // 目标站 wrkMast.setSourceLocNo(locNo); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setBarcode(barCode); //wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); //wrkMast.setModiUser(userId); wrkMast.setModiTime(now); wrkMast.setMk("Y"); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:"+locNo); } return wrkMast; } private void createWrkDetl(List locDetls, WrkMast wrkMast,String orderNo, Date now){ locDetls.forEach(locDetl -> { WrkDetl wrkDetl = new WrkDetl(); BeanUtils.copyProperties(locDetl,wrkDetl); wrkDetl.setZpallet(wrkMast.getBarcode()); wrkDetl.setIoTime(now); wrkDetl.setWrkNo(wrkMast.getWrkNo()); //wrkDetl.setBatch(locDetl.getBatch()); wrkDetl.setOrderNo(orderNo); //wrkDetl.setAnfme(locDetl.getAnfme()); // 数量 wrkDetl.setAppeTime(now); //wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); //wrkDetl.setSuppCode(locDetl.getSuppCode()); //wrkDetl.setModiUser(userId); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } }); } }