diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainCreateProjectFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainCreateProjectFormDTO.java new file mode 100644 index 0000000000..f83aad5e4e --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainCreateProjectFormDTO.java @@ -0,0 +1,25 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 区块链:创建项目form dto + */ +@Data +public class BlockChainCreateProjectFormDTO { + + @NotNull(message = "项目信息不能为空") + private BlockChainProjectFormDTO project; + + @NotNull(message = "处理进展信息不能为空") + private BlockChainProjectProcessFormDTO process; + + @NotNull(message = "指派的人员列表信息不能为空") + @NotEmpty(message = "指派的人员列表信息不能为空") + private List assignedStaffs; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java new file mode 100644 index 0000000000..7e910f8726 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProcessProjectFormDTO.java @@ -0,0 +1,18 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 区块链:项目处理进展信息 + */ +@Data +public class BlockChainProcessProjectFormDTO { + + @NotNull(message = "处理进展信息不能为空") + private BlockChainProjectProcessFormDTO process; + + private List assignedStaffs; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectFormDTO.java new file mode 100644 index 0000000000..2477ee2f00 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectFormDTO.java @@ -0,0 +1,41 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.util.Date; + +/** + * 区块链项目信息formdto + */ +@Data +public class BlockChainProjectFormDTO { + @NotBlank(message = "项目ID必填") + private String projectId; + @NotBlank(message = "客户ID必填") + private String customerId; + @NotBlank(message = "标题必填") + private String title; + @NotBlank(message = "组织ID必填") + private String agencyId; + @NotBlank(message = "项目来源必填") + private String origin; + @NotBlank(message = "项目来源ID必填") + private String originId; + @NotBlank(message = "项目状态必填") + private String status; + @NotBlank(message = "关闭状态必填") + private String closeStatus; + @NotBlank(message = "组织ID PATH必填") + private String orgIdPath; + @NotBlank(message = "定位必填") + private String locateAddress; + @NotBlank(message = "经度必填") + private String locateLongitude; + @NotBlank(message = "维度必填") + private String locateDimension; + @NotBlank(message = "创建时间必填") + private Date createdTime; + @NotBlank(message = "创建者ID必填") + private String createdBy; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessAssignedStaffFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessAssignedStaffFormDTO.java new file mode 100644 index 0000000000..fae80e91f2 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessAssignedStaffFormDTO.java @@ -0,0 +1,52 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.util.Date; + +/** + * 区块链:指派的项目处理人员 form dto + */ +@Data +public class BlockChainProjectProcessAssignedStaffFormDTO { + @NotBlank(message = "ID必填") + private String id; + + @NotBlank(message = "进展ID必填") + private String processId; + + @NotBlank(message = "项目ID必填") + private String projectId; + + @NotBlank(message = "客户ID必填") + private String customerId; + + @NotBlank(message = "组织ID必填") + private String orgId; + + @NotBlank(message = "部门ID必填") + private String departmentId; + + @NotBlank(message = "网格ID必填") + private String gridId; + + @NotBlank(message = "组织ID PATH必填") + private String orgIdPath; + + @NotBlank(message = "人员ID必填") + private String staffId; + + @NotBlank(message = "部门名称必填") + private String departmentName; + + @NotBlank(message = "是否处理必填") + private String isHandle; + + @NotBlank(message = "创建者ID必填") + private String createdBy; + + @NotBlank(message = "创建时间必填") + private Date createdTime; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessFormDTO.java new file mode 100644 index 0000000000..136dec1e5e --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/BlockChainProjectProcessFormDTO.java @@ -0,0 +1,50 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 区块链:项目处理form dto + */ +@Data +public class BlockChainProjectProcessFormDTO { + @NotBlank(message = "处理ID必填") + private String processId; + @NotBlank(message = "项目ID必填") + private String projectId; + @NotBlank(message = "客户ID必填") + private String customerId; + @NotBlank(message = "部门名称必填") + private String departmentName; + @NotBlank(message = "组织ID必填") + private String agencyId; + @NotBlank(message = "部门ID必填") + private String departmentId; + @NotBlank(message = "网格ID必填") + private String gridId; + @NotBlank(message = "组织ID PATH必填") + private String orgIdPath; + @NotBlank(message = "处理人员ID必填") + private String staffId; + @NotBlank(message = "操作类型必填") + private String operation; + @NotBlank(message = "操作名称必填") + private String operationName; + @NotBlank(message = "公开答复必填") + private String publicReply; + @NotBlank(message = "内部备注必填必填") + private String internalRemark; + @NotNull(message = "结束时间必填") + private Date endTime; + @NotNull(message = "是否发送到外部系统必填") + private Integer isSend; + @NotNull(message = "耗费天数必填") + private Integer costWorkDays; + @NotBlank(message = "创建者ID必填") + private String createdBy; + @NotNull(message = "创建时间必填") + private Date createdTime; +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java index f71914f828..dc5eb828df 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdOpenFeignClient.java @@ -54,6 +54,23 @@ public interface EpmetThirdOpenFeignClient { Result uploadFile(@RequestPart("file") MultipartFile file, @RequestParam("customerId") String customerId, @RequestParam( "platformId") String platformId); + + /** + * 区块链:立项 + * @param input + * @return + */ + @PostMapping("/third/blockchain/project/create") + Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input); + + /** + * 区块链:处理进展 + * @param input + * @return + */ + @PostMapping("/third/blockchain/project/process") + Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input); + class MultipartSupportConfig { @Bean public Encoder feignFormEncoder() { diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java index e855799478..e257b0347b 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdOpenFeignClientFallback.java @@ -49,4 +49,14 @@ public class EpmetThirdOpenFeignClientFallback implements EpmetThirdOpenFeignCli return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "uploadFile", customerId); } + @Override + public Result blockChainCreateProject(BlockChainCreateProjectFormDTO input) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "createProject", input); + } + + @Override + public Result blockChainProcessProject(BlockChainProcessProjectFormDTO input) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "processProject", input); + } + } diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml index a885af4c93..84b0161a1a 100644 --- a/epmet-module/epmet-third/epmet-third-server/pom.xml +++ b/epmet-module/epmet-third/epmet-third-server/pom.xml @@ -146,6 +146,18 @@ compile + + + org.apache.rocketmq + rocketmq-client + 4.9.2 + + + org.apache.rocketmq + rocketmq-acl + 4.9.2 + + diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/BlockChainProjectController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/BlockChainProjectController.java new file mode 100644 index 0000000000..7090bc3ce0 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/BlockChainProjectController.java @@ -0,0 +1,40 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.form.BlockChainCreateProjectFormDTO; +import com.epmet.dto.form.BlockChainProcessProjectFormDTO; +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; + +/** + * 区块链project相关controller + */ +@RestController +@RequestMapping("/blockchain/project") +public class BlockChainProjectController { + + /** + * 立项 + * @param input + * @return + */ + @PostMapping("create") + public Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input) { + ValidatorUtils.validateEntity(input); + return new Result(); + } + + /** + * 处理进展 + * @param input + * @return + */ + @PostMapping("process") + public Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input) { + ValidatorUtils.validateEntity(input); + return new Result(); + } +} diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/BlockChainUploadService.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/BlockChainUploadService.java new file mode 100644 index 0000000000..a9bf0848e2 --- /dev/null +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/BlockChainUploadService.java @@ -0,0 +1,19 @@ +package com.epmet.service; + +import com.epmet.entity.ProjectProcessEntity; +import com.epmet.entity.ProjectStaffEntity; + +import java.util.List; + +/** + * 上链service接口 + */ +public interface BlockChainUploadService { + + /** + * 数据上链 + * @param processEntity 处理进展entity + * @param assignedStaffEntities 指派给的工作人员entity + */ + void send2BlockChain(ProjectProcessEntity processEntity, List assignedStaffEntities); +} diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java new file mode 100644 index 0000000000..2a7f45fccb --- /dev/null +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/BlockChainUploadServiceImpl.java @@ -0,0 +1,94 @@ +package com.epmet.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.dao.ProjectStaffDao; +import com.epmet.dto.form.BlockChainProcessProjectFormDTO; +import com.epmet.dto.form.BlockChainProjectProcessAssignedStaffFormDTO; +import com.epmet.dto.form.BlockChainProjectProcessFormDTO; +import com.epmet.entity.ProjectProcessEntity; +import com.epmet.entity.ProjectStaffEntity; +import com.epmet.feign.EpmetThirdOpenFeignClient; +import com.epmet.service.BlockChainUploadService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 区块链上链service实现 + */ +@Service +public class BlockChainUploadServiceImpl implements BlockChainUploadService { + + @Autowired + private EpmetThirdOpenFeignClient thirdOpenFeignClient; + + @Autowired + private ProjectStaffDao projectStaffDao; + + /** + * 数据上链 + * @param processEntity 处理进展entity + * @param assignedStaffEntities 指派给的工作人员entity + */ + public void send2BlockChain(ProjectProcessEntity processEntity, List assignedStaffEntities) { + + BlockChainProjectProcessFormDTO process = new BlockChainProjectProcessFormDTO(); + process.setProcessId(processEntity.getId()); + process.setCreatedBy(processEntity.getCreatedBy()); + process.setCreatedTime(processEntity.getCreatedTime()); + String costWorkdays = processEntity.getCostWorkdays(); + process.setCostWorkDays(StringUtils.isBlank(costWorkdays) ? null : Integer.valueOf(costWorkdays)); + process.setAgencyId(processEntity.getAgencyId()); + process.setCustomerId(processEntity.getCustomerId()); + process.setDepartmentId(processEntity.getDepartmentId()); + process.setDepartmentName(processEntity.getDepartmentName()); + process.setEndTime(processEntity.getEndTime()); + process.setGridId(processEntity.getGridId()); + process.setInternalRemark(processEntity.getInternalRemark()); + process.setIsSend(processEntity.getIsSend()); + process.setOperation(processEntity.getOperation()); + process.setOperationName(processEntity.getOperationName()); + process.setOrgIdPath(processEntity.getOrgIdPath()); + process.setProjectId(processEntity.getProjectId()); + process.setPublicReply(processEntity.getPublicReply()); + process.setStaffId(processEntity.getStaffId()); + + if (assignedStaffEntities == null) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(ProjectStaffEntity::getProcessId, process.getProjectId()); + assignedStaffEntities = projectStaffDao.selectList(query); + } + + if (CollectionUtils.isEmpty(assignedStaffEntities)) { + assignedStaffEntities = new ArrayList<>(); + } + + List assignedStaffs = assignedStaffEntities.stream().map(e -> { + BlockChainProjectProcessAssignedStaffFormDTO assignedStaff = new BlockChainProjectProcessAssignedStaffFormDTO(); + assignedStaff.setStaffId(e.getStaffId()); + assignedStaff.setCreatedBy(e.getCreatedBy()); + assignedStaff.setCustomerId(e.getCustomerId()); + assignedStaff.setCreatedTime(e.getCreatedTime()); + assignedStaff.setProcessId(e.getProcessId()); + assignedStaff.setDepartmentId(e.getDepartmentId()); + assignedStaff.setDepartmentName(e.getDepartmentName()); + assignedStaff.setGridId(e.getGridId()); + assignedStaff.setId(e.getId()); + assignedStaff.setIsHandle(e.getIsHandle()); + assignedStaff.setOrgId(e.getOrgId()); + assignedStaff.setOrgIdPath(e.getOrgIdPath()); + assignedStaff.setProjectId(e.getProjectId()); + return assignedStaff; + }).collect(Collectors.toList()); + + BlockChainProcessProjectFormDTO form = new BlockChainProcessProjectFormDTO(); + form.setProcess(process); + form.setAssignedStaffs(assignedStaffs); + thirdOpenFeignClient.blockChainProcessProject(form); + } +} diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java index de0a8347f4..489bb0737f 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java @@ -26,6 +26,7 @@ import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.scan.param.TextScanParamDTO; @@ -58,6 +59,7 @@ import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgFeignClient; import com.epmet.redis.ProjectProcessRedis; import com.epmet.send.SendMqMsgUtil; +import com.epmet.service.BlockChainUploadService; import com.epmet.service.ProjectProcessService; import com.epmet.service.ProjectService; import com.epmet.service.ProjectStaffService; @@ -120,6 +122,8 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl page(Map params) { @@ -407,6 +411,13 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl()); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e); + log.error("【项目流转】上链失败,错误信息:{}", errorMsg); + } } /** @@ -2140,6 +2180,14 @@ public class ProjectServiceImpl extends BaseServiceImpl textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO); - if (!textSyncScanResult.success()) { - throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); - } else { - if (!textSyncScanResult.getData().isAllPass()) { - throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode()); - } - } - } + //if (com.alibaba.nacos.client.utils.StringUtils.isNotBlank(formDTO.getPublicReply())) { + // TextScanParamDTO textScanParamDTO = new TextScanParamDTO(); + // TextTaskDTO taskDTO = new TextTaskDTO(); + // taskDTO.setDataId(UUID.randomUUID().toString().replace("-", "")); + // taskDTO.setContent(formDTO.getPublicReply()); + // textScanParamDTO.getTasks().add(taskDTO); + // Result textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO); + // if (!textSyncScanResult.success()) { + // throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); + // } else { + // if (!textSyncScanResult.getData().isAllPass()) { + // throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode()); + // } + // } + //} //获取项目相关信息 ProjectEntity projectEntity = baseDao.selectById(formDTO.getProjectId()); @@ -2238,6 +2286,13 @@ public class ProjectServiceImpl extends BaseServiceImpl()); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e); + log.error("【项目流转】上链失败,错误信息:{}", errorMsg); + } } /** diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java index e8e79882f7..8bf61721f0 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java @@ -5,6 +5,7 @@ import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg; import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.scan.param.TextScanParamDTO; import com.epmet.commons.tools.scan.param.TextTaskDTO; @@ -91,6 +92,8 @@ public class ProjectTraceServiceImpl implements ProjectTraceS private LoginUserUtil loginUserUtil; @Autowired private ResiEventService resiEventService; + @Autowired + private BlockChainUploadService blockChainUploadService; @Override public List getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) { @@ -529,6 +532,13 @@ public class ProjectTraceServiceImpl implements ProjectTraceS log.error("项目实时统计消息发送失败"); } + // 数据上链 + try { + blockChainUploadService.send2BlockChain(processEntity, entityList); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e); + log.error("【项目流转】上链失败,错误信息:{}", errorMsg); + } } /** @@ -845,6 +855,15 @@ public class ProjectTraceServiceImpl implements ProjectTraceS resiEventService.shiftProject(eventShiftProjectDTO); EventToProjectResultDTO resultDTO=new EventToProjectResultDTO(); resultDTO.setProjectId(projectEntity.getId()); + + // 数据上链 + try { + blockChainUploadService.send2BlockChain(processEntity, entityList); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e); + log.error("【项目流转】上链失败,错误信息:{}", errorMsg); + } + return resultDTO; }