bugfix:对账排除住院订单
This commit is contained in:
@@ -150,5 +150,9 @@ public class BankbillHistory implements Serializable {
|
||||
* 医疗总费用
|
||||
*/
|
||||
private String medfeeSumamt;
|
||||
/**
|
||||
* 是否住院订单 (0:否 1:是)
|
||||
*/
|
||||
private String isInpatient;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@ public interface TransactionDetailMapper {
|
||||
|
||||
void deleteHisAndThirdJoinDataByParamAndNotUnique(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
void deleteThirdUnilateralByIddh(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
void addNotUniqueData(List<HashMap<Object, Object>> list) throws Exception;
|
||||
|
||||
/**
|
||||
|
||||
@@ -38,4 +38,9 @@ public interface UnilateralMapper {
|
||||
* 根据ID删除单边账记录
|
||||
*/
|
||||
void deleteUnilateralById(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
/**
|
||||
* 根据订单号删除银行单边账
|
||||
*/
|
||||
void deleteBankUnilateralByI_DDH(HashMap<Object, Object> map) throws Exception;
|
||||
}
|
||||
|
||||
@@ -587,6 +587,9 @@ public class BankGetDataMethodByJHLZF {
|
||||
// 订单号: AF列(索引31), 柜台编号: AG列(索引32), 系统参考号: AH列(索引33),
|
||||
// 持卡人姓名: AI列(索引34), 付款凭证号: AJ列(索引35), 备注1: AK列(索引36), 备注2: AL列(索引37)
|
||||
|
||||
// 获取终端号(C列,索引2)用于判断是否为住院订单
|
||||
String zdh = s1.length > 2 ? s1[2].trim() : "";
|
||||
|
||||
// 交易日期和时间
|
||||
jyrq = s1.length > 13 ? s1[13] : "";
|
||||
String jysj = s1.length > 14 ? s1[14] : ""; // 交易时间在第14列(索引14)
|
||||
@@ -609,6 +612,7 @@ public class BankGetDataMethodByJHLZF {
|
||||
bankbillHistory.setCJyrq(jyrq); // N列(索引13): 交易日期
|
||||
bankbillHistory.setCJysj(jysj); // P列(索引15): 交易时间
|
||||
bankbillHistory.setCJyje(s1.length > 20 ? s1[20] : "0"); // U列(索引20): 交易金额
|
||||
bankbillHistory.setCZdh(zdh); // C列(索引2): 终端号
|
||||
|
||||
// QR列(索引16): 支付方式(Excel中就是微信支付、支付宝等)
|
||||
String zffs = s1.length > 16 ? s1[16].trim() : "建行龙支付";
|
||||
@@ -689,6 +693,15 @@ public class BankGetDataMethodByJHLZF {
|
||||
bankbillHistory.setCFdjc(""); // 分店简称(空)
|
||||
bankbillHistory.setCZddh(""); // 子订单号(空)
|
||||
bankbillHistory.setBillTableName("建行龙支付对账单"); // 对账表名
|
||||
|
||||
// 根据终端号判断是否为住院订单
|
||||
// 终端号为10091548或10091549的为住院订单,不参与对账
|
||||
if ("10091548".equals(zdh) || "10091549".equals(zdh)) {
|
||||
bankbillHistory.setIsInpatient("1"); // 标记为住院订单
|
||||
log.info("标记为住院订单: 终端号=" + zdh + ", 订单号=" + bankbillHistory.getCShddh());
|
||||
} else {
|
||||
bankbillHistory.setIsInpatient("0"); // 标记为非住院订单
|
||||
}
|
||||
|
||||
bankbillHistoryList.add(bankbillHistory);
|
||||
log.info("成功解析第 " + (i + 1) + " 行数据");
|
||||
|
||||
@@ -489,8 +489,10 @@ public class ReconciliationMethod {
|
||||
delMap.put("h_jylx", h_jylx);
|
||||
transactionDetailService.deleteHisAndThirdJoinDataByParamAndNotUnique(delMap);
|
||||
|
||||
//删除当天已经生成的该条对应的可能错帐记录
|
||||
unilateralService.deleteUnilateralByIdandStatus(delMap);
|
||||
// 删除当天生成的、与此重复订单号相关的、所有类型的单边账(包括HIS单边和银行单边)
|
||||
unilateralService.deleteUnilateralByIdandStatus(delMap); // 按 HIS 字段删除
|
||||
delMap.put("i_ddh", tranid); // tranid 与 i_ddh 在此场景下是同一个订单号
|
||||
unilateralService.deleteBankUnilateralByI_DDH(delMap); // 按银行字段删除
|
||||
|
||||
}
|
||||
|
||||
@@ -532,7 +534,8 @@ public class ReconciliationMethod {
|
||||
String amountStr = StringDUtil.changeNullToEmpty(hisDetailMap.get("AMOUNT"));
|
||||
if (!"".equals(amountStr)) {
|
||||
try {
|
||||
hisTotal = hisTotal.add(new java.math.BigDecimal(amountStr));
|
||||
// 使用 toBigDecimal 统一精度进行累加
|
||||
hisTotal = hisTotal.add(AmountUtil.toBigDecimal(amountStr));
|
||||
} catch (Exception e) {
|
||||
// 金额异常时跳过特殊处理,走原有逻辑
|
||||
hisTotal = null;
|
||||
@@ -545,7 +548,11 @@ public class ReconciliationMethod {
|
||||
HashMap<Object, Object> bankDetailMap = list2.get(0);
|
||||
String bankAmtStr = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYJE"));
|
||||
|
||||
if (AmountUtil.isAmountEqual(hisTotal.toString(), bankAmtStr)) {
|
||||
// 统一为两位小数的 BigDecimal 再进行比较,避免精度问题
|
||||
java.math.BigDecimal hisTotalDecimal = AmountUtil.toBigDecimal(hisTotal.toString());
|
||||
java.math.BigDecimal bankAmtDecimal = AmountUtil.toBigDecimal(bankAmtStr);
|
||||
|
||||
if (AmountUtil.isAmountEqual(hisTotalDecimal, bankAmtDecimal)) {
|
||||
// 以第一条 HIS 记录为代表,构造一条正常关联记录
|
||||
HashMap<Object, Object> hisDetailMap = list.get(0);
|
||||
|
||||
@@ -566,21 +573,26 @@ public class ReconciliationMethod {
|
||||
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);
|
||||
// HIS 端字段
|
||||
addMap.put("tradeTime", tradeTime);
|
||||
addMap.put("tranID", tranid); // HIS-平台流水号
|
||||
addMap.put("BizType", bizType);
|
||||
addMap.put("h_jylx", hJylx);
|
||||
addMap.put("amount", amount);
|
||||
addMap.put("amount", amount); // HIS-汇总金额
|
||||
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", "");
|
||||
@@ -588,7 +600,21 @@ public class ReconciliationMethod {
|
||||
addMap.put("is_active", "1");
|
||||
addMap.put("join_id", "");
|
||||
|
||||
trueList.add(addMap);
|
||||
// 删除第三方单边账记录(third_join_his 中 err_type = '2')
|
||||
HashMap<Object, Object> delThirdMap = new HashMap<>();
|
||||
delThirdMap.put("trade_date", trade_date);
|
||||
delThirdMap.put("i_ddh", i_ddh);
|
||||
transactionDetailService.deleteThirdUnilateralByIddh(delThirdMap);
|
||||
|
||||
// 立即写入聚合后的正常对账记录
|
||||
transactionDetailService.addNotUniqueData(Collections.singletonList(addMap));
|
||||
|
||||
// 清除因银行单边账先生成而残留的记录
|
||||
HashMap<Object, Object> delBankUnilateralMap = new HashMap<>();
|
||||
delBankUnilateralMap.put("trade_date", trade_date);
|
||||
delBankUnilateralMap.put("i_ddh", i_ddh);
|
||||
unilateralService.deleteBankUnilateralByI_DDH(delBankUnilateralMap);
|
||||
|
||||
// 已按“合并金额相等”视为正常账,不再按单条金额匹配,直接处理下一组重复 TranID
|
||||
continue;
|
||||
}
|
||||
@@ -673,8 +699,8 @@ public class ReconciliationMethod {
|
||||
|
||||
int errNum = 0;
|
||||
|
||||
//如果两边都有 取出数据设置差异
|
||||
if (hisIterator.hasNext() && bankIterator.hasNext()) {
|
||||
// 循环处理差异账
|
||||
while (hisIterator.hasNext() && bankIterator.hasNext()) {
|
||||
HashMap<Object, Object> hisDetailMap = hisIterator.next();
|
||||
HashMap<Object, Object> bankDetailMap = bankIterator.next();
|
||||
|
||||
@@ -749,7 +775,12 @@ public class ReconciliationMethod {
|
||||
//将记录添加到单边账表
|
||||
unilateralService.insertUnilateral(addUnilateralMap);
|
||||
|
||||
} else if (hisIterator.hasNext()) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 处理HIS单边账
|
||||
while (hisIterator.hasNext()) {
|
||||
|
||||
HashMap<Object, Object> hisDetailMap = hisIterator.next();
|
||||
|
||||
@@ -818,7 +849,10 @@ public class ReconciliationMethod {
|
||||
//将记录添加到单边账表
|
||||
unilateralService.insertUnilateral(addUnilateralMap);
|
||||
|
||||
} else if (bankIterator.hasNext()) {
|
||||
}
|
||||
|
||||
// 处理银行单边账
|
||||
while (bankIterator.hasNext()) {
|
||||
HashMap<Object, Object> bankDetailMap = bankIterator.next();
|
||||
|
||||
String i_jyje = StringDUtil.changeNullToEmpty(bankDetailMap.get("I_JYJE"));
|
||||
|
||||
@@ -71,6 +71,8 @@ public interface TransactionDetailService {
|
||||
*/
|
||||
void deleteHisAndThirdJoinDataByParamAndNotUnique(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
void deleteThirdUnilateralByIddh(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
/**
|
||||
* @description: 添加处理后的非唯一记录回数据
|
||||
* @author thuang
|
||||
|
||||
@@ -36,4 +36,9 @@ public interface UnilateralService {
|
||||
* 根据ID删除单边账记录
|
||||
*/
|
||||
void deleteUnilateralById(HashMap<Object, Object> map) throws Exception;
|
||||
|
||||
/**
|
||||
* 根据订单号删除银行单边账
|
||||
*/
|
||||
void deleteBankUnilateralByI_DDH(HashMap<Object, Object> map) throws Exception;
|
||||
}
|
||||
|
||||
@@ -159,6 +159,11 @@ public class TransactionDetailServiceImpl implements TransactionDetailService {
|
||||
transactionDetailMapper.deleteHisAndThirdJoinDataByParamAndNotUnique(map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteThirdUnilateralByIddh(HashMap<Object, Object> map) throws Exception {
|
||||
transactionDetailMapper.deleteThirdUnilateralByIddh(map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addNotUniqueData(List<HashMap<Object, Object>> list) throws Exception {
|
||||
transactionDetailMapper.addNotUniqueData(list);
|
||||
|
||||
@@ -86,4 +86,9 @@ public class UnilateralServiceImpl implements UnilateralService {
|
||||
public void deleteUnilateralById(HashMap<Object, Object> map) throws Exception {
|
||||
unilateralMapper.deleteUnilateralById(map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteBankUnilateralByI_DDH(HashMap<Object, Object> map) throws Exception {
|
||||
unilateralMapper.deleteBankUnilateralByI_DDH(map);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user