| | |
| | | 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; |
| | |
| | | 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.*; |
| | | |
| | | /** |
| | | * 移动端服务核心类 |
| | |
| | | private BasDevpService basDevpService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private WrkMastMapper wrkMastMapper; |
| | | |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | |
| | | if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { |
| | | throw new CoolException(BaseRes.PARAM); |
| | | } |
| | | if(param.getCombMats().size()>1){ |
| | | throw new CoolException("请提取一个商品,或者刷新重新组托!"); |
| | | if(param.getCombMats().stream().anyMatch(obj -> obj.getAnfme() == null || obj.getAnfme() == 0)){ |
| | | throw new CoolException("请检查入库物料数量"); |
| | | } |
| | | // 判断是否有相同条码的数据 |
| | | if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). |
| | |
| | | throw new CoolException(param.getBarcode() + "数据正在进行入库"); |
| | | } |
| | | |
| | | if(param.getBarcode().length()!=8){ |
| | | throw new CoolException("条码长度不是8位===>>" + param.getBarcode()); |
| | | } |
| | | if (param.getCombMats().size()>1){ |
| | | throw new CoolException("不允许混料===>>" + param.getBarcode()); |
| | | } |
| | | |
| | | int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",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(); |
| | |
| | | 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; |
| | |
| | | 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("空托盘出库成功"); |
| | | } |
| | | } |