New file |
| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.BasCrnp; |
| | | import com.zy.asrs.entity.LocDetl; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.properties.SlaveProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | 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.List; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/7/6 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class CheckDeepHandler extends AbstractHandler<String> { |
| | | |
| | | @Value("${wcs-slave.doubleDeep}") |
| | | private boolean confirmDeep; |
| | | @Value("${wcs-slave.doubleLocs}") |
| | | private String deepLocs; |
| | | @Value("${wcs-slave.shallowLocs}") |
| | | private String shallowLocs; |
| | | @Autowired |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private WorkService workService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private BasCrnpService basCrnpService; |
| | | @Autowired |
| | | private SlaveProperties slaveProperties; |
| | | |
| | | @Transactional |
| | | public synchronized ReturnT<String> start() { |
| | | try { |
| | | for (int crnNo = 1; crnNo < 3; crnNo++){ |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .eq("crn_no",crnNo) |
| | | .last(" and wrk_sts in (2,3,4,11,12)") |
| | | ); |
| | | if (wrkMasts.size() > 0) continue; |
| | | |
| | | // //暂停移库 |
| | | // BasCrnp crnp = basCrnpService.selectById(crnNo); |
| | | // if(!Cools.isEmpty(crnp) && crnp.getOrigin()!=0){ |
| | | // continue; |
| | | // } |
| | | |
| | | List<LocMast> locMasts = locMastService.queryShallowLocFMast(crnNo); |
| | | if (null == locMasts) continue; |
| | | |
| | | for (LocMast sourceLoc : locMasts){ |
| | | String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo()); |
| | | LocMast destLoc = locMastService.selectById(deep); |
| | | |
| | | if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) { |
| | | //查找源库位是否有转移任务,如果有,不生成库位移转 |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("source_loc_no", sourceLoc.getLocNo())); |
| | | if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") && |
| | | (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) { |
| | | workService.locMove(sourceLoc.getLocNo(), deep, 1L); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | /** |
| | | * 遍历库存中,浅库位状态F,深库位状态O的数据,生成库位移转工作档将浅库位移转到对应深库位中去 |
| | | */ |
| | | // private void locMoveToDeep(int crnNo){ |
| | | // if (!confirmDeep) return; |
| | | // List<LocMast> locMasts = locMastService.queryShallowLocFMast(); |
| | | // |
| | | // |
| | | // if (null == locMasts) return; |
| | | // |
| | | // for (LocMast sourceLoc : locMasts){ |
| | | // String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo()); |
| | | // LocMast destLoc = locMastService.selectById(deep); |
| | | // |
| | | // if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) { |
| | | // //查找源库位是否有转移任务,如果有,不生成库位移转 |
| | | // WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | // .eq("source_loc_no", sourceLoc.getLocNo())); |
| | | // if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") && |
| | | // (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) { |
| | | // workService.locMove(sourceLoc.getLocNo(), deep, 1L); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | |
| | | // @Transactional |
| | | // public synchronized ReturnT<String> start1() { |
| | | // try { |
| | | // for (int crnNo = 1; crnNo < 6; crnNo++){ |
| | | // List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | // .eq("crn_no",crnNo) |
| | | // .last(" and wrk_sts in (2,3,4,11,12)") |
| | | // ); |
| | | // if (wrkMasts.size() > 0) continue; |
| | | // |
| | | // //暂停移库 |
| | | // BasCrnp crnp = basCrnpService.selectById(crnNo); |
| | | // if(!Cools.isEmpty(crnp) && crnp.getOrigin()!=0){ |
| | | // continue; |
| | | // } |
| | | // |
| | | // //遍历库存中,深浅库位状态都为F,物料不相同,或者浅库位入库日期比深库位早的库位,做库位移转移到新的深库位中去 |
| | | // boolean flag0 = false; |
| | | // List<LocMast> locMasts = locMastService.queryNeedMoveShallLoc(crnNo); |
| | | // for (LocMast locMast : locMasts) { |
| | | // //多笔明细的不做移转调整 |
| | | // List<LocDetl> shallowLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", locMast.getLocNo())); |
| | | // String deepLoc = Utils.getDeepLoc(slaveProperties, locMast.getLocNo()); |
| | | // List<LocDetl> deepLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", deepLoc)); |
| | | // |
| | | // if ((!Cools.isEmpty(shallowLocDetls) && shallowLocDetls.size()>1) |
| | | // || (!Cools.isEmpty(deepLocDetls) && deepLocDetls.size()>1)) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // LocMast targetLoc = locMastService.queryEmptyDeepLoc(crnNo); |
| | | // if(!Cools.isEmpty(targetLoc)) { |
| | | // workService.locMove(locMast.getLocNo(), targetLoc.getLocNo(), 1L); |
| | | // log.info("浅库位移转到深库位:生成库位移转任务成功[浅到深]===>>" + locMast.getLocNo() + "---" + targetLoc.getLocNo()); |
| | | // flag0 = true; |
| | | // } |
| | | // break; |
| | | // } |
| | | // if(flag0) continue; |
| | | // |
| | | //// List<LocMast> ignoreLocs = new ArrayList<>(); |
| | | // List<LocMast> allDeeps = locMastService.selectAllDeepLoc(crnNo); |
| | | // for (LocMast sourceDeep : allDeeps) { |
| | | // |
| | | // LocDetl sourceLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", sourceDeep.getLocNo()).orderBy("mat_no")); |
| | | // if(Cools.isEmpty(sourceLoc)){ |
| | | // continue; |
| | | // } |
| | | // |
| | | // boolean moveFlag = false;//每次执行一笔 |
| | | //// //如果这个库位已经被操作过了,直接跳过 |
| | | //// Boolean flag = false; |
| | | //// for (LocMast ignoreLoc : ignoreLocs) { |
| | | //// if (ignoreLoc.getLocNo() == sourceDeep.getLocNo()) { |
| | | //// flag = true; |
| | | //// break; |
| | | //// } |
| | | //// } |
| | | //// if (flag) { |
| | | //// continue; |
| | | //// } |
| | | // |
| | | // List<LocMast> allDeepsWithCrnNo = locMastService.selectAllDeepLocWithCrnNo(sourceDeep.getCrnNo(), |
| | | // sourceLoc.getMatNo(), sourceLoc.getItemBatch(), sourceLoc.getSpecs()); |
| | | // for (LocMast targetDeep : allDeepsWithCrnNo) { |
| | | // if(targetDeep.getLocNo().equals(sourceDeep.getLocNo())){ |
| | | // continue; |
| | | // } |
| | | //// LocDetl sourceLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>() |
| | | //// .eq("loc_no", sourceDeep.getLocNo())); |
| | | // |
| | | // LocDetl targetLoc = locDetlService.selectOne(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", targetDeep.getLocNo())); |
| | | // //多笔明细的不做移转调整 |
| | | // List<LocDetl> sourceLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", sourceDeep.getLocNo())); |
| | | // List<LocDetl> targetLocDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() |
| | | // .eq("loc_no", targetDeep.getLocNo())); |
| | | // |
| | | // if (Cools.isEmpty(targetLoc) |
| | | // || (!Cools.isEmpty(sourceLocDetls) && sourceLocDetls.size()>1) |
| | | // || (!Cools.isEmpty(targetLocDetls) && targetLocDetls.size()>1)) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // //物料号相同,源库位入库日期早于目标库位对应深库位入库日期,库位状态都为F |
| | | // if (sourceLoc.getMatNo().equals(targetLoc.getMatNo()) |
| | | // && sourceLoc.getItemBatch().equals(targetLoc.getItemBatch()) |
| | | // && sourceLoc.getSpecs().equals(targetLoc.getSpecs()) |
| | | // && sourceLoc.getAppeTime().getTime() < targetLoc.getAppeTime().getTime() |
| | | // && sourceDeep.getLocSts().equals("F") && targetDeep.getLocSts().equals("F")) { |
| | | // |
| | | //// System.out.println("成功: "+sourceDeep +"-----" +targetDeep); |
| | | // String shallow = convertShallow(targetDeep.getLocNo()); |
| | | // LocMast shallowLoc = locMastService.selectById(shallow); |
| | | // if(!Cools.isEmpty(shallowLoc) && shallowLoc.getLocSts().equals("O")) { |
| | | // workService.locMove(sourceDeep.getLocNo(), shallow, 1L); |
| | | // log.info("深库位合并定时任务:生成库位移转任务成功[深到浅]===>>" + sourceDeep.getLocNo() + "---" + shallow); |
| | | // moveFlag=true; |
| | | //// ignoreLocs.add(sourceDeep); |
| | | //// ignoreLocs.add(targetDeep); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // if(moveFlag) break; |
| | | // } |
| | | // |
| | | // } |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | // return FAIL.setMsg(e.getMessage()); |
| | | // } |
| | | // return SUCCESS; |
| | | // } |
| | | |
| | | /** |
| | | * 将深库位转为对应浅库位 |
| | | * @param deep |
| | | * @return |
| | | */ |
| | | private String convertShallow(String deep){ |
| | | String shallLoc = ""; |
| | | Integer mastInt = Integer.parseInt(deep.substring(0, 2)); |
| | | if (mastInt % 2 == 0){ |
| | | mastInt -= 1; |
| | | }else if (mastInt % 2 == 1){ |
| | | mastInt += 1; |
| | | } |
| | | if (mastInt <10){ |
| | | shallLoc = "0" + mastInt+ deep.substring(2,7); |
| | | }else { |
| | | shallLoc = mastInt+ deep.substring(2,7); |
| | | } |
| | | return shallLoc; |
| | | } |
| | | |
| | | } |