rev:出入库流程兼容

This commit is contained in:
zhangzq
2024-06-03 10:09:04 +08:00
parent e446f8b743
commit a243c910ce
85 changed files with 741 additions and 301 deletions

View File

@@ -11,6 +11,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Map;
/**
@@ -54,8 +55,10 @@ public class StIvtBsrealstorattrController {
}
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
iStIvtBsrealstorattrService.deleteAll(ids);
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
if (ids.length>0){
iStIvtBsrealstorattrService.removeByIds(Arrays.asList(ids));
}
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -29,7 +29,7 @@ public class StIvtBsrealstorattr implements Serializable {
* 仓库标识
*/
@TableId
private String stor_id;
private String id;
/**
* 仓库编码

View File

@@ -18,7 +18,7 @@
<select id="getStor" resultType="com.alibaba.fastjson.JSONObject">
SELECT
CONVERT(stor_id , CHAR ) AS stor_id,
CONVERT(id , CHAR ) AS stor_id,
stor_code,
stor_name
FROM

View File

@@ -71,7 +71,7 @@ public class StIvtBsrealstorattrServiceImpl extends ServiceImpl<StIvtBsrealstora
throw new BadRequestException("已存在相同编码的仓库【" + dao.getStor_code() + "");
}
dao.setStor_id(IdUtil.getStringId());
dao.setId(IdUtil.getStringId());
dao.setCreate_id(SecurityUtils.getCurrentUserId());
dao.setCreate_name(SecurityUtils.getCurrentNickName());
dao.setUpdate_id(SecurityUtils.getCurrentUserId());
@@ -89,7 +89,7 @@ public class StIvtBsrealstorattrServiceImpl extends ServiceImpl<StIvtBsrealstora
@Override
@Transactional(rollbackFor = Exception.class)
public void update(StIvtBsrealstorattr dao) {
StIvtBsrealstorattr isDao = this.getById(dao.getStor_id());
StIvtBsrealstorattr isDao = this.getById(dao.getId());
if (isDao == null) {
throw new BadRequestException("被删除或无权限,操作失败!");

View File

@@ -8,7 +8,7 @@
attr.stor_name
FROM
st_ivt_sectattr sect
LEFT JOIN st_ivt_bsrealstorattr attr ON sect.stor_id = attr.stor_id
LEFT JOIN st_ivt_bsrealstorattr attr ON sect.stor_id = attr.id
<where>
sect.is_delete = '0'
@@ -31,11 +31,11 @@
sect.sect_id,
sect.sect_code,
stor.stor_name,
stor.stor_id,
stor.id,
stor.stor_code
FROM
st_ivt_sectattr sect
LEFT JOIN st_ivt_bsrealstorattr stor ON sect.stor_id = stor.stor_id
LEFT JOIN st_ivt_bsrealstorattr stor ON sect.stor_id = stor.id
WHERE
stor.is_used = '1'
<if test="is_virtualstore != null and is_virtualstore != ''">
@@ -54,13 +54,13 @@
and stor.is_reversed = #{is_reversed}
</if>
<if test="stor_id != null and stor_id != ''">
and stor.stor_id = #{stor_id}
and stor.id = #{stor_id}
</if>
<if test="stor_id != null and stor_id != ''">
and stor.stor_id = #{stor_id}
and stor.id = #{stor_id}
</if>
<if test="stor_id != null and stor_id != ''">
and stor.stor_id = #{stor_id}
and stor.id = #{stor_id}
</if>
<if test="sect_type_attr != null and stor_id != ''">
and st_ivt_sectattr.sect_type_attr = #{sect_type_attr}

View File

@@ -86,14 +86,16 @@ public class BmFormStrucController {
}
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids){
public ResponseEntity<Object> delete(@RequestBody String[] ids){
//参数判读,参数解析,调用参数入库
if (ids.length>0){
List<PmFormData> pmFormData = iPmFormDataService.listByIds(Arrays.asList(ids));
Set<String> collect = pmFormData.stream().map(PmFormData::getForm_type).collect(Collectors.toSet());
int dataCount = iPmFormDataService.count(new QueryWrapper<PmFormData>().in("form_type", collect));
if (dataCount>0){
throw new BadRequestException("当前表单存在业务数据,不允许删除");
if (!CollectionUtils.isEmpty(collect)){
int dataCount = iPmFormDataService.count(new QueryWrapper<PmFormData>().in("form_type", collect));
if (dataCount>0){
throw new BadRequestException("当前表单存在业务数据,不允许删除");
}
}
iBmFormStrucService.removeByIds(Arrays.asList(ids));
}

View File

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -55,8 +56,11 @@ public class BmFormStrucServiceImpl extends ServiceImpl<BmFormStrucMapper, BmFor
List<BmFormStrucDto> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(records)){
List<String> ids = records.stream().filter(BmFormStruc::getHas_child).map(BmFormStruc::getId).collect(Collectors.toList());
List<BmFormStruc> childs = this.list(new QueryWrapper<BmFormStruc>().in("parent_id", ids));
Map<String, List<BmFormStruc>> childMap = childs.stream().collect(Collectors.groupingBy(BmFormStruc::getParent_id));
Map<String, List<BmFormStruc>> childMap = new HashMap<>();
if (!CollectionUtils.isEmpty(ids)){
List<BmFormStruc> childs = this.list(new QueryWrapper<BmFormStruc>().in("parent_id", ids));
childMap = childs.stream().collect(Collectors.groupingBy(BmFormStruc::getParent_id));
}
for (BmFormStruc record : records) {
BmFormStrucDto strucDto = new BmFormStrucDto();
BeanUtils.copyProperties(record, strucDto);

View File

@@ -0,0 +1,33 @@
package org.nl.wms.decision_manage.applyTask;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
/**
* Title: AbstractAcsTask.java Description:任务抽象类
* <p>
* Task状态:01生成 ,02确定起点03、确定终点04、起点和终点都确认05:下发,可以下发, 06、执行中 07、完成
* 完成方式:01自动,02:wcs删除03、wms删除04、发给wcs失败自动删除
*
* @author ldjun
* @created 2020年6月12日 下午5:53:28
*/
@Slf4j
public abstract class AbstractApplyTask {
public abstract String createTask(JSONObject data);
public abstract void updateStatus(JSONObject data);
public abstract void cancel(JSONObject data);
}

View File

