add:自定义入库分配策略
This commit is contained in:
@@ -1,27 +1,15 @@
|
|||||||
package org.nl.wms.decision_manage.handler.chainer.impl;
|
package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.poi.ss.formula.functions.T;
|
|
||||||
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.SpringContextHolder;
|
import org.nl.common.utils.SpringContextHolder;
|
||||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||||
import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.Command;
|
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
|
||||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
|
||||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
|
||||||
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.dto.StructattrVechielDto;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
@@ -42,7 +30,7 @@ public class ExecuteDecisionChainer extends DecisionerChain<List> {
|
|||||||
@Override
|
@Override
|
||||||
protected List execute(List transfers) {
|
protected List execute(List transfers) {
|
||||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||||
List list = new ArrayList();
|
List list = transfers;
|
||||||
for (String decisionerType : decisionerTypes) {
|
for (String decisionerType : decisionerTypes) {
|
||||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||||
list = decisioner.handler(transfers, startPatam);
|
list = decisioner.handler(transfers, startPatam);
|
||||||
|
|||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
|
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2024/4/6 16:18
|
||||||
|
* 入库双叉分配测策略
|
||||||
|
*/
|
||||||
|
@Service("inventory")
|
||||||
|
public class InventoryRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||||
|
|
||||||
|
|
||||||
|
private static final Map<String, String> LINK_POINT = MapOf.of("1109", "1110", "1110", "1109");
|
||||||
|
|
||||||
|
//每个策略的配置信息
|
||||||
|
/**
|
||||||
|
* 出入库明细服务
|
||||||
|
*/
|
||||||
|
@Autowired
|
||||||
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
|
@Autowired
|
||||||
|
private ISchBaseTaskService taskService;
|
||||||
|
@Autowired
|
||||||
|
private IStIvtStructattrService stIvtStructattrService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 载具扩展属性服务服务
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 就近放置策略:根据出入库顺序进行判断
|
||||||
|
*
|
||||||
|
* @param list :仓位集合
|
||||||
|
* @param param:物料相关信息、出入类型:{ ioType: 出入类型
|
||||||
|
* materialId: 物料标识
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
* @return List<StIvtStructattr> :仓位集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
|
}
|
||||||
|
String start_point = param.getString("start_point");
|
||||||
|
LambdaQueryWrapper<SchBaseTask> lqw = new LambdaQueryWrapper<>();
|
||||||
|
lqw.eq(SchBaseTask::getPoint_code1, LINK_POINT.get(start_point))
|
||||||
|
.eq(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("生成"));
|
||||||
|
SchBaseTask task = taskService.getOne(lqw);
|
||||||
|
if (!ObjectUtils.isEmpty(task)) {
|
||||||
|
String point_code2 = task.getPoint_code2();
|
||||||
|
list = getInventory(list, point_code2);
|
||||||
|
if (!CollectionUtils.isEmpty(list)) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list.sort(Comparator.comparingInt(i -> i.getRow_num() + i.getCol_num() + i.getLayer_num() + i.getBlock_num()));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<StIvtStructattr> getInventory(List<StIvtStructattr> list, String point_code2) {
|
||||||
|
StIvtStructattr structattr = stIvtStructattrService.getOne(new LambdaQueryWrapper<StIvtStructattr>().eq(StIvtStructattr::getStruct_code, point_code2).eq(StIvtStructattr::getIs_used, true));
|
||||||
|
return Optional.ofNullable(list)
|
||||||
|
.orElse(new CopyOnWriteArrayList<>())
|
||||||
|
.stream()
|
||||||
|
.filter(stru -> stru.getRow_num().equals(structattr.getRow_num()) && stru.getLayer_num().equals(structattr.getLayer_num()))
|
||||||
|
.filter(stru -> (stru.getCol_num() / 4 == structattr.getCol_num() / 4) && (((stru.getCol_num() % 4) + (structattr.getCol_num() % 4) == 2) || (stru.getCol_num() % 4) + (structattr.getCol_num() % 4) == 4))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,6 +71,10 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
if (auxParam!=null){
|
if (auxParam!=null){
|
||||||
item_json.putAll(auxParam);
|
item_json.putAll(auxParam);
|
||||||
}
|
}
|
||||||
|
JSONObject param = entity.getAuxParam();
|
||||||
|
if (param != null){
|
||||||
|
item_json.putAll(param);
|
||||||
|
}
|
||||||
Map<String, String> map = this.dispense(params, item_json);
|
Map<String, String> map = this.dispense(params, item_json);
|
||||||
//更新仓位,更新数据
|
//更新仓位,更新数据
|
||||||
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
|
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
|
||||||
|
|||||||
@@ -184,11 +184,10 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
|
|||||||
}
|
}
|
||||||
StIvtIostorinvdtl dtl = form.toJavaObject(StIvtIostorinvdtl.class);
|
StIvtIostorinvdtl dtl = form.toJavaObject(StIvtIostorinvdtl.class);
|
||||||
String[] vehicles = dtl.getVehicle_id().split(",");
|
String[] vehicles = dtl.getVehicle_id().split(",");
|
||||||
List<MdPbVehicleMater> list = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
|
||||||
.select("group_id").in("id", Arrays.asList(vehicles)));
|
|
||||||
iMdPbVehicleMaterService.remove(new QueryWrapper<MdPbVehicleMater>().in("id", Arrays.asList(vehicles)));
|
iMdPbVehicleMaterService.remove(new QueryWrapper<MdPbVehicleMater>().in("id", Arrays.asList(vehicles)));
|
||||||
List<String> groups = list.stream().map(MdPbVehicleMater::getGroup_id).collect(Collectors.toList());
|
iMdGruopDickService.remove(new QueryWrapper<MdGruopDick>()
|
||||||
iMdGruopDickService.removeByIds(groups);
|
.in("vehicle_code", Arrays.asList(dtl.getVehicle_id().split(",")))
|
||||||
|
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||||
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||||
.set("update_time", DateUtil.now())
|
.set("update_time", DateUtil.now())
|
||||||
.set("vehicle_code", null)
|
.set("vehicle_code", null)
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
package org.nl.wms.system_manage.service.quartz.utils;
|
package org.nl.wms.system_manage.service.quartz.utils;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.yomahub.tlog.core.thread.TLogInheritableTask;
|
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.utils.SpringContextHolder;
|
import org.nl.common.utils.SpringContextHolder;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行定时任务
|
* 执行定时任务
|
||||||
*
|
|
||||||
* @author /
|
* @author /
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class QuartzRunnable extends TLogInheritableTask {
|
public class QuartzRunnable implements Callable {
|
||||||
|
|
||||||
private final Object target;
|
private final Object target;
|
||||||
private final Method method;
|
private final Method method;
|
||||||
@@ -33,15 +31,14 @@ public class QuartzRunnable extends TLogInheritableTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
@Override
|
@Override
|
||||||
public void runTask() {
|
public Object call() throws Exception {
|
||||||
ReflectionUtils.makeAccessible(method);
|
ReflectionUtils.makeAccessible(method);
|
||||||
if (StrUtil.isNotEmpty(params)) {
|
if (StrUtil.isNotEmpty(params)) {
|
||||||
method.invoke(target, params);
|
method.invoke(target, params);
|
||||||
} else {
|
} else {
|
||||||
method.invoke(target);
|
method.invoke(target);
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user