add:增加托盘库位缺少时自动限高判断;

opt:优化盘点出入库功能;
This commit is contained in:
2026-04-08 16:39:40 +08:00
parent 22a6d7b90a
commit 90163d54ce
9 changed files with 396 additions and 48 deletions

View File

@@ -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<StIvtStructattr, JSONObj
}
return result;
};
//找不到相等高度,则找更高的
Predicate<StIvtStructattr> 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<StIvtStructattr> 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<StIvtStructattr> 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<StIvtStructattr> ltLimtCollect = attrList.stream()
.filter(ltLimt)
.collect(Collectors.toList());
return ltLimtCollect;
// List<StIvtStructattr> ltLimtCollect = attrList.stream()
// .filter(ltLimt)
// .collect(Collectors.toList());
// return ltLimtCollect;
}
}

View File

@@ -84,7 +84,7 @@ public class InStorageTask extends AbstractTask {
iSchBaseTaskService.create(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.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);

View File

@@ -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<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().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());
}
}

View File

@@ -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<PmFormData> pmFormDataList = iPmFormDataService.list(new LambdaUpdateWrapper<PmFormData>().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<PmFormData> 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<PmFormData>().eq(PmFormData::getId, pmFormData.getSource_form_id()));
if (sourceForm != null) {
//更新源单的回传ID
LambdaUpdateWrapper<PmFormData> 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<PmFormData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.inSql(PmFormData::getParent_id,
"SELECT parent_id FROM pm_form_data WHERE id = '" + pmFormData.getSource_form_id() + "'");
List<PmFormData> sourceFormList = iPmFormDataService.list(queryWrapper);
sourceFormList = sourceFormList.stream().filter(r -> StringUtils.isNotBlank(r.getSource_form_id())).collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(sourceFormList)) {
Map<String, Object> linkedMap = new LinkedHashMap<>();
for (String key : model.keySet()) {
linkedMap.put(key, model.get(key));
}
Map<String, Object> tempMap = new LinkedHashMap<>();
for (Map.Entry<String, Object> 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<String, Object> linkedMap = new LinkedHashMap<>();
for (String key : fEntity.keySet()) {
linkedMap.put(key, fEntity.get(key));
}
Map<String, Object> tempMap = new LinkedHashMap<>();
for (Map.Entry<String, Object> 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<ErpInventoryData> result = erpServiceUtils.queryInventory(params);
Map<String, Object> linkedMap = new LinkedHashMap<>();
for (String key : fEntity.keySet()) {
linkedMap.put(key, fEntity.get(key));
}
Map<String, Object> tempMap = new LinkedHashMap<>();
for (Map.Entry<String, Object> 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();

View File

@@ -560,6 +560,14 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
}
//实际称重kg
BigDecimal actualWeightKg = BigDecimal.ZERO;
//实际称重g
BigDecimal actualWeightG = BigDecimal.ZERO;
//去皮称重g
BigDecimal netWeight = BigDecimal.ZERO;
//去皮称重g
boolean isKg = true;
//去皮称重g
String unitIsG = "g";
//同步并校验物料单重
K3CloudApi k3CloudApi = erpServiceUtils.getCloudApi();
SyncFormMapping syncFormMapping = syncFormMappingServiceImpl.getOne(
@@ -623,6 +631,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
String weightStr = data.getString("weight");
if (ObjectUtil.isNotEmpty(weightStr)) {
actualWeightKg = new BigDecimal(weightStr.trim());
isKg = false;
}
}
} catch (Exception ex) {
@@ -660,9 +669,9 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
return singleWeight.multiply(r.getQty());
})
.reduce(BigDecimal.ZERO, BigDecimal::add);
unitIsG = isKg ? "kg" : "g";
//实际称重换算克
BigDecimal actualWeightG = actualWeightKg.multiply(BigDecimal.valueOf(1000));
BigDecimal netWeight = BigDecimal.ZERO;
actualWeightG = isKg ? actualWeightKg.multiply(BigDecimal.valueOf(1000)) : actualWeightKg;
// 净重 = 实际称重 - 载具皮重
netWeight = actualWeightG.subtract(BigDecimal.valueOf(weight));
if (netWeight.compareTo(BigDecimal.ZERO) < 0) {
@@ -676,7 +685,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
log.error(item.get(0).getVehicle_code()+ "的物料数量为:" + validItems.get(0).getQty()
+ ",上报重量为:" + actualWeightKg + ",载具重量为:" + weight + ",去皮重量为:" + netWeight + ",与物料实际重量:" + materialWeight + ",进行对比已超过误差值" + diffWeight + ",不允许入库,请检查。");
throw new BadRequestException(
(item.get(0).getVehicle_code() + "的物料数量为:" + validItems.get(0).getQty() + ",上报重量为:" + actualWeightKg + "kg,载具重量为:" + weight + "g" + ",物料单重为:" + validItems.get(0).getSingle_weight() + validItems.get(0).getAssist_unit_id() +",去皮重量为:" + netWeight + "g与物料实际重量:" + materialWeight + "g进行对比已超过误差值" + diffWeight + "g不允许入库请检查。")
(item.get(0).getVehicle_code() + "的物料数量为:" + validItems.get(0).getQty() + ",上报重量为:" + actualWeightKg + unitIsG + ",载具重量为:" + weight + "g" + ",物料单重为:" + validItems.get(0).getSingle_weight() + validItems.get(0).getAssist_unit_id() + ",去皮重量为:" + netWeight + "g与物料实际重量:" + materialWeight + "g进行对比已超过误差值" + diffWeight + "g不允许入库请检查。")
);
}
}

