|  |  |  | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | 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.task.core.ReturnT; | 
|---|
|  |  |  | import com.zy.asrs.utils.MatUtils; | 
|---|
|  |  |  | import com.zy.asrs.utils.PostMesDataUtils; | 
|---|
|  |  |  | 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.model.enums.WorkNoType; | 
|---|
|  |  |  | import com.zy.common.service.CommonService; | 
|---|
|  |  |  | import com.zy.common.utils.HttpHandler; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 移动端服务核心类 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MatService matService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MatMapper matMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WaitPakinService waitPakinService; | 
|---|
|  |  |  | @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 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<String> orderBoxNoList = new ArrayList<>(); | 
|---|
|  |  |  | for (OrderDetl orderDetl: orderDetls){ | 
|---|
|  |  |  | if (orderDetl.getWorkQty()==0){ | 
|---|
|  |  |  | if (orderDetl.getWorkQty().equals(0.0)){ | 
|---|
|  |  |  | orderBoxNoList.add(orderDetl.getBatch()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!orderBoxNoList.contains(matList.getBatch())){ | 
|---|
|  |  |  | throw new CoolException("单号:"+param.getOrderNo()+" 箱号:"+matList.getBatch()+"不属于此订单或者已经入库"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | matListBoxNoList.add(matList.getBoxNo()); | 
|---|
|  |  |  | matListBoxNoList.add(matList.getBatch()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<OrderDetl> orderDetlList = new ArrayList<>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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());  // 木箱中铜箔数量 | 
|---|
|  |  |  | 
|---|
|  |  |  | } else if (basDevp.getWrkNo()!=0){ | 
|---|
|  |  |  | throw new CoolException("212站点有工作号"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int workNo = 20211; | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", 20211)); | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(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"); | 
|---|
|  |  |  | throw new CoolException("规格:"+matList.getMatnr()+"、参数:毛重 roughWeight为空"); | 
|---|
|  |  |  | }else if (Cools.isEmpty(matList.getRollExtent()) || matList.getRollExtent().equals(0D)){ | 
|---|
|  |  |  | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷长度 rollExtent"); | 
|---|
|  |  |  | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷长度 rollExtent为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (matList.getPosition().equals("1")){//1、左  2、右 | 
|---|
|  |  |  | 
|---|
|  |  |  | }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 | 
|---|
|  |  |  | 
|---|
|  |  |  | waitPakin.setZpallet(param.getBarcode());   //托盘码 | 
|---|
|  |  |  | waitPakin.setOrigin(matList.getPosition()); //木箱在托盘上的位置 | 
|---|
|  |  |  | waitPakin.setWeight(matList.getWeight());  //净重 | 
|---|
|  |  |  | //            waitPakin.setRoughWeight(matList.getRoughWeight());  //毛重 | 
|---|
|  |  |  | //            waitPakin.setRollExtent(matList.getRollExtent());   //长度 | 
|---|
|  |  |  | waitPakin.setVolume(matList.getRoughWeight());  //毛重 | 
|---|
|  |  |  | waitPakin.setPrice(matList.getRollExtent());   //长度 | 
|---|
|  |  |  | waitPakin.setSpecs(String.valueOf(matList.getJoint()));   //接头 | 
|---|
|  |  |  | waitPakin.setIoStatus("Y");     // 入出状态 | 
|---|
|  |  |  | waitPakin.setAnfme(matList.getAnfme());  // 数量 | 
|---|
|  |  |  | waitPakin.setStatus("Y");    // 状态 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(GwmsGenerateInventoryDto param, Long userId) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(param,param.getMatList())) { | 
|---|
|  |  |  | throw new CoolException("请求参数不能为空:" + param); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(param.getBarcode())) { | 
|---|
|  |  |  | throw new CoolException("条码不能为空:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode())); | 
|---|
|  |  |  | if (zpalletCount > 0) { | 
|---|
|  |  |  | throw new CoolException("库存托盘码已存在:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode())); | 
|---|
|  |  |  | if (barcodeCount > 0) { | 
|---|
|  |  |  | throw new CoolException("工作档已存在该托盘码:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocTypeDto locTypeDto = new LocTypeDto(); | 
|---|
|  |  |  | locTypeDto.setLocType1((short) 1); | 
|---|
|  |  |  | int iotype = 1; | 
|---|
|  |  |  | if (Cools.isEmpty(param.getMatList())) { | 
|---|
|  |  |  | iotype = 10; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据源站点寻找库位 | 
|---|
|  |  |  | StartupDto dto = commonService.getLocNo(iotype, param.getPalletizingNo(), locTypeDto, 0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int workNo = dto.getWorkNo(); | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 生成工作档 | 
|---|
|  |  |  | WrkMast wrkMast = new WrkMast(); | 
|---|
|  |  |  | wrkMast.setWrkNo(workNo); | 
|---|
|  |  |  | wrkMast.setWhsType(1); // 返修入库标识 | 
|---|
|  |  |  | wrkMast.setIoTime(new Date()); | 
|---|
|  |  |  | wrkMast.setWrkSts(1L); // 工作状态:设备上走 | 
|---|
|  |  |  | wrkMast.setIoType(iotype); // 入出库状态: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.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setModiUser(userId); | 
|---|
|  |  |  | wrkMastService.insert(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(param.getMatList())) { | 
|---|
|  |  |  | List<GwmsGenerateInventoryDto.MatList> matList = param.getMatList(); | 
|---|
|  |  |  | List<String> groupNos = new ArrayList<>(); | 
|---|
|  |  |  | for (GwmsGenerateInventoryDto.MatList obj : matList) { | 
|---|
|  |  |  | WrkDetl wrkDetl = new WrkDetl(); | 
|---|
|  |  |  | wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | obj.getRolls().forEach(roll -> { | 
|---|
|  |  |  | wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | wrkDetl.setMatnr(roll.getSpecs()); // 规格 | 
|---|
|  |  |  | wrkDetl.setMaktx(roll.getSpecs()); //规格 | 
|---|
|  |  |  | wrkDetl.setUnit(roll.getBoxNo()); // 箱号 | 
|---|
|  |  |  | wrkDetl.setModel(roll.getRollNo()); // 卷号 | 
|---|
|  |  |  | wrkDetl.setBrand(obj.getPackageGroupNo()); // 包装组号 | 
|---|
|  |  |  | wrkDetl.setZpallet(param.getBarcode()); // 托盘码 | 
|---|
|  |  |  | wrkDetl.setBarcode(param.getBarcode()); | 
|---|
|  |  |  | wrkDetl.setOrigin(obj.getBoxPos()); // 木箱在托盘位置 | 
|---|
|  |  |  | wrkDetl.setColor(obj.getBoxType()); // 木箱类型 | 
|---|
|  |  |  | wrkDetl.setManu(obj.getRollType()); // 管芯类型 | 
|---|
|  |  |  | wrkDetl.setSku(obj.getWideInWidth()); // 实测宽幅 | 
|---|
|  |  |  | wrkDetl.setItemNum(obj.getThickness()); // 生箔厚度 | 
|---|
|  |  |  | wrkDetl.setManuDate(roll.getFqTime()); // 分切下料时间 | 
|---|
|  |  |  | wrkDetl.setWeight(roll.getNetWeight()); // 净重 | 
|---|
|  |  |  | wrkDetl.setVolume(roll.getGrossWeight()); // 毛重 | 
|---|
|  |  |  | wrkDetl.setLength(roll.getLength()); // 长度 | 
|---|
|  |  |  | wrkDetl.setSpecs(String.valueOf(roll.getSplices())); // 接头 | 
|---|
|  |  |  | wrkDetl.setAnfme(1.0); | 
|---|
|  |  |  | //                    wrkDetl.setThreeCode(null); // 通过mes或excel导入检测是否合格 0不合格,1 合格 | 
|---|
|  |  |  | //                    wrkDetl.setDeadWarn(); // 理货标识 0默认,1理货中,2理货完成w | 
|---|
|  |  |  | //                    wrkDetl.setInspect(); // 订单明细中用,标识备货的状态 0未备货,1备货中,2备货完成 | 
|---|
|  |  |  | //                    wrkDetl.setDanger(); // 订单明细中用,标识跨巷道移库 0未移库,1移库中,2移库完成 | 
|---|
|  |  |  | wrkDetl.setIoTime(now); | 
|---|
|  |  |  | wrkDetl.setAppeTime(now); | 
|---|
|  |  |  | wrkDetl.setAppeUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiTime(now); | 
|---|
|  |  |  | if (!wrkDetlService.insert(wrkDetl)) { | 
|---|
|  |  |  | throw new CoolException("保存工作明细失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | groupNos.add(obj.getPackageGroupNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 一楼反修品入库的木箱通过包装组号需给mes推送待判 | 
|---|
|  |  |  | pushDpToMes(groupNos); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新目标库位状态 | 
|---|
|  |  |  | 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() + "目标库位已被占用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 一楼返修入库推送mes做记录 | 
|---|
|  |  |  | //        pushFxrkToMes(param); 改为库存更新完成后上报 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 返回GWCS目标信息 | 
|---|
|  |  |  | openServiceImpl.pushStaNoToGwcs(param.getPalletizingNo(), dto.getStaNo(), dto.getWorkNo(), param.getBarcode(), "一楼返修入库推送gwcs"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok("反修入库成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R pdaBoxIn(BoxInParam param, Long userId) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(param.getBarcode())) { | 
|---|
|  |  |  | throw new CoolException("条码不能为空:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(param.getAnfme())) { | 
|---|
|  |  |  | throw new CoolException("请输入数量" + param.getAnfme()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(param.getMemo())) { | 
|---|
|  |  |  | throw new CoolException("请输入备注"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(param.getOld())) { | 
|---|
|  |  |  | throw new CoolException("请输入新旧" ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode())); | 
|---|
|  |  |  | if (zpalletCount > 0) { | 
|---|
|  |  |  | throw new CoolException("库存托盘码已存在:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode())); | 
|---|
|  |  |  | if (barcodeCount > 0) { | 
|---|
|  |  |  | throw new CoolException("工作档已存在该托盘码:" + param.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocTypeDto locTypeDto = new LocTypeDto(); | 
|---|
|  |  |  | locTypeDto.setLocType1((short) 1); | 
|---|
|  |  |  | int iotype = 1; //空箱 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据源站点寻找库位 | 
|---|
|  |  |  | StartupDto dto = commonService.getLocNo(iotype, 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(iotype); // 入出库状态: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("Y"); // 空板 | 
|---|
|  |  |  | wrkMast.setLinkMis("Y"); | 
|---|
|  |  |  | wrkMast.setCtnType(1); // 容器类型 | 
|---|
|  |  |  | // 操作人员数据 | 
|---|
|  |  |  | wrkMast.setAppeTime(now); | 
|---|
|  |  |  | wrkMast.setAppeUser(userId); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setModiUser(userId); | 
|---|
|  |  |  | wrkMastService.insert(wrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(param.getBatch())) { | 
|---|
|  |  |  | WrkDetl wrkDetl = new WrkDetl(); | 
|---|
|  |  |  | wrkDetl.setMatnr("空箱"); | 
|---|
|  |  |  | wrkDetl.setSuppCode(param.getOld()); | 
|---|
|  |  |  | wrkDetl.setAnfme(param.getAnfme()); | 
|---|
|  |  |  | wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | wrkDetl.setBatch(param.getBatch()); // 尺寸 | 
|---|
|  |  |  | wrkDetl.setZpallet(param.getBarcode()); // 托盘码 | 
|---|
|  |  |  | wrkDetl.setBarcode(param.getBarcode()); | 
|---|
|  |  |  | wrkDetl.setMemo(param.getMemo()); //备注 | 
|---|
|  |  |  | wrkDetl.setAnfme(param.getAnfme()); | 
|---|
|  |  |  | wrkDetl.setIoTime(now); | 
|---|
|  |  |  | wrkDetl.setAppeTime(now); | 
|---|
|  |  |  | wrkDetl.setAppeUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiUser(userId); | 
|---|
|  |  |  | 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"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok("空箱入库成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void pushFxrkToMes(GwmsGenerateInventoryDto param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (GwmsGenerateInventoryDto.MatList matList : param.getMatList()){ | 
|---|
|  |  |  | matList.setOutOrIn("in"); | 
|---|
|  |  |  | matList.setStockType("返修入库"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean success = false; | 
|---|
|  |  |  | // 获取请求头 | 
|---|
|  |  |  | Map<String,Object> headers = new HashMap<>(); | 
|---|
|  |  |  | headers.put("Content-Type","application/json;charset=UTF-8"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 构造请求体 | 
|---|
|  |  |  | String body = JSON.toJSONString(param); | 
|---|
|  |  |  | String response = ""; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(MesConstant.MES_CC_IP_PORT) | 
|---|
|  |  |  | .setPath(MesConstant.MES_CC_FXRK_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"); | 
|---|
|  |  |  | if (code == 200 && state) { | 
|---|
|  |  |  | success = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("返修入库推送mes记录失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL, body, response); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("返修入库推送mes记录异常:{}", e.getMessage()); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 保存接口日志 | 
|---|
|  |  |  | apiLogService.save( | 
|---|
|  |  |  | "返修入库推送mes记录", | 
|---|
|  |  |  | MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_FXRK_URL, | 
|---|
|  |  |  | null, | 
|---|
|  |  |  | "127.0.0.1", | 
|---|
|  |  |  | body, | 
|---|
|  |  |  | response, | 
|---|
|  |  |  | success | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("", e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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("调整成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R pdaFhhd(PdaDhhdParam param, Long userId) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String orderNo = param.getOrderNo(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Order order = orderService.selectByNo(orderNo); | 
|---|
|  |  |  | if (order == null) { | 
|---|
|  |  |  | return R.parse("单据编号不存在:" + orderNo); | 
|---|
|  |  |  | } else if (!order.getSettle().equals(4L)) { | 
|---|
|  |  |  | return R.parse("单据状态不为4.已完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | order.setSettle(5L); | 
|---|
|  |  |  | order.setUpdateBy(userId); | 
|---|
|  |  |  | order.setUpdateTime(new Date()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | public 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_DP_URL, 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_DP_URL, | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<Map<String, Object>> pdaGetMemo() { | 
|---|
|  |  |  | List<Integer> tagIds = Arrays.asList(7, 8,9); | 
|---|
|  |  |  | List<Map<String, Object>> raw = matMapper.getBoxMemoMap(tagIds); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 用 Map<String, List<String>> 分组 | 
|---|
|  |  |  | Map<String, List<String>> grouped = new HashMap<>(); | 
|---|
|  |  |  | for (Map<String, Object> row : raw) { | 
|---|
|  |  |  | String tagId = String.valueOf(row.get("tag_id")); | 
|---|
|  |  |  | String memo = String.valueOf(row.get("memo")); | 
|---|
|  |  |  | if (memo == null || "null".equalsIgnoreCase(memo)) continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | grouped.computeIfAbsent(tagId, k -> new ArrayList<>()).add(memo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 转成 List<Map<String, Object>> 结构返回 | 
|---|
|  |  |  | List<Map<String, Object>> result = new ArrayList<>(); | 
|---|
|  |  |  | for (Map.Entry<String, List<String>> entry : grouped.entrySet()) { | 
|---|
|  |  |  | Map<String, Object> item = new HashMap<>(); | 
|---|
|  |  |  | item.put("tagId", entry.getKey()); | 
|---|
|  |  |  | item.put("memos", entry.getValue()); | 
|---|
|  |  |  | result.add(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|