add:深位优先策略,限高策略

This commit is contained in:
zhangzq
2024-07-31 15:55:13 +08:00
parent 9b365bc4eb
commit fc4b28fbff
4 changed files with 44 additions and 87 deletions

View File

@@ -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() {

View File

@@ -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 jsonParammaterialId 物料标识、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 jsonParamiostorinvdtlId 出入库明细标识(此方法只根据时间匹配)
* @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;
// }
}

View File

@@ -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;
}
}

View File

@@ -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' }
],