|  |  | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | import com.zy.asrs.entity.*; | 
 |  |  | import com.zy.asrs.entity.param.*; | 
 |  |  | import com.zy.asrs.mapper.BasDevpMapper; | 
 |  |  | import com.zy.asrs.mapper.ManLocDetlMapper; | 
 |  |  | import com.zy.asrs.service.*; | 
 |  |  | import com.zy.asrs.utils.MatUtils; | 
 |  |  | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     private ManLocDetlService manLocDetlService; | 
 |  |  |     @Autowired | 
 |  |  |     private ManLocDetlMapper manLocDetlMapper; | 
 |  |  |     @Resource | 
 |  |  |     private InventoryCheckOrderService checkOrderService; | 
 |  |  |     @Resource | 
 |  |  |     private InventoryCheckOrderDetlService checkOrderDetlService; | 
 |  |  |  | 
 |  |  |     @Resource | 
 |  |  |     private BasDevpMapper basDevpMapper; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public R inLocCallAgv(String sta, String inSta) { | 
 |  |  |         // 判断入库站点有无出库任务过滤盘点捡料 | 
 |  |  |         int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("sta_no", inSta).ne("wrk_sts",15).notIn("io_type",103,107)); | 
 |  |  |         if (count > 0) { | 
 |  |  |  | 
 |  |  |         BasDevp basDevp = basDevpMapper.selectById(inSta); | 
 |  |  |  | 
 |  |  |         // 判断是否有出库任务 | 
 |  |  |         Wrapper<WrkMast> wrapper = new EntityWrapper<WrkMast>().lt("wrk_sts", 14).in("io_type", 101, 103, 107, 110); | 
 |  |  |  | 
 |  |  |         switch (inSta) { | 
 |  |  |             case "1040": | 
 |  |  |                 wrapper.in("source_sta_no", "1043", "1044"); | 
 |  |  |                 break; | 
 |  |  |             case "2010": | 
 |  |  |                 wrapper.in("source_sta_no", "2013", "2014"); | 
 |  |  |                 break; | 
 |  |  |             case "2000": | 
 |  |  |                 wrapper.in("source_sta_no", "2003", "2004"); | 
 |  |  |                 break; | 
 |  |  |             case "3010": | 
 |  |  |                 wrapper.in("source_sta_no", "3013", "3014"); | 
 |  |  |                 break; | 
 |  |  |             default: | 
 |  |  |         } | 
 |  |  |         int count = wrkMastService.selectCount(wrapper); | 
 |  |  |         log.info("入库呼叫agv呼叫站点:{},目标站点:{},出库任务数:{}",sta,inSta,count); | 
 |  |  |         if (count != 0) { | 
 |  |  |             return R.parse(inSta + "站点存在出库任务"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     .build() | 
 |  |  |                     .doPost(); | 
 |  |  |             JSONObject jsonObject = JSON.parseObject(response); | 
 |  |  |             jsonObject.getString("message"); | 
 |  |  |             if (jsonObject.getInteger("code").equals(0)) { | 
 |  |  |                 success = true; | 
 |  |  |                 // 入库暂存+1 | 
 |  |  |                 basDevp.setInQty(basDevp.getInQty() + 1); | 
 |  |  |                 basDevpMapper.updateById(basDevp); | 
 |  |  |             } else { | 
 |  |  |                 message = jsonObject.getString("message"); | 
 |  |  |                 log.error("入库呼叫agv失败!!!url:{};request:{};response:{}", ApiInterfaceConstant.AGV_IP + ApiInterfaceConstant.AGV_CALL_IN_PATH, body, response); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  | 
 |  |  |         if(param.getCombMats().size()>1){ | 
 |  |  |             throw new CoolException("请提取一个商品,或者刷新重新组托!"); | 
 |  |  |         } | 
 |  |  |         // 判断是否有相同条码的数据 | 
 |  |  |         if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). | 
 |  |  |                 eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { | 
 |  |  |             throw new CoolException(param.getBarcode() + "数据正在进行入库"); | 
 |  |  |         } | 
 |  |  |         param.getCombMats().forEach(elem -> { | 
 |  |  |             // 判断是否有相同条码的数据 | 
 |  |  |             if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). | 
 |  |  |                     eq("zpallet", param.getBarcode()) | 
 |  |  |                     .eq("io_status", "N") | 
 |  |  |                     .eq("matnr",elem.getMatnr()).eq("batch",elem.getBatch())) > 0) { | 
 |  |  |                 throw new CoolException(param.getBarcode() + "已有相同数据"); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |  | 
 |  |  |         if(param.getBarcode().length()!=9){ | 
 |  |  |             throw new CoolException("条码长度不是9位===>>" + param.getBarcode()); | 
 |  |  |         } | 
 |  |  |         if (param.getCombMats().size()>1){ | 
 |  |  |             throw new CoolException("不允许混料===>>" + param.getBarcode()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); | 
 |  |  |         int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); | 
 |  |  |         int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); | 
 |  |  |         if (countLoc > 0 || countWrk > 0 || countwait > 0) { | 
 |  |  |             throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode()); | 
 |  |  | //        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); | 
 |  |  |         if (countLoc > 0 || countWrk > 0) { | 
 |  |  |             throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Date now = new Date(); | 
 |  |  | 
 |  |  |             // 生成入库通知档 | 
 |  |  |             List<DetlDto> detlDtos = new ArrayList<>(); | 
 |  |  |             param.getCombMats().forEach(elem -> { | 
 |  |  |  | 
 |  |  |                 // 判断是否有相同条码的数据 | 
 |  |  |                 if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). | 
 |  |  |                         eq("zpallet", param.getBarcode()) | 
 |  |  |                         .eq("io_status", "N") | 
 |  |  |                         .eq("matnr",elem.getMatnr()).eq("batch",elem.getBatch())) > 0) { | 
 |  |  |                     throw new CoolException(param.getBarcode() + "已有相同数据"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme()); | 
 |  |  |                 if (DetlDto.has(detlDtos, detlDto)) { | 
 |  |  |                     DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); | 
 |  |  | 
 |  |  |                     throw new CoolException("修改单据作业数量失败"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu()); | 
 |  |  | //                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu()); | 
 |  |  |                 DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() | 
 |  |  |                         , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); | 
 |  |  |                 if (DetlDto.has(detlDtos, detlDto)) { | 
 |  |  |                     DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); | 
 |  |  |                     assert one != null; | 
 |  |  | 
 |  |  |                 waitPakin.setAppeTime(now); | 
 |  |  |                 waitPakin.setModiUser(userId); | 
 |  |  |                 waitPakin.setModiTime(now); | 
 |  |  |                 waitPakin.setManu(detlDto.getMark()); | 
 |  |  |                 waitPakin.setManu(detlDto.getMark()); //标记 | 
 |  |  |                 waitPakin.setOrigin(order.getItemName());//仓库 | 
 |  |  |                 waitPakin.setSupp(detlDto.getSuppName()); //供应商 | 
 |  |  |                 waitPakin.setSku(detlDto.getCustomer()); //客户名称 | 
 |  |  |                 waitPakin.setThreeCode(detlDto.getOrderNo()); //u8发过来的订单号 | 
 |  |  |                 waitPakin.setSuppCode(detlDto.getFromOrderNo()); //来源单号 | 
 |  |  |                 waitPakin.setTemp1(detlDto.getTemp1()); | 
 |  |  |                 waitPakin.setTemp2(detlDto.getTemp2()); | 
 |  |  |                 waitPakin.setTemp3(detlDto.getTemp3()); | 
 |  |  |                 waitPakin.setTemp4(detlDto.getTemp4()); | 
 |  |  |                 int countWrk2 = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); | 
 |  |  |                 if (countWrk2 > 0) { | 
 |  |  |                     throw new CoolException("工作档条码数据已存在===>>" + param.getBarcode()); | 
 |  |  |                 } | 
 |  |  |                 if (!waitPakinService.insert(waitPakin)) { | 
 |  |  |                     throw new CoolException("保存入库通知档失败"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             orderService.updateSettle(order.getId(), 2L, userId); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public void mergeComb(CombParam param, Long userId) { | 
 |  |  |  | 
 |  |  |         if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { | 
 |  |  |             throw new CoolException(BaseRes.PARAM); | 
 |  |  |         } | 
 |  |  |         if(param.getCombMats().stream().anyMatch(obj -> obj.getAnfme() == null)){ | 
 |  |  |             throw new CoolException("入库物料数量不能为空"); | 
 |  |  |         } | 
 |  |  |         Order order = orderService.selectByNo(param.getOrderNo()); | 
 |  |  |         if (Cools.isEmpty(order) || order.getSettle() > 2) { | 
 |  |  |             throw new CoolException("单据编号已过期"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 判断是否有相同条码的数据 | 
 |  |  |         if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). | 
 |  |  |                 eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) { | 
 |  |  |             throw new CoolException(param.getBarcode() + "数据正在进行入库"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); | 
 |  |  |         WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode()); | 
 |  |  |         if (wrkMast.getWrkSts() != 14 && wrkMast.getIoType() != 104){ | 
 |  |  |             throw new CoolException(param.getBarcode() + "该条码数据不为并板出库"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //设置非null批号, | 
 |  |  |         for (CombParam.CombMat combMat : param.getCombMats()) { | 
 |  |  |             if (combMat.getBatch() == null){ | 
 |  |  |                 combMat.setBatch(""); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Date now = new Date(); | 
 |  |  |         for (CombParam.CombMat combMat : param.getCombMats()) { | 
 |  |  |             // 订单明细数量校验 | 
 |  |  |             OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), combMat.getMatnr(), combMat.getBatch()); | 
 |  |  |             if (Cools.isEmpty(orderDetl)) { | 
 |  |  |                 throw new CoolException("该单据中未找到对应物料明细"); | 
 |  |  |             } | 
 |  |  |             if (combMat.getAnfme() > orderDetl.getEnableQty()) { | 
 |  |  |                 throw new CoolException(orderDetl.getMatnr() + "入库数量不合法"); | 
 |  |  |             } | 
 |  |  |             // 修改订单作业数量 | 
 |  |  |             if (!orderDetlService.increaseWorkQty(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme())) { | 
 |  |  |                 throw new CoolException("修改单据作业数量失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             Mat mat = matService.selectByMatnr(combMat.getMatnr()); | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |             wrkDetl.sync(mat); | 
 |  |  |             wrkDetl.setBatch(combMat.getBatch()); | 
 |  |  |             wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
 |  |  |             wrkDetl.setOrderNo(param.getOrderNo()); | 
 |  |  |             wrkDetl.setZpallet(param.getBarcode()); | 
 |  |  |             wrkDetl.setAnfme(combMat.getAnfme()); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setAppeUser(userId); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setModiUser(userId); | 
 |  |  |             wrkDetl.setManu(orderDetl.getManu()); | 
 |  |  |             wrkDetl.setSupp(orderDetl.getSupp()); | 
 |  |  |             wrkDetl.setTemp1(orderDetl.getTemp1()); | 
 |  |  |             wrkDetl.setTemp2(orderDetl.getTemp2()); | 
 |  |  |             wrkDetl.setTemp3(orderDetl.getTemp3()); | 
 |  |  |             wrkDetl.setTemp4(orderDetl.getTemp4()); | 
 |  |  |             wrkDetlService.insert(wrkDetl); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         Date now = new Date(); | 
 |  |  |         for(OrderDetl orderDetl : orderDetls){ | 
 |  |  |             //查询所有库位状态为F的库位信息 | 
 |  |  |             List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),null,null); | 
 |  |  |             List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),null,null,orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2()); | 
 |  |  |             if (locDetls.size() == 0) { | 
 |  |  |                 throw new CoolException("库存中没有该物料"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |     public void leftoversOut(Map<String, Object> map,Long userId) { | 
 |  |  |         String barcode = map.get("barcode").toString(); | 
 |  |  |         String barcode2 = map.get("barcode2").toString(); | 
 |  |  |  | 
 |  |  |         int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",barcode2)); | 
 |  |  |         int countWrk = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode",barcode2).ne("io_type",200)); | 
 |  |  |         int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",barcode2)); | 
 |  |  |         if (countLoc > 0 || countWrk > 0 || countwait > 0) { | 
 |  |  |             throw new CoolException("该条码已被使用===>>" + barcode2); | 
 |  |  |         } | 
 |  |  |         WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode).eq("io_type", 103)); | 
 |  |  |         if (Cools.isEmpty(wrkMast)) { | 
 |  |  |             throw new CoolException("未查询到拣料任务"); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void pdaAdjust(pdaAdjustParam param, Long userId) { | 
 |  |  |         if (Cools.isEmpty(param)){ | 
 |  |  |             throw new CoolException("盘点列表参数为空"); | 
 |  |  |         } | 
 |  |  |         for (InventoryCheckOrderDetl orderDetl: param.getParam()){ | 
 |  |  |             InventoryCheckOrderDetl inventoryCheckOrderDetl = checkOrderDetlService.selectOne(new EntityWrapper<InventoryCheckOrderDetl>() | 
 |  |  |                     .eq("order_no", orderDetl.getOrderNo()) | 
 |  |  |                     .eq("matnr", orderDetl.getMatnr()) | 
 |  |  |                     .eq("batch", orderDetl.getBatch())); | 
 |  |  |             if (Cools.isEmpty(inventoryCheckOrderDetl)){ | 
 |  |  |                 throw new CoolException("未查询到盘点信息"); | 
 |  |  |             } | 
 |  |  |             if (!inventoryCheckOrderDetl.getStatus().equals("1")){ | 
 |  |  |                 throw new CoolException("该任务已盘点"); | 
 |  |  |             } | 
 |  |  |             inventoryCheckOrderDetl.setCheckAnfme(orderDetl.getCheckAnfme()); | 
 |  |  |             inventoryCheckOrderDetl.setStatus("2"); | 
 |  |  |             if (!checkOrderDetlService.updateById(inventoryCheckOrderDetl)){ | 
 |  |  |                 throw new CoolException("保存盘点信息失败!"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public void inventoryUpload(String orderId) { | 
 |  |  |         if (Cools.isEmpty(orderId)){ | 
 |  |  |             throw new CoolException("盘点单id为空"); | 
 |  |  |         } | 
 |  |  |         InventoryCheckOrder inventoryCheckOrder = checkOrderService.selectById(orderId); | 
 |  |  |         if (Cools.isEmpty(inventoryCheckOrder)){ | 
 |  |  |             throw new CoolException("未找到盘点单"); | 
 |  |  |         } | 
 |  |  |         if (inventoryCheckOrder.getStatus().equals("2")){ | 
 |  |  |             throw new CoolException("盘点单已提交"); | 
 |  |  |         } | 
 |  |  |         int count = checkOrderDetlService.selectCount(new EntityWrapper<InventoryCheckOrderDetl>() | 
 |  |  |                 .eq("order_no", inventoryCheckOrder.getOrderNo()).isNull("check_anfme")); | 
 |  |  |         if (count>0){ | 
 |  |  |             throw new CoolException("有未完成的盘点任务"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<InventoryCheckOrderDetl> checkOrderProfitDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() | 
 |  |  |                 .eq("order_no", inventoryCheckOrder.getOrderNo()) | 
 |  |  |                 .addFilter("anfme < check_anfme")); | 
 |  |  |         if (!checkOrderProfitDetls.isEmpty()){ | 
 |  |  |             //获取盘盈单param | 
 |  |  |             InventoryErpParam erpProfitParam = getErpProfitParam(inventoryCheckOrder, checkOrderProfitDetls); | 
 |  |  |             uploadErp(erpProfitParam); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<InventoryCheckOrderDetl> checkOrderDeficitDetls = checkOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>() | 
 |  |  |                 .eq("order_no", inventoryCheckOrder.getOrderNo()) | 
 |  |  |                 .addFilter("anfme > check_anfme")); | 
 |  |  |  | 
 |  |  |         if (!checkOrderDeficitDetls.isEmpty()){ | 
 |  |  |             //获取盘亏单param | 
 |  |  |             InventoryErpParam erpDeficitParam = getErpDeficitParam(inventoryCheckOrder, checkOrderDeficitDetls); | 
 |  |  |             uploadErp(erpDeficitParam); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         inventoryCheckOrder.setStatus("2"); | 
 |  |  |         if (!checkOrderService.updateById(inventoryCheckOrder)){ | 
 |  |  |             throw new CoolException("状态更新失败"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public void pingKuShelves(CombParam combParam,Long userId) { | 
 |  |  |         Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", combParam.getLocno()).eq("type", 3)); | 
 |  |  |         if (Cools.isEmpty(node)){ | 
 |  |  |             throw new CoolException("未找到库位信息"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Order order = orderService.selectByNo(combParam.getOrderNo()); | 
 |  |  |         if (Cools.isEmpty(order) || order.getSettle() > 2) { | 
 |  |  |             throw new CoolException("单据编号已过期"); | 
 |  |  |         } | 
 |  |  |         // 生成入库通知档 | 
 |  |  |         List<DetlDto> detlDtos = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |         for (CombParam.CombMat elem : combParam.getCombMats()) { | 
 |  |  |  | 
 |  |  |  | 
 |  |  | //            param.getCombMats().forEach(elem -> { | 
 |  |  |  | 
 |  |  |             // 订单明细数量校验 | 
 |  |  |             OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); | 
 |  |  |             if (Cools.isEmpty(orderDetl)) { | 
 |  |  |                 throw new CoolException("该单据中未找到对应物料明细"); | 
 |  |  |             } | 
 |  |  |             if (elem.getAnfme() > orderDetl.getEnableQty()) { | 
 |  |  |                 throw new CoolException(orderDetl.getMatnr() + "入库数量不合法"); | 
 |  |  |             } | 
 |  |  |             // 修改订单作业数量 | 
 |  |  |             if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { | 
 |  |  |                 throw new CoolException("修改单据作业数量失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  | //                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getManu()); | 
 |  |  |             DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() | 
 |  |  |                     , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); | 
 |  |  |             if (DetlDto.has(detlDtos, detlDto)) { | 
 |  |  |                 DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch()); | 
 |  |  |                 assert one != null; | 
 |  |  |                 one.setAnfme(one.getAnfme() + detlDto.getAnfme()); | 
 |  |  |             } else { | 
 |  |  |                 detlDtos.add(detlDto); | 
 |  |  |             } | 
 |  |  | //            }); | 
 |  |  |         } | 
 |  |  |         int workNo = commonService.getWorkNo(4); | 
 |  |  |         Date now = new Date(); | 
 |  |  |         // 生成工作档 | 
 |  |  |         WrkMast wrkMast = new WrkMast(); | 
 |  |  |         wrkMast.setWrkNo(workNo); | 
 |  |  |         wrkMast.setIoTime(new Date()); | 
 |  |  |         wrkMast.setWrkSts(4L); // 工作状态:生成入库ID | 
 |  |  |         wrkMast.setIoType(300); // 入出库状态:1.入库 | 
 |  |  |         wrkMast.setIoPri(12D); // 优先级 | 
 |  |  |         wrkMast.setLocNo(node.getName()); | 
 |  |  |         wrkMast.setBarcode(""); // 托盘码 | 
 |  |  |         wrkMast.setFullPlt("Y"); // 满板:Y | 
 |  |  |         wrkMast.setPicking("N"); // 拣料 | 
 |  |  |         wrkMast.setExitMk("N"); // 退出 | 
 |  |  |         wrkMast.setEmptyMk("N"); // 空板 | 
 |  |  |         wrkMast.setLinkMis("Y"); | 
 |  |  |         wrkMast.setSheetNo(order.getOrderNo()); | 
 |  |  |         // 操作人员数据 | 
 |  |  |         wrkMast.setAppeTime(now); | 
 |  |  |         wrkMast.setModiTime(now); | 
 |  |  |         boolean res = wrkMastService.insert(wrkMast); | 
 |  |  |         if (!res) { | 
 |  |  |             throw new CoolException("保存工作档失败"); | 
 |  |  |         } | 
 |  |  |         for (DetlDto detlDto : detlDtos) { | 
 |  |  |             Mat mat = matService.selectByMatnr(detlDto.getMatnr()); | 
 |  |  |             if (Cools.isEmpty(mat)) { | 
 |  |  |                 throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); | 
 |  |  |             } | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |  | 
 |  |  |             wrkDetl.sync(detlDto); | 
 |  |  |             wrkDetl.sync(mat); | 
 |  |  |  | 
 |  |  |             wrkDetl.setOrderNo(order.getOrderNo()); | 
 |  |  |             wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
 |  |  |             wrkDetl.setIoTime(wrkMast.getIoTime()); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setManu(detlDto.getMark()); //标记 | 
 |  |  |             wrkDetl.setOrigin(order.getItemName());//仓库 | 
 |  |  |             wrkDetl.setSupp(detlDto.getSuppName()); //供应商 | 
 |  |  |             wrkDetl.setSku(detlDto.getCustomer()); //客户名称 | 
 |  |  |             wrkDetl.setThreeCode(detlDto.getOrderNo()); //u8发过来的订单号 | 
 |  |  |             wrkDetl.setSuppCode(detlDto.getFromOrderNo()); //来源单号 | 
 |  |  |             wrkDetl.setTemp1(detlDto.getTemp1()); | 
 |  |  |             wrkDetl.setTemp2(detlDto.getTemp2()); | 
 |  |  |             wrkDetl.setTemp3(detlDto.getSuppName()); | 
 |  |  |             wrkDetl.setTemp4(detlDto.getTemp4()); | 
 |  |  |             if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                 throw new CoolException("保存工作明细失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         orderService.updateSettle(order.getId(), 2L, userId); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public void pingKuUnShelves(CombParam combParam, Long userId) { | 
 |  |  |         String orderNo = combParam.getOrderNo(); | 
 |  |  |  | 
 |  |  |         Node node = nodeService.selectOne(new EntityWrapper<Node>().eq("name", combParam.getLocno()).eq("type", 3)); | 
 |  |  |         if (Cools.isEmpty(node)){ | 
 |  |  |             throw new CoolException("未找到库位信息"); | 
 |  |  |         } | 
 |  |  |         //根据订单号生成出库任务工作档 | 
 |  |  |         Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo)); | 
 |  |  |         if (order.getSettle() != 1 && order.getSettle() != 2){ | 
 |  |  |             throw new CoolException("该订单已处理"); | 
 |  |  |         } | 
 |  |  |         List<DetlDto> detlDtos = new ArrayList<>(); | 
 |  |  |         for (CombParam.CombMat elem : combParam.getCombMats()) { | 
 |  |  |             Wrapper<ManLocDetl> manLocDetlWrapper = new EntityWrapper<ManLocDetl>().eq("loc_no", combParam.getLocno()) | 
 |  |  |                     .eq("matnr", elem.getMatnr()).eq("batch", elem.getBatch()) | 
 |  |  |                     .eq("temp3", elem.getSupp()).eq("temp1", elem.getTemp1()).eq("temp2", elem.getTemp2()); | 
 |  |  |             ManLocDetl manLocDetl = manLocDetlService.selectOne(manLocDetlWrapper); | 
 |  |  |  | 
 |  |  |             if (Cools.isEmpty(manLocDetl)){ | 
 |  |  |                 throw new CoolException("该库位未查询到货物信息"); | 
 |  |  |             } | 
 |  |  |             if (elem.getAnfme()> manLocDetl.getAnfme()){ | 
 |  |  |                 throw new CoolException("出库数量大于库位剩余数量"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch()); | 
 |  |  |             if (Cools.isEmpty(orderDetl)) { | 
 |  |  |                 throw new CoolException("该单据中未找到对应物料明细"); | 
 |  |  |             } | 
 |  |  |             if (elem.getAnfme() > orderDetl.getEnableQty()) { | 
 |  |  |                 throw new CoolException(orderDetl.getMatnr() + "入库数量不合法"); | 
 |  |  |             } | 
 |  |  |             // 修改订单作业数量 | 
 |  |  |             if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) { | 
 |  |  |                 throw new CoolException("修改单据作业数量失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme(),orderDetl.getSuppCode() | 
 |  |  |                     , orderDetl.getManu(),orderDetl.getSku(),orderDetl.getSupp(),orderDetl.getTemp1(),orderDetl.getTemp2(),orderDetl.getTemp3(),orderDetl.getTemp4()); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             int workNo = commonService.getWorkNo(4); | 
 |  |  |             Date now = new Date(); | 
 |  |  |             // 生成工作档 | 
 |  |  |             WrkMast wrkMast = new WrkMast(); | 
 |  |  |             wrkMast.setWrkNo(workNo); | 
 |  |  |             wrkMast.setIoTime(new Date()); | 
 |  |  |             wrkMast.setWrkSts(14L); // 工作状态:生成入库ID | 
 |  |  |             wrkMast.setIoType(301); // 入出库状态:301.平库出库 | 
 |  |  |             wrkMast.setIoPri(12D); // 优先级 | 
 |  |  |             wrkMast.setSourceLocNo(node.getName()); | 
 |  |  |             wrkMast.setBarcode(""); // 托盘码 | 
 |  |  |             wrkMast.setFullPlt("Y"); // 满板:Y | 
 |  |  |             wrkMast.setPicking("N"); // 拣料 | 
 |  |  |             wrkMast.setExitMk("N"); // 退出 | 
 |  |  |             wrkMast.setEmptyMk("N"); // 空板 | 
 |  |  |             wrkMast.setLinkMis("Y"); | 
 |  |  |             wrkMast.setSheetNo(order.getOrderNo()); | 
 |  |  |             // 操作人员数据 | 
 |  |  |             wrkMast.setAppeTime(now); | 
 |  |  |             wrkMast.setModiTime(now); | 
 |  |  |             boolean res = wrkMastService.insert(wrkMast); | 
 |  |  |             if (!res) { | 
 |  |  |                 throw new CoolException("保存工作档失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             Mat mat = matService.selectByMatnr(detlDto.getMatnr()); | 
 |  |  |             if (Cools.isEmpty(mat)) { | 
 |  |  |                 throw new CoolException(detlDto.getMatnr() + "商品档案不存在"); | 
 |  |  |             } | 
 |  |  |             WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |  | 
 |  |  |             wrkDetl.sync(detlDto); | 
 |  |  |             wrkDetl.sync(mat); | 
 |  |  |  | 
 |  |  |             wrkDetl.setOrderNo(order.getOrderNo()); | 
 |  |  |             wrkDetl.setWrkNo(wrkMast.getWrkNo()); | 
 |  |  |             wrkDetl.setIoTime(wrkMast.getIoTime()); | 
 |  |  |             wrkDetl.setAppeTime(now); | 
 |  |  |             wrkDetl.setModiTime(now); | 
 |  |  |             wrkDetl.setManu(detlDto.getMark()); //标记 | 
 |  |  |             wrkDetl.setOrigin(order.getItemName());//仓库 | 
 |  |  |             wrkDetl.setSupp(detlDto.getSuppName()); //供应商 | 
 |  |  |             wrkDetl.setSku(detlDto.getCustomer()); //客户名称 | 
 |  |  |             wrkDetl.setThreeCode(detlDto.getOrderNo()); //u8发过来的订单号 | 
 |  |  |             wrkDetl.setSuppCode(detlDto.getFromOrderNo()); //来源单号 | 
 |  |  |             wrkDetl.setTemp1(detlDto.getTemp1()); | 
 |  |  |             wrkDetl.setTemp2(detlDto.getTemp2()); | 
 |  |  |             wrkDetl.setTemp3(detlDto.getTemp3()); | 
 |  |  |             wrkDetl.setTemp4(detlDto.getTemp4()); | 
 |  |  |             if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                 throw new CoolException("保存工作明细失败"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (new BigDecimal(manLocDetl.getAnfme()).subtract(new BigDecimal(elem.getAnfme())).doubleValue() == 0){ | 
 |  |  |                 manLocDetlService.delete(manLocDetlWrapper); | 
 |  |  |             }else { | 
 |  |  |                 manLocDetl.setAnfme(new BigDecimal(manLocDetl.getAnfme()).subtract(new BigDecimal(elem.getAnfme())).doubleValue()); | 
 |  |  |                 if (!manLocDetlService.update(manLocDetl,manLocDetlWrapper)) { | 
 |  |  |                     throw new CoolException("更新明细失败"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         orderService.updateSettle(order.getId(), 2L, userId); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void uploadErp(InventoryErpParam param){ | 
 |  |  |         String response = ""; | 
 |  |  |         boolean success = false; | 
 |  |  |         try { | 
 |  |  |             HashMap<String, Object> headers = new HashMap<>(); | 
 |  |  |             headers.put("Content-Type", "application/json"); | 
 |  |  |             response = new HttpHandler.Builder() | 
 |  |  |                     .setHeaders(headers) | 
 |  |  |                     .setUri("10.0.100.160:30108") | 
 |  |  |                     .setPath("web/apps/gongqi.df.dataTrans/DTInterFace/doJobWithupdateBody") | 
 |  |  |                     .setJson(JSON.toJSONString(param)) | 
 |  |  |                     .build() | 
 |  |  |                     .doPost(); | 
 |  |  |             JSONObject jsonObject = JSON.parseObject(response); | 
 |  |  |             if (jsonObject.getInteger("errcode").equals(0)) { | 
 |  |  |                 success = true; | 
 |  |  |             } else if (jsonObject.getInteger("errcode").equals(1)) { | 
 |  |  |                 log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(param), response); | 
 |  |  |                 throw new CoolException(jsonObject.getString("msg")); | 
 |  |  |             } else { | 
 |  |  |                 log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PACK_DOWN_URL, JSON.toJSONString(param), response); | 
 |  |  |                 throw new CoolException("上报mes系统失败"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("fail", e); | 
 |  |  |             throw new CoolException(e.getMessage()); | 
 |  |  |         } finally { | 
 |  |  |             try { | 
 |  |  |                 // 保存接口日志 | 
 |  |  |                 apiLogService.save( | 
 |  |  |                         "盘点单上报", | 
 |  |  |                         MesConstant.URL + MesConstant.PACK_DOWN_URL, | 
 |  |  |                         null, | 
 |  |  |                         "127.0.0.1", | 
 |  |  |                         JSON.toJSONString(param), | 
 |  |  |                         response, | 
 |  |  |                         success | 
 |  |  |                 ); | 
 |  |  |             } catch (Exception e) { log.error("", e); } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public InventoryErpParam getErpProfitParam(InventoryCheckOrder inventoryCheckOrder,List<InventoryCheckOrderDetl> checkOrderProfitDetls) { | 
 |  |  |         Date date = new Date(); | 
 |  |  |         InventoryErpParam erpProfitParam = new InventoryErpParam(); | 
 |  |  |         InventoryErpParam.DataJson dataJson = new InventoryErpParam.DataJson(); | 
 |  |  |         dataJson.setFlowCode("LIKUwms12GOTmes"); | 
 |  |  |         dataJson.setTableCode("DTInventInTable_pdd"); | 
 |  |  |         dataJson.setLogName("盘盈单-入库单"); | 
 |  |  |         erpProfitParam.setDataJson(dataJson); | 
 |  |  |         List<InventoryErpParam.UpdateJson> updateJsonList = new ArrayList<>(); | 
 |  |  |         InventoryErpParam.UpdateJson updateJson = new InventoryErpParam.UpdateJson(); | 
 |  |  |         updateJson.setOrderNo(inventoryCheckOrder.getOrderNo()); | 
 |  |  |         updateJson.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); | 
 |  |  |         List<InventoryErpParam.MatDetails> matDetails = new ArrayList<>(); | 
 |  |  |         for (InventoryCheckOrderDetl checkOrderProfitDetl: checkOrderProfitDetls){ | 
 |  |  |             InventoryErpParam.MatDetails matDetail = new InventoryErpParam.MatDetails(); | 
 |  |  |  | 
 |  |  |             Mat mat = matService.selectByMatnr(checkOrderProfitDetl.getMatnr()); | 
 |  |  |  | 
 |  |  |             matDetail.setMatnr(checkOrderProfitDetl.getMatnr()); | 
 |  |  |             matDetail.setBatch(checkOrderProfitDetl.getBatch()); | 
 |  |  |             matDetail.setSpecs(mat.getSpecs()); | 
 |  |  |             Double anfme = new BigDecimal(checkOrderProfitDetl.getCheckAnfme()).subtract(new BigDecimal(checkOrderProfitDetl.getAnfme())).doubleValue(); | 
 |  |  |             matDetail.setAnfme(anfme); | 
 |  |  |             matDetail.setLocNo(checkOrderProfitDetl.getLocNo()); | 
 |  |  |             matDetail.setWarehouse(checkOrderProfitDetl.getArea()); | 
 |  |  |             matDetail.setSeq(updateJson.getMatDetails() == null?1:updateJson.getMatDetails().size()+1); | 
 |  |  |             matDetails.add(matDetail); | 
 |  |  |         } | 
 |  |  |         updateJson.setMatDetails(matDetails); | 
 |  |  |         updateJsonList.add(updateJson); | 
 |  |  |         erpProfitParam.setUpdateJson(updateJsonList); | 
 |  |  |         return erpProfitParam; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public InventoryErpParam getErpDeficitParam(InventoryCheckOrder inventoryCheckOrder,List<InventoryCheckOrderDetl> checkOrderDeficitDetls) { | 
 |  |  |         Date date = new Date(); | 
 |  |  |         InventoryErpParam erpDeficitParam = new InventoryErpParam(); | 
 |  |  |         InventoryErpParam.DataJson dataJson = new InventoryErpParam.DataJson(); | 
 |  |  |         dataJson.setFlowCode("LIKUwms12GOTmes"); | 
 |  |  |         dataJson.setTableCode("DTInventOutTable_pdd"); | 
 |  |  |         dataJson.setLogName("盘亏单-出库单"); | 
 |  |  |         erpDeficitParam.setDataJson(dataJson); | 
 |  |  |         List<InventoryErpParam.UpdateJson> updateJsonList2 = new ArrayList<>(); | 
 |  |  |         InventoryErpParam.UpdateJson updateJson2 = new InventoryErpParam.UpdateJson(); | 
 |  |  |         updateJson2.setOrderNo(inventoryCheckOrder.getOrderNo()); | 
 |  |  |         updateJson2.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); | 
 |  |  |         List<InventoryErpParam.MatDetails> matDetails = new ArrayList<>(); | 
 |  |  |         for (InventoryCheckOrderDetl checkOrderDeficitDetl: checkOrderDeficitDetls){ | 
 |  |  |             InventoryErpParam.MatDetails matDetail = new InventoryErpParam.MatDetails(); | 
 |  |  |  | 
 |  |  |             Mat mat = matService.selectByMatnr(checkOrderDeficitDetl.getMatnr()); | 
 |  |  |  | 
 |  |  |             matDetail.setMatnr(checkOrderDeficitDetl.getMatnr()); | 
 |  |  |             matDetail.setBatch(checkOrderDeficitDetl.getBatch()); | 
 |  |  |             matDetail.setSpecs(mat.getSpecs()); | 
 |  |  |             Double anfme = new BigDecimal(checkOrderDeficitDetl.getAnfme()).subtract(new BigDecimal(checkOrderDeficitDetl.getCheckAnfme())).doubleValue(); | 
 |  |  |             matDetail.setAnfme(anfme); | 
 |  |  |             matDetail.setLocNo(checkOrderDeficitDetl.getLocNo()); | 
 |  |  |             matDetail.setWarehouse(checkOrderDeficitDetl.getArea()); | 
 |  |  |             matDetail.setSeq(updateJson2.getMatDetails() == null?1:updateJson2.getMatDetails().size()+1); | 
 |  |  |             matDetails.add(matDetail); | 
 |  |  |         } | 
 |  |  |         updateJson2.setMatDetails(matDetails); | 
 |  |  |         updateJsonList2.add(updateJson2); | 
 |  |  |         erpDeficitParam.setUpdateJson(updateJsonList2); | 
 |  |  |         return erpDeficitParam; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional | 
 |  |  |     public void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl, | 
 |  |  |                          Double curOutQty, Integer ioType, Long userId, Date now) { |