自动化立体仓库 - WMS系统
pang.jiabao
2024-07-12 a3cc9390a3b2c30cf0d2a70926089e19c856b715
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -12,13 +12,14 @@
import com.zy.asrs.entity.param.OffSaleParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.CodeRes;
import com.zy.common.constant.MesConstant;
import com.zy.common.entity.Parameter;
import com.zy.common.model.DetlDto;
import com.zy.common.model.MesCombParam;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
@@ -26,10 +27,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.*;
/**
 * 移动端服务核心类
@@ -51,6 +49,9 @@
    private BasDevpService basDevpService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
@@ -85,6 +86,9 @@
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
        if(param.getCombMats().stream().anyMatch(obj -> obj.getAnfme() == null || obj.getAnfme() == 0)){
            throw new CoolException("请检查入库物料数量");
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
@@ -93,8 +97,16 @@
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0 || countwait > 0) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        //设置非null批号,
        for (CombParam.CombMat combMat : param.getCombMats()) {
            if (combMat.getBatch() == null){
                combMat.setBatch("");
            }
        }
        Date now = new Date();
@@ -106,6 +118,9 @@
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                detlDto.setModel(elem.getModel());
                detlDto.setSpecs(elem.getSpecs());
                detlDto.setManuDate(elem.getManuDate());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -139,7 +154,7 @@
        // 关联组托
        } else {
            Order order = orderService.selectByNo(param.getOrderNo());
            if (order.getSettle() > 2) {
            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                throw new CoolException("单据编号已过期");
            }
            // 生成入库通知档
@@ -619,4 +634,88 @@
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    public R manualCallEmptyTray(int stnNo, Long userId) {
        // 人工pda呼叫空托盘
        // 0.判断是否已存在该目标站点的空托盘出库任务,有则直接返回(状态不为15,或者为15但是任务号还在输送线上)
        List<WrkMast> wrkMasts = wrkMastMapper.queryEmptyOutLocWork(stnNo);
        if (!wrkMasts.isEmpty()) {
            throw new CoolException("已存在该站点空托盘出库任务:" + stnNo);
        }
        //1.根据出库站点去寻找空托盘库位,先找浅库位
        List<LocMast> locMasts = new ArrayList<>();
        EntityWrapper<LocMast> entityWrapper = new EntityWrapper<>();
        entityWrapper.eq("loc_sts","D").orderAsc(Arrays.asList("row1","lev1","bay1"));
        if (stnNo == 100) {
            entityWrapper.in("row1",2,3);
            locMasts = locMastService.selectList(entityWrapper);
            if (locMasts.isEmpty()) {
                entityWrapper.in("row1",1,4);
                locMasts = locMastService.selectList(entityWrapper);
            }
        } else if(stnNo == 102) {
            entityWrapper.in("row1",6,7);
            locMasts = locMastService.selectList(entityWrapper);
            if (locMasts.isEmpty()) {
                entityWrapper.in("row1",5,8);
                locMasts = locMastService.selectList(entityWrapper);
            }
        }
        if (locMasts.isEmpty()) {
            throw new CoolException("没有找到空托盘,站点:" + stnNo);
        }
        // 取第一个空库位
        LocMast locMast = locMasts.get(0);
        // 1.1.获取工作路径
        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", 110).eq("stn_no",
                stnNo).eq("crn_no", locMast.getCrnNo()));
        if (staDesc == null) {
            throw new CoolException("路径不存在");
        }
        Integer sourceStaNo = staDesc.getCrnStn();
        if (Cools.isEmpty(sourceStaNo)) {
            throw new CoolException("检索源站失败");
        }
        //2.生成空托盘出库工作档
        Date now = new Date();
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(commonService.getWorkNo(WorkNoType.PAKOUT.type));
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(110); // 入出库状态: 110.空板出库
        wrkMast.setIoPri(10D);
        wrkMast.setSourceStaNo(sourceStaNo); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
        wrkMast.setFullPlt("N"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("Y"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败");
        }
        // 3.更新库位状态 D.空板 -> R.出库预约
        if (locMast.getLocSts().equals("D")) {
            locMast.setLocSts("R");
            locMast.setModiUser(userId);
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("更新库位状态失败");
            }
        }
        return R.ok("空托盘出库成功");
    }
}