自动化立体仓库 - WMS系统
pjb
1 天以前 2ded9514aa9a93ee440af0b1437d788fb052028b
src/main/java/com/zy/asrs/task/MdqzScheduler.java
@@ -2,7 +2,11 @@
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;
@@ -11,6 +15,8 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author pang.jiabao
@@ -27,15 +33,60 @@
    @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<WrkMast>().eq("wrk_no", config.getValue()));
            if (wrkMast != null && wrkMast.getCtnType() == 0) {
                wrkMast.setCtnType(1);
                Integer wrkNo = wrkMast.getWrkNo();
                // 取新库位组的第一个库位
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O"));
                List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList());
                List<LocMast> 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<LocMast> locMastList = new ArrayList<>();
                for(LocMast locMast1:collect) {
                    Optional<LocMast> 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<WrkDetl>().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());
                }
            }
        }
    }