diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java index e323e496..596b3180 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java @@ -3,6 +3,7 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.base; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; @@ -117,34 +118,41 @@ public class LimitStorageRuleHandler extends Decisioner ltLimt = stIvtStructattr -> { + Boolean result = Boolean.TRUE; + if (limits.contains("h")) { + Integer h = Math.min(finalVehicle.getH() + 1, 3); + result = result && stIvtStructattr.getH() == h; + } + //暂不校验宽度、长度、重量 + // if (limits.contains("w")){ + // result = result && stIvtStructattr.getW()>finalVehicle.getW(); + // } + // if (limits.contains("l")) { + // result = result && stIvtStructattr.getL() > finalVehicle.getL(); + // } + // if (limits.contains("weight")) { + // result = result && stIvtStructattr.getWeight() > finalVehicle.getWeight(); + // } + return result; + }; // 判断长宽高是否符合要求 List eqLimitCollect = attrList.stream() .filter(eqLimt) .collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(eqLimitCollect)){ + if (ObjectUtils.isNotEmpty(eqLimitCollect)) { return eqLimitCollect; + } else { + return attrList.stream() + .filter(ltLimt) + .collect(Collectors.toList()); } - Predicate ltLimt = stIvtStructattr -> { - Boolean result = Boolean.TRUE; - if (limits.contains("h")){ - result = result && stIvtStructattr.getH()>finalVehicle.getH(); - } - if (limits.contains("w")){ - result = result && stIvtStructattr.getW()>finalVehicle.getW(); - } - if (limits.contains("l")){ - result = result && stIvtStructattr.getL()>finalVehicle.getL(); - } - if (limits.contains("weight")){ - result = result && stIvtStructattr.getWeight()>finalVehicle.getWeight(); - } - return result; - }; // 判断长宽高是否符合要求 - List ltLimtCollect = attrList.stream() - .filter(ltLimt) - .collect(Collectors.toList()); - return ltLimtCollect; + // List ltLimtCollect = attrList.stream() + // .filter(ltLimt) + // .collect(Collectors.toList()); + // return ltLimtCollect; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java index 7bf4f958..0e4d8b58 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/InStorageTask.java @@ -84,7 +84,7 @@ public class InStorageTask extends AbstractTask { iSchBaseTaskService.create(task); iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() .set(MdPbVehicleMater::getTask_code, task.getTask_code()) - .set(MdPbVehicleMater::getIs_check, null) + //.set(MdPbVehicleMater::getIs_check, null) .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) .eq(MdPbVehicleMater::getIs_delete, false)); return (JSONObject) JSON.toJSON(task); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java index 9e8a6e5d..18911a04 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java @@ -93,9 +93,13 @@ public class PalletInStorageTask extends AbstractTask { //混托任务判断 if (item.get(0).getVehicle_code().contains("T")&&item.size() > 1) { newVehicleMater= item.stream().filter(r -> r.getNeed_pick() == null || !r.getNeed_pick()).collect(Collectors.toList()); + //第一次混托入库 if (newVehicleMater.size() ==item.size()) { + //任意一个生成混托入库任务,其他待回传 newVehicleMater.get(0).setNeed_pick(true); }else{ + newVehicleMater = new ArrayList<>(); + //拣选回库 item.stream().filter(r -> r.getNeed_pick() != null&&StringUtils.isNotBlank(r.getGroup_id())&&r.getNeed_pick()).findFirst().ifPresent(newVehicleMater::add); } } else { @@ -129,9 +133,11 @@ public class PalletInStorageTask extends AbstractTask { //throw new BadRequestException("申请任务失败,载具没有组盘信息!"); } List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) - .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code")); + .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code","task_type")); if (!CollectionUtils.isEmpty(list)) { - if (!list.get(0).getVehicle_code().contains("T")) { + //盘点入库不允许生成多个 + boolean any = list.stream().anyMatch(t -> t.getTask_type().contains(StatusEnum.IOBILL_TYPE_IN.code("盘点入库"))); + if (!list.get(0).getVehicle_code().contains("T")||any) { throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java index 08751131..ab3ea555 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java @@ -96,14 +96,65 @@ public class SyncReceiptProcessHandler implements ClassProcess { if (CollectionUtils.isEmpty(array)) { throw new BadRequestException("回传失败:回传数据未找到对应erp单据"); } - JSONObject responseStatus = getResponseInfo(formData, true); - isSuccess = responseStatus.getBooleanValue("IsSuccess"); - if (isSuccess) { - updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作成功!"); - updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); - } else { - updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作失败,原因为:" + responseStatus.getString("errorMessages") + ",回传Erp数据为:" + json); + String status = array.getJSONObject(0).getString("DocumentStatus"); + JSONObject billData = from.getJSONObject("form_data"); + //更新通用审核单据信息 + if (billData != null) { + updateWrapper.set(PmFormData::getSource_form_date, billData.getString("billCode")); + updateWrapper.set(PmFormData::getQty, billData.getString("outQty")); + } + //先提交 + if ("A".equals(status)) { + erpServiceUtils.submit(formData); + } + //无需审核 + if ("D".equals(status)) { + updateWrapper.set(PmFormData::getRemark, "入库失败,请检查ERP单据,该单据已被审核!"); updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停")); + } else { + //生产退料入库 + if ("PRD_ReturnMtrl".equals(from.getString("source_form_type")) || "SUB_RETURNMTRL".equals(from.getString("source_form_type"))) { + List pmFormDataList = iPmFormDataService.list(new LambdaUpdateWrapper().eq(PmFormData::getParent_id, formData.getString("ids") + "$" + formData.getString("formid"))); + long count = pmFormDataList.stream().filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))).count(); + BigDecimal assignQty = from.getBigDecimal("assignQty"); + BigDecimal inQty = from.getBigDecimal("inQty"); + BigDecimal totalQty = from.getBigDecimal("totalQty"); + BigDecimal finishQty = assignQty.add(inQty); + LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper<>(); + updateWrapper1.eq(PmFormData::getId, pmFormData.getSource_form_id()); + updateWrapper1.set(PmFormData::getAssign_qty, assignQty.add(inQty)); + //已入库数量大于或等于总数量,满足回传条件 + if (finishQty.subtract(totalQty).compareTo(BigDecimal.ZERO) >= 0) { + if (finishQty.subtract(totalQty).compareTo(BigDecimal.ZERO) >= 0 && count + 1 == pmFormDataList.size()) { + //审核 + JSONObject responseStatus = getResponseInfo(formData, true); + isSuccess = responseStatus.getBooleanValue("IsSuccess"); + if (isSuccess) { + updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作成功!"); + updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); + } else { + updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作失败,原因为:" + responseStatus.getString("errorMessages") + ",回传Erp数据为:" + json); + updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停")); + } + } + updateWrapper1.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); + } else { + //不审核 + updateWrapper.set(PmFormData::getRemark, "该入库单有剩余物料未入库,数量为:" + totalQty.subtract(finishQty) + " ,剩余物料入库完成后将执行回传。"); + updateWrapper.set(PmFormData::getRemark, StatusEnum.FORM_STATUS.code("完成")); + } + iPmFormDataService.update(updateWrapper1); + } else { + JSONObject responseStatus = getResponseInfo(formData, true); + isSuccess = responseStatus.getBooleanValue("IsSuccess"); + if (isSuccess) { + updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作成功!"); + updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); + } else { + updateWrapper.set(PmFormData::getRemark, "回传ERP单据审批操作失败,原因为:" + responseStatus.getString("errorMessages") + ",回传Erp数据为:" + json); + updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停")); + } + } } } else { JSONObject responseStatus = getResponseInfo(formData, false); @@ -115,6 +166,25 @@ public class SyncReceiptProcessHandler implements ClassProcess { } } if (isSuccess) { + JSONArray jsonArray = responseStatus.getJSONArray("SuccessEntitys"); + String id = null; + if (ObjectUtils.isNotEmpty(jsonArray)) { + JSONObject firstObject = jsonArray.getJSONObject(0); + if (firstObject.containsKey("Id")) { + id = firstObject.getString("Id"); + } + } + //erp回传的Id + if (StringUtils.isNotBlank(id)) { + PmFormData sourceForm = iPmFormDataService.getOne(new LambdaQueryWrapper().eq(PmFormData::getId, pmFormData.getSource_form_id())); + if (sourceForm != null) { + //更新源单的回传ID + LambdaUpdateWrapper updateWrapper2 = new LambdaUpdateWrapper<>(); + updateWrapper2.eq(PmFormData::getId, sourceForm.getId()); + updateWrapper2.set(PmFormData::getSource_form_id, id); + iPmFormDataService.update(updateWrapper2); + } + } updateWrapper.set(PmFormData::getRemark, "回执单创建成功,回传Erp数据为:" + responseStatus.getJSONArray("SuccessEntitys").toJSONString()); updateWrapper.set(PmFormData::getActual_qty, pmFormData.getActual_qty().add(pmFormData.getQty())); updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); @@ -168,16 +238,123 @@ public class SyncReceiptProcessHandler implements ClassProcess { throw new BadRequestException("回传失败:查询物料信息,物料编码不存在:" + JSON.parseObject(fEntityArray.getJSONObject(0).getString("FMaterialId")).getString("FNumber")); } MdMeMaterialbase materialInfo = materialList.get(0); + //生产入库单回传处理 if ("RECEIPT_PRD".equals(formType)) { billCode = handlePrdData(pmFormData, billCode, fEntityArray, materialInfo); } + //销售出库单回传处理 + if ("RECEIPT_SalOutStock".equals(formType)) { + billCode = handleSalData(pmFormData, billCode, model, fEntityArray, materialInfo); + } + //生产用料清单回传处理 if ("RECEIPT_PickMtrl".equals(formType)) { billCode = handlePickData(billCode, fEntityArray, materialInfo); } + //委外用料清单回传处理 + if ("RECEIPT_SUB_PickMtrl".equals(formType)) { + billCode = handleSubPickData(billCode, fEntityArray); + } + //简单生产领料单回传处理 + if ("RECEIPT_SPPickMtrl".equals(formType)) { + billCode = handlesPickData(billCode, fEntityArray); + } + return billCode; + } + + //销售出库单回传处理 + private String handleSalData(PmFormData pmFormData, String billCode, JSONObject model, JSONArray fEntityArray, MdMeMaterialbase materialInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.inSql(PmFormData::getParent_id, + "SELECT parent_id FROM pm_form_data WHERE id = '" + pmFormData.getSource_form_id() + "'"); + List sourceFormList = iPmFormDataService.list(queryWrapper); + sourceFormList = sourceFormList.stream().filter(r -> StringUtils.isNotBlank(r.getSource_form_id())).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(sourceFormList)) { + Map linkedMap = new LinkedHashMap<>(); + for (String key : model.keySet()) { + linkedMap.put(key, model.get(key)); + } + Map tempMap = new LinkedHashMap<>(); + for (Map.Entry entry : linkedMap.entrySet()) { + tempMap.put(entry.getKey(), entry.getValue()); + if ("FID".equals(entry.getKey())) { + tempMap.put("FID", sourceFormList.get(0).getSource_form_id()); + } + } + model.clear(); + model.putAll(tempMap); + } return billCode; } + //委外用料清单回传处理 + private String handleSubPickData(String billCode, JSONArray fEntityArray) { + for (int i = 0; i < fEntityArray.size(); i++) { + JSONObject fEntity = fEntityArray.getJSONObject(i); + billCode = fEntity.getString("FPPbomBillNo"); + Map linkedMap = new LinkedHashMap<>(); + for (String key : fEntity.keySet()) { + linkedMap.put(key, fEntity.get(key)); + } + Map tempMap = new LinkedHashMap<>(); + for (Map.Entry entry : linkedMap.entrySet()) { + tempMap.put(entry.getKey(), entry.getValue()); + } + JSONArray fEntityLinkArray = new JSONArray(); + JSONObject fEntityLink = new JSONObject(); + fEntityLink.put("FEntity_Link_FFlowLineId", 6); + fEntityLink.put("FEntity_Link_FBaseActualQty", fEntity.getString("FActualQty")); + fEntityLink.put("FEntity_Link_FSId", fEntity.getString("FSrcEntryId")); + fEntityLink.put("FEntity_Link_FBaseActualQtyOld", fEntity.getString("FBaseActualQty")); + fEntityLink.put("FEntity_Link_FRuleId", "SUB_PPBOM_Pick"); + fEntityLink.put("FEntity_Link_FSTableId", 0); + fEntityLink.put("FEntity_Link_FFlowId", "0b064121-4926-4808-8632-a195b6a202e8"); + fEntityLink.put("FEntity_Link_FSBillId", fEntity.getString("FSrcInterId")); + fEntityLink.put("FEntity_Link_FSTableName", "T_SUB_PPBOMENTRY"); + fEntityLinkArray.add(fEntityLink); + tempMap.put("FEntity_Link", fEntityLinkArray); + fEntity.clear(); + fEntity.putAll(tempMap); + } + return billCode; + } + + + //简单生产领料单回传处理 + private String handlesPickData(String billCode, JSONArray fEntityArray) { + for (int i = 0; i < fEntityArray.size(); i++) { + JSONObject fEntity = fEntityArray.getJSONObject(i); + billCode = fEntity.getString("FSrcBillNo"); + JSONObject stockInfo = JSON.parseObject(fEntity.getString("FStockId")); + String stockId = stockInfo.getString("FNumber"); + JSONObject lotInfo = JSON.parseObject(fEntity.getString("FLot")); + String lot = lotInfo.getString("FNumber"); + JSONObject params = new JSONObject(); + params.put("storeCode", stockId); + params.put("pcsn", lot); + List result = erpServiceUtils.queryInventory(params); + Map linkedMap = new LinkedHashMap<>(); + for (String key : fEntity.keySet()) { + linkedMap.put(key, fEntity.get(key)); + } + Map tempMap = new LinkedHashMap<>(); + for (Map.Entry entry : linkedMap.entrySet()) { + tempMap.put(entry.getKey(), entry.getValue()); + if ("FMaterialId".equals(entry.getKey())) { + if (ObjectUtils.isNotEmpty(result)) { + if (!"0".equals(result.get(0).getBomId())) { + JSONObject bomNum = new JSONObject(); + bomNum.put("FNumber", result.get(0).getBomId()); + tempMap.put("FBomId", bomNum); + } + } + } + } + fEntity.clear(); + fEntity.putAll(tempMap); + } + return billCode; + } private String handlePickData(String billCode, JSONArray fEntityArray, MdMeMaterialbase materialInfo) { for (int i = 0; i < fEntityArray.size(); i++) { @@ -223,6 +400,15 @@ public class SyncReceiptProcessHandler implements ClassProcess { tempMap.put("FEntrySrcEnteryId", entity.getString("Id")); tempMap.put("FEntrySrcEntrySeq", entity.getString("Seq")); } + if ("FMaterialId".equals(entry.getKey())) { + if (ObjectUtils.isNotEmpty(result)) { + if (!"0".equals(result.get(0).getBomId())) { + JSONObject bomNum = new JSONObject(); + bomNum.put("FNumber", result.get(0).getBomId()); + tempMap.put("FBomId", bomNum); + } + } + } //辅助单位 if (!"0".equals(materialInfo.getAssist_unit_id()) && "FPPBomEntryId".equals(entry.getKey())) { JSONObject fUnit = new JSONObject(); @@ -271,6 +457,7 @@ public class SyncReceiptProcessHandler implements ClassProcess { iPmFormDataService.update(updateWrapper); throw new BadRequestException("该回传单据未找到对应生产订单"); } + JSONArray moEntry = moArray.getJSONObject(0).getJSONArray("TreeEntity"); reportQuery.setFilterString("FMoNumber ='" + fEntity.getString("FMoBillNo") + "'"); reportQuery.setOrderString("FId desc"); reportQuery.setFormId("SFC_OperationReport"); @@ -368,6 +555,27 @@ public class SyncReceiptProcessHandler implements ClassProcess { fUnit.put("FNumber", materialInfo.getAssist_unit_id()); tempMap.put("FSecUnitId", fUnit); } + if ("FMaterialId".equals(entry.getKey())) { + if (StringUtils.isNotBlank(moEntry.getJSONObject(0).getString("ISBACKFLUSH"))) { + tempMap.put("FIsBackFlush", moEntry.getJSONObject(0).getString("ISBACKFLUSH")); + if (BooleanUtil.toBoolean(moEntry.getJSONObject(0).getString("ISBACKFLUSH"))) { + JSONObject bomInfo = JSON.parseObject(moEntry.getJSONObject(0).getString("BomId")); + JSONObject bomNum = new JSONObject(); + bomNum.put("FNumber", bomInfo.getString("Number")); + tempMap.put("FBomId", bomNum); + } + } + } + if ("FBomId".equals(entry.getKey())) { + if (StringUtils.isNotBlank(moEntry.getJSONObject(0).getString("ISBACKFLUSH"))) { + if (BooleanUtil.toBoolean(moEntry.getJSONObject(0).getString("ISBACKFLUSH"))) { + JSONObject bomInfo = JSON.parseObject(moEntry.getJSONObject(0).getString("BomId")); + JSONObject bomNum = new JSONObject(); + bomNum.put("FNumber", bomInfo.getString("Number")); + tempMap.put("FBomId", bomNum); + } + } + } } JSONArray fEntityLinkArray = new JSONArray(); JSONObject fEntityLink = new JSONObject(); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java index de87be93..bc4ab6da 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java @@ -560,6 +560,14 @@ public class MdGruopDickServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper(); //盘点出库,直接出库确认则清除库存 if (one.getIs_check() != null) { - if ("1".equals(one.getIs_check())) { + //托盘无需出库确认 + if (!vehicle_code.contains("T")&&"1".equals(one.getIs_check())) { updateWrapper.set("remark", "用户于" + DateUtil.now() + "进行盘点出库,并出库确认不再入库,物料取走。") .set("is_check", null); iStIvtStructattrService.update(new UpdateWrapper() diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java index 698c41ac..c356ae78 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java @@ -155,6 +155,25 @@ public class PmFormDataServiceImpl extends ServiceImpl().eq(PmFormData::getId, pmFormData.getSource_form_id())); + if (sourceForm != null) { + //更新源单的回传ID + LambdaUpdateWrapper updateWrapper2 = new LambdaUpdateWrapper<>(); + updateWrapper2.eq(PmFormData::getId, sourceForm.getId()); + updateWrapper2.set(PmFormData::getSource_form_id, id); + iPmFormDataService.update(updateWrapper2); + } + } message = responseStatus.getJSONArray("SuccessEntitys").toJSONString(); message = "回执单创建成功,回传Erp数据为:" + message; updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); @@ -175,7 +194,103 @@ public class PmFormDataServiceImpl extends ServiceImpl materialList = iMdMeMaterialbaseService.list(new LambdaQueryWrapper().eq(MdMeMaterialbase::getMaterial_code, JSON.parseObject(fEntityArray.getJSONObject(0).getString("FMaterialId")).getString("FNumber"))); + if (ObjectUtil.isEmpty(materialList)) { + throw new BadRequestException("回传失败:查询物料信息,物料编码不存在:" + JSON.parseObject(fEntityArray.getJSONObject(0).getString("FMaterialId")).getString("FNumber")); + } + MdMeMaterialbase materialInfo = materialList.get(0); + JSONObject entity = fEntityArray.getJSONObject(0); + JSONObject stockInfo = JSON.parseObject(entity.getString("FStockId")); + String stockId = stockInfo.getString("FNumber"); + JSONObject params = new JSONObject(); + params.put("materialCode", materialInfo.getMaterial_code()); + params.put("storeCode", stockId); + BigDecimal actualQty = new BigDecimal(entity.getString("FActualQty")); + List result = erpServiceUtils.queryInventory(params); + BigDecimal remainingQty = actualQty; + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PmFormData::getId, pmFormData.getId()); + updateWrapper.set(PmFormData::getUpdate_time, DateUtil.now()); + // boolean needAgain = true; + if (ObjectUtils.isNotEmpty(result)) { + for (ErpInventoryData r : result) { + if (remainingQty.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal deductedBaseQty = r.getBaseQty().min(remainingQty); + remainingQty = remainingQty.subtract(deductedBaseQty); + ErpInventoryData returnItem = new ErpInventoryData(); + returnItem.setLot(r.getLot()); + returnItem.setBomId(r.getBomId()); + returnItem.setBaseQty(deductedBaseQty); + if ("RECEIPT_PickMtrl".equals(pmFormData.getForm_type())) { + handlePickEntity(entity, returnItem); + } else if ("RECEIPT_SPPickMtrl".equals(pmFormData.getForm_type())) { + handlesPickEntity(entity, returnItem); + } + String json = JSON.toJSONString(formData); + String resultStr = erpServiceUtils.save(formData).getString("result"); + JSONObject res = JSONObject.parseObject(resultStr); + JSONObject responseStatus = res.getJSONObject("Result").getJSONObject("ResponseStatus"); + boolean isSuccess = responseStatus.getBooleanValue("IsSuccess"); + if (isSuccess) { + message = responseStatus.getJSONArray("SuccessEntitys").toJSONString(); + message = "回执单创建成功,回传Erp数据为:" + message; + updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); + updateWrapper.set(PmFormData::getRemark, message); + updateWrapper.set(PmFormData::getErp_data, json); + // needAgain = false; + } else { + JSONArray errors = responseStatus.getJSONArray("Errors"); + if (ObjectUtils.isNotEmpty(errors)) { + message = errors.stream() + .map(error -> ((JSONObject) error).getString("Message")) + .collect(Collectors.joining("; ")); + } + message = "系统智能识别ERP批次与数量,分批匹配循环计算扣减库存,ERP返回错误信息:" + message + ",回传Erp数据为:" + json; + updateWrapper.set(PmFormData::getRemark, message); + updateWrapper.set(PmFormData::getBar_code, "1"); + } + } + } + // if (false) { + // BigDecimal retryRemainingQty = actualQty.multiply(BigDecimal.valueOf(0.05125)); + // for (ErpInventoryData item : result) { + // if (retryRemainingQty.compareTo(BigDecimal.ZERO) > 0) { + // ErpInventoryData retryReturnItem = new ErpInventoryData(); + // retryReturnItem.setLot(item.getLot()); + // retryReturnItem.setBomId(item.getBomId()); + // BigDecimal deductedSecQty = item.getSecQty().min(retryRemainingQty); + // retryRemainingQty = retryRemainingQty.subtract(deductedSecQty); + // retryReturnItem.setSecQty(deductedSecQty); + // handleEntity(newEntity, retryReturnItem); + // String json = JSON.toJSONString(newFormData); + // String retryResultStr = erpServiceUtils.save(newFormData).getString("result"); + // JSONObject retryRes = JSONObject.parseObject(retryResultStr); + // JSONObject retryResponseStatus = retryRes.getJSONObject("Result").getJSONObject("ResponseStatus"); + // boolean retryIsSuccess = retryResponseStatus.getBooleanValue("IsSuccess"); + // if (retryIsSuccess) { + // message = retryResponseStatus.getJSONArray("SuccessEntitys").toJSONString(); + // message = "回执单创建成功,回传Erp数据为:" + message; + // updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")); + // updateWrapper.set(PmFormData::getRemark, message); + // iPmFormDataService.update(updateWrapper); + // } + // } + // } + // } + } else { + updateWrapper.set(PmFormData::getRemark, "系统智能识别ERP批次与数量,分批匹配循环计算扣减库存,但ERP的该物料库存为0,无法扣除!"); + updateWrapper.set(PmFormData::getBar_code, "1"); + } + iPmFormDataService.update(updateWrapper); + } private void handlePickEntity(JSONObject fEntity, ErpInventoryData returnItem) { String lot = returnItem.getLot(); @@ -497,6 +612,8 @@ public class PmFormDataServiceImpl extends ServiceImpl vehicleMaters = vehicleMaterService.list(new QueryWrapper() @@ -169,13 +169,12 @@ public class StIvtStructattrServiceImpl extends ServiceImpl