add:增加料箱/托盘称重检测功能。

This commit is contained in:
2026-01-28 20:22:06 +08:00
parent 3a8ca11b88
commit de0e4b62da
18 changed files with 391 additions and 115 deletions

View File

@@ -62,7 +62,7 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObj
String start_point = param.getString("start_point"); String start_point = param.getString("start_point");
String errorTask = param.getString("errorTask"); String errorTask = param.getString("errorTask");
log.info("限位策略:起点为" + start_point + ",载具号:" + vehicleCode + "执行策略前仓位位数为:" + list.size() + ",第一个仓位为:" + list.get(0).getStruct_code()); log.info("限位策略:起点为" + start_point + ",载具号:" + vehicleCode + "执行策略前仓位位数为:" + list.size() + ",第一个仓位为:" + list.get(0).getStruct_code());
if ((StringUtils.isNotBlank(start_point) || StringUtils.isNotBlank(errorTask))) { if ((StringUtils.isNotBlank(start_point) || StringUtils.isNotBlank(errorTask))&&!vehicleCode.contains("T")) {
list = list.stream().filter(struct -> struct.getCol_num() > 2).collect(Collectors.toList()); list = list.stream().filter(struct -> struct.getCol_num() > 2).collect(Collectors.toList());
if ("1109".equals(start_point)) { if ("1109".equals(start_point)) {
log.info("限位策略起点为1109载具号" + vehicleCode + "排除小于3排的仓位成功"); log.info("限位策略起点为1109载具号" + vehicleCode + "排除小于3排的仓位成功");
@@ -98,6 +98,7 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObj
vehicle.setW(0); vehicle.setW(0);
vehicle.setL(0); vehicle.setL(0);
vehicle.setWeight(0); vehicle.setWeight(0);
} }
BmVehicleInfo finalVehicle = vehicle; BmVehicleInfo finalVehicle = vehicle;
Predicate<StIvtStructattr> eqLimt = stIvtStructattr -> { Predicate<StIvtStructattr> eqLimt = stIvtStructattr -> {

View File

@@ -62,6 +62,7 @@ public class InStorageTask extends AbstractTask {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code());
}else { }else {
task.setStatus(StatusEnum.FORM_STATUS.code("待回传")); task.setStatus(StatusEnum.FORM_STATUS.code("待回传"));
task.setRemark("该任务属于混托任务多个任务中只需数据回传的任务");
} }
} }
task.setId(IdUtil.getStringId()); task.setId(IdUtil.getStringId());

View File

@@ -66,37 +66,42 @@ public class PalletInStorageTask extends AbstractTask {
String point_code1 = data.getString("start_point"); String point_code1 = data.getString("start_point");
String vehicle_code = data.getString("vehicle_code"); String vehicle_code = data.getString("vehicle_code");
String h = data.getString("height"); String h = data.getString("height");
String w = data.getString("weight");
if (StringUtils.isEmpty(point_code1)){ if (StringUtils.isEmpty(point_code1)){
throw new BadRequestException("申请任务失败:请求参数点位数据异常"); throw new BadRequestException("weightError-申请任务失败:请求参数点位数据异常");
} }
if (StringUtils.isEmpty(vehicle_code)){ if (StringUtils.isEmpty(vehicle_code)){
throw new BadRequestException("申请任务失败:请求参数托盘数据异常"); throw new BadRequestException("weightError-申请任务失败:请求参数托盘数据异常");
} }
if (StringUtils.isEmpty(h)){ if (StringUtils.isEmpty(h)){
throw new BadRequestException("申请任务失败:请求参数高度点位数据异常"); throw new BadRequestException("weightError-申请任务失败:请求参数高度点位数据异常");
} }
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>() BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>()
.eq("vehicle_code", vehicle_code)); .eq("vehicle_code", vehicle_code));
if (vehicleInfo == null) { 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<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); List<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code);
if (CollectionUtils.isEmpty(item)) { if (CollectionUtils.isEmpty(item)) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); throw new BadRequestException("weightError-申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在");
} }
List<MdPbVehicleMaterVo> newVehicleMater =new ArrayList<>(); iMdGruopDickService.pdaInWeightCheck(point_code1,w,vehicleInfo.getWeight(),item);
List<MdPbVehicleMaterVo> newVehicleMater;
//混托任务判断 //混托任务判断
if (item.get(0).getVehicle_code().contains("T")&&item.size() > 1) { 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()); newVehicleMater= item.stream().filter(r -> r.getNeed_pick() == null || !r.getNeed_pick()).collect(Collectors.toList());
if (newVehicleMater.size() ==item.size()) { if (newVehicleMater.size() ==item.size()) {
newVehicleMater.get(0).setNeed_pick(true); newVehicleMater.get(0).setNeed_pick(true);
}else{ }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 { } else {
newVehicleMater = item; newVehicleMater = item;
} }
newVehicleMater.forEach(r -> { for (MdPbVehicleMaterVo r : newVehicleMater) {
String remark = r.getRemark(); String remark = r.getRemark();
String isCheck = StringUtils.isNotBlank(r.getIs_check()) ? "1" : r.getIs_check(); String isCheck = StringUtils.isNotBlank(r.getIs_check()) ? "1" : r.getIs_check();
if ("空托盘入库".equals(remark)) { if ("空托盘入库".equals(remark)) {
@@ -120,7 +125,8 @@ public class PalletInStorageTask extends AbstractTask {
String groupId = r.getGroup_id(); String groupId = r.getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId); MdGruopDick mst = iMdGruopDickService.getById(groupId);
if (mst == null) { if (mst == null) {
throw new BadRequestException("申请任务失败,载具没有组盘信息!"); continue;
//throw new BadRequestException("申请任务失败,载具没有组盘信息!");
} }
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code) 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"));
@@ -129,14 +135,6 @@ public class PalletInStorageTask extends AbstractTask {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code()); throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code());
} }
} }
// SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
// .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<BmVehicleInfo>() iBmVehicleInfoService.update(new UpdateWrapper<BmVehicleInfo>()
.set("h", Integer.valueOf(h)) .set("h", Integer.valueOf(h))
.set("update_time", DateUtil.now()) .set("update_time", DateUtil.now())
@@ -157,7 +155,7 @@ public class PalletInStorageTask extends AbstractTask {
.build("md_pb_vehicleMater", item) .build("md_pb_vehicleMater", item)
); );
} }
}); }
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code) List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成"))); .lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (ObjectUtils.isNotEmpty(list)) { if (ObjectUtils.isNotEmpty(list)) {