@@ -0,0 +1,76 @@
package org.nl.wms.decision_manage.applyTask.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.utils.MapOf;
import org.nl.wms.decision_manage.applyTask.AbstractApplyTask;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleGroup.service.dao.MdPbVehicleMater;
import org.nl.wms.md_manage.vehicleGroup.service.dto.MdPbVehicleMaterVo;
import org.nl.wms.md_manage.vehicleGroup.service.dto.MdVehicleGruopDtlVo;
import org.nl.wms.md_manage.vehicleGroup.service.dto.VehicleMaterQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* Title: AbstractAcsTask.java Description:任务抽象类
* <p>
* Task状态:01生成 ,02确定起点03、确定终点04、起点和终点都确认05:下发,可以下发, 06、执行中 07、完成
* 完成方式:01自动,02:wcs删除03、wms删除04、发给wcs失败自动删除
*
* @author ldjun
* @created 2020年6月12日 下午5:53:28
*/
@Slf4j
@Service
public class ApplyFlowTask extends AbstractApplyTask {
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
public String createTask(JSONObject data) {
for (String vehicle_code : data.keySet()) {
String point_code1 = data.getString(vehicle_code);
if (StringUtils.isEmpty(point_code1)){
throw new BadRequestException("申请任务失败:请求参数数据异常");
}
MdPbVehicleMater mst = iMdPbVehicleMaterService.getGroupMst(vehicle_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+"组盘信息不存在");
}
JSONObject groupJson = (JSONObject)JSONObject.toJSON(mst);
BussEventMulticaster.Publish(
new FlowStartEvent("md_group",null,new JSONObject(MapOf.of("point_code1",point_code1)))
.build("md_pb_vehicleMater",mst.getId(),mst.getMst_form_type(),mst.getMst_form_id(),(JSONObject) groupJson)
.build("md_pb_vehicleMater",item)
);
}
return null;
}
@Override
public void updateStatus(JSONObject data) {
}
@Override
public void cancel(JSONObject data) {
}
}

View File

@@ -1,32 +1,20 @@
package org.nl.wms.decision_manage.handler.impl.base;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.MapOf;
import org.nl.wms.base_manage.vehicle.vehicleInfo.service.dto.VehicleQuery;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dto.VehicleMaterQuery;
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
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;
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.IStIvtIostorinvdtlService;
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/*
@@ -63,7 +51,7 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
throw new BadRequestException("仓位集合为空!");
}
//分配数量
int plan_qty = param.getInteger("plan_qty");
int plan_qty = param.getInteger("qty");
//当前条件只有id批次
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getString("material_id")
, "pcsn", param.getString("pcsn")

View File

@@ -23,7 +23,7 @@ public class TaskDispatchService {
List<SchBaseTask> tasks = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>()
.eq("is_send", true)
.eq("is_delete",false)
.lt("task_status", StatusEnum.FORM_STATUS.code("生成")));
.lt("status", StatusEnum.FORM_STATUS.code("生成")));
//...调度逻辑
//下发

View File

@@ -19,7 +19,7 @@ public class StructEvent extends PublishEvent {
private String vehicle_code;
private String task_status;
private String status;
private String point_code1;
private String point_code2;

View File

@@ -10,7 +10,6 @@ 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.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
@@ -59,14 +58,14 @@ public class OutStorageTaskHandler implements TaskHandler {
throw new BadRequestException("创建任务失败:OutStorageTaskHandler#process()方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.ne("task_status", StatusEnum.FORM_STATUS.code("完成")));
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(StatusEnum.FORM_STATUS.code("生成"));
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setHandle_class(this.getClass().getName());
task.setAcs_type("");
task.setCreate_time(DateUtil.now());

View File

@@ -10,7 +10,7 @@ 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.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
@@ -45,14 +45,14 @@ public class StackingTaskHandler implements TaskHandler {
throw new BadRequestException("创建任务失败:StackingTaskHandler#process()方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.ne("task_status", StatusEnum.FORM_STATUS.code("完成")));
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(StatusEnum.FORM_STATUS.code("生成"));
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setHandle_class(this.getClass().getName());
task.setAcs_type("");
task.setCreate_time(DateUtil.now());

View File

@@ -6,8 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleGroup.service.dao.MdPbVehicleMater;
import org.nl.wms.dispatch_manage.task.handler.StructEvent;
import org.nl.wms.dispatch_manage.task.handler.TaskHandler;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
@@ -33,7 +33,7 @@ public class TaskStatusHandler implements TaskHandler {
@Override
public JSONObject process(JSONObject from, JSONObject param) {
//暂时出入入库的问题
from.put("task_status",param.getString("task_status"));
from.put("status",param.getString("status"));
from.put("update_time",DateUtil.now());
from.put("update_name",SecurityUtils.getCurrentNickName());
SchBaseTask schBaseTask = from.toJavaObject(SchBaseTask.class);
@@ -48,7 +48,7 @@ public class TaskStatusHandler implements TaskHandler {
MdPbVehicleMater vehicleMater = vehicleMaters.get(0);
BussEventMulticaster.Publish(StructEvent.builder()
.task_type(schBaseTask.getTask_type())
.task_status(schBaseTask.getTask_status())
.status(schBaseTask.getStatus())
.source_form_id(vehicleMater.getSource_form_id())
.source_form_type(vehicleMater.getSource_form_type())
.vehicle_code(schBaseTask.getVehicle_code())

View File

@@ -48,7 +48,7 @@ public class SchBaseTask implements Serializable {
/**
* 任务状态
*/
private String task_status;
private String status;
/**
* 任务执行步骤

View File

@@ -18,7 +18,7 @@
OR t.point_code2 LIKE '%${whereJson.point_code}%')
</if>
<if test="whereJson.unFinished != null">
AND t.task_status <![CDATA[<=]]> #{whereJson.unFinished}
AND t.status <![CDATA[<=]]> #{whereJson.unFinished}
</if>
<if test="whereJson.vehicle_code != null">
AND t.vehicle_code = #{whereJson.vehicle_code}
@@ -30,7 +30,7 @@
AND t.create_time <![CDATA[>=]]> #{whereJson.begin_time}
</if>
<if test="collect != null and collect != ''">
AND t.task_status IN
AND t.status IN
<foreach collection="collect" item="code" separator="," open="(" close=")">
#{code}
</foreach>
@@ -49,7 +49,7 @@
sch_base_task.point_code1,
sch_base_task.point_code2,
sch_base_task.task_type,
sch_base_task.task_status,
sch_base_task.status,
sch_base_task.task_code
FROM
md_pb_vehicleMater

View File

@@ -15,7 +15,7 @@ public class SchBaseTaskQuery implements Serializable {
private String point_code;
private String begin_time;
private String end_time;
private String more_task_status;
private String more_status;
private String unFinished;
private String config_code;

View File

@@ -27,7 +27,7 @@ public class TaskQuery extends BaseQuery<SchBaseTask> {
/**
* 任务状态
*/
private String task_status;
private String status;
/**
* 点位
*/

