自动化立体仓库 - WMS系统
dubin
1 天以前 dd76858f35bb4fdd76d5976465e9bd96267b0f0b
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.mapper.BasDevpMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.*;
@@ -20,11 +21,14 @@
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.web.WcsController;
import com.zy.system.entity.User;
import com.zy.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -77,6 +81,11 @@
    private SlaveProperties slaveProperties;
    @Autowired
    private WaitPakinService waitPakinService;
    @Resource
    private BasDevpMapper basDevpMapper;
    @Resource
    private UserMapper userMapper;
    @Override
    @Transactional
@@ -91,7 +100,9 @@
        // 检索库位
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        List<String> matnrs = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatnr).distinct().collect(Collectors.toList());
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs, locTypeDto, 0);
        List<String> batchs = param.getList().stream().map(FullStoreParam.MatCodeStore::getBatch).distinct().collect(Collectors.toList());
//        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matnrs.get(0), batchs.get(0), null,locTypeDto);
        StartupDto dto = commonService.getLocNo(sourceStaNo,locTypeDto, 1);
        // 生成工作号
        int workNo = dto.getWorkNo();
        // 生成工作档
@@ -159,12 +170,52 @@
    public void startupFullTakeStore(StockOutParam param, Long userId) {
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取所有库位号集合
        List<String> locNos = param.getLocDetls().stream().map(StockOutParam.LocDetl::getLocNo).distinct().collect(Collectors.toList());
        // 浅库位标识
        boolean sign = false;
        // 提示信息
        String tips = "";
        /*
          判断如果是深库位,对应的浅库位不为空则不能出
         */
//        for (String locNo : locNos) {
//            if (sign) {
//                break;
//            }
//            List<String> groupOuterLoc = Utils.getGroupOuterLocNo(locNo);
//            if (!Cools.isEmpty(groupOuterLoc)) {
//                for (String outerLoc : groupOuterLoc) {
//                    if (locNos.contains(outerLoc)) {
//                        continue;
//                    }
//                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", outerLoc));
//                    if (locMast != null) {
//                        if (!locMast.getLocSts().equals("O") && !locMast.getLocSts().equals("R")) {
//                            sign = true;
//                            tips = "库位号:" + locNo + " 浅库位有非空库位!";
//                            break;
//                        }
//                    }
//                }
//            }
//        }
        if (sign) {
            throw new CoolException("出库失败;" + tips);
        }
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
                if (null != one) {
                    if (one.getFrozen() == 1)
                        throw new CoolException(one.getMatnr() + "【" + one.getBatch() + "】" + "已冻结");
                    locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
                }
            }
        }
        if (!locDetlDtos.isEmpty()) {
@@ -262,6 +313,8 @@
                wrkDetl.setAppeUser(userId);
                wrkDetl.setModiTime(now);
                wrkDetl.setModiUser(userId);
                wrkDetl.setSourceStaNo(wrkMast.getSourceStaNo());
                wrkDetl.setStaNo(wrkMast.getStaNo());
                if (!wrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作档明细失败");
                }
@@ -287,13 +340,14 @@
        Date now = new Date();
        List<LocDto> locDtos = taskDto.getLocDtos();
        for (LocDto locDto : locDtos) {
            // 任务的库位号不是这条明细的库位号并且任务的目标站点不是这条明细的目标站点
            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
                throw new CoolException("订单出库异常,请联系管理员");
            }
        }
        // 获取库位
        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
        // 获取路径
        // 获取路径,根据该出库任务的物料明细判断该库位是全板出库 还是捡料出库
        int ioType = taskDto.isAll() ? 101 : 103;
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
        // 生成工作号
@@ -369,9 +423,11 @@
    public String emptyPlateIn(Integer devpNo, Long userId) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        // 检索宽窄
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, locTypeDto, 0);
//        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null,null,null, locTypeDto);
        // 搜索库位
        StartupDto dto = commonService.getLocNo(sourceStaNo,locTypeDto,10);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
@@ -445,6 +501,9 @@
                    .eq("stn_no", param.getOutSite())
                    .eq("crn_no", locMast.getCrnNo());
            StaDesc staDesc = staDescService.selectOne(wrapper);
            if (staDesc == null) {
                throw new CoolException("路径不存在");
            }
            Integer sourceStaNo = staDesc.getCrnStn();
            if (Cools.isEmpty(sourceStaNo)) {
                throw new CoolException("检索源站失败");
@@ -588,6 +647,9 @@
        if (Cools.isEmpty(loc)){
            throw new CoolException("未找到库位");
        }
        if (loc.getLocNo().equals("N")){
            throw new CoolException("N.设备占用(禁止更改)");
        }
        if (!loc.getLocSts().equals("O") || (!sourceLoc.getLocSts().equals("F") && !sourceLoc.getLocSts().equals("D"))){
            throw new CoolException("库位状态已改变");
        }
@@ -687,6 +749,9 @@
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("修改工作档失败");
        }
        // 手动完成后,清空源站点上的工作号
        basDevpMapper.updateWorkNoById(wrkMast.getSourceStaNo());
    }
    @Override
@@ -818,6 +883,14 @@
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
        User user = userMapper.selectById(userId);
        if ("user".equals(user.getRolCode())) {
             if (!(wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 11)) {
                 throw new CoolException("该工作状态不可取消");
             }
        }
        String locNo = ""; // 待修改目标库位
        String locSts = ""; // 待修改目标库位状态
        // 入库取消(修改目标库位)
@@ -871,7 +944,8 @@
                    waitPakin.setIoStatus("N");
                    waitPakin.setLocNo("");
                    waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
                            .eq("order_no", waitPakin.getOrderNo())
//                            .eq("order_no", waitPakin.getOrderNo())
                            .eq("zpallet",waitPakin.getZpallet())
                            .eq("matnr", waitPakin.getMatnr())
                            .eq("batch", waitPakin.getBatch()));
                }
@@ -940,7 +1014,7 @@
        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
            // 保存工作明细档历史档
            if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
//                throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo());
                throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo());
            }
            // 删除工作档明细
            boolean wrkDetlRes = wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
@@ -1122,4 +1196,31 @@
        return targetLoc.getLocNo();
    }
    @Override
    @Transactional
    public void turnMatLocDetl(EmptyPlateOutParam param, Long userId) {
        Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("id", param.getMatId()));
        if (Cools.isEmpty(mat)){
            throw new CoolException("目标库位商品编码有误!");
        }
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", param.getLocDetls().get(0).getMatnr()));
        if (Cools.isEmpty(locDetls) || locDetls.size()<1){
            throw new CoolException("待修改商品无库存,无需修改!  品号:"+param.getLocDetls().get(0).getMatnr());
        }
        try {
            locDetlService.updateMatTurn(param.getLocDetls().get(0).getMatnr(),mat.getMatnr());
        }catch (Exception e){
            throw new CoolException("对数据库修改出错!");
        }
        for (LocDetl locDetl:locDetls){
            // 保存调整记录
            AdjDetl adjDetl = new AdjDetl();
            adjDetl.setLocNo(locDetl.getLocNo());
            adjDetl.setMatnr(mat.getMatnr());
            adjDetl.setMatnrOld(param.getLocDetls().get(0).getMatnr());
            adjDetl.setAdjQty(locDetl.getAnfme());
            adjDetlService.save(adjDetl, userId);
        }
    }
}