fix:出库入规则优化

This commit is contained in:
zhangzq
2024-09-01 14:10:58 +08:00
parent e2bcb37ab6
commit b7cb6172f3
21 changed files with 256 additions and 221 deletions

View File

@@ -287,7 +287,7 @@
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<artifactId>tlog-core</artifactId>
<version>1.5.0</version>
</dependency>
</dependencies>

View File

@@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
@ServletComponentScan
@EnableTransactionManagement
@MapperScan("org.nl.**.mapper")
//@EnableDynamicTp
@EnableDynamicTp
public class AppRun implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(AppRun.class, args);

View File

@@ -2,7 +2,9 @@
package org.nl.common.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
@@ -34,15 +36,27 @@ public class InterationUtil {
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wcs_url").getValue();
String url = acsUrl + api;
try {
String resultMsg = HttpRequest.post(url)
HttpResponse execute = HttpRequest.post(url)
.timeout(3000)
.body(String.valueOf(param))
.execute().body();
JSONObject response = JSONObject.parseObject(resultMsg);
.execute();
JSONObject response = JSONObject.parseObject(execute.body());
log.info("ACS相应参数----------------------------------------+"+api+",---"+response.toString());
String status = response.getString("code");
if (!status.equals("200")){
throw new BadRequestException("acs申请任务失败"+response.getString("message"));
if (execute.getStatus() != 200){
throw new BadRequestException("acs申请失败"+response.getString("message"));
}
if (!response.getString("code").equals("200")){
String error = "";
if (response.get("data")!=null){
JSONArray data = response.getJSONArray("data");
for (int i = 0; i < data.size(); i++) {
JSONObject item = data.getJSONObject(i);
error = error+"_"+item.getString("task_code") + ":" + item.getString("msg");
}
}else {
error = response.getString("msg");
}
throw new BadRequestException("acs申请任务失败"+error);
}
return response.toJavaObject(TableDataInfo.class);
} catch (Exception ex) {

View File

@@ -24,9 +24,16 @@ public class SecurityUtils {
*/
public static CurrentUser getCurrentUser() {
try {
return JSONObject.parseObject(String.valueOf(StpUtil.getExtra("loginInfo")),CurrentUser.class);
Object loginInfo = StpUtil.getExtra("loginInfo");
if (loginInfo==null){
CurrentUser currentUser = new CurrentUser();
currentUser.setId("2");
currentUser.setPresonName("外部系统用户");
currentUser.setUsername("admin");
return currentUser;
}
return JSONObject.parseObject(String.valueOf(loginInfo),CurrentUser.class);
} catch (Exception e) {
e.printStackTrace();
CurrentUser currentUser = new CurrentUser();
currentUser.setId("2");
currentUser.setPresonName("外部系统用户");

View File

@@ -2,6 +2,7 @@ package org.nl.wms.decision_manage.handler.chainer.impl;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
@@ -17,6 +18,7 @@ import java.util.Map;
* 链式调用
*/
@Data
@Slf4j
public class ExecuteDecisionChainer extends DecisionerChain<List> {
private List<String> decisionerTypes;
@@ -33,6 +35,7 @@ public class ExecuteDecisionChainer extends DecisionerChain<List> {
List list = transfers;
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

@@ -1,7 +1,9 @@
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.common.utils.ListOf;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
@@ -11,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -20,6 +23,7 @@ import java.util.List;
* 就近放置策略根据物料ABC类区分
*/
@Service("nearby")
@Slf4j
public class NearbyRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
//每个策略的配置信息
/**
@@ -48,83 +52,12 @@ public class NearbyRuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
if (CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前分配策略无可用货位");
}
List<StIvtStructattr> before = list.subList(0, list.size()>10?10:list.size());
log.info("就近分配前:"+ before);
list.sort(Comparator.comparingInt(i -> i.getRow_num()+i.getCol_num()+i.getLayer_num()+i.getBlock_num()));
//就近分配区分出库还是入库策略
return list;
List<StIvtStructattr> subList = list.subList(0, list.size()>10?10:list.size());
log.info("就近分配结果:"+ subList);
return subList;
}
/**
* 入库策略:默认入库顺序数小的一方为靠近出口方向
* @param attrList :仓位集合
* @param jsonParammaterialId :物料标识
* @return List<StIvtStructattr> :仓位集合
*/
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, JSONObject jsonParam) {
return attrList;
}
/**
* 出库策略:默认出库顺序数大的一方为靠近出口方向
* @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

@@ -3,6 +3,7 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.diy;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
@@ -68,15 +69,18 @@ public class InventoryRuleHandler extends Decisioner<StIvtStructattr, JSONObject
throw new BadRequestException("当前分配策略无可用货位");
}
String start_point = param.getString("start_point");
String target = LINK_POINT.get(start_point);
if (StringUtils.isNotEmpty(target)){
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)) {
lqw.eq(SchBaseTask::getPoint_code1, target)
.lt(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("执行中"));
List<SchBaseTask> tasks = taskService.list(lqw);
for (SchBaseTask task : tasks) {
String point_code2 = task.getPoint_code2();
list = getInventory(list, point_code2);
if (!CollectionUtils.isEmpty(list)) {
return list;
List new_list = getInventory(list, point_code2);
if (!CollectionUtils.isEmpty(new_list)) {
return new_list;
}
}
}
return list;

View File

@@ -62,16 +62,13 @@ public class GroupDickInStorageTask extends AbstractTask {
if (StringUtils.isEmpty(point_code1)){
throw new BadRequestException("申请任务失败:请求参数数据异常");
}
MdGruopDick mst = iMdGruopDickService
.getOne(new QueryWrapper<MdGruopDick>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (mst == null){
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"组盘信息不存在");
}
List<MdPbVehicleMaterVo> item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code);
if (CollectionUtils.isEmpty(item)){
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"组盘信息不存在");
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"载具物料信息信息不存在");
}
String groupId = item.get(0).getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId);
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code).select("task_code")
.lt("status",StatusEnum.FORM_STATUS.code("完成")));

View File

@@ -5,16 +5,16 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.constant.DictConstantPool;
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.common.utils.*;
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.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
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;
@@ -22,10 +22,13 @@ import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/*
@@ -34,12 +37,13 @@ import java.util.stream.Collectors;
* 出库任务入库任务
*/
@Service
@Slf4j
public class OutStorageTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISysParamService iSysParamService;
private MoveStorageTask moveStorageTask;
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@@ -63,18 +67,25 @@ public class OutStorageTask extends AbstractTask {
if (StringUtils.isEmpty(configTarget)){
throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常");
}
target_point = configTarget;
target_point=configTarget;
}
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code)
.ne("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库"))
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
log.info("OutStorgeTask出入分配货位信息:{}",struct.toString());
String end_struct_code = struct.getStruct_code();
if (struct.getStor_code().equals("FStockId")){
end_struct_code = SpringContextHolder.getBean(OutStorageTask.class).DoubleStor(struct);
}
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
@@ -85,7 +96,7 @@ public class OutStorageTask extends AbstractTask {
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setTask_type(from.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(struct.getStruct_code());
task.setPoint_code1(end_struct_code);
task.setPoint_code2(target_point);
taskService.save(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
@@ -100,8 +111,61 @@ public class OutStorageTask extends AbstractTask {
return (JSONObject)JSON.toJSON(task);
}
@Transactional(propagation= Propagation.REQUIRES_NEW)
public synchronized String DoubleStor(StIvtStructattr struct) {
String blockPoint = getZdPoint(struct.getStruct_code());
//浅货位
log.info("1-----出库分配:{},当前货位:{}",blockPoint,struct.getStruct_code());
RedissonUtils.lock(()->{
},"DoubleStor",1);
if (blockPoint.equals(struct.getStruct_code())){
/**
* 当前为浅位
* 1.判断浅位是否存在移库任务
* 2.存在则取移库任务终点作为出库起点
*/
SchBaseTask moveTask = taskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库"))
.eq("vehcle_code",struct.getVehicle_code())
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (moveTask !=null){
log.info("1-----出库分配:浅位存在移库任务",moveTask.getTask_code()+"_"+moveTask.getVehicle_code()+"_"+moveTask.getPoint_code1()+"_"+moveTask.getPoint_code2());
return moveTask.getPoint_code2();
}
}else {
/**
* 1.判断浅位是否存在托盘
* 2.如果有则判断是否存在出库任务
* 3.如果没有则生成移库任务
*/
StIvtStructattr block = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>()
.eq("struct_code", blockPoint)
.isNotNull("vehicle_code"));
log.info("2-----出库分配:深位查询是否有货:{}",block!=null);
if (block!=null){
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("point_code1", block.getStor_code())
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (count == 0){
AtomicReference<String> moveStruct = new AtomicReference<>();
RedissonUtils.lock(() -> {
System.out.println("---3--" + Thread.currentThread().getName());
Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("nearby","depthPriority"), new JSONObject(MapOf.of("stor_code", block.getStor_code())));
moveStruct.set(((Map<String, String>) process.get("form_data")).get("end_struct_code"));
}, "1" + block.getStor_code(), 5);
Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库")
, "is_send", false
, "vehicle_code", block.getVehicle_code(), "form_data", new JSONObject(MapOf.of("start_struct_code", block.getStruct_code(), "end_struct_code", moveStruct.get())));
log.info("3-----出库分配:生成移库任务:{}",moveForm);
moveStorageTask.createTask(new JSONObject(moveForm));
}
}
}
return struct.getStruct_code();
}
@Override
@Transactional
public void updateStatus(JSONObject data) {
this.updateTask(data);
}
@@ -118,4 +182,20 @@ public class OutStorageTask extends AbstractTask {
public void cancel(JSONObject data) {
this.updateTask(data);
}
private static String getZdPoint(String point_code) {
if (point_code == null || point_code.length() != 9) {
return null;
}
String type = point_code.substring(0, 1);
int row = Integer.parseInt(point_code.substring(1, 3));
String rest = point_code.substring(3);
if (row % 2 == 0) {
row -= 1;
} else {
row += 1;
}
return String.format("%s%02d%s", type, row, rest);
}
}

View File

@@ -62,10 +62,7 @@ public class PalletInStorageTask extends AbstractTask {
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"物料信息不存在");
}
MdPbVehicleMaterVo vehicleMater = item.get(0);
//更新载具proc_inst_id
String currentInstId = vehicleMater.getProc_inst_id();
if (StringUtils.isEmpty(currentInstId)){
//触发流程
BussEventMulticaster.Publish(
new FlowStartEvent("pallet_in",
(proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
@@ -75,20 +72,6 @@ public class PalletInStorageTask extends AbstractTask {
,null)
.build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater))
);
}else {
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code).select("task_code")
.lt("status",StatusEnum.FORM_STATUS.code("完成")));
if (schBaseTask!=null){
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"已经存任务"+schBaseTask.getTask_code());
}
ActRuExecution execution = iActRuExecutionService.getById(currentInstId);
if (execution == null){
throw new BadRequestException("申请任务失败:载具"+vehicle_code+"流程信息不存在"+currentInstId);
}
FlowContinueEvent continueEvent = new FlowContinueEvent(currentInstId, null, new JSONObject(MapOf.of("start_point", point_code1)));
BussEventMulticaster.Publish(continueEvent);
}
}
return null;
}

