Commit f45f595b531ab9d4ef1da0c6432f809a38a7e0bb

Authored by zhangmeiyang
1 parent 27c00a4b

feat(tax): 新增映射错误处理机制并优化租户服务

- 新增 TaxMappingError 实体及对应仓储和服务实现
- 新增 ITaxMappingErrorService 接口用于处理映射错误记录-重构 TaxReceiveService,分离错误记录逻辑至独立服务
- 移除 TenantTaxService 类,功能合并到 TaxTenantService 并实现 ITaxTenantService 接口
- 调整 TenantStorageContext 使用 ITaxTenantService 接口而非具体实现
- 更新 ITaxPipelineMappingService 接口签名和依赖引用- 删除 TaxPipelineMapping 和 TaxPipelineMappingCreate 中的 errorMessage 字段
- CustomerBuilder 中补充设置 systemDataId 字段
- TaxReceiver 中调整消息预处理方式,直接使用 MessageContext 参数传递
-优化 MyBatis XML 映射文件,移除对 errorMessage 字段的操作
- 表结构同步删除 tax_pipeline_mapping 表中的 error_message 字段
Showing 17 changed files with 321 additions and 128 deletions
tax-boot/src/main/java/com/diligrp/tax/boot/receiver/TaxReceiver.java
@@ -4,6 +4,7 @@ import com.diligrp.tax.boot.service.TaxReceiveService; @@ -4,6 +4,7 @@ import com.diligrp.tax.boot.service.TaxReceiveService;
4 import com.diligrp.tax.central.domain.MessageContext; 4 import com.diligrp.tax.central.domain.MessageContext;
5 import com.diligrp.tax.central.process.ProcessorChain; 5 import com.diligrp.tax.central.process.ProcessorChain;
6 import com.diligrp.tax.central.type.SystemType; 6 import com.diligrp.tax.central.type.SystemType;
  7 +import com.diligrp.tax.central.utils.JsonUtils;
