Commit 0f9a0e8a9efc1c98cbc6438cdf66a0f2dfeaa88e
1 parent
153b18c8
新增保证金扣减业务
Showing
4 changed files
with
120 additions
and
31 deletions
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/demarcate/AbstractBillHandler.java
... | ... | @@ -87,7 +87,7 @@ public abstract class AbstractBillHandler<T extends BaseBillCo> extends Abstract |
87 | 87 | private static <T extends BaseBillCo> BiConsumer<String, List<BusinessDetailDto>> multiMapFilter(T e) { |
88 | 88 | return (k, v) -> TRANSFER_FUNCTION_MULTI_MAP.get(k).transferDynamic(e, v); |
89 | 89 | } |
90 | - private static <T extends BaseBillCo> BiConsumer<String, BusinessDetailDto> singleMapFilter(T e) { | |
90 | + protected static <T extends BaseBillCo> BiConsumer<String, BusinessDetailDto> singleMapFilter(T e) { | |
91 | 91 | return (k, v) -> TRANSFER_FUNCTION_SINGLE_MAP.get(k).transferDynamic(e, v); |
92 | 92 | } |
93 | 93 | |
... | ... | @@ -111,7 +111,7 @@ public abstract class AbstractBillHandler<T extends BaseBillCo> extends Abstract |
111 | 111 | * 批量转换方法 |
112 | 112 | * |
113 | 113 | */ |
114 | - private void transferPayMethod(List<FEntityDetail> fEntityDetail, Long marketId, String systemCode) { | |
114 | + protected void transferPayMethod(List<FEntityDetail> fEntityDetail, Long marketId, String systemCode) { | |
115 | 115 | fEntityDetail.forEach(e -> { |
116 | 116 | if (!ObjectUtils.isEmpty(e.getFSettleTypeID())) { |
117 | 117 | e.getFSettleTypeID().setFNumber(getPayMethod(e.getFSettleTypeID().getFNumber(), systemCode, marketId)); | ... | ... |
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/business/bill/SettleBillHandler.java
... | ... | @@ -3,18 +3,20 @@ package com.diligrp.etrade.thirdparty.handler.business.bill; |
3 | 3 | import com.diligrp.etrade.core.util.JsonUtils; |
4 | 4 | import com.diligrp.etrade.thirdparty.demarcate.AbstractBillHandler; |
5 | 5 | import com.diligrp.etrade.thirdparty.domain.co.business.bill.SettleBillCo; |
6 | +import com.diligrp.etrade.thirdparty.domain.dto.BusinessDetailDto; | |
7 | +import com.diligrp.etrade.thirdparty.domain.dto.ChargeItemDto; | |
8 | +import com.diligrp.etrade.thirdparty.domain.model.FCOSTID; | |
6 | 9 | import com.diligrp.etrade.thirdparty.domain.model.FEntityDetail; |
7 | -import com.diligrp.etrade.thirdparty.type.BailFeeType; | |
8 | 10 | import com.diligrp.etrade.thirdparty.type.BusinessEnum; |
9 | 11 | import com.diligrp.etrade.thirdparty.type.DynamicType; |
12 | +import com.diligrp.etrade.thirdparty.type.SelectType; | |
10 | 13 | import com.fasterxml.jackson.core.type.TypeReference; |
14 | +import org.apache.commons.lang3.math.NumberUtils; | |
11 | 15 | import org.springframework.stereotype.Component; |
12 | 16 | |
13 | -import java.util.*; | |
17 | +import java.util.List; | |
18 | +import java.util.Optional; | |
14 | 19 | import java.util.function.Consumer; |
15 | -import java.util.function.Predicate; | |
16 | -import java.util.stream.Collectors; | |
17 | -import java.util.stream.Stream; | |
18 | 20 | |
19 | 21 | /** |
20 | 22 | * @Author: zhangmeiyang |
... | ... | @@ -24,40 +26,65 @@ import java.util.stream.Stream; |
24 | 26 | @Component |
25 | 27 | public class SettleBillHandler extends AbstractBillHandler<SettleBillCo> { |
26 | 28 | |
27 | - private static Consumer<SettleBillCo> action(List<SettleBillCo> bail, List<SettleBillCo> other) { | |
28 | - return e -> Optional.ofNullable(e).filter(predict()).ifPresentOrElse(other::add, special(e, bail)); | |
29 | + private static Consumer<ChargeItemDto> setSystemChargeItemCode(FEntityDetail fe) { | |
30 | + return e -> fe.setSystemChargeItemCode(e.getChargeItemCode()); | |
29 | 31 | } |
30 | 32 | |
31 | - private static Runnable special(SettleBillCo e, List<SettleBillCo> bail) { | |
32 | - return () -> { | |
33 | - Map<BailFeeType, List<FEntityDetail>> map = new HashMap<>(); | |
34 | - List<FEntityDetail> fEntityDetail = e.getFEntityDetail(); | |
35 | - fEntityDetail.forEach(prepareMap(map)); | |
36 | - map.forEach((k,v)-> k.loadData(v,e,bail)); | |
37 | - }; | |
33 | + private static Consumer<BusinessDetailDto> fixedAction(FEntityDetail e) { | |
34 | + return f -> e.setFixChargeItemCode(f.getItemValue()); | |
38 | 35 | } |
39 | 36 | |
40 | - private static Consumer<FEntityDetail> prepareMap(Map<BailFeeType, List<FEntityDetail>> map) { | |
41 | - return f -> map.computeIfAbsent(BailFeeType.fromCode(f.getFeeType()), k -> new ArrayList<>()).add(f); | |
37 | + @Override | |
38 | + public void handle(String json, Long marketId, String systemCode) throws Exception { | |
39 | + List<SettleBillCo> settleBillCos = JsonUtils.fromJsonString(json, new TypeReference<>() { | |
40 | + }); | |
41 | + List<SettleBillCo> lists = splitBill(settleBillCos, marketId, systemCode); | |
42 | + sendPurchaseOrder(lists, marketId, systemCode); | |
42 | 43 | } |
43 | 44 | |
44 | - private static Predicate<SettleBillCo> predict() { | |
45 | - return t -> !DynamicType.areEqual(t.getSystemDynamicCode(), DynamicType.BAIL); | |
45 | + private List<SettleBillCo> splitBill(List<SettleBillCo> settleBillCos, Long marketId, String systemCode) { | |
46 | + settleBillCos.forEach( | |
47 | + e -> { | |
48 | + DynamicType dynamicType = DynamicType.fromCode(e.getSystemDynamicCode()); | |
49 | + billTrans.transBillCo(e, marketId, systemCode); | |
50 | + transferPayMethod(e.getFEntityDetail(), marketId, systemCode); | |
51 | + getFilteredDynamicDataSingle(dynamicType, marketId, systemCode).forEach(singleMapFilter(e)); | |
52 | + transChargeItem(e.getFEntityDetail(), marketId, systemCode); | |
53 | + } | |
54 | + ); | |
55 | + return settleBillCos; | |
46 | 56 | } |
47 | 57 | |
48 | - @Override | |
49 | - public void handle(String json, Long marketId, String systemCode) throws Exception { | |
50 | - List<SettleBillCo> settleBillCos = JsonUtils.fromJsonString(json, new TypeReference<>() {}); | |
51 | - List<SettleBillCo> lists = splitBill(settleBillCos); | |
52 | - transferDataListWithFeeItem(lists, marketId, systemCode); | |
53 | - sendPurchaseOrder(lists, marketId, systemCode); | |
58 | + private void transChargeItem(List<FEntityDetail> fEntityDetail, Long marketId, String systemCode) { | |
59 | + fEntityDetail.forEach(e -> Optional.ofNullable(e.getFCOSTID()).ifPresent(chargeItemAction(marketId, systemCode, e))); | |
54 | 60 | } |
55 | 61 | |
56 | - private List<SettleBillCo> splitBill(List<SettleBillCo> settleBillCos) { | |
57 | - List<SettleBillCo> other = new ArrayList<>(); | |
58 | - List<SettleBillCo> bail = new ArrayList<>(); | |
59 | - settleBillCos.forEach(action(bail, other)); | |
60 | - return Stream.of(other, bail).flatMap(List::stream).collect(Collectors.toList()); | |
62 | + private Consumer<FCOSTID> chargeItemAction(Long marketId, String systemCode, FEntityDetail e) { | |
63 | + return costId -> { | |
64 | + var number = costId.getFNUMBER(); | |
65 | + BusinessDetailDto detail = getBusinessDetailDto(marketId, systemCode, costId, number); | |
66 | + Optional.ofNullable(detail) | |
67 | + .filter(f -> f.getSelectType() == SelectType.FIXED) | |
68 | + .ifPresentOrElse(fixedAction(e), dynamicAction(number, e)); | |
69 | + }; | |
70 | + } | |
71 | + | |
72 | + private Runnable dynamicAction(String number, FEntityDetail fe) { | |
73 | + return () -> { | |
74 | + ChargeItemDto chargeItem = transMapper.getChargeItem(Long.valueOf(number)); | |
75 | + Optional.ofNullable(chargeItem).ifPresent(setSystemChargeItemCode(fe)); | |
76 | + }; | |
77 | + } | |
78 | + | |
79 | + private BusinessDetailDto getBusinessDetailDto(Long marketId, String systemCode, FCOSTID costId, String number) { | |
80 | + BusinessDetailDto detail; | |
81 | + if (NumberUtils.isCreatable(number) && DynamicType.notContain(number)) { | |
82 | + detail = transMapper.getSingleBusinessDetail(getDocumentType().sign, systemCode, marketId, Long.valueOf(costId.getFNUMBER())); | |
83 | + } else { | |
84 | + detail = transMapper.getSingleFixedBusinessDetail(getDocumentType().sign, systemCode, marketId, costId.getFNUMBER()); | |
85 | + | |
86 | + } | |
87 | + return detail; | |
61 | 88 | } |
62 | 89 | |
63 | 90 | @Override | ... | ... |
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/mapper/TransMapper.java
... | ... | @@ -40,6 +40,30 @@ public interface TransMapper extends MybatisMapperSupport { |
40 | 40 | |
41 | 41 | |
42 | 42 | /** |
43 | + * 获取动态参数 | |
44 | + * | |
45 | + * @param documentType 文档类型 | |
46 | + * @param systemCode 系统代码 | |
47 | + * @param marketId 市场 ID | |
48 | + * @param relationId 关系 ID | |
49 | + * @return {@link BusinessDetailDto} | |
50 | + */ | |
51 | + @DataSource(DataSourceConstants.DS_KEY_SLAVE) | |
52 | + BusinessDetailDto getSingleBusinessDetail(@Param("documentType") String documentType,@Param("systemCode")String systemCode, @Param("marketId")Long marketId,@Param("relationId")Long relationId); | |
53 | + | |
54 | + /** | |
55 | + * 获取动态参数 | |
56 | + * | |
57 | + * @param documentType 文档类型 | |
58 | + * @param systemCode 系统代码 | |
59 | + * @param marketId 市场 ID | |
60 | + * @param relationId 关系 ID | |
61 | + * @return {@link BusinessDetailDto} | |
62 | + */ | |
63 | + @DataSource(DataSourceConstants.DS_KEY_SLAVE) | |
64 | + BusinessDetailDto getSingleFixedBusinessDetail(@Param("documentType") String documentType,@Param("systemCode")String systemCode, @Param("marketId")Long marketId,@Param("itemCode")String itemCode); | |
65 | + | |
66 | + /** | |
43 | 67 | * 获取部门 |
44 | 68 | * |
45 | 69 | * @param departmentId 部门 ID | ... | ... |
etrade-thirdparty/src/main/resources/com/diligrp/etrade/thirdparty/mapper/TransMapper.xml
... | ... | @@ -135,4 +135,42 @@ |
135 | 135 | AND system_code = #{systemCode} |
136 | 136 | AND `code` = #{dynamicType} |
137 | 137 | </select> |
138 | + <select id="getSingleBusinessDetail" resultType="com.diligrp.etrade.thirdparty.domain.dto.BusinessDetailDto"> | |
139 | + SELECT | |
140 | + fbd.code AS code | |
141 | + , fbd.name AS name | |
142 | + , fbd.select_type AS selectType | |
143 | + , fbd.item_code AS itemCode | |
144 | + , fbd.item_name AS itemName | |
145 | + , fbd.item_relation_id AS itemRelationId | |
146 | + , fbd.item_value AS itemValue | |
147 | + FROM | |
148 | + `dili-basic-data`.`financial_business` fb | |
149 | + LEFT JOIN `dili-basic-data`.financial_business_detail fbd ON fb.id = fbd.financial_business_id | |
150 | + WHERE | |
151 | + 1 = 1 | |
152 | + AND fbd.financial_type = #{documentType} | |
153 | + AND fb.market_id = #{marketId} | |
154 | + AND fb.system_code = #{systemCode} | |
155 | + AND fbd.item_relation_id = #{relationId} | |
156 | + </select> | |
157 | + <select id="getSingleFixedBusinessDetail" resultType="com.diligrp.etrade.thirdparty.domain.dto.BusinessDetailDto"> | |
158 | + SELECT | |
159 | + fbd.code AS code | |
160 | + , fbd.name AS name | |
161 | + , fbd.select_type AS selectType | |
162 | + , fbd.item_code AS itemCode | |
163 | + , fbd.item_name AS itemName | |
164 | + , fbd.item_relation_id AS itemRelationId | |
165 | + , fbd.item_value AS itemValue | |
166 | + FROM | |
167 | + `dili-basic-data`.`financial_business` fb | |
168 | + LEFT JOIN `dili-basic-data`.financial_business_detail fbd ON fb.id = fbd.financial_business_id | |
169 | + WHERE | |
170 | + 1 = 1 | |
171 | + AND fbd.financial_type = #{documentType} | |
172 | + AND fb.market_id = #{marketId} | |
173 | + AND fb.system_code = #{systemCode} | |
174 | + AND fbd.item_code = #{itemCode} | |
175 | + </select> | |
138 | 176 | </mapper> | ... | ... |