【DAOP-1.0】企业认证
【功能点】测试问题处理
Showing
3 changed files
with
98 additions
and
23 deletions
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(); | ... | ... |
-
Please register or sign in to post a comment