| 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; | 
|     @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) && !Cools.isEmpty(crnp.getTankQty()) && crnp.getTankQty()==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; | 
|     } | 
|   | 
| } |