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.WrkDetl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkDetlService; import com.zy.asrs.service.WrkMastService; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * @author pang.jiabao * @description 米多泉州专用定时任务 * @createDate 2024/7/10 9:20 */ @Slf4j @Component public class MdqzScheduler { @Resource private ConfigService configService; @Resource private WrkMastService wrkMastService; @Resource private LocMastService locMastService; @Resource private WrkDetlService wrkDetlService; // 读补尾桶配置,给对应任务号补尾桶信号--替换为入库寻找库位时,发现前面类型不一样单着,自动补尾桶 @Scheduled(cron = "0/5 * * * * ?") private void tailFillingBuckets() { Config config = configService.selectConfigByCode("tailFillingBuckets"); if (config != null && config.getStatus() == 1 && !Cools.isEmpty(config.getValue())) { WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper().eq("wrk_no", config.getValue())); if (wrkMast != null && wrkMast.getCtnType() == 0) { Integer wrkNo = wrkMast.getWrkNo(); // 取新库位组的第一个库位 List locMasts = locMastService.selectList(new EntityWrapper().eq("crn_no", 4).eq("loc_sts", "O")); List collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList()); List collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 第一个先放这两排 if (collect.size() <= 0 && collect1.size() <= 0) { log.error("站点:{},任务号{}:入库空桶库无空库位",1050,wrkNo); return; } // 可用库位组 List locMastList = new ArrayList<>(); for(LocMast locMast1:collect) { Optional first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1()) && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst(); first.ifPresent(locMastList::add); } if (locMastList.size() == 0) { log.error("站点:{},任务号{}:入库空桶库无对应空空桶组",1050,wrkNo); return; } WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper().eq("wrk_no", wrkNo)); if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 最上面一层只能放208L,库位剩余量不多时,如果是208L桶入库,则先从最顶层放 locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); } else { locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList()); } LocMast locMast = locMastList.get(0); wrkMast.setLocNo(locMast.getLocNo()); wrkMast.setCtnType(1); // 尾托标识 wrkMastService.updateById(wrkMast); if (locMast.getLocSts().equals("O")){ locMast.setLocSts("S"); // S.入库预约 locMast.setModiTime(new Date()); if (!locMastService.updateById(locMast)){ log.error("站点:{},任务号{}:改变库位{}状态{}失败",1050,wrkNo,locMast.getLocNo(),locMast.getLocSts()); } } else { log.error("站点:{},任务号{}:目标库位:{}已被占用",1050,wrkNo,locMast.getLocNo()); } } } } }