add:深位优先策略,限高策略
This commit is contained in:
@@ -18,6 +18,7 @@ package org.nl.common.domain.aspect;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.netty.util.internal.ThrowableUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
@@ -128,7 +129,7 @@ public class LogAspect {
|
||||
if (argList.size() == 0) {
|
||||
return "";
|
||||
}
|
||||
return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList);
|
||||
return JSON.toJSONString(argList);
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||
@@ -22,13 +23,8 @@ import java.util.stream.Collectors;
|
||||
* 货位限位策略:限高,限宽,限长,限重
|
||||
*/
|
||||
@Service("limitStorage")
|
||||
public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
|
||||
public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||
|
||||
/**
|
||||
* 出入库明细服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
||||
|
||||
/**
|
||||
* 载具扩展属性服务服务
|
||||
@@ -47,37 +43,22 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, StIvtIo
|
||||
* @return List<StIvtStructattr> :仓位集合
|
||||
*/
|
||||
@Override
|
||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
||||
// 判断仓位是否为空
|
||||
// 判断策略类型
|
||||
String vehicleCode = param.getVehicle_code();
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
BmVehicleInfo vehileInfo = bmVehicleInfoService.vehileInfo(vehicleCode);
|
||||
if (vehileInfo==null){
|
||||
throw new BadRequestException("当前载具信息不存在:"+vehicleCode+"!");
|
||||
}
|
||||
List<StIvtStructattr> resultList = inHandler(list,vehileInfo);
|
||||
|
||||
|
||||
// switch (Strategy_Config.getStrategy_type()) {
|
||||
// case "1":
|
||||
// // 入库策略
|
||||
// break;
|
||||
// case "2":
|
||||
// // 出库策略
|
||||
// resultList = outHandler(list,jsonParam);
|
||||
// break;
|
||||
// case "3":
|
||||
// // 通用策略
|
||||
// break;
|
||||
// default:
|
||||
// throw new BadRequestException("策略类型错误!");
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 入库策略:判断货位的长宽高
|
||||
* @param attrList :仓位集合
|
||||
* @param jsonParam:materialId :物料标识、width: 宽度、 height:高度、zdepth:深度
|
||||
* @param vehicle :物料标识、width: 宽度、 height:高度、zdepth:深度
|
||||
* @return List<StIvtStructattr> :仓位集合
|
||||
*/
|
||||
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, BmVehicleInfo vehicle) {
|
||||
@@ -106,66 +87,4 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, StIvtIo
|
||||
return collect;
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库策略:默认出库
|
||||
* @param attrList :仓位物料信息
|
||||
* @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配)
|
||||
* @return List<StIvtStructattr> :需出库仓位集合
|
||||
*/
|
||||
// private List<StIvtStructattr> outHandler(List<StIvtStructattr> attrList, JSONObject jsonParam) {
|
||||
//
|
||||
// // 查询对应的出入库明细
|
||||
// StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId"));
|
||||
//
|
||||
// // 查询传入仓位物料中的数量是否满足明细中的数量
|
||||
// List<String> vehicleCodeIn = attrList.stream()
|
||||
// .map(StIvtStructattr::getVehicle_code)
|
||||
// .distinct()
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// // 查询对应的载具物料
|
||||
// List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
|
||||
// new QueryWrapper<MdPbStoragevehicleext>().lambda()
|
||||
// .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn)
|
||||
// );
|
||||
//
|
||||
// double attrQty = extList.stream()
|
||||
// .map(MdPbStoragevehicleext::getQty)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||
// .doubleValue();
|
||||
//
|
||||
// if (dtlDao.getUnassign_qty().doubleValue() > attrQty) {
|
||||
// // 说明不满足所需重量则全部返回
|
||||
// return attrList;
|
||||
// }
|
||||
//
|
||||
// // 需返回仓位物料集合
|
||||
// List<StIvtStructattr> resultList = new ArrayList<>();
|
||||
// // 满足所需数量: 根据巷道进行平均分配
|
||||
// double unAssingQty = dtlDao.getUnassign_qty().doubleValue();
|
||||
//
|
||||
// while (unAssingQty > 0) {
|
||||
//
|
||||
// // 添加需返回的仓位物料
|
||||
// StIvtStructattr attrDao = attrList.get(0);
|
||||
// resultList.add(attrDao);
|
||||
//
|
||||
// // 减去未分配重量
|
||||
// MdPbStoragevehicleext extDao = extList.stream()
|
||||
// .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code()))
|
||||
// .findFirst().orElse(null);
|
||||
//
|
||||
// if (ObjectUtil.isEmpty(extDao)) {
|
||||
// throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】");
|
||||
// }
|
||||
//
|
||||
// unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue());
|
||||
//
|
||||
// // 移出此仓位物料,方便下一轮进行匹配
|
||||
// attrList.remove(attrDao);
|
||||
// }
|
||||
//
|
||||
// return resultList;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.diy;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/7/31 15:19
|
||||
*/
|
||||
//@Service("depthPriority")
|
||||
public class DepthPriorityHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||
//现场1/4排深位
|
||||
@Override
|
||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
||||
List<StIvtStructattr> collect = list.stream().filter(a -> a.getRow_num() == 1 || a.getRow_num() == 4).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(collect)){
|
||||
return collect;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,13 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="策略编码:" prop="param">
|
||||
<el-input v-model="form.strategy_code" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
@@ -125,6 +132,9 @@ export default {
|
||||
strategy_type: [
|
||||
{ required: true, message: '策略类型不能为空', trigger: 'blur' }
|
||||
],
|
||||
strategy_code: [
|
||||
{ required: true, message: '策略编码不能为空', trigger: 'blur' }
|
||||
],
|
||||
param: [
|
||||
{ required: true, message: '参数不能为空', trigger: 'blur' }
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user