自动化立体仓库 - WMS系统
#
18516761980
2021-08-20 4d84a1d49dde503f7798c56205b83b11e85198a0
#
2个文件已添加
163 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/service/MatStoreService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MatStoreService.java
New file
@@ -0,0 +1,13 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.param.FullStoreParam;
public interface MatStoreService {
    /**
     * 全板入库
     * @return 库位号
     */
    String startupFullStore(FullStoreParam param, Long userId);
}
src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java
New file
@@ -0,0 +1,150 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.VersionUtils;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.ints.entity.WaitMatin;
import com.zy.ints.service.WaitMatinService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class MatStoreServiceImpl implements MatStoreService {
    // 工作号生成规则默认类型
    private static final int DEFAULT_WORK_NO_TYPE = 0;
    // 库位排号分配默认类别
    private static final int DEFAULT_ROW_NO_TYPE = 1;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private MatCodeService matCodeService;
    @Autowired
    private WaitMatinService matinService;
    @Override
    @Transactional
    public String startupFullStore(FullStoreParam param, Long userId) {
        // 参数非空判断
        if (Cools.isEmpty(param.getDevpNo(), param.getList())) {
            throw new CoolException(BaseRes.PARAM);
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getDevpNo(), true);
        // 生成工作号
        int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
        // 检索库位
        List<String> matNos = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatNo).distinct().collect(Collectors.toList());
        StartupDto startupDtodto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matNos, 0);
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(1L); // 工作状态:生成入库ID
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级:10
        wrkMast.setCrnNo(startupDtodto.getCrnNo());
        wrkMast.setSourceStaNo(startupDtodto.getSourceStaNo());
        wrkMast.setStaNo(startupDtodto.getStaNo());
        wrkMast.setLocNo(startupDtodto.getLocNo());
        wrkMast.setBarcode(param.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(new Date());
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(new Date());
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作主档失败");
        }
        // 生成工作档明细
        List<MatCodeCountDto> matDtos = new ArrayList<>();
        param.getList().forEach(elem -> {
            matDtos.add(new MatCodeCountDto(elem.getBillNo(),elem.getSeqNo(),elem.getMatNo(), elem.getCount()));
        });
        for (MatCodeCountDto dto : matDtos) {
            MatCode matCode = matCodeService.selectById(dto.getMatNo());
            if (Cools.isEmpty(matCode)){
                throw new CoolException("产品编码数据为空");
            }
            // 保持工作档明细
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(new Date());
            wrkDetl.setBillNo(dto.getBillNo());
            wrkDetl.setSeqNo(dto.getSeqNo());
            wrkDetl.setQty(dto.getCount()); // 数量
            VersionUtils.setWrkDetl(wrkDetl, matCode); // 版本控制
            wrkDetl.setZpallet(param.getBarcode()); // 托盘条码
            wrkDetl.setAppeUser(userId);
            wrkDetl.setAppeTime(new Date());
            wrkDetl.setModiUser(userId);
            wrkDetl.setModiTime(new Date());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细档失败");
            }
            else {
                //更新入库通知档
                WaitMatin waitMatin = matinService.selectOne(new EntityWrapper<WaitMatin>().eq("bill_no",dto.getBillNo()).eq("seq_no",dto.getSeqNo()));
                if(dto.getCount() > (waitMatin.getQty() - waitMatin.getInQty())){
                    throw new CoolException("入库数量超过了可入库量");
                }
                waitMatin.setIoStatus(1);//入库中
                waitMatin.setInQty(waitMatin.getInQty()+dto.getCount()); //已入库量
                waitMatin.setModiTime(new Date());
                if(!matinService.update(waitMatin,new EntityWrapper<WaitMatin>().eq("bill_no",dto.getBillNo()).eq("seq_no",dto.getSeqNo()))){
                    throw new CoolException("更新入库通知档失败");
                }
            }
        }
//        wrkDetlService.createWorkDetail(workNo, matDtos, param.getBarcode(), userId);
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiUser(userId);
        sourceStaNo.setModiTime(new Date());
        if (!basDevpService.updateById(sourceStaNo)){
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(startupDtodto.getLocNo());
        if (locMast.getLocSts().equals("O")){
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiUser(userId);
            locMast.setModiTime(new Date());
            if (!locMastService.updateById(locMast)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(startupDtodto.getLocNo()+"目标库位已被占用");
        }
        return startupDtodto.getLocNo();
    }
}