View File

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum; import org.nl.common.enums.StatusEnum;
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
@@ -45,6 +46,7 @@ public class AcsToWmsService {
private ISchBasePointService iSchBasePointService; private ISchBasePointService iSchBasePointService;
public String applyTask(String service, String type, JSONObject data, InteracteDto<Map> param) { public String applyTask(String service, String type, JSONObject data, InteracteDto<Map> param) {
String errorMsg = null;
if ("InStorage".equals(service)) { if ("InStorage".equals(service)) {
try { try {
JSONObject task = applyTaskMap.get(type).createTask(data); JSONObject task = applyTaskMap.get(type).createTask(data);
@@ -58,7 +60,14 @@ public class AcsToWmsService {
String title = param.getType() + DateUtil.today() + param.getData().toString(); String title = param.getType() + DateUtil.today() + param.getData().toString();
iSchBasePointService.sendErrorMsg("1", title, "任务申请失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志" + e); 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; return null;

View File

@@ -156,5 +156,10 @@ public class SyncErpService {
return erpServiceUtils.queryBills(query); return erpServiceUtils.queryBills(query);
} }
} }

View File

@@ -49,4 +49,14 @@ public interface IMdGruopDickService extends IService<MdGruopDick> {
*/ */
List<MdPbVehicleMaterVo> getGroupDtl(String vehicle); List<MdPbVehicleMaterVo> getGroupDtl(String vehicle);
/**
* 校验称重是否超出误差范围
* deviceCode 点位名称
* w 称重
* 载具单重
* 组盘信息
*/
void pdaInWeightCheck(String deviceCode, String w,Integer weight, List<MdPbVehicleMaterVo> item);
} }

View File

@@ -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.material.service.dao.MdMeMaterialbase;
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; 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.IActRuExecutionService;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; 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.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.dao.SyncFormMapping;
import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl; 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.nl.wms.system_manage.service.quartz.task.SyncErpBillsScheduleService;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -63,7 +67,8 @@ import java.util.stream.Collectors;
@Service @Service
public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGruopDick> implements IMdGruopDickService { public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGruopDick> implements IMdGruopDickService {
@Autowired
private ISysParamService iSysParamService;
@Autowired @Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService; private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired @Autowired
@@ -243,6 +248,10 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
} }
JSONObject item0 = new JSONObject(tableData.get(0)); JSONObject item0 = new JSONObject(tableData.get(0));
String vehicle0 = item0.getString("vehicle_code"); String vehicle0 = item0.getString("vehicle_code");
if (StringUtils.isBlank(vehicle0)) {
throw new BadRequestException("组盘失败:载具号不能为空!");
}
vehicle0 = vehicle0.trim();
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicle0); BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicle0);
if (vehicleInfo == null) { if (vehicleInfo == null) {
throw new BadRequestException("组盘失败:载具" + vehicle0 + "信息不存在请在载具信息中维护"); throw new BadRequestException("组盘失败:载具" + vehicle0 + "信息不存在请在载具信息中维护");
@@ -525,6 +534,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
throw new BadRequestException("导入失败" + ex.getMessage()); throw new BadRequestException("导入失败" + ex.getMessage());
} }
} }
@Override @Override
public List<MdPbVehicleMaterVo> getGroupDtl(String vehicle_code) { public List<MdPbVehicleMaterVo> getGroupDtl(String vehicle_code) {
if (StringUtils.isEmpty(vehicle_code)) { if (StringUtils.isEmpty(vehicle_code)) {
@@ -532,4 +542,129 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
} }
return iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); return iMdPbVehicleMaterService.getVehicleMaters(vehicle_code);
} }
/**
* 校验称重是否超出误差范围
*
* @param deviceCode 点位名称
* @param weight 载具皮重
* @param item 组盘物料信息
*/
@Override
public void pdaInWeightCheck(String deviceCode, String w, Integer weight, List<MdPbVehicleMaterVo> 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<SyncFormMapping>()
.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<MdPbVehicleMaterVo> 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<Object> 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)
);
}
}
}
} }