View File

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
@@ -34,6 +35,7 @@ import java.util.stream.Collectors;
* 出库任务入库任务
*/
@Service
@Slf4j
public class ToPickPlatformTask extends AbstractTask {
private static volatile String Lask_Point;
@Autowired
@@ -58,6 +60,7 @@ public class ToPickPlatformTask extends AbstractTask {
throw new BadRequestException("当前拣选工位未启用");
}
//轮询
log.info("上次拣选平台分配位置:{},拣选平台开放点:{}",Lask_Point,targetPoints);
for (int i = 0; i < targetPoints.size(); i++) {
String code = targetPoints.get(i).getCode();
if (targetPoints.size()>1 && !code.equals(Lask_Point)){

View File

@@ -220,14 +220,10 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.eq("task_code", task_code));
break;
case "rm":
return dicisionStruct(struct_code, stIvtStructattr, task);
return rm(stIvtStructattr, task);
case "rzd":
JSONObject struct = dicisionStruct(struct_code, stIvtStructattr, task);
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.set("update_time", DateUtil.now())
.set("vehicle_code", null)
.set("lock_type", StatusEnum.LOCK.code("无锁"))
.eq("struct_code", task.getPoint_code2()));
JSONObject struct = rzd(stIvtStructattr, task);
return struct;
case "czd":
moveTask(task_code, struct_code, stIvtStructattr);
@@ -257,7 +253,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
moveStorageTask.createTask(new JSONObject(moveForm));
}
private JSONObject dicisionStruct(String struct_code, StIvtStructattr stIvtStructattr, SchBaseTask task) {
private JSONObject rzd(StIvtStructattr stIvtStructattr, SchBaseTask task) {
String task_code = task.getTask_code();
MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService
.getOne(new QueryWrapper<MdPbVehicleMater>()
@@ -267,24 +263,53 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
Map map = SpringContextHolder.getBean(DecisionHandler.class)
.dispenseTransa(ListOf.of("nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code())));
String new_struct_code = ((Map<String, String>) map.get("form_data")).get("end_struct_code");
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
.set("remark", struct_code + "入满异常重新分配货位" + new_struct_code)
.set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code)
.eq("proc_inst_id", vehicleCode.getProc_inst_id()));
this.update(new UpdateWrapper<SchBaseTask>()
.set("point_code2", new_struct_code)
.set("remark", struct_code + "入满异常重新分配货位" + new_struct_code)
.set("remark", stIvtStructattr.getStor_code() + "入满异常重新分配货位" + new_struct_code)
.eq("task_code", task_code));
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", task.getPoint_code2()));
if (StringUtils.isEmpty(struct.getVehicle_code())){
if (StringUtils.isEmpty(stIvtStructattr.getVehicle_code())){
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.eq("struct_code", struct_code)
.eq("struct_code", stIvtStructattr.getStruct_code())
.set("lock_type", StatusEnum.LOCK.code("异常锁定"))
.set("update_time", DateUtil.now())
.set("remark", "入满异常:" + task_code)
.set("vehicle_code", "YCZJ" + task_code));
.set("vehicle_code", "YCZD" + task_code));
}
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.set("update_time", DateUtil.now())
.set("vehicle_code", null)
.set("lock_type", StatusEnum.LOCK.code("无锁"))
.eq("struct_code", task.getPoint_code2()));
JSONObject result = new JSONObject();
result.put("point_code2", new_struct_code);
return result;
}
private JSONObject rm(StIvtStructattr stIvtStructattr, SchBaseTask task) {
String task_code = task.getTask_code();
MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService
.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", task.getVehicle_code())
.eq("is_delete",false));
//查询分配规则
Map map = SpringContextHolder.getBean(DecisionHandler.class)
.dispenseTransa(ListOf.of("nearby"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code())));
String new_struct_code = ((Map<String, String>) map.get("form_data")).get("end_struct_code");
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
.set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code)
.eq("proc_inst_id", vehicleCode.getProc_inst_id()));
this.update(new UpdateWrapper<SchBaseTask>()
.set("point_code2", new_struct_code)
.set("remark", stIvtStructattr.getStor_code() + "入满异常重新分配货位" + new_struct_code)
.eq("task_code", task_code));
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
.eq("struct_code", stIvtStructattr.getStruct_code())
.set("lock_type", StatusEnum.LOCK.code("异常锁定"))
.set("update_time", DateUtil.now())
.set("remark", "入满异常:" + task_code)
.set("vehicle_code", "YCZD" + task_code));
JSONObject result = new JSONObject();
result.put("point_code2", new_struct_code);
return result;

