Commit ad454f50 by 李小惠

Merge branch 'develop' of http://gitlab.sothing.top/843502640/jyzb_platformV2 into develop-lxh

parents b6f156f5 04e8434a
package com.junmp.jyzb.api.bean.Validator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = IsNumberValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsDateTime {
String message() default "日期格式不正确";
String format() default "yyyy-MM-dd"; // 默认日期格式
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package com.junmp.jyzb.api.bean.Validator;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class IsDateTimeValidator implements ConstraintValidator<IsDateTime, String> {
private String format;
@Override
public void initialize(IsDateTime constraintAnnotation) {
this.format = constraintAnnotation.format();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true; // 允许字段为空
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false); // 不允许宽松解析日期
try {
sdf.parse(value);
return true; // 字段是有效的日期或时间
} catch (ParseException e) {
return false; // 字段不是有效的日期或时间
}
}
}
package com.junmp.jyzb.api.bean.Validator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = IsNumberValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsNumber {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package com.junmp.jyzb.api.bean.Validator;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
public class IsNumberValidator implements ConstraintValidator<IsNumber, String> {
@Override
public void initialize(IsNumber constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true; // 允许字段为空
}
try {
Double.parseDouble(value);
return true; // 字段是数字
} catch (NumberFormatException e) {
return false; // 字段不是数字
}
}
}
package com.junmp.jyzb.api.bean.req;
import com.junmp.jyzb.api.bean.Validator.IsNumber;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -25,7 +26,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
/**
* 工作流ID
*/
private String processId;
private String processDefinitionId;
/**
* 单据业务类型
*/
......@@ -37,6 +38,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
/**
* 发物单位
*/
@IsNumber(message = "startOrgId必须是数字",groups = {add.class})
private String startOrgId;
/**
* 发物单位名称
......@@ -45,7 +47,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
/**
* 收物单位
*/
private String endOrgId;
private Long endOrgId;
/**
* 收物单位名称
*/
......@@ -53,6 +55,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
/**
* 发物单位负责人id
*/
@IsNumber(message = "startOrgUserId必须是数字",groups = {add.class})
private String startOrgUserId;
/**
* 发物单位负责人姓名
......@@ -61,6 +64,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
/**
* 收物单位负责人id
*/
@IsNumber(message = "endOrgUserId必须是数字",groups = {add.class})
private String endOrgUserId;
/**
* 收物单位负责人姓名
......
......@@ -118,5 +118,9 @@
<groupId>com.junmp.v2</groupId>
<artifactId>dict-biz</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-process</artifactId>
</dependency>
</dependencies>
</project>
......@@ -38,13 +38,14 @@ public class OrderController {
//通过工作流进行操作处理的
@PostMapping("/AddOrder")
@ApiOperation("新增任务单")
public ApiRes<List<String>> addOrder(@RequestBody UpdateOrderReq req) {
public ApiRes<List<String>> addOrder(@RequestBody @Validated(ValidationApi.add.class) UpdateOrderReq req) {
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessId()))
if (ObjectUtil.isEmpty(req.getProcessDefinitionId()))
{
req.setExamineState("none");
}
else
else//有工作流
{
req.setExamineState("working");
}
......@@ -57,7 +58,7 @@ public class OrderController {
//内部处理,任务单状态直接设置成finished 添加到数据并且直接推送到消息队列中去
@PostMapping("/AddFinishOrder")
@ApiOperation("新增已完成的任务单")
public ApiRes<String> AddFinishOrder(@RequestBody UpdateOrderReq req) {
public ApiRes<String> AddFinishOrder(@RequestBody UpdateOrderReq req) {
req.setExamineState("finished");
return ApiRes.success(orderMainService.AddFinishOrder(req));
}
......
......@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.service.Bussiness.impl.WorkProcessServiceImpl;
import com.junmp.jyzb.api.bean.dto.OrderDetailDto;
import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.dto.OrderMainDto;
......@@ -19,6 +21,8 @@ import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.mapper.OrderMainMapper;
import com.junmp.jyzb.service.*;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
......@@ -26,10 +30,14 @@ import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import org.flowable.engine.TaskService;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -67,7 +75,8 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
@Resource
private OrderLogService orderLogService;
@Resource
private WorkProcessServiceImpl WorkProcessService;
//新增任务单
......@@ -102,6 +111,13 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
detail.setCreateTime(DateTimeUtil.getCurrentDateTime());
detailList.add(detail);
}
//执行工作流
if (req.getExamineState().equals("working"))
{
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
WorkProcessService.start(startProcessInstanceDTO);
}
orderDetailService.saveBatch(detailList);
//设置总价格和总数量
order.setPrice(priceTotal);
......@@ -185,20 +201,20 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
String exchangeName="orderExchange";
//需要判断是入库单还是出库单,入库单传收物单位id,出库单传发物单位id
if(req.getOrderType().equals("in")){
Queue queue=new Queue(req.getEndOrgId(),true,false,false);
Queue queue=new Queue( req.getEndOrgId().toString(),true,false,false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getEndOrgId()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getEndOrgId(), req);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getEndOrgId().toString()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getEndOrgId().toString(), req);
}else {
Queue queue = new Queue(req.getStartOrgId(), true, false, false);
Queue queue = new Queue(req.getStartOrgId().toString(), true, false, false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getStartOrgId()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getStartOrgId(), req);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getStartOrgId().toString()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getStartOrgId().toString(), req);
}
return orderId;
}
......
......@@ -242,17 +242,10 @@
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-biz</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-biz</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-biz</artifactId>
<artifactId>jyzb-api</artifactId>
</dependency>
</dependencies>
<build>
......
package com.junmp.junmpProcess.common.utils;
/**
* 返回状态码
*
* @author ruoyi
*/
public class HttpStatus
{
/**
* 操作成功
*/
public static final int SUCCESS = 99200;
/**
* 操作失败
*/
public static final int ERROR = 99500;
/**
* 没有操作权限
*/
public static final int NO_PERMISSION = 100001;
/**
* 没有该账户信息
*/
public static final int No_INFORMATION = 100002;
/**
* 找不到页面
*/
public static final int PAGE_NOTFOUND = 100003;
/**
* 流程启动失败
*/
public static final int PROCESS_START_ERROR = 100004;
/**
* 流程已经结束
*/
public static final int PROCESS_WAS_END = 100005;
/**
*没有运行时的任务实例,请确认!
*/
public static final int NO_SUCH_PROCESS = 100006;
/**
*流程已挂起,请确认!
*/
public static final int PROCESS_ISSUSPEND = 100007;
/**
* 请求数据超时
*/
public static final int TIMEOUT = 19996;
/**
* 请求数据不合法
*/
public static final int DATA_ILLEGAL = 19997;
/**
* 操作频率过快
*/
public static final int FREQUENCY_FAST = 19998;
/**
* 操作失败
*/
public static final int OPERATION_FAILED = 19999;
/**
* 非常抱歉,服务器平台正在定期维护,预计两小时后恢复
*/
public static final int SERVER_MAINTENANCE = 49997;
/**
* 数据不存在
*/
public static final int NO_DATA = 49998;
/**
* 数据异常
*/
public static final int NOT_FOUND = 49999;
/**
* 服务器异常
*/
public static final int SERVER_ERROR = 50000;
}
package com.junmp.junmpProcess.common.utils;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.time.Instant;
/**
* 定义统一的返回类
* */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseResult<T> {
/**
* 状态码
*/
private Integer code;
/**
* 提示信息,如果有错误时,前端可以获取该字段进行提示
*/
private String message;
/**
* 查询到的结果数据,
*/
private T data;
/**
* 时间戳
*/
private long timestamp;
public ResponseResult(Integer code, String message) {
this.code = code;
this.message = message;
this.timestamp = generateTimestamp();
}
public ResponseResult(Integer code, T data) {
this.code = code;
this.data = data;
this.timestamp = generateTimestamp();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMsg(String msg) {
this.message = msg;
}
public T getData() {
return data;
}
public void setMessage(String message) {
this.message = message;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public void setData(T data) {
this.data = data;
}
public ResponseResult(Integer code, String msg, T data) {
this.code = code;
this.message = msg;
this.data = data;
this.timestamp = generateTimestamp();
}
//生成时间戳函数
private long generateTimestamp() {
return Instant.now().toEpochMilli();
}
}
package com.junmp.junmpProcess.common.utils;
/**
* 返回信息
*
* @author ruoyi
*/
public class ReturnMsg {
/**
* 操作成功
*/
public static final String PASS = "操作成功";
/**
* 操作成功
*/
public static final String NO_SUCH_PROCESS = "没有运行时的任务实例";
/**
* 流程已挂起
*/
public static final String PROCESS_ISSUSPEND = "流程已挂起";
/**
* 操作失败
*/
public static final String ERROR = "操作失败";
/**
* 操作失败
*/
public static final String PROCESS_WAS_END = "当前任务已经结束";
/**
* 未查询到相关数据
*/
public static final String NO_DATA = "未查询到相关数据";
/**
* 未查询到相关数据
*/
public static final String PROCESS_START_ERROR = "启动流程失败";
/**
* 请求数据不合法
*/
public static final String DATA_ILLEGAL = "请求数据不合法";
}
\ No newline at end of file
package com.junmp.junmpProcess.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.junmp.junmpProcess.common.utils.HttpStatus;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.junmpProcess.vo.*;
import com.junmp.jyzb.api.bean.query.ProcessReq.FormReq;
import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq;
import com.junmp.jyzb.utils.HttpStatus;
import com.junmp.jyzb.utils.ResponseResult;
import com.junmp.jyzb.utils.ReturnMsg;
import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
......
......@@ -16,6 +16,4 @@ import java.util.Map;
public class StartProcessInstanceDTO {
private String processDefinitionId;
private JSONObject formData;
private Map<String, List<JunmpUserInfo>> processUsers;
private JunmpUserInfo startUserInfo;
}
......@@ -7,7 +7,6 @@ import com.junmp.junmpProcess.utils.RabbitMQUtils2;
//import com.rabbitmq.client.Channel;
//import com.rabbitmq.client.Connection;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.service.OrderMainService;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
......@@ -29,8 +28,7 @@ import java.util.Map;
@Component
public class GlobalEndListener extends AbstractFlowableEngineEventListener {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
public OrderMainService orderMainService;
@SneakyThrows
@Override
protected void processCompleted(FlowableEngineEntityEvent event) {
......@@ -52,8 +50,8 @@ import java.util.Map;
String orderReq = (String) processVariables.get("orderReq");
// 根据单据类型执行不同的操作
if ("equipment".equals(documentType)) {
// 执行装备相关操作
orderMainService.AddOrder(updateOrderReq);
// 执行装备相关操作,防止循环应用,丢入消息队列
// orderMainService.AddOrder(updateOrderReq);
} else if ("personnel".equals(documentType)) {
// 执行人员相关操作
// ...
......
......@@ -2,12 +2,13 @@ package com.junmp.junmpProcess.service.Bussiness;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.junmp.junmpProcess.common.Result;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.vo.*;
import com.junmp.jyzb.api.bean.query.ProcessReq.FormReq;
import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq;
import com.junmp.jyzb.utils.ResponseResult;
import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
......
......@@ -16,6 +16,9 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.junmp.junmpProcess.cmd.DeleteFlowableProcessInstanceCmd;
import com.junmp.junmpProcess.common.utils.HttpStatus;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.entity.ProcessTemplates;
......@@ -29,9 +32,7 @@ import com.junmp.junmpProcess.utils.SpringContextHolder;
import com.junmp.junmpProcess.vo.*;
import com.junmp.jyzb.api.bean.query.ProcessReq.FormReq;
import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq;
import com.junmp.jyzb.utils.HttpStatus;
import com.junmp.jyzb.utils.ResponseResult;
import com.junmp.jyzb.utils.ReturnMsg;
import com.junmp.v2.auth.api.LoginUserApi;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
......@@ -434,7 +435,7 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
}
processTemplates.setProcessDefinitionId(processDefinition.getId());
return new ResponseResult(HttpStatus.SUCCESS,ReturnMsg.PASS,processTemplates);
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,processTemplates);
}
/**
......@@ -661,22 +662,25 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
@Override
public ApiRes<Boolean> start(StartProcessInstanceDTO processInstanceDto) {
try {
LoginUserApi user= LoginContext.getContext();
LoginUser StartUser=new LoginUser();
long use=1000;
StartUser.setUserId(use);
LoginUser StartUser= LoginContext.getContext().getLoginUser();
// LoginUser StartUser= LoginContext.getContext().getLoginUser();
JSONObject formData = processInstanceDto.getFormData();
// JunmpUserInfo startUserInfo = processInstanceDto.getStartUserInfo();
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
Map<String,Object> processVariables= new HashMap<>();
processVariables.put(FORM_VAR,formData);
processVariables.put(START_USER_INFO,JSONObject.toJSONString(StartUser));
processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1);
// processVariables.put("initiator",JSONObject.toJSONString(startUserInfo));
ArrayList<LoginUser> userInfos = CollUtil.newArrayList(StartUser);
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
if (formData!=null)
{
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
processVariables.putAll(formValue);
processVariables.putAll(formValue);
}
ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processInstanceDto.getProcessDefinitionId())
.latestVersion().singleResult();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论