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 48be47c7..e323e496 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 @@ -62,7 +62,7 @@ public class LimitStorageRuleHandler extends Decisioner struct.getCol_num() > 2).collect(Collectors.toList()); if ("1109".equals(start_point)) { log.info("限位策略:起点为1109,载具号:" + vehicleCode + "排除小于3排的仓位成功!"); @@ -98,6 +98,7 @@ public class LimitStorageRuleHandler extends Decisioner eqLimt = stIvtStructattr -> { 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 cd0cacd9..7bf4f958 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 @@ -62,6 +62,7 @@ public class InStorageTask extends AbstractTask { throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); }else { task.setStatus(StatusEnum.FORM_STATUS.code("待回传")); + task.setRemark("该任务属于混托任务多个任务中只需数据回传的任务"); } } task.setId(IdUtil.getStringId()); 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 dc4cf551..9e8a6e5d 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 @@ -66,37 +66,42 @@ public class PalletInStorageTask extends AbstractTask { String point_code1 = data.getString("start_point"); String vehicle_code = data.getString("vehicle_code"); String h = data.getString("height"); + String w = data.getString("weight"); if (StringUtils.isEmpty(point_code1)){ - throw new BadRequestException("申请任务失败:请求参数点位数据异常"); + throw new BadRequestException("weightError-申请任务失败:请求参数点位数据异常"); } if (StringUtils.isEmpty(vehicle_code)){ - throw new BadRequestException("申请任务失败:请求参数托盘数据异常"); + throw new BadRequestException("weightError-申请任务失败:请求参数托盘数据异常"); } if (StringUtils.isEmpty(h)){ - throw new BadRequestException("申请任务失败:请求参数高度点位数据异常"); + throw new BadRequestException("weightError-申请任务失败:请求参数高度点位数据异常"); } BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper() .eq("vehicle_code", vehicle_code)); if (vehicleInfo == null) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "信息不存在"); + throw new BadRequestException("weightError-申请任务失败:载具" + vehicle_code + "信息不存在"); + } + if (!(vehicleInfo.getWeight() > 0)) { + throw new BadRequestException("weightError-"+String.format(vehicle_code + "的重量未维护,请在载具管理中维护该类型载具重量。")); } List item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); if (CollectionUtils.isEmpty(item)) { - throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); + throw new BadRequestException("weightError-申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); } - List newVehicleMater =new ArrayList<>(); + iMdGruopDickService.pdaInWeightCheck(point_code1,w,vehicleInfo.getWeight(),item); + List newVehicleMater; //混托任务判断 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{ - item.stream().filter(r -> r.getNeed_pick() != null && r.getNeed_pick()).findFirst().ifPresent(newVehicleMater::add); + item.stream().filter(r -> r.getNeed_pick() != null&&StringUtils.isNotBlank(r.getGroup_id())&&r.getNeed_pick()).findFirst().ifPresent(newVehicleMater::add); } } else { newVehicleMater = item; } - newVehicleMater.forEach(r -> { + for (MdPbVehicleMaterVo r : newVehicleMater) { String remark = r.getRemark(); String isCheck = StringUtils.isNotBlank(r.getIs_check()) ? "1" : r.getIs_check(); if ("空托盘入库".equals(remark)) { @@ -120,7 +125,8 @@ public class PalletInStorageTask extends AbstractTask { String groupId = r.getGroup_id(); MdGruopDick mst = iMdGruopDickService.getById(groupId); if (mst == null) { - throw new BadRequestException("申请任务失败,载具没有组盘信息!"); + continue; + //throw new BadRequestException("申请任务失败,载具没有组盘信息!"); } List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) .lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code")); @@ -129,14 +135,6 @@ public class PalletInStorageTask extends AbstractTask { throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); } } - // SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper() - // .eq("vehicle_code", vehicle_code).select("task_code","vehicle_code") - // .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - // if (schBaseTask != null) { - // if (!schBaseTask.getVehicle_code().contains("T")) { - // throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code()); - // } - // } iBmVehicleInfoService.update(new UpdateWrapper() .set("h", Integer.valueOf(h)) .set("update_time", DateUtil.now()) @@ -157,7 +155,7 @@ public class PalletInStorageTask extends AbstractTask { .build("md_pb_vehicleMater", item) ); } - }); + } List list = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); if (ObjectUtils.isNotEmpty(list)) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java index d2212868..e5d572da 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; @@ -45,6 +46,7 @@ public class AcsToWmsService { private ISchBasePointService iSchBasePointService; public String applyTask(String service, String type, JSONObject data, InteracteDto param) { + String errorMsg = null; if ("InStorage".equals(service)) { try { JSONObject task = applyTaskMap.get(type).createTask(data); @@ -58,7 +60,14 @@ public class AcsToWmsService { String title = param.getType() + DateUtil.today() + param.getData().toString(); iSchBasePointService.sendErrorMsg("1", title, "任务申请失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志" + e); } - throw new BadRequestException("申请任务失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志:" + e); + if (StringUtils.isNotBlank(e.getMessage())) { + if (e.getMessage().contains("weightError")) { + errorMsg = e.getMessage().substring(e.getMessage().indexOf("weightError")); + } else { + errorMsg = "申请任务失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志:" + e; + } + } + throw new BadRequestException(errorMsg); } } return null; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java index 7af96c54..fdb4e49b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java @@ -156,5 +156,10 @@ public class SyncErpService { return erpServiceUtils.queryBills(query); } + + + + + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java index a4a4f42a..2f4602ea 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java @@ -49,4 +49,14 @@ public interface IMdGruopDickService extends IService { */ List getGroupDtl(String vehicle); + + /** + * 校验称重是否超出误差范围 + * deviceCode 点位名称 + * w 称重 + * 载具单重 + * 组盘信息 + */ + void pdaInWeightCheck(String deviceCode, String w,Integer weight, List item); + } 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 c1353242..600f72ca 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 @@ -25,6 +25,7 @@ import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; +import org.nl.wms.external_system.dto.InteracteDto; import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService; import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; @@ -38,7 +39,10 @@ import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl; +import org.nl.wms.system_manage.service.param.ISysParamService; +import org.nl.wms.system_manage.service.param.dao.Param; import org.nl.wms.system_manage.service.quartz.task.SyncErpBillsScheduleService; +import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -63,7 +67,8 @@ import java.util.stream.Collectors; @Service public class MdGruopDickServiceImpl extends ServiceImpl implements IMdGruopDickService { - + @Autowired + private ISysParamService iSysParamService; @Autowired private IMdPbVehicleMaterService iMdPbVehicleMaterService; @Autowired @@ -243,6 +248,10 @@ public class MdGruopDickServiceImpl extends ServiceImpl vehicleMaters = new ArrayList<>(); Map map = new HashMap<>(); - if (!CollectionUtils.isEmpty(forms)){ + if (!CollectionUtils.isEmpty(forms)) { for (int i = 0; i < tableData.size(); i++) { Map itemMap = tableData.get(i); JSONObject item = new JSONObject(itemMap); @@ -522,14 +531,140 @@ public class MdGruopDickServiceImpl extends ServiceImpl getGroupDtl(String vehicle_code) { - if (StringUtils.isEmpty(vehicle_code)){ + if (StringUtils.isEmpty(vehicle_code)) { return new ArrayList<>(); } return iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); } + + /** + * 校验称重是否超出误差范围 + * + * @param deviceCode 点位名称 + * @param weight 载具皮重 + * @param item 组盘物料信息 + */ + @Override + public void pdaInWeightCheck(String deviceCode, String w, Integer weight, List item) { + //称重检测校验是否开启 + Param isCheck = iSysParamService.findByCode("weight_check"); + if ("1".equals(isCheck.getValue())) { + if (CollectionUtils.isEmpty(item)) { + return; + } + //实际称重kg + BigDecimal actualWeightKg = BigDecimal.ZERO; + //同步并校验物料单重 + K3CloudApi k3CloudApi = erpServiceUtils.getCloudApi(); + SyncFormMapping syncFormMapping = syncFormMappingServiceImpl.getOne( + new LambdaQueryWrapper() + .in(SyncFormMapping::getForm_type, "BD_MATERIAL") + ); + String materialMappingString = JSON.toJSONString(syncFormMapping.getMapping_json()); + for (MdPbVehicleMaterVo r : item) { + MdMeMaterialbase materialInfo = + syncErpBillsScheduleService.queryMaterialResult( + materialMappingString, + "BD_MATERIAL", + false, + r.getMaterial_code(), + k3CloudApi + ); + if (materialInfo == null) { + throw new BadRequestException( + "weightError-载具" + item.get(0).getVehicle_code() + + "上的物料:" + r.getMaterial_code() + + "在ERP系统上检索不到相关物料信息,请检查!" + ); + } + r.setSingle_weight(materialInfo.getSingle_weight()); + } + //过滤出需要称重校验的物料(单重 > 0) + List validItems = item.stream() + .filter(r -> r.getSingle_weight() != null + && r.getSingle_weight().compareTo(BigDecimal.ZERO) > 0) + .collect(Collectors.toList()); + if (validItems.isEmpty()) { + return; + } + if (StringUtils.isNotBlank(w)) { + try { + actualWeightKg = new BigDecimal(w.trim()); + } catch (Exception e) { + throw new BadRequestException("weightError-称重数据格式非法:" + deviceCode + w); + } + } else { + try { + InteracteDto dto = InteracteDto.builder() + .service("wmsToAcsService") + .trace_id(MDC.get("trace_id")) + .type("getWeight") + .data(new JSONObject().fluentPut("device_code", deviceCode)) + .build(); + TableDataInfo result = InterationUtil.notifyExt( + "/api/wmsToAcs/apply", + (JSONObject) JSON.toJSON(dto) + ); + if ("200".equals(result.getCode()) && result.getData() != null) { + JSONObject data = JSONObject.parseObject(result.getData().toString()); + String weightStr = data.getString("weight"); + if (ObjectUtil.isNotEmpty(weightStr)) { + actualWeightKg = new BigDecimal(weightStr.trim()); + } + } + } catch (Exception ex) { + log.error("获取称重失败" + deviceCode + ex.getMessage()); + } + } + if (actualWeightKg.compareTo(BigDecimal.ZERO) <= 0) { + throw new BadRequestException( + String.format("weightError-该点位:%s,反馈称重为0,称重异常,请检查。", deviceCode) + ); + } + //查询出入库配置规则 + Param byCode = iSysParamService.findByCode(item.get(0).getVehicle_code().contains("T") ? "tp_range" : "lx_range"); + if (byCode == null || StringUtils.isEmpty(byCode.getValue())) { + throw new BadRequestException("weightError-未配置托盘或料箱的误差值,请检查。"); + } + // 误差值 + BigDecimal relativeError = new BigDecimal(byCode.getValue().trim()); + // 物料理论总重量 = Σ(单重 × 数量) + BigDecimal materialWeight = validItems.stream() + .map(r -> { + BigDecimal singleWeight = r.getSingle_weight(); + // 辅助单位包含 kg + if (StringUtils.isNotBlank(r.getAssist_unit_id())) { + if (r.getAssist_unit_id().toLowerCase().contains("kg")) { + singleWeight = singleWeight.multiply(BigDecimal.valueOf(1000)); + } + } + // 单重 × 数量 + return singleWeight.multiply(r.getQty()); + }) + .reduce(BigDecimal.ZERO, BigDecimal::add); + //实际称重换算克 + BigDecimal actualWeightG = actualWeightKg.multiply(BigDecimal.valueOf(1000)); + // 净重 = 实际称重 - 载具皮重 + BigDecimal netWeight = actualWeightG.subtract(BigDecimal.valueOf(weight)); + if (netWeight.compareTo(BigDecimal.ZERO) < 0) { + netWeight = BigDecimal.ZERO; + } + // 差异重量 = 净重 - 理论重量 - 误差 + BigDecimal diffWeight = netWeight + .subtract(materialWeight) + .abs(); + if (diffWeight.compareTo(relativeError) > 0) { + throw new BadRequestException( + String.format("weightError-该载具:%s,称重重量为%s,与物料实际重量:%s,进行对比已超过误差值:%sg,不允许入库,请检查。", + item.get(0).getVehicle_code(), netWeight, materialWeight, diffWeight) + ); + } + } + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java index 392be708..91f253e1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java @@ -31,7 +31,7 @@ public interface IMdPbVehicleMaterService extends IService { /** * 载具编码与id对应关系 * @param vehicle_code - * @return + * @return 1 */ Map getVehicleCode2Id(String material_id,String...vehicle_code); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml index 700cd9fb..7ac5fdb5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml @@ -17,13 +17,14 @@ +