自动化立体仓库 - WMS系统
zyx
2023-11-20 58137d4f560dc16900ea99e0a7a07080b7751e5f
src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java
@@ -1,11 +1,13 @@
package com.zy.asrs.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
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.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import org.springframework.beans.BeanUtils;
@@ -13,10 +15,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
@Service
public class AutoReplenishmentHandler extends AbstractHandler<String> {
@@ -84,7 +83,10 @@
            //List<String> locNosSearch = locDetlService.selectLocNo(matnr);
            Set<String> locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode);
            for(String locNo : locNosSearch){
            //重新排序 并且检测该库位是否含没有料箱码的物料,如有有则不允许出库
            Set<String> resort = resort(locNosSearch);
            for(String locNo : resort){
                List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo);
                locNos.add(locNo);
                for (LocDetl locDetl :locDetls){
@@ -100,37 +102,44 @@
            }
        }
//        orderDetlList.forEach(orderDetl -> {
//
//            if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){
//                cont
//            }
//
//            String matnr = orderDetl.getMatnr();
//            Double orderAnfme = orderDetl.getAnfme();
//
//            List<String> locNosSearch = locDetlService.selectLocNo(matnr);
//
//            for(String locNo : locNosSearch){
//                List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo);
//                locNos.add(locNo);
//                for (LocDetl locDetl :locDetls){
//                    if(matnr.equals(locDetl.getMatnr())){
//                        orderAnfme -= locDetl.getAnfme();
//                    }
//                }
//                if(orderAnfme <= 0){
//                    orderDetl.setQty(orderDetl.getAnfme() - orderAnfme);
//                    orderDetlService.updateById(orderDetl);
//                    break;
//                }
//            }
//
//        });
        return locNos;
    }
    //根据深浅库位进行重新排序
    private Set<String> resort(Set<String> locNos){
        Set<String> locNosResort = new LinkedHashSet<>();
        for(String locNoSearch : locNos){
            LocMast locMast = locMastService.selectById(locNoSearch);
            if(!"F".equals(locMast.getLocSts())){
                continue;
            }
            List<String> groupOuterLoc = Utils.getGroupOuterLoc(locNoSearch);
            if(Cools.isEmpty(groupOuterLoc)){
                locNosResort.add(locNoSearch);
            }else {
                groupOuterLoc.add(locNoSearch);
                //如果是深库位,则先找外侧的库位
                for (String locNoOut : groupOuterLoc){
                    LocMast locMastOuter = locMastService.selectById(locNoOut);
                    //外侧如果是拣料,则内测不允许出
                    if("P".equals(locMastOuter.getLocSts()) || "Q".equals(locMastOuter.getLocSts()) || "S".equals(locMastOuter.getLocSts())){
                        break;
                    }
                    if(!"F".equals(locMastOuter.getLocSts())){
                        continue;
                    }
                    locNosResort.add(locNoOut);
                }
            }
        }
        return locNosResort;
    }
    private WrkMast createWrkMast(String locNo,String barCode,Date now){
        int ioType = 101;
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));