Commit 94a20d0add5efd0e52b662e11c7af04b50ca1af8

Authored by zhangmeiyang
1 parent 14200344

金蝶多对一费用项优化,应收单单据创建优化

Showing 18 changed files with 415 additions and 144 deletions
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/demarcate/AbstractBasicHandler.java
... ... @@ -11,6 +11,7 @@ import com.diligrp.etrade.thirdparty.mapper.TransMapper;
11 11 import com.diligrp.etrade.thirdparty.type.BasicEnum;
12 12 import com.kingdee.bos.webapi.entity.IdentifyInfo;
13 13 import jakarta.annotation.Resource;
  14 +import org.springframework.transaction.annotation.Transactional;
14 15 import org.springframework.util.ObjectUtils;
15 16  
16 17 import java.util.Arrays;
... ... @@ -53,6 +54,16 @@ public abstract class AbstractBasicHandler<T extends BaseSourceCo> implements Ty
53 54 recordMapper.recordTheMappingData(mapping);
54 55 }
55 56  
  57 + @Transactional
  58 + protected void deleteMapping(Long marketId, String systemCode, Long systemDataId){
  59 + var mapping = new MappingDto();
  60 + mapping.setMarketId(marketId);
  61 + mapping.setBusiness(getType().code);
  62 + mapping.setSystemCode(systemCode);
  63 + mapping.setSystemDataId(systemDataId);
  64 + recordMapper.deleteTheMappingData(mapping);
  65 + }
  66 +
