add:增加二楼车间缓存库,CTU入库任务申请;

This commit is contained in:
2025-02-07 20:20:39 +08:00
parent 234380f834
commit d4bcbf78f6
9 changed files with 369 additions and 71 deletions

View File

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

View File

@@ -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");

View File

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

View File

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

View File

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

View File

@@ -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
* &#064;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);
}
}

View File

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

View File

@@ -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" 入满 标记目标货位异常,重新分配货位;更新任务终点,反馈目的货位

View File

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