add:自定义入库分配策略
This commit is contained in:
@@ -1,27 +1,15 @@
|
||||
package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
@@ -42,7 +30,7 @@ public class ExecuteDecisionChainer extends DecisionerChain<List> {
|
||||
@Override
|
||||
protected List execute(List transfers) {
|
||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||
List list = new ArrayList();
|
||||
List list = transfers;
|
||||
for (String decisionerType : decisionerTypes) {
|
||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||
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){
|
||||
item_json.putAll(auxParam);
|
||||
}
|
||||
JSONObject param = entity.getAuxParam();
|
||||
if (param != null){
|
||||
item_json.putAll(param);
|
||||
}
|
||||
Map<String, String> map = this.dispense(params, item_json);
|
||||
//更新仓位,更新数据
|
||||
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);
|
||||
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)));
|
||||
List<String> groups = list.stream().map(MdPbVehicleMater::getGroup_id).collect(Collectors.toList());
|
||||
iMdGruopDickService.removeByIds(groups);
|
||||
iMdGruopDickService.remove(new QueryWrapper<MdGruopDick>()
|
||||
.in("vehicle_code", Arrays.asList(dtl.getVehicle_id().split(",")))
|
||||
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("vehicle_code", null)
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
package org.nl.wms.system_manage.service.quartz.utils;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.tlog.core.thread.TLogInheritableTask;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
/**
|
||||
* 执行定时任务
|
||||
*
|
||||
* @author /
|
||||
*/
|
||||
@Slf4j
|
||||
public class QuartzRunnable extends TLogInheritableTask {
|
||||
public class QuartzRunnable implements Callable {
|
||||
|
||||
private final Object target;
|
||||
private final Method method;
|
||||
@@ -33,15 +31,14 @@ public class QuartzRunnable extends TLogInheritableTask {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void runTask() {
|
||||
public Object call() throws Exception {
|
||||
ReflectionUtils.makeAccessible(method);
|
||||
if (StrUtil.isNotEmpty(params)) {
|
||||
method.invoke(target, params);
|
||||
} else {
|
||||
method.invoke(target);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user