Commit bc8d536a authored by suhuiguang's avatar suhuiguang

feat(检验检测):计划排期

1.报检受理后增加排期流程
parent 3eda888c
......@@ -70,7 +70,8 @@ public enum BusinessTypeEnum {
JG_NEW_PROJECT("123", "新增装置"),
JG_EQUIP_CLAIM("124", "设备认领");
JG_EQUIP_CLAIM("124", "设备认领"),
INSPECTION_PLAN("125", "计划排期");
private final String code;
......
......@@ -88,8 +88,14 @@ public enum WorkFlowStatusEnum {
OPENING_APPLICATION_SUBMIT("开通申请提交", "openingApplicationSubmit", "开通申请待提交", "资料校对受理已退回", "申请单位已撤回"),
OPENING_APPLICATION_RECEIVE("资料校对", "openingApplicationReceive", "资料校对待受理", "系统对接受理已退回", "资料校对受理已撤回"),
OPENING_APPLICATION_PRELIMINARY("系统对接", "openingApplicationPreliminary", "系统对接中", "业务开通确认已退回", "系统对接受理已撤回"),
OPENING_APPLICATION_REEXAMINE("业务开通确认", "openingApplicationReexamine", "业务开通确认待受理", "", "");
OPENING_APPLICATION_REEXAMINE("业务开通确认", "openingApplicationReexamine", "业务开通确认待受理", "", ""),
/**
* 维保备案
*/
INSPECTION_PLAN_SUBMIT("受理单位提交", "mainSubmit", "", "", ""),
INSPECTION_PLAN_ASSIGN_USER("分配业务负责人", "assignUser", "分配业务负责人", "排期人员已驳回", "分配业务负责人已撤回"),
INSPECTION_PLAN_INSPECT_CONFIRM("检验确认", "inspectConfirm", "检验确认", "", "");
private final String name;
......
package com.yeejoin.amos.boot.module.jyjc.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 业务工作流关系表
*
* @author system_generator
* @date 2026-04-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "JyjcCmTaskDto", description = "业务工作流关系表")
public class JyjcCmTaskDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "工作流实例ID")
private String instanceId;
@ApiModelProperty(value = "备注(无用预留)")
private String remark;
@ApiModelProperty(value = "检验结果方式")
private String resultType;
@ApiModelProperty(value = "发起人id用于撤回操作")
private String promoter;
@ApiModelProperty(value = "创建人")
private String createUserId;
@ApiModelProperty(value = "工作流下一节点任务id")
private String nextTaskId;
@ApiModelProperty(value = "下一节点执行人userIds")
private String nextExecuteUserIds;
@ApiModelProperty(value = "业务表示")
private String sSeq;
@ApiModelProperty(value = "业务类型")
private String sType;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "流程key")
private String processKey;
@ApiModelProperty(value = "任务code")
private String nextTaskCode;
@ApiModelProperty(value = "业务数据")
private String formData;
}
package com.yeejoin.amos.boot.module.jyjc.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
/**
* 业务工作流关系表
*
* @author system_generator
* @date 2026-04-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_jyjc_cm_task")
public class JyjcCmTask extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 工作流实例ID
*/
@TableField("instance_id")
private String instanceId;
/**
* 备注(无用预留)
*/
@TableField("remark")
private String remark;
/**
* 检验结果方式
*/
@TableField("result_type")
private String resultType;
/**
* 发起人id用于撤回操作
*/
@TableField("promoter")
private String promoter;
/**
* 创建人
*/
@TableField("create_user_id")
private String createUserId;
/**
* 工作流下一节点任务id
*/
@TableField("next_task_id")
private String nextTaskId;
/**
* 下一节点执行人userIds
*/
@TableField("next_execute_user_ids")
private String nextExecuteUserIds;
/**
* 业务表示
*/
@TableField("s_seq")
private String sSeq;
/**
* 业务类型
*/
@TableField("s_type")
private String sType;
/**
* 状态
*/
@TableField("status")
private String status;
/**
* 流程key
*/
@TableField("process_key")
private String processKey;
/**
* 任务code
*/
@TableField("next_task_code")
private String nextTaskCode;
/**
* 业务数据
*/
@TableField("form_data")
private String formData;
}
package com.yeejoin.amos.boot.module.jyjc.api.mapper;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcCmTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 业务工作流关系表 Mapper 接口
*
* @author system_generator
* @date 2026-04-03
*/
public interface JyjcCmTaskMapper extends BaseMapper<JyjcCmTask> {
}
......@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.jyjc.api.model;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
......@@ -14,10 +15,22 @@ import java.util.Map;
*/
@Data
public class InspectionPlanModel implements Serializable {
/**
* 业务负责人
*/
private String inspectionChargePerson;
/**
* 备注
*/
private String remark2;
/**
* 计划检验检测日期
*/
LocalDate planInspectionDate;
List<String> planInspectionDate;
/**
* 检验检测地点
......@@ -38,4 +51,19 @@ public class InspectionPlanModel implements Serializable {
* 人员类型
*/
private String personType;
/**
* 工作流id
*/
private String processInstanceId;
/**
* 任务id
*/
private String taskId;
/**
* 最近执行人
*/
private String promoter;
}
package com.yeejoin.amos.boot.module.jyjc.api.service;
/**
* 业务工作流关系表接口类
*
* @author system_generator
* @date 2026-04-03
*/
public interface IJyjcCmWorkflowService {}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcCmTaskMapper">
</mapper>
package com.yeejoin.amos.boot.module.jyjc.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionPlanModel;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.InspectionPlanServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.component.event.RestEventTrigger;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
......@@ -22,13 +23,45 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
@RequestMapping(value = "/inspection/plan")
@Api(tags = "计划排期")
@RequiredArgsConstructor
public class InspectionPlanController {
public class InspectionPlanController extends BaseController {
private final InspectionPlanServiceImpl inspectionPlanService;
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{applicationSeq}/workBenchDetail")
@ApiOperation(httpMethod = "GET", value = "计划排期详情及单据信息-工作台", notes = "计划排期详情及单据信息-工作台")
public ResponseModel<JSONObject> getWorkBenchDetail(@PathVariable String applicationSeq) {
return ResponseHelper.buildResponse(inspectionPlanService.getWorkBenchDetail(applicationSeq));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/flowExecute")
@ApiOperation(httpMethod = "POST", value = "计划排期执行流程", notes = "计划排期执行流程")
@RestEventTrigger(value = "operateLogRestEventHandler")
public ResponseModel<Object> flowExecute(@RequestBody JSONObject map) {
inspectionPlanService.flowExecute(Long.valueOf(String.valueOf(map.get("applicationSeq"))),
String.valueOf(map.get("instanceId")),
String.valueOf(map.get("operate")),
String.valueOf(map.get("comment")),
String.valueOf(map.get("nextTaskId")), map, getSelectedOrgInfo());
return ResponseHelper.buildResponse("ok");
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/withdraw")
@ApiOperation(httpMethod = "POST", value = "计划排期撤回", notes = "撤回")
@RestEventTrigger(value = "operateLogRestEventHandler")
public ResponseModel<Boolean> withdraw(@RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam("instanceId") String instanceId,
@RequestParam("nextTaskId") String nextTaskId) {
return ResponseHelper.buildResponse(inspectionPlanService.withdraw(instanceId, nextTaskId, sequenceNbr));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/{applicationSeq}/save")
@ApiOperation(httpMethod = "GET", value = "计划排期保存", notes = "计划排期保存")
@ApiOperation(httpMethod = "GET", value = "计划排期编辑-列表二次维护使用", notes = "计划排期编辑")
public ResponseModel<InspectionPlanModel> savePlanData(@PathVariable String applicationSeq,
@RequestBody InspectionPlanModel model) {
return ResponseHelper.buildResponse(inspectionPlanService.savePlanData(applicationSeq, model));
......@@ -36,8 +69,8 @@ public class InspectionPlanController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{applicationSeq}/detail")
@ApiOperation(httpMethod = "GET", value = "计划排期详情", notes = "计划排期详情")
public ResponseModel<JSONObject> savePlanData(@PathVariable String applicationSeq) {
@ApiOperation(httpMethod = "GET", value = "计划排期详情-列表二次维护使用", notes = "计划排期详情")
public ResponseModel<JSONObject> planDataDetail(@PathVariable String applicationSeq) {
return ResponseHelper.buildResponse(inspectionPlanService.getDetail(applicationSeq));
}
......
......@@ -195,7 +195,7 @@ public class JyjcInspectionApplicationController extends BaseController {
@RestEventTrigger(value = "operateLogRestEventHandler")
public ResponseModel<?> executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) {
params.put("type", type);
jyjcInspectionApplicationServiceImpl.doReceive(params);
jyjcInspectionApplicationServiceImpl.doReceive(params, getSelectedOrgInfo());
HashMap<String, String> result = new HashMap<>();
result.put("result", "success");
return ResponseHelper.buildResponse(result);
......
......@@ -23,4 +23,6 @@ public interface ICmWorkflowService {
ProcessTaskDTO rejectSpecifiedNode(String taskId, TaskResultDTO data);
ProcessTaskDTO completeOrReject(String taskId, TaskResultDTO data, String operate);
}
......@@ -300,7 +300,7 @@ public class TaskModelServiceImpl {
obj.remove("detectionRegion");
obj.remove("expiryDate");
obj.remove("applyTime");
obj.remove("expiryDate");
obj.remove("formData");
}
private static String toQueryParams2(JSONObject jsonObject) {
......
......@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yeejoin.amos.boot.module.jyjc.biz.config.LocalBadRequest;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.WorkflowFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.service.ICmWorkflowService;
......@@ -14,8 +15,11 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.exception.BaseException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
......@@ -24,6 +28,16 @@ import java.util.List;
@Slf4j
public class CmWorkflowServiceImpl implements ICmWorkflowService {
/**
* 通过
*/
public static String PASS_OPERATE = "0";
/**
* 驳回
*/
public static String REJECT_OPERATE = "1";
@Autowired
private WorkflowFeignClient workflowFeignClient;
......@@ -47,6 +61,86 @@ public class CmWorkflowServiceImpl implements ICmWorkflowService {
}
@Override
public ProcessTaskDTO completeOrReject(String taskId, TaskResultDTO data, String operate) {
ProcessTaskDTO processTaskDTO;
try {
if(PASS_OPERATE.equals(operate)){
// 通过操作
log.info("开始请求工作流-完成任务-接口:/complete/standard/{taskId},请求参数:{},{},{}", taskId, operate, JSONObject.toJSONString(data));
processTaskDTO = workflowFeignClient.completeByTaskFroStandard(taskId, data).getResult();
} else if(REJECT_OPERATE.equals(operate)) {
// 驳回操作
log.info("开始请求工作流-驳回任务-接口:/reject/{taskId},请求参数:{},{},{}", taskId, operate, JSONObject.toJSONString(data));
processTaskDTO = workflowFeignClient.reject(taskId, data).getResult();
} else {
// 执行普通节点(提交)
log.info("开始请求工作流完成任务接口:/complete/standard/{taskId},请求参数:{},{},{}", taskId, operate, JSONObject.toJSONString(data));
processTaskDTO = workflowFeignClient.completeByTaskFroStandard(taskId, data).getResult();
}
log.info("请求工作流接口completeOrReject结束,返回结果:{}", JSONObject.toJSONString(processTaskDTO));
} catch (InnerInvokException e) {
//拦截无审核人异常信息
String devMessage = getErrorMessage(e);
log.error(devMessage);
throw new LocalBadRequest(devMessage);
} catch (Exception e) {
log.error("调用工作流完成任务接口失败", e);
String responseBody = extractFeignResponseBody(e);
String devMessage = extractDevMessageFromJson(responseBody);
throw new RuntimeException( devMessage != null ? devMessage : "流程处理失败", e);
}
return processTaskDTO;
}
private String extractDevMessageFromJson(String jsonStr) {
if (jsonStr == null || jsonStr.trim().isEmpty()) return null;
try {
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> json = mapper.readValue(jsonStr, Map.class);
Object devMessage = json.get("devMessage");
Object message = json.get("message");
if (devMessage != null && !String.valueOf(devMessage).trim().isEmpty()) {
return String.valueOf(devMessage);
} else if (message != null) {
return String.valueOf(message);
}
} catch (Exception ex) {
log.warn("解析响应JSON出错: {}", jsonStr, ex);
}
return null;
}
private String getErrorMessage(BaseException e){
String devMessage = e.getDevMessage();
if(devMessage.contains(";")){
String tempMsg = devMessage.split(";")[0];
if(tempMsg.contains(":")){
devMessage = tempMsg.split(":")[1];
} else {
devMessage = tempMsg;
}
}
return devMessage;
}
private String extractFeignResponseBody(Exception e) {
if (e instanceof feign.FeignException) {
feign.FeignException fe = (feign.FeignException) e;
try {
return new String(fe.content(), StandardCharsets.UTF_8);
} catch (Exception ex) {
log.warn("读取Feign响应体失败", ex);
}
}
return e.getMessage();
}
@Override
public ProcessTaskDTO complete(String taskId, TaskResultDTO data) {
ProcessTaskDTO processTaskDTO;
try {
......
......@@ -23,6 +23,7 @@ import com.yeejoin.amos.boot.module.jyjc.api.enums.PersonTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionResultModel;
import com.yeejoin.amos.boot.module.jyjc.api.model.WorkflowResultDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
......@@ -33,6 +34,8 @@ import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.workflow.model.ActTaskDTO;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RBucket;
......@@ -40,6 +43,8 @@ import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
......@@ -140,6 +145,51 @@ public class CommonServiceImpl {
}
/**
* 根据工作流返回信息,组装业务需要的数据
*
* @param processTaskDTOS 工作流返回信息
* @return 组装后的信息
*/
public List<WorkflowResultDto> buildWorkFlowInfo(List<ProcessTaskDTO> processTaskDTOS) {
List<WorkflowResultDto> workflowResultDtoList = new ArrayList<>();
processTaskDTOS.forEach(item -> {
WorkflowResultDto workflowResultDto = new WorkflowResultDto();
if (!ObjectUtils.isEmpty(item.getProcessInstance())) {
workflowResultDto.setInstanceId(item.getProcessInstance().getId());
}
if (!ObjectUtils.isEmpty(item.getTask())) {
workflowResultDto.setTaskName(item.getTask().getName());
}
if (!ObjectUtils.isEmpty(item.getCandidateGroups())) {
workflowResultDto.setExecutorRoleIds(String.join(",", item.getCandidateGroups()));
}
if (!ObjectUtils.isEmpty(item.getStartUser())) {
workflowResultDto.setStartUserId(item.getStartUser().getUserId());
workflowResultDto.setStartUserName(item.getStartUser().getRealName());
}
if (!ObjectUtils.isEmpty(item.getExecutor())) {
workflowResultDto.setExecutorId(item.getExecutor().getUserId());
workflowResultDto.setExecutorName(item.getExecutor().getRealName());
}
if (!CollectionUtils.isEmpty(item.getNextTask())) {
ActTaskDTO actTaskDTO = item.getNextTask().get(item.getNextTask().size() - 1);
workflowResultDto.setNextTaskId(actTaskDTO.getId());
workflowResultDto.setNextTaskCode(actTaskDTO.getKey());
workflowResultDto.setNextTaskName(actTaskDTO.getName());
List<String> nextGroups = item.getNextCandidateGroups().get(actTaskDTO.getId());
String join = String.join(",", nextGroups);
workflowResultDto.setNextExecutorRoleIds(join);
List<String> nextUserIds = item.getNextTaskExecutor().get(actTaskDTO.getId()).stream().map(AgencyUserModel::getUserId).collect(Collectors.toList());
String nextUserIdsString = String.join(",", nextUserIds);
workflowResultDto.setNextExecutorUserIds(nextUserIdsString);
}
workflowResultDtoList.add(workflowResultDto);
});
return workflowResultDtoList;
}
public void castPersonType2Post(LambdaQueryWrapper<TzsUserInfo> userInfoQueryWrapper, String personType) {
if (personType.contains(PersonTypeEnum.jc.name()) && personType.contains(PersonTypeEnum.jy.name()) && personType.contains(PersonTypeEnum.charge.name())) {
......
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcCmTask;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationEquip;
import com.yeejoin.amos.boot.module.jyjc.api.model.*;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectContraption;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgProjectContraptionMapper;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Administrator
*/
@Service
@Slf4j
public class InspectionPlanCommonServiceImpl {
@Autowired
private TaskModelServiceImpl taskModelService;
@Autowired
private DataDictionaryServiceImpl dataDictionaryService;
private final static String msgTpl = "%s申请单号:%s,进行%s";
void createdTaskModel(JyjcCmTask model, ReginParams reginParams, JyjcInspectionApplication application) {
TaskModelDto dto = new TaskModelDto();
TaskMessageDto ta = new TaskMessageDto();
ta.setInstanceId(model.getInstanceId());
ta.setStatus(model.getStatus());
ta.setPromoter(model.getPromoter());
ta.setSequenceNbr(model.getSequenceNbr());
ta.setProcessInstanceId(model.getInstanceId());
ta.setProcessKey(model.getProcessKey());
ta.setNextTaskId(model.getNextTaskId());
ta.setBizType(model.getSType());
dto.setModel(ta);
dto.setFlowCreateDate(new Date());
dto.setTaskName(model.getStatus());
dto.setFlowCode(model.getNextTaskId());
dto.setTaskContent(this.buildTaskContent(model.getNextTaskCode(), application));
dto.setTaskCode(model.getNextTaskCode());
dto.setTaskType(BusinessTypeEnum.INSPECTION_PLAN.getCode());
dto.setTaskTypeLabel(BusinessTypeEnum.INSPECTION_PLAN.getName());
dto.setRelationId(model.getInstanceId());
dto.setExecuteUserIds(model.getNextExecuteUserIds());
dto.setTaskStatusLabel("未处理");
dto.setFlowStatus(Integer.valueOf(model.getStatus()));
dto.setFlowStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName());
dto.setStartUserId(RequestContext.getExeUserId());
dto.setStartUser(reginParams.getUserModel().getRealName());
dto.setStartUserCompanyName(reginParams.getCompany().getCompanyName());
dto.setStartDate(new Date());
dto.setNextExecuteUser(model.getNextExecuteUserIds());
dto.setPageType("edit");
taskModelService.buildTaskModel(Collections.singletonList(dto));
}
private String buildTaskContent(String taskCode, JyjcInspectionApplication application) {
if (taskCode.equals(WorkFlowStatusEnum.INSPECTION_PLAN_ASSIGN_USER.getCode())) {
return String.format(msgTpl, getDictNameByCode(application.getInspectionType(), "JYJC"), application.getApplicationNo(), WorkFlowStatusEnum.INSPECTION_PLAN_ASSIGN_USER.getPass());
} else if (taskCode.equals(WorkFlowStatusEnum.INSPECTION_PLAN_INSPECT_CONFIRM.getCode())) {
return String.format(msgTpl, getDictNameByCode(application.getInspectionType(), "JYJC"), application.getApplicationNo(), WorkFlowStatusEnum.INSPECTION_PLAN_INSPECT_CONFIRM.getPass());
}
log.error("非法的任务类型:{}", taskCode);
return "";
}
private String getDictNameByCode(String code, String dictType) {
DataDictionary dataDictionary = dataDictionaryService.getByCode(code, dictType);
return dataDictionary != null ? dataDictionary.getName() : "";
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.jyjc.api.dto.JyjcCmTaskDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcCmTask;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcCmTaskMapper;
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcCmWorkflowService;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
/**
* 业务工作流关系表服务实现类
*
* @author system_generator
* @date 2026-04-03
*/
@Service
public class JyjcCmTaskServiceImpl extends BaseService<JyjcCmTaskDto, JyjcCmTask, JyjcCmTaskMapper> implements IJyjcCmWorkflowService {
public JyjcCmTask getOneBySSeq(String seq){
LambdaQueryWrapper<JyjcCmTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(JyjcCmTask::getSSeq, seq);
return this.getOne(queryWrapper);
}
}
\ No newline at end of file
......@@ -144,6 +144,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired
private EquipTechParamBoilerMapper equipTechParamBoilerMapper;
@Autowired
private WorkBenchTaskCreateServiceImpl workBenchTaskCreateService;
/**
* 分页查询
*/
......@@ -768,6 +771,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
* 接收
*
* @param params params
* @param selectedOrgInfo
* @return {@link }
* @throws
* @author yangyang
......@@ -775,7 +779,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public void doReceive(Map<String, Object> params) {
public void doReceive(Map<String, Object> params, ReginParams reginParams) {
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
......@@ -956,6 +960,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Override
public void afterCommit() {
docUpdateService.genDocAndUpdate(model.getSequenceNbr() + "");
try {
workBenchTaskCreateService.createOneTask(jyjcInspectionApplication, reginParams);
} catch (Exception e) {
log.error("报检受理后,创建计划排期失败,单据信息:{},错误信息:{}",jyjcInspectionApplication.getApplicationNo(), e.getMessage());
}
}
});
} catch (InterruptedException e) {
......
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcCmTask;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jyjc.api.model.TaskMessageDto;
import com.yeejoin.amos.boot.module.jyjc.api.model.TaskModelDto;
import com.yeejoin.amos.boot.module.jyjc.api.model.WorkflowResultDto;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.util.*;
@Service
@RequiredArgsConstructor
public class WorkBenchTaskCreateServiceImpl extends InspectionPlanCommonServiceImpl {
private final CmWorkflowServiceImpl cmWorkflowService;
private final TaskModelServiceImpl taskModelService;
private final JyjcCmTaskServiceImpl cmTaskService;
private final CommonServiceImpl commonService;
@Value("${inspect.plan.process.key:dddd}")
private String processKey;
public void createOneTask(JyjcInspectionApplication application, ReginParams reginParams) {
// 启动流程
List<WorkflowResultDto> workflowResultDtos = startProcess(application);
// 保存数据
JyjcCmTask cmTask = saveJyjcCmTask(application, workflowResultDtos);
// 创建待办
createdTaskModel(cmTask, reginParams, application);
// 缓存执行节点信息
commonService.saveExecuteFlowData2Redis(cmTask.getInstanceId(), this.buildInstanceRuntimeData(cmTask));
}
private List<WorkflowResultDto> startProcess(JyjcInspectionApplication application) {
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
List<ActWorkflowStartDTO> list = new ArrayList<>();
ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
dto.setProcessDefinitionKey(processKey);
dto.setBusinessKey(String.valueOf(new Date().getTime()));
dto.setCompleteFirstTask(true);
HashMap<String, Object> variables = new HashMap<>();
// 指定下一节点执行人,谁受理谁执行
variables.put("nextAssignee", RequestContext.getExeUserId());
dto.setVariables(variables);
list.add(dto);
actWorkflowBatchDTO.setProcess(list);
dto.setNextExecuteUserCompanyCode(application.getInspectionUnitCode());
List<ProcessTaskDTO> processTasks = cmWorkflowService.startBatch(actWorkflowBatchDTO);
return taskModelService.buildWorkFlowInfo(processTasks);
}
@NotNull
private JyjcCmTask saveJyjcCmTask(JyjcInspectionApplication application, List<WorkflowResultDto> workflowResultDtos) {
JyjcCmTask cmTask = new JyjcCmTask();
cmTask.setPromoter("");
cmTask.setNextTaskId(workflowResultDtos.get(0).getNextTaskId());
cmTask.setNextTaskCode(workflowResultDtos.get(0).getNextTaskCode());
cmTask.setNextExecuteUserIds(workflowResultDtos.get(0).getNextExecutorUserIds());
cmTask.setInstanceId(workflowResultDtos.get(0).getInstanceId());
cmTask.setProcessKey(processKey);
cmTask.setSSeq(application.getSequenceNbr().toString());
cmTask.setSType(application.getBizType());
cmTask.setStatus(WorkFlowStatusEnum.INSPECTION_PLAN_ASSIGN_USER.getPass());
cmTaskService.save(cmTask);
return cmTask;
}
private InstanceRuntimeData buildInstanceRuntimeData(JyjcCmTask cmTask) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(cmTask.getNextExecuteUserIds())
.promoter(cmTask.getPromoter())
.nextTaskId(cmTask.getNextTaskId()).build();
}
}
......@@ -73,5 +73,11 @@
"type": "114",
"pageType": "edit",
"url": "/mixuap?appId=1742358052905971713&id=1735201757841092609&roleIds={roleIds}&userId={userId}&pageType=edit"
},
{
"type": "125",
"pageType": "edit",
"typeName": "计划排期",
"url": "/mixuap?appId=1742358052905971713&id=2039590365681446914&userId={userId}&pageType=edit"
}
]
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment