package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WorkService; import com.zy.asrs.service.WrkMastService; 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.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Component @Slf4j public class CheckDeepScheduler { @Value("${wcs-slave.doubleDeep}") private boolean confirmDeep; @Value("${scheduler.autoMove}") private boolean autoMove; @Autowired private LocDetlService locDetlService; @Autowired private LocMastService locMastService; @Autowired private WorkService workService; @Autowired private WrkMastService wrkMastService; @Autowired private SlaveProperties slaveProperties; /** * 遍历库存中,浅库位状态F/D,深库位状态O的数据,生成库位移转工作档将浅库位移转到对应深库位中去 */ @Scheduled(cron = "0/30 * * * * ?") private void locMoveToDeep(){ if (!confirmDeep) return; if (!autoMove) return; List wrkMasts = wrkMastService.selectList(new EntityWrapper() .eq("crn_no",1) .last(" and wrk_sts in (2,3,4,11,12)") ); if (wrkMasts.size() > 0) return; //遍历库存中,浅库位状态F/D,深库位状态O的数据,生成库位移转工作档将浅库位移转到对应深库位中去 List locMasts = locMastService.queryShallowLocFMast(); if (null != locMasts) { 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() .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); return; } } } } //遍历库存中,浅库位状态F,深库位状态D的数据,生成库位移转工作档将浅库位移转到新的库位中去 List locMasts1 = locMastService.queryNeedMoveShallLocF(); if (null != locMasts1) { for (LocMast sourceLoc : locMasts1) { LocMast destLoc = locMastService.queryEmptyDeepLoc(); if (!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) { //查找源库位是否有转移任务,如果有,不生成库位移转 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper() .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(), destLoc.getLocNo(), 1L); return; } } } } //遍历库存中,浅库位状态F,深库位状态D的数据,生成库位移转工作档将浅库位移转到新的库位中去 List locMasts2 = locMastService.queryNeedMoveShallLocD(); if (null != locMasts2) { for (LocMast sourceLoc : locMasts2) { LocMast destLoc = locMastService.queryEmptyDeepLoc(); if (!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) { //查找源库位是否有转移任务,如果有,不生成库位移转 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper() .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(), destLoc.getLocNo(), 1L); return; } } } } //遍历库存中,深库位状态D,浅库位状态为O的深库位数据,生成库位移转工作档将两个D库位合并为深浅库位 List locMasts3 = locMastService.queryDeepLocDMast(); if (null != locMasts3) { for (LocMast sourceLoc : locMasts3) { List locMasts4 = locMastService.queryDeepLocDMast(); for (LocMast deepLoc : locMasts4){ if(sourceLoc.getLocNo().equals(deepLoc.getLocNo())){ continue; } String shallow = Utils.getShallowLoc(slaveProperties, deepLoc.getLocNo()); LocMast destLoc = locMastService.selectById(shallow); if (!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) { //查找源库位是否有转移任务,如果有,不生成库位移转 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper() .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(), destLoc.getLocNo(), 1L); return; } } } } } } /** *遍历库存中,深浅库位状态都为F,物料不相同,或者浅库位入库日期比深库位早的库位,做库位移转移到新的深库位中去 * 0点到5点之间执行,每次只执行一笔 */ // @Scheduled(cron = "0/90 * * * * ?") private void LocMoveToNewLoc() throws ParseException { // if (!confirmDeep) return; // // for (int crnNo = 1; crnNo < 4; crnNo++){ // List wrkMasts = wrkMastService.selectList(new EntityWrapper() // .eq("crn_no",crnNo) // .last(" and wrk_sts in (2,3,4,11,12)") // ); // if (wrkMasts.size() > 0) continue; // List locMasts = locMastService.queryNeedMoveShallLoc(crnNo); // for (LocMast locMast : locMasts) { // LocMast targetLoc = locMastService.queryEmptyDeepLoc(crnNo); // if(!Cools.isEmpty(targetLoc)) { // workService.locMove(locMast.getLocNo(), targetLoc.getLocNo(), 1L); // } // break; // } // } } /** * 将深库位转为对应浅库位 * @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; } }