bugfix:对账his多变账,对应银行的一个账单
This commit is contained in:
@@ -507,16 +507,85 @@ public class ReconciliationMethod {
|
|||||||
|
|
||||||
searchNotUniqueObjMap.put("orderby_je", "true");
|
searchNotUniqueObjMap.put("orderby_je", "true");
|
||||||
|
|
||||||
//todo
|
// his端重复记录
|
||||||
//his端重复记录
|
|
||||||
List<HashMap<Object, Object>> list = hisbillsHistoryService.findHisDetailByParam(searchNotUniqueObjMap);
|
List<HashMap<Object, Object>> list = hisbillsHistoryService.findHisDetailByParam(searchNotUniqueObjMap);
|
||||||
// hisDetailService.findHisDetailByParam(searchNotUniqueObjMap);
|
// 三方端重复记录
|
||||||
|
|
||||||
//三方端重复记录
|
|
||||||
List<HashMap<Object, Object>> list2 = bankbillsHistoryService.findBankbillHistoryByParam(searchNotUniqueObjMap);
|
List<HashMap<Object, Object>> list2 = bankbillsHistoryService.findBankbillHistoryByParam(searchNotUniqueObjMap);
|
||||||
|
|
||||||
|
// 特殊场景处理:
|
||||||
|
// HIS 端同一 TranID 有多条记录,bank 端只有一条记录,且 HIS 金额求和 == 银行该笔金额,
|
||||||
|
// 这种情况视为正常账(不是单边也不是差异),不再拆成单边或差异。
|
||||||
|
if (list != null && list.size() > 1 && list2 != null && list2.size() == 1) {
|
||||||
|
java.math.BigDecimal hisTotal = java.math.BigDecimal.ZERO;
|
||||||
|
for (HashMap<Object, Object> hisDetailMap : list) {
|
||||||
|
String amountStr = StringDUtil.changeNullToEmpty(hisDetailMap.get("AMOUNT"));
|
||||||
|
if (!"".equals(amountStr)) {
|
||||||
|
try {
|
||||||
|
hisTotal = hisTotal.add(new java.math.BigDecimal(amountStr));
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 金额异常时跳过特殊处理,走原有逻辑
|
||||||
|
hisTotal = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//循环两个list 如果his端有多的 放入his单边list 能对上的放入true关联集合 最后航端多的银行端单边
|
if (hisTotal != null) {
|
||||||
|
HashMap<Object, Object> bankDetailMap = list2.get(0);
|
||||||
|
String bankAmtStr = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYJE"));
|
||||||
|
|
||||||
|
if (AmountUtil.isAmountEqual(hisTotal.toString(), bankAmtStr)) {
|
||||||
|
// 以第一条 HIS 记录为代表,构造一条正常关联记录
|
||||||
|
HashMap<Object, Object> hisDetailMap = list.get(0);
|
||||||
|
|
||||||
|
String amount = hisTotal.toString();
|
||||||
|
String hJylx = StringDUtil.changeNullToEmpty(hisDetailMap.get("TRADINGSTATUS"));
|
||||||
|
String tradeTime = StringDUtil.changeNullToEmpty(hisDetailMap.get("TRADETIME"));
|
||||||
|
String payType = StringDUtil.changeNullToEmpty(hisDetailMap.get("PAYTYPE"));
|
||||||
|
String hisopernum = StringDUtil.changeNullToEmpty(hisDetailMap.get("HISOPERCODE"));
|
||||||
|
String bizType = StringDUtil.changeNullToEmpty(hisDetailMap.get("BIZTYPE"));
|
||||||
|
String patientid = StringDUtil.changeNullToEmpty(hisDetailMap.get("PATIENTID"));
|
||||||
|
String patientname = StringDUtil.changeNullToEmpty(hisDetailMap.get("PATIENTNAME"));
|
||||||
|
|
||||||
|
String i_jyje = bankAmtStr;
|
||||||
|
String i_jyrq = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYRQ"));
|
||||||
|
String i_jysj = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYSJ"));
|
||||||
|
String i_jyqd = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYQD"));
|
||||||
|
String i_jylx = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYLX"));
|
||||||
|
String i_ddh = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_DDH"));
|
||||||
|
|
||||||
|
HashMap<Object, Object> addMap = new HashMap<>();
|
||||||
|
addMap.put("jysj", i_jyrq + " " + i_jysj);
|
||||||
|
addMap.put("i_ddh", i_ddh);
|
||||||
|
addMap.put("i_jyje", i_jyje);
|
||||||
|
addMap.put("i_jylx", i_jylx);
|
||||||
|
addMap.put("i_jyqd", i_jyqd);
|
||||||
|
addMap.put("tradeTime", tradeTime);
|
||||||
|
|
||||||
|
addMap.put("tranID", tranid);
|
||||||
|
addMap.put("BizType", bizType);
|
||||||
|
addMap.put("h_jylx", hJylx);
|
||||||
|
addMap.put("amount", amount);
|
||||||
|
addMap.put("payType", payType);
|
||||||
|
addMap.put("hisOperNum", hisopernum);
|
||||||
|
addMap.put("patientid", patientid);
|
||||||
|
addMap.put("patientname", patientname);
|
||||||
|
addMap.put("sort_date", tradeTime);
|
||||||
|
addMap.put("trade_date", trade_date);
|
||||||
|
addMap.put("err_type", "");
|
||||||
|
addMap.put("check_result", "0");
|
||||||
|
addMap.put("is_active", "1");
|
||||||
|
addMap.put("join_id", "");
|
||||||
|
|
||||||
|
trueList.add(addMap);
|
||||||
|
// 已按“合并金额相等”视为正常账,不再按单条金额匹配,直接处理下一组重复 TranID
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 循环两个 list:
|
||||||
|
// 如果 his 端有多的,放入 his 单边 list;能对上的放入 true 关联集合;最后多出的进入银行单边
|
||||||
//最后处理的时候 his单边和银行单边都有的按一对一 变成差异,只有一边有的就是单边
|
//最后处理的时候 his单边和银行单边都有的按一对一 变成差异,只有一边有的就是单边
|
||||||
List<HashMap<Object, Object>> hisUnilateralList = new ArrayList<>();
|
List<HashMap<Object, Object>> hisUnilateralList = new ArrayList<>();
|
||||||
for (int j = 0; j < list.size(); j++) {
|
for (int j = 0; j < list.size(); j++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user