fix:出库入规则优化
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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("外部系统用户");
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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 jsonParam:materialId :物料标识
|
||||
* @return List<StIvtStructattr> :仓位集合
|
||||
*/
|
||||
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, JSONObject jsonParam) {
|
||||
|
||||
return attrList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库策略:默认出库顺序数大的一方为靠近出口方向
|
||||
* @param attrList :仓位物料信息
|
||||
* @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配)
|
||||
* @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;
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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("完成")));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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() + "以存在载具物料信息");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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){
|
||||
//查询所有自动下发的任务
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user