Commit 694924fe14377ec30c77d881371f447a7b827e18
1 parent
0134403a
feat(kingdee):优化客户和单据构建逻辑并调整金蝶连接管理
- 修改 BaseCustomer 类中的字段访问权限为 protected,并注释掉 currency 字段 - 在 Builder 和具体实现类中增加对 TenantPipeline 的支持以配置默认数据 - 更新 CustomerBuilder、ReceiptBuilder 等类以通过反射方式设置对象属性 - 调整 KingDeeConnectionManager 返回 IdentifyInfo 而非 K3CloudApi 实例 - 修改 CustomerSender 及其他 Sender 类处理联系人信息的方式- 在 ProxyProcessor 和 InitializeProcessor 中传递 pipelineCode 参数 - 增加 ITenantTaxService 接口获取租户 ID 方法- 扩展 MessageContext 类新增 group、entity 和 pipelineCode 属性-优化 MappingUtils 工具类以支持父类字段映射 - 在 KingDeeHelper 中添加日志记录以便调试审核发送过程
Showing
26 changed files
with
338 additions
and
94 deletions
tax-boot/src/main/java/com/diligrp/tax/boot/receiver/TaxReceiver.java
| @@ -5,6 +5,7 @@ import com.diligrp.tax.central.process.ProcessorChain; | @@ -5,6 +5,7 @@ import com.diligrp.tax.central.process.ProcessorChain; | ||
| 5 | import com.diligrp.tax.central.type.StatusType; | 5 | import com.diligrp.tax.central.type.StatusType; |
| 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.diligrp.tax.central.utils.JsonUtils; |
| 8 | +import com.diligrp.tax.storage.service.TenantTaxService; | ||
| 8 | import com.rabbitmq.client.Channel; | 9 | import com.rabbitmq.client.Channel; |
| 9 | import jakarta.annotation.Resource; | 10 | import jakarta.annotation.Resource; |
| 10 | import lombok.extern.slf4j.Slf4j; | 11 | import lombok.extern.slf4j.Slf4j; |
| @@ -36,6 +37,9 @@ public class TaxReceiver { | @@ -36,6 +37,9 @@ public class TaxReceiver { | ||
| 36 | @Resource | 37 | @Resource |
| 37 | private Map<SystemType, ProcessorChain> processorChainMap; | 38 | private Map<SystemType, ProcessorChain> processorChainMap; |
| 38 | 39 | ||
| 40 | + @Resource | ||
| 41 | + private TenantTaxService tenantTaxService; | ||
| 42 | + | ||
| 39 | @RabbitListener(bindings = | 43 | @RabbitListener(bindings = |
| 40 | @QueueBinding( | 44 | @QueueBinding( |
| 41 | value = @Queue(value = NORMAL_QUEUE, autoDelete = "false"), | 45 | value = @Queue(value = NORMAL_QUEUE, autoDelete = "false"), |
| @@ -59,6 +63,7 @@ public class TaxReceiver { | @@ -59,6 +63,7 @@ public class TaxReceiver { | ||
| 59 | } | 63 | } |
| 60 | 64 | ||
| 61 | private void handle(MessageContext ctx) { | 65 | private void handle(MessageContext ctx) { |
| 66 | + ctx.setTenantId(tenantTaxService.getTenantId(ctx.getGroup(), ctx.getEntity())); | ||
| 62 | MessageContext messageContext = processorChainMap.get(SystemType.from(ctx.getSystemType())).startProcess(ctx); | 67 | MessageContext messageContext = processorChainMap.get(SystemType.from(ctx.getSystemType())).startProcess(ctx); |
| 63 | messageContext.setStatus(StatusType.SUCCESS.code); | 68 | messageContext.setStatus(StatusType.SUCCESS.code); |
| 64 | //TODO write to db | 69 | //TODO write to db |
tax-central/src/main/java/com/diligrp/tax/central/converter/impl/CustomerCountryConverter.java
| @@ -2,7 +2,6 @@ package com.diligrp.tax.central.converter.impl; | @@ -2,7 +2,6 @@ package com.diligrp.tax.central.converter.impl; | ||
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.converter.IConverter; | 3 | import com.diligrp.tax.central.converter.IConverter; |
| 4 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FCOUNTRY; | 4 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FCOUNTRY; |
| 5 | -import com.diligrp.tax.central.domain.mapping.kingdee.base.FTRADINGCURRID; | ||
| 6 | import org.springframework.stereotype.Component; | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | ||
| 8 | import java.util.Objects; | 7 | import java.util.Objects; |
tax-central/src/main/java/com/diligrp/tax/central/converter/impl/CustomerGroupConverter.java
| 1 | package com.diligrp.tax.central.converter.impl; | 1 | package com.diligrp.tax.central.converter.impl; |
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.converter.IConverter; | 3 | import com.diligrp.tax.central.converter.IConverter; |
| 4 | -import com.diligrp.tax.central.domain.mapping.kingdee.base.FContactId; | ||
| 5 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FGroup; | 4 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FGroup; |
| 6 | import org.springframework.stereotype.Component; | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 |
tax-central/src/main/java/com/diligrp/tax/central/converter/impl/StringConverter.java
| @@ -15,7 +15,7 @@ public class StringConverter implements IConverter<String> { | @@ -15,7 +15,7 @@ public class StringConverter implements IConverter<String> { | ||
| 15 | @Override | 15 | @Override |
| 16 | public String convert(Object source) { | 16 | public String convert(Object source) { |
| 17 | if (Objects.isNull(source)) { | 17 | if (Objects.isNull(source)) { |
| 18 | - return ""; | 18 | + return null; |
| 19 | } | 19 | } |
| 20 | return (String) source; | 20 | return (String) source; |
| 21 | } | 21 | } |
tax-central/src/main/java/com/diligrp/tax/central/domain/BaseMapping.java
tax-central/src/main/java/com/diligrp/tax/central/domain/MessageContext.java
| @@ -11,10 +11,22 @@ public class MessageContext { | @@ -11,10 +11,22 @@ public class MessageContext { | ||
| 11 | */ | 11 | */ |
| 12 | private String thirdPartyCode; | 12 | private String thirdPartyCode; |
| 13 | /** | 13 | /** |
| 14 | + * 分组 | ||
| 15 | + */ | ||
| 16 | + private String group; | ||
| 17 | + /** | ||
| 18 | + * 实体 | ||
| 19 | + */ | ||
| 20 | + private String entity; | ||
| 21 | + /** | ||
| 14 | * 租户 ID | 22 | * 租户 ID |
| 15 | */ | 23 | */ |
| 16 | private Long tenantId; | 24 | private Long tenantId; |
| 17 | /** | 25 | /** |
| 26 | + * 租户账套编码 | ||
| 27 | + */ | ||
| 28 | + private String pipelineCode; | ||
| 29 | + /** | ||
| 18 | * 消息信息 | 30 | * 消息信息 |
| 19 | */ | 31 | */ |
| 20 | private String msgBody; | 32 | private String msgBody; |
tax-central/src/main/java/com/diligrp/tax/central/domain/document/kingdee/BaseCustomer.java
| @@ -17,80 +17,80 @@ public abstract class BaseCustomer extends BaseDocument { | @@ -17,80 +17,80 @@ public abstract class BaseCustomer extends BaseDocument { | ||
| 17 | /** | 17 | /** |
| 18 | * 系统数据 ID | 18 | * 系统数据 ID |
| 19 | */ | 19 | */ |
| 20 | - private String systemDataId; | ||
| 21 | - /** | ||
| 22 | - * 结算货币(FTRADINGCURRID) | ||
| 23 | - */ | ||
| 24 | - @Converter(value = CustomerCurrencyConverter.class, targetField = "FTRADINGCURRID") | ||
| 25 | - private String currency; | 20 | + protected String systemDataId; |
| 21 | +// /** | ||
| 22 | +// * 结算货币(FTRADINGCURRID) | ||
| 23 | +// */ | ||
| 24 | +// @Converter(value = CustomerCurrencyConverter.class, targetField = "FTRADINGCURRID") | ||
| 25 | +// protected String currency; | ||
| 26 | /** | 26 | /** |
| 27 | * 客户 ID(FCUSTID) | 27 | * 客户 ID(FCUSTID) |
| 28 | */ | 28 | */ |
| 29 | @Converter(value = StringConverter.class, targetField = "FCUSTID") | 29 | @Converter(value = StringConverter.class, targetField = "FCUSTID") |
| 30 | - private String customerId; | 30 | + protected String customerId; |
| 31 | /** | 31 | /** |
| 32 | * 客户编号 | 32 | * 客户编号 |
| 33 | */ | 33 | */ |
| 34 | @Converter(value = StringConverter.class, targetField = "FNumber") | 34 | @Converter(value = StringConverter.class, targetField = "FNumber") |
| 35 | - private String customerCode; | 35 | + protected String customerCode; |
| 36 | /** | 36 | /** |
| 37 | * 客户姓名(FName) | 37 | * 客户姓名(FName) |
| 38 | */ | 38 | */ |
| 39 | @Converter(value = StringConverter.class, targetField = "FName") | 39 | @Converter(value = StringConverter.class, targetField = "FName") |
| 40 | - private String customerName; | 40 | + protected String customerName; |
| 41 | /** | 41 | /** |
| 42 | * 客户简称(FShortName) | 42 | * 客户简称(FShortName) |
| 43 | */ | 43 | */ |
| 44 | @Converter(value = StringConverter.class, targetField = "FShortName") | 44 | @Converter(value = StringConverter.class, targetField = "FShortName") |
| 45 | - private String customerShortName; | 45 | + protected String customerShortName; |
| 46 | /** | 46 | /** |
| 47 | * 客户发票抬头(FINVOICETITLE) | 47 | * 客户发票抬头(FINVOICETITLE) |
| 48 | */ | 48 | */ |
| 49 | @Converter(value = StringConverter.class, targetField = "FINVOICETITLE") | 49 | @Converter(value = StringConverter.class, targetField = "FINVOICETITLE") |
| 50 | - private String customerInvoiceTitle; | 50 | + protected String customerInvoiceTitle; |
| 51 | /** | 51 | /** |
| 52 | * 法人姓名(FLegalPerson) | 52 | * 法人姓名(FLegalPerson) |
| 53 | */ | 53 | */ |
| 54 | @Converter(value = StringConverter.class, targetField = "FLegalPerson") | 54 | @Converter(value = StringConverter.class, targetField = "FLegalPerson") |
| 55 | - private String legalPerson; | 55 | + protected String legalPerson; |
| 56 | /** | 56 | /** |
| 57 | * 证件号(FSOCIALCRECODE) | 57 | * 证件号(FSOCIALCRECODE) |
| 58 | */ | 58 | */ |
| 59 | @Converter(value = StringConverter.class, targetField = "FSOCIALCRECODE") | 59 | @Converter(value = StringConverter.class, targetField = "FSOCIALCRECODE") |
| 60 | - private String idNumber; | 60 | + protected String idNumber; |
| 61 | /** | 61 | /** |
| 62 | * 国家(FCOUNTRY) | 62 | * 国家(FCOUNTRY) |
| 63 | */ | 63 | */ |
| 64 | @Converter(value = CustomerCountryConverter.class, targetField = "FCOUNTRY") | 64 | @Converter(value = CustomerCountryConverter.class, targetField = "FCOUNTRY") |
| 65 | - private String country; | 65 | + protected String country; |
| 66 | /** | 66 | /** |
| 67 | * 区域组织(FPROVINCIAL) | 67 | * 区域组织(FPROVINCIAL) |
| 68 | */ | 68 | */ |
| 69 | @Converter(value = CustomerProvincialConverter.class, targetField = "FPROVINCIAL") | 69 | @Converter(value = CustomerProvincialConverter.class, targetField = "FPROVINCIAL") |
| 70 | - private String provincial; | 70 | + protected String provincial; |
| 71 | /** | 71 | /** |
| 72 | * 地址(FADDRESS) | 72 | * 地址(FADDRESS) |
| 73 | */ | 73 | */ |
| 74 | @Converter(value = StringConverter.class, targetField = "FADDRESS") | 74 | @Converter(value = StringConverter.class, targetField = "FADDRESS") |
| 75 | - private String address; | 75 | + protected String address; |
| 76 | /** | 76 | /** |
| 77 | * 注册地址(FRegisterAddress) | 77 | * 注册地址(FRegisterAddress) |
| 78 | */ | 78 | */ |
| 79 | @Converter(value = StringConverter.class, targetField = "FRegisterAddress") | 79 | @Converter(value = StringConverter.class, targetField = "FRegisterAddress") |
| 80 | - private String registerAddress; | 80 | + protected String registerAddress; |
| 81 | /** | 81 | /** |
| 82 | * 客户分组-配置数据(FGroup) | 82 | * 客户分组-配置数据(FGroup) |
| 83 | */ | 83 | */ |
| 84 | @Converter(value = CustomerGroupConverter.class, targetField = "FGroup") | 84 | @Converter(value = CustomerGroupConverter.class, targetField = "FGroup") |
| 85 | - private String customerGroup; | 85 | + protected String customerGroup; |
| 86 | /** | 86 | /** |
| 87 | * 创建组织(FCreateOrgId) | 87 | * 创建组织(FCreateOrgId) |
| 88 | */ | 88 | */ |
| 89 | @Converter(value = CustomerCreateOrgConverter.class, targetField = "FCreateOrgId") | 89 | @Converter(value = CustomerCreateOrgConverter.class, targetField = "FCreateOrgId") |
| 90 | - private String customerCreateOrg; | 90 | + protected String customerCreateOrg; |
| 91 | /** | 91 | /** |
| 92 | * 使用组织 | 92 | * 使用组织 |
| 93 | */ | 93 | */ |
| 94 | @Converter(value = CustomerUseOrgConverter.class, targetField = "FUseOrgId") | 94 | @Converter(value = CustomerUseOrgConverter.class, targetField = "FUseOrgId") |
| 95 | - private String customerUseOrg; | 95 | + protected String customerUseOrg; |
| 96 | } | 96 | } |
tax-central/src/main/java/com/diligrp/tax/central/domain/mapping/kingdee/CustomerMapping.java
| @@ -20,7 +20,7 @@ public class CustomerMapping extends BaseMapping { | @@ -20,7 +20,7 @@ public class CustomerMapping extends BaseMapping { | ||
| 20 | private FUseOrgId FUseOrgId; | 20 | private FUseOrgId FUseOrgId; |
| 21 | private String FShortName; | 21 | private String FShortName; |
| 22 | private FCOUNTRY FCOUNTRY; | 22 | private FCOUNTRY FCOUNTRY; |
| 23 | - private FTRADINGCURRID FTRADINGCURRID; | 23 | +// private FTRADINGCURRID FTRADINGCURRID; |
| 24 | private FPROVINCIAL FPROVINCIAL; | 24 | private FPROVINCIAL FPROVINCIAL; |
| 25 | private String FADDRESS; | 25 | private String FADDRESS; |
| 26 | private FGroup FGroup; | 26 | private FGroup FGroup; |
| @@ -102,14 +102,14 @@ public class CustomerMapping extends BaseMapping { | @@ -102,14 +102,14 @@ public class CustomerMapping extends BaseMapping { | ||
| 102 | this.FCOUNTRY = FCOUNTRY; | 102 | this.FCOUNTRY = FCOUNTRY; |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | - @JsonProperty("FTRADINGCURRID") | ||
| 106 | - public FTRADINGCURRID getFTRADINGCURRID() { | ||
| 107 | - return FTRADINGCURRID; | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - public void setFTRADINGCURRID(FTRADINGCURRID FTRADINGCURRID) { | ||
| 111 | - this.FTRADINGCURRID = FTRADINGCURRID; | ||
| 112 | - } | 105 | +// @JsonProperty("FTRADINGCURRID") |
| 106 | +// public FTRADINGCURRID getFTRADINGCURRID() { | ||
| 107 | +// return FTRADINGCURRID; | ||
| 108 | +// } | ||
| 109 | +// | ||
| 110 | +// public void setFTRADINGCURRID(FTRADINGCURRID FTRADINGCURRID) { | ||
| 111 | +// this.FTRADINGCURRID = FTRADINGCURRID; | ||
| 112 | +// } | ||
| 113 | 113 | ||
| 114 | @JsonProperty("FPROVINCIAL") | 114 | @JsonProperty("FPROVINCIAL") |
| 115 | public FPROVINCIAL getFPROVINCIAL() { | 115 | public FPROVINCIAL getFPROVINCIAL() { |
tax-central/src/main/java/com/diligrp/tax/central/manager/impl/KingDeeConnectionManager.java
| @@ -5,7 +5,6 @@ import com.diligrp.tax.central.model.TenantPipeline; | @@ -5,7 +5,6 @@ import com.diligrp.tax.central.model.TenantPipeline; | ||
| 5 | import com.diligrp.tax.central.type.SystemType; | 5 | import com.diligrp.tax.central.type.SystemType; |
| 6 | import com.diligrp.tax.central.utils.JsonUtils; | 6 | import com.diligrp.tax.central.utils.JsonUtils; |
| 7 | import com.kingdee.bos.webapi.entity.IdentifyInfo; | 7 | import com.kingdee.bos.webapi.entity.IdentifyInfo; |
| 8 | -import com.kingdee.bos.webapi.sdk.K3CloudApi; | ||
| 9 | import org.springframework.stereotype.Component; | 8 | import org.springframework.stereotype.Component; |
| 10 | 9 | ||
| 11 | /** | 10 | /** |
| @@ -14,15 +13,14 @@ import org.springframework.stereotype.Component; | @@ -14,15 +13,14 @@ import org.springframework.stereotype.Component; | ||
| 14 | * @Version: todo | 13 | * @Version: todo |
| 15 | */ | 14 | */ |
| 16 | @Component | 15 | @Component |
| 17 | -public class KingDeeConnectionManager extends AbstractConnectionManager<K3CloudApi> { | 16 | +public class KingDeeConnectionManager extends AbstractConnectionManager<IdentifyInfo> { |
| 18 | @Override | 17 | @Override |
| 19 | public SystemType markSystemType() { | 18 | public SystemType markSystemType() { |
| 20 | return SystemType.KING_DEE; | 19 | return SystemType.KING_DEE; |
| 21 | } | 20 | } |
| 22 | 21 | ||
| 23 | @Override | 22 | @Override |
| 24 | - public K3CloudApi getConnection(TenantPipeline tenantPipeline) { | ||
| 25 | - IdentifyInfo identifyInfo = JsonUtils.convertValue(tenantPipeline.getParams(), IdentifyInfo.class); | ||
| 26 | - return new K3CloudApi(identifyInfo); | 23 | + public IdentifyInfo getConnection(TenantPipeline tenantPipeline) { |
| 24 | + return JsonUtils.convertValue(tenantPipeline.getParams(), IdentifyInfo.class); | ||
| 27 | } | 25 | } |
| 28 | } | 26 | } |
tax-central/src/main/java/com/diligrp/tax/central/service/ITenantTaxService.java
| @@ -13,6 +13,15 @@ import java.util.List; | @@ -13,6 +13,15 @@ import java.util.List; | ||
| 13 | public interface ITenantTaxService { | 13 | public interface ITenantTaxService { |
| 14 | 14 | ||
| 15 | /** | 15 | /** |
| 16 | + * 获取租户 ID | ||
| 17 | + * | ||
| 18 | + * @param group 群 | ||
| 19 | + * @param entity 实体 | ||
| 20 | + * @return {@link Long } | ||
| 21 | + */ | ||
| 22 | + Long getTenantId(String group,String entity); | ||
| 23 | + | ||
| 24 | + /** | ||
| 16 | * 列出所有启用管道 | 25 | * 列出所有启用管道 |
| 17 | * | 26 | * |
| 18 | * @return {@link List }<{@link TenantPipeline }> | 27 | * @return {@link List }<{@link TenantPipeline }> |
tax-central/src/main/java/com/diligrp/tax/central/type/TaxSystemType.java
| @@ -17,6 +17,7 @@ public enum TaxSystemType { | @@ -17,6 +17,7 @@ public enum TaxSystemType { | ||
| 17 | REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL(5006, "远程服务调用异常"), | 17 | REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL(5006, "远程服务调用异常"), |
| 18 | INVALID_HTTP_REQUEST_PARAMS(5007, "无效的http请求参数"), | 18 | INVALID_HTTP_REQUEST_PARAMS(5007, "无效的http请求参数"), |
| 19 | NO_MATCHING_SET_OF_ACCOUNTS_FOUND(5008, "未找到匹配账套"), | 19 | NO_MATCHING_SET_OF_ACCOUNTS_FOUND(5008, "未找到匹配账套"), |
| 20 | + NO_TENANT_INFORMATION_FOUND(5009, "未找到匹配账套"), | ||
| 20 | ; | 21 | ; |
| 21 | public final int code; | 22 | public final int code; |
| 22 | public final String message; | 23 | public final String message; |
tax-central/src/main/java/com/diligrp/tax/central/utils/MappingUtils.java
| @@ -18,6 +18,7 @@ import java.util.HashMap; | @@ -18,6 +18,7 @@ import java.util.HashMap; | ||
| 18 | import java.util.List; | 18 | import java.util.List; |
| 19 | import java.util.Map; | 19 | import java.util.Map; |
| 20 | import java.util.function.Function; | 20 | import java.util.function.Function; |
| 21 | +import java.util.stream.Stream; | ||
| 21 | 22 | ||
| 22 | /** | 23 | /** |
| 23 | * @Author: zhangmeiyang | 24 | * @Author: zhangmeiyang |
| @@ -64,8 +65,12 @@ public class MappingUtils { | @@ -64,8 +65,12 @@ public class MappingUtils { | ||
| 64 | 65 | ||
| 65 | public static <T extends BaseDocument, R extends BaseMapping> R convertValue(T t, Class<R> clazz) { | 66 | public static <T extends BaseDocument, R extends BaseMapping> R convertValue(T t, Class<R> clazz) { |
| 66 | Map<String, Object> map = new HashMap<>(); | 67 | Map<String, Object> map = new HashMap<>(); |
| 67 | - Arrays.stream(t.getClass().getDeclaredFields()).filter(field -> field.isAnnotationPresent(Converter.class)).forEach(field -> configureField(t, field, map)); | ||
| 68 | - Arrays.stream(t.getClass().getDeclaredFields()).filter(field -> field.isAnnotationPresent(SubConverter.class)).forEach(field -> configureSubField(t, field, map)); | 68 | + Field[] allFields = Stream.concat( |
| 69 | + Arrays.stream(t.getClass().getDeclaredFields()), | ||
| 70 | + Arrays.stream(t.getClass().getSuperclass().getDeclaredFields()) | ||
| 71 | + ).toArray(Field[]::new); | ||
| 72 | + Arrays.stream(allFields).filter(field -> field.isAnnotationPresent(Converter.class)).forEach(field -> configureField(t, field, map)); | ||
| 73 | + Arrays.stream(allFields).filter(field -> field.isAnnotationPresent(SubConverter.class)).forEach(field -> configureSubField(t, field, map)); | ||
| 69 | return JsonUtils.convertValue(map, clazz); | 74 | return JsonUtils.convertValue(map, clazz); |
| 70 | } | 75 | } |
| 71 | } | 76 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/Builder.java
| 1 | package com.diligrp.tax.doc.demarcate; | 1 | package com.diligrp.tax.doc.demarcate; |
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.domain.BaseDocument; | 3 | import com.diligrp.tax.central.domain.BaseDocument; |
| 4 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 4 | import com.diligrp.tax.central.type.DocumentType; | 5 | import com.diligrp.tax.central.type.DocumentType; |
| 5 | 6 | ||
| 6 | /** | 7 | /** |
| @@ -20,8 +21,9 @@ public abstract class Builder<T extends BaseDocument> { | @@ -20,8 +21,9 @@ public abstract class Builder<T extends BaseDocument> { | ||
| 20 | /** | 21 | /** |
| 21 | * 建 | 22 | * 建 |
| 22 | * | 23 | * |
| 23 | - * @param body 身体 | 24 | + * @param body 身体 |
| 25 | + * @param pipeline | ||
| 24 | * @return {@link T } | 26 | * @return {@link T } |
| 25 | */ | 27 | */ |
| 26 | - public abstract T build(String body); | 28 | + public abstract T build(String body, TenantPipeline pipeline); |
| 27 | } | 29 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/kingdee/CustomerBuilder.java
| 1 | package com.diligrp.tax.doc.demarcate.kingdee; | 1 | package com.diligrp.tax.doc.demarcate.kingdee; |
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.domain.document.kingdee.basic.StandardCustomer; | 3 | import com.diligrp.tax.central.domain.document.kingdee.basic.StandardCustomer; |
| 4 | +import com.diligrp.tax.central.domain.document.kingdee.basic.item.Contact; | ||
| 4 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 5 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| 6 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 7 | +import com.diligrp.tax.central.model.TenantPipelineConfig; | ||
| 5 | import com.diligrp.tax.central.type.DocumentType; | 8 | import com.diligrp.tax.central.type.DocumentType; |
| 6 | import com.diligrp.tax.central.type.TaxSystemType; | 9 | import com.diligrp.tax.central.type.TaxSystemType; |
| 7 | import com.diligrp.tax.central.utils.JsonUtils; | 10 | import com.diligrp.tax.central.utils.JsonUtils; |
| 8 | import com.diligrp.tax.doc.demarcate.Builder; | 11 | import com.diligrp.tax.doc.demarcate.Builder; |
| 12 | +import lombok.extern.slf4j.Slf4j; | ||
| 9 | import org.springframework.stereotype.Component; | 13 | import org.springframework.stereotype.Component; |
| 10 | 14 | ||
| 15 | +import java.lang.reflect.Field; | ||
| 16 | +import java.util.Arrays; | ||
| 17 | +import java.util.List; | ||
| 18 | +import java.util.Map; | ||
| 11 | import java.util.Optional; | 19 | import java.util.Optional; |
| 20 | +import java.util.stream.Collectors; | ||
| 21 | +import java.util.stream.Stream; | ||
| 12 | 22 | ||
| 13 | /** | 23 | /** |
| 14 | * @Author: zhangmeiyang | 24 | * @Author: zhangmeiyang |
| @@ -16,6 +26,7 @@ import java.util.Optional; | @@ -16,6 +26,7 @@ import java.util.Optional; | ||
| 16 | * @Version: todo | 26 | * @Version: todo |
| 17 | */ | 27 | */ |
| 18 | @Component | 28 | @Component |
| 29 | +@Slf4j | ||
| 19 | public class CustomerBuilder extends Builder<StandardCustomer> { | 30 | public class CustomerBuilder extends Builder<StandardCustomer> { |
| 20 | 31 | ||
| 21 | @Override | 32 | @Override |
| @@ -24,13 +35,50 @@ public class CustomerBuilder extends Builder<StandardCustomer> { | @@ -24,13 +35,50 @@ public class CustomerBuilder extends Builder<StandardCustomer> { | ||
| 24 | } | 35 | } |
| 25 | 36 | ||
| 26 | @Override | 37 | @Override |
| 27 | - public StandardCustomer build(String body) { | 38 | + public StandardCustomer build(String body, TenantPipeline pipeline) { |
| 28 | StandardCustomer customer = JsonUtils.fromJsonString(body, StandardCustomer.class); | 39 | StandardCustomer customer = JsonUtils.fromJsonString(body, StandardCustomer.class); |
| 29 | Optional.ofNullable(customer.getContacts()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请完善联系人信息")); | 40 | Optional.ofNullable(customer.getContacts()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请完善联系人信息")); |
| 30 | - Optional.ofNullable(customer.getSystemDataId()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写系统数据ID")); | ||
| 31 | - //TODO 获取币别 | ||
| 32 | - | 41 | +// Optional.ofNullable(customer.getSystemDataId()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写系统数据ID")); |
| 42 | + List<TenantPipelineConfig> list = pipeline.getTenantPipelineConfigs().get(markDocument()); | ||
| 43 | + Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(customer, ts)); | ||
| 33 | //TODO 查询数据库的客户信息 如果存在 赋值id | 44 | //TODO 查询数据库的客户信息 如果存在 赋值id |
| 34 | return customer; | 45 | return customer; |
| 35 | } | 46 | } |
| 47 | + | ||
| 48 | + private void configureDefaultData(StandardCustomer customer, List<TenantPipelineConfig> list) { | ||
| 49 | + Map<String, String> kvMap = list.stream().collect(Collectors.toMap(TenantPipelineConfig::getConfigKey, TenantPipelineConfig::getConfigValue)); | ||
| 50 | + Field[] allFields = Stream.concat( | ||
| 51 | + Arrays.stream(customer.getClass().getDeclaredFields()), | ||
| 52 | + Arrays.stream(customer.getClass().getSuperclass().getDeclaredFields()) | ||
| 53 | + ).toArray(Field[]::new); | ||
| 54 | + Arrays.stream(allFields).forEach(field -> reflectField(customer, field, kvMap)); | ||
| 55 | + List<Contact> refundItems = customer.getContacts(); | ||
| 56 | + refundItems.forEach(item -> { | ||
| 57 | + Field[] declaredFields1 = item.getClass().getDeclaredFields(); | ||
| 58 | + Arrays.stream(declaredFields1).forEach(field -> reflectField(item, field, kvMap)); | ||
| 59 | + }); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + public static void reflectField(StandardCustomer object, Field field, Map<String, String> kvMap) { | ||
| 63 | + if (kvMap.containsKey(field.getName())) { | ||
| 64 | + field.setAccessible(true); | ||
| 65 | + try { | ||
| 66 | + field.set(object, kvMap.get(field.getName())); | ||
| 67 | + } catch (IllegalAccessException e) { | ||
| 68 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + | ||
| 74 | + public static void reflectField(Contact object, Field field, Map<String, String> kvMap) { | ||
| 75 | + if (kvMap.containsKey(field.getName())) { | ||
| 76 | + field.setAccessible(true); | ||
| 77 | + try { | ||
| 78 | + field.set(object, kvMap.get(field.getName())); | ||
| 79 | + } catch (IllegalAccessException e) { | ||
| 80 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + } | ||
| 36 | } | 84 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/kingdee/ReceiptBuilder.java
| 1 | package com.diligrp.tax.doc.demarcate.kingdee; | 1 | package com.diligrp.tax.doc.demarcate.kingdee; |
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.domain.document.kingdee.bill.ReceiptBill; | 3 | import com.diligrp.tax.central.domain.document.kingdee.bill.ReceiptBill; |
| 4 | +import com.diligrp.tax.central.domain.document.kingdee.bill.item.ReceiptItem; | ||
| 4 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 5 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| 6 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 7 | +import com.diligrp.tax.central.model.TenantPipelineConfig; | ||
| 5 | import com.diligrp.tax.central.type.DocumentType; | 8 | import com.diligrp.tax.central.type.DocumentType; |
| 6 | import com.diligrp.tax.central.type.TaxSystemType; | 9 | import com.diligrp.tax.central.type.TaxSystemType; |
| 7 | import com.diligrp.tax.central.utils.JsonUtils; | 10 | import com.diligrp.tax.central.utils.JsonUtils; |
| 8 | import com.diligrp.tax.doc.demarcate.Builder; | 11 | import com.diligrp.tax.doc.demarcate.Builder; |
| 9 | import org.springframework.stereotype.Component; | 12 | import org.springframework.stereotype.Component; |
| 10 | 13 | ||
| 14 | +import java.lang.reflect.Field; | ||
| 11 | import java.time.LocalDateTime; | 15 | import java.time.LocalDateTime; |
| 12 | import java.time.format.DateTimeFormatter; | 16 | import java.time.format.DateTimeFormatter; |
| 17 | +import java.util.Arrays; | ||
| 18 | +import java.util.List; | ||
| 19 | +import java.util.Map; | ||
| 13 | import java.util.Optional; | 20 | import java.util.Optional; |
| 21 | +import java.util.stream.Collectors; | ||
| 14 | 22 | ||
| 15 | /** | 23 | /** |
| 16 | * @Author: zhangmeiyang | 24 | * @Author: zhangmeiyang |
| @@ -25,14 +33,46 @@ public class ReceiptBuilder extends Builder<ReceiptBill> { | @@ -25,14 +33,46 @@ public class ReceiptBuilder extends Builder<ReceiptBill> { | ||
| 25 | } | 33 | } |
| 26 | 34 | ||
| 27 | @Override | 35 | @Override |
| 28 | - public ReceiptBill build(String body) { | 36 | + public ReceiptBill build(String body, TenantPipeline pipeline) { |
| 29 | ReceiptBill bill = JsonUtils.fromJsonString(body, ReceiptBill.class); | 37 | ReceiptBill bill = JsonUtils.fromJsonString(body, ReceiptBill.class); |
| 30 | - Optional.ofNullable(bill.getReceiptItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION,"请填写收款项目")); | 38 | + Optional.ofNullable(bill.getReceiptItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写收款项目")); |
| 31 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); | 39 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); |
| 32 | - //TODO 获取币别 | ||
| 33 | - //TODO 获取组织 | ||
| 34 | - //TODO 部门转换 | ||
| 35 | - //TODO 业务类型转换 | 40 | + List<TenantPipelineConfig> list = pipeline.getTenantPipelineConfigs().get(markDocument()); |
| 41 | + Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(bill, ts)); | ||
| 36 | return bill; | 42 | return bill; |
| 37 | } | 43 | } |
| 44 | + | ||
| 45 | + private void configureDefaultData(ReceiptBill bill, List<TenantPipelineConfig> list) { | ||
| 46 | + Map<String, String> kvMap = list.stream().collect(Collectors.toMap(TenantPipelineConfig::getConfigKey, TenantPipelineConfig::getConfigValue)); | ||
| 47 | + Field[] declaredFields = bill.getClass().getDeclaredFields(); | ||
| 48 | + Arrays.stream(declaredFields).forEach(field -> reflectField(bill, field, kvMap)); | ||
| 49 | + List<ReceiptItem> refundItems = bill.getReceiptItems(); | ||
| 50 | + refundItems.forEach(item -> { | ||
| 51 | + Field[] declaredFields1 = item.getClass().getDeclaredFields(); | ||
| 52 | + Arrays.stream(declaredFields1).forEach(field -> reflectField(item, field, kvMap)); | ||
| 53 | + }); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public static void reflectField(ReceiptBill object, Field field, Map<String, String> kvMap) { | ||
| 57 | + if (kvMap.containsKey(field.getName())) { | ||
| 58 | + field.setAccessible(true); | ||
| 59 | + try { | ||
| 60 | + field.set(object, kvMap.get(field.getName())); | ||
| 61 | + } catch (IllegalAccessException e) { | ||
| 62 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + | ||
| 68 | + public static void reflectField(ReceiptItem object, Field field, Map<String, String> kvMap) { | ||
| 69 | + if (kvMap.containsKey(field.getName())) { | ||
| 70 | + field.setAccessible(true); | ||
| 71 | + try { | ||
| 72 | + field.set(object, kvMap.get(field.getName())); | ||
| 73 | + } catch (IllegalAccessException e) { | ||
| 74 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | + } | ||
| 38 | } | 78 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/kingdee/ReceivableBuilder.java
| 1 | package com.diligrp.tax.doc.demarcate.kingdee; | 1 | package com.diligrp.tax.doc.demarcate.kingdee; |
| 2 | 2 | ||
| 3 | +import com.diligrp.tax.central.domain.document.kingdee.bill.ReceiptBill; | ||
| 4 | +import com.diligrp.tax.central.domain.document.kingdee.bill.ReceivableBill; | ||
| 5 | +import com.diligrp.tax.central.domain.document.kingdee.bill.item.ReceiptItem; | ||
| 6 | +import com.diligrp.tax.central.domain.document.kingdee.bill.item.ReceivableItem; | ||
| 3 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 7 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| 8 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 9 | +import com.diligrp.tax.central.model.TenantPipelineConfig; | ||
| 4 | import com.diligrp.tax.central.type.DocumentType; | 10 | import com.diligrp.tax.central.type.DocumentType; |
| 5 | import com.diligrp.tax.central.type.TaxSystemType; | 11 | import com.diligrp.tax.central.type.TaxSystemType; |
| 6 | import com.diligrp.tax.central.utils.JsonUtils; | 12 | import com.diligrp.tax.central.utils.JsonUtils; |
| 13 | +import com.diligrp.tax.central.utils.MappingUtils; | ||
| 7 | import com.diligrp.tax.doc.demarcate.Builder; | 14 | import com.diligrp.tax.doc.demarcate.Builder; |
| 8 | -import com.diligrp.tax.central.domain.document.kingdee.bill.ReceivableBill; | ||
| 9 | import org.springframework.stereotype.Component; | 15 | import org.springframework.stereotype.Component; |
| 10 | 16 | ||
| 17 | +import java.lang.reflect.Field; | ||
| 11 | import java.time.LocalDateTime; | 18 | import java.time.LocalDateTime; |
| 12 | import java.time.format.DateTimeFormatter; | 19 | import java.time.format.DateTimeFormatter; |
| 20 | +import java.util.Arrays; | ||
| 21 | +import java.util.List; | ||
| 22 | +import java.util.Map; | ||
| 13 | import java.util.Optional; | 23 | import java.util.Optional; |
| 24 | +import java.util.stream.Collectors; | ||
| 14 | 25 | ||
| 15 | /** | 26 | /** |
| 16 | * @Author: zhangmeiyang | 27 | * @Author: zhangmeiyang |
| @@ -26,14 +37,47 @@ public class ReceivableBuilder extends Builder<ReceivableBill> { | @@ -26,14 +37,47 @@ public class ReceivableBuilder extends Builder<ReceivableBill> { | ||
| 26 | } | 37 | } |
| 27 | 38 | ||
| 28 | @Override | 39 | @Override |
| 29 | - public ReceivableBill build(String body) { | 40 | + public ReceivableBill build(String body, TenantPipeline pipeline) { |
| 30 | ReceivableBill bill = JsonUtils.fromJsonString(body, ReceivableBill.class); | 41 | ReceivableBill bill = JsonUtils.fromJsonString(body, ReceivableBill.class); |
| 31 | - Optional.ofNullable(bill.getReceivableItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION,"请填写收款项目")); | 42 | + Optional.ofNullable(bill.getReceivableItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写收款项目")); |
| 32 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); | 43 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); |
| 33 | - //TODO 获取币别 | ||
| 34 | - //TODO 获取组织 | ||
| 35 | - //TODO 部门转换 | ||
| 36 | - //TODO 业务类型转换 | 44 | + List<TenantPipelineConfig> list = pipeline.getTenantPipelineConfigs().get(markDocument()); |
| 45 | + Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(bill, ts)); | ||
| 46 | + //todo动态规则转换 | ||
| 37 | return bill; | 47 | return bill; |
| 38 | } | 48 | } |
| 49 | + | ||
| 50 | + private void configureDefaultData(ReceivableBill bill, List<TenantPipelineConfig> list) { | ||
| 51 | + Map<String, String> kvMap = list.stream().collect(Collectors.toMap(TenantPipelineConfig::getConfigKey, TenantPipelineConfig::getConfigValue)); | ||
| 52 | + Field[] declaredFields = bill.getClass().getDeclaredFields(); | ||
| 53 | + Arrays.stream(declaredFields).forEach(field -> reflectField(bill, field, kvMap)); | ||
| 54 | + List<ReceivableItem> refundItems = bill.getReceivableItems(); | ||
| 55 | + refundItems.forEach(item -> { | ||
| 56 | + Field[] declaredFields1 = item.getClass().getDeclaredFields(); | ||
| 57 | + Arrays.stream(declaredFields1).forEach(field -> reflectField(item, field, kvMap)); | ||
| 58 | + }); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + public static void reflectField(ReceivableBill object, Field field, Map<String, String> kvMap) { | ||
| 62 | + if (kvMap.containsKey(field.getName())) { | ||
| 63 | + field.setAccessible(true); | ||
| 64 | + try { | ||
| 65 | + field.set(object, kvMap.get(field.getName())); | ||
| 66 | + } catch (IllegalAccessException e) { | ||
| 67 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + | ||
| 73 | + public static void reflectField(ReceivableItem object, Field field, Map<String, String> kvMap) { | ||
| 74 | + if (kvMap.containsKey(field.getName())) { | ||
| 75 | + field.setAccessible(true); | ||
| 76 | + try { | ||
| 77 | + field.set(object, kvMap.get(field.getName())); | ||
| 78 | + } catch (IllegalAccessException e) { | ||
| 79 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + } | ||
| 39 | } | 83 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/demarcate/kingdee/RefundBuilder.java
| 1 | package com.diligrp.tax.doc.demarcate.kingdee; | 1 | package com.diligrp.tax.doc.demarcate.kingdee; |
| 2 | 2 | ||
| 3 | +import com.diligrp.tax.central.domain.document.kingdee.bill.ReceivableBill; | ||
| 3 | import com.diligrp.tax.central.domain.document.kingdee.bill.RefundBill; | 4 | import com.diligrp.tax.central.domain.document.kingdee.bill.RefundBill; |
| 5 | +import com.diligrp.tax.central.domain.document.kingdee.bill.item.ReceivableItem; | ||
| 6 | +import com.diligrp.tax.central.domain.document.kingdee.bill.item.RefundItem; | ||
| 4 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 7 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| 8 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 9 | +import com.diligrp.tax.central.model.TenantPipelineConfig; | ||
| 5 | import com.diligrp.tax.central.type.DocumentType; | 10 | import com.diligrp.tax.central.type.DocumentType; |
| 6 | import com.diligrp.tax.central.type.TaxSystemType; | 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.central.utils.MappingUtils; | ||
| 8 | import com.diligrp.tax.doc.demarcate.Builder; | 14 | import com.diligrp.tax.doc.demarcate.Builder; |
| 9 | import org.springframework.stereotype.Component; | 15 | import org.springframework.stereotype.Component; |
| 10 | 16 | ||
| 17 | +import java.lang.reflect.Field; | ||
| 11 | import java.time.LocalDateTime; | 18 | import java.time.LocalDateTime; |
| 12 | import java.time.format.DateTimeFormatter; | 19 | import java.time.format.DateTimeFormatter; |
| 20 | +import java.util.Arrays; | ||
| 21 | +import java.util.List; | ||
| 22 | +import java.util.Map; | ||
| 13 | import java.util.Optional; | 23 | import java.util.Optional; |
| 24 | +import java.util.stream.Collectors; | ||
| 14 | 25 | ||
| 15 | /** | 26 | /** |
| 16 | * @Author: zhangmeiyang | 27 | * @Author: zhangmeiyang |
| @@ -26,14 +37,47 @@ public class RefundBuilder extends Builder<RefundBill> { | @@ -26,14 +37,47 @@ public class RefundBuilder extends Builder<RefundBill> { | ||
| 26 | } | 37 | } |
| 27 | 38 | ||
| 28 | @Override | 39 | @Override |
| 29 | - public RefundBill build(String body) { | 40 | + public RefundBill build(String body, TenantPipeline pipeline) { |
| 30 | RefundBill bill = JsonUtils.fromJsonString(body, RefundBill.class); | 41 | RefundBill bill = JsonUtils.fromJsonString(body, RefundBill.class); |
| 31 | Optional.ofNullable(bill.getRefundItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写收款项目")); | 42 | Optional.ofNullable(bill.getRefundItems()).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.MISSING_BUSINESS_INFORMATION, "请填写收款项目")); |
| 32 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); | 43 | bill.setCreateTime(Optional.ofNullable(bill.getCreateTime()).orElse(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))); |
| 33 | - //TODO 获取币别 | ||
| 34 | - //TODO 获取组织 | ||
| 35 | - //TODO 部门转换 | ||
| 36 | - //TODO 业务类型转换 | 44 | + List<TenantPipelineConfig> list = pipeline.getTenantPipelineConfigs().get(markDocument()); |
| 45 | + Optional.ofNullable(list).ifPresent(ts -> configureDefaultData(bill, ts)); | ||
| 46 | + //todo动态规则转换 | ||
| 37 | return bill; | 47 | return bill; |
| 38 | } | 48 | } |
| 49 | + | ||
| 50 | + private void configureDefaultData(RefundBill bill, List<TenantPipelineConfig> list) { | ||
| 51 | + Map<String, String> kvMap = list.stream().collect(Collectors.toMap(TenantPipelineConfig::getConfigKey, TenantPipelineConfig::getConfigValue)); | ||
| 52 | + Field[] declaredFields = bill.getClass().getDeclaredFields(); | ||
| 53 | + Arrays.stream(declaredFields).forEach(field -> reflectField(bill, field, kvMap)); | ||
| 54 | + List<RefundItem> refundItems = bill.getRefundItems(); | ||
| 55 | + refundItems.forEach(item -> { | ||
| 56 | + Field[] declaredFields1 = item.getClass().getDeclaredFields(); | ||
| 57 | + Arrays.stream(declaredFields1).forEach(field -> reflectField(item, field, kvMap)); | ||
| 58 | + }); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + public static void reflectField(RefundBill object, Field field, Map<String, String> kvMap) { | ||
| 62 | + if (kvMap.containsKey(field.getName())) { | ||
| 63 | + field.setAccessible(true); | ||
| 64 | + try { | ||
| 65 | + field.set(object, kvMap.get(field.getName())); | ||
| 66 | + } catch (IllegalAccessException e) { | ||
| 67 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + | ||
| 73 | + public static void reflectField(RefundItem object, Field field, Map<String, String> kvMap) { | ||
| 74 | + if (kvMap.containsKey(field.getName())) { | ||
| 75 | + field.setAccessible(true); | ||
| 76 | + try { | ||
| 77 | + field.set(object, kvMap.get(field.getName())); | ||
| 78 | + } catch (IllegalAccessException e) { | ||
| 79 | + throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT, e.getMessage()); | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + } | ||
| 39 | } | 83 | } |
tax-doc/src/main/java/com/diligrp/tax/doc/process/kingdee/InitializeProcessor.java
| 1 | package com.diligrp.tax.doc.process.kingdee; | 1 | package com.diligrp.tax.doc.process.kingdee; |
| 2 | 2 | ||
| 3 | +import com.diligrp.tax.central.context.TenantStorageContext; | ||
| 3 | import com.diligrp.tax.central.domain.MessageContext; | 4 | import com.diligrp.tax.central.domain.MessageContext; |
| 4 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 5 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| 6 | +import com.diligrp.tax.central.model.TenantPipeline; | ||
| 5 | import com.diligrp.tax.central.process.AbstractProcessor; | 7 | import com.diligrp.tax.central.process.AbstractProcessor; |
| 6 | import com.diligrp.tax.central.type.DocumentType; | 8 | import com.diligrp.tax.central.type.DocumentType; |
| 7 | import com.diligrp.tax.central.type.SystemType; | 9 | import com.diligrp.tax.central.type.SystemType; |
| @@ -12,6 +14,8 @@ import lombok.extern.slf4j.Slf4j; | @@ -12,6 +14,8 @@ import lombok.extern.slf4j.Slf4j; | ||
| 12 | import org.springframework.core.annotation.Order; | 14 | import org.springframework.core.annotation.Order; |
| 13 | import org.springframework.stereotype.Component; | 15 | import org.springframework.stereotype.Component; |
| 14 | 16 | ||
| 17 | +import java.util.Optional; | ||
| 18 | + | ||
| 15 | 19 | ||
| 16 | /** | 20 | /** |
| 17 | * 初始化处理器 | 21 | * 初始化处理器 |
| @@ -31,8 +35,10 @@ public class InitializeProcessor extends AbstractProcessor { | @@ -31,8 +35,10 @@ public class InitializeProcessor extends AbstractProcessor { | ||
| 31 | if (!system.documentTypes.contains(from)) { | 35 | if (!system.documentTypes.contains(from)) { |
| 32 | throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT); | 36 | throw new TaxAgentServiceException(TaxSystemType.BUSINESS_MATCHES_ARE_INCORRECT); |
| 33 | } | 37 | } |
| 38 | + Optional<TenantPipeline> option = TenantStorageContext.getTenantPipeline(messageContext.getTenantId(), system, messageContext.getPipelineCode()); | ||
| 39 | + TenantPipeline pipeline = option.orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_MATCHING_SET_OF_ACCOUNTS_FOUND)); | ||
| 34 | Builder<?> builder = DocumentContext.CONTEXT.get(from); | 40 | Builder<?> builder = DocumentContext.CONTEXT.get(from); |
| 35 | - messageContext.setDocumentObject(builder.build(messageContext.getMsgBody())); | 41 | + messageContext.setDocumentObject(builder.build(messageContext.getMsgBody(),pipeline)); |
| 36 | return messageContext; | 42 | return messageContext; |
| 37 | } | 43 | } |
| 38 | } | 44 | } |
tax-proxy/src/main/java/com/diligrp/tax/proxy/demarcate/Sender.java
| @@ -3,7 +3,7 @@ package com.diligrp.tax.proxy.demarcate; | @@ -3,7 +3,7 @@ package com.diligrp.tax.proxy.demarcate; | ||
| 3 | import com.diligrp.tax.central.domain.BaseMapping; | 3 | import com.diligrp.tax.central.domain.BaseMapping; |
| 4 | import com.diligrp.tax.central.domain.BaseProxy; | 4 | import com.diligrp.tax.central.domain.BaseProxy; |
| 5 | import com.diligrp.tax.central.type.DocumentType; | 5 | import com.diligrp.tax.central.type.DocumentType; |
| 6 | -import com.kingdee.bos.webapi.sdk.K3CloudApi; | 6 | +import com.kingdee.bos.webapi.entity.IdentifyInfo; |
| 7 | 7 | ||
| 8 | /** | 8 | /** |
| 9 | * @Author: zhangmeiyang | 9 | * @Author: zhangmeiyang |
| @@ -22,8 +22,8 @@ public abstract class Sender<T extends BaseProxy> { | @@ -22,8 +22,8 @@ public abstract class Sender<T extends BaseProxy> { | ||
| 22 | * 变换 | 22 | * 变换 |
| 23 | * | 23 | * |
| 24 | * @param mappingObject 映射对象 | 24 | * @param mappingObject 映射对象 |
| 25 | - * @param connection | 25 | + * @param identifyInfo |
| 26 | * @return {@link T } | 26 | * @return {@link T } |
| 27 | */ | 27 | */ |
| 28 | - public abstract T send(BaseMapping mappingObject, K3CloudApi connection); | 28 | + public abstract T send(BaseMapping mappingObject, IdentifyInfo identifyInfo); |
| 29 | } | 29 | } |
tax-proxy/src/main/java/com/diligrp/tax/proxy/demarcate/kingdee/CustomerSender.java
| @@ -2,6 +2,7 @@ package com.diligrp.tax.proxy.demarcate.kingdee; | @@ -2,6 +2,7 @@ package com.diligrp.tax.proxy.demarcate.kingdee; | ||
| 2 | 2 | ||
| 3 | import com.diligrp.tax.central.domain.BaseMapping; | 3 | import com.diligrp.tax.central.domain.BaseMapping; |
| 4 | import com.diligrp.tax.central.domain.mapping.kingdee.CustomerMapping; | 4 | import com.diligrp.tax.central.domain.mapping.kingdee.CustomerMapping; |
| 5 | +import com.diligrp.tax.central.domain.mapping.kingdee.base.FContactId; | ||
| 5 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FT_BD_CUSTLOCATION; | 6 | import com.diligrp.tax.central.domain.mapping.kingdee.base.FT_BD_CUSTLOCATION; |
| 6 | import com.diligrp.tax.central.domain.proxy.kingdee.CustomerProxy; | 7 | import com.diligrp.tax.central.domain.proxy.kingdee.CustomerProxy; |
| 7 | import com.diligrp.tax.central.exception.TaxAgentServiceException; | 8 | import com.diligrp.tax.central.exception.TaxAgentServiceException; |
| @@ -35,22 +36,12 @@ public class CustomerSender extends Sender<CustomerProxy> { | @@ -35,22 +36,12 @@ public class CustomerSender extends Sender<CustomerProxy> { | ||
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | @Override | 38 | @Override |
| 38 | - public CustomerProxy send(BaseMapping mappingObject, K3CloudApi connection) { | 39 | + public CustomerProxy send(BaseMapping mappingObject, IdentifyInfo identifyInfo) { |
| 39 | CustomerMapping mapping = (CustomerMapping) mappingObject; | 40 | CustomerMapping mapping = (CustomerMapping) mappingObject; |
| 40 | - List<FT_BD_CUSTLOCATION> contacts = mapping.getFT_BD_CUSTLOCATION(); | ||
| 41 | - contacts.forEach(contact -> { | ||
| 42 | - Map<String, Object> model = JsonUtils.convertValue(contact, new TypeReference<>() { | ||
| 43 | - }); | ||
| 44 | - RepoRet<?> repoRet = KingDeeHelper.nonAuditSend(model, connection, "BD_CommonContact"); | ||
| 45 | - SuccessEntity first = repoRet.getResult().getResponseStatus().getSuccessEntitys().getFirst(); | ||
| 46 | - contact.getFContactId().setFNUMBER(first.getNumber()); | ||
| 47 | - }); | 41 | + mapping.setFT_BD_CUSTLOCATION(handleContact(identifyInfo, mapping)); |
| 48 | // 联系人新增 | 42 | // 联系人新增 |
| 49 | - Optional.ofNullable(mapping.getFCUSTID()) | ||
| 50 | - .filter(e -> !e.isEmpty()) | ||
| 51 | - .ifPresent(e -> KingDeeHelper.unAuditSend(e, connection, markDocument().value)); | ||
| 52 | - RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() { | ||
| 53 | - }), connection, markDocument().value); | 43 | + Optional.ofNullable(mapping.getFCUSTID()).filter(e -> !e.isEmpty()).ifPresent(e -> KingDeeHelper.unAuditSend(e, new K3CloudApi(identifyInfo), markDocument().value)); |
| 44 | + RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() {}), new K3CloudApi(identifyInfo), markDocument().value); | ||
| 54 | //联系人新增和更新完成 | 45 | //联系人新增和更新完成 |
| 55 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); | 46 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); |
| 56 | if (successEntity.isEmpty()) { | 47 | if (successEntity.isEmpty()) { |
| @@ -62,4 +53,25 @@ public class CustomerSender extends Sender<CustomerProxy> { | @@ -62,4 +53,25 @@ public class CustomerSender extends Sender<CustomerProxy> { | ||
| 62 | proxy.setThirdPartyCode(first.getNumber()); | 53 | proxy.setThirdPartyCode(first.getNumber()); |
| 63 | return proxy; | 54 | return proxy; |
| 64 | } | 55 | } |
| 56 | + | ||
| 57 | + private List<FT_BD_CUSTLOCATION> handleContact(IdentifyInfo identifyInfo, CustomerMapping mapping) { | ||
| 58 | + List<FT_BD_CUSTLOCATION> contacts = mapping.getFT_BD_CUSTLOCATION(); | ||
| 59 | + return contacts.stream().map(contact -> customerConvert(contact,identifyInfo)).toList(); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + private FT_BD_CUSTLOCATION customerConvert(FT_BD_CUSTLOCATION contact,IdentifyInfo identifyInfo) { | ||
| 63 | + var customerLocation = new FT_BD_CUSTLOCATION(); | ||
| 64 | + customerLocation.setFBizAddress(contact.getFBizAddress()); | ||
| 65 | + customerLocation.setFCompanyType(contact.getFCompanyType()); | ||
| 66 | + customerLocation.setFMOBILEPHONE(contact.getFMOBILEPHONE()); | ||
| 67 | + customerLocation.setFName(contact.getFName()); | ||
| 68 | + Map<String, Object> model = JsonUtils.convertValue(customerLocation, new TypeReference<>() {}); | ||
| 69 | + RepoRet<?> repoRet = KingDeeHelper.nonAuditSend(model, new K3CloudApi(identifyInfo), "BD_CommonContact"); | ||
| 70 | + SuccessEntity first = repoRet.getResult().getResponseStatus().getSuccessEntitys().getFirst(); | ||
| 71 | + var res = new FT_BD_CUSTLOCATION(); | ||
| 72 | + FContactId fContactId = new FContactId(); | ||
| 73 | + fContactId.setFNUMBER(first.getId()); | ||
| 74 | + res.setFContactId(fContactId); | ||
| 75 | + return res; | ||
| 76 | + } | ||
| 65 | } | 77 | } |
tax-proxy/src/main/java/com/diligrp/tax/proxy/demarcate/kingdee/ReceiptSender.java
| @@ -34,13 +34,14 @@ public class ReceiptSender extends Sender<ReceiptProxy> { | @@ -34,13 +34,14 @@ public class ReceiptSender extends Sender<ReceiptProxy> { | ||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | @Override | 36 | @Override |
| 37 | - public ReceiptProxy send(BaseMapping mappingObject, K3CloudApi connection) { | 37 | + public ReceiptProxy send(BaseMapping mappingObject, IdentifyInfo identifyInfo) { |
| 38 | ReceiptMapping mapping = (ReceiptMapping) mappingObject; | 38 | ReceiptMapping mapping = (ReceiptMapping) mappingObject; |
| 39 | - List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, connection); | 39 | + List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, new K3CloudApi(identifyInfo)); |
| 40 | if (!infos.isEmpty()) { | 40 | if (!infos.isEmpty()) { |
| 41 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); | 41 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); |
| 42 | } | 42 | } |
| 43 | - RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() {}), connection, markDocument().value); | 43 | + RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() { |
| 44 | + }), new K3CloudApi(identifyInfo), markDocument().value); | ||
| 44 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); | 45 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); |
| 45 | if (successEntity.isEmpty()) { | 46 | if (successEntity.isEmpty()) { |
| 46 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); | 47 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); |
tax-proxy/src/main/java/com/diligrp/tax/proxy/demarcate/kingdee/ReceivableSender.java
| @@ -32,15 +32,15 @@ public class ReceivableSender extends Sender<ReceivableProxy> { | @@ -32,15 +32,15 @@ public class ReceivableSender extends Sender<ReceivableProxy> { | ||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | @Override | 34 | @Override |
| 35 | - public ReceivableProxy send(BaseMapping mappingObject, K3CloudApi connection) { | 35 | + public ReceivableProxy send(BaseMapping mappingObject, IdentifyInfo identifyInfo) { |
| 36 | ReceivableMapping mapping = (ReceivableMapping) mappingObject; | 36 | ReceivableMapping mapping = (ReceivableMapping) mappingObject; |
| 37 | - List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, connection); | 37 | + List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, new K3CloudApi(identifyInfo)); |
| 38 | if (!infos.isEmpty()) { | 38 | if (!infos.isEmpty()) { |
| 39 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); | 39 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); |
| 40 | } | 40 | } |
| 41 | Map<String, Object> model = JsonUtils.convertValue(mapping, new TypeReference<>() { | 41 | Map<String, Object> model = JsonUtils.convertValue(mapping, new TypeReference<>() { |
| 42 | }); | 42 | }); |
| 43 | - RepoRet<?> repoRet = KingDeeHelper.auditSend(model, connection, markDocument().value); | 43 | + RepoRet<?> repoRet = KingDeeHelper.auditSend(model, new K3CloudApi(identifyInfo), markDocument().value); |
| 44 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); | 44 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); |
| 45 | if (successEntity.isEmpty()) { | 45 | if (successEntity.isEmpty()) { |
| 46 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); | 46 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); |
tax-proxy/src/main/java/com/diligrp/tax/proxy/demarcate/kingdee/RefundSender.java
| @@ -34,13 +34,14 @@ public class RefundSender extends Sender<RefundProxy> { | @@ -34,13 +34,14 @@ public class RefundSender extends Sender<RefundProxy> { | ||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | @Override | 36 | @Override |
| 37 | - public RefundProxy send(BaseMapping mappingObject, K3CloudApi connection) { | 37 | + public RefundProxy send(BaseMapping mappingObject, IdentifyInfo identifyInfo) { |
| 38 | RefundMapping mapping = (RefundMapping) mappingObject; | 38 | RefundMapping mapping = (RefundMapping) mappingObject; |
| 39 | - List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, connection); | 39 | + List<Object> infos = KingDeeHelper.querySend(mapping, markDocument().value, new K3CloudApi(identifyInfo)); |
| 40 | if (!infos.isEmpty()) { | 40 | if (!infos.isEmpty()) { |
| 41 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); | 41 | throw new TaxAgentServiceException(TaxSystemType.REPEAT_SENDING); |
| 42 | } | 42 | } |
| 43 | - RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() {}), connection, markDocument().value); | 43 | + RepoRet<?> repoRet = KingDeeHelper.auditSend(JsonUtils.convertValue(mapping, new TypeReference<>() { |
| 44 | + }), new K3CloudApi(identifyInfo), markDocument().value); | ||
| 44 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); | 45 | ArrayList<SuccessEntity> successEntity = repoRet.getResult().getResponseStatus().getSuccessEntitys(); |
| 45 | if (successEntity.isEmpty()) { | 46 | if (successEntity.isEmpty()) { |
| 46 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); | 47 | throw new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL); |
tax-proxy/src/main/java/com/diligrp/tax/proxy/helper/KingDeeHelper.java
| @@ -90,6 +90,7 @@ public class KingDeeHelper { | @@ -90,6 +90,7 @@ public class KingDeeHelper { | ||
| 90 | message.setIsAutoAdjustField(true); | 90 | message.setIsAutoAdjustField(true); |
| 91 | var body = JsonUtils.toJsonString(message); | 91 | var body = JsonUtils.toJsonString(message); |
| 92 | try { | 92 | try { |
| 93 | + log.info("kingdee auditSend: {}", body); | ||
| 93 | String res; | 94 | String res; |
| 94 | res = api.save(formId, body); | 95 | res = api.save(formId, body); |
| 95 | log.info("金蝶审核接口完成,formId={},res={}", formId, res); | 96 | log.info("金蝶审核接口完成,formId={},res={}", formId, res); |
tax-proxy/src/main/java/com/diligrp/tax/proxy/process/kingdee/ProxyProcessor.java
| @@ -12,6 +12,7 @@ import com.diligrp.tax.central.type.DocumentType; | @@ -12,6 +12,7 @@ import com.diligrp.tax.central.type.DocumentType; | ||
| 12 | import com.diligrp.tax.central.type.SystemType; | 12 | import com.diligrp.tax.central.type.SystemType; |
| 13 | import com.diligrp.tax.central.type.TaxSystemType; | 13 | import com.diligrp.tax.central.type.TaxSystemType; |
| 14 | import com.diligrp.tax.proxy.context.ProxyContext; | 14 | import com.diligrp.tax.proxy.context.ProxyContext; |
| 15 | +import com.kingdee.bos.webapi.entity.IdentifyInfo; | ||
| 15 | import com.kingdee.bos.webapi.sdk.K3CloudApi; | 16 | import com.kingdee.bos.webapi.sdk.K3CloudApi; |
| 16 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
| 17 | import org.springframework.core.annotation.Order; | 18 | import org.springframework.core.annotation.Order; |
| @@ -32,11 +33,11 @@ public class ProxyProcessor extends AbstractProcessor { | @@ -32,11 +33,11 @@ public class ProxyProcessor extends AbstractProcessor { | ||
| 32 | public MessageContext process(MessageContext messageContext) { | 33 | public MessageContext process(MessageContext messageContext) { |
| 33 | DocumentType from = DocumentType.from(messageContext.getDocumentType()); | 34 | DocumentType from = DocumentType.from(messageContext.getDocumentType()); |
| 34 | SystemType systemType = SystemType.from(messageContext.getSystemType()); | 35 | SystemType systemType = SystemType.from(messageContext.getSystemType()); |
| 35 | - Optional<TenantPipeline> option = TenantStorageContext.getTenantPipeline(messageContext.getTenantId(), systemType, from.value); | 36 | + Optional<TenantPipeline> option = TenantStorageContext.getTenantPipeline(messageContext.getTenantId(), systemType, messageContext.getPipelineCode()); |
| 36 | TenantPipeline pipeline = option.orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_MATCHING_SET_OF_ACCOUNTS_FOUND)); | 37 | TenantPipeline pipeline = option.orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.NO_MATCHING_SET_OF_ACCOUNTS_FOUND)); |
| 37 | AbstractConnectionManager<?> abstractConnectionManager = ConnectionContext.CONNECTION_MAP.get(systemType); | 38 | AbstractConnectionManager<?> abstractConnectionManager = ConnectionContext.CONNECTION_MAP.get(systemType); |
| 38 | - K3CloudApi connection = (K3CloudApi) abstractConnectionManager.getConnection(pipeline); | ||
| 39 | - BaseProxy send = ProxyContext.CONTEXT.get(from).send(messageContext.getMappingObject(), connection); | 39 | + IdentifyInfo identifyInfo = (IdentifyInfo) abstractConnectionManager.getConnection(pipeline); |
| 40 | + BaseProxy send = ProxyContext.CONTEXT.get(from).send(messageContext.getMappingObject(), identifyInfo); | ||
| 40 | messageContext.setProxyObject(send); | 41 | messageContext.setProxyObject(send); |
| 41 | return messageContext; | 42 | return messageContext; |
| 42 | } | 43 | } |
tax-storage/src/main/java/com/diligrp/tax/storage/service/TenantTaxService.java
| 1 | package com.diligrp.tax.storage.service; | 1 | package com.diligrp.tax.storage.service; |
| 2 | 2 | ||
| 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 4 | +import com.diligrp.tax.central.exception.TaxAgentServiceException; | ||
| 4 | import com.diligrp.tax.central.model.TenantPipeline; | 5 | import com.diligrp.tax.central.model.TenantPipeline; |
| 5 | import com.diligrp.tax.central.model.TenantPipelineConfig; | 6 | import com.diligrp.tax.central.model.TenantPipelineConfig; |
| 6 | import com.diligrp.tax.central.service.ITenantTaxService; | 7 | import com.diligrp.tax.central.service.ITenantTaxService; |
| 7 | import com.diligrp.tax.central.type.SystemType; | 8 | import com.diligrp.tax.central.type.SystemType; |
| 9 | +import com.diligrp.tax.central.type.TaxSystemType; | ||
| 8 | import com.diligrp.tax.central.utils.JsonUtils; | 10 | import com.diligrp.tax.central.utils.JsonUtils; |
| 9 | import com.diligrp.tax.storage.domain.TaxPipeline; | 11 | import com.diligrp.tax.storage.domain.TaxPipeline; |
| 10 | import com.diligrp.tax.storage.domain.TaxPipelineConfig; | 12 | import com.diligrp.tax.storage.domain.TaxPipelineConfig; |
| 13 | +import com.diligrp.tax.storage.domain.TaxTenant; | ||
| 11 | import com.diligrp.tax.storage.repo.TaxPipelineConfigRepository; | 14 | import com.diligrp.tax.storage.repo.TaxPipelineConfigRepository; |
| 12 | import com.diligrp.tax.storage.repo.TaxPipelineRepository; | 15 | import com.diligrp.tax.storage.repo.TaxPipelineRepository; |
| 16 | +import com.diligrp.tax.storage.repo.TaxTenantRepository; | ||
| 13 | import com.diligrp.tax.storage.type.StateType; | 17 | import com.diligrp.tax.storage.type.StateType; |
| 14 | import jakarta.annotation.Resource; | 18 | import jakarta.annotation.Resource; |
| 15 | import org.springframework.stereotype.Service; | 19 | import org.springframework.stereotype.Service; |
| 16 | 20 | ||
| 17 | import java.util.List; | 21 | import java.util.List; |
| 22 | +import java.util.Optional; | ||
| 18 | 23 | ||
| 19 | /** | 24 | /** |
| 20 | * @Author: zhangmeiyang | 25 | * @Author: zhangmeiyang |
| @@ -25,12 +30,24 @@ import java.util.List; | @@ -25,12 +30,24 @@ import java.util.List; | ||
| 25 | public class TenantTaxService implements ITenantTaxService { | 30 | public class TenantTaxService implements ITenantTaxService { |
| 26 | 31 | ||
| 27 | @Resource | 32 | @Resource |
| 33 | + private TaxTenantRepository taxTenantRepository; | ||
| 34 | + | ||
| 35 | + @Resource | ||
| 28 | private TaxPipelineRepository taxPipelineRepository; | 36 | private TaxPipelineRepository taxPipelineRepository; |
| 29 | 37 | ||
| 30 | @Resource | 38 | @Resource |
| 31 | private TaxPipelineConfigRepository taxPipelineConfigRepository; | 39 | private TaxPipelineConfigRepository taxPipelineConfigRepository; |
| 32 | 40 | ||
| 33 | @Override | 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 | ||
| 34 | public List<TenantPipeline> listAllEnablePipeline() { | 51 | public List<TenantPipeline> listAllEnablePipeline() { |
| 35 | LambdaQueryWrapper<TaxPipeline> queryWrapper = new LambdaQueryWrapper<>(); | 52 | LambdaQueryWrapper<TaxPipeline> queryWrapper = new LambdaQueryWrapper<>(); |
| 36 | queryWrapper.eq(TaxPipeline::getState, StateType.ENABLE.value); | 53 | queryWrapper.eq(TaxPipeline::getState, StateType.ENABLE.value); |