add:增加托盘库位缺少时自动限高判断;
opt:优化盘点出入库功能;
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,不允许入库,请检查。")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>()
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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 {
|
||||
//整出
|
||||
|
||||
@@ -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插件
|
||||
|
||||
Reference in New Issue
Block a user