|  |  |  | 
|---|
|  |  |  | import com.core.common.SnowflakeIdWorker; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.EmptyPlateOutParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.FullStoreParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.LocDetlAdjustParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.StockOutParam; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.*; | 
|---|
|  |  |  | import com.zy.asrs.service.*; | 
|---|
|  |  |  | import com.zy.asrs.utils.Utils; | 
|---|
|  |  |  | import com.zy.common.model.*; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkDetlLogService wrkDetlLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SnowflakeIdWorker snowflakeIdWorker; | 
|---|
|  |  |  | private ManLocDetlService manLocDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderService orderService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | private SlaveProperties slaveProperties; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WaitPakinService waitPakinService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private LocOwnerService locOwnerService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(dto.getLocNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer outSta = staNo.getDevNo(); | 
|---|
|  |  |  | //2号堆垛机全板出库站指定为204站,拣料站指定为202 | 
|---|
|  |  |  | if(locMast.getCrnNo()==2){ | 
|---|
|  |  |  | outSta = ioType == 101 ? 204 : 202; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            //2号堆垛机全板出库站指定为204站,拣料站指定为202 | 
|---|
|  |  |  | //            if(locMast.getCrnNo()==2){ | 
|---|
|  |  |  | //                outSta = ioType == 101 ? 204 : 202; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取路径 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 生成工作档明细 | 
|---|
|  |  |  | for (LocDetlDto detlDto : dto.getLocDetlDtos()) { | 
|---|
|  |  |  | if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;} | 
|---|
|  |  |  | String uuid = String.valueOf(System.currentTimeMillis()); | 
|---|
|  |  |  | WrkDetl wrkDetl = new WrkDetl(); | 
|---|
|  |  |  | wrkDetl.sync(detlDto.getLocDetl()); | 
|---|
|  |  |  | wrkDetl.setOrderNo(""); // 手动出库不需要带出库存中的单据编号 | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkDetl.setAppeUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiTime(now); | 
|---|
|  |  |  | wrkDetl.setModiUser(userId); | 
|---|
|  |  |  | wrkDetl.setUuid(uuid); | 
|---|
|  |  |  | wrkDetl.setOwner(detlDto.getLocDetl().getOwner()); | 
|---|
|  |  |  | wrkDetl.setPayment(detlDto.getLocDetl().getPayment()); | 
|---|
|  |  |  | if (!wrkDetlService.insert(wrkDetl)) { | 
|---|
|  |  |  | throw new CoolException("保存工作档明细失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取库位 | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(taskDto.getLocNo()); | 
|---|
|  |  |  | // 获取路径 | 
|---|
|  |  |  | //        int ioType = taskDto.isAll() ? 101 : 103; | 
|---|
|  |  |  | //仅适用于速腾项目,没有捡料 | 
|---|
|  |  |  | int ioType = 101; | 
|---|
|  |  |  | int ioType = taskDto.isAll() ? 101 : 103; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo()); | 
|---|
|  |  |  | // 生成工作号 | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); | 
|---|
|  |  |  | 
|---|
|  |  |  | //            if (orderDetl == null) { | 
|---|
|  |  |  | //                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | String uuid = String.valueOf(System.currentTimeMillis()); | 
|---|
|  |  |  | WrkDetl wrkDetl = new WrkDetl(); | 
|---|
|  |  |  | wrkDetl.sync(orderDetl); | 
|---|
|  |  |  | wrkDetl.setZpallet(wrkMast.getBarcode()); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkDetl.setAppeUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiTime(now); | 
|---|
|  |  |  | wrkDetl.setModiUser(userId); | 
|---|
|  |  |  | wrkDetl.setUuid(uuid); | 
|---|
|  |  |  | wrkDetl.setOwner(orderDetl.getOwner()); | 
|---|
|  |  |  | wrkDetl.setPayment(orderDetl.getPayment()); | 
|---|
|  |  |  | if (!wrkDetlService.insert(wrkDetl)) { | 
|---|
|  |  |  | throw new CoolException("保存工作档明细失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkDetl.setAppeUser(userId); | 
|---|
|  |  |  | wrkDetl.setModiTime(now); | 
|---|
|  |  |  | wrkDetl.setModiUser(userId); | 
|---|
|  |  |  | wrkDetl.setOwner(locDetl.getOwner()); | 
|---|
|  |  |  | wrkDetl.setPayment(locDetl.getPayment()); | 
|---|
|  |  |  | if (!wrkDetlService.insert(wrkDetl)) { | 
|---|
|  |  |  | throw new CoolException("保存工作档明细失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 获取目标站 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", wrkMast.getIoType() - 50) | 
|---|
|  |  |  | .eq("stn_no", wrkMast.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | //速腾特有捡料, 11站是出库站, 然后手动走到15站进行再入库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .eq("stn_no", 15) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | // 更新工作档数据状态 | 
|---|
|  |  |  | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(staDesc.getStnNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setStaNo(staNo); // 目标站 | 
|---|
|  |  |  | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(""); // 源库位清空 | 
|---|
|  |  |  | 
|---|
|  |  |  | return targetLoc.getLocNo(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void turnOverOut(EmptyPlateOutParam param, Long userId) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (Cools.isEmpty(param.getOwnerId())) { | 
|---|
|  |  |  | throw new CoolException("客户名称不能为空"); | 
|---|
|  |  |  | }else if (param.getLocDetls().size()<=0){ | 
|---|
|  |  |  | throw new CoolException("请提取明细"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ArrayList<String> locNos = new ArrayList<>(); | 
|---|
|  |  |  | String[][] locNos2 =new String[param.getLocDetls().size()][2]; | 
|---|
|  |  |  | int i=0; | 
|---|
|  |  |  | for (EmptyPlateOutParam.LocDetl locDetl : param.getLocDetls()){ | 
|---|
|  |  |  | if (!locNos.contains(locDetl.getLoc_no())){ | 
|---|
|  |  |  | locNos.add(locDetl.getLoc_no()); | 
|---|
|  |  |  | locNos2[i][0]=locDetl.getLoc_no(); | 
|---|
|  |  |  | locNos2[i][1]=locDetl.getManu(); | 
|---|
|  |  |  | i++; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LocOwner locOwner = locOwnerService.selectById(param.getOwnerId()); | 
|---|
|  |  |  | param.setOwner(locOwner.getOwner()); | 
|---|
|  |  |  | String lgort = ""; | 
|---|
|  |  |  | String owner=""; | 
|---|
|  |  |  | List<DetlDto> detlDtos = new ArrayList<>(); | 
|---|
|  |  |  | for (String[] locNo1 : locNos2) { | 
|---|
|  |  |  | String locNo = locNo1[0]; | 
|---|
|  |  |  | if (locNo1[1].equals("平库")){ | 
|---|
|  |  |  | List<ManLocDetl> manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo)); | 
|---|
|  |  |  | for (ManLocDetl manLocDetl:manLocDetls){ | 
|---|
|  |  |  | if (Cools.isEmpty(owner)) { | 
|---|
|  |  |  | owner = manLocDetl.getOwner$(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | detlDtos.add(new DetlDto(manLocDetl.getMatnr(), manLocDetl.getBatch(), manLocDetl.getAnfme())); | 
|---|
|  |  |  | manLocDetl.setOwner(param.getOwnerId()); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | manLocDetlService.update(manLocDetl,new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr",manLocDetl.getMatnr())); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new Exception("更新库存明细拥有者字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if (locNo1[1].equals("立库")){ | 
|---|
|  |  |  | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo)); | 
|---|
|  |  |  | for (LocDetl locDetl:locDetls){ | 
|---|
|  |  |  | if (Cools.isEmpty(lgort)) { | 
|---|
|  |  |  | lgort = locDetl.getOrigin(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Cools.isEmpty(owner)) { | 
|---|
|  |  |  | owner = locDetl.getOwner$(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | detlDtos.add(new DetlDto(locDetl.getMatnr(), locDetl.getBatch(), locDetl.getAnfme())); | 
|---|
|  |  |  | locDetl.setOwner(param.getOwnerId()); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | locDetlService.update(locDetl,new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr",locDetl.getMatnr())); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new Exception("更新库存明细拥有者字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | throw new Exception("更新库位拥有者字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new CoolException("移交作业出错了:"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void turnOverOutPayment(EmptyPlateOutParam param, Long userId) { | 
|---|
|  |  |  | if (Cools.isEmpty(param.getPayment())){ | 
|---|
|  |  |  | throw new CoolException("请选择目标货物形态"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.info("更新货物形态:目标货物形态:"+param.getPayment$(param.getPayment())+";更改货物信息:"+param.getLocDetls()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (param.getLocDetls().size()<=0){ | 
|---|
|  |  |  | throw new CoolException("请提取明细"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ArrayList<String> locNos = new ArrayList<>(); | 
|---|
|  |  |  | String[][] locNos2 =new String[param.getLocDetls().size()][2]; | 
|---|
|  |  |  | int i=0; | 
|---|
|  |  |  | for (EmptyPlateOutParam.LocDetl locDetl : param.getLocDetls()){ | 
|---|
|  |  |  | if (!locNos.contains(locDetl.getLoc_no())){ | 
|---|
|  |  |  | locNos.add(locDetl.getLoc_no()); | 
|---|
|  |  |  | locNos2[i][0]=locDetl.getLoc_no(); | 
|---|
|  |  |  | locNos2[i][1]=locDetl.getManu(); | 
|---|
|  |  |  | i++; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (String[] locNo1 : locNos2) { | 
|---|
|  |  |  | String locNo = locNo1[0]; | 
|---|
|  |  |  | if (locNo1[1].equals("平库")){ | 
|---|
|  |  |  | List<ManLocDetl> manLocDetls = manLocDetlService.selectList(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo)); | 
|---|
|  |  |  | for (ManLocDetl manLocDetl:manLocDetls){ | 
|---|
|  |  |  | manLocDetl.setPayment(param.getPayment()); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | manLocDetlService.update(manLocDetl,new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr",manLocDetl.getMatnr())); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new Exception("更新库存明细货物形态字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if (locNo1[1].equals("立库")){ | 
|---|
|  |  |  | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo)); | 
|---|
|  |  |  | for (LocDetl locDetl:locDetls){ | 
|---|
|  |  |  | locDetl.setPayment(param.getPayment()); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | locDetlService.update(locDetl,new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr",locDetl.getMatnr())); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new Exception("更新库存明细货物形态字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | throw new Exception("更新库位货物形态字段信息出错了"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | throw new CoolException("货物形态转换出错了:"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|