| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | |
| | | import com.zy.asrs.entity.result.StockVo; |
| | | import com.zy.asrs.mapper.TagMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.utils.MatUtils; |
| | | import com.zy.asrs.utils.PostMesDataUtils; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.model.enums.WorkNoType; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.NodeUtils; |
| | | import com.zy.common.web.WcsController; |
| | | import com.zy.common.web.param.SearchLocParam; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private WaitPakinService waitPakinService; |
| | | @Autowired |
| | | private CommonService commonService; |
| | | @Autowired |
| | | private LocDetlRullUpDetailService locDetlRullUpDetailService; |
| | | @Autowired |
| | | private WrkDetlSingleService wrkDetlSingleService; |
| | | @Autowired |
| | | private WrkMastStaService wrkMastStaService; |
| | | @Autowired |
| | | private WrkMastStaLogService wrkMastStaLogService; |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | LabellerMatParam labellerMatParam = new LabellerMatParam(); |
| | | labellerMatParam.setDevNo(param.getDevNo()); |
| | | labellerMatParam.setLabNo(param.getLabNo()); |
| | | ArrayList<LabellerMatParam.CombMat> combMats = new ArrayList<>(); |
| | | String orderNo = ""; |
| | | labellerMatParam.setWrkNo(basDevp.getWrkNo().toString()); |
| | | // ArrayList<LabellerMatParam.CombMat> combMats = new ArrayList<>(); |
| | | ArrayList<LabellerMatParam.BoxNo> boxNos = new ArrayList<>(); |
| | | // String orderNo = ""; |
| | | |
| | | for (WrkDetl wrkDetl:wrkDetls){ |
| | | LabellerMatParam.CombMat combMat = new LabellerMatParam.CombMat(wrkDetl); |
| | | orderNo=wrkDetl.getOrderNo(); |
| | | combMat.setTemp1("1"); |
| | | combMats.add(combMat); |
| | | LabellerMatParam.BoxNo boxNo = new LabellerMatParam.BoxNo(); |
| | | boxNo.setBoxNo(wrkDetl.getBatch()); |
| | | boxNos.add(boxNo); |
| | | } |
| | | labellerMatParam.setBoxNos(boxNos); |
| | | // for (WrkDetl wrkDetl:wrkDetls){ |
| | | // LabellerMatParam.CombMat combMat = new LabellerMatParam.CombMat(wrkDetl); |
| | | // orderNo=wrkDetl.getOrderNo(); |
| | | // combMat.setTemp1("1"); |
| | | // combMats.add(combMat); |
| | | // } |
| | | |
| | | labellerMatParam.setCombMats(combMats); |
| | | labellerMatParam.setLabellingTime(DateUtils.convert(new Date())); |
| | | labellerMatParam.setWrkNo(basDevp.getWrkNo().toString()); |
| | | labellerMatParam.setLabTemplate("1"); |
| | | labellerMatParam.setOrderNo(orderNo); |
| | | // labellerMatParam.setCombMats(combMats); |
| | | // labellerMatParam.setLabellingTime(DateUtils.convert(new Date())); |
| | | // labellerMatParam.setLabTemplate("1"); |
| | | // labellerMatParam.setOrderNo(orderNo); |
| | | wrkMast.setWrkSts(53L); |
| | | if (!wrkMastService.updateById(wrkMast)){ |
| | | throw new CoolException("异常,请重新申请"); |
| | |
| | | |
| | | if (param.getLabResult().equals("OK")){ |
| | | wrkMast.setWrkSts(54L); |
| | | wrkMast.setStaNo(144); |
| | | if (!wrkMastService.updateById(wrkMast)){ |
| | | throw new CoolException("异常,请重新申请"); |
| | | } |
| | | }else if (param.getLabResult().equals("NG")){ |
| | | wrkMast.setWrkSts(52L); |
| | | wrkMast.setWrkSts(52L);//重新贴标 |
| | | if (!wrkMastService.updateById(wrkMast)){ |
| | | throw new CoolException("异常,请重新申请"); |
| | | } |
| | |
| | | * */ |
| | | @Override |
| | | @Transactional |
| | | public void palletizingComplete(PalletizingCompleteParam param) { |
| | | public void palletizingComplete(PalletizingCompleteParam2 param) { |
| | | Long userId = 7777L;//中控 |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | |
| | | ArrayList<String> positions = new ArrayList<>(); //木箱位置查重 (orgin) |
| | | ArrayList<String> boxNos = new ArrayList<>(); //木箱唯一编码查重 (batch) |
| | | //判断matLists参数 |
| | | for (PalletizingCompleteParam.MatList matList:param.getMatLists()){ |
| | | for (PalletizingCompleteParam2.MatList matList:param.getMatLists()){ |
| | | if (Cools.isEmpty(matList.getMatnr())){ |
| | | throw new CoolException("参数:物料编码 matnr为空"); |
| | | }else if (Cools.isEmpty(matList.getPosition())){ |
| | |
| | | |
| | | |
| | | Date now = new Date(); |
| | | for (PalletizingCompleteParam.MatList matList:param.getMatLists()){ |
| | | for (PalletizingCompleteParam2.MatList matList:param.getMatLists()){ |
| | | long rollUp = new Date().getTime(); |
| | | Mat mat = matService.selectByMatnr(matList.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | | throw new CoolException(matList.getMatnr() + "商品档案不存在"); |
| | |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | waitPakin.setRollUp(rollUp); |
| | | if (!Cools.isEmpty(matList.getMatDetlList())){ |
| | | for (PalletizingCompleteParam2.MatDetlList matDetlList:matList.getMatDetlList()){ |
| | | LocDetlRullUpDetail locDetlRullUpDetail = new LocDetlRullUpDetail(); |
| | | locDetlRullUpDetail.setUuid(rollUp); |
| | | locDetlRullUpDetail.setRollNo(matDetlList.getBoxNoDetl()); |
| | | locDetlRullUpDetail.setRollWeight(matDetlList.getWeightDetl().toString()); |
| | | locDetlRullUpDetailService.insert(locDetlRullUpDetail); |
| | | } |
| | | } |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /* |
| | | * 松盛(1楼):码垛完成下发入库信息 |
| | | * */ |
| | | @Override |
| | | @Transactional |
| | | public void palletizingCompleteS(PalletizingCompleteParam param) { |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码 barcode为空"); |
| | | } |
| | | |
| | | WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); |
| | | if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts()!=2){ |
| | | log.error("退库码垛完成,返回托盘码未查询到工作档案!"); |
| | | throw new CoolException("参数:托盘码 barcode未查询到工作档案"); |
| | | } |
| | | wrkMast.setSheetNo("4"); |
| | | wrkMastService.updateById(wrkMast); |
| | | } |
| | | |
| | | |
| | | /* |
| | | *中控:出库完成月台相关 |
| | | * */ |
| | | @Override |
| | | @Transactional |
| | | public void balconyComplete(LabellerMatParam param) { |
| | | if (Cools.isEmpty(param.getWrkNo())){ |
| | | throw new CoolException("工作号为空!"); |
| | | } |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", param.getWrkNo())); |
| | | if (Cools.isEmpty(wrkMast)){ |
| | | throw new CoolException("工作号为空!"); |
| | | } |
| | | wrkMast.setWrkSts(57L); |
| | | wrkMastService.updateById(wrkMast); |
| | | } |
| | | |
| | | /* |
| | |
| | | public void singleUnstackingComplete(SingleUnstackingCompleteParam param) { |
| | | Long userId = 8888L;//桁架上位软件 |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码 barcode为空"); |
| | | }else if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | }else if (Cools.isEmpty(param.getMatLists()) || param.getMatLists().size()==0){ |
| | | }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size()==0){ |
| | | throw new CoolException("参数:物料明细 matLists为空"); |
| | | } |
| | | WrkMast wrkMastMatrix = wrkMastService.selectByBarcode(param.getBarcode()); |
| | | if (Cools.isEmpty(wrkMastMatrix)){ |
| | | throw new CoolException("参数:托盘码查询工作档失败:"+param.getBarcode()); |
| | | } |
| | | |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNoUnstacking(wrkMastMatrix.getWrkNo()); |
| | | ArrayList<WrkDetl> wrkDetlsNew = new ArrayList<>(); |
| | | ArrayList<WrkDetlSingle> wrkDetlsOld = new ArrayList<>(); |
| | | //判断matLists参数 |
| | | for (SingleUnstackingCompleteParam.MatList matList:param.getMatLists()){ |
| | | for (SingleUnstackingCompleteParam.MatList matList:param.getMatList()){ |
| | | if (Cools.isEmpty(matList.getPosition())){ |
| | | throw new CoolException("参数:码垛位置 position为空"); |
| | | }else if (Cools.isEmpty(matList.getBoxNo())){ |
| | | throw new CoolException("参数:木箱编号 boxNo为空"); |
| | | } |
| | | List<WrkDetlSingle> wrkDetlSingles = wrkDetlSingleService.selectList(new EntityWrapper<WrkDetlSingle>().eq("batch", matList.getBoxNo())); |
| | | boolean sign=true; |
| | | for (WrkDetl wrkDetl:wrkDetls){ |
| | | if (wrkDetl.getBatch().equals(matList.getBoxNo())){//木箱编码 |
| | | wrkDetl.setInspect(1); |
| | | wrkDetlService.update(wrkDetl,new EntityWrapper<WrkDetl>().eq("batch",wrkDetl.getBatch())); |
| | | for (WrkDetlSingle wrkDetlSingle:wrkDetlSingles){ |
| | | if (wrkDetlSingle.getBatch().equals(matList.getBoxNo())){//木箱编码 |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(wrkDetlSingle); |
| | | wrkDetlsNew.add(wrkDetl); |
| | | wrkDetlsOld.add(wrkDetlSingle); |
| | | sign=false; |
| | | break; |
| | | } |
| | |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(51L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(202); // 入出库状态:202.拆垛后出库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setIoPri(99D); // 优先级 |
| | | wrkMast.setSourceStaNo(param.getDevNo$()); |
| | | wrkMast.setStaNo(140); //贴标站点 |
| | | wrkMast.setStaNo(144); //贴标站点 直接到尾端 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setAppeTime(now); |
| | |
| | | } |
| | | } |
| | | |
| | | for (WrkDetlSingle wrkDetlSingle : wrkDetlsOld) { |
| | | wrkDetlSingleService.delete(new EntityWrapper<WrkDetlSingle>() |
| | | .eq("batch",wrkDetlSingle.getBatch()) |
| | | .eq("wrk_no",wrkDetlSingle.getWrkNo()) |
| | | .eq("io_time",wrkDetlSingle.getIoTime())); |
| | | } |
| | | |
| | | } |
| | | |
| | | /* |
| | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码 barcode为空"); |
| | | }else if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | } |
| | | // else if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | // throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | // } |
| | | WrkMast wrkMastMatrix = wrkMastService.selectByBarcode(param.getBarcode()); |
| | | if (Cools.isEmpty(wrkMastMatrix)){ |
| | | throw new CoolException("参数:托盘码查询工作档失败:"+param.getBarcode()); |
| | | }else { |
| | | if (!wrkMastMatrix.getIoType().equals(101)){ |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNoUnstacking(wrkMastMatrix.getWrkNo()); |
| | | if (Cools.isEmpty(param.getMatLists()) || param.getMatLists().size()==0 || param.getMatLists().size()!=wrkDetls.size()){ |
| | | throw new CoolException("返回物料明细数为"+param.getMatLists().size()+",托盘码:"+param.getBarcode()+"应剩余物料数:"+wrkDetls.size()); |
| | | } |
| | | |
| | | ArrayList<String> orgin = new ArrayList<>(); |
| | | //判断matLists参数 |
| | | for (SingleMountUnstackingCompleteParam.MatList matList : param.getMatLists()){ |
| | | if (Cools.isEmpty(matList.getPosition())){ |
| | | throw new CoolException("参数:码垛位置 position为空"); |
| | | }else if (Cools.isEmpty(matList.getBoxNo())){ |
| | | throw new CoolException("参数:木箱编号 boxNo为空"); |
| | | } |
| | | if (!orgin.contains(matList.getPosition())){ |
| | | orgin.add(matList.getPosition()); |
| | | }else { |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBoxNo()+",木箱位置存在重复"); |
| | | } |
| | | boolean sign=true; |
| | | for (WrkDetl wrkDetl:wrkDetls){ |
| | | if (wrkDetl.getBatch().equals(matList.getBoxNo())){//木箱编码 |
| | | wrkDetl.setOrigin(matList.getPosition()); |
| | | wrkDetlService.update(wrkDetl,new EntityWrapper<WrkDetl>().eq("batch",wrkDetl.getBatch())); |
| | | sign=false; |
| | | break; |
| | | } |
| | | } |
| | | if (sign){ |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBoxNo()+"未查询到对应的工作明细!"); |
| | | } |
| | | } |
| | | } |
| | | // if (wrkMastMatrix.getIoType().equals(103)){ |
| | | // List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNoUnstacking(wrkMastMatrix.getWrkNo()); |
| | | // if (Cools.isEmpty(param.getMatLists()) || param.getMatLists().size()==0 || param.getMatLists().size()!=wrkDetls.size()){ |
| | | // throw new CoolException("返回物料明细数为"+param.getMatLists().size()+",托盘码:"+param.getBarcode()+"应剩余物料数:"+wrkDetls.size()); |
| | | // } |
| | | // |
| | | // ArrayList<String> orgin = new ArrayList<>(); |
| | | // //判断matLists参数 |
| | | // for (SingleMountUnstackingCompleteParam.MatList matList : param.getMatLists()){ |
| | | // if (Cools.isEmpty(matList.getPosition())){ |
| | | // throw new CoolException("参数:码垛位置 position为空"); |
| | | // }else if (Cools.isEmpty(matList.getBoxNo())){ |
| | | // throw new CoolException("参数:木箱编号 boxNo为空"); |
| | | // } |
| | | // if (!orgin.contains(matList.getPosition())){ |
| | | // orgin.add(matList.getPosition()); |
| | | // }else { |
| | | // throw new CoolException("参数:木箱编号 boxNo:"+matList.getBoxNo()+",木箱位置存在重复"); |
| | | // } |
| | | // boolean sign=true; |
| | | // for (WrkDetl wrkDetl:wrkDetls){ |
| | | // if (wrkDetl.getBatch().equals(matList.getBoxNo())){//木箱编码 |
| | | // wrkDetl.setOrigin(matList.getPosition()); |
| | | // wrkDetlService.update(wrkDetl,new EntityWrapper<WrkDetl>().eq("batch",wrkDetl.getBatch())); |
| | | // sign=false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (sign){ |
| | | // throw new CoolException("参数:木箱编号 boxNo:"+matList.getBoxNo()+"未查询到对应的工作明细!"); |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | wrkMastMatrix.setSheetNo("1"); |
| | | wrkMastMatrix.setSheetNo("2"); |
| | | if (!wrkMastService.updateById(wrkMastMatrix)){ |
| | | throw new CoolException("更新工作档失败==》桁架上位软件:单托拆垛完成通知"); |
| | | } |
| | |
| | | @Override |
| | | @Transactional |
| | | public void cs1(String barcode) { |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 201)); |
| | | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(201)); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setBarcode(barcode); |
| | | wrkMast.setWrkSts(42L); |
| | | wrkMastService.insert(wrkMast); |
| | | BasDevp basDevp = basDevpService.selectById(216); |
| | | basDevp.setWrkNo(9992); |
| | | basDevp.setBarcode(barcode); |
| | | basDevpService.updateById(basDevp); |
| | | } |
| | | |
| | | /* |
| | |
| | | @Override |
| | | @Transactional |
| | | public void cs2() { |
| | | // int[] staNos =new int[]{122}; |
| | | // for (Integer staNo:staNos){ |
| | | // int[] crnNos =new int[]{6}; |
| | | // for (Integer crnNo:crnNos){ |
| | | // descSta(staNo,crnNo); |
| | | // } |
| | | // } |
| | | |
| | | } |
| | | |
| | | /* |
| | | private void descSta(Integer staNo,Integer crnNo){ |
| | | // int[] typeNos =new int[]{1,10,53,101,103,110}; |
| | | int[] typeNos =new int[]{10,110}; |
| | | for (Integer typeNo:typeNos){ |
| | | descSta3(staNo,crnNo,typeNo); |
| | | } |
| | | } |
| | | |
| | | private void descSta3(Integer staNo,Integer crnNo,Integer typeNo){ |
| | | StaDesc staDesc = new StaDesc(); |
| | | staDesc.setTypeNo(typeNo); |
| | | staDesc.setStnNo(staNo); |
| | | staDesc.setCrnNo(crnNo); |
| | | staDesc.setCrnStn(CrnNoRC(crnNo,staDesc.getTypeNo()>100)); |
| | | descSta2(staDesc); |
| | | } |
| | | |
| | | private void descSta2(StaDesc staDesc){ |
| | | Date now = new Date(); |
| | | //入库 |
| | | int sameRes = staDescService.selectCount(new EntityWrapper<StaDesc>() |
| | | .eq("type_no", staDesc.getTypeNo()) |
| | | .eq("stn_no", staDesc.getStnNo()) |
| | | .eq("crn_no", staDesc.getCrnNo()) |
| | | .eq("crn_stn", staDesc.getCrnStn())); |
| | | if (sameRes == 0) { |
| | | staDesc.setModiUser(9527L); |
| | | staDesc.setModiTime(now); |
| | | staDesc.setAppeUser(9527L); |
| | | staDesc.setAppeTime(now); |
| | | staDescService.insert(staDesc); |
| | | } |
| | | } |
| | | |
| | | private Integer CrnNoRC(Integer crnNo,boolean sign){ |
| | | Integer crnStn = 0; |
| | | switch (crnNo){ |
| | | case 1: |
| | | crnStn = 102; |
| | | break; |
| | | case 2: |
| | | crnStn = 105; |
| | | break; |
| | | case 3: |
| | | crnStn = 108; |
| | | break; |
| | | case 4: |
| | | crnStn = 111; |
| | | break; |
| | | case 5: |
| | | crnStn = 114; |
| | | break; |
| | | case 6: |
| | | crnStn = 117; |
| | | break; |
| | | } |
| | | if (sign){ |
| | | return crnStn-2; |
| | | } |
| | | return crnStn; |
| | | } |
| | | |
| | | |
| | | /* |
| | | * |
| | | * */ |
| | | @Override |
| | | @Transactional |
| | | public void cs3() { |
| | | |
| | | //拆盘 |
| | | // WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),119); |
| | | // wrkMastSta1.setType(2); |
| | | // wrkMastSta1.setWrkType(2); |
| | | // wrkMastStaService.insert(wrkMastSta1); |
| | | // WrkMastSta wrkMastSta2 = new WrkMastSta(new Date(),121); |
| | | // wrkMastSta2.setType(2); |
| | | // wrkMastSta2.setWrkType(2); |
| | | // wrkMastStaService.insert(wrkMastSta2); |
| | | } |
| | | |
| | | /*...........................上饶江铜..............以上.............徐工汉云...........................*/ |