diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/carrycapacity/impl/CarryCapacityUserPOServiceImpl.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/carrycapacity/impl/CarryCapacityUserPOServiceImpl.java index 66ee58469..fa823f32d 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/carrycapacity/impl/CarryCapacityUserPOServiceImpl.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/carrycapacity/impl/CarryCapacityUserPOServiceImpl.java @@ -11,6 +11,9 @@ import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam; import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO; import com.njcn.advance.service.carrycapacity.CarryCapacityUserPOService; import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.user.api.UserFeignClient; +import com.njcn.user.pojo.vo.UserVO; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -27,8 +30,9 @@ import java.util.Objects; * @version V1.0.0 */ @Service +@RequiredArgsConstructor public class CarryCapacityUserPOServiceImpl extends ServiceImpl implements CarryCapacityUserPOService{ - + private final UserFeignClient userFeignClient; @Override @Transactional(rollbackFor = Exception.class) public Boolean add(CarryCapacityUserParam carryCapacityUserParam) { @@ -70,6 +74,11 @@ public class CarryCapacityUserPOServiceImpl extends ServiceImpl page = this.page (returnpage, queryWrapper); + page.getRecords().stream().forEach(temp->{ + UserVO user = userFeignClient.getUserById(temp.getCreateBy()).getData(); + + temp.setCreateBy(user.getName()); + }); return page; } diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/enums/ProcessResponseEnum.java b/pqs-process/process-api/src/main/java/com/njcn/process/enums/ProcessResponseEnum.java index 0ea27fd5e..5ce24073d 100644 --- a/pqs-process/process-api/src/main/java/com/njcn/process/enums/ProcessResponseEnum.java +++ b/pqs-process/process-api/src/main/java/com/njcn/process/enums/ProcessResponseEnum.java @@ -24,8 +24,10 @@ public enum ProcessResponseEnum { TERMINAL_ID_REPEAT("A00351","终端编号已存在"), NO_PERMISSION("A00357","当前登录人无权限此项操作"), - SUPV_PLAN_REPEAT("A00568","监督计划名称已存在") - ; + SUPV_PLAN_REPEAT("A00568","监督计划名称已存在"), + NO_UPDATE("A00568","该申请单非新建,驳回状态不准许更新"), + + ; private final String code; diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/enums/ThsFlowTypeEnum.java b/pqs-process/process-api/src/main/java/com/njcn/process/enums/ThsFlowTypeEnum.java index 77a8de009..346913a50 100644 --- a/pqs-process/process-api/src/main/java/com/njcn/process/enums/ThsFlowTypeEnum.java +++ b/pqs-process/process-api/src/main/java/com/njcn/process/enums/ThsFlowTypeEnum.java @@ -14,8 +14,11 @@ public enum ThsFlowTypeEnum { rGeneralSurvey("电站普测计划",1), - rLoadTypeUser("干扰源用户新建计划",2) - + rLoadTypeUser("干扰源用户新建计划",2), + powerQualityManagement("电能质量管理",3), + monitoringReturned("监测设备退运",4), + monitoringSwitch("监测设备接入",5), + monitoringAccept("监测设备验收",6), diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/RFlowProcessParm.java b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/RFlowProcessParm.java new file mode 100644 index 000000000..4829c8bfa --- /dev/null +++ b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/param/RFlowProcessParm.java @@ -0,0 +1,110 @@ +package com.njcn.process.pojo.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +/** + * + * Description: + * Date: 2024/4/15 16:24【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RFlowProcessParm { + + + /** + * 申请流程类型 + */ + @ApiModelProperty(value = "申请流程类型") + private Integer applyType; + + @ApiModelProperty(value = "申请单类型") + private Integer type; + + /** + * 单位ID + */ + @ApiModelProperty(value = "单位ID") + private String orgNo; + + /** + * 申请单详情 + */ + @ApiModelProperty(value = "申请单详情") + private String applicationFormText; + + /** + * 文件路径 + */ + @ApiModelProperty(value = "文件路径") + private String filePath; + + + /** + * 上传时间 + */ + @ApiModelProperty(value = "上传时间") + private LocalDate uploadTime; + + + /** + * 审核人 + */ + @ApiModelProperty(value = "审核人") + private String checker; + + /** + * 审核人名称 + */ + @ApiModelProperty(value = "审核人名称") + private String checkerName; + + + /** + * 流程状态(1-新建,2-待审核,3-驳回,4-归档) + */ + @ApiModelProperty(value = "流程状态") + private String processStatus; + + + @ApiModelProperty(value = "操作1-保存,2-直接提交审核") + private String operate ; + + @Data + public static class RFlowProcessUpdate extends RFlowProcessParm { + @ApiModelProperty("id") + private String Id; + + } + + @Data + public static class RFlowProcessCheck extends RFlowProcessParm { + @ApiModelProperty("id") + private String Id; + /** + * 审核备注 + */ + @ApiModelProperty(value = "审核备注") + private String description; + + /** + * 状态(0-不通过,1-通过) + */ + @ApiModelProperty(value = "状态") + private Integer checkStatus; + } + + + + + +} \ No newline at end of file diff --git a/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/RFlowProcessPO.java b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/RFlowProcessPO.java new file mode 100644 index 000000000..e85f66268 --- /dev/null +++ b/pqs-process/process-api/src/main/java/com/njcn/process/pojo/po/RFlowProcessPO.java @@ -0,0 +1,102 @@ +package com.njcn.process.pojo.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +/** + * + * Description: + * Date: 2024/4/15 16:24【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "r_flow_process") +public class RFlowProcessPO extends BaseEntity { + /** + * 申请流程id + */ + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + + /** + * 申请表单类型 + */ + @TableField(value = "`type`") + private String type; + + /** + * 单位ID + */ + @TableField(value = "org_no") + private String orgNo; + + /** + * 申请单详情 + */ + @TableField(value = "application_form_text") + private String applicationFormText; + + /** + * 文件路径 + */ + @TableField(value = "file_path") + private String filePath; + + /** + * 上传时间 + */ + @TableField(value = "upload_time") + private LocalDate uploadTime; + + /** + * 审核名称 + */ + @TableField(value = "checker_name") + private String checkerName; + + /** + * 审核人 + */ + @TableField(value = "checker") + private String checker; + + /** + * 审核备注 + */ + @TableField(value = "description") + private String description; + + /** + * 状态(0-不通过,1-通过) + */ + @TableField(value = "check_status") + private Integer checkStatus; + + /** + * 流程状态(1-新建,2-待审核,3-驳回,4-已审核,5-已归档) + */ + @TableField(value = "process_status") + private Integer processStatus; + + /** + * 申请流程类型 + */ + @TableField(value = "apply_type") + private Integer applyType; + + + +} \ No newline at end of file diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/RFlowProcessController.java b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/RFlowProcessController.java new file mode 100644 index 000000000..2c946c0ba --- /dev/null +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/RFlowProcessController.java @@ -0,0 +1,100 @@ +package com.njcn.process.controller; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.minioss.bo.MinIoUploadResDTO; +import com.njcn.oss.constant.OssPath; +import com.njcn.oss.utils.FileStorageUtil; +import com.njcn.process.pojo.param.RFlowProcessParm; +import com.njcn.process.service.RFlowProcessPOService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +/** + * Description: + * 接口文档访问地址:http://serverIP:port/swagger-ui.html + * Date: 2022/11/11 14:50【需求编号】 + * + * @author clam + * @version V1.0.0 + */ + +@Slf4j +@RestController +@RequestMapping("/rFlowProcess") +@Api(tags = "申请单") +@AllArgsConstructor +public class RFlowProcessController extends BaseController { + + private final RFlowProcessPOService rFlowProcessPOService; + private final FileStorageUtil fileStorageUtil; + + /** + * @Description: 新增申请单 + * @Param: [rGeneralSurveyPlanAddParm] + * @return: com.njcn.common.pojo.response.HttpResult + * @Author: clam + * @Date: 2022/11/22 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/add") + @ApiOperation("新增申请单") + @ApiImplicitParam(name = "rFlowProcessParm", value = "新增普测计划参数", required = true) + public HttpResult add(@RequestBody @Validated RFlowProcessParm rFlowProcessParm) { + String methodDescribe = getMethodDescribe("add"); + Boolean addFlag = rFlowProcessPOService.add(rFlowProcessParm); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, addFlag, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/update") + @ApiOperation("更新申请单") + @ApiImplicitParam(name = "rFlowProcessParm", value = "新增普测计划参数", required = true) + public HttpResult update(@RequestBody @Validated RFlowProcessParm.RFlowProcessUpdate rFlowProcessParm) { + String methodDescribe = getMethodDescribe("update"); + Boolean addFlag = rFlowProcessPOService.update(rFlowProcessParm); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, addFlag, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/check") + @ApiOperation("审核申请单") + @ApiImplicitParam(name = "rFlowProcessCheck", value = "新增普测计划参数", required = true) + public HttpResult check(@RequestBody @Validated RFlowProcessParm.RFlowProcessCheck rFlowProcessCheck) { + String methodDescribe = getMethodDescribe("check"); + Boolean addFlag = rFlowProcessPOService.check(rFlowProcessCheck); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, addFlag, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/file") + @ApiOperation("归档") + public HttpResult file(@RequestParam String id) { + String methodDescribe = getMethodDescribe("file"); + Boolean addFlag = rFlowProcessPOService.file(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, addFlag, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPLOAD) + @PostMapping("/uploadFile") + @ApiOperation("上传文件") + @ApiImplicitParam(name = "file", value = "文件", required = true) + public HttpResult uploadFile(@RequestParam("file") MultipartFile file){ + String methodDescribe = getMethodDescribe("uploadFile"); + String filePath = fileStorageUtil.getFileUrl( fileStorageUtil.uploadMultipart(file, OssPath.ELECTRICITY_QUALITY)); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,new MinIoUploadResDTO(file.getOriginalFilename(),filePath), methodDescribe); + } + + +} diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowDefinitionController.java b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowDefinitionController.java index ac01dff9c..b649432ac 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowDefinitionController.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowDefinitionController.java @@ -7,24 +7,15 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.process.pojo.dto.flowable.FlowProcDefDto; import com.njcn.process.pojo.dto.flowable.FlowSaveXmlVo; import com.njcn.process.service.flowable.IFlowDefinitionService; -import com.njcn.process.service.flowable.IFlowTaskService; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.IOUtils; -import org.flowable.common.engine.api.FlowableObjectNotFoundException; -import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; -import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; -import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.ProcessDefinition; -import org.flowable.engine.runtime.ProcessInstance; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayInputStream; @@ -35,8 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import static cn.hutool.core.util.CharsetUtil.UTF_8; - /** * pqs * 工作流 diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowTaskController.java b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowTaskController.java index 824fb47dc..4b3569ea2 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowTaskController.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/controller/flowable/FlowTaskController.java @@ -15,15 +15,8 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletResponse; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.util.Map; /** @@ -53,6 +46,13 @@ public class FlowTaskController extends BaseController { return null; } + @ApiOperation(value = "工作流_流转") + @PostMapping(value = "/toNextTaskUser") + public HttpResult toNextTaskUser(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.toNextTaskUser(flowTaskVo); + return null; + } + /** diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/RFlowProcessPOMapper.java b/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/RFlowProcessPOMapper.java new file mode 100644 index 000000000..f17934ff3 --- /dev/null +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/RFlowProcessPOMapper.java @@ -0,0 +1,14 @@ +package com.njcn.process.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.process.pojo.po.RFlowProcessPO; + +/** + * Description: + * Date: 2024/4/16 8:49【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RFlowProcessPOMapper extends BaseMapper { +} \ No newline at end of file diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/mapping/RFlowProcessPOMapper.xml b/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/mapping/RFlowProcessPOMapper.xml new file mode 100644 index 000000000..2bde65b3d --- /dev/null +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/mapper/mapping/RFlowProcessPOMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id, `type`, org_no, application_form_text, file_path, upload_time, checker_name, + checker, description, check_status, process_status, apply_type, Create_By, Create_Time, + Update_By, Update_Time + + \ No newline at end of file diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/RFlowProcessPOService.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/RFlowProcessPOService.java new file mode 100644 index 000000000..338cef281 --- /dev/null +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/RFlowProcessPOService.java @@ -0,0 +1,24 @@ +package com.njcn.process.service; + +import com.njcn.process.pojo.param.RFlowProcessParm; +import com.njcn.process.pojo.po.RFlowProcessPO; +import com.baomidou.mybatisplus.extension.service.IService; + /** + * + * Description: + * Date: 2024/4/15 16:24【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public interface RFlowProcessPOService extends IService{ + + + Boolean add(RFlowProcessParm rFlowProcessParm); + + Boolean update(RFlowProcessParm.RFlowProcessUpdate rFlowProcessParm); + + Boolean check(RFlowProcessParm.RFlowProcessCheck rFlowProcessCheck); + + Boolean file(String id); + } diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/IssuesServiceImpl.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/IssuesServiceImpl.java index d4020d01f..e4c20ae8f 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/IssuesServiceImpl.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/IssuesServiceImpl.java @@ -18,11 +18,16 @@ import com.njcn.device.biz.pojo.dto.LineALLInfoDTO; import com.njcn.oss.constant.OssPath; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.process.enums.ProcessResponseEnum; +import com.njcn.process.enums.ThsFlowTypeEnum; import com.njcn.process.mapper.*; import com.njcn.process.pojo.param.*; import com.njcn.process.pojo.po.*; import com.njcn.process.pojo.vo.*; +import com.njcn.process.pojo.vo.flowable.FlowTaskVo; import com.njcn.process.service.IssuesService; +import com.njcn.process.service.flowable.IFlowDefinitionService; +import com.njcn.process.service.flowable.IFlowInstanceService; +import com.njcn.process.service.flowable.IFlowTaskService; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; @@ -32,16 +37,14 @@ import com.njcn.user.pojo.vo.PvTerminalTreeVO; import com.njcn.web.utils.RequestUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.flowable.task.api.Task; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -76,7 +79,16 @@ public class IssuesServiceImpl implements IssuesService { private final FileStorageUtil fileStorageUtil; private final CommLineClient commLineClient; + private final FlowableAssMapper flowableAssMapper; + + private final IFlowDefinitionService iFlowDefinitionService; + + private final IFlowInstanceService iFlowInstanceService; + + private final IFlowTaskService iFlowTaskService; + + private final FlowFormAssMapper flowFormAssMapper; /** * 新增电能质量问题流程表信息 */ @@ -136,6 +148,9 @@ public class IssuesServiceImpl implements IssuesService { excessive.setPowerQualityProblemNo(powerQualityProblemNo); excessive.setDataDate(localDateTime); excessiveMapper.insert(excessive); + //生成电能质量工作流 + createflow(powerQualityProblemNo,1); + } /** @@ -154,6 +169,9 @@ public class IssuesServiceImpl implements IssuesService { generalSurvey.setPowerQualityProblemNo(powerQualityProblemNo); generalSurvey.setDataDate(localDateTime); generalSurveyMapper.insert(generalSurvey); + //生成电能质量工作流 + createflow(powerQualityProblemNo,4); + } /** @@ -172,6 +190,8 @@ public class IssuesServiceImpl implements IssuesService { complaint.setPowerQualityProblemNo(powerQualityProblemNo); complaint.setDataDate(localDateTime); complaintMapper.insert(complaint); + //生成电能质量工作流 + createflow(powerQualityProblemNo,3); } /** @@ -190,6 +210,35 @@ public class IssuesServiceImpl implements IssuesService { abnormal.setPowerQualityProblemNo(powerQualityProblemNo); abnormal.setDataDate(localDateTime); abnormalMapper.insert(abnormal); + //生成电能质量工作流 + createflow(powerQualityProblemNo,2); + } + + public Boolean createflow(String thsIndex ,Integer type) { + String userId = RequestUtil.getUserIndex(); + + + //绑定工作流 + Map map = new HashMap<>(); + + + //开始流程 + FlowFormAss flowFormAss = flowFormAssMapper.selectOne(new LambdaQueryWrapper().eq(FlowFormAss::getFormId, 3)); + if (Objects.isNull(flowFormAss)) { + throw new BusinessException("当前功能未绑定流程,请先绑定流程"); + } + map.put("type",type); + String processId = iFlowDefinitionService.startProcessInstanceById(flowFormAss.getDefinitionId(), thsIndex, ThsFlowTypeEnum.powerQualityManagement.getCode(), map); + Task task = iFlowTaskService.getTask(processId); + FlowTaskVo flowTaskVo = new FlowTaskVo(); + flowTaskVo.setTaskId(task.getId()); + flowTaskVo.setInstanceId(processId); + flowTaskVo.setComment(RequestUtil.getUserNickname() + "发起电能质量申请"); + map.put("auditFlag",1); + flowTaskVo.setVariables(map); + iFlowTaskService.complete(flowTaskVo); + + return true; } /** diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/RFlowProcessPOServiceImpl.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/RFlowProcessPOServiceImpl.java new file mode 100644 index 000000000..72da946df --- /dev/null +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/RFlowProcessPOServiceImpl.java @@ -0,0 +1,185 @@ +package com.njcn.process.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.process.enums.ProcessResponseEnum; +import com.njcn.process.enums.ThsFlowTypeEnum; +import com.njcn.process.mapper.FlowFormAssMapper; +import com.njcn.process.mapper.FlowableAssMapper; +import com.njcn.process.mapper.RFlowProcessPOMapper; +import com.njcn.process.pojo.param.RFlowProcessParm; +import com.njcn.process.pojo.po.FlowFormAss; +import com.njcn.process.pojo.po.FlowableAss; +import com.njcn.process.pojo.po.RFlowProcessPO; +import com.njcn.process.pojo.vo.flowable.FlowTaskVo; +import com.njcn.process.service.RFlowProcessPOService; +import com.njcn.process.service.flowable.IFlowDefinitionService; +import com.njcn.process.service.flowable.IFlowInstanceService; +import com.njcn.process.service.flowable.IFlowTaskService; +import com.njcn.process.utils.FlowableUtils; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.web.utils.RequestUtil; +import lombok.RequiredArgsConstructor; +import org.flowable.task.api.Task; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * + * Description: + * Date: 2024/4/15 16:24【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +@RequiredArgsConstructor +public class RFlowProcessPOServiceImpl extends ServiceImpl implements RFlowProcessPOService{ + + private final FlowableAssMapper flowableAssMapper; + + private final FlowFormAssMapper flowFormAssMapper; + + private final DicDataFeignClient dicDataFeignClient; + + + private final IFlowDefinitionService iFlowDefinitionService; + + private final IFlowInstanceService iFlowInstanceService; + + private final IFlowTaskService iFlowTaskService; + + @Override + @Transactional(rollbackFor = {Exception.class}) + public Boolean add(RFlowProcessParm rFlowProcessParm) { + + RFlowProcessPO rFlowProcessPO = new RFlowProcessPO(); + BeanUtils.copyProperties(rFlowProcessParm,rFlowProcessPO); + rFlowProcessPO.setProcessStatus(1); + this.save(rFlowProcessPO); + String businessId = rFlowProcessPO.getId(); + //生成新建工作流 + createflow(businessId, rFlowProcessParm.getApplyType(), rFlowProcessParm.getType()); + //生成提交审核工作流 + if(Objects.equals(rFlowProcessParm.getOperate(),"2")){ + createCheckflow(businessId); + } + //修改状态 + rFlowProcessPO.setProcessStatus(2); + this.updateById(rFlowProcessPO); + return true; + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public Boolean update(RFlowProcessParm.RFlowProcessUpdate rFlowProcessParm) { + RFlowProcessPO byId = this.getById(rFlowProcessParm.getId()); + if(byId.getProcessStatus()==1||byId.getProcessStatus()==3){ + BeanUtils.copyProperties(rFlowProcessParm,byId); + this.updateById(byId); + + }else { + throw new BusinessException(ProcessResponseEnum.NO_UPDATE); + + } + return null; + } + //审核 + @Override + @Transactional(rollbackFor = {Exception.class}) + public Boolean check(RFlowProcessParm.RFlowProcessCheck rFlowProcessCheck) { + boolean result = true; + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", rFlowProcessCheck.getId()); + updateWrapper.set("description", rFlowProcessCheck.getDescription()); + updateWrapper.set("check_status", rFlowProcessCheck.getCheckStatus()); + updateWrapper.set("process_status",rFlowProcessCheck.getCheckStatus()==1?3:4); + result = this.update(updateWrapper); + //流程审核 + FlowableAss flowableAss = flowableAssMapper.selectOne(new LambdaQueryWrapper().eq(FlowableAss::getType, ThsFlowTypeEnum.monitoringReturned.getCode()).eq(FlowableAss::getThsIndex,rFlowProcessCheck.getId())); + if(Objects.isNull(flowableAss)){ + throw new BusinessException("当前功能未绑定流程,请联系管理员处理"); + } + FlowableUtils.dealAuditResult(flowableAss,rFlowProcessCheck.getCheckStatus()+"",iFlowTaskService,rFlowProcessCheck.getDescription()); + return result; + } + + @Override + public Boolean file(String id) { + boolean result = true; + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id", id); + updateWrapper.set("process_status",5); + result = this.update(updateWrapper); + //流程审核 + FlowableAss flowableAss = flowableAssMapper.selectOne(new LambdaQueryWrapper().eq(FlowableAss::getType, ThsFlowTypeEnum.monitoringReturned.getCode()).eq(FlowableAss::getThsIndex,id)); + if(Objects.isNull(flowableAss)){ + throw new BusinessException("当前功能未绑定流程,请联系管理员处理"); + } + Task task = iFlowTaskService.getTask(flowableAss.getExecIndex()); + FlowTaskVo flowTaskVo = new FlowTaskVo(); + flowTaskVo.setTaskId(task.getId()); + flowTaskVo.setComment(RequestUtil.getUserNickname() + "进行归档" ); + + flowTaskVo.setInstanceId(flowableAss.getExecIndex()); + iFlowTaskService.complete(flowTaskVo); + + return result; + } + + //新建流程 + public Boolean createflow(String businessId ,Integer applyType,Integer type ) { + String userId = RequestUtil.getUserIndex(); + + + //绑定工作流 + Map map = new HashMap<>(); + + //开始流程 + FlowFormAss flowFormAss = flowFormAssMapper.selectOne(new LambdaQueryWrapper().eq(FlowFormAss::getFormId, applyType)); + if (Objects.isNull(flowFormAss)) { + throw new BusinessException("当前功能未绑定流程,请先绑定流程"); + } + //如何applyType==3 电能质量管理下有3个子流程 + map.put("type",type); + String processId = iFlowDefinitionService.startProcessInstanceById(flowFormAss.getDefinitionId(), businessId, ThsFlowTypeEnum.monitoringReturned.getCode(), map); + Task task = iFlowTaskService.getTask(processId); + FlowTaskVo flowTaskVo = new FlowTaskVo(); + flowTaskVo.setTaskId(task.getId()); + flowTaskVo.setInstanceId(processId); + flowTaskVo.setComment(RequestUtil.getUserNickname() + "发起电能质量申请"); + flowTaskVo.setVariables(map); + iFlowTaskService.complete(flowTaskVo); + + + + + + return true; + } + + //提交审核工作流 + public Boolean createCheckflow(String businessId ) { +//流程审核 + FlowableAss flowableAss = flowableAssMapper.selectOne(new LambdaQueryWrapper().eq(FlowableAss::getType, ThsFlowTypeEnum.monitoringReturned.getCode()).eq(FlowableAss::getThsIndex,businessId)); + if(Objects.isNull(flowableAss)){ + throw new BusinessException("当前功能未绑定流程,请联系管理员处理"); + } + RFlowProcessPO byId = this.getById(businessId); + Task taskNext = iFlowTaskService.getTask(flowableAss.getExecIndex()); + FlowTaskVo flowTaskVoNext = new FlowTaskVo(); + flowTaskVoNext.setTaskId(taskNext.getId()); + flowTaskVoNext.setAssignee(byId.getChecker()); + iFlowTaskService.toNextTaskUser(flowTaskVoNext); + + return true; + } + +}