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 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 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().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().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(); } }