View File

@@ -31,7 +31,7 @@ public interface IMdPbVehicleMaterService extends IService<MdPbVehicleMater> {
/** /**
* 载具编码与id对应关系 * 载具编码与id对应关系
* @param vehicle_code * @param vehicle_code
* @return * @return 1
*/ */
Map<String, String> getVehicleCode2Id(String material_id,String...vehicle_code); Map<String, String> getVehicleCode2Id(String material_id,String...vehicle_code);

View File

@@ -17,13 +17,14 @@
<result property="material_name" column="material_name"/> <result property="material_name" column="material_name"/>
<result property="material_spec" column="material_spec"/> <result property="material_spec" column="material_spec"/>
<result property="single_weight" column="single_weight"/> <result property="single_weight" column="single_weight"/>
<result property="assist_unit_id" column="assist_unit_id"/>
<result property="unit_name" column="unit_name"/> <result property="unit_name" column="unit_name"/>
<result property="form_data" column="form_data" <result property="form_data" column="form_data"
typeHandler="org.nl.common.domain.mybatis.handler.FastjsonSortTypeHandler"/> typeHandler="org.nl.common.domain.mybatis.handler.FastjsonSortTypeHandler"/>
</resultMap> </resultMap>
<select id="getVehicleMaters" <select id="getVehicleMaters"
resultMap="VoResultMap"> resultMap="VoResultMap">
select md_pb_vehicleMater.*, material_code, material_name, material_spec select md_pb_vehicleMater.*, material_code, material_name, material_spec,single_weight,assist_unit_id
from md_pb_vehicleMater from md_pb_vehicleMater
left join md_me_materialbase left join md_me_materialbase
on md_pb_vehicleMater.material_id = md_me_materialbase.material_id on md_pb_vehicleMater.material_id = md_me_materialbase.material_id

View File

@@ -22,7 +22,8 @@ public class MdPbVehicleMaterVo extends MdPbVehicleMater {
private String material_code; private String material_code;
private String material_name; private String material_name;
private String material_spec; private String material_spec;
private String single_weight; //辅助重量
private String assist_unit_id;
private BigDecimal single_weight;
private String unit_name; private String unit_name;
} }

View File

