| | |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.param.MobileAdjustParam; |
| | | import com.zy.asrs.entity.param.OffSaleParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakinParam; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.mapper.ManLocDetlMapper; |
| | | import com.zy.asrs.mapper.MatMapper; |
| | | import com.zy.asrs.mapper.OrderDetlMapper; |
| | | 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.LocTypeDto; |
| | | import com.zy.common.model.MesCombParam; |
| | | import com.zy.common.model.StartupDto; |
| | | 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 javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 移动端服务核心类 |
| | |
| | | @Service |
| | | public class MobileServiceImpl implements MobileService { |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | private MatService matService; |
| | | @Autowired |
| | | private MatMapper matMapper; |
| | | @Autowired |
| | | private WaitPakinService waitPakinService; |
| | | @Autowired |
| | |
| | | private ManLocDetlService manLocDetlService; |
| | | @Autowired |
| | | private ManLocDetlMapper manLocDetlMapper; |
| | | @Autowired |
| | | private DocTypeService docTypeService; |
| | | @Autowired |
| | | private LocDetlRullUpDetailService locDetlRullUpDetailService; |
| | | @Autowired |
| | | private TagService tagService; |
| | | @Autowired |
| | | private BasBoxTypeService basBoxTypeService; |
| | | @Autowired |
| | | private WrkMastLogService wrkMastLogService; |
| | | |
| | | @Resource |
| | | private OpenServiceImpl openServiceImpl; |
| | | |
| | | @Resource |
| | | private OrderDetlMapper orderDetlMapper; |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void trussComb(TrussCombParam param, Long userId) { |
| | | Date now = new Date(); |
| | | if (param.getSouSta()==145){ |
| | | param.setBarcode(String.valueOf(now.getTime())); |
| | | }else { |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码为空"); |
| | | } |
| | | } |
| | | param.setPalletizingNo(147); |
| | | |
| | | |
| | | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:原站点编号为空"); |
| | | }else if (param.getSouSta()==145 && param.getMatList().size() != 1){ |
| | | throw new CoolException("参数:物料明细 matLists为空 或者 大于1个明细"); |
| | | }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size() > 2){ |
| | | throw new CoolException("参数:物料明细 matLists为空 或者 大于2个明细"); |
| | | } |
| | | |
| | | String matnr = null; |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | for (TrussCombParam.MatList matList:param.getMatList()){ |
| | | long rollUp = new Date().getTime(); |
| | | Mat mat = matService.selectByMatnr(matList.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | | throw new CoolException(matList.getMatnr() + "商品档案不存在"); |
| | | } |
| | | matnr = mat.getMatnr(); |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setModel(matList.getModel()); //批次 |
| | | waitPakin.setSpecs(matList.getSpecs()); //规格 |
| | | waitPakin.setBatch(matList.getBatch()); //木箱编码 |
| | | waitPakin.setBrand(param.getBoxType()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setOrigin(matList.getPosition()); //木箱在托盘上的位置 |
| | | waitPakin.setIoStatus("N"); // 入出状态 |
| | | waitPakin.setAnfme((double)matList.getAnfme()); // 木箱中铜箔数量 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | waitPakin.setRollUp(rollUp); |
| | | if (!Cools.isEmpty(matList.getMatDetlList())){ |
| | | for (TrussCombParam.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("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, param.getSouSta(), matnr,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setRollUp(waitPakin.getRollUp()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | }); |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)){ |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo()+"目标库位已被占用"); |
| | | } |
| | | } |
| | | |
| | | //wms入库组托 退库单退库组托 |
| | | @Override |
| | | @Transactional |
| | | public void trussCombOrder(TrussCombParam param, Long userId) { |
| | | Date now = new Date(); |
| | | param.setBarcode(String.valueOf(now.getTime())); |
| | | param.setPalletizingNo(147); |
| | | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | }else if (Cools.isEmpty(param.getOrderNo())){ |
| | | throw new CoolException("参数:退货单单号 orderNo为空"); |
| | | }else if (Cools.isEmpty(param.getMatList())){ |
| | | throw new CoolException("参数:物料明细 matLists为空"); |
| | | } |
| | | |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (Cools.isEmpty(order) || order.getSettle() > 2) { |
| | | throw new CoolException("单据编号已过期,单号:"+param.getOrderNo()); |
| | | } |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (Cools.isEmpty(docType) || !docType.getDocName().equals("退货入库单")){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+"不是退货入库单"); |
| | | } |
| | | |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){ |
| | | throw new CoolException("未查询到此订单明细,单号:"+param.getOrderNo()); |
| | | } |
| | | List<String> orderBoxNoList = new ArrayList<>(); |
| | | for (OrderDetl orderDetl: orderDetls){ |
| | | if (orderDetl.getWorkQty().equals(0.0)){ |
| | | orderBoxNoList.add(orderDetl.getBatch()); |
| | | } |
| | | } |
| | | if (orderBoxNoList.size()==0 || orderBoxNoList.size()<param.getMatList().size()){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+" 退货数量大于明细数量"); |
| | | } |
| | | List<String> matListBoxNoList = new ArrayList<>(); |
| | | for (TrussCombParam.MatList matList: param.getMatList()){ |
| | | if (!orderBoxNoList.contains(matList.getBatch())){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+" 箱号:"+matList.getBatch()+"不属于此订单或者已经入库"); |
| | | }else { |
| | | matListBoxNoList.add(matList.getBatch()); |
| | | } |
| | | } |
| | | List<OrderDetl> orderDetlList = new ArrayList<>(); |
| | | for (OrderDetl orderDetl: orderDetls){ |
| | | if (matListBoxNoList.contains(orderDetl.getBatch())){ |
| | | orderDetlList.add(orderDetl); |
| | | } |
| | | } |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | |
| | | String matnrSign = ""; |
| | | String brandSign = ""; |
| | | for (OrderDetl orderDetl:orderDetlList){ |
| | | if (Cools.isEmpty(orderDetl.getMatnr()) || Cools.isEmpty(orderDetl.getBrand())){ |
| | | throw new CoolException(orderDetl.getOrderNo() + "所选明细存在未知规格或者未知箱型,请维护数据!"); |
| | | } |
| | | if (matnrSign.equals("")){ |
| | | matnrSign = orderDetl.getMatnr(); |
| | | brandSign = orderDetl.getBrand(); |
| | | }else { |
| | | if (!matnrSign.equals(orderDetl.getMatnr())){ |
| | | throw new CoolException(orderDetl.getMatnr() + "请选择同一个规格的货物!!!"); |
| | | } |
| | | if (!brandSign.equals(orderDetl.getBrand())){ |
| | | throw new CoolException(orderDetl.getMatnr() + "请选择同一种箱型的货物!!!"); |
| | | } |
| | | } |
| | | } |
| | | Mat mat = matService.selectByMatnr(matnrSign); |
| | | if (Cools.isEmpty(mat)) { |
| | | throw new CoolException(matnrSign + "商品档案不存在"); |
| | | } |
| | | for (OrderDetl orderDetl:orderDetlList){ |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setOrderNo(order.getOrderNo()); // 单据编号 |
| | | waitPakin.setModel(orderDetl.getModel()); //批次 |
| | | waitPakin.setSpecs(orderDetl.getSpecs()); //规格 |
| | | waitPakin.setBatch(orderDetl.getBatch()); //木箱编码 |
| | | waitPakin.setBrand(orderDetl.getBrand()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setWeight(orderDetl.getWeight()); //净重 |
| | | waitPakin.setVolume(orderDetl.getVolume()); //毛重 |
| | | waitPakin.setPrice(orderDetl.getPrice()); //长度 |
| | | waitPakin.setSpecs(String.valueOf(orderDetl.getSpecs())); //接头 |
| | | waitPakin.setOrigin("1"); //木箱在托盘上的位置 |
| | | waitPakin.setIoStatus("Y"); // 入出状态 |
| | | waitPakin.setAnfme(orderDetl.getAnfme()); // 木箱中铜箔数量 |
| | | waitPakin.setWeight(orderDetl.getWeight()); // 木箱中铜箔净重 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | waitPakin.setZpallet(param.getBarcode()); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, 145, matnrSign,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setOrderNo(order.getOrderNo()); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setZpallet(param.getBarcode()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | }); |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)){ |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo()+"目标库位已被占用"); |
| | | } |
| | | // 修改订单作业数量 |
| | | if (!orderDetlService.increaseWorkQty(order.getId(), orderDetls.get(0).getMatnr(), orderDetls.get(0).getBatch(), orderDetls.get(0).getAnfme())) { |
| | | throw new CoolException("修改单据作业数量失败"); |
| | | } |
| | | orderService.updateSettle(order.getId(), 2L, userId); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void trussComb2Car(Integer staNo) { |
| | | if (staNo!=212){ |
| | | throw new CoolException("只允许212呼叫托盘"); |
| | | } |
| | | BasDevp basDevp = basDevpService.selectById(212); |
| | | if (!basDevp.getAutoing().equals("Y")){ |
| | | throw new CoolException("212站点不是自动"); |
| | | } else if (basDevp.getLoading().equals("Y")){ |
| | | throw new CoolException("212站点有物"); |
| | | } else if (basDevp.getWrkNo()!=0){ |
| | | throw new CoolException("212站点有工作号"); |
| | | } |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 212)); |
| | | if (!Cools.isEmpty(wrkMast1)){ |
| | | throw new CoolException("任务档案已存在!请等待..."); |
| | | } |
| | | int workNo = commonService.getWorkNo(6); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(61L); // 工作状态:61、等待空板 |
| | | wrkMast.setIoType(212); // 入出库状态:212.2楼212呼叫空板 |
| | | wrkMast.setIoPri(10D); // 优先级 |
| | | wrkMast.setStaNo(212); |
| | | wrkMast.setFullPlt("N"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void PalletizingCompleteTwoFloorParam(PalletizingCompleteTwoFloorParam param) { |
| | | Long userId = 7777L;//中控 |
| | | param.setPalletizingNo(212); |
| | | |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("io_type", 1).eq("wrk_sts", 1).eq("source_sta_no",212)); |
| | | if (!Cools.isEmpty(wrkMast1)){ |
| | | throw new CoolException("存在一笔工作档案,请先入库!"); |
| | | } |
| | | |
| | | //判断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.getBoxType())){ |
| | | throw new CoolException("参数:木箱类型 boxType为空"); |
| | | }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size()==0){ |
| | | throw new CoolException("参数:物料明细 matLists为空"); |
| | | } |
| | | |
| | | String matnrOne = "";//木箱相同位置 规格 matnr校验 1、左 |
| | | String matnrTwo = "";//木箱相同位置 规格 matnr校验 2、右 |
| | | ArrayList<String> boxNos = new ArrayList<>(); //木箱唯一编码查重 (batch) |
| | | //判断matLists参数 |
| | | for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){ |
| | | if (Cools.isEmpty(matList.getMatnr())){ |
| | | throw new CoolException("参数:规格 matnr为空"); |
| | | }else if (Cools.isEmpty(matList.getPosition())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:码垛位置 position为空"); |
| | | }else if (Cools.isEmpty(matList.getBatch())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:木箱编号 batch为空"); |
| | | }else if (Cools.isEmpty(matList.getModel())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷号 model为空"); |
| | | }else if (Cools.isEmpty(matList.getBatch())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:木箱编号 boxNo为空"); |
| | | }else if (Cools.isEmpty(matList.getWeight()) || matList.getWeight().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:净重 weight为空"); |
| | | }else if (Cools.isEmpty(matList.getRoughWeight()) || matList.getRoughWeight().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:毛重 roughWeight为空"); |
| | | }else if (Cools.isEmpty(matList.getRollExtent()) || matList.getRollExtent().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷长度 rollExtent为空"); |
| | | } |
| | | |
| | | if (matList.getPosition().equals("1")){//1、左 2、右 |
| | | if (!matnrOne.equals("")){ |
| | | if (!matnrOne.equals(matList.getMatnr())){ |
| | | throw new CoolException("木箱位置:"+matList.getPosition()+"存在不同规格卷信息"); |
| | | } |
| | | }else { |
| | | matnrOne=matList.getMatnr(); |
| | | } |
| | | }else if (matList.getPosition().equals("2")){ |
| | | if (!matnrTwo.equals("")){ |
| | | if (!matnrTwo.equals(matList.getMatnr())){ |
| | | throw new CoolException("木箱位置:"+matList.getPosition()+"存在不同规格卷信息"); |
| | | } |
| | | }else { |
| | | matnrTwo=matList.getMatnr(); |
| | | } |
| | | }else { |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBatch()+",木箱位置错误:"+matList.getPosition()); |
| | | } |
| | | |
| | | if (!boxNos.contains(matList.getBatch())){ |
| | | boxNos.add(matList.getBatch()); |
| | | }else { |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBatch()+",木箱编码存在重复"); |
| | | } |
| | | |
| | | if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("batch", matList.getBatch()))!=0 |
| | | || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("batch", matList.getBatch()))!=0 |
| | | || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("batch", matList.getBatch()))!=0){ |
| | | throw new CoolException("木箱编号:"+matList.getBatch()+"已存在,请勿重复入库"); |
| | | } |
| | | } |
| | | |
| | | if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()))!=0 |
| | | || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()))!=0 |
| | | || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()))!=0){ |
| | | throw new CoolException("托盘条码:"+param.getBarcode()+"已存在,请勿重复组托"); |
| | | } |
| | | |
| | | String matnr = null; |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | Date now = new Date(); |
| | | for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){ |
| | | Mat mat = matService.selectByMatnr(matList.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | | mat = new Mat(); |
| | | mat.setMatnr(matList.getMatnr()); |
| | | mat.setMaktx(matList.getMatnr()); |
| | | mat.setTagId(tagService.getTop().getId()); |
| | | mat.setBrand(param.getBoxType()); |
| | | mat.setCreateBy(userId); |
| | | mat.setCreateTime(now); |
| | | mat.setUpdateBy(userId); |
| | | mat.setUpdateTime(now); |
| | | mat.setStatus(1); |
| | | if (!matService.insert(mat)) { |
| | | throw new CoolException("规格添加失败,请联系管理员"); |
| | | } |
| | | } |
| | | matnr = matList.getMatnr(); |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setBatch(matList.getBatch()); //木箱编码 //批次 唯一值 箱号 |
| | | waitPakin.setModel(matList.getModel()); //卷号 唯一值 |
| | | waitPakin.setBrand(param.getBoxType()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setOrigin(matList.getPosition()); //木箱在托盘上的位置 |
| | | waitPakin.setWeight(matList.getWeight()); //净重 |
| | | waitPakin.setVolume(matList.getRoughWeight()); //毛重 |
| | | waitPakin.setPrice(matList.getRollExtent()); //长度 |
| | | waitPakin.setSpecs(String.valueOf(matList.getJoint())); //接头 |
| | | waitPakin.setIoStatus("Y"); // 入出状态 |
| | | waitPakin.setAnfme(matList.getAnfme()); // 数量 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, 212, matnr,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setZpallet(param.getBarcode()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | }); |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)){ |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo()+"目标库位已被占用"); |
| | | } |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void comb(CombParam param, Long userId) { |
| | | if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { |
| | | throw new CoolException(BaseRes.PARAM); |
| | | } |
| | | if(param.getCombMats().size()>1){ |
| | | 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())); |
| | | if (countLoc > 0 || countWrk > 0) { |
| | | throw new CoolException("工作档/库存条码数据已存在===>>" + 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()); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | |
| | | // 关联组托 |
| | | } else { |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (order.getSettle() > 2) { |
| | | if (Cools.isEmpty(order) || order.getSettle() > 2) { |
| | | throw new CoolException("单据编号已过期"); |
| | | } |
| | | // 生成入库通知档 |
| | |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeUser(userId); // 操作人员数据 |
| | | wrkMast.setSheetNo("0"); //徐工汉云拆垛标记:0: 初始 1: 未拆 2:已拆 3:已处理可下一步(转历史档) |
| | | if (wrkMast.getStaNo()<118 || wrkMast.getStaNo()>121){ |
| | | wrkMast.setSheetNo("3"); |
| | | } |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | |
| | | throw new CoolException(locDetl.getLocNo() + "库位不是在库状态"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R pakoutFhqr(PdckqrParam param) { |
| | | |
| | | // 获取工作档 |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode())); |
| | | if (wrkMast == null) { |
| | | throw new CoolException("工作档不存在:" + param.getBarcode()); |
| | | } |
| | | if (wrkMast.getWrkSts() != 20) { |
| | | throw new CoolException(wrkMast.getWrkNo() + ",工作档类型:" + wrkMast.getIoType() + "工作状态:" + wrkMast.getWrkSts() + ",不匹配"); |
| | | } |
| | | |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); |
| | | List<PdckqrParam.Material> materials = param.getMaterials(); |
| | | |
| | | boolean isFullyCancelled = compareAndCheckCancellation(wrkDetls, materials); |
| | | if (isFullyCancelled) { |
| | | // 复核确认,更新状态为15出库完成更新 |
| | | wrkMast.setWrkSts(14L); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else { |
| | | throw new CoolException("出口复核失败"); |
| | | } |
| | | return R.ok("出口复核成功"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R pdckqr(PdckqrParam param) { |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode())); |
| | | if (wrkMast == null) { |
| | | throw new CoolException("工作档不存在:" + param.getBarcode()); |
| | | } |
| | | if (wrkMast.getIoType() != 107 || wrkMast.getWrkSts() != 2) { |
| | | throw new CoolException(wrkMast.getWrkNo() + ":工作状态不匹配"); |
| | | } |
| | | |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); |
| | | List<PdckqrParam.Material> materials = param.getMaterials(); |
| | | |
| | | boolean isFullyCancelled = compareAndCheckCancellation(wrkDetls, materials); |
| | | // todo 两箱盘两箱需要确定位置没错 |
| | | |
| | | if (isFullyCancelled) { // 盘点物料确成功,工作档转换 盘点出库->盘点再入库,下发回库命令 |
| | | // 保存工作主档历史档 |
| | | if (!wrkMastLogService.save(wrkMast.getWrkNo())) { |
| | | throw new CoolException("保存工作主档历史档失败"); |
| | | } |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", wrkMast.getIoType() - 50) |
| | | .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站 |
| | | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | throw new CoolException("入库路径不存在"); |
| | | } |
| | | Date now = new Date(); |
| | | // 堆垛机站点(目标站) |
| | | Integer staNo = staDesc.getCrnStn(); |
| | | // 更新工作档数据状态 |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(14L); // 工作状态: 14.已出库未确认 |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | wrkMast.setModiTime(now); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | throw new CoolException("更新工作档数据状态失败"); |
| | | } |
| | | // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | locMast.setLocSts("Q"); |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("修改库位状态失败"); |
| | | } |
| | | |
| | | // 推送给gwcs执行命令 |
| | | openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),wrkMast.getStaNo(),wrkMast.getWrkNo(),wrkMast.getBarcode(),"盘点确认成功推送gwcs"); |
| | | |
| | | return R.ok("盘点确认成功"); |
| | | |
| | | } else { // 物料不一致 |
| | | // 不一致的处理处理方法:弹出调整界面 |
| | | |
| | | // 重新扫描实物上面的码进行调整 |
| | | // 实物在库存里面的地方清空,任务所在库存清空 |
| | | // 将实物和当前托盘位置和库位绑定 |
| | | // 一个木箱情况直接调整 |
| | | // 两个木箱出两个 都调整 |
| | | // 两个木箱出一个 调整一个 |
| | | // 工作档标记异常->回库 |
| | | |
| | | return R.error("盘点确认异常"); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R pdaWarehousingNow(PdaWarehousingNowParam param, Long userId) { |
| | | |
| | | String barcode = param.getBarcode(); |
| | | Integer sourceStaNo = param.getSourceStaNo(); |
| | | |
| | | int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); |
| | | if (zpalletCount > 0) { |
| | | throw new CoolException("库存托盘码已存在:" + barcode); |
| | | } |
| | | |
| | | int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode)); |
| | | if (barcodeCount > 0) { |
| | | throw new CoolException("工作档已存在该托盘码:" + barcode); |
| | | } |
| | | |
| | | Map<String, List<PdaWarehousingNowParam.Roll>> boxGroup = param.getBoxGroup(); |
| | | List<PdaWarehousingNowParam.Roll> leftPosList = boxGroup.get("左"); |
| | | List<PdaWarehousingNowParam.Roll> centrePosList = boxGroup.get("中"); |
| | | List<PdaWarehousingNowParam.Roll> rightPosList = boxGroup.get("右"); |
| | | |
| | | // 根据箱号获取包装组号 |
| | | List<String> boxNoList = leftPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()); |
| | | boxNoList.addAll(centrePosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList())); |
| | | boxNoList.addAll(rightPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList())); |
| | | Map<String, String> map = new HashMap<>(); |
| | | // if (boxNoList.size() > 0) { |
| | | // map = getPackageGroupNoByGwms(boxNoList); |
| | | // } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | // 根据源站点寻找库位 |
| | | StartupDto dto = commonService.getLocNo(1, sourceStaNo, locTypeDto,0); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:1.生成入库id |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(barcode); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(1); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setModiUser(userId); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | |
| | | for (PdaWarehousingNowParam.Roll roll: leftPosList) { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setMatnr(roll.getSpecs()); // 规格 |
| | | wrkDetl.setMaktx(roll.getSpecs()); //规格 |
| | | wrkDetl.setBatch(roll.getBoxNo()); // 箱号 |
| | | wrkDetl.setModel(roll.getRollNo()); // 卷号 |
| | | wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 |
| | | wrkDetl.setZpallet(barcode); // 托盘吗 |
| | | wrkDetl.setOrigin("左"); // 木箱在托盘位置 |
| | | wrkDetl.setWeight(roll.getNetWeight()); // 净重 |
| | | wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 |
| | | wrkDetl.setPrice(roll.getLength()); |
| | | wrkDetl.setSpecs(String.valueOf(roll.getSplices())); |
| | | wrkDetl.setAnfme(1.0); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setAppeUser(userId); |
| | | wrkDetl.setModiUser(userId); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | } |
| | | |
| | | for (PdaWarehousingNowParam.Roll roll: centrePosList) { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setMatnr(roll.getSpecs()); // 规格 |
| | | wrkDetl.setMaktx(roll.getSpecs()); //规格 |
| | | wrkDetl.setBatch(roll.getBoxNo()); // 箱号 |
| | | wrkDetl.setModel(roll.getRollNo()); // 卷号 |
| | | wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 |
| | | wrkDetl.setZpallet(barcode); // 托盘吗 |
| | | wrkDetl.setOrigin("中"); // 木箱在托盘位置 |
| | | wrkDetl.setWeight(roll.getNetWeight()); // 净重 |
| | | wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 |
| | | wrkDetl.setPrice(roll.getLength()); |
| | | wrkDetl.setSpecs(String.valueOf(roll.getSplices())); |
| | | wrkDetl.setAnfme(1.0); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setAppeUser(userId); |
| | | wrkDetl.setModiUser(userId); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | } |
| | | |
| | | for (PdaWarehousingNowParam.Roll roll: rightPosList) { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.setWrkNo(workNo); |
| | | wrkDetl.setMatnr(roll.getSpecs()); // 规格 |
| | | wrkDetl.setMaktx(roll.getSpecs()); //规格 |
| | | wrkDetl.setBatch(roll.getBoxNo()); // 箱号 |
| | | wrkDetl.setModel(roll.getRollNo()); // 卷号 |
| | | wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 包装组号 |
| | | wrkDetl.setZpallet(barcode); // 托盘吗 |
| | | wrkDetl.setOrigin("右"); // 木箱在托盘位置 |
| | | wrkDetl.setWeight(roll.getNetWeight()); // 净重 |
| | | wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 |
| | | wrkDetl.setPrice(roll.getLength()); |
| | | wrkDetl.setSpecs(String.valueOf(roll.getSplices())); |
| | | wrkDetl.setAnfme(1.0); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setAppeUser(userId); |
| | | wrkDetl.setModiUser(userId); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | } |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")){ |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)){ |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo()+"目标库位已被占用"); |
| | | } |
| | | |
| | | // 推送GWCS目标消息 |
| | | openServiceImpl.pushStaNoToGwcs(sourceStaNo,dto.getStaNo(),dto.getWorkNo(),barcode,"pda组托立即入库推送gwcs"); |
| | | return R.ok("入库启动成功"); |
| | | } |
| | | |
| | | @Override |
| | | public R pdaFxprk(FxprkParam param, Long userId) { |
| | | |
| | | // 根据包装组号获取到木箱卷信息 |
| | | List<String> groupNos = param.getBoxList().stream().map(FxprkParam.Box::getPackageGroupNo).collect(Collectors.toList()); |
| | | List<Mat> list = matService.selectList(new EntityWrapper<Mat>().in("brand", groupNos)); |
| | | if (list.isEmpty()) { |
| | | throw new CoolException("没有查询到该包装组号信息:" + param.getBoxList().toString()); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short) 1); |
| | | StartupDto dto = commonService.getLocNo(1, param.getPalletizingNo(), locTypeDto, 0); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:设备上走 |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(param.getPalletizingNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(1); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setAppeUser(userId); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | for (Mat obj : list) { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(obj); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setAnfme(1.0); |
| | | // 重新定位木箱位置 |
| | | for (FxprkParam.Box box :param.getBoxList()) { |
| | | if (box.getPackageGroupNo().equals(obj.getBrand())) { |
| | | if (!box.getBoxPos().equals(obj.getOrigin()) || !wrkDetl.getZpallet().equals(param.getBarcode())) { |
| | | wrkDetl.setOrigin(box.getBoxPos()); |
| | | wrkDetl.setZpallet(param.getBarcode()); |
| | | wrkDetl.setBarcode(param.getBarcode()); |
| | | matMapper.updateBoxPos(box.getPackageGroupNo(), box.getBoxPos(),param.getBarcode()); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | } |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")) { |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo() + "目标库位已被占用"); |
| | | } |
| | | |
| | | // 返回GWCS目标信息 |
| | | openServiceImpl.pushStaNoToGwcs(param.getPalletizingNo(), dto.getStaNo(), dto.getWorkNo(), param.getBarcode(),"二楼返修入库推送gwcs"); |
| | | |
| | | // 一楼反修品入库的木箱通过包装组号需给mes推送待判 |
| | | pushDpToMes(groupNos); |
| | | |
| | | return R.ok("入库成功"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public R pdtz(PdtzParam param) { |
| | | |
| | | String barcode = param.getBarcode(); |
| | | Integer palletizingNo = param.getPalletizingNo(); |
| | | List<PdtzParam.MatList> matList = param.getMatList(); |
| | | // 增加冗余字段,给mes推送时结构和入库保存一致 |
| | | for (PdtzParam.MatList matList1 : matList) { |
| | | matList1.setBarcode(barcode); |
| | | matList1.setPalletizingNo(palletizingNo); |
| | | } |
| | | |
| | | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode)); |
| | | LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); |
| | | |
| | | // 实物包装组号 |
| | | List<String> groups = matList.stream().map(PdtzParam.MatList::getPackageGroupNo).distinct().collect(Collectors.toList()); |
| | | |
| | | // 库存明细木箱位置集合 |
| | | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("zpallet", barcode)); |
| | | List<String> collect1 = locDetls.stream().map(LocDetl::getOrigin).distinct().collect(Collectors.toList()); |
| | | // 工作明细木箱位置集合 |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", barcode)); |
| | | List<String> collect2 = wrkDetls.stream().map(WrkDetl::getOrigin).distinct().collect(Collectors.toList()); |
| | | // 工作的包装组号 |
| | | List<String> wrkBrandlist = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList()); |
| | | // 工作订单明细 |
| | | List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("brand", wrkBrandlist)); |
| | | |
| | | Date now = new Date(); |
| | | |
| | | // 判断要调整的木箱所在位置关系 |
| | | if (collect1.size() == 0 || collect2.size() == 0){ |
| | | return R.parse(barcode+":任务库存异常!"); |
| | | } else if(collect1.size() == 2 && collect2.size() == 1) { // 2出1,都是单箱的 |
| | | if (matList.size() == 0) { // 实物是空 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // todo 标记异常,推送mes,回库 |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | kctzPushMes(jsonObject); |
| | | kctzReturn(wrkMast); |
| | | } else { // 实物不为空 |
| | | // 寻找实物的位置 |
| | | List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode)); |
| | | if (locDetls1.size() == 0) { // 实物无库存 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // 补充木箱位置 |
| | | matList.get(0).setBoxPos(collect2.get(0)); |
| | | // 把实物物料信息放入任务所在库位 |
| | | insertLocDetl(locMast.getLocNo(),barcode,matList); |
| | | // todo 标记异常,推送mes,回库 |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | jsonObject.put("insert",matList); |
| | | kctzPushMes(jsonObject); |
| | | kctzReturn(wrkMast); |
| | | }else { // 实物有库存 |
| | | List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList()); |
| | | return R.parse(brandList+"库存已存在,请先处理!"); |
| | | } |
| | | } |
| | | } else if(collect1.size() == 1 && collect2.size() == 1) { |
| | | if (matList.size() == 0) { // 实物为空 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // 完成这条盘点任务:更新订单完成数量,工作主档5 |
| | | for(WrkDetl wrkDetl:wrkDetls) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | } |
| | | if (locMast.getLocSts().equals("P")) { |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setSheetNo(""); |
| | | locMast.setIoTime(now); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | // 修改工作主档状态 |
| | | wrkMast.setWrkSts(5L); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | | // todo 标记异常,不回库,给gwcs下发去叠盘机命令,推送mes |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | kctzPushMes(jsonObject); |
| | | |
| | | // 推送给gwcs执行命令 |
| | | openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),3013,wrkMast.getWrkNo(),wrkMast.getBarcode(),"盘点异常调整后回叠盘机推送gwcs"); |
| | | } else { // 实物不为空 |
| | | // 寻找实物的位置 |
| | | List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode)); |
| | | if (locDetls1.size() == 0) { // 实物无库存 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // 补充木箱位置 |
| | | for (PdtzParam.MatList matList1:matList) { |
| | | matList1.setBoxPos(collect2.get(0)); |
| | | } |
| | | // 把实物物料信息放入任务所在库位 |
| | | insertLocDetl(locMast.getLocNo(),barcode,matList); |
| | | // todo 标记异常,回库,推送mes |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | jsonObject.put("insert",matList); |
| | | kctzPushMes(jsonObject); |
| | | |
| | | kctzReturn(wrkMast); |
| | | } else { // 实物有库存 |
| | | List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList()); |
| | | return R.parse(brandList+"库存已存在,请先处理!"); |
| | | } |
| | | } |
| | | } else if (collect1.size() == 2 && collect2.size() == 2) { |
| | | if (matList.size() == 0) { // 实物为空 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // 完成这条盘点任务:更新订单完成数量,工作主档5 |
| | | for(WrkDetl wrkDetl:wrkDetls) { |
| | | if (!Cools.isEmpty(wrkDetl.getOrderNo())) { |
| | | // 更新订单完成数量 |
| | | orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand()); |
| | | } |
| | | } |
| | | if (locMast.getLocSts().equals("P")) { |
| | | locMast.setLocSts("O"); |
| | | locMast.setBarcode(""); |
| | | locMast.setSheetNo(""); |
| | | locMast.setIoTime(now); |
| | | locMast.setModiTime(now); |
| | | locMastService.updateById(locMast); |
| | | } |
| | | // 修改工作主档状态 |
| | | wrkMast.setWrkSts(5L); |
| | | wrkMast.setModiTime(now); |
| | | wrkMastService.updateById(wrkMast); |
| | | |
| | | // todo 标记异常,推送mes,不回库,给gwcs下发去叠盘机命令 |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | jsonObject.put("insert",matList); |
| | | kctzPushMes(jsonObject); |
| | | |
| | | // 推送给gwcs执行命令 |
| | | openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),3013,wrkMast.getWrkNo(),wrkMast.getBarcode(),"盘点异常调整后回叠盘机推送gwcs"); |
| | | } else { // 实物不为空 |
| | | // 寻找实物的位置 |
| | | List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode)); |
| | | if (locDetls1.size() == 0) { // 实物无库存 |
| | | // 把该任务在库明细删除 |
| | | locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist)); |
| | | // 补充木箱位置 |
| | | matList.get(0).setBoxPos("左"); |
| | | matList.get(1).setBoxPos("右"); |
| | | // 把实物物料信息放入任务所在库位 |
| | | insertLocDetl(locMast.getLocNo(),barcode,matList); |
| | | // todo 标记异常,回库,推送mes |
| | | for(OrderDetl orderDetl:orderDetlList) { |
| | | orderDetl.setSource(1); |
| | | orderDetlMapper.updateById(orderDetl); |
| | | } |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("delete",wrkBrandlist); |
| | | jsonObject.put("insert",matList); |
| | | kctzPushMes(jsonObject); |
| | | |
| | | kctzReturn(wrkMast); |
| | | } else { // 实物有库存 |
| | | List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList()); |
| | | return R.parse(brandList+"库存已存在,请先处理!"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return R.ok("调整成功"); |
| | | } |
| | | |
| | | // 同步盘点异常调整结果给mes |
| | | void kctzPushMes(JSONObject jsonObject) { |
| | | // 接口请求结果 |
| | | boolean success = false; |
| | | // 接口记录空间名称 |
| | | String message = "同步盘点异常调整结果给mes"; |
| | | |
| | | // 构造请求体 |
| | | String body = jsonObject.toJSONString(); |
| | | String response = ""; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.MES_CC_IP_PORT) |
| | | .setPath(MesConstant.MES_CC_YCTZ_URL) |
| | | .setJson(body) |
| | | .build() |
| | | .doPost(); |
| | | if (!Cools.isEmpty(response)) { |
| | | JSONObject result = JSON.parseObject(response); |
| | | if (result.getInteger("code").equals(200)) { |
| | | success = true; |
| | | } |
| | | } else { |
| | | log.error(message + "失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_YCTZ_URL, body, response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error(message + "异常:{}", e); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | message, |
| | | MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_YCTZ_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | body, |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { |
| | | log.error("", e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 盘点异常回库 |
| | | @Transactional |
| | | public void kctzReturn(WrkMast wrkMast) { |
| | | if (!wrkMastLogService.save(wrkMast.getWrkNo())) { |
| | | throw new CoolException("保存工作主档历史档失败"); |
| | | } |
| | | // 获取目标站 |
| | | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() |
| | | .eq("type_no", wrkMast.getIoType() - 50) |
| | | .eq("stn_no", wrkMast.getStaNo()) |
| | | .eq("crn_no", wrkMast.getCrnNo()); |
| | | StaDesc staDesc = staDescService.selectOne(wrapper); |
| | | if (Cools.isEmpty(staDesc)) { |
| | | throw new CoolException("入库路径不存在"); |
| | | } |
| | | Date now = new Date(); |
| | | // 堆垛机站点(目标站) |
| | | Integer staNo = staDesc.getCrnStn(); |
| | | // 更新工作档数据状态 |
| | | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 |
| | | wrkMast.setWrkSts(14L); // 工作状态: 14.已出库未确认 |
| | | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 |
| | | wrkMast.setStaNo(staNo); // 目标站 |
| | | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 |
| | | wrkMast.setSourceLocNo(""); // 源库位清空 |
| | | wrkMast.setModiTime(now); |
| | | if (!wrkMastService.updateById(wrkMast)) { |
| | | throw new CoolException("更新工作档数据状态失败"); |
| | | } |
| | | // 修改库位状态 Q.拣料/盘点/并板再入库 |
| | | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); |
| | | locMast.setLocSts("Q"); |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("修改库位状态失败"); |
| | | } |
| | | |
| | | // 推送给gwcs执行命令 |
| | | openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),wrkMast.getStaNo(),wrkMast.getWrkNo(),wrkMast.getBarcode(),"盘点异常调整后推送gwcs"); |
| | | } |
| | | |
| | | /** |
| | | * 调整库存明细 |
| | | */ |
| | | @Transactional |
| | | void insertLocDetl(String locNo, String barcode, List<PdtzParam.MatList> matList) { |
| | | Date now = new Date(); |
| | | for (PdtzParam.MatList mat : matList) { |
| | | LocDetl locDetl = new LocDetl(); |
| | | locDetl.setBatch(""); |
| | | locDetl.setLocNo(locNo); |
| | | locDetl.setMatnr(mat.getSpecs()); // 规格 |
| | | locDetl.setMaktx(mat.getSpecs()); //规格 |
| | | locDetl.setUnit(mat.getBoxNo()); // 箱号 |
| | | locDetl.setModel(mat.getRollNo()); // 卷号 |
| | | locDetl.setBrand(mat.getPackageGroupNo()); // 包装组号 |
| | | locDetl.setZpallet(barcode); // 托盘码 |
| | | locDetl.setBarcode(barcode); |
| | | locDetl.setOrigin(mat.getBoxPos()); // 木箱在托盘位置 |
| | | locDetl.setColor(mat.getBoxType()); // 木箱类型 |
| | | locDetl.setManu(mat.getRollType()); // 管芯类型 |
| | | locDetl.setSku(mat.getWideInWidth()); // 实测宽幅 |
| | | locDetl.setItemNum(mat.getThickness()); // 生箔厚度 |
| | | locDetl.setManuDate(mat.getFqTime()); // 分切下料时间 |
| | | locDetl.setWeight(mat.getNetWeight()); // 净重 |
| | | locDetl.setVolume(mat.getGrossWeight()); // 毛重 |
| | | locDetl.setLength(mat.getLength()); // 长度 |
| | | locDetl.setSpecs(String.valueOf(mat.getSplices())); // 接头 |
| | | locDetl.setAnfme(1.0); |
| | | // wrkDetl.setThreeCode(null); // 通过mes或excel导入检测是否合格 0不合格,1 合格 |
| | | locDetl.setAppeTime(now); |
| | | locDetl.setModiTime(now); |
| | | locDetlService.insert(locDetl); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 一楼反修品入库的木箱通过包装组号需给mes推送待判 |
| | | */ |
| | | private void pushDpToMes(List<String> groupNos) { |
| | | boolean success = false; |
| | | // 获取请求头 |
| | | Map<String,Object> headers = new HashMap<>(); |
| | | headers.put("Content-Type","application/json;charset=UTF-8"); |
| | | |
| | | // 构造请求体 |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("groupNos", groupNos); |
| | | String body = jsonObject.toJSONString(); |
| | | |
| | | String response = ""; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.MES_CC_IP_PORT) |
| | | .setPath(MesConstant.MES_CC_DP_URL) |
| | | .setHeaders(headers) |
| | | .setJson(body) |
| | | .build() |
| | | .doGet(); |
| | | if (!Cools.isEmpty(response)) { |
| | | JSONObject jsonObject1 = JSONObject.parseObject(response); |
| | | int code = (int) jsonObject1.get("code"); |
| | | boolean state = jsonObject1.getBoolean("state"); |
| | | String msg = (String) jsonObject1.get("message"); |
| | | if (code == 200 && state) { |
| | | success = true; |
| | | } |
| | | throw new CoolException(msg); |
| | | } else { |
| | | log.error("返修品入库给mes推送待判失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT, body, response); |
| | | throw new CoolException("返修品入库给mes推送待判失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("返修品入库给mes推送待判异常:{}", e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "返修品入库给mes推送待判", |
| | | MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT, |
| | | null, |
| | | "127.0.0.1", |
| | | body, |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { |
| | | log.error("", e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private Map<String, String> getPackageGroupNoByGwms(List<String> boxNoList) { |
| | | Map<String, String> map = null; |
| | | Map<String, Object> headers = new HashMap<>(); |
| | | headers.put("Content-Type", "application/json;charset=UTF-8"); |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("boxNoList", JSONObject.toJSONString(boxNoList)); |
| | | String body = jsonObject.toJSONString(); |
| | | boolean success = false; |
| | | String response = ""; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.GWMS_IP_PORT) |
| | | .setPath(MesConstant.GWMS_GET_GROUP_NO_URL) |
| | | .setHeaders(headers) |
| | | .setJson(body) |
| | | .build() |
| | | .doPost(); |
| | | if (!Cools.isEmpty(response)) { |
| | | JSONObject jsonObject1 = JSONObject.parseObject(response); |
| | | int code = (int) jsonObject1.get("code"); |
| | | String msg = (String) jsonObject1.get("msg"); |
| | | if (code != 200) { |
| | | throw new CoolException(msg); |
| | | } |
| | | map = (Map<String, String>) jsonObject1.get("data"); |
| | | success = true; |
| | | |
| | | } else { |
| | | log.error("pda组托入库请求gwms接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("pda组托入库请求gwms接口异常,工作号:{},{}", boxNoList.toString(), e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "pda组托入库请求gwms接口", |
| | | MesConstant.URL + MesConstant.PAKIN_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | body, |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { |
| | | log.error("接口日志保存异常", e); |
| | | } |
| | | } |
| | | |
| | | if (map == null) { |
| | | throw new CoolException("请求gwcs查询包装组号异常"); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 比较两个集合的类的属性,相同则抵消,最后判断两个集合是否完全抵消 |
| | | */ |
| | | public boolean compareAndCheckCancellation(List<WrkDetl> list1, List<PdckqrParam.Material> list2) { |
| | | if (list1.size() != list2.size()) { |
| | | return false; // If lists are not of the same size, cancellation is not possible |
| | | } |
| | | |
| | | List<PdckqrParam.Material> remainingList2 = new ArrayList<>(list2); |
| | | |
| | | // Compare and cancel out elements |
| | | for (WrkDetl p1 : list1) { |
| | | boolean cancelled = false; |
| | | for (PdckqrParam.Material p2 : remainingList2) { |
| | | if (p1.getUnit().equals(p2.getBoxNo()) && p1.getModel().equals(p2.getRollNo())) { // 卷号和箱号相同 |
| | | remainingList2.remove(p2); |
| | | cancelled = true; |
| | | break; |
| | | } |
| | | } |
| | | if (!cancelled) { |
| | | return false; // If any element in list1 cannot be cancelled, return false |
| | | } |
| | | } |
| | | |
| | | return remainingList2.isEmpty(); // Return true if all elements in list1 were cancelled out |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public List<Map<String, Object>> boxTypeComb() { |
| | | EntityWrapper<BasBoxType> wrapper = new EntityWrapper<>(); |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | List<BasBoxType> basBoxTypes = basBoxTypeService.selectList(wrapper.orderBy("id",true)); |
| | | for (BasBoxType basBoxType : basBoxTypes){ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("boxType", basBoxType.getBoxType()); |
| | | map.put("boxSpecs", basBoxType.getBoxSpecs()); |
| | | result.add(map); |
| | | } |
| | | return result; |
| | | } |
| | | } |