View File

@@ -108,14 +108,14 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
dick.setVehicle_code(vehicle_code);
dick.setCode(CodeUtil.getNewCode("md_group_dick"));
dick.setId(IdUtil.getStringId());
dick.setStatus(StatusEnum.FORM_STATUS.code("执行中"));
dick.setStatus(StatusEnum.FORM_STATUS.code("完成"));
dick.setCreate_name(SecurityUtils.getCurrentNickName());
dick.setCreate_time(now);
map.put(vehicle_code,dick);
vehicleMater.setGroup_id(dick.getId());
}else {
vehicleMater.setGroup_id(mdGruopDick.getId());
mdGruopDick.setStatus(StatusEnum.FORM_STATUS.code("执行中"));
mdGruopDick.setStatus(StatusEnum.FORM_STATUS.code("完成"));
mdGruopDick.setUpdate_name(SecurityUtils.getCurrentNickName());
mdGruopDick.setUpdate_time(now);
}

View File

@@ -49,6 +49,7 @@ public class IOStorageController {
MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", vehicle_code)
.eq("is_delete", false));
if (one!=null){
String proc_inst_id = one.getProc_inst_id();
if (!StringUtils.isEmpty(proc_inst_id)){
String parent_id = iActRuExecutionService.getParentByChild(proc_inst_id);
@@ -62,6 +63,7 @@ public class IOStorageController {
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("is_delete",true)
.eq("id",one.getId()));
}
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}