7 import com.rabbitmq.client.Channel; 8 import com.rabbitmq.client.Channel;
8 import jakarta.annotation.Resource; 9 import jakarta.annotation.Resource;
9 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
@@ -51,7 +52,8 @@ public class TaxReceiver { @@ -51,7 +52,8 @@ public class TaxReceiver {
51 log.info("tax-agent收到消息:{}", content); 52 log.info("tax-agent收到消息:{}", content);
52 MessageContext ctx = null; 53 MessageContext ctx = null;
53 try { 54 try {
54 - ctx = taxReceiveService.messagePreHandle(content); 55 + ctx = JsonUtils.fromJsonString(content, MessageContext.class);
  56 + taxReceiveService.messagePreHandle(ctx);
55 var trans = processorChainMap.get(SystemType.from(ctx.getSystemType())).startProcess(ctx); 57 var trans = processorChainMap.get(SystemType.from(ctx.getSystemType())).startProcess(ctx);
56 taxReceiveService.recordMapping(trans); 58 taxReceiveService.recordMapping(trans);
57 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 59 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
tax-boot/src/main/java/com/diligrp/tax/boot/service/TaxReceiveService.java
@@ -4,15 +4,16 @@ import com.diligrp.tax.central.context.TenantStorageContext; @@ -4,15 +4,16 @@ import com.diligrp.tax.central.context.TenantStorageContext;
4 import com.diligrp.tax.central.domain.MessageContext; 4 import com.diligrp.tax.central.domain.MessageContext;
5 import com.diligrp.tax.central.exception.TaxAgentServiceException; 5 import com.diligrp.tax.central.exception.TaxAgentServiceException;
6 import com.diligrp.tax.central.model.TaxPipelineMappingCreate; 6 import com.diligrp.tax.central.model.TaxPipelineMappingCreate;
  7 +import com.diligrp.tax.central.model.TaxPipelineMappingError;
7 import com.diligrp.tax.central.model.TenantPipeline; 8 import com.diligrp.tax.central.model.TenantPipeline;
8 import com.diligrp.tax.central.model.TenantTaxPipelineMapping; 9 import com.diligrp.tax.central.model.TenantTaxPipelineMapping;
  10 +import com.diligrp.tax.central.service.ITaxMappingErrorService;
9 import com.diligrp.tax.central.service.ITaxPipelineMappingService; 11 import com.diligrp.tax.central.service.ITaxPipelineMappingService;
10 -import com.diligrp.tax.central.service.ITenantTaxService; 12 +import com.diligrp.tax.central.service.ITaxTenantService;
11 import com.diligrp.tax.central.type.DocumentType; 13 import com.diligrp.tax.central.type.DocumentType;
12 import com.diligrp.tax.central.type.MappingStateType; 14 import com.diligrp.tax.central.type.MappingStateType;
13 import com.diligrp.tax.central.type.SystemType; 15 import com.diligrp.tax.central.type.SystemType;
14 import com.diligrp.tax.central.type.TaxSystemType; 16 import com.diligrp.tax.central.type.TaxSystemType;
15 -import com.diligrp.tax.central.utils.JsonUtils;  
16 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
17 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
18 import org.springframework.transaction.annotation.Transactional; 19 import org.springframework.transaction.annotation.Transactional;
@@ -30,14 +31,19 @@ import java.util.Optional; @@ -30,14 +31,19 @@ import java.util.Optional;
30 public class TaxReceiveService { 31 public class TaxReceiveService {
31 32
32 @Resource 33 @Resource
33 - private ITenantTaxService tenantTaxService; 34 + private ITaxTenantService tenantTaxService;
34 35
35 @Resource 36 @Resource
36 private ITaxPipelineMappingService taxPipelineMappingService; 37 private ITaxPipelineMappingService taxPipelineMappingService;
37 38
  39 + @Resource
  40 + private ITaxMappingErrorService taxMappingErrorService;
  41 +
  42 + @Resource
  43 + private TenantStorageContext tenantStorageContext;
  44 +
38 45
39 - public MessageContext messagePreHandle(String content) {  
40 - MessageContext ctx = JsonUtils.fromJsonString(content, MessageContext.class); 46 + public void messagePreHandle(MessageContext ctx) {
41 Long tenantId = tenantTaxService.getTenantId(ctx.getGroup(), ctx.getEntity()); 47 Long tenantId = tenantTaxService.getTenantId(ctx.getGroup(), ctx.getEntity());
42 ctx.setTenantId(tenantId); 48 ctx.setTenantId(tenantId);
43 DocumentType from = DocumentType.from(ctx.getDocumentType()); 49 DocumentType from = DocumentType.from(ctx.getDocumentType());
@@ -46,13 +52,13 @@ public class TaxReceiveService { @@ -46,13 +52,13 @@ public class TaxReceiveService {
46 // 校验业务类型和系统类型 52 // 校验业务类型和系统类型
47 ctx.setDocumentTypeEnum(from); 53 ctx.setDocumentTypeEnum(from);
48 ctx.setSystemTypeEnum(system); 54 ctx.setSystemTypeEnum(system);
49 - Optional<TenantPipeline> option = TenantStorageContext.getTenantPipeline(ctx.getTenantId(), system, ctx.getPipelineCode()); 55 + // 获取租户管道
  56 + Optional<TenantPipeline> option = tenantStorageContext.getTenantPipeline(ctx.getTenantId(), system, ctx.getPipelineCode());
50 TenantPipeline pipeline = option.orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_MATCHING_SET_OF_ACCOUNTS_FOUND)); 57 TenantPipeline pipeline = option.orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_MATCHING_SET_OF_ACCOUNTS_FOUND));
51 //获取租户账套 58 //获取租户账套
52 ctx.setTenantPipeline(pipeline); 59 ctx.setTenantPipeline(pipeline);
53 //获取租户id 60 //获取租户id
54 ctx.setTenantId(tenantTaxService.getTenantId(ctx.getGroup(), ctx.getEntity())); 61 ctx.setTenantId(tenantTaxService.getTenantId(ctx.getGroup(), ctx.getEntity()));
55 - return ctx;  
56 } 62 }
57 63
58 @Transactional 64 @Transactional
@@ -81,19 +87,17 @@ public class TaxReceiveService { @@ -81,19 +87,17 @@ public class TaxReceiveService {
81 87
82 @Transactional 88 @Transactional
83 public void recordMappingError(Exception e, MessageContext ctx) { 89 public void recordMappingError(Exception e, MessageContext ctx) {
84 - StringWriter sw = new StringWriter();  
85 - PrintWriter pw = new PrintWriter(sw);  
86 - e.printStackTrace(pw);  
87 - TaxPipelineMappingCreate create = new TaxPipelineMappingCreate();  
88 - create.setTenantId(ctx.getTenantId());  
89 - create.setPipelineId(ctx.getTenantPipeline().getId());  
90 - create.setDocumentType(ctx.getDocumentType());  
91 - create.setSystemDataId(ctx.getSystemDataId());  
92 - create.setPipelineDataId(ctx.getPipelineDataId());  
93 - create.setOriginData(ctx.getMsgBody());  
94 - create.setState(MappingStateType.SYNC_FAILED.value);  
95 - create.setErrorMessage(sw.toString());  
96 - taxPipelineMappingService.insert(create); 90 + TaxPipelineMappingError error = new TaxPipelineMappingError();
  91 + error.setGroup(ctx.getGroup());
  92 + error.setEntity(ctx.getEntity());
  93 + error.setDocumentType(ctx.getDocumentType());
  94 + error.setSystemType(ctx.getSystemType());
  95 + error.setSystemDataId(ctx.getSystemDataId());
  96 + error.setPipelineCode(ctx.getPipelineCode());
  97 + error.setOriginData(ctx.getMsgBody());
  98 + error.setState(MappingStateType.SYNC_FAILED.value);
  99 + error.setErrorMessage(e.getMessage());
  100 + taxMappingErrorService.insert(error);
97 } 101 }
98 102
99 } 103 }
tax-central/src/main/java/com/diligrp/tax/central/context/TenantStorageContext.java
@@ -3,22 +3,20 @@ package com.diligrp.tax.central.context; @@ -3,22 +3,20 @@ package com.diligrp.tax.central.context;
3 import com.diligrp.tax.central.event.RestoreTenantEvent; 3 import com.diligrp.tax.central.event.RestoreTenantEvent;
4 import com.diligrp.tax.central.model.TenantPipeline; 4 import com.diligrp.tax.central.model.TenantPipeline;
5 import com.diligrp.tax.central.model.TenantPipelineConfig; 5 import com.diligrp.tax.central.model.TenantPipelineConfig;
6 -import com.diligrp.tax.central.service.ITenantTaxService; 6 +import com.diligrp.tax.central.service.ITaxTenantService;
7 import com.diligrp.tax.central.type.DocumentType; 7 import com.diligrp.tax.central.type.DocumentType;
8 import com.diligrp.tax.central.type.SystemType; 8 import com.diligrp.tax.central.type.SystemType;
9 import jakarta.annotation.Resource; 9 import jakarta.annotation.Resource;
10 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
11 -import org.springframework.beans.factory.DisposableBean;  
12 -import org.springframework.beans.factory.InitializingBean;  
13 import org.springframework.boot.CommandLineRunner; 11 import org.springframework.boot.CommandLineRunner;
14 import org.springframework.context.ApplicationEventPublisher; 12 import org.springframework.context.ApplicationEventPublisher;
15 import org.springframework.stereotype.Component; 13 import org.springframework.stereotype.Component;
16 14
17 import java.util.List; 15 import java.util.List;
18 import java.util.Map; 16 import java.util.Map;
  17 +import java.util.Objects;
19 import java.util.Optional; 18 import java.util.Optional;
20 import java.util.concurrent.ConcurrentHashMap; 19 import java.util.concurrent.ConcurrentHashMap;
21 -import java.util.concurrent.atomic.AtomicReference;  
22 import java.util.stream.Collectors; 20 import java.util.stream.Collectors;
23 21
24 /** 22 /**
@@ -31,20 +29,22 @@ import java.util.stream.Collectors; @@ -31,20 +29,22 @@ import java.util.stream.Collectors;
31 public class TenantStorageContext implements CommandLineRunner { 29 public class TenantStorageContext implements CommandLineRunner {
32 30
33 @Resource 31 @Resource
34 - private ITenantTaxService tenantTaxService; 32 + private ITaxTenantService tenantTaxService;
35 @Resource 33 @Resource
36 private ApplicationEventPublisher publisher; 34 private ApplicationEventPublisher publisher;
37 35
38 private static final ConcurrentHashMap<Long, Map<SystemType, Map<String, TenantPipeline>>> TENANT_PIPELINE_MAP = new ConcurrentHashMap<>(); 36 private static final ConcurrentHashMap<Long, Map<SystemType, Map<String, TenantPipeline>>> TENANT_PIPELINE_MAP = new ConcurrentHashMap<>();
39 37
40 - public static Optional<TenantPipeline> getTenantPipeline(Long tenantId, SystemType systemType, String pipelineCode) {  
41 - AtomicReference<TenantPipeline> pipeline = new AtomicReference<>();  
42 - Map<SystemType, Map<String, TenantPipeline>> tenantPipelineMap = TENANT_PIPELINE_MAP.get(tenantId);  
43 - Optional.ofNullable(tenantPipelineMap).ifPresent(map -> {  
44 - Map<String, TenantPipeline> pipelineMap = map.get(systemType);  
45 - Optional.ofNullable(pipelineMap).ifPresent(e -> pipeline.set(pipelineMap.get(pipelineCode)));  
46 - });  
47 - return Optional.of(pipeline.get()); 38 + public Optional<TenantPipeline> getTenantPipeline(Long tenantId, SystemType systemType, String pipelineCode) {
  39 + var tpMap = TENANT_PIPELINE_MAP.get(tenantId);
  40 + if (Objects.isNull(tpMap)) {
  41 + return Optional.empty();
  42 + }
  43 + Map<String, TenantPipeline> pipelineMap = tpMap.get(systemType);
  44 + if (Objects.isNull(pipelineMap)) {
  45 + return Optional.empty();
  46 + }
  47 + return Optional.ofNullable(pipelineMap.get(pipelineCode));
48 } 48 }
49 49
50 public void loadTenantPipeline() { 50 public void loadTenantPipeline() {
tax-central/src/main/java/com/diligrp/tax/central/model/TaxPipelineMappingCreate.java
@@ -54,9 +54,4 @@ public class TaxPipelineMappingCreate { @@ -54,9 +54,4 @@ public class TaxPipelineMappingCreate {
54 */ 54 */
55 @NotNull(message = "同步状态不能为空") 55 @NotNull(message = "同步状态不能为空")
56 private Integer state; 56 private Integer state;
57 -  
58 - /**  
59 - * 错误信息  
60 - */  
61 - private String errorMessage;  
62 } 57 }
tax-central/src/main/java/com/diligrp/tax/central/model/TaxPipelineMappingError.java 0 → 100644
  1 +package com.diligrp.tax.central.model;
  2 +
  3 +import jakarta.validation.constraints.NotEmpty;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Getter;
  6 +import lombok.Setter;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +/**
  11 + * @Author: zhangmeiyang
  12 + * @CreateTime: 2025-11-10 14:30
  13 + * @Version: todo
  14 + */
  15 +@Getter
  16 +@Setter
  17 +public class TaxPipelineMappingError {
  18 + /**
  19 + * id
  20 + */
  21 + private Long id;
  22 + /**
  23 + * 分组
  24 + */
  25 + @NotEmpty
  26 + private String group;
  27 + /**
  28 + * 实体
  29 + */
  30 + @NotEmpty
  31 + private String entity;
  32 + /**
  33 + * 租户账套编码
  34 + */
  35 + @NotEmpty
  36 + private String pipelineCode;
  37 + /**
  38 + * 文档类型
  39 + */
  40 + @NotEmpty
  41 + private String documentType;
  42 + /**
  43 + * 系统类型
  44 + */
  45 + @NotEmpty
  46 + private String systemType;
  47 + /**
  48 + * 同步系统数据唯一键
  49 + */
  50 + @NotEmpty
  51 + private String systemDataId;
  52 + /**
  53 + * 原始发送数据
  54 + */
  55 + @NotEmpty
  56 + private String originData;
  57 + /**
  58 + * 同步状态
  59 + */
  60 + @NotNull
  61 + private Integer state;
  62 + /**
  63 + * 错误信息
  64 + */
  65 + private String errorMessage;
  66 +}
tax-central/src/main/java/com/diligrp/tax/central/model/TenantTaxPipelineMapping.java
@@ -33,10 +33,6 @@ public class TenantTaxPipelineMapping { @@ -33,10 +33,6 @@ public class TenantTaxPipelineMapping {
33 */ 33 */
34 private String originData; 34 private String originData;
35 /** 35 /**
36 - * 错误信息  
37 - */  
38 - private String errorMessage;  
39 - /**  
40 * 州 36 * 州
41 */ 37 */
42 private Integer state; 38 private Integer state;
tax-central/src/main/java/com/diligrp/tax/central/service/ITaxMappingErrorService.java 0 → 100644
  1 +package com.diligrp.tax.central.service;
  2 +
  3 +import com.diligrp.tax.central.model.TaxPipelineMappingError;
  4 +
  5 +/**
  6 + * @Author: zhangmeiyang
  7 + * @CreateTime: 2025-11-10 14:29
  8 + * @Version: todo
  9 + */
  10 +public interface ITaxMappingErrorService {
  11 +
  12 + /**
  13 + * 插入
  14 + *
  15 + * @param error 错误
  16 + */
  17 + void insert(TaxPipelineMappingError error);
  18 +}
tax-central/src/main/java/com/diligrp/tax/central/service/ITaxPipelineMappingService.java
1 package com.diligrp.tax.central.service; 1 package com.diligrp.tax.central.service;
2 2
3 -import com.diligrp.tax.central.domain.MessageContext;  
4 import com.diligrp.tax.central.model.TaxPipelineMappingCreate; 3 import com.diligrp.tax.central.model.TaxPipelineMappingCreate;
5 import com.diligrp.tax.central.model.TenantTaxPipelineMapping; 4 import com.diligrp.tax.central.model.TenantTaxPipelineMapping;
6 -import org.springframework.validation.annotation.Validated;  
7 5
8 import java.util.Optional; 6 import java.util.Optional;
9 7
@@ -18,7 +16,7 @@ public interface ITaxPipelineMappingService { @@ -18,7 +16,7 @@ public interface ITaxPipelineMappingService {
18 * @param systemDataId 系统数据 ID 16 * @param systemDataId 系统数据 ID
19 * @return {@link Optional }<{@link TenantTaxPipelineMapping }> 17 * @return {@link Optional }<{@link TenantTaxPipelineMapping }>
20 */ 18 */
21 - Optional<TenantTaxPipelineMapping> findByPipelineIdAndDocumentTypeAndSystemDataId(Long tenantId,Long pipelineId,String documentType,String systemDataId); 19 + Optional<TenantTaxPipelineMapping> findByPipelineIdAndDocumentTypeAndSystemDataId(Long tenantId, Long pipelineId, String documentType, String systemDataId);
22 20
23 /** 21 /**
24 * 插入 22 * 插入
tax-central/src/main/java/com/diligrp/tax/central/service/ITenantTaxService.java renamed to tax-central/src/main/java/com/diligrp/tax/central/service/ITaxTenantService.java
@@ -10,7 +10,7 @@ import java.util.List; @@ -10,7 +10,7 @@ import java.util.List;
10 * @CreateTime: 2025-11-06 14:20 10 * @CreateTime: 2025-11-06 14:20
11 * @Version: todo 11 * @Version: todo
12 */ 12 */
13 -public interface ITenantTaxService { 13 +public interface ITaxTenantService {
14 14
15 /** 15 /**
16 * 获取租户 ID 16 * 获取租户 ID
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/kingdee/CustomerBuilder.java
@@ -50,7 +50,10 @@ public class CustomerBuilder extends Builder&lt;StandardCustomer&gt; { @@ -50,7 +50,10 @@ public class CustomerBuilder extends Builder&lt;StandardCustomer&gt; {
50 Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(customer, ts)); 50 Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(customer, ts));
51 //查询数据库的客户信息 如果存在 赋值id 51 //查询数据库的客户信息 如果存在 赋值id
52 Optional<TenantTaxPipelineMapping> dbOptions = taxPipelineMappingService.findByPipelineIdAndDocumentTypeAndSystemDataId(pipeline.getTenantId(), pipeline.getId(), markDocument().value, systemDataId); 52 Optional<TenantTaxPipelineMapping> dbOptions = taxPipelineMappingService.findByPipelineIdAndDocumentTypeAndSystemDataId(pipeline.getTenantId(), pipeline.getId(), markDocument().value, systemDataId);
53 - dbOptions.ifPresent(e -> customer.setCustomerId(e.getPipelineDataId())); 53 + dbOptions.ifPresent(e -> {
  54 + customer.setCustomerId(e.getPipelineDataId());
  55 + customer.setSystemDataId(e.getSystemDataId());
  56 + });
54 return customer; 57 return customer;
55 } 58 }
56 59
tax-storage/src/main/java/com/diligrp/tax/storage/domain/TaxMappingError.java 0 → 100644
  1 +package com.diligrp.tax.storage.domain;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.IdType;
  4 +import com.baomidou.mybatisplus.annotation.TableField;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import jakarta.validation.constraints.NotEmpty;
  8 +import jakarta.validation.constraints.NotNull;
  9 +import lombok.Getter;
  10 +import lombok.Setter;
  11 +
  12 +import java.time.LocalDateTime;
  13 +
  14 +/**
  15 + * @Author: zhangmeiyang
  16 + * @CreateTime: 2025-11-10 14:42
  17 + * @Version: todo
  18 + */
  19 +@Setter
  20 +@Getter
  21 +@TableName(value = "tax_mapping_error")
  22 +public class TaxMappingError {
  23 + /**
  24 + * id
  25 + */
  26 + @TableId(type = IdType.AUTO)
  27 + private Long id;
  28 + /**
  29 + * 分组
  30 + */
  31 + @TableField(value = "`group`")
  32 + private String group;
  33 + /**
  34 + * 实体
  35 + */
  36 + @TableField(value = "entity")
  37 + private String entity;
  38 + /**
  39 + * 租户账套编码
  40 + */
  41 + @TableField(value = "pipeline_code")
  42 + private String pipelineCode;
  43 + /**
  44 + * 文档类型
  45 + */
  46 + @TableField(value = "document_type")
  47 + private String documentType;
  48 + /**
  49 + * 系统类型
  50 + */
  51 + @TableField(value = "system_type")
  52 + private String systemType;
  53 + /**
  54 + * 同步系统数据唯一键
  55 + */
  56 + @TableField(value = "system_data_id")
  57 + private String systemDataId;
  58 + /**
  59 + * 原始发送数据
  60 + */
  61 + @TableField(value = "origin_data")
  62 + private String originData;
  63 + /**
  64 + * 同步状态
  65 + */
  66 + @TableField(value = "state")
  67 + private Integer state;
  68 + /**
  69 + * 错误信息
  70 + */
  71 + @TableField(value = "error_message")
  72 + private String errorMessage;
  73 + /**
  74 + * 创建时间
  75 + */
  76 + @TableField("created_time")
  77 + private LocalDateTime createdTime;
  78 + /**
  79 + * 修改时间
  80 + */
  81 + @TableField("modified_time")
  82 + private LocalDateTime modifiedTime;
  83 +
  84 +}
tax-storage/src/main/java/com/diligrp/tax/storage/domain/TaxPipelineMapping.java
@@ -50,11 +50,6 @@ public class TaxPipelineMapping { @@ -50,11 +50,6 @@ public class TaxPipelineMapping {
50 private Integer state; 50 private Integer state;
51 51
52 /** 52 /**
53 - * 错误信息  
54 - */  
55 - private String errorMessage;  
56 -  
57 - /**  
58 * 创建时间 53 * 创建时间
59 */ 54 */
60 private LocalDateTime createdTime; 55 private LocalDateTime createdTime;
tax-storage/src/main/java/com/diligrp/tax/storage/repo/TaxMappingErrorRepository.java 0 → 100644
  1 +package com.diligrp.tax.storage.repo;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.diligrp.tax.storage.domain.TaxMappingError;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +@Repository
  8 +public interface TaxMappingErrorRepository extends BaseMapper<TaxMappingError> {
  9 +}
tax-storage/src/main/java/com/diligrp/tax/storage/service/TaxMappingErrorService.java 0 → 100644
  1 +package com.diligrp.tax.storage.service;
  2 +
  3 +import com.diligrp.tax.central.model.TaxPipelineMappingError;
  4 +import com.diligrp.tax.central.service.ITaxMappingErrorService;
  5 +import com.diligrp.tax.central.utils.JsonUtils;
  6 +import com.diligrp.tax.storage.domain.TaxMappingError;
  7 +import com.diligrp.tax.storage.repo.TaxMappingErrorRepository;
  8 +import jakarta.annotation.Resource;
  9 +import org.springframework.stereotype.Service;
  10 +
  11 +/**
  12 + * @Author: zhangmeiyang
  13 + * @CreateTime: 2025-11-10 14:41
  14 + * @Version: todo
  15 + */
  16 +@Service
  17 +public class TaxMappingErrorService implements ITaxMappingErrorService {
  18 +
  19 + @Resource
  20 + private TaxMappingErrorRepository taxMappingErrorRepository;
  21 +
  22 + /**
  23 + * 插入
  24 + *
  25 + * @param error 错误
  26 + */
  27 + @Override
  28 + public void insert(TaxPipelineMappingError error) {
  29 + TaxMappingError save = JsonUtils.convertValue(error, TaxMappingError.class);
  30 + taxMappingErrorRepository.insert(save);
  31 + }
  32 +}
tax-storage/src/main/java/com/diligrp/tax/storage/service/TaxTenantService.java
@@ -4,16 +4,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -4,16 +4,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.metadata.IPage; 4 import com.baomidou.mybatisplus.core.metadata.IPage;
5 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 import com.diligrp.tax.central.exception.TaxAgentServiceException; 6 import com.diligrp.tax.central.exception.TaxAgentServiceException;
  7 +import com.diligrp.tax.central.model.TenantPipeline;
  8 +import com.diligrp.tax.central.model.TenantPipelineConfig;
  9 +import com.diligrp.tax.central.service.ITaxTenantService;
  10 +import com.diligrp.tax.central.type.SystemType;
  11 +import com.diligrp.tax.central.type.TaxSystemType;
7 import com.diligrp.tax.central.utils.JsonUtils; 12 import com.diligrp.tax.central.utils.JsonUtils;
  13 +import com.diligrp.tax.storage.domain.TaxPipeline;
  14 +import com.diligrp.tax.storage.domain.TaxPipelineConfig;
8 import com.diligrp.tax.storage.domain.TaxTenant; 15 import com.diligrp.tax.storage.domain.TaxTenant;
9 import com.diligrp.tax.storage.model.co.TaxTenantCO; 16 import com.diligrp.tax.storage.model.co.TaxTenantCO;
10 import com.diligrp.tax.storage.model.vo.TaxTenantVO; 17 import com.diligrp.tax.storage.model.vo.TaxTenantVO;
  18 +import com.diligrp.tax.storage.repo.TaxPipelineConfigRepository;
  19 +import com.diligrp.tax.storage.repo.TaxPipelineRepository;
11 import com.diligrp.tax.storage.repo.TaxTenantRepository; 20 import com.diligrp.tax.storage.repo.TaxTenantRepository;
12 import com.diligrp.tax.storage.type.StateType; 21 import com.diligrp.tax.storage.type.StateType;
13 import jakarta.annotation.Resource; 22 import jakarta.annotation.Resource;
14 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
15 import org.springframework.transaction.annotation.Transactional; 24 import org.springframework.transaction.annotation.Transactional;
16 25
  26 +import java.util.List;
17 import java.util.Optional; 27 import java.util.Optional;
18 28
19 /** 29 /**
@@ -23,12 +33,65 @@ import java.util.Optional; @@ -23,12 +33,65 @@ import java.util.Optional;
23 * @date 2025/11/05 33 * @date 2025/11/05
24 */ 34 */
25 @Service 35 @Service
26 -public class TaxTenantService { 36 +public class TaxTenantService implements ITaxTenantService {
27 37
28 @Resource 38 @Resource
29 private TaxTenantRepository taxTenantRepository; 39 private TaxTenantRepository taxTenantRepository;
30 @Resource 40 @Resource
31 private DynamicTaxPipelineMappingService dynamicTaxPipelineMappingService; 41 private DynamicTaxPipelineMappingService dynamicTaxPipelineMappingService;
  42 + @Resource
  43 + private TaxPipelineRepository taxPipelineRepository;
  44 + @Resource
  45 + private TaxPipelineConfigRepository taxPipelineConfigRepository;
  46 +
  47 +
  48 + /**
  49 + * 获取租户 ID
  50 + *
  51 + * @param group 群
  52 + * @param entity 实体
  53 + * @return {@link Long }
  54 + */
  55 + @Override
  56 + public Long getTenantId(String group, String entity) {
  57 + LambdaQueryWrapper<TaxTenant> queryWrapper = new LambdaQueryWrapper<>();
  58 + queryWrapper.eq(TaxTenant::getGroup, group);
  59 + queryWrapper.eq(TaxTenant::getEntity, entity);
  60 + TaxTenant taxTenant = taxTenantRepository.selectOne(queryWrapper);
  61 + return Optional.ofNullable(taxTenant).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_TENANT_INFORMATION_FOUND)).getId();
  62 + }
  63 +
  64 + /**
  65 + * 列出所有启用管道
  66 + *
  67 + * @return {@link List }<{@link TenantPipeline }>
  68 + */
  69 + @Override
  70 + public List<TenantPipeline> listAllEnablePipeline() {
  71 + LambdaQueryWrapper<TaxPipeline> queryWrapper = new LambdaQueryWrapper<>();
  72 + queryWrapper.eq(TaxPipeline::getState, StateType.ENABLE.value);
  73 + List<TaxPipeline> taxPipelines = taxPipelineRepository.selectList(queryWrapper);
  74 + return taxPipelines.stream().map(taxPipeline -> {
  75 + TenantPipeline pipeline = JsonUtils.convertValue(taxPipeline, TenantPipeline.class);
  76 + pipeline.setSystemType(SystemType.from(taxPipeline.getSystemCode()));
  77 + return pipeline;
  78 + }).toList();
  79 + }
  80 +
  81 + /**
  82 + * 按管道 ID 列出
  83 + *
  84 + * @param pipelineId
  85 + * @return {@link List }<{@link TenantPipelineConfig }>
  86 + */
  87 + @Override
  88 + public List<TenantPipelineConfig> listByPipelineId(Long pipelineId) {
  89 + LambdaQueryWrapper<TaxPipelineConfig> queryWrapper = new LambdaQueryWrapper<>();
  90 + queryWrapper.eq(TaxPipelineConfig::getPipelineId, pipelineId);
  91 + List<TaxPipelineConfig> taxPipelineConfigs = taxPipelineConfigRepository.selectList(queryWrapper);
  92 + return taxPipelineConfigs.stream().map(taxPipelineConfig -> JsonUtils.convertValue(taxPipelineConfig, TenantPipelineConfig.class)).toList();
  93 + }
  94 +
32 95
33 /** 96 /**
34 * 获取租户 97 * 获取租户
tax-storage/src/main/java/com/diligrp/tax/storage/service/TenantTaxService.java deleted 100644 → 0
1 -package com.diligrp.tax.storage.service;  
2 -  
3 -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
4 -import com.diligrp.tax.central.exception.TaxAgentServiceException;  
5 -import com.diligrp.tax.central.model.TenantPipeline;  
6 -import com.diligrp.tax.central.model.TenantPipelineConfig;  
7 -import com.diligrp.tax.central.service.ITenantTaxService;  
8 -import com.diligrp.tax.central.type.SystemType;  
9 -import com.diligrp.tax.central.type.TaxSystemType;  
10 -import com.diligrp.tax.central.utils.JsonUtils;  
11 -import com.diligrp.tax.storage.domain.TaxPipeline;  
12 -import com.diligrp.tax.storage.domain.TaxPipelineConfig;  
13 -import com.diligrp.tax.storage.domain.TaxTenant;  
14 -import com.diligrp.tax.storage.repo.TaxPipelineConfigRepository;  
15 -import com.diligrp.tax.storage.repo.TaxPipelineRepository;  
16 -import com.diligrp.tax.storage.repo.TaxTenantRepository;  
17 -import com.diligrp.tax.storage.type.StateType;  
18 -import jakarta.annotation.Resource;  
19 -import org.springframework.stereotype.Service;  
20 -  
21 -import java.util.List;  
22 -import java.util.Optional;  
23 -  
24 -/**  
25 - * @Author: zhangmeiyang  
26 - * @CreateTime: 2025-11-06 14:32  
27 - * @Version: todo  
28 - */  
29 -@Service  
30 -public class TenantTaxService implements ITenantTaxService {  
31 -  
32 - @Resource  
33 - private TaxTenantRepository taxTenantRepository;  
34 -  
35 - @Resource  
36 - private TaxPipelineRepository taxPipelineRepository;  
37 -  
38 - @Resource  
39 - private TaxPipelineConfigRepository taxPipelineConfigRepository;  
40 -  
41 - @Override  
42 - public Long getTenantId(String group, String entity) {  
43 - LambdaQueryWrapper<TaxTenant> queryWrapper = new LambdaQueryWrapper<>();  
44 - queryWrapper.eq(TaxTenant::getGroup, group);  
45 - queryWrapper.eq(TaxTenant::getEntity, entity);  
46 - TaxTenant taxTenant = taxTenantRepository.selectOne(queryWrapper);  
47 - return Optional.ofNullable(taxTenant).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_TENANT_INFORMATION_FOUND)).getId();  
48 - }  
49 -  
50 - @Override  
51 - public List<TenantPipeline> listAllEnablePipeline() {  
52 - LambdaQueryWrapper<TaxPipeline> queryWrapper = new LambdaQueryWrapper<>();  
53 - queryWrapper.eq(TaxPipeline::getState, StateType.ENABLE.value);  
54 - List<TaxPipeline> taxPipelines = taxPipelineRepository.selectList(queryWrapper);  
55 - return taxPipelines.stream().map(taxPipeline -> {  
56 - TenantPipeline pipeline = JsonUtils.convertValue(taxPipeline, TenantPipeline.class);  
57 - pipeline.setSystemType(SystemType.from(taxPipeline.getSystemCode()));  
58 - return pipeline;  
59 - }).toList();  
60 - }  
61 -  
62 - @Override  
63 - public List<TenantPipelineConfig> listByPipelineId(Long pipelineId) {  
64 - LambdaQueryWrapper<TaxPipelineConfig> queryWrapper = new LambdaQueryWrapper<>();  
65 - queryWrapper.eq(TaxPipelineConfig::getPipelineId, pipelineId);  
66 - List<TaxPipelineConfig> taxPipelineConfigs = taxPipelineConfigRepository.selectList(queryWrapper);  
67 - return taxPipelineConfigs.stream().map(taxPipelineConfig -> JsonUtils.convertValue(taxPipelineConfig, TenantPipelineConfig.class)).toList();  
68 - }  
69 -}  
tax-storage/src/main/resources/com/diligrp/tax/storage/repo/TaxPipelineMappingRepository.xml
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 , pipeline_data_id 9 , pipeline_data_id
10 , origin_data 10 , origin_data
11 , state 11 , state
12 - , error_message) 12 + )
13 VALUES 13 VALUES
14 ( #{pipelineId} 14 ( #{pipelineId}
15 , #{documentType} 15 , #{documentType}
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 , #{pipelineDataId} 17 , #{pipelineDataId}
18 , #{originData} 18 , #{originData}
19 , #{state} 19 , #{state}
20 - , #{errorMessage}) 20 + )
21 </insert> 21 </insert>
22 <update id="updateStatus"> 22 <update id="updateStatus">
23 UPDATE 23 UPDATE
@@ -36,7 +36,6 @@ @@ -36,7 +36,6 @@
36 , pipeline_data_id 36 , pipeline_data_id
37 , origin_data 37 , origin_data
38 , state 38 , state
39 - , error_message  
40 , created_Time 39 , created_Time
41 , modified_Time 40 , modified_Time
42 FROM 41 FROM
@@ -58,7 +57,6 @@ @@ -58,7 +57,6 @@
58 , pipeline_data_id 57 , pipeline_data_id
59 , origin_data 58 , origin_data
60 , state 59 , state
61 - , error_message  
62 , created_Time 60 , created_Time
63 , modified_Time 61 , modified_Time
64 FROM 62 FROM
@@ -80,7 +78,6 @@ @@ -80,7 +78,6 @@
80 `system_data_id` varchar(50) NOT NULL COMMENT '系统数据ID', 78 `system_data_id` varchar(50) NOT NULL COMMENT '系统数据ID',
81 `pipeline_data_id` varchar(50) NOT NULL COMMENT '账套数据ID', 79 `pipeline_data_id` varchar(50) NOT NULL COMMENT '账套数据ID',
82 `origin_data` json NOT NULL COMMENT '原始数据', 80 `origin_data` json NOT NULL COMMENT '原始数据',
83 - `error_message` text NULL COMMENT '错误信息',  
84 `state` tinyint NOT NULL COMMENT '状态 0=已同步,1=同步失败,2=同步重试', 81 `state` tinyint NOT NULL COMMENT '状态 0=已同步,1=同步失败,2=同步重试',
85 `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 82 `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
86 `modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 83 `modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',