@@ -6,12 +6,14 @@ import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo; import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log; import org.nl.common.anno.Log;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum; import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.ErpServiceUtils;
import org.nl.common.utils.MapOf; import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils; import org.nl.common.utils.RedissonUtils;
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
@@ -20,6 +22,7 @@ import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
import org.nl.wms.dispatch_manage.task.handler.impl.TranforTask; import org.nl.wms.dispatch_manage.task.handler.impl.TranforTask;
import org.nl.wms.external_system.acs.service.WmsToAcsService; import org.nl.wms.external_system.acs.service.WmsToAcsService;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo; import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo;
import org.nl.wms.pda_manage.devicemanage.dto.ComTp; import org.nl.wms.pda_manage.devicemanage.dto.ComTp;
@@ -41,10 +44,13 @@ import java.util.Map;
/** /**
* 设备操控 * 设备操控
*
* @author generator * @author generator
* @since 2024-03-28 * @since 2024-03-28
*/ */
@RestController @RestController
@Slf4j
@RequestMapping("api/deviceManage") @RequestMapping("api/deviceManage")
public class DeviceManageController { public class DeviceManageController {
@@ -60,8 +66,14 @@ public class DeviceManageController {
private TranforTask tranforTask; private TranforTask tranforTask;
@Autowired @Autowired
private IStIvtStructattrService iStIvtStructattrService; private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdGruopDickService iMdGruopDickService;
/** /**
* 切换出入库模式 * 切换出入库模式
*
* @param form * @param form
* @return * @return
*/ */
@@ -106,29 +118,33 @@ public class DeviceManageController {
Assert.noNullElements(new Object[]{form.getDevice_code(), form.getVehicle_code()}, "请求参数不能为空"); Assert.noNullElements(new Object[]{form.getDevice_code(), form.getVehicle_code()}, "请求参数不能为空");
String device_code = form.getDevice_code(); String device_code = form.getDevice_code();
String vehicleCode = form.getVehicle_code(); String vehicleCode = form.getVehicle_code();
String is_check = form.getIs_check(); String isCheck = form.getIs_check();
if (StringUtils.isBlank(is_check)) { if (StringUtils.isBlank(isCheck)) {
is_check = "1"; isCheck = "1";
} }
SchBasePoint code = iSchBasePointService.getOne(new QueryWrapper<SchBasePoint>().eq("code", device_code)); SchBasePoint code = iSchBasePointService.getOne(new QueryWrapper<SchBasePoint>().eq("code", device_code));
if (code != null && !code.getIs_used()) { if (code != null && !code.getIs_used()) {
throw new BadRequestException(String.format("输送线%s模式不正确不允许下发运动", device_code)); throw new BadRequestException("weightError-"+String.format("输送线%s模式不正确不允许下发运动", device_code));
} }
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>() BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>()
.eq("vehicle_code", vehicleCode)); .eq("vehicle_code", vehicleCode));
if (vehicleInfo == null) { if (vehicleInfo == null) {
throw new BadRequestException(String.format(vehicleCode + "载具信息不存在")); throw new BadRequestException("weightError-"+String.format(vehicleCode + "载具信息不存在"));
}
if (!(vehicleInfo.getWeight() > 0)) {
throw new BadRequestException("weightError-"+String.format(vehicleCode + "的重量未维护,请在载具管理中维护该类型载具重量。"));
} }
List<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicleCode); List<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicleCode);
if (CollectionUtils.isEmpty(item)) { if (CollectionUtils.isEmpty(item)) {
throw new BadRequestException(String.format(vehicleCode + "载具组盘信息不存在")); throw new BadRequestException("weightError-"+String.format(vehicleCode + "载具组盘信息不存在"));
} }
for (MdPbVehicleMaterVo materVo : item) { for (MdPbVehicleMaterVo materVo : item) {
if (materVo.getQty().intValue() == 0) { if (materVo.getQty().intValue() == 0) {
throw new BadRequestException(String.format(vehicleCode + "组盘异常,确认是否出库后组盘")); throw new BadRequestException(String.format("weightError-"+vehicleCode + "组盘异常,确认是否出库后组盘"));
} }
} }
if ("1".equals(is_check)) { iMdGruopDickService.pdaInWeightCheck(device_code,null,vehicleInfo.getWeight(), item);
if ("1".equals(isCheck)) {
//校验料箱是否还存在库存 //校验料箱是否还存在库存
RedissonUtils.lock(() -> { RedissonUtils.lock(() -> {
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>() QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()

View File

@@ -1,8 +1,15 @@
package org.nl.wms.pda_manage.iostorage.sevice; package org.nl.wms.pda_manage.iostorage.sevice;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.ErpServiceUtils;
import org.nl.common.utils.InterationUtil;
import org.nl.common.utils.ListOf; import org.nl.common.utils.ListOf;
import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; 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.material.service.dao.MdMeMaterialbase;
@@ -10,15 +17,24 @@ import org.nl.wms.base_manage.measure.service.IBmMeasureUnitService;
import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit; import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit;
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService; import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo; import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
import org.nl.wms.external_system.dto.InteracteDto;
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import org.nl.wms.pda_manage.group.dto.GroupItemData; import org.nl.wms.pda_manage.group.dto.GroupItemData;
import org.nl.wms.pda_manage.group.dto.MaterGroupDto; import org.nl.wms.pda_manage.group.dto.MaterGroupDto;
import org.nl.wms.pda_manage.group.dto.MaterItem; import org.nl.wms.pda_manage.group.dto.MaterItem;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormInMst; import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormInMst;
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.quartz.task.SyncErpBillsScheduleService;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.math.BigDecimal;
import java.math.RoundingMode;
@Service @Service
public class PdaInIOService { public class PdaInIOService {
@Autowired @Autowired
@@ -32,6 +48,17 @@ public class PdaInIOService {
@Autowired @Autowired
IBmMeasureUnitService iBmMeasureUnitService; IBmMeasureUnitService iBmMeasureUnitService;
@Autowired
private ErpServiceUtils erpServiceUtils;
@Autowired
private SyncFormMappingServiceImpl syncFormMappingServiceImpl;
@Lazy
@Autowired
private SyncErpBillsScheduleService syncErpBillsScheduleService;
/** /**
* 合格证入库 * 合格证入库
* 确认参数完整性 * 确认参数完整性
@@ -76,6 +103,10 @@ public class PdaInIOService {
} }
String materialId = mst.getMaterial_id(); String materialId = mst.getMaterial_id();
String vehicleCode = mst.getVehicle_code(); String vehicleCode = mst.getVehicle_code();
if (StringUtils.isBlank(vehicleCode)) {
throw new BadRequestException("组盘失败:载具号不能为空!");
}
vehicleCode = vehicleCode.trim();
String unitId = mst.getUnit_id(); String unitId = mst.getUnit_id();
mst.setStockId("FStockPallet".equals(mst.getStor_code()) ? "24" : "25"); mst.setStockId("FStockPallet".equals(mst.getStor_code()) ? "24" : "25");
if (StringUtils.isBlank(mst.getSrcBillNo())) { if (StringUtils.isBlank(mst.getSrcBillNo())) {
@@ -139,5 +170,4 @@ public class PdaInIOService {
// }); // });
} }
} }

View File

@@ -65,6 +65,7 @@
LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code
WHERE st_ivt_structattr.vehicle_code is not null and md_pb_vehicleMater.frozen_qty = 0 WHERE st_ivt_structattr.vehicle_code is not null and md_pb_vehicleMater.frozen_qty = 0
and md_pb_vehicleMater.is_lock = false and md_pb_vehicleMater.is_lock = false
and md_pb_vehicleMater.is_delete = false
<if test="stor_code != null and stor_code != ''"> <if test="stor_code != null and stor_code != ''">
and st_ivt_structattr.stor_code = #{stor_code} and st_ivt_structattr.stor_code = #{stor_code}
</if> </if>

View File

@@ -17,6 +17,8 @@ import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum; import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.*; import org.nl.common.utils.*;
import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService;
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.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.MoveStorageTask;
import org.nl.wms.dispatch_manage.task.handler.impl.OutStorageTask; import org.nl.wms.dispatch_manage.task.handler.impl.OutStorageTask;
@@ -70,7 +72,8 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
private IMdPbVehicleMaterService vehicleMaterService; private IMdPbVehicleMaterService vehicleMaterService;
@Autowired @Autowired
private IStIvtStructivtflowService structivtflowService; private IStIvtStructivtflowService structivtflowService;
@Autowired
private IMdMeMaterialbaseService mdMeMaterialbaseService;
@Autowired @Autowired
private StIvtStructattrMapper stIvtStructattrMapper; private StIvtStructattrMapper stIvtStructattrMapper;
@@ -139,6 +142,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
//更新冻结数量 //更新冻结数量
for (MdPbVehicleMater vehicleMater : vehicleMaters) { for (MdPbVehicleMater vehicleMater : vehicleMaters) {
String vehicleCode = vehicleMater.getVehicle_code(); String vehicleCode = vehicleMater.getVehicle_code();
MdMeMaterialbase materialbase = mdMeMaterialbaseService.getById(vehicleMater.getMaterial_id());
BigDecimal subtract = vehicleMater.getQty().subtract(vehicleMater.getFrozen_qty()); BigDecimal subtract = vehicleMater.getQty().subtract(vehicleMater.getFrozen_qty());
//100-出50 = 50 //100-出50 = 50
UpdateWrapper<MdPbVehicleMater> update = new UpdateWrapper<MdPbVehicleMater>() UpdateWrapper<MdPbVehicleMater> update = new UpdateWrapper<MdPbVehicleMater>()
@@ -150,6 +154,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
if (subtract.intValue() > 0) { if (subtract.intValue() > 0) {
//托盘拣选 //托盘拣选
if (vehicleCode.contains("T")) { if (vehicleCode.contains("T")) {
if (vehicleMater.getFrozen_qty().compareTo(BigDecimal.ZERO) > 0) {
String groupId = vehicleMater.getGroup_id(); String groupId = vehicleMater.getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId); MdGruopDick mst = iMdGruopDickService.getById(groupId);
if (mst != null) { if (mst != null) {
@@ -160,10 +165,9 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
.eq("id", groupId)); .eq("id", groupId));
} }
update.set("need_pick", true); update.set("need_pick", true);
if (vehicleMater.getFrozen_qty().compareTo(BigDecimal.ZERO) > 0) {
//托盘出库提示拣选信息 //托盘出库提示拣选信息
if (!growth) { if (!growth) {
update.set("remark", "该托盘需要拣选数量为:" + vehicleMater.getFrozen_qty() + ",拣选完请把托盘剩余物料拉到入库口进行回库"); update.set("remark", "该托盘需要拣选的物料为:" + materialbase.getMaterial_name() + ",物料编码为:" + materialbase.getMaterial_code() + ",数量为:" + vehicleMater.getFrozen_qty() + ",拣选完请把托盘剩余物料拉到入库口进行回库");
} }
} else { } else {
//托盘入库清除拣选信息 //托盘入库清除拣选信息
@@ -178,7 +182,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
//托盘整出需要扣库存,除了二楼料箱整出不扣库存,其他都扣库存 //托盘整出需要扣库存,除了二楼料箱整出不扣库存,其他都扣库存
if (!("2114").equals(point_code2)) { if (!("2114").equals(point_code2)) {
if (vehicleCode.contains("T")) { if (vehicleCode.contains("T")) {
update.set("remark", "该托盘需要取走全部数量,拣选数量为:" + vehicleMater.getFrozen_qty() + "拣选完该物料数量为0如果托盘不存在其他类型物料则作为空托盘使用无需回库"); update.set("remark", "该托盘需要拣选的物料为:"+materialbase.getMaterial_name()+",物料编码为:"+materialbase.getMaterial_code()+",数量为:"+ vehicleMater.getFrozen_qty() + "拣选完该物料数量为0如果托盘不存在其他类型物料则作为空托盘使用无需回库").set("need_pick",false);
} }
if (!task_type.equals(StatusEnum.IOBILL_TYPE_OUT.code("盘点出库"))) { if (!task_type.equals(StatusEnum.IOBILL_TYPE_OUT.code("盘点出库"))) {
update.set("qty", subtract); update.set("qty", subtract);
@@ -419,7 +423,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
@Override @Override
public List<StructAssignQty> getStructIvtAssign(List<String> materials, String stor_code) { public List<StructAssignQty> getStructIvtAssign(List<String> materials, String stor_code) {
if (StringUtils.isEmpty(stor_code) || materials == null || materials.size() == 0) { if (StringUtils.isEmpty(stor_code) || materials == null || materials.size() == 0) {
throw new BadRequestException("查询可用库存失败:物料或仓库未指定"); throw new BadRequestException("查询可用库存失败:该单据的物料或仓库不属于料箱库或托盘库请检查ERP单据的物料或仓库信息是否正确");
} }
List<StructAssignQty> mst_detail = this.baseMapper.getStructIvtAssign(materials, stor_code); List<StructAssignQty> mst_detail = this.baseMapper.getStructIvtAssign(materials, stor_code);
return mst_detail; return mst_detail;

View File

@@ -3,19 +3,22 @@ package org.nl.wms.system_manage.service.param.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.domain.entity.PageQuery; import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.MapOf; import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
import org.nl.wms.system_manage.service.param.ISysParamService; 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.param.dao.Param;
import org.nl.wms.system_manage.service.param.dao.mapper.SysParamMapper; import org.nl.wms.system_manage.service.param.dao.mapper.SysParamMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +42,9 @@ public class SysParamServiceImpl extends ServiceImpl<SysParamMapper, Param> impl
private final SysParamMapper paramMapper; private final SysParamMapper paramMapper;
@Autowired
private IBmVehicleInfoService iBmVehicleInfoService;
@Override @Override
public IPage<Param> queryPage(Map whereJson, PageQuery page) { public IPage<Param> queryPage(Map whereJson, PageQuery page) {
QueryWrapper<Param> queryWrapper = new QueryWrapper<>(); QueryWrapper<Param> queryWrapper = new QueryWrapper<>();
@@ -75,6 +81,13 @@ public class SysParamServiceImpl extends ServiceImpl<SysParamMapper, Param> impl
param.setUpdate_name(SecurityUtils.getCurrentNickName()); param.setUpdate_name(SecurityUtils.getCurrentNickName());
param.setUpdate_time(new Date()); param.setUpdate_time(new Date());
paramMapper.updateById(param); paramMapper.updateById(param);
if (param.getCode().contains("blx_weight") && param.getName().contains("大料箱")) {
iBmVehicleInfoService.update(new LambdaUpdateWrapper<BmVehicleInfo>().set(BmVehicleInfo::getWeight, param.getValue()).eq(BmVehicleInfo::getVehicle_type, "02"));
} else if (param.getCode().contains("mlx_weight") && param.getName().contains("中料箱")) {
iBmVehicleInfoService.update(new LambdaUpdateWrapper<BmVehicleInfo>().set(BmVehicleInfo::getWeight, param.getValue()).eq(BmVehicleInfo::getVehicle_type, "03"));
} else if (param.getCode().contains("btp_weight") && param.getName().contains("铁托盘")) {
iBmVehicleInfoService.update(new LambdaUpdateWrapper<BmVehicleInfo>().set(BmVehicleInfo::getWeight, param.getValue()).eq(BmVehicleInfo::getVehicle_type, "01"));
}
} }
@Override @Override

View File

@@ -13,14 +13,12 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException; import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.*; import org.nl.common.utils.*;
import org.nl.config.lucene.LuceneAppender; import org.nl.config.lucene.LuceneAppender;
import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; 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.material.service.dao.MdMeMaterialbase;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.config_manage.form_struc.service.impl.BmFormStrucServiceImpl; import org.nl.wms.config_manage.form_struc.service.impl.BmFormStrucServiceImpl;
import org.nl.wms.dispatch_manage.task.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.external_system.erp.dto.ErpQuery; import org.nl.wms.external_system.erp.dto.ErpQuery;
import org.nl.wms.external_system.erp.dto.ErpSec; import org.nl.wms.external_system.erp.dto.ErpSec;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
@@ -35,6 +33,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@@ -54,8 +53,7 @@ public class SyncErpBillsScheduleService {
@Autowired @Autowired
private SyncFormMappingServiceImpl syncFormMappingServiceImpl; private SyncFormMappingServiceImpl syncFormMappingServiceImpl;
@Autowired
private SchBaseTaskServiceImpl schBaseTaskServiceImpl;
@Autowired @Autowired
@@ -135,7 +133,7 @@ public class SyncErpBillsScheduleService {
// 获取当前日期 // 获取当前日期
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -15); calendar.add(Calendar.DAY_OF_MONTH, -210);
String sevenDaysAgo = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); String sevenDaysAgo = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
String filterString; String filterString;
if (StringUtils.isNotBlank(billCode)) { if (StringUtils.isNotBlank(billCode)) {
@@ -370,9 +368,6 @@ public class SyncErpBillsScheduleService {
List<Object> result = new ArrayList<>(); List<Object> result = new ArrayList<>();
result.add(view.getResult().getResult()); result.add(view.getResult().getResult());
getData(mappingJson, formType, dtlSplit, result); getData(mappingJson, formType, dtlSplit, result);
} else {
ArrayList<RepoError> errors = status.getErrors();
String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(","));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("处理ID [{}] 时出现异常: {}", fid, e.getMessage()); log.error("处理ID [{}] 时出现异常: {}", fid, e.getMessage());
@@ -387,10 +382,53 @@ public class SyncErpBillsScheduleService {
} }
} }
public MdMeMaterialbase queryMaterialResult(String mappingJson, String formType, Boolean dtlSplit, String id, K3CloudApi cloudApi) {
MdMeMaterialbase materialBase = new MdMeMaterialbase();
try {
{
ErpQuery query = new ErpQuery();
query.setFilterString(id.contains(".") ? "FUseOrgId='750572' AND FNUMBER ='" + id + "'" : "FUseOrgId='750572' AND FMATERIALID ='" + id + "'");
query.setFormId(formType);
query.setFieldKeys("FMATERIALID");
query.setLimit(0);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
// Set<String> exitFormDataList = pmFormDataMapper.existFormDataList();
for (List<Object> list : lists) {
for (Object r : list) {
String fid = r.toString();
if (StringUtils.isEmpty(fid)) {
log.error("单据同步失败,没有找到FID");
continue;
}
try {
OperateParam param = new OperateParam();
param.setId(fid);
OperatorResult view = cloudApi.view(formType, param);
RepoStatus status = view.getResult().getResponseStatus();
if (status.isIsSuccess()) {
List<Object> result = new ArrayList<>();
result.add(view.getResult().getResult());
materialBase = getData(mappingJson, formType, dtlSplit, result);
}
} catch (Exception e) {
log.error("处理ID [{}] 时出现异常: {}", fid, e.getMessage());
}
}
}
}
return materialBase;
} catch (Exception ex) {
log.error("同步数据时出现异常: {}", ex.getMessage());
return null;
}
}
/** /**
* 处理物料信息 * 处理物料信息
*/ */
private void getData(String mappingJson, String formType, Boolean dtlSplit, List<Object> result) { private MdMeMaterialbase getData(String mappingJson, String formType, Boolean dtlSplit, List<Object> result) {
MdMeMaterialbase materialBase = new MdMeMaterialbase();
外部: 外部:
for (Object r : result) { for (Object r : result) {
try { try {
@@ -398,12 +436,19 @@ public class SyncErpBillsScheduleService {
List<PmFormData> formDataList = formDataService.syncAnalyse(mappingJsonArray, formType, dtlSplit, JSON.toJSONString(r)); List<PmFormData> formDataList = formDataService.syncAnalyse(mappingJsonArray, formType, dtlSplit, JSON.toJSONString(r));
if (ObjectUtils.isNotEmpty(formDataList)) { if (ObjectUtils.isNotEmpty(formDataList)) {
String assistUint = "0"; String assistUint = "0";
String netWeight = "0";
JSONArray uintJsonArray = JSONObject.parseObject(JSON.toJSONString(r)).getJSONArray("MaterialStock"); JSONArray uintJsonArray = JSONObject.parseObject(JSON.toJSONString(r)).getJSONArray("MaterialStock");
if (ObjectUtils.isNotEmpty(uintJsonArray)) { if (ObjectUtils.isNotEmpty(uintJsonArray)) {
JSONObject u1 = JSONObject.parseObject(JSON.toJSONString(uintJsonArray.get(0))); JSONObject u1 = JSONObject.parseObject(JSON.toJSONString(uintJsonArray.get(0)));
JSONObject u2 = u1.getJSONObject("AuxUnitID"); JSONObject u2 = u1.getJSONObject("AuxUnitID");
assistUint = u2 != null ? u2.getString("Number") : "0"; assistUint = u2 != null ? u2.getString("Number") : "0";
} }
JSONArray netWeightArray = JSONObject.parseObject(JSON.toJSONString(r)).getJSONArray("MaterialBase");
if (ObjectUtils.isNotEmpty(netWeightArray)) {
JSONObject u1 = JSONObject.parseObject(JSON.toJSONString(netWeightArray.get(0)));
String u2 = u1.getString("NETWEIGHT");
netWeight = StringUtils.isNotBlank(u2) ? u2 : "0";
}
PmFormData mainFormData = formDataList.stream().filter(rs1 -> "BD_MATERIAL".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); PmFormData mainFormData = formDataList.stream().filter(rs1 -> "BD_MATERIAL".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0);
JSONObject object = mainFormData.getForm_data(); JSONObject object = mainFormData.getForm_data();
String m_code = object.getString("m_code"); String m_code = object.getString("m_code");
@@ -412,6 +457,21 @@ public class SyncErpBillsScheduleService {
String m_unit = mainFormData.getUnit_id(); String m_unit = mainFormData.getUnit_id();
PmFormData formData = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0); PmFormData formData = formDataList.stream().filter(rs1 -> "BD_MATERIAL_1".equals(rs1.getForm_type())).collect(Collectors.toList()).get(0);
MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", mainFormData.getId())); MdMeMaterialbase materialInfo = iMdMeMaterialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", mainFormData.getId()));
materialBase.setMaterial_id(mainFormData.getId());
materialBase.setMaterial_code(m_code);
materialBase.setMaterial_name(m_name);
materialBase.setMaterial_spec(m_spec);
materialBase.setQty_unit_id(m_unit);
materialBase.setAssist_unit_id(assistUint);
BigDecimal netWeightGet = new BigDecimal(netWeight);
//辅助单位净重为kg
if (netWeightGet.compareTo(BigDecimal.ZERO) > 0 && assistUint.contains("kg")) {
BigDecimal newWeightGet = netWeightGet.multiply(new BigDecimal(1000));
materialBase.setNet_weight(newWeightGet);
} else {
materialBase.setNet_weight(netWeightGet);
}
materialBase.setPrint_no(formData.getPcsn());
if (materialInfo != null) { if (materialInfo != null) {
iMdMeMaterialbaseService.update(new LambdaUpdateWrapper<MdMeMaterialbase>() iMdMeMaterialbaseService.update(new LambdaUpdateWrapper<MdMeMaterialbase>()
.set(MdMeMaterialbase::getMaterial_id, mainFormData.getId()) .set(MdMeMaterialbase::getMaterial_id, mainFormData.getId())
@@ -424,14 +484,6 @@ public class SyncErpBillsScheduleService {
.set(MdMeMaterialbase::getEnglish_name, "id变更前id:" + materialInfo.getMaterial_id()) .set(MdMeMaterialbase::getEnglish_name, "id变更前id:" + materialInfo.getMaterial_id())
.eq(MdMeMaterialbase::getMaterial_code, m_code)); .eq(MdMeMaterialbase::getMaterial_code, m_code));
} else { } else {
MdMeMaterialbase materialBase = new MdMeMaterialbase();
materialBase.setMaterial_id(mainFormData.getId());
materialBase.setMaterial_code(m_code);
materialBase.setMaterial_name(m_name);
materialBase.setMaterial_spec(m_spec);
materialBase.setQty_unit_id(m_unit);
materialBase.setAssist_unit_id(assistUint);
materialBase.setPrint_no(formData.getPcsn());
iMdMeMaterialbaseService.save(materialBase); iMdMeMaterialbaseService.save(materialBase);
} }
} }
@@ -439,6 +491,7 @@ public class SyncErpBillsScheduleService {
log.error("解析数据 [{}] 时出现异常: {}", JSON.toJSONString(r), e.getMessage()); log.error("解析数据 [{}] 时出现异常: {}", JSON.toJSONString(r), e.getMessage());
} }
} }
return materialBase;
} }
/** /**
@@ -506,7 +559,4 @@ public class SyncErpBillsScheduleService {
} }
} }
} }

View File

@@ -8,7 +8,7 @@ spring:
db-type: com.alibaba.druid.pool.DruidDataSource db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://${DB_HOST:192.168.8.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimxezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false # url: jdbc:mysql://${DB_HOST:192.168.8.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimxezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms_hs2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false&socketTimeout=28800000 url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms_hs4}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false&socketTimeout=28800000
username: ${DB_USER:root} username: ${DB_USER:root}
password: ${DB_PWD:123456} password: ${DB_PWD:123456}
@@ -156,9 +156,9 @@ lucene:
index: index:
path: D:\lms\lucene\index path: D:\lms\lucene\index
kdapi: kdapi:
appId: 295539_RY4pS/CH0vl8TfUo652sR+1KULwdQNOG appId: 295539_RY4pS/CH0vl8TfUo652sR+1KULwdQNOG111
appSecret: 0d47d08ee5014643b91a764e121e0bcb appSecret: 0d47d08ee5014643b91a764e121e0bcb1111
userName: 管理员 userName: 管理员
pwd: ty.87016362 pwd: ty.870163621
serverUrl: http://192.168.16.249/k3cloud/ serverUrl: http://192.168.16.249/k3cloud/111
dCID: 65b078e7ea0ce6 dCID: 65b078e7ea0ce6

View File

@@ -30,6 +30,7 @@ spring:
runTimeout: 5000 runTimeout: 5000
task: task:
pool: pool:
# 线程大小设置
# 核心线程池大小 # 核心线程池大小
core-pool-size: 10 core-pool-size: 10
# 最大线程数 # 最大线程数