View File

@@ -41,8 +41,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Override
public IPage<SchBaseTask> queryAll(SchBaseTaskQuery whereJson, PageQuery page) {
List<String> collect = ObjectUtil.isNotEmpty(whereJson.getMore_task_status())
? Arrays.stream(whereJson.getMore_task_status().split(",")).collect(Collectors.toList()) : null;
List<String> collect = ObjectUtil.isNotEmpty(whereJson.getMore_status())
? Arrays.stream(whereJson.getMore_status().split(",")).collect(Collectors.toList()) : null;
if (collect != null) {
if (collect.contains("")) {
collect = null;
@@ -87,7 +87,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
public void create(SchBaseTask entity) {
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
Assert.notNull(entity.getTask_status(), "任务状态不能为空!");
Assert.notNull(entity.getStatus(), "任务状态不能为空!");
entity.setId(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setTask_code(CodeUtil.getNewCode("TASK_CODE"));

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.publish.AbstraceListener;
import org.nl.common.utils.IdUtil;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
import org.nl.wms.early_manage.service.early_dtl.IAlmEarlyDtlService;
import org.nl.wms.early_manage.service.early_dtl.dao.AlmEarlyDtl;
import org.nl.wms.early_manage.service.early_inv.IAlmEarlyInvService;

View File

@@ -0,0 +1,44 @@
package org.nl.wms.external_system;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.utils.InterationUtil;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.external_system.acs.service.AcsToWmsService;
import org.nl.wms.external_system.acs.service.dto.TransferDto;
import org.nl.wms.external_system.dto.InteracteDto;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler;
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/5/6 14:53
*/
@Service
public class GateWayService {
@Autowired
private AcsToWmsService acsToWmsService;
public void apply(InteracteDto param){
//处理日志相关
String service = param.getService();
//根据服务拆分不同的业务
acsToWmsService.applyTask(param.getService(),param.getData());
}
}

View File

@@ -0,0 +1,33 @@
package org.nl.wms.external_system.acs.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.external_system.GateWayService;
import org.nl.wms.external_system.dto.InteracteDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
* @author ZZQ
* @Date 2024/5/6 14:53
*/
@RestController
@RequestMapping("/api/acsToWms")
public class AcsToWmsController {
@Autowired
private GateWayService gateWayService;
@PostMapping("/apply")
@SaIgnore
public ResponseEntity<Object> apply(@RequestBody InteracteDto form) {
gateWayService.apply(form);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -1,8 +1,15 @@
package org.nl.wms.external_system.acs.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*
* @author ZZQ
* @Date 2024/5/6 14:53
*/
@RestController
@RequestMapping("api/wmsService")
public class WmsToAcsController {
}

View File

@@ -0,0 +1,67 @@
package org.nl.wms.external_system.acs.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.utils.InterationUtil;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.decision_manage.applyTask.impl.ApplyFlowTask;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.external_system.acs.service.dto.TransferDto;
import org.nl.wms.external_system.dto.InteracteDto;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler;
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/*
* @author ZZQ
* @Date 2024/5/6 14:53
*/
@Service
public class AcsToWmsService implements InitializingBean {
@Autowired
private ApplyFlowTask applyFlowTask;
private SyncFormMapping mapping;
public void applyTask(String taskType,JSONObject data){
applyFlowTask.createTask(data);
}
@Override
public void afterPropertiesSet(){
this.mapping = SpringContextHolder.getBean(ISyncFormMappingService.class).getOne(new QueryWrapper<SyncFormMapping>()
.eq("form_type","sch_base_task"));
}
/**
* 系统交互
*/
public JSONObject interationToExt(List<SchBaseTask> arr) {
//封装数据:
TransferDto dto = new TransferDto();
MappingSourceDataTypeHandler<JSONObject> typeHandler = new MappingSourceDataTypeHandler<>();
List<JSONObject> items = typeHandler.sourceHandler((JSONArray)JSONArray.toJSON(arr), mapping);
dto.setModel(items);
JSONObject result = InterationUtil.notifyExt(mapping.getSync_url(), (JSONObject) JSON.toJSON(dto));
return result;
}
}

View File

@@ -0,0 +1,18 @@
package org.nl.wms.external_system.dto;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
/*
* @author ZZQ
* @Date 2024/5/29 16:26
*/
@Data
public class InteracteDto {
String service;
String ip;
String request_time;
String trace_id;
JSONObject data;
}

View File

@@ -0,0 +1,42 @@
package org.nl.wms.external_system.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.MapOf;
import java.util.Map;
/*
* @author ZZQ
* @Date 2024/4/23 10:49
*/
@Getter
@AllArgsConstructor
public enum ServiceEnum {
/**
* 外部系统对接服务类型
*/
IN_STORAGE(MapOf.of("IN_STORAGE_10", "10", "海柔入库", "IN_STORAGE_11")),
OUT_STORAGE(MapOf.of("OUT_STORAGE_20", "20", "海柔出库", "OUT_STORAGE_21")),
;
private Map<String, String> code;
public String code(String desc) {
String code = this.getCode().get(desc);
if (StringUtils.isNotEmpty(code)) {
return code;
}
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
}
public Boolean check(String code) {
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
if (entry.getValue().equals(code)) {
return true;
}
}
return false;
}
}

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
@@ -63,7 +64,7 @@ public class ExecutionController {
@PutMapping
public ResponseEntity<Object> update(@Validated @RequestBody ActRuExecution dto) {
dto.setStatus("30");
dto.setStatus(StatusEnum.MODEL_STATUS.code("未发布"));
dto.setUpdate_time(DateUtil.now());
executionService.updateById(dto);
return new ResponseEntity<>(HttpStatus.OK);
@@ -76,7 +77,7 @@ public class ExecutionController {
}
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/dtl/{id}")
@GetMapping("/dtl/{proc_inst_id}")
public ResponseEntity<Object> getDtl(@PathVariable String proc_inst_id) {
List<ActHiExecution> list = iActHiExecutionService.list(new LambdaQueryWrapper<ActHiExecution>().eq(ActHiExecution::getProc_inst_id, proc_inst_id));
JSONArray array = new JSONArray();
@@ -93,13 +94,6 @@ public class ExecutionController {
return new ResponseEntity<>(array, HttpStatus.OK);
}
@PostMapping(value = "/open")
public ResponseEntity<Object> getBpmnByModelId(JSONObject form) {
StartProcessInstanceVo startProcessInstanceVo = form.toJavaObject(StartProcessInstanceVo.class);
return new ResponseEntity<>(flowOperationService.startFormFlow(startProcessInstanceVo), HttpStatus.OK);
}
@GetMapping(value = "/confirm/{proc_inst_id}")
public ResponseEntity<Object> flowConfirm(@PathVariable String proc_inst_id) {
return new ResponseEntity<>(flowOperationService.flowConfirm(proc_inst_id,null), HttpStatus.OK);

View File

@@ -41,5 +41,14 @@ public class BpmnModel {
* 节点配置集合
*/
protected Map<String, JSONObject> nodeProperties = new HashMap<>();
/**
* 携带的扩展信息
*/
protected JSONObject auxParam;
public BpmnModel(JSONObject auxParam) {
this.auxParam = auxParam;
}
public BpmnModel() { }
}

View File

@@ -9,7 +9,6 @@ import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.*;
/*
@@ -28,7 +27,7 @@ public class InitFlowConfig {
public void initConfig(CommandExecutor commandExecutor){
CommandInterceptor first = initCommandInterceptor();
commandExecutor.setInterceptor(first);
CommandExecutor.activityBehaviorMap=activityBehaviorMap;
CommandExecutor.Activity_BehaviorMap =activityBehaviorMap;
TypeHandler.HANDLER_MAP=handlerMap;
}

View File

@@ -33,14 +33,16 @@ public class BpmnJSONConverter {
Node_Converter.put("sendMsg",new SendMsgConverter());
Node_Converter.put("subProcess",new SubProcessConverter());
}
public BpmnModel convertToBpmnModel(String model,String version,JSONObject model_json) {
return this.convertToBpmnModel(model,version,model_json,null);
}
public BpmnModel convertToBpmnModel(String model,String version,JSONObject model_json,JSONObject auxParam) {
//内存中获取
BpmnModel bpmnModel = BpmnModel_Cache.get(model + "_" + version);
if (bpmnModel!=null){
return bpmnModel;
}
bpmnModel = new BpmnModel();
bpmnModel = new BpmnModel(auxParam);
//节点解析:
JSONArray nodes = model_json.getJSONArray("nodes");
List<JSONObject> list = nodes.toJavaList(JSONObject.class);

View File

@@ -1,5 +1,6 @@
package org.nl.wms.flow_manage.flow.framework.converter.node.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.flow_manage.flow.framework.BpmnModel;
import org.nl.wms.flow_manage.flow.framework.converter.node.BaseNodeConverter;
@@ -7,6 +8,7 @@ import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.EventNode.EndEvent;
import java.util.Iterator;
import java.util.List;
/*
* @author ZZQ
@@ -22,6 +24,10 @@ public class EndEventConverter extends BaseNodeConverter {
end.setId(node.getString("id"));
end.setType(node.getString("type"));
end.setName(properties.getString("name"));
JSONArray finish = properties.getJSONArray("finish");
if (finish!=null){
end.setFinish(finish.toJavaList(String.class));
}
end.setDocumentation(properties.getString("documentation"));
//设置触发事件
end.setExecutionListeners(null);

View File

@@ -25,6 +25,8 @@ public class FormConverter extends BaseNodeConverter {
form.setType(node.getString("type"));
form.setForm_type(properties.getString("form_type"));
form.setSource_data(properties.getString("sourceData"));
form.setBill_type(properties.getString("bill_type"));
form.setSource_data(properties.getString("sourceData"));
form.setName(properties.getString("name"));
form.setCategory(properties.getString("category"));
form.setDocumentation(properties.getString("documentation"));

View File

@@ -24,8 +24,12 @@ public class ServerTaskConverter extends BaseNodeConverter {
form.setType(node.getString("type"));
form.setCategory(properties.getString("category"));
form.setForm_type(properties.getString("form_type"));
JSONObject auxParam = properties.getJSONObject("auxParam");
form.setAuxParam(auxParam);
JSONObject carry = model.getAuxParam();
if (carry!=null){
form.setAuxParam(carry);
}else {
form.setAuxParam(properties.getJSONObject("auxParam"));
}
form.setName(properties.getString("name"));
form.setDocumentation(properties.getString("documentation"));
//设置触发事件

View File

@@ -64,6 +64,7 @@ public abstract class FlowNodeActivityBehavior<T> {
.set("status", StatusEnum.FLOW_STATUS.code("节点完成"))
.set("form_data", entity.getT().toString())
.set("form_type",entity.getForm_type())
.set("form_id",entity.getForm_id())
.set("update_time", DateUtil.now()));
this.leaveActivity(entity);
//

View File

@@ -17,7 +17,9 @@ import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBeh
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowNode;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.EventNode.EndEvent;
import org.nl.wms.flow_manage.flow.service.deployment.IActReProcdefService;
import org.nl.wms.flow_manage.flow.service.deployment.dao.ActReProcdef;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
@@ -25,6 +27,7 @@ import org.nl.wms.flow_manage.monitor.event.FlowEndEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/*
@@ -47,11 +50,12 @@ public class EndEventActivityBehavior extends FlowNodeActivityBehavior<JSONObjec
public void execute(ExecutionEntity<JSONObject> entity) {
//流程结束:判断是否是子流程,是的话调用父流程
JSONObject data = entity.getT();
ExecutionDto executionDto = data.toJavaObject(ExecutionDto.class);
EndEvent endFlow = (EndEvent)entity.getCurrentFlowElement();
//后续监听器通过流程中监听事件配置
BussEventMulticaster.Publish(FlowEndEvent.builder().dto(executionDto)
BussEventMulticaster.Publish(FlowEndEvent.builder().dto(data.toJavaObject(ExecutionDto.class))
.form_type(entity.getForm_type())
.proc_inst_id(entity.getProc_inst_id())
.finish(endFlow.getFinish())
.form_id(entity.getForm_id()).build());
}
@@ -82,7 +86,10 @@ public class EndEventActivityBehavior extends FlowNodeActivityBehavior<JSONObjec
//通过该标识触发
flowNode.setPassNode(Boolean.TRUE);
entity.setT(parent.getForm_data());
entity.setForm_type(parent.getForm_type());
entity.setForm_id(parent.getForm_id());
entity.setCurrentFlowElement(flowNode);
entity.setDeploymentId(parent.getDeployment_id());
entity.setProc_inst_id(parent.getProc_inst_id());
entity.setParent_id(parent.getParent_id());
}

View File

@@ -61,10 +61,6 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
.eq("form_type", entity.getForm_type()));
BmFormStruc targetStruc = iBmFormStrucService.getOne(new QueryWrapper<BmFormStruc>()
.eq("form_type", currentNode.getForm_type()));
// if (sourceStruc==null || targetStruc==null){
// throw new BadRequestException("【flow】当前节点表单类型未定义");
// }
//TEST:这部分数据放在框架中,每个节点都需要
entity.setForm_struc(sourceStruc);
//怕断是否指定数据源:
JSONObject sourceData = entity.getT();
@@ -93,7 +89,7 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
mst_json.put("create_time",DateUtil.now());
mst_json.put("create_name",SecurityUtils.getCurrentNickName());
mst_json.put("status",StatusEnum.FORM_STATUS.code("生成"));
mst_json.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("生产入库"));
mst_json.put("bill_type",currentNode.getBill_type());
mst_json.put("code",CodeUtil.getNewCode("IO_CODE"));
mst_json.put("source_form_type",handler.getString("source_form_type"));
StIvtIostorinvIn mst = mst_json.toJavaObject(StIvtIostorinvIn.class);
@@ -116,8 +112,8 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
}
iostorinvService.save(mst);
entity.setT(handler);
entity.setForm_id(entity.getForm_id());
entity.setForm_type(entity.getForm_type());
entity.setForm_id(handler.getString("form_type"));
entity.setForm_type(handler.getString("form_id"));
}
}
}

View File

@@ -37,8 +37,8 @@ public class ServerTaskActivityBehavior extends FlowNodeActivityBehavior<JSONObj
}
JSONObject handler = typeHandler.handler(currentNode.getSkipExpression(), entity, null);
entity.setT(handler);
entity.setForm_id(entity.getForm_id());
entity.setForm_type(entity.getForm_type());
entity.setForm_id(handler.getString("form_type"));
entity.setForm_type(handler.getString("form_id"));
}
}
}

View File

@@ -14,6 +14,7 @@ import org.nl.wms.flow_manage.flow.service.deployment.IActReProcdefService;
import org.nl.wms.flow_manage.flow.service.deployment.dao.ActReProcdef;
import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -29,6 +30,8 @@ public class StartEventActivityBehavior extends FlowNodeActivityBehavior {
@Autowired
IActReProcdefService deploymentService;
@Autowired
IPmFormDataService iPmFormDataService;
@Override
public void execute(ExecutionEntity entity) {
@@ -54,6 +57,14 @@ public class StartEventActivityBehavior extends FlowNodeActivityBehavior {
execution.setCreate_time(DateUtil.now());
execution.setStatus(StatusEnum.FLOW_STATUS.code("启动"));
iActRuExecutionService.save(execution);
StringBuffer sql = new StringBuffer();
sql.append("update ")
.append(entity.getForm_type())
.append(" set status = ")
.append("'"+StatusEnum.FORM_STATUS.code("执行中")+"'")
.append(" where id = ")
.append("'"+entity.getForm_id()+"'");
iPmFormDataService.dynamicSql(sql.toString());
Consumer callback = entity.getCallback();
if (callback!=null){
callback.accept(execution.getProc_inst_id());

View File

@@ -101,8 +101,8 @@ public class StrucFormActivityBehavior extends FlowNodeActivityBehavior<JSONObje
}
iPmFormDataService.save(mst);
entity.setT(handler);
entity.setForm_id(entity.getForm_id());
entity.setForm_type(entity.getForm_type());
entity.setForm_id(handler.getString("form_type"));
entity.setForm_type(handler.getString("form_id"));
}
}
}

View File

@@ -20,7 +20,7 @@ public class CommandExecutor {
//线程变量
public static ThreadLocal<FlowableEngineAgenda> agenda = new ThreadLocal();
//不同类型处理器
public static Map<String, FlowNodeActivityBehavior> activityBehaviorMap = new HashMap<>();
public static Map<String, FlowNodeActivityBehavior> Activity_BehaviorMap = new HashMap<>();
//指令拦截器链
private CommandInterceptor first;

View File

@@ -29,7 +29,7 @@ public class ContinuOperation extends AbstractOperation {
//TODO:执行监听器
//处理当前节点业务更新当前流程执行id获取当前流程节点对应的处理器
try {
CommandExecutor.activityBehaviorMap.get(currentFlowElement.getType()).activity(execution);
CommandExecutor.Activity_BehaviorMap.get(currentFlowElement.getType()).activity(execution);
}catch (Exception ex){
//如果节点处理错误需要更新当前流程实例信息
System.out.println(ex.getMessage());

View File

@@ -1,7 +1,9 @@
package org.nl.wms.flow_manage.flow.framework.entity;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
@@ -13,7 +15,7 @@ import java.util.function.Consumer;
* @Date 2024/3/18 13:15
* 流程执行相关参数
*/
@Getter
@Data
public class ExecutionEntity<T> implements Cloneable{
/**
@@ -52,6 +54,8 @@ public class ExecutionEntity<T> implements Cloneable{
* 源单id
*/
protected String form_id;
//没有用到?
protected BmFormStruc form_struc;
//回调执行
@@ -65,42 +69,13 @@ public class ExecutionEntity<T> implements Cloneable{
this.activityName = currentFlowElement.getName();
}
public void setProc_inst_id(String proc_inst_id) {
this.proc_inst_id = proc_inst_id;
}
public void setStartActivityId(String startActivityId) {
this.startActivityId = startActivityId;
}
public void setDeploymentId(String deploymentId) {
this.deploymentId = deploymentId;
}
public void setForm_type(String form_type) {
if (StringUtils.isEmpty(form_type)){
throw new BadRequestException("流程执行异常:没有设置form_type");
}
this.form_type = form_type;
}
public void setForm_struc(BmFormStruc form_struc) {
this.form_struc = form_struc;
}
public void setForm_id(String form_id) {
this.form_id = form_id;
}
public void setT(T t) {
this.t = t;
}
public void setParent_id(String parent_id) {
this.parent_id = parent_id;
}
public void setCallback(Consumer callback) {
this.callback = callback;
}
@Override
public Object clone() {
try {

View File

@@ -24,6 +24,7 @@ public class EndEvent extends FlowNode {
protected String conditionExpression;
protected String skipExpression;
protected List<String> finish;
protected FlowElement sourceFlowElement;

View File

@@ -19,6 +19,10 @@ public class Form extends ExecuteTask {
* 表单类型
*/
private String form_type;
/**
* 业务类型
*/
private String bill_type;
/**
* 表单处理类别
*/

View File

@@ -66,15 +66,15 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
//更新仓位,更新数据
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
System.out.println("更新明细id"+item_json.getString("id"));
StringBuffer sql = new StringBuffer();
sql.append("update ")
.append(flow.getForm_type())
.append(" set struct_code = ")
.append("'"+collect+"'")
.append(" where id = ")
.append("'"+item_json.getString("id")+"'");
iPmFormDataService.dynamicSql(sql.toString());
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
// StringBuffer sql = new StringBuffer();
// sql.append("update ")
// .append(flow.getForm_type())
// .append(" set struct_code = ")
// .append("'"+collect+"'")
// .append(" where id = ")
// .append("'"+item_json.getString("id")+"'");
// iPmFormDataService.dynamicSql(sql.toString());
item_json.put("struct_code",collect);
return t;
}

View File

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.exception.BadRequestException;
@@ -18,20 +19,20 @@ import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.*;
/*
* @author ZZQ
* @Date 2024/3/21 15:16
*/
@Service("mapping")
@Slf4j
public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
@Autowired
IBmFormStrucService iBmFormStrucService;
@Override
public JSONObject handler(List<String> param, JSONObject data, BmFormStruc form_struc) {
log.info("映射信息:数据:{},映射关系:{},目标表结构:{}",data.toJSONString(),param.toString(),form_struc.getForm_type()+"_"+form_struc.getForm_param().toJSONString());
JSONObject resultT = new JSONObject();
JSONObject mapping = JSONObject.parseObject(param.size()==1?param.get(0):param.remove(0));
@@ -49,30 +50,41 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
JSONObject t = new JSONObject();
//查询目标表字段
//基础字段映射:如果只有一个就不迭代
Map<String, String> spelMap = new HashMap<>();
for (String field : mapping.keySet()) {
String value = sourceFormData.getString(mapping.getString(field));
t.put(field,value);
String skip = mapping.getString(field);
//判断是否走表达式映射:表达式映射都是按#M开头
if (skip.contains("#M")){
spelMap.put(field,skip);
}else {
t.put(field,sourceFormData.getString(skip));
}
}
t.putAll(SpelUtil.parse(sourceFormData, spelMap));
//查询表单配置表获取自定义json:自定义字段参数获取
JSONObject form_param = form_struc.getForm_param();
if (form_param!=null){
Map<String, String> formDataSpelMap = new HashMap<>();
JSONObject form_data = new JSONObject();
for (String item : form_param.keySet()) {
String value = "";
if (formDataMapping!=null){
JSONObject formDataMappingJson = (JSONObject) formDataMapping;
String mappingConfig = formDataMappingJson.getString(item);
if (StringUtils.isNotEmpty(mappingConfig)){
value = sourceFormData.getString(mappingConfig);
String skip = formDataMappingJson.getString(item);
if (StringUtils.isNotEmpty(skip)){
if (skip.contains("#M")){
formDataSpelMap.put(item,skip);
continue;
}else {
value = sourceFormData.getString(skip);
}
}
}
form_data.put(item,value);
}
form_data.putAll(SpelUtil.parse(sourceFormData, formDataSpelMap));
t.put("form_data",form_data);
}
Object itemSkip = param.remove("skipExpression");
JSONArray item = new JSONArray();
if (data.getJSONArray("item") == null){
item.add(data);

View File

@@ -15,9 +15,8 @@ import java.util.function.Consumer;
**/
public interface IFlowOperationService {
String startUp(String model_key, Consumer callback,ExecutionDto dto);
String startUp(String model_key, Consumer callback,ExecutionDto dto,JSONObject auxParam);
Boolean startFormFlow(StartProcessInstanceVo params);
Boolean flowConfirm(String proc_inst_id,JSONObject auxParam);
}

View File

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.wms.flow_manage.flow.framework.BpmnModel;
import org.nl.wms.flow_manage.flow.framework.converter.BpmnJSONConverter;
import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
@@ -24,7 +23,6 @@ import org.nl.wms.flow_manage.flow.service.execution.dto.StartProcessInstanceVo;
import org.nl.wms.flow_manage.flow.service.model.IActDeModelService;
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;
@@ -49,9 +47,11 @@ public class FlowOperationServiceImpl implements IFlowOperationService {
private CommandExecutor commandExecutor;
@Override
public String startUp(String model_key, Consumer callback, ExecutionDto dto) {
public String startUp(String model_key, Consumer callback, ExecutionDto dto, JSONObject auxParam) {
ActRuExecution one = iActRuExecutionService.getOne(new QueryWrapper<ActRuExecution>()
.eq("form_type", dto.getForm_type()).eq("form_id", dto.getForm_id()));
.eq("form_type", dto.getForm_type())
.eq("form_id", dto.getForm_id())
.lt("status",StatusEnum.FLOW_STATUS.code("完成")));
if (one!=null){
throw new BadRequestException("当前单据流程已存在:"+dto.getForm_type()+"_"+dto.getForm_id());
}
@@ -62,7 +62,7 @@ public class FlowOperationServiceImpl implements IFlowOperationService {
String model_json_string = deployment.getModel_editor_json();
//转流程实例:
JSONObject model_json = JSONObject.parseObject(model_json_string);
BpmnModel bpmnModel = bpmnJSONConverter.convertToBpmnModel(deployment.getModel_key(), deployment.getVersion(), model_json);
BpmnModel bpmnModel = bpmnJSONConverter.convertToBpmnModel(deployment.getModel_key(), deployment.getVersion(), model_json,auxParam);
System.out.println(bpmnModel.getNodeFlow().size());
//创建流程参数ExecutionEntity执行流程
ExecutionEntity entity = new ExecutionEntity();
@@ -77,17 +77,6 @@ public class FlowOperationServiceImpl implements IFlowOperationService {
return null;
}
@Override
public Boolean startFormFlow(StartProcessInstanceVo params) {
JSONObject formData = params.getFormData();
//查询当前部署的流程ACT_RE_PROCDEF
ActReProcdef deployment = actReProcdefService.getOne(new LambdaUpdateWrapper<ActReProcdef>().eq(ActReProcdef::getModel_key, params.getForm_type()));
if (deployment==null){
throw new BadRequestException("当前单据类型未配置业务流程");
}
return null;
}
@Override
public Boolean flowConfirm(String proc_inst_id,JSONObject auxParam) {

View File

@@ -23,6 +23,6 @@ public class FlowEventListener extends AbstraceListener<FlowStartEvent> {
protected String doEvent(FlowStartEvent event) {
String s = JSON.toJSONString(event.getDto());
log.info("触发流程"+ s);
return flowOperationService.startUp(event.getModel_key(), event.getCallback(), event.getDto());
return flowOperationService.startUp(event.getModel_key(), event.getCallback(), event.getDto(), event.getAuxParam());
}
}

View File

@@ -21,9 +21,13 @@ import java.util.function.Consumer;
public class FlowEndEvent extends PublishEvent {
//数据传输
private ExecutionDto dto;
//当前表单
private String form_type;
//当前表单id
private String form_id;
//流程实例
private String proc_inst_id;
//流程实例
private List<String> finish;
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.flow_manage.monitor.event;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.publish.event.PublishEvent;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
@@ -21,8 +22,14 @@ public class FlowStartEvent extends PublishEvent {
private String model_key;
public FlowStartEvent(String model_key, Consumer callback) {
/**
* 流程实例全局数据
*/
private JSONObject auxParam;
public FlowStartEvent(String model_key, Consumer callback,JSONObject auxParam) {
this.model_key = model_key;
this.auxParam = auxParam;
this.setCallback(callback);
}
@@ -30,7 +37,11 @@ public class FlowStartEvent extends PublishEvent {
return model_key;
}
public FlowStartEvent build(String form_type, String form_id,String source_form_type,String source_form_id, JSONObject data){
public JSONObject getAuxParam() {
return auxParam;
}
public FlowStartEvent build(String form_type, String form_id, String source_form_type, String source_form_id, JSONObject data){
if (dto == null){
dto = ExecutionDto.builder()
.form_id(form_id)
@@ -41,19 +52,19 @@ public class FlowStartEvent extends PublishEvent {
}
return this;
}
public FlowStartEvent build(String form_type, List<Map> datas){
public <Z> FlowStartEvent build(String form_type, List<Z> datas){
if (dto == null){
throw new BadRequestException("主数据参数未构建");
}
List<ExecutionDto> item =new ArrayList();
for (Map data : datas) {
String form_id = (String)data.get("form_id");
String source_form_id = (String)data.get("source_form_id");
String source_form_type = (String)data.get("source_form_type");
JSONObject data_json = (JSONObject)data.get("t");
for (Z z : datas) {
JSONObject data = (JSONObject)JSONObject.toJSON(z);
String form_id = (String)data.getString("form_id");
String source_form_id = (String)data.getString("source_form_id");
String source_form_type = (String)data.getString("source_form_type");
ExecutionDto build = ExecutionDto.builder()
.form_id(form_id)
.form_type(form_type).source_form_id(source_form_id).source_form_type(source_form_type).t(data_json).build();
.form_type(form_type).source_form_id(source_form_id).source_form_type(source_form_type).t(data).build();
item.add(build);
}
dto.setItem(item);

View File

@@ -74,7 +74,7 @@ public class StIvtIostorinvdtl implements Serializable {
/**
* 计划数量
*/
private BigDecimal plan_qty;
private BigDecimal qty;
/**
@@ -95,10 +95,6 @@ public class StIvtIostorinvdtl implements Serializable {
* 仓库
*/
private String stor_code;
/**
* 仓位编码
*/
private String struct_code;
/**
* 备注

View File

@@ -13,10 +13,7 @@ import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDtl;
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
import org.nl.wms.stor_manage.io.service.out.iostor.dao.mapper.StIvtIostorinvOutMapper;
@@ -135,7 +132,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
,"source_form_id",dtl.getSource_form_id()));
}
}
BussEventMulticaster.Publish(new FlowStartEvent("st_ivt_iostorinv_out", null)
BussEventMulticaster.Publish(new FlowStartEvent("st_ivt_iostorinv_out", null,null)
.build("st_ivt_iostorinv_out",iostorinv.getId(),iostorinv.getSource_form_type(),iostorinv.getSource_form_id(),form)
.build("st_ivt_iostorinvdtl_out",dtlJson)
,true);

View File

@@ -1,26 +1,15 @@
package org.nl.wms.stor_manage.io.service.out.iostor_dtl.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
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;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.mapper.StIvtIostorinvdtlOutMapper;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;

View File

@@ -2,6 +2,7 @@ package org.nl.wms.stor_manage.monitor.listener;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -10,14 +11,20 @@ import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.AbstraceListener;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
import org.nl.wms.flow_manage.flow.service.execution.IFlowOperationService;
import org.nl.wms.flow_manage.flow.service.history.IActHiExecutionService;
import org.nl.wms.flow_manage.flow.service.history.dao.ActHiExecution;
import org.nl.wms.flow_manage.monitor.event.FlowEndEvent;
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.stor_manage.io.service.in.iostor.IStIvtIostorinvInService;
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
/*
* @author ZZQ
@@ -28,28 +35,39 @@ import org.springframework.stereotype.Component;
public class FlowEndEventListener extends AbstraceListener<FlowEndEvent> {
@Autowired
private IStIvtIostorinvInService iStIvtIostorinvInService;
private IActHiExecutionService iActHiExecutionService;
@Autowired
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
private IPmFormDataService iPmFormDataService;
@Override
protected String doEvent(FlowEndEvent event) {
ExecutionDto dto = event.getDto();
String form_type = dto.getForm_type();
String form_id = dto.getForm_id();
if (StringUtils.isEmpty(form_type)){
//更新所有流程过程中的单据为完成
String proc_inst_id = event.getProc_inst_id();
List<String> finish = event.getFinish();
if (StringUtils.isEmpty(proc_inst_id)){
throw new BadRequestException("当前结束流程数据异常");
}
if (form_type.equals("st_ivt_iostorinv_in")){
iStIvtIostorinvInService.update(new UpdateWrapper<StIvtIostorinvIn>()
.set("status", StatusEnum.FORM_STATUS.code("完成"))
.set("update_time", DateUtil.now()).eq("id",form_id));
}
if (form_type.equals("st_ivt_iostorinv_out")){
iStIvtIostorinvOutService.update(new UpdateWrapper<StIvtIostorinvOut>()
.set("status", StatusEnum.FORM_STATUS.code("完成"))
.set("update_time", DateUtil.now()).eq("id",form_id));
if (!CollectionUtils.isEmpty(finish)){
//更新所有单据状态
List<ActHiExecution> historys = iActHiExecutionService.list(new QueryWrapper<ActHiExecution>()
.eq("proc_inst_id", proc_inst_id)
.in("form_type",finish)
.select("activity_id","update_time","form_type","form_id"));
for (ActHiExecution history : historys) {
StringBuffer sql = new StringBuffer();
sql.append("update ")
.append(history.getForm_type())
.append(" set status = ")
.append("'"+StatusEnum.FORM_STATUS.code("完成")+"'")
.append(" where id = ")
.append("'"+history.getForm_id()+"'");
iPmFormDataService.dynamicSql(sql.toString());
}
}
return "";
}
}

View File

@@ -28,25 +28,25 @@ public class StructEventListener extends AbstraceListener<StructEvent> {
@Override
protected String doEvent(StructEvent event) {
//根据不同的task_type获取对应出入库类型
String task_status = event.getTask_status();
String status = event.getStatus();
String task_type = event.getTask_type();
if (task_status.equals(StatusEnum.FORM_STATUS.code("生成"))){
if (status.equals(StatusEnum.FORM_STATUS.code("生成"))){
}
if (task_status.equals(StatusEnum.FORM_STATUS.code("执行中"))){
if (status.equals(StatusEnum.FORM_STATUS.code("执行中"))){
}
if (task_status.equals(StatusEnum.FORM_STATUS.code("完成"))){
if (status.equals(StatusEnum.FORM_STATUS.code("完成"))){
//更新出入库单明细状态如果单据类型是其他的则从from-data表中更新
Boolean in = StatusEnum.IOBILL_TYPE_IN.check(task_type);
structattrService.changeStruct(in?event.getPoint_code2():event.getPoint_code1(),in?event.getVehicle_code():null,task_type);
}
if (task_status.equals(StatusEnum.FORM_STATUS.code("取消"))){
if (status.equals(StatusEnum.FORM_STATUS.code("取消"))){
}
iostorinvdtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
.set("status",task_status).eq("id",event.getSource_form_id()));
.set("status",status).eq("id",event.getSource_form_id()));
return null;
}
}

View File

@@ -10,7 +10,7 @@
FROM
st_ivt_structattr struct
left join st_ivt_sectattr sect on sect.sect_id = struct.sect_code
left join st_ivt_bsrealstorattr stor on sect.stor_id = stor.stor_id
left join st_ivt_bsrealstorattr stor on sect.stor_id = stor.id
<where>
<if test="query.is_used == true">
and struct.is_used = '0'

View File

@@ -1,11 +1,7 @@
package org.nl.wms.stor_manage.struct.service.dto;
import lombok.Data;
import org.nl.common.domain.entity.BaseQuery;
import org.nl.common.domain.entity.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.md_manage.vehicleGroup.service.dao.MdPbVehicleMater;
import java.math.BigDecimal;

View File

@@ -12,11 +12,9 @@ import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.IdUtil;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.md_manage.vehicleGroup.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleGroup.service.dao.MdPbVehicleMater;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
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.dao.StIvtStructattr;

View File

@@ -11,6 +11,7 @@ import org.nl.common.anno.Log;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.wms.system_manage.service.dict.ISysDictService;
@@ -136,5 +137,18 @@ public class SysDictController {
}
return new ResponseEntity<>(items, HttpStatus.OK);
}
@GetMapping("/getTableEnum")
@Log("获取acs任务类型列表")
@SaIgnore
public ResponseEntity<Object> getTableEnum(@RequestParam Map criteria) {
Object type = criteria.get("code");
Object label = criteria.get("label");
Object value = criteria.get("value");
if (type == null||label == null||value == null){
throw new BadRequestException("参数不能为空");
}
List<Map> maps = dictService.dynamicTableEnum((String) type, (String) label, (String) value);
return new ResponseEntity<>(maps, HttpStatus.OK);
}
}

View File

@@ -78,4 +78,8 @@ public interface ISysDictService extends IService<Dict> {
* @param id
*/
void deleteDetail(String id);
/**
* 动态枚举信息
*/
List<Map> dynamicTableEnum(String table,String label,String value);
}

View File

@@ -1,8 +1,13 @@
package org.nl.wms.system_manage.service.dict.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.nl.wms.system_manage.service.dict.dao.Dict;
import java.util.List;
import java.util.Map;
/**
* <p>
* 字典表 Mapper 接口
@@ -13,4 +18,7 @@ import org.nl.wms.system_manage.service.dict.dao.Dict;
*/
public interface SysDictMapper extends BaseMapper<Dict> {
@Select( "select ${label} as label,${value} as value from ${table}")
List<Map> dynamicTableEnum(@Param("table") String table, @Param("label")String label, @Param("value")String value);
}

View File

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.utils.SecurityUtils;
@@ -183,4 +184,11 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, Dict> impleme
sysDictMapper.deleteById(id);
}
@Override
public List<Map> dynamicTableEnum(String table, String label, String value) {
if (StringUtils.isEmpty(table)||StringUtils.isEmpty(label)||StringUtils.isEmpty(value)){
throw new BadRequestException("参数不能为空");
}
return this.sysDictMapper.dynamicTableEnum(table,label,value);
}
}

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:localhost}:${DB_PORT:3307}/${DB_NAME:zjhs_wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:mysql://${DB_HOST:localhost}:${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}