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.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; 
 | 
    } 
 | 
  
 | 
} 
 |