View File

@@ -70,16 +70,16 @@ public class PalletIostorinvService {
vehicleMater.setQty(new BigDecimal(1));
vehicleMater.setUnit_id("16");
iMdPbVehicleMaterService.save(vehicleMater);
//触发流程
BussEventMulticaster.Publish(
new FlowStartEvent("pallet_in",
(proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("proc_inst_id",proc_inst_id)
.eq("vehicle_code",vehicle_code)
.eq("is_delete",false))
,null)
.build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater))
);
// //触发流程
// BussEventMulticaster.Publish(
// new FlowStartEvent("pallet_in",
// (proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
// .set("proc_inst_id",proc_inst_id)
// .eq("vehicle_code",vehicle_code)
// .eq("is_delete",false))
// ,null)
// .build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater))
// );
};
public void outStorage(JSONObject form){

View File

@@ -77,20 +77,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type());
}
List<PmFormData> result = new ArrayList<>();
JSONObject sourceData = JSONObject.parseObject(sourceString);
if (StringUtils.isNotEmpty(one.getConvert_json())) {
sourceData = sourceData.getJSONObject(one.getConvert_json());
}
// JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData);
// Object items = target.remove("item");
// target.put("id", IdUtil.getStringId());
// target.put("code", CodeUtil.getNewCode(formMapping.getForm_type()));
// target.put("create_time", DateUtil.now());
// target.put("create_name", SecurityUtils.getCurrentNickName());
// PmFormData mst = target.toJavaObject(PmFormData.class);
// result.add(mst);
// if (items != null) {
// JSONArray items_arr = (JSONArray) items;
JSONObject sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
for (int i = 0; i < items_arr.size(); i++) {
JSONObject itemTarget = items_arr.get(i);
@@ -198,22 +185,22 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
Set<String> fields = ListOf.ofSet(formStruc.getBiz_code(), formStruc.getBiz_id(), formStruc.getBiz_code(), formStruc.getBiz_status(), formStruc.getMaterial_id(), formStruc.getPcsn(), formStruc.getVehicle_code(), formStruc.getVehicle_id(),formStruc.getUnit_id(), formStruc.getQty());
JSONObject data = fieldMapping(fields, fieldMapping, sourceData);
data.put("form_type",formStruc.getForm_type());
List<JSONObject> items = new ArrayList<>();
List<JSONObject> items = new ArrayList<>();
JSONObject form_param = formStruc.getForm_param();
String convertJson = formStruc.getConvert_json();
if (form_param != null) {
JSONObject form_data = fieldMapping(form_param.keySet(), fieldMapping, sourceData);
if (formStruc.getHas_child()) {
JSONArray sourceDtls = sourceData.getJSONArray(formStruc.getConvert_json());
JSONArray sourceDtls = (JSONArray)sourceData.remove(convertJson);
for (int i = 0; i < sourceDtls.size(); i++) {
JSONObject item = fieldMapping(form_param.keySet(), fieldMapping, sourceDtls.getJSONObject(i));
item.putAll(form_data);
JSONObject itemJson = sourceDtls.getJSONObject(i);
itemJson.putAll(sourceData);
JSONObject item = fieldMapping(form_param.keySet(), fieldMapping, itemJson);
JSONObject itemData = new JSONObject(data);
itemData.put("form_data",item);
items.add(itemData);
}
}
}
return items;
}

