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 index f83aad5e4e..295c125f69 100644 --- 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 @@ -23,3 +23,4 @@ public class BlockChainCreateProjectFormDTO { private List assignedStaffs; } + diff --git a/epmet-module/epmet-third/epmet-third-server/pom.xml b/epmet-module/epmet-third/epmet-third-server/pom.xml index 84b0161a1a..350b72b7b2 100644 --- a/epmet-module/epmet-third/epmet-third-server/pom.xml +++ b/epmet-module/epmet-third/epmet-third-server/pom.xml @@ -220,6 +220,16 @@ SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd + + + + + + true + 192.168.1.144:9876 + EpmetCloud + 12345678 @@ -260,6 +270,16 @@ SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd + + + + + + true + 192.168.1.144:9876 + EpmetCloud + 12345678 @@ -300,6 +320,16 @@ SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd + + + + + + false + + + @@ -342,6 +372,16 @@ SEC95f4f40b533ad379ea6a6d1af6dd37029383cfe1b7cd96dfac2678be2c1c3ed1 + + + + + + false + + + diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java index f2072e4efc..3a7ba889a3 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/EpmetThirdApplication.java @@ -1,11 +1,14 @@ package com.epmet; +import com.epmet.mq.properties.RocketMQProperties; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; +@EnableConfigurationProperties(RocketMQProperties.class) @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients 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 index 7090bc3ce0..2ec27b1e27 100644 --- 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 @@ -4,6 +4,8 @@ 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 com.epmet.service.BlockChainProjectService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,6 +18,9 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/blockchain/project") public class BlockChainProjectController { + @Autowired + private BlockChainProjectService blockChainProjectService; + /** * 立项 * @param input @@ -24,6 +29,7 @@ public class BlockChainProjectController { @PostMapping("create") public Result blockChainCreateProject(@RequestBody BlockChainCreateProjectFormDTO input) { ValidatorUtils.validateEntity(input); + blockChainProjectService.blockChainCreateProject(input); return new Result(); } @@ -35,6 +41,7 @@ public class BlockChainProjectController { @PostMapping("process") public Result blockChainProcessProject(@RequestBody BlockChainProcessProjectFormDTO input) { ValidatorUtils.validateEntity(input); + blockChainProjectService.blockChainProcessProject(input); return new Result(); } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/producer/BlockChainProducer.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/producer/BlockChainProducer.java new file mode 100644 index 0000000000..1e2e368222 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/producer/BlockChainProducer.java @@ -0,0 +1,88 @@ +package com.epmet.mq.producer; + +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.mq.properties.RocketMQProperties; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.acl.common.AclClientRPCHook; +import org.apache.rocketmq.acl.common.SessionCredentials; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.client.producer.SendStatus; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.remoting.common.RemotingHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +/** + * @Description 描述 + * @Author wangxianzhang + * @Date 2021/11/26 12:33 下午 + * @Version 1.0 + */ +@Component +@Slf4j +public class BlockChainProducer { + + // topic + public static final String TOPIC_PROJECT = "project"; + public static final String TOPIC_AUTH = "auth"; + + // tag + public static final String TAG_SEND_PROJECT = "send_project"; + public static final String TAG_SEND_PROCESS = "send_process"; + public static final String TAG_SEND_ASSIGNED_STAFFS = "send_assigned_staffs"; + + // 组 + public static final String GROUP_EPMET_CLOUD_PROJECT_SENDER = "epmet_cloud_project_sender"; + + private DefaultMQProducer producer; + + @Autowired + private RocketMQProperties rocketMQProperties; + + @PostConstruct + private void postConstruct() { + try { + producer = new DefaultMQProducer(GROUP_EPMET_CLOUD_PROJECT_SENDER, + new AclClientRPCHook(new SessionCredentials(rocketMQProperties.getBlockChain().getAccessKey(), rocketMQProperties.getBlockChain().getSecretKey()))); + producer.setNamesrvAddr(rocketMQProperties.getBlockChain().getNameServer()); + producer.start(); + } catch (MQClientException e) { + e.printStackTrace(); + } + } + + /** + * 销毁producer + */ + @PreDestroy + private void preDestroy() { + producer.shutdown(); + } + + /** + * 发送消息 + * + * @param topic + * @param tag + */ + public void sendMsg(String topic, String tag, String content) { + try { + Message msg = new Message(topic, tag, content.getBytes(RemotingHelper.DEFAULT_CHARSET)); + SendResult sendResult = producer.send(msg); + if (SendStatus.SEND_OK == sendResult.getSendStatus() + || SendStatus.SLAVE_NOT_AVAILABLE == sendResult.getSendStatus()) { + log.info("消息发送区块链MQ成功, topic:{}, tag:{}, content:{}", topic, tag, content); + } else { + log.error("消息发送区块链MQ失败, topic:{}, tag:{}, content:{}, status: {}", topic, tag, content, sendResult.getSendStatus()); + } + } catch (Exception e) { + log.error("消息发送区块链MQ出错, topic:{}, tag:{}, content:{}, 错误信息:{]", topic, tag, content, ExceptionUtils.getErrorStackTrace(e)); + } + } + +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/properties/RocketMQProperties.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/properties/RocketMQProperties.java new file mode 100644 index 0000000000..7c2394ca7d --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/mq/properties/RocketMQProperties.java @@ -0,0 +1,33 @@ +package com.epmet.mq.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @Description 描述 + * @Author wangxianzhang + * @Date 2021/11/26 10:03 上午 + * @Version 1.0 + */ +@ConfigurationProperties(prefix = "rocketmq") +@Data +public class RocketMQProperties { + + // 这里必须new出对象来才能成功封装 + private EpmetCloudInnerProperties epmetCloudInner = new EpmetCloudInnerProperties(); + private BlockChainProperties blockChain = new BlockChainProperties(); + + @Data + public class EpmetCloudInnerProperties { + private Boolean enable; + private String nameServer; + } + + @Data + public class BlockChainProperties { + private Boolean enable; + private String nameServer; + private String accessKey; + private String secretKey; + } +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/BlockChainProjectService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/BlockChainProjectService.java new file mode 100644 index 0000000000..95f1bfd151 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/BlockChainProjectService.java @@ -0,0 +1,14 @@ +package com.epmet.service; + +import com.epmet.dto.form.BlockChainCreateProjectFormDTO; +import com.epmet.dto.form.BlockChainProcessProjectFormDTO; + +/** + * 区块链:项目service + */ +public interface BlockChainProjectService { + + void blockChainCreateProject(BlockChainCreateProjectFormDTO input); + void blockChainProcessProject(BlockChainProcessProjectFormDTO input); + +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java new file mode 100644 index 0000000000..81db281da2 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/BlockChainProjectServiceImpl.java @@ -0,0 +1,44 @@ +package com.epmet.service.impl; + +import com.alibaba.fastjson.JSON; +import com.epmet.dto.form.BlockChainCreateProjectFormDTO; +import com.epmet.dto.form.BlockChainProcessProjectFormDTO; +import com.epmet.mq.producer.BlockChainProducer; +import com.epmet.mq.properties.RocketMQProperties; +import com.epmet.service.BlockChainProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description 描述 + * @Author wangxianzhang + * @Date 2021/11/26 9:59 上午 + * @Version 1.0 + */ +@Service +public class BlockChainProjectServiceImpl implements BlockChainProjectService { + + @Autowired + private BlockChainProducer blockChainProducer; + + @Override + public void blockChainCreateProject(BlockChainCreateProjectFormDTO input) { + + String projectString = JSON.toJSONString(input.getProject()); + String processString = JSON.toJSONString(input.getProcess()); + String assignedStaffsString = JSON.toJSONString(input.getAssignedStaffs()); + + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_PROJECT, projectString); + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_PROCESS, processString); + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_ASSIGNED_STAFFS, assignedStaffsString); + } + + @Override + public void blockChainProcessProject(BlockChainProcessProjectFormDTO input) { + String processString = JSON.toJSONString(input.getProcess()); + String assignedStaffsString = JSON.toJSONString(input.getAssignedStaffs()); + + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_PROCESS, processString); + blockChainProducer.sendMsg(BlockChainProducer.TOPIC_PROJECT, BlockChainProducer.TAG_SEND_ASSIGNED_STAFFS, assignedStaffsString); + } +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/bootstrap.yml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/bootstrap.yml index 0dc793c264..1ad3de55ca 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/bootstrap.yml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/bootstrap.yml @@ -149,3 +149,15 @@ shutdown: graceful: enable: true #是否开启优雅停机 waitTimeSecs: 30 # 优雅停机等待时间,超过30秒,发出告警 + +rocketmq: + # epmet-cloud集群内部用的rocketmq +# epmet-cloud-inner: +# enable: @rocketmq.epmet-cloud-inner.enable@ +# name-server: @rocketmq.epmet-cloud-inner.name-server@ + # 区块链对接用的rocketmq + block-chain: + enable: @rocketmq.block-chain.enable@ + name-server: @rocketmq.block-chain.name-server@ + access-key: @rocketmq.block-chain.access-key@ + secret-key: @rocketmq.block-chain.secret-key@ \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java index 24c47a4b92..19a5316d22 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java @@ -2198,21 +2198,21 @@ 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());