add:增加二楼车间缓存库,CTU入库任务申请;
This commit is contained in:
@@ -27,8 +27,8 @@ public enum StatusEnum {
|
||||
/**
|
||||
* 出入库单据类型
|
||||
*/
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","盘点入库", "14","inStorageTask","托盘入库", "30","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask","拣选出库", "23","conveyorOutStorageTask","盘点出库", "24","outStorageTask","出库拣选", "25","toPickPlatformTask","托盘出库", "40","outStorageTask")),
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","盘点入库", "14","inStorageTask","托盘入库", "30","inStorageTask","二楼CTU入库", "80","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask","拣选出库", "23","conveyorOutStorageTask","盘点出库", "24","outStorageTask","出库拣选", "25","toPickPlatformTask","托盘出库", "40","outStorageTask","二楼CTU出库", "81","inStorageTask")),
|
||||
IOBILL_TYPE_MOVE(ForkMap.of("移库", "50","moveStorageTask","异常位移库", "51","moveStorageTask")),
|
||||
EXT_TASK_TYPE(ForkMap.of("盘点", "60","moveStorageTask")),
|
||||
OTHER_TASK_TYPE(ForkMap.of("转运", "70","tranforTask")),
|
||||
@@ -47,21 +47,23 @@ public enum StatusEnum {
|
||||
|
||||
/**
|
||||
* 任务类型
|
||||
*/
|
||||
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code,IOBILL_TYPE_OUT.code,IOBILL_TYPE_MOVE.code,EXT_TASK_TYPE.code,OTHER_TASK_TYPE.code)),
|
||||
*/
|
||||
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code, IOBILL_TYPE_OUT.code, IOBILL_TYPE_MOVE.code, EXT_TASK_TYPE.code, OTHER_TASK_TYPE.code)),
|
||||
|
||||
ACS_TYPE(ForkMap.of("立库", "10",null
|
||||
,"海柔", "20",null
|
||||
,"诺宝", "30",null
|
||||
ACS_TYPE(ForkMap.of(
|
||||
"立库", "1", null, "AGV", "2", null, "CTU任务", "3", null
|
||||
)),
|
||||
ACS_SYSTEM_TYPE(ForkMap.of(
|
||||
"NDC", "1", null, "海柔CTU", "5", null, "海康CTU", "6", null
|
||||
)),
|
||||
|
||||
/**
|
||||
* 点位锁类型
|
||||
*/
|
||||
LOCK(ForkMap.of("无锁","00",null,"入库锁","10",null,"入库盘点锁","16",null,"出库锁","20",null,"盘点出库锁","26",null,"移库锁","50",null,"异常锁定","60",null)),
|
||||
STRATEGY_TYPE(ForkMap.of("入库", "1",null, "出库", "2", null,"出入库", "3",null)),
|
||||
LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null)),
|
||||
STRATEGY_TYPE(ForkMap.of("入库", "1", null, "出库", "2", null, "出入库", "3", null)),
|
||||
|
||||
PRODUCT_AREA(ForkMap.of("一层车间", "A1",null, "二层车间", "A2", null,"三层车间", "A3",null)),
|
||||
PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)),
|
||||
;
|
||||
|
||||
/**
|
||||
@@ -69,7 +71,7 @@ public enum StatusEnum {
|
||||
* M:编码
|
||||
* R:指定服务类
|
||||
*/
|
||||
private ForkMap<String, String,String> code;
|
||||
private ForkMap<String, String, String> code;
|
||||
|
||||
public String code(String desc) {
|
||||
String code = this.getCode().getNode(desc);
|
||||
|
||||
@@ -88,7 +88,6 @@ public class StIvtBsrealstorattrController {
|
||||
@PostMapping("/batchSaveAttr")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> batchSaveAttr(@Validated @RequestBody JSONObject config) {
|
||||
|
||||
int 排 = config.getInteger("x");
|
||||
int 列 = config.getInteger("y");
|
||||
int 层 = config.getInteger("z");
|
||||
@@ -97,7 +96,7 @@ public class StIvtBsrealstorattrController {
|
||||
String pre = config.getString("pre");
|
||||
String now = DateUtil.now();
|
||||
ArrayList<StIvtStructattr> list = new ArrayList<>();
|
||||
for (int x = 1; x <= 排; x++) {
|
||||
for (int x = 6; x <= 排; x++) {
|
||||
for (int y = 1; y <= 列; y++) {
|
||||
for (int z = 1; z <= 层; z++) {
|
||||
StIvtStructattr attr = new StIvtStructattr();
|
||||
@@ -112,7 +111,7 @@ public class StIvtBsrealstorattrController {
|
||||
attr.setCreate_id("1");
|
||||
attr.setRow_num(x);
|
||||
attr.setCol_num(y);
|
||||
attr.setBlock_num(1);
|
||||
attr.setBlock_num(3);
|
||||
attr.setLayer_num(z);
|
||||
attr.setCreate_time(now);
|
||||
attr.setCreate_name("Admin");
|
||||
|
||||
@@ -2,10 +2,10 @@ package org.nl.wms.decision_manage.handler.chainer.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.github.javaparser.utils.Log;
|
||||
import lombok.Data;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.common.utils.SpringContextHolder;
|
||||
@@ -19,7 +19,6 @@ import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
@@ -28,6 +27,7 @@ import java.util.stream.Collectors;
|
||||
* 链式调用
|
||||
*/
|
||||
@Data
|
||||
@Slf4j
|
||||
public class EndDecisionChainer extends DecisionerChain<List> {
|
||||
|
||||
private String strategy_type;
|
||||
@@ -42,48 +42,56 @@ public class EndDecisionChainer extends DecisionerChain<List> {
|
||||
this.startParam = startParam;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*锁定目标仓位
|
||||
*/
|
||||
@Override
|
||||
protected List execute(List transfers) {
|
||||
if (CollectionUtils.isEmpty(transfers)){
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
if (CollectionUtils.isEmpty(transfers)) {
|
||||
Log.error("当前分配策略无可用货位");
|
||||
}
|
||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||
IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class);
|
||||
IMdPbVehicleMaterService iMdPbVehicleMaterService = SpringContextHolder.getBean(IMdPbVehicleMaterService.class);
|
||||
List<String> structs = new ArrayList<>();
|
||||
if (in_storage){
|
||||
StIvtStructattr structattr = (StIvtStructattr)transfers.get(0);
|
||||
UpdateWrapper<StIvtStructattr> updateWrapper = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("vehicle_code", startParam.getString("vehicle_code"))
|
||||
.set("lock_type", StatusEnum.LOCK.code("入库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", structattr.getStruct_code());
|
||||
Boolean isMove = startParam.getBoolean("is_move");
|
||||
//移库任务不能绑定终点托盘不然报错
|
||||
if (isMove!=null && isMove==true){
|
||||
updateWrapper.set("vehicle_code", null)
|
||||
.set("lock_type", StatusEnum.LOCK.code("移库锁"));
|
||||
StIvtStructattr structattr = (StIvtStructattr) transfers.get(0);
|
||||
try {
|
||||
if (in_storage) {
|
||||
UpdateWrapper<StIvtStructattr> updateWrapper = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("vehicle_code", startParam.getString("vehicle_code"))
|
||||
.set("lock_type", StatusEnum.LOCK.code("入库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", structattr.getStruct_code());
|
||||
Boolean isMove = startParam.getBoolean("is_move");
|
||||
//移库任务不能绑定终点托盘不然报错
|
||||
if (isMove != null && isMove == true) {
|
||||
updateWrapper.set("vehicle_code", null)
|
||||
.set("lock_type", StatusEnum.LOCK.code("移库锁"));
|
||||
}
|
||||
iStIvtStructattrService.update(updateWrapper);
|
||||
System.out.println("货位绑定成功" + structattr.getStruct_code() + "_" + startParam.getString("vehicle_code"));
|
||||
structs.add(structattr.getStruct_code());
|
||||
} else {
|
||||
List<StructattrVechielDto> vechielDtos = transfers;
|
||||
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty", vechielDto.getFrozen_qty())
|
||||
.eq("id", vechielDto.getVm_id()));
|
||||
}
|
||||
List<String> structCodes = vechielDtos.stream().map(StructattrVechielDto::getStruct_code).collect(Collectors.toList());
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("出库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.in("struct_code", structCodes));
|
||||
List<String> collect = vechielDtos.stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||
System.out.println("载具绑定成功" + collect);
|
||||
structs = collect;
|
||||
}
|
||||
iStIvtStructattrService.update(updateWrapper);
|
||||
System.out.println("货位绑定成功"+structattr.getStruct_code()+"_"+startParam.getString("vehicle_code"));
|
||||
structs.add(structattr.getStruct_code());
|
||||
}else {
|
||||
List<StructattrVechielDto> vechielDtos = transfers;
|
||||
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty",vechielDto.getFrozen_qty())
|
||||
.eq("id",vechielDto.getVm_id()));
|
||||
}
|
||||
List<String> structCodes = vechielDtos.stream().map(StructattrVechielDto::getStruct_code).collect(Collectors.toList());
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("出库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.in("struct_code", structCodes));
|
||||
List<String> collect = vechielDtos.stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||
System.out.println("载具绑定成功"+collect);
|
||||
structs = collect;
|
||||
} catch (Exception e) {
|
||||
log.error("库位:" + structattr.getStruct_code() + "异常:" + e.getMessage());
|
||||
}
|
||||
return structs;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@ public class ExecuteDecisionChainer extends DecisionerChain<List> {
|
||||
this.startPatam = startPatam;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据出库入库策略获取仓位
|
||||
*/
|
||||
@Override
|
||||
protected List execute(List transfers) {
|
||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||
@@ -36,6 +39,7 @@ public class ExecuteDecisionChainer extends DecisionerChain<List> {
|
||||
for (String decisionerType : decisionerTypes) {
|
||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||
log.info("执行出入库规格:"+decisioner.strategyConfig.getStrategy_name());
|
||||
//执行不同的分配策略,出入库策略,扩展策略
|
||||
list = decisioner.handler(list, startPatam);
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+transfers.size());
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
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.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/4/6 16:18
|
||||
* 巷道均衡策略:XYZ:排列层
|
||||
*/
|
||||
@Service("sameBlockNum")
|
||||
@Slf4j
|
||||
public class SameBlockNumRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
||||
|
||||
|
||||
/**
|
||||
* 相同巷道,自下而上分配,提高CTU放货效率
|
||||
*
|
||||
* @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("当前分配策略sameBlockNum无可用货位");
|
||||
}
|
||||
// 最小巷道从小到大
|
||||
int minBlockNum = list.stream()
|
||||
.mapToInt(StIvtStructattr::getBlock_num)
|
||||
.min()
|
||||
.orElseThrow(() -> new BadRequestException("未找到可用的巷道"));
|
||||
List<StIvtStructattr> blockList = list.stream()
|
||||
.filter(item -> item.getBlock_num() == minBlockNum)
|
||||
.sorted(Comparator.comparing(StIvtStructattr::getCol_num)
|
||||
.thenComparing(StIvtStructattr::getLayer_num))
|
||||
.collect(Collectors.toList());
|
||||
List<StIvtStructattr> result = new ArrayList<>();
|
||||
// 优先同列层进行分配
|
||||
for (int layer = 1; layer <= blockList.stream().mapToInt(StIvtStructattr::getLayer_num).max().orElse(0); layer++) {
|
||||
int finalLayer = layer;
|
||||
List<StIvtStructattr> currentLayer = blockList.stream()
|
||||
.filter(item -> item.getCol_num() == finalLayer)
|
||||
.collect(Collectors.toList());
|
||||
if (currentLayer.size() > 0) {
|
||||
result.addAll(currentLayer);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
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.decision_manage.handler.decisioner.impl.base.SameBlockNumRuleHandler;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
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.record.service.IStIvtStructivtflowService;
|
||||
import org.nl.wms.stor_manage.record.service.dao.StIvtStructivtflow;
|
||||
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.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author gbx
|
||||
* @Date 2025/2/6 14:34
|
||||
* 二楼入库任务
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class SecondFloorInStorageTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
@Autowired
|
||||
private SameBlockNumRuleHandler sameBlockNumRuleHandler;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
@Autowired
|
||||
private IBmVehicleInfoService iBmVehicleInfoService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService vehicleMaterService;
|
||||
@Autowired
|
||||
private IStIvtStructivtflowService structivtflowService;
|
||||
|
||||
@Override
|
||||
//@Transactional
|
||||
public JSONObject createTask(JSONObject from) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
for (String vehicle_code : from.keySet()) {
|
||||
String start_point = from.getString(vehicle_code);
|
||||
if (StringUtils.isEmpty(start_point)) {
|
||||
throw new BadRequestException("申请任务失败:任务起点不能为空!");
|
||||
}
|
||||
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>()
|
||||
.eq("vehicle_code", vehicle_code));
|
||||
if (vehicleInfo == null) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "信息不存在");
|
||||
}
|
||||
List<MdPbVehicleMater> item = iMdPbVehicleMaterService.list(new LambdaQueryWrapper<MdPbVehicleMater>().eq(MdPbVehicleMater::getVehicle_code, vehicle_code));
|
||||
if (CollectionUtils.isEmpty(item)) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在");
|
||||
}
|
||||
String struct_code = getStructCode(vehicle_code);
|
||||
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
||||
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||
}
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setSource_form_id(from.getString("id"));
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setAcs_type(StatusEnum.ACS_TYPE.code("CTU任务"));
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setTask_type(StatusEnum.IOBILL_TYPE_IN.code("二楼CTU入库"));
|
||||
task.setVehicle_code(vehicle_code);
|
||||
task.setPoint_code1(start_point);
|
||||
task.setPoint_code2(struct_code);
|
||||
iSchBaseTaskService.create(task);
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getTask_code, task.getTask_code())
|
||||
.eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code())
|
||||
.eq(MdPbVehicleMater::getIs_delete, false));
|
||||
}
|
||||
return (JSONObject) JSON.toJSON(task);
|
||||
}
|
||||
|
||||
// @Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||
public String getStructCode(String vehicle_code) {
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.eq("stor_code", "FStockId")
|
||||
.eq("sect_code", "LXHCK01");
|
||||
query.isNull("vehicle_code");
|
||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||
List<StIvtStructattr> structList = sameBlockNumRuleHandler.handler(list, null);
|
||||
if (CollectionUtils.isEmpty(structList)) {
|
||||
throw new BadRequestException("当前载具:" + vehicle_code + "申请任务失败,没有可用仓位!");
|
||||
}
|
||||
// Map map = SpringContextHolder.getBean(DecisionHandler.class)
|
||||
// .dispenseTransa(ListOf.of("limitStorage","depthPriority","nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code()
|
||||
// ,"vehicle_code",task.getVehicle_code(),
|
||||
// "start_point",task.getPoint_code1())));
|
||||
// String new_struct_code = ((Map<String, String>) map.get("form_data")).get("end_struct_code");
|
||||
try {
|
||||
UpdateWrapper<StIvtStructattr> updateWrapper = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("vehicle_code", vehicle_code)
|
||||
.set("lock_type", StatusEnum.LOCK.code("入库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", structList.get(0).getStruct_code());
|
||||
iStIvtStructattrService.update(updateWrapper);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("当前载具:" + vehicle_code + ",已在仓位中,申请任务失败,请检查仓位信息!");
|
||||
}
|
||||
log.info("货位绑定成功" + structList.get(0).getStruct_code() + "_" + vehicle_code);
|
||||
return structList.get(0).getStruct_code();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void finish(JSONObject data) {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//更新仓位
|
||||
String now = DateUtil.now();
|
||||
UpdateWrapper<StIvtStructattr> wrapper = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("update_time", now)
|
||||
.set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.set("vehicle_code", schBaseTask.getVehicle_code())
|
||||
.eq("struct_code", schBaseTask.getPoint_code2());
|
||||
iStIvtStructattrService.update(wrapper);
|
||||
//更新出入库记录
|
||||
List<MdPbVehicleMater> vehicleMaterList = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
.eq("vehicle_code", schBaseTask.getVehicle_code())
|
||||
.eq("is_delete", false));
|
||||
if (ObjectUtil.isEmpty(vehicleMaterList)) {
|
||||
throw new BadRequestException("任务完成失败,到载具物料信息: " + schBaseTask.getVehicle_code());
|
||||
}
|
||||
MdPbVehicleMater vehicleMater = vehicleMaterList.get(0);
|
||||
StIvtStructattr attr = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", schBaseTask.getPoint_code2()).select("stor_code"));
|
||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||
record.setId(IdUtil.getStringId());
|
||||
record.setUpdate_time(now);
|
||||
record.setVehicle_code(schBaseTask.getVehicle_code());
|
||||
record.setMaterial_id(vehicleMater.getMaterial_id());
|
||||
record.setPcsn(vehicleMater.getPcsn());
|
||||
record.setQty(vehicleMater.getQty());
|
||||
record.setChange_qty(vehicleMater.getQty());
|
||||
record.setTask_type(StatusEnum.IOBILL_TYPE_IN.code("二楼CTU入库"));
|
||||
record.setFrozen_qty(vehicleMater.getFrozen_qty());
|
||||
record.setSource_form_type(vehicleMater.getSource_form_type());
|
||||
record.setSource_form_id(vehicleMater.getSource_form_id());
|
||||
record.setUnit_id(vehicleMater.getUnit_id());
|
||||
record.setStruct_code(schBaseTask.getPoint_code2());
|
||||
record.setStor_code(attr.getStor_code());
|
||||
record.setVehicle_form_data(vehicleMater.getForm_data());
|
||||
record.setGrowth(true);
|
||||
structivtflowService.save(record);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject data) {
|
||||
this.updateTask(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(JSONObject data) {
|
||||
this.updateTask(data);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.dispatch_manage.task.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import lombok.Data;
|
||||
@@ -138,5 +139,9 @@ public class SchBaseTask implements Serializable {
|
||||
*/
|
||||
private String form_data;
|
||||
|
||||
|
||||
/**
|
||||
* 自定义参数
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String agv_system_type;
|
||||
}
|
||||
|
||||
@@ -142,21 +142,19 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
throw new BadRequestException("当前任务已完成");
|
||||
}
|
||||
if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("完成"))) {
|
||||
List<MdPbVehicleMater> list = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
//CTU任务处理
|
||||
if (task.getAcs_type().equals(StatusEnum.ACS_TYPE.code("CTU任务"))) {
|
||||
handleFinishTask(param, task);
|
||||
return;
|
||||
}
|
||||
MdPbVehicleMater vehicleMater = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
|
||||
.eq("vehicle_code", task.getVehicle_code())
|
||||
.eq("is_delete", false));
|
||||
list.get(0)
|
||||
if (vehicleMater != null && !StringUtils.isEmpty(vehicleMater.getProc_inst_id())) {
|
||||
FlowContinueEvent continueEvent = new FlowContinueEvent(vehicleMater.getProc_inst_id(), null, null);
|
||||
BussEventMulticaster.Publish(continueEvent);
|
||||
} else {
|
||||
String handleClass = task.getHandle_class();
|
||||
try {
|
||||
AbstractTask bean = (AbstractTask) SpringContextHolder.getBean(Class.forName(handleClass));
|
||||
bean.finish(param);
|
||||
} catch (Exception ex) {
|
||||
throw new BadRequestException(ex.getMessage());
|
||||
}
|
||||
handleFinishTask(param, task);
|
||||
}
|
||||
} else if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("下发"))) {
|
||||
ArrayList<SchBaseTask> list = ListOf.of(task);
|
||||
@@ -202,6 +200,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
}
|
||||
}
|
||||
}
|
||||
handleFinishTask(param, task);
|
||||
} else {
|
||||
this.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("status", param.getString("status"))
|
||||
@@ -209,6 +208,20 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleFinishTask(JSONObject param, SchBaseTask task) {
|
||||
String handleClass = task.getHandle_class();
|
||||
try {
|
||||
AbstractTask bean = (AbstractTask) SpringContextHolder.getBean(Class.forName(handleClass));
|
||||
if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("完成"))) {
|
||||
bean.finish(param);
|
||||
} else {
|
||||
bean.cancel(param);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new BadRequestException(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* "type":
|
||||
* "rm" 入满 标记目标货位异常,重新分配货位;更新任务终点,反馈目的货位
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
@@ -58,24 +57,32 @@ public class TaskScheduleService {
|
||||
boolean islock = lock.tryLock();
|
||||
try {
|
||||
if (islock){
|
||||
//查询所有自动下发的任务
|
||||
//定时任务,查询所有自动下发acs的任务
|
||||
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("is_send", true)
|
||||
.eq("status", StatusEnum.FORM_STATUS.code("生成")));
|
||||
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
//确认调度系统
|
||||
list.forEach(task -> {
|
||||
if (task.getAcs_type().equals(StatusEnum.ACS_TYPE.code("CTU任务"))) {
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU"));
|
||||
} else {
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("NDC"));
|
||||
}
|
||||
});
|
||||
List<String> taskCodes = list.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList());
|
||||
log.info("---执行定时222任务:-----taskPublish-----"+ taskCodes);
|
||||
log.info("---执行定时222任务:-----taskPublish-----" + taskCodes);
|
||||
TableDataInfo response = wmsToAcsService.interationToExt(list, "createTask");
|
||||
if (!response.getCode().equals(String.valueOf(HttpStatus.HTTP_OK))){
|
||||
JSONArray results = (JSONArray)JSON.toJSON(response.getData());
|
||||
if (!CollectionUtils.isEmpty(results)){
|
||||
if (!response.getCode().equals(String.valueOf(HttpStatus.HTTP_OK))) {
|
||||
JSONArray results = (JSONArray) JSON.toJSON(response.getData());
|
||||
if (!CollectionUtils.isEmpty(results)) {
|
||||
for (Object result : results) {
|
||||
Map resultM = (Map) result;
|
||||
taskCodes.remove(resultM.get("task_code"));
|
||||
iSchBaseTaskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.eq("task_code",resultM.get("task_code"))
|
||||
.set("status",StatusEnum.FORM_STATUS.code("暂停"))
|
||||
.set("update_time", DateUtil.now()).set("remark",resultM.get("msg")));
|
||||
.eq("task_code", resultM.get("task_code"))
|
||||
.set("status", StatusEnum.FORM_STATUS.code("暂停"))
|
||||
.set("update_time", DateUtil.now()).set("remark", resultM.get("msg")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user