cc0314cf by 肖初晴

【DAOP-1.0】企业认证

【功能点】测试问题处理
1 parent a3f6bbe0
1 package com.csbr.qingcloud.portal.domain.vo;
2
3 import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
4 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data;
6 import org.springframework.util.MultiValueMap;
7
8 /**
9 * @description: 审批变更检查实体
10 * @author: XiaoCQ
11 * @create: 2025-02-20
12 */
13 @Data
14 @Schema(name = "审批变更检查实体")
15 public class KafkaApproveDTO {
16
17 @Schema(description = "审批流参数")
18 private FlowUpdateStateDTO updateStateDTO;
19
20 @Schema(description = "请求头")
21 private MultiValueMap<String, String> header;
22
23 }
1 package com.csbr.qingcloud.portal.feign;
2
3 import com.csbr.cloud.common.config.FastCallFeignConfiguration;
4 import com.csbr.cloud.common.response.CommonRes;
5 import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
6 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
7 import com.csbr.qingcloud.portal.domain.vo.UserQueryDTO;
8 import com.csbr.qingcloud.portal.domain.vo.UserVO;
9 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
10 import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
11 import csbr.cloud.entity.domain.base.vo.PageListVO;
12 import jakarta.validation.Valid;
13 import org.springframework.cloud.openfeign.FeignClient;
14 import org.springframework.http.MediaType;
15 import org.springframework.util.MultiValueMap;
16 import org.springframework.web.bind.annotation.*;
17
18 import java.net.URI;
19 import java.util.List;
20
21 /**
22 * @author Xiaocq
23 */
24 @FeignClient(value = "ms-daop-workflow-service", configuration = FastCallFeignConfiguration.class)
25 public interface WorkflowFeign {
26
27 /** 动态业务处理 */
28 @HystrixCommand(fallbackMethod = "CommonUtil.sleepFallback", commandProperties = {
29 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "4500")})
30 @RequestMapping(value = "/work-flow/data/allow-flow-core", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
31 CommonRes<Boolean> allowFlowCore(@RequestBody FlowUpdateStateDTO dto, @RequestHeader(required = false) MultiValueMap<String, String> headers);
32
33
34 }
1 package com.csbr.qingcloud.portal.service.impl; 1 package com.csbr.qingcloud.portal.service.impl;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject;
5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 5 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
7 import com.csbr.cloud.common.enums.SystemError; 6 import com.csbr.cloud.common.enums.SystemError;
8 import com.csbr.cloud.common.enums.UserError; 7 import com.csbr.cloud.common.enums.UserError;
9 import com.csbr.cloud.common.enums.WorkFlowBizEnum; 8 import com.csbr.cloud.common.enums.WorkFlowBizEnum;
9 import com.csbr.cloud.common.exception.CsbrSystemException;
10 import com.csbr.cloud.common.exception.CsbrUserException; 10 import com.csbr.cloud.common.exception.CsbrUserException;
11 import com.csbr.cloud.common.util.CommonUtil;
12 import com.csbr.cloud.common.util.CsbrBeanUtil;
13 import com.csbr.cloud.common.util.MessageSourceUtil;
11 import com.csbr.cloud.mq.service.KafkaStdService; 14 import com.csbr.cloud.mq.service.KafkaStdService;
15 import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
12 import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO; 16 import com.csbr.cloud.workflow.domain.dto.appove.FlowUpdateStateDTO;
13 import com.csbr.cloud.workflow.feign.WorkflowFeign; 17 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
18 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
19 import com.csbr.qingcloud.portal.feign.WorkflowFeign;
20 import com.csbr.cloud.workflow.util.ApprovalFlowUtil;
21 import com.csbr.cloud.workflow.util.FlowAbstractImpl;
14 import com.csbr.qingcloud.portal.domain.vo.*; 22 import com.csbr.qingcloud.portal.domain.vo.*;
15 import com.csbr.qingcloud.portal.feign.PersonelFeign; 23 import com.csbr.qingcloud.portal.feign.PersonelFeign;
16 import com.csbr.qingcloud.portal.feign.UserFeign; 24 import com.csbr.qingcloud.portal.feign.UserFeign;
17 import com.csbr.qingcloud.portal.mybatis.entity.MfDemand; 25 import com.csbr.qingcloud.portal.mybatis.entity.MfDemand;
26 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
18 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove; 27 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterpriseChangeApprove;
19 import com.csbr.qingcloud.portal.mybatis.service.MfDemandService; 28 import com.csbr.qingcloud.portal.mybatis.service.MfDemandService;
20 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveService; 29 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseChangeApproveService;
21 import com.csbr.qingcloud.portal.service.EnterpriseChangeApproveService;
22 import com.csbr.qingcloud.portal.util.ObjectUtil;
23 import csbr.cloud.entity.domain.base.dao.BaseShardingDO;
24 import csbr.cloud.entity.enums.ApprovalStateEnum;
25 import com.csbr.cloud.common.exception.CsbrSystemException;
26 import com.csbr.cloud.common.util.CommonUtil;
27 import com.csbr.cloud.common.util.CsbrBeanUtil;
28 import com.csbr.cloud.workflow.util.ApprovalFlowUtil;
29 import com.csbr.cloud.workflow.util.FlowAbstractImpl;
30 import com.csbr.cloud.common.util.MessageSourceUtil;
31 import csbr.cloud.entity.domain.base.vo.PageListVO;
32 import com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO;
33 import com.csbr.cloud.workflow.domain.dto.appove.AddApprovalDTO;
34 import com.csbr.cloud.workflow.domain.dto.callback.BizCallbackDTO;
35 import com.csbr.qingcloud.portal.mybatis.entity.MfEnterprise;
36 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService; 30 import com.csbr.qingcloud.portal.mybatis.service.MfEnterpriseService;
37 import com.csbr.qingcloud.portal.service.EnterpriseService; 31 import com.csbr.qingcloud.portal.service.EnterpriseService;
38 import csbr.cloud.entity.utils.UserContextHolder; 32 import com.csbr.qingcloud.portal.util.ObjectUtil;
33 import csbr.cloud.entity.domain.base.vo.PageListVO;
34 import csbr.cloud.entity.enums.ApprovalStateEnum;
39 import io.seata.common.util.DateUtil; 35 import io.seata.common.util.DateUtil;
36 import io.seata.spring.annotation.GlobalTransactional;
40 import jakarta.annotation.Resource; 37 import jakarta.annotation.Resource;
41 import lombok.extern.slf4j.Slf4j; 38 import lombok.extern.slf4j.Slf4j;
42 import org.apache.commons.collections.CollectionUtils; 39 import org.apache.commons.collections.CollectionUtils;
...@@ -46,11 +43,15 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -46,11 +43,15 @@ import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.kafka.annotation.KafkaListener; 43 import org.springframework.kafka.annotation.KafkaListener;
47 import org.springframework.kafka.support.Acknowledgment; 44 import org.springframework.kafka.support.Acknowledgment;
48 import org.springframework.stereotype.Service; 45 import org.springframework.stereotype.Service;
49 import io.seata.spring.annotation.GlobalTransactional;
50 import org.springframework.transaction.annotation.Transactional; 46 import org.springframework.transaction.annotation.Transactional;
47 import org.springframework.util.LinkedMultiValueMap;
48 import org.springframework.util.MultiValueMap;
49 import org.springframework.web.context.request.RequestContextHolder;
50 import org.springframework.web.context.request.ServletRequestAttributes;
51 51
52 import java.util.ArrayList; 52 import java.util.ArrayList;
53 import java.util.Date; 53 import java.util.Date;
54 import java.util.Enumeration;
54 import java.util.List; 55 import java.util.List;
55 56
56 /** 57 /**
...@@ -412,19 +413,36 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris ...@@ -412,19 +413,36 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
412 public Boolean lastApprove(FlowUpdateStateDTO dto) { 413 public Boolean lastApprove(FlowUpdateStateDTO dto) {
413 //如果是非认证会员认证审批通过了 则需要走kafka生成新会员 414 //如果是非认证会员认证审批通过了 则需要走kafka生成新会员
414 dto.setBackEndInvoke(true); 415 dto.setBackEndInvoke(true);
415 String topic = "tenant.enterprise"; 416 KafkaApproveDTO approveDTO = new KafkaApproveDTO();
416 kafkaStdService.stdSendMsgWithPrefix(topic, JSON.toJSONString(dto)); 417 approveDTO.setHeader(getHeader());
418 approveDTO.setUpdateStateDTO(dto);
419 kafkaStdService.stdSendMsgWithPrefix("tenant.enterprise", JSON.toJSONString(approveDTO));
417 return true; 420 return true;
418 } 421 }
419 422
423 private MultiValueMap<String, String> getHeader(){
424 ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
425 Enumeration<String> headerNames = servletRequestAttributes.getRequest().getHeaderNames();
426 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
427 List<String> names = List.of("AUTHORIZATION", "X-USERINFO", "TENANT", "TOKEN");
428 while (null != headerNames && headerNames.hasMoreElements()) {
429 String name = headerNames.nextElement();
430 String value = servletRequestAttributes.getRequest().getHeader(name);
431 if (names.contains(name.toUpperCase())) {
432 headers.put(name, List.of(value));
433 }
434 }
435 return headers;
436 }
437
420 @KafkaListener(containerFactory = "kafkaListenerContainerFactory", groupId = "scm.notify", topics = "${csbr.kafka.topic-prefix:}_"+"tenant.enterprise", 438 @KafkaListener(containerFactory = "kafkaListenerContainerFactory", groupId = "scm.notify", topics = "${csbr.kafka.topic-prefix:}_"+"tenant.enterprise",
421 errorHandler = "consumerAwareErrorHandler") 439 errorHandler = "consumerAwareErrorHandler")
422 public void addUserListener(List<ConsumerRecord<String, String>> records, Acknowledgment ack) { 440 public void addUserListener(List<ConsumerRecord<String, String>> records, Acknowledgment ack) {
423 ack.acknowledge(); 441 ack.acknowledge();
424 for (ConsumerRecord<String, String> record : records) { 442 for (ConsumerRecord<String, String> record : records) {
425 try { 443 try {
426 FlowUpdateStateDTO dto = JSON.parseObject(record.value(),FlowUpdateStateDTO.class); 444 KafkaApproveDTO approveDTO = JSON.parseObject(record.value(),KafkaApproveDTO.class);
427 workflowFeign.allowFlowCore(dto).getData(); 445 workflowFeign.allowFlowCore(approveDTO.getUpdateStateDTO(),approveDTO.getHeader()).getData();
428 } catch (Exception e) { 446 } catch (Exception e) {
429 log.error("企业认证出现异常: " + e.getMessage() + ";\nRecord Info: " + record.toString()); 447 log.error("企业认证出现异常: " + e.getMessage() + ";\nRecord Info: " + record.toString());
430 e.printStackTrace(); 448 e.printStackTrace();
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!