56 67 /**
57 68 * 获取身份信息
58 69 *
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/demarcate/AbstractBillHandler.java
1 1 package com.diligrp.etrade.thirdparty.demarcate;
2 2  
3   -import com.diligrp.etrade.core.util.JsonUtils;
4 3 import com.diligrp.etrade.thirdparty.component.TransferComponent;
5 4 import com.diligrp.etrade.thirdparty.domain.co.business.BaseBillCo;
6 5 import com.diligrp.etrade.thirdparty.domain.dto.BusinessDetailDto;
7 6 import com.diligrp.etrade.thirdparty.domain.dto.BusinessDto;
8 7 import com.diligrp.etrade.thirdparty.domain.dto.ClientDto;
9   -import com.diligrp.etrade.thirdparty.domain.model.FEntityDetail;
10 8 import com.diligrp.etrade.thirdparty.error.ThirdPartyException;
11 9 import com.diligrp.etrade.thirdparty.mapper.TransMapper;
12 10 import com.diligrp.etrade.thirdparty.type.*;
13   -import com.diligrp.etrade.thirdparty.utils.PurchaseOrderApiUtils;
14 11 import com.kingdee.bos.webapi.entity.IdentifyInfo;
15 12 import jakarta.annotation.Resource;
16 13 import org.springframework.util.ObjectUtils;
17 14  
18   -import java.math.BigDecimal;
19 15 import java.util.ArrayList;
20 16 import java.util.HashMap;
21 17 import java.util.List;
... ... @@ -53,6 +49,55 @@ public abstract class AbstractBillHandler<T extends BaseBillCo> implements TypeM
53 49 }
54 50  
55 51 /**
  52 + * 处理
  53 + *
  54 + * @param json JSON 格式
  55 + * @param marketId 市场 ID
  56 + * @param systemCode 系统代码
  57 + * @throws Exception 例外
  58 + */
  59 + public abstract void handle(String json, Long marketId, String systemCode) throws Exception;
  60 +
  61 + /**
  62 + * 获取动态数据
  63 + *
  64 + * @param marketId 市场 ID
  65 + * @param systemCode 系统代码
  66 + * @param dynamicType 动态型
  67 + * @return {@link Map}<{@link String}, {@link BusinessDetailDto}>
  68 + */
  69 + protected Map<String, BusinessDetailDto> getFilteredDynamicDataSingle(DynamicType dynamicType, Long marketId, String systemCode) {
  70 + var queryArrays = new String[]{
  71 + BasicEnum.DEPARTMENT_TO_LOWER.code,
  72 + BasicEnum.CUSTOMER_TO_LOWER.code,
  73 + BasicEnum.FINANCIAL_CHANNEL_TYPE_TO_LOWER.code,
  74 + BasicEnum.FINANCIAL_BUSINESS_TYPE_TO_LOWER.code
  75 + };
  76 + var dynamicParam = transMapper.getFixedWithQueryArrays(systemCode, dynamicType.code, marketId, SelectType.FIXED.getCode(), queryArrays);
  77 + Map<String, BusinessDetailDto> map = new HashMap<>();
  78 + if (!ObjectUtils.isEmpty(dynamicParam)) {
  79 + dynamicParam.forEach(e -> map.computeIfAbsent(e.getCode(), k -> e));
  80 + }
  81 + return map;
  82 + }
  83 +
  84 + /**
  85 + * 传输数据列表
  86 + *
  87 + * @param ts 茨
  88 + * @param marketId 市场 ID
  89 + * @param systemCode 系统代码
  90 + */
  91 + protected void transferDataListWithOutFeeItem(List<T> ts, Long marketId, String systemCode) {
  92 + ts.forEach(e -> {
  93 + DynamicType dynamicType = DynamicType.fromCode(e.getSystemDynamicCode());
  94 + transfer(e, marketId, systemCode);
  95 + getFilteredDynamicDataSingle(dynamicType, marketId, systemCode).forEach((k, v) -> TRANSFER_FUNCTION_SINGLE_MAP.get(k).transferDynamic(e, v));
  96 + getFilteredDynamicDataMulti(dynamicType, marketId, systemCode).forEach((k, v) -> TRANSFER_FUNCTION_MULTI_MAP.get(k).transferDynamic(e, v));
  97 + });
  98 + }
  99 +
  100 + /**
56 101 * 转换动态配置部门
57 102 *
58 103 * @param t t
... ... @@ -180,22 +225,6 @@ public abstract class AbstractBillHandler&lt;T extends BaseBillCo&gt; implements TypeM
180 225 /**
181 226 * 传输数据列表
182 227 *
183   - * @param ts 茨
184   - * @param marketId 市场 ID
185   - * @param systemCode 系统代码
186   - */
187   - protected void transferDataListWithOutFeeItem(List<T> ts, Long marketId, String systemCode) {
188   - ts.forEach(e -> {
189   - DynamicType dynamicType = DynamicType.fromCode(e.getSystemDynamicCode());
190   - transfer(e, marketId, systemCode);
191   - getFilteredDynamicDataSingle(dynamicType, marketId, systemCode).forEach((k, v) -> TRANSFER_FUNCTION_SINGLE_MAP.get(k).transferDynamic(e, v));
192   - getFilteredDynamicDataMulti(dynamicType, marketId, systemCode).forEach((k, v) -> TRANSFER_FUNCTION_MULTI_MAP.get(k).transferDynamic(e, v));
193   - });
194   - }
195   -
196   - /**
197   - * 传输数据列表
198   - *
199 228 *
200 229 * @param ts 茨
201 230 * @param marketId 市场 ID
... ... @@ -219,29 +248,6 @@ public abstract class AbstractBillHandler&lt;T extends BaseBillCo&gt; implements TypeM
219 248 * @param dynamicType 动态型
220 249 * @return {@link Map}<{@link String}, {@link BusinessDetailDto}>
221 250 */
222   - protected Map<String, BusinessDetailDto> getFilteredDynamicDataSingle(DynamicType dynamicType, Long marketId, String systemCode) {
223   - var queryArrays = new String[]{
224   - BasicEnum.DEPARTMENT_TO_LOWER.code,
225   - BasicEnum.CUSTOMER_TO_LOWER.code,
226   - BasicEnum.FINANCIAL_CHANNEL_TYPE_TO_LOWER.code,
227   - BasicEnum.FINANCIAL_BUSINESS_TYPE_TO_LOWER.code
228   - };
229   - var dynamicParam = transMapper.getFixedWithQueryArrays(systemCode, dynamicType.code, marketId, SelectType.FIXED.getCode(), queryArrays);
230   - Map<String, BusinessDetailDto> map = new HashMap<>();
231   - if (!ObjectUtils.isEmpty(dynamicParam)) {
232   - dynamicParam.forEach(e -> map.computeIfAbsent(e.getCode(), k -> e));
233   - }
234   - return map;
235   - }
236   -
237   - /**
238   - * 获取动态数据
239   - *
240   - * @param marketId 市场 ID
241   - * @param systemCode 系统代码
242   - * @param dynamicType 动态型
243   - * @return {@link Map}<{@link String}, {@link BusinessDetailDto}>
244   - */
245 251 protected Map<String, List<BusinessDetailDto>> getFilteredDynamicDataMulti(DynamicType dynamicType, Long marketId, String systemCode) {
246 252 var queryArrays = new String[]{BasicEnum.CHARGE_ITEM_TO_LOWER.code};
247 253 var dynamicParam = transMapper.getFixedWithQueryArrays(systemCode, dynamicType.code, marketId, SelectType.FIXED.getCode(), queryArrays);
... ... @@ -262,51 +268,22 @@ public abstract class AbstractBillHandler&lt;T extends BaseBillCo&gt; implements TypeM
262 268 */
263 269 protected void sendPurchaseOrder(List<T> ts, Long marketId, String systemCode) throws Exception {
264 270 var identifyInfo = getIdentifyInfo(marketId, systemCode);
265   - var util = new PurchaseOrderApiUtils(identifyInfo);
266 271 for (T e : ts) {
267 272 var billId = e.getFBillTypeID().getFNUMBER();
268 273 //获取单据类型
269 274 String documentType = getDocumentType(marketId, systemCode, billId);
  275 + if (ObjectUtils.isEmpty(documentType)) {
  276 + throw new ThirdPartyException("未配置业务映射");
  277 + }
270 278 var fixedBusinessType = e.getFixedBusinessType();
271 279 //业务类型固定的情况下
272 280 if (!ObjectUtils.isEmpty(fixedBusinessType)){
273 281 e.getFBillTypeID().setFNUMBER(fixedBusinessType);
274 282 }
275   - if (ObjectUtils.isEmpty(documentType)) {
276   - throw new ThirdPartyException("未配置业务映射");
277   - }
278   - if (util.getPurchaseOrder(e.getFBillTypeID().getFNUMBER(), e.getF_ZDB_Text1(), getAllAmountFor(e), e.getF_ZDB_Text667())) {
279   - util.createOnePurchaseOrder(JsonUtils.toJsonString(e), documentType);
280   - }
  283 + BillType.getBillType(documentType).handle(e,identifyInfo);
281 284 }
282 285 }
283 286  
284   - private IdentifyInfo getIdentifyInfo(Long marketId, String systemCode) {
285   - var identifyInfo = new IdentifyInfo();
286   - ClientDto clientParam = transMapper.getClientParam(systemCode, marketId);
287   - identifyInfo.setAppId(clientParam.getApplyId());
288   - identifyInfo.setUserName(clientParam.getUsername());
289   - identifyInfo.setServerUrl(clientParam.getServiceAddress());
290   - identifyInfo.setAppSecret(clientParam.getSecurityKey());
291   - identifyInfo.setdCID(clientParam.getDataCentreId());
292   - return identifyInfo;
293   - }
294   -
295   - /**
296   - * 获取 所有金额
297   - *
298   - * @param e e
299   - * @return {@link String}
300   - */
301   - private String getAllAmountFor(T e) {
302   - var allAmountFor = BigDecimal.ZERO;
303   - for (FEntityDetail f : e.getFEntityDetail()) {
304   - BigDecimal single = f.getFPrice().multiply(f.getFPriceQty());
305   - allAmountFor = allAmountFor.add(single);
306   - }
307   - return allAmountFor.toString();
308   - }
309   -
310 287 /**
311 288 * 获取文档类型
312 289 *
... ... @@ -315,29 +292,53 @@ public abstract class AbstractBillHandler&lt;T extends BaseBillCo&gt; implements TypeM
315 292 * @param billTypeId 账单类型 ID
316 293 * @return {@link String}
317 294 */
318   - protected String getDocumentType(Long marketId, String systemCode, String billTypeId) {
  295 + private String getDocumentType(Long marketId, String systemCode, String billTypeId) {
319 296 var res = transMapper.getMappingDict(BasicEnum.FINANCIAL_BUSINESS_TYPE_TO_LOWER.code, systemCode, marketId, billTypeId);
320 297 return ObjectUtils.isEmpty(res) ? null : res.getMapType();
321 298 }
322 299  
323   -
  300 + /**
  301 + * 传递函数 Single
  302 + *
  303 + * @author zhangmeiyang
  304 + * @date 2024/11/20
  305 + */
324 306 @FunctionalInterface
325 307 protected interface TransferFunctionSingle {
  308 + /**
  309 + * Transfer Dynamic (传输动态)
  310 + *
  311 + * @param baseBillCo Base Bill 公司
  312 + * @param data 数据
  313 + */
326 314 void transferDynamic(BaseBillCo baseBillCo, BusinessDetailDto data);
327 315 }
328 316  
329   - @FunctionalInterface
330   - protected interface TransferFunctionMulti {
331   - void transferDynamic(BaseBillCo baseBillCo, List<BusinessDetailDto> data);
  317 + private IdentifyInfo getIdentifyInfo(Long marketId, String systemCode) {
  318 + var identifyInfo = new IdentifyInfo();
  319 + ClientDto clientParam = transMapper.getClientParam(systemCode, marketId);
  320 + identifyInfo.setAppId(clientParam.getApplyId());
  321 + identifyInfo.setUserName(clientParam.getUsername());
  322 + identifyInfo.setServerUrl(clientParam.getServiceAddress());
  323 + identifyInfo.setAppSecret(clientParam.getSecurityKey());
  324 + identifyInfo.setdCID(clientParam.getDataCentreId());
  325 + return identifyInfo;
332 326 }
333 327  
334 328 /**
335   - * 处理
  329 + * 传递函数 Multi
336 330 *
337   - * @param json JSON 格式
338   - * @param marketId 市场 ID
339   - * @param systemCode 系统代码
340   - * @throws Exception 例外
  331 + * @author zhangmeiyang
  332 + * @date 2024/11/20
341 333 */
342   - public abstract void handle(String json, Long marketId, String systemCode) throws Exception;
  334 + @FunctionalInterface
  335 + protected interface TransferFunctionMulti {
  336 + /**
  337 + * Transfer Dynamic (传输动态)
  338 + *
  339 + * @param baseBillCo Base Bill 公司
  340 + * @param data 数据
  341 + */
  342 + void transferDynamic(BaseBillCo baseBillCo, List<BusinessDetailDto> data);
  343 + }
343 344 }
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/exec/basic/BasicReceiver.java
... ... @@ -66,7 +66,7 @@ public class BasicReceiver extends AbstractReceiver {
66 66 } catch (Exception e) {
67 67 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
68 68 if (msg.getRetryCount() > 3) {
69   - super.handleError(e.fillInStackTrace().getMessage(), msg.getData(), msg.getBasic().code, msg.getSystemCode(), msg.getMarketId());
  69 + handleError(e.fillInStackTrace().getMessage(), msg.getData(), msg.getBasic().code, msg.getSystemCode(), msg.getMarketId());
70 70 LOG.error("基础数据重试队列消息处理失败:", e);
71 71 } else {
72 72 msg.setRetryCount(msg.getRetryCount() + 1);
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/exec/business/BusinessReceiver.java
... ... @@ -64,7 +64,7 @@ public class BusinessReceiver extends AbstractReceiver {
64 64 } catch (Exception e) {
65 65 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
66 66 if (msg.getRetryCount() > 3) {
67   - super.handleError(e.fillInStackTrace().getMessage(), msg.getData(), msg.getBusiness().code, msg.getSystemCode(),msg.getMarketId());
  67 + handleError(e.fillInStackTrace().getMessage(), msg.getData(), msg.getBusiness().code, msg.getSystemCode(),msg.getMarketId());
68 68 LOG.error("业务重试队列消息处理失败:",e);
69 69 }else{
70 70 msg.setRetryCount(msg.getRetryCount() + 1);
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/BusinessTypeBasicHandler.java
... ... @@ -25,18 +25,22 @@ public class BusinessTypeBasicHandler extends AbstractBasicHandler&lt;BusinessTypeC
25 25 List<BusinessTypeCo> businessTypeCos = JsonUtils.fromJsonString(json, new TypeReference<>() {});
26 26 var utils = new BillTypeApiUtils(getIdentifyInfo(marketId, systemCode));
27 27 for (BusinessTypeCo e : businessTypeCos) {
28   - super.transfer(e, marketId, systemCode);
29   - MappingDto mappingData = super.getMappingData(marketId, systemCode, e.getSystemDataId());
30   - e.setFBILLTYPEID(ObjectUtils.isEmpty(mappingData) ? null : mappingData.getThirdPartyDataId());
31   - if (!ObjectUtils.isEmpty(mappingData)){
32   - utils.updateBillType(mappingData.getThirdPartyDataId(),JsonUtils.toJsonString(e));
33   - }else {
34   - String billType = utils.createBillType(JsonUtils.toJsonString(e));
35   - super.recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
36   - }
  28 + transfer(e, marketId, systemCode);
  29 + MappingDto mappingData = getMappingData(marketId, systemCode, e.getSystemDataId());
  30 + saveData(marketId, systemCode, e, mappingData, utils);
37 31 }
38 32 }
39 33  
  34 + private void saveData(Long marketId, String systemCode, BusinessTypeCo e, MappingDto mappingData, BillTypeApiUtils utils) throws Exception {
  35 + if (!ObjectUtils.isEmpty(mappingData)){
  36 + e.setFBILLTYPEID(mappingData.getThirdPartyDataId());
  37 + utils.updateBillType(mappingData.getThirdPartyDataId(), JsonUtils.toJsonString(e));
  38 + return;
  39 + }
  40 + String billType = utils.createBillType(JsonUtils.toJsonString(e));
  41 + recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
  42 + }
  43 +
40 44 @Override
41 45 public BasicEnum getType() {
42 46 return BasicEnum.FINANCIAL_BUSINESS_TYPE;
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/ChargeItemBasicHandler.java
... ... @@ -25,18 +25,36 @@ public class ChargeItemBasicHandler extends AbstractBasicHandler&lt;ChargeItemCo&gt; {
25 25 List<ChargeItemCo> chargeItemCos = JsonUtils.fromJsonString(json, new TypeReference<>(){});
26 26 var utils =new FeeApiUtils(getIdentifyInfo(marketId, systemCode));
27 27 for (ChargeItemCo e : chargeItemCos) {
28   - super.transfer(e, marketId, systemCode);
29   - MappingDto mappingData = super.getMappingData(marketId, systemCode, e.getSystemDataId());
30   - e.setFEXPID(ObjectUtils.isEmpty(mappingData) ? null : Long.valueOf(mappingData.getThirdPartyDataId()));
  28 + transfer(e, marketId, systemCode);
  29 + ChargeItemCo existFee = utils.getFee(e.getFNumber(),e.getFGroup().getFNumber());
  30 + MappingDto mappingData = getMappingData(marketId, systemCode, e.getSystemDataId());
  31 + establishMappings(marketId, systemCode, e, existFee, mappingData, utils);
  32 + }
  33 + }
  34 +
  35 + private void establishMappings(Long marketId, String systemCode, ChargeItemCo e, ChargeItemCo existFee, MappingDto mappingData, FeeApiUtils utils) throws Exception {
  36 + if (ObjectUtils.isEmpty(existFee)){ //如果查询到jd上的费用项不存在 分为两种情况 1.新增映射 2.修改老的映射(但是修改了费用项编码)
31 37 if (!ObjectUtils.isEmpty(mappingData)){
  38 + //mappingData存在表明存在旧映射关系,删除旧映射关系
  39 + deleteMapping(mappingData.getMarketId(), mappingData.getSystemCode(), mappingData.getSystemDataId());
  40 + }
  41 + String fee = utils.createFee(JsonUtils.toJsonString(e));
  42 + recordMapping(marketId, systemCode, e.getSystemDataId(), fee);
  43 + //重做映射
  44 + }else{
  45 + //查询到jd费用项存在映射 分为两种情况 1.修改映射 2.新增多重映射
  46 + if (ObjectUtils.isEmpty(mappingData)){
  47 + //新增多重映射
  48 + recordMapping(marketId, systemCode, e.getSystemDataId(), String.valueOf(existFee.getFEXPID()));
  49 + }else{
  50 + //变更映射
  51 + e.setFEXPID(Long.valueOf(mappingData.getThirdPartyDataId()));
32 52 utils.updateFee(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
33   - }else {
34   - String fee = utils.createFee(JsonUtils.toJsonString(e));
35   - super.recordMapping(marketId, systemCode, e.getSystemDataId(), fee);
36 53 }
37 54 }
38 55 }
39 56  
  57 +
40 58 @Override
41 59 public BasicEnum getType() {
42 60 return BasicEnum.CHARGE_ITEM;
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/ChargeItemGroupBasicHandler.java
... ... @@ -32,7 +32,7 @@ public class ChargeItemGroupBasicHandler extends AbstractBasicHandler&lt;ChargeItem
32 32 List<ChargeItemGroupCo> chargeItemGroupCos = JsonUtils.fromJsonString(json, new TypeReference<>() {
33 33 });
34 34 for (ChargeItemGroupCo e : chargeItemGroupCos) {
35   - super.transfer(e, marketId, systemCode);
  35 + transfer(e, marketId, systemCode);
36 36 Long systemParentId = e.getFParentId();
37 37 Long systemDataId = e.getSystemDataId();
38 38 MappingDto parentMappingData = getMappingData(marketId, systemCode, systemParentId);
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/CustomerBasicHandler.java
... ... @@ -34,31 +34,35 @@ public class CustomerBasicHandler extends AbstractBasicHandler&lt;CustomerCo&gt; {
34 34 FGroup fGroup = new FGroup();
35 35 transferCustomerGroup(fGroup, marketId, systemCode);
36 36 for (CustomerCo e : customerCos) {
37   - super.transfer(e, marketId, systemCode);
  37 + MappingDto mappingData = getMappingData(marketId, systemCode, e.getSystemDataId());
  38 + transfer(e, marketId, systemCode);
38 39 e.setFGroup(fGroup);
39   - MappingDto mappingData = super.getMappingData(marketId, systemCode, e.getSystemDataId());
40   - List<FT_BD_CUSTLOCATION> ftBdCustlocation = e.getFT_BD_CUSTLOCATION();
41   - var list = new ArrayList<FT_BD_CUSTLOCATION>();
42   - if (!ObjectUtils.isEmpty(ftBdCustlocation)){
43   - for (FT_BD_CUSTLOCATION ftBdCustLocation : ftBdCustlocation) {
44   - ftBdCustLocation.setFCompanyType(F_COMPANY_TYPE);
45   - String contact = contactUtils.createContact(JsonUtils.toJsonString(ftBdCustLocation));
46   - FContactId fContactId = new FContactId();
47   - fContactId.setFNUMBER(contact);
48   - var item = new FT_BD_CUSTLOCATION();
49   - item.setFContactId(fContactId);
50   - list.add(item);
51   - }
52   - }
53   - e.setFT_BD_CUSTLOCATION(list);
54   - e.setFCUSTID(ObjectUtils.isEmpty(mappingData) ? null : Long.valueOf(mappingData.getThirdPartyDataId()));
  40 + e.setFT_BD_CUSTLOCATION(getFtBdCustlocations(e, contactUtils));
55 41 if (!ObjectUtils.isEmpty(mappingData)){
  42 + e.setFCUSTID(Long.valueOf(mappingData.getThirdPartyDataId()));
56 43 customerUtils.updateCustomer(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
57 44 }else {
58 45 String billType = customerUtils.createCustomer(JsonUtils.toJsonString(e));
59   - super.recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
  46 + recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
  47 + }
  48 + }
  49 + }
  50 +
  51 + private List<FT_BD_CUSTLOCATION> getFtBdCustlocations(CustomerCo e, ContactApiUtils contactUtils) throws Exception {
  52 + List<FT_BD_CUSTLOCATION> ftBdCustlocation = e.getFT_BD_CUSTLOCATION();
  53 + var list = new ArrayList<FT_BD_CUSTLOCATION>();
  54 + if (!ObjectUtils.isEmpty(ftBdCustlocation)){
  55 + for (FT_BD_CUSTLOCATION ftBdCustLocation : ftBdCustlocation) {
  56 + ftBdCustLocation.setFCompanyType(F_COMPANY_TYPE);
  57 + String contact = contactUtils.createContact(JsonUtils.toJsonString(ftBdCustLocation));
  58 + FContactId fContactId = new FContactId();
  59 + fContactId.setFNUMBER(contact);
  60 + var item = new FT_BD_CUSTLOCATION();
  61 + item.setFContactId(fContactId);
  62 + list.add(item);
60 63 }
61 64 }
  65 + return list;
62 66 }
63 67  
64 68 @Override
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/DepartmentBasicHandler.java
... ... @@ -25,19 +25,23 @@ public class DepartmentBasicHandler extends AbstractBasicHandler&lt;DepartmentCo&gt; {
25 25 List<DepartmentCo> departmentCos = JsonUtils.fromJsonString(json, new TypeReference<>(){});
26 26 var utils = new DepartmentApiUtils(getIdentifyInfo(marketId, systemCode));
27 27 for (DepartmentCo e : departmentCos) {
28   - super.transfer(e, marketId, systemCode);
29   - MappingDto mappingData = super.getMappingData(marketId, systemCode, e.getSystemDataId());
30   - e.setFDEPTID(ObjectUtils.isEmpty(mappingData) ? null : Long.valueOf(mappingData.getThirdPartyDataId()));
31   - if (!ObjectUtils.isEmpty(mappingData)){
32   - utils.updateDepartment(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
33   - }else {
34   - String department = utils.createDepartment(JsonUtils.toJsonString(e));
35   - super.recordMapping(marketId, systemCode, e.getSystemDataId(), department);
36   - }
  28 + transfer(e, marketId, systemCode);
  29 + MappingDto mappingData = getMappingData(marketId, systemCode, e.getSystemDataId());
  30 + saveData(marketId, systemCode, e, mappingData, utils);
37 31 }
38 32  
39 33 }
40 34  
  35 + private void saveData(Long marketId, String systemCode, DepartmentCo e, MappingDto mappingData, DepartmentApiUtils utils) throws Exception {
  36 + if (!ObjectUtils.isEmpty(mappingData)){
  37 + e.setFDEPTID(Long.valueOf(mappingData.getThirdPartyDataId()));
  38 + utils.updateDepartment(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
  39 + }else {
  40 + String department = utils.createDepartment(JsonUtils.toJsonString(e));
  41 + recordMapping(marketId, systemCode, e.getSystemDataId(), department);
  42 + }
  43 + }
  44 +
41 45 @Override
42 46 public BasicEnum getType() {
43 47 return BasicEnum.DEPARTMENT;
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/basic/SettlementBasicHandler.java
... ... @@ -25,15 +25,19 @@ public class SettlementBasicHandler extends AbstractBasicHandler&lt;SettlementCo&gt; {
25 25 List<SettlementCo> settlementCos = JsonUtils.fromJsonString(json, new TypeReference<>() {});
26 26 var utils = new SettleTypeApiUtils(getIdentifyInfo(marketId, systemCode));
27 27 for (SettlementCo e : settlementCos) {
28   - super.transfer(e, marketId, systemCode);
29   - MappingDto mappingData = super.getMappingData(marketId, systemCode, e.getSystemDataId());
30   - e.setFID(ObjectUtils.isEmpty(mappingData) ? null : Long.valueOf(mappingData.getThirdPartyDataId()));
31   - if (!ObjectUtils.isEmpty(mappingData)){
32   - utils.updateSettleType(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
33   - }else {
34   - String billType = utils.createSettleType(JsonUtils.toJsonString(e));
35   - super.recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
36   - }
  28 + transfer(e, marketId, systemCode);
  29 + MappingDto mappingData = getMappingData(marketId, systemCode, e.getSystemDataId());
  30 + saveData(marketId, systemCode, e, mappingData, utils);
  31 + }
  32 + }
  33 +
  34 + private void saveData(Long marketId, String systemCode, SettlementCo e, MappingDto mappingData, SettleTypeApiUtils utils) throws Exception {
  35 + if (!ObjectUtils.isEmpty(mappingData)){
  36 + e.setFID(Long.valueOf(mappingData.getThirdPartyDataId()));
  37 + utils.updateSettleType(String.valueOf(mappingData.getThirdPartyDataId()),JsonUtils.toJsonString(e));
  38 + }else {
  39 + String billType = utils.createSettleType(JsonUtils.toJsonString(e));
  40 + recordMapping(marketId, systemCode, e.getSystemDataId(), billType);
37 41 }
38 42 }
39 43  
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/mapper/RecordMapper.java
... ... @@ -25,4 +25,11 @@ public interface RecordMapper extends MybatisMapperSupport {
25 25 */
26 26 @DataSource(DataSourceConstants.DS_KEY_MASTER)
27 27 void recordTheMappingData(@Param("mapping")MappingDto mapping);
  28 +
  29 +
  30 + /**
  31 + * @param mapping
  32 + */
  33 + @DataSource(DataSourceConstants.DS_KEY_MASTER)
  34 + void deleteTheMappingData(@Param("mapping")MappingDto mapping);
28 35 }
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/type/BillType.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.type;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.domain.co.business.BaseBillCo;
  5 +import com.diligrp.etrade.thirdparty.domain.model.FEntityDetail;
  6 +import com.diligrp.etrade.thirdparty.error.ThirdPartyException;
  7 +import com.diligrp.etrade.thirdparty.utils.PurchaseOrderApiUtils;
  8 +import com.diligrp.etrade.thirdparty.utils.ReceiptsOrderApiUtils;
  9 +import com.diligrp.etrade.thirdparty.utils.ReceiptsRefundOrderApiUtils;
  10 +import com.kingdee.bos.webapi.entity.IdentifyInfo;
  11 +
  12 +import java.math.BigDecimal;
  13 +
  14 +public enum BillType {
  15 +
  16 + RECEIVABLES("AR_receivable") {
  17 + @Override
  18 + public <T extends BaseBillCo> void handle(T t, IdentifyInfo identifyInfo) throws Exception {
  19 + var util = new PurchaseOrderApiUtils(identifyInfo);
  20 + boolean purchaseOrder = util.getPurchaseOrder(t.getFBillTypeID().getFNUMBER(), t.getF_ZDB_Text1(), getAllAmountFor(t), t.getF_ZDB_Text667());
  21 + if (purchaseOrder) {
  22 + util.createOnePurchaseOrder(JsonUtils.toJsonString(t), this.value);
  23 + }
  24 + }
  25 + },
  26 + RECEIPTS("AR_RECEIVEBILL") {
  27 + @Override
  28 + public <T extends BaseBillCo> void handle(T t, IdentifyInfo identifyInfo) throws Exception {
  29 + var util = new ReceiptsOrderApiUtils(identifyInfo);
  30 + boolean purchaseOrder = util.getReceiptsOrder(t.getFBillTypeID().getFNUMBER(), t.getF_ZDB_Text1(), getAllAmountFor(t), t.getF_ZDB_Text667());
  31 + if (purchaseOrder) {
  32 + util.createOnePurchaseOrder(JsonUtils.toJsonString(t), this.value);
  33 + }
  34 + }
  35 + },
  36 + RECEIPT_AND_REFUND_FORM("AR_REFUNDBILL") {
  37 + @Override
  38 + public <T extends BaseBillCo> void handle(T t, IdentifyInfo identifyInfo) throws Exception {
  39 + var util = new ReceiptsRefundOrderApiUtils(identifyInfo);
  40 + boolean purchaseOrder = util.getReceiptsRefundOrder(t.getFBillTypeID().getFNUMBER(), t.getF_ZDB_Text1(), getAllAmountFor(t), t.getF_ZDB_Text667());
  41 + if (purchaseOrder) {
  42 + util.createOnePurchaseOrder(JsonUtils.toJsonString(t), this.value);
  43 + }
  44 + }
  45 + },
  46 + ;
  47 +
  48 + public final String value;
  49 +
  50 + BillType(String value) {
  51 + this.value = value;
  52 + }
  53 +
  54 + public static BillType getBillType(String value) {
  55 + for (BillType type : BillType.values()) {
  56 + if (type.value.equals(value)) {
  57 + return type;
  58 + }
  59 + }
  60 + throw new ThirdPartyException("未实现的业务类型");
  61 + }
  62 +
  63 + private static <T extends BaseBillCo> String getAllAmountFor(T e) {
  64 + var allAmountFor = BigDecimal.ZERO;
  65 + for (FEntityDetail f : e.getFEntityDetail()) {
  66 + BigDecimal single = f.getFPrice().multiply(f.getFPriceQty());
  67 + allAmountFor = allAmountFor.add(single);
  68 + }
  69 + return allAmountFor.toString();
  70 + }
  71 +
  72 + public abstract <T extends BaseBillCo> void handle(T t, IdentifyInfo identifyInfo) throws Exception;
  73 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/utils/DepartmentApiUtils.java
... ... @@ -22,6 +22,17 @@ public class DepartmentApiUtils extends BaseApiUtils {
22 22 super(identifyInfo);
23 23 }
24 24  
  25 + /**
  26 + * {
  27 + * "FormId": "BD_Department",
  28 + * "FieldKeys": "FDEPTID",
  29 + * "FilterString": "FNumber = '001'"
  30 + * }
  31 + *
  32 + * @param json
  33 + * @return
  34 + * @throws Exception
  35 + */
25 36 public String createDepartment(String json) throws Exception {
26 37 return save(createSendMessageWithAudit(json));
27 38 }
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/utils/FeeApiUtils.java
1 1 package com.diligrp.etrade.thirdparty.utils;
2 2  
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.domain.co.basic.ChargeItemCo;
  5 +import com.diligrp.etrade.thirdparty.message.GeneralQueryMessage;
3 6 import com.kingdee.bos.webapi.entity.IdentifyInfo;
4 7 import com.kingdee.bos.webapi.entity.OperateParam;
5 8 import com.kingdee.bos.webapi.entity.OperatorResult;
6 9 import org.slf4j.Logger;
7 10 import org.slf4j.LoggerFactory;
8 11  
  12 +import java.util.List;
  13 +
9 14 /**
10 15 * 费用 API 实用程序
11 16 *
... ... @@ -22,6 +27,25 @@ public class FeeApiUtils extends BaseApiUtils {
22 27 super(identifyInfo);
23 28 }
24 29  
  30 + public ChargeItemCo getFee(String fNumber,String groupNumber) throws Exception {
  31 + var filterString = "FNumber = '%s' and FGroup.FNumber = '%s' ".formatted(fNumber,groupNumber);
  32 + var query = new GeneralQueryMessage();
  33 + query.setFormId("BD_Expense");
  34 + query.setFieldKeys("FEXPID,FNumber");
  35 + query.setFilterString(filterString);
  36 + List<List<Object>> res = api.executeBillQuery(JsonUtils.toJsonString(query));
  37 + log.info("费用项接口查回数据,json数据:{}", res);
  38 + if (res.isEmpty()){
  39 + return null;
  40 + }
  41 + var feeId = String.valueOf(res.get(0).get(0));
  42 + var FNumber = String.valueOf(res.get(0).get(1));
  43 + ChargeItemCo chargeItemCo = new ChargeItemCo();
  44 + chargeItemCo.setFEXPID(Long.valueOf(feeId));
  45 + chargeItemCo.setFNumber(FNumber);
  46 + return chargeItemCo;
  47 + }
  48 +
25 49  
26 50 public String createFee(String json) throws Exception {
27 51 return save(createSendMessageWithAudit(json));
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/utils/PurchaseOrderApiUtils.java
... ... @@ -33,7 +33,7 @@ public class PurchaseOrderApiUtils extends BaseApiUtils {
33 33 query.setFieldKeys("FID");
34 34 query.setFormId("AR_receivable");
35 35 List<List<Object>> res = api.executeBillQuery(JsonUtils.toJsonString(query));
36   - log.info("采购订单接口查回数据,json数据:{}", res);
  36 + log.info("应收单接口查回数据,json数据:{}", res);
37 37 return res.isEmpty();
38 38 }
39 39  
... ... @@ -43,9 +43,9 @@ public class PurchaseOrderApiUtils extends BaseApiUtils {
43 43 }
44 44  
45 45 private void save(String json, String formId) throws Exception {
46   - log.info("采购订单接口json数据:{}", json);
  46 + log.info("应收单接口json数据:{}", json);
47 47 String res = api.save(formId, json);
48 48 var repoRet = getRepoRet(res);
49   - log.info("采购订单接口已完成,{}", repoRet);
  49 + log.info("应收单接口已完成,{}", repoRet);
50 50 }
51 51 }
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/utils/ReceiptsOrderApiUtils.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.utils;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.message.GeneralQueryMessage;
  5 +import com.kingdee.bos.webapi.entity.IdentifyInfo;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * 收款单 API 实用程序
  13 + *
  14 + * @author zhangmeiyang
  15 + * @Author: zhangmeiyang
  16 + * @CreateTime: 2024-10-15 11:09
  17 + * @Version: todo
  18 + * @date 2024/10/23
  19 + */
  20 +public class ReceiptsOrderApiUtils extends BaseApiUtils {
  21 + private static final Logger log = LoggerFactory.getLogger(ReceiptsOrderApiUtils.class);
  22 +
  23 + public ReceiptsOrderApiUtils(IdentifyInfo identifyInfo) {
  24 + super(identifyInfo);
  25 + }
  26 +
  27 + public boolean getReceiptsOrder(String FBillTypeID, String F_ZDB_text1,String allAmountFor,String F_ZDB_Text667 ) throws Exception {
  28 + String FilterString = """
  29 + FBillTypeID.FNumber = '%s' and F_ZDB_text1 ='%s' and FALLAMOUNTFOR = '%s' and F_ZDB_Text667 = '%s'
  30 + """.formatted(FBillTypeID, F_ZDB_text1,allAmountFor,F_ZDB_Text667);
  31 + var query = new GeneralQueryMessage();
  32 + query.setFilterString(FilterString);
  33 + query.setFieldKeys("FID");
  34 + query.setFormId("AR_RECEIVEBILL");
  35 + List<List<Object>> res = api.executeBillQuery(JsonUtils.toJsonString(query));
  36 + log.info("收款单接口查回数据,json数据:{}", res);
  37 + return res.isEmpty();
  38 + }
  39 +
  40 +
  41 + public void createOnePurchaseOrder(String json, String formId) throws Exception {
  42 + save(createSendMessageWithAudit(json), formId);
  43 + }
  44 +
  45 + private void save(String json, String formId) throws Exception {
  46 + log.info("收款单接口json数据:{}", json);
  47 + String res = api.save(formId, json);
  48 + var repoRet = getRepoRet(res);
  49 + log.info("收款单接口已完成,{}", repoRet);
  50 + }
  51 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/utils/ReceiptsRefundOrderApiUtils.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.utils;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.message.GeneralQueryMessage;
  5 +import com.kingdee.bos.webapi.entity.IdentifyInfo;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * 收款单 API 实用程序
  13 + *
  14 + * @author zhangmeiyang
  15 + * @Author: zhangmeiyang
  16 + * @CreateTime: 2024-10-15 11:09
  17 + * @Version: todo
  18 + * @date 2024/10/23
  19 + */
  20 +public class ReceiptsRefundOrderApiUtils extends BaseApiUtils {
  21 + private static final Logger log = LoggerFactory.getLogger(ReceiptsRefundOrderApiUtils.class);
  22 +
  23 + public ReceiptsRefundOrderApiUtils(IdentifyInfo identifyInfo) {
  24 + super(identifyInfo);
  25 + }
  26 +
  27 + public boolean getReceiptsRefundOrder(String FBillTypeID, String F_ZDB_text1,String allAmountFor,String F_ZDB_Text667 ) throws Exception {
  28 + String FilterString = """
  29 + FBillTypeID.FNumber = '%s' and F_ZDB_text1 ='%s' and FALLAMOUNTFOR = '%s' and F_ZDB_Text667 = '%s'
  30 + """.formatted(FBillTypeID, F_ZDB_text1,allAmountFor,F_ZDB_Text667);
  31 + var query = new GeneralQueryMessage();
  32 + query.setFilterString(FilterString);
  33 + query.setFieldKeys("FID");
  34 + query.setFormId("AR_REFUNDBILL");
  35 + List<List<Object>> res = api.executeBillQuery(JsonUtils.toJsonString(query));
  36 + log.info("收款退款单接口查回数据,json数据:{}", res);
  37 + return res.isEmpty();
  38 + }
  39 +
  40 +
  41 + public void createOnePurchaseOrder(String json, String formId) throws Exception {
  42 + save(createSendMessageWithAudit(json), formId);
  43 + }
  44 +
  45 + private void save(String json, String formId) throws Exception {
  46 + log.info("收款收款退款单接口json数据:{}", json);
  47 + String res = api.save(formId, json);
  48 + var repoRet = getRepoRet(res);
  49 + log.info("收款收款退款单接口已完成,{}", repoRet);
  50 + }
  51 +}
... ...
etrade-thirdparty/src/main/resources/com/diligrp/etrade/thirdparty/mapper/RecordMapper.xml
... ... @@ -31,4 +31,12 @@
31 31 , #{mapping.thirdPartyDataId}
32 32 )
33 33 </insert>
  34 + <delete id="deleteTheMappingData">
  35 + DELETE FROM `zr_etrade`.`tp_mapping_data`
  36 + WHERE 1=1
  37 + AND market_id = #{mapping.marketId}
  38 + AND system_code = #{mapping.systemCode}
  39 + AND business = #{mapping.business}
  40 + AND system_data_id = #{mapping.systemDataId}
  41 + </delete>
34 42 </mapper>
... ...