View File

@@ -125,7 +125,8 @@ public class IOStorageController {
UpdateWrapper<MdPbVehicleMater> updateWrapper = new UpdateWrapper<MdPbVehicleMater>();
//盘点出库,直接出库确认则清除库存
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<StIvtStructattr>()

View File

@@ -155,6 +155,25 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getUpdate_time, DateUtil.now());
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<PmFormData>().eq(PmFormData::getId, pmFormData.getSource_form_id()));
if (sourceForm != null) {
//更新源单的回传ID
LambdaUpdateWrapper<PmFormData> 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<PmFormDataMapper, PmFormD
return message;
}
/**
* 自动回传失败单据
*/
public void handleBillEntity(JSONObject formData, PmFormData pmFormData) {
String message = "";
JSONObject model = formData.getJSONObject("Model");
JSONArray fEntityArray = formData.getJSONObject("Model").getJSONArray("FEntity");
model.put("FDate", DateUtil.now());
List<MdMeMaterialbase> materialList = iMdMeMaterialbaseService.list(new LambdaQueryWrapper<MdMeMaterialbase>().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<ErpInventoryData> result = erpServiceUtils.queryInventory(params);
BigDecimal remainingQty = actualQty;
LambdaUpdateWrapper<PmFormData> 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<PmFormDataMapper, PmFormD
String stockId = "";
if (pmFormDataList.get(0).getCode().contains("PPBOM")) {
stockId = "stock_Id";
} else if (pmFormDataList.get(0).getCode().contains("FHTZD")) {
stockId = "stock_Id";
} else if (pmFormDataList.get(0).getCode().contains("JDSCLLSQ")) {
stockId = "stockId";
} else if (pmFormDataList.get(0).getCode().contains("THTZD")) {
@@ -540,8 +657,8 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
stockId = "stockId";
} else if (code.contains("ZJDB")) {
stockId = "SrcStockId_Id";
} else if (code.contains("THTZD")) {
stockId = "StockId_Id";
} else if (code.contains("FHTZD")) {
stockId = "stock_Id";
} else if (code.contains("SCTL")) {
stockId = "StockId_Id";
} else if (code.contains("SCBL")) {

View File

@@ -22,8 +22,6 @@ import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
import org.nl.wms.decision_manage.handler.decisioner.impl.base.SameBlockNumRuleHandler;
import org.nl.wms.dispatch_manage.task.handler.impl.MoveStorageTask;
import org.nl.wms.dispatch_manage.task.handler.impl.OutStorageTask;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
@@ -126,8 +124,10 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
return;
} else {
//如果是整出,且仓位载具为当前任务载具,则清除,如果是新入库载具,则不能清除
if (attr.getVehicle_code().equals(vehicle_code) && !growth && change_qty == null) {
wrapper.set("vehicle_code", null);
if (StringUtils.isNotBlank(attr.getVehicle_code())) {
if (attr.getVehicle_code().equals(vehicle_code) && !growth && change_qty == null) {
wrapper.set("vehicle_code", null);
}
}
}
List<MdPbVehicleMater> vehicleMaters = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
@@ -169,13 +169,12 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
if (!growth) {
update.set("remark", "该托盘需要拣选的物料为:" + materialbase.getMaterial_name() + ",物料编码为:" + materialbase.getMaterial_code() + ",数量为:" + vehicleMater.getFrozen_qty() + ",拣选完请把托盘剩余物料拉到入库口进行回库");
}
} else {
//托盘入库清除拣选信息
if (growth) {
update.set("remark", "");
}
}
}
//入库清除拣选信息
if (growth) {
update.set("remark", "").set("need_pick", false).set("is_check", null);
}
update.set("qty", subtract);//50
} else {
//整出

View File

@@ -1,7 +1,7 @@
ENV = 'development'
# 接口地址
VUE_APP_BASE_API = 'http://127.0.0.1:8099'
VUE_APP_BASE_API = 'http://127.0.0.1:8018'
VUE_APP_WS_API = 'ws://127.0.0.1:8099'
# 是否启用 babel-plugin-dynamic-import-node插件