View File

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.utils.RedissonUtils;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.stor_manage.io.service.dto.StorInvQuery;
import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService;
@@ -102,7 +103,9 @@ public class StIvtIostorinvOutController {
@PostMapping("/taskOpen")
@Log("出库单作业下发")
public ResponseEntity<Object> taskOpen(@RequestBody JSONObject dtl) {
RedissonUtils.lock(()->{
iStIvtIostorinvService.taskOpen(dtl);
},"出库单",null);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}

View File

@@ -50,7 +50,7 @@ import java.util.stream.Collectors;
@Service
public class PickingService {
private static Map<String, String> Pick_Convery = MapOf.of("1308", "1207", "1311", "1209");
private static Map<String, String> Pick_Convery = MapOf.of("1308", "1207", "1311", "1210");
@Autowired
private IPmFormDataService iFormDataService;
@Autowired
@@ -63,8 +63,6 @@ public class PickingService {
private WmsToAcsService wmsToAcsService;
@Autowired
private IPmFormDataService pmFormDataService;
@Autowired
private IStIvtIostorinvdtlService iStIvtIostorinvDtlService;
/**
* 生成拣选任务
@@ -90,7 +88,8 @@ public class PickingService {
throw new BadRequestException("载具编码不存在");
}
vehicleCodes.remove(one.getVehicle_code());
int mCode = iMdPbVehicleMaterService.count(new QueryWrapper<MdPbVehicleMater>().in("vehicle_code", vehicleCodes));
int mCode = iMdPbVehicleMaterService.count(new QueryWrapper<MdPbVehicleMater>()
.in("vehicle_code", vehicleCodes).eq("is_delete",false));
if (mCode > 0) {
throw new BadRequestException("当前载具" + vehicleCodes.toString() + "以存在载具物料信息");
}

View File

@@ -18,7 +18,6 @@ import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
@Order(100)
@ConditionalOnProperty(name = "jobrun", havingValue = "true")
public class JobRunner implements ApplicationRunner {
private static final Logger log = LoggerFactory.getLogger(JobRunner.class);
private final ISysQuartzJobService quartzJobService;

View File

@@ -57,10 +57,6 @@ public class TaskScheduleService {
public void taskPublish(){
boolean islock = lock.tryLock();
try {
Thread thread = new Thread(()->{
log.info("子线程任务------");
});
thread.start();
log.info("111---执行定时任务:-----taskPublish-----");
if (islock){
//查询所有自动下发的任务

View File

@@ -7,7 +7,7 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:mysql://${DB_HOST:192.168.1.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
# url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:root}
password: ${DB_PWD:123456}