update:修复军保统计页面bug
This commit is contained in:
@@ -1,90 +0,0 @@
|
||||
# 自定义PayType配置总结
|
||||
|
||||
## 用户自定义的PayType编码方案
|
||||
|
||||
基于用户要求,配置如下PayType编码:
|
||||
|
||||
| HIS支付方式 | PayType编码 | 说明 |
|
||||
|------------|------------|------|
|
||||
| 现金 | 5 | 现金支付 |
|
||||
| 微信 | 1 | 微信支付 |
|
||||
| 聚合支付 | 2 | 聚合支付 |
|
||||
| 军保支付 | 3 | 军保支付 |
|
||||
| 其他 | 4 | 其他/未知支付方式 |
|
||||
|
||||
## 字典表SQL配置
|
||||
|
||||
```sql
|
||||
-- 清理现有数据
|
||||
DELETE FROM `dicinfo` WHERE `parent_code` = 'PAY_TYPE' AND `diccode` != 'PAY_TYPE';
|
||||
|
||||
-- 用户自定义编码配置
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_001', '现金', '5', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 1);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_002', '微信', '1', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 2);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_003', '聚合支付', '2', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 3);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_004', '军保支付', '3', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 4);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_005', '其他', '4', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 5);
|
||||
```
|
||||
|
||||
## 汇总统计分类适配
|
||||
|
||||
### HIS端统计适配
|
||||
```java
|
||||
// PaymentStatisticsController.java 中的统计分类
|
||||
hisMoneyData.put("1", "0"); // 微信支付
|
||||
hisMoneyData.put("2", "0"); // 聚合支付
|
||||
hisMoneyData.put("3", "0"); // 军保支付
|
||||
hisMoneyData.put("4", "0"); // 其他
|
||||
hisMoneyData.put("5", "0"); // 现金支付
|
||||
```
|
||||
|
||||
### 转换逻辑适配
|
||||
```java
|
||||
// HISGetDataMethodByJH.java 中的转换方法
|
||||
private String convertPayTypeByDictionary(String originalPayType, HashMap<String, String> payTypeMap) {
|
||||
// 严格字典匹配,未匹配则返回"4"(其他)
|
||||
// 支持的精确匹配:现金、微信、聚合支付、军保支付
|
||||
}
|
||||
```
|
||||
|
||||
## 实施检查清单
|
||||
|
||||
### 1. 数据库配置 ✓
|
||||
- [x] 执行字典表SQL脚本
|
||||
- [x] 验证字典数据正确插入
|
||||
|
||||
### 2. 代码配置 ✓
|
||||
- [x] 更新HISGetDataMethodByJH转换逻辑
|
||||
- [x] 更新PaymentStatisticsController统计逻辑
|
||||
- [x] 修改默认值从"5"改为"4"
|
||||
|
||||
### 3. 验证测试 ⚠️
|
||||
- [ ] 重启应用加载新字典数据
|
||||
- [ ] 执行HIS数据同步测试
|
||||
- [ ] 验证PayType转换结果
|
||||
- [ ] 检查汇总统计页面数据
|
||||
|
||||
## 预期结果
|
||||
|
||||
执行配置后,HIS数据入库时:
|
||||
- `现金` → PayType: `5`
|
||||
- `微信` → PayType: `1`
|
||||
- `聚合支付` → PayType: `2`
|
||||
- `军保支付` → PayType: `3`
|
||||
- 未匹配 → PayType: `4`
|
||||
|
||||
汇总统计页面将按照这5种分类正确显示交易数据。
|
||||
|
||||
## 监控要点
|
||||
|
||||
1. **日志监控**: 关注转换过程中的警告日志
|
||||
2. **数据验证**: 检查入库后PayType分布是否符合预期
|
||||
3. **统计准确性**: 验证汇总页面各支付方式统计数据
|
||||
|
||||
## 问题排查
|
||||
|
||||
如果发现PayType全部变成"4":
|
||||
1. 检查字典表数据是否正确
|
||||
2. 确认HIS原始数据支付方式名称与字典表dicname完全一致
|
||||
3. 查看应用日志中的转换警告信息
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
# HIS支付方式配置指南
|
||||
|
||||
## 问题背景
|
||||
HIS系统有四种支付方式:现金、微信、聚合支付、军保支付,需要与汇总统计接口的逻辑匹配。
|
||||
|
||||
## 汇总统计接口期望的PayType编码
|
||||
|
||||
### HIS端统计分类:
|
||||
- `1` - 扫码支付(聚合支付,包含微信/支付宝等)
|
||||
- `2` - 银行卡支付
|
||||
- `3` - 掌医支付
|
||||
- `4` - 现金支付
|
||||
- `5` - 其他
|
||||
|
||||
### 三方端统计分类:
|
||||
- `1_1` - 微信支付
|
||||
- `1_2` - 刷卡支付
|
||||
- `1_3` - 支付宝支付
|
||||
- `1_4` - 其他支付
|
||||
- `2` - 银行卡支付
|
||||
- `3` - 掌医支付
|
||||
- `4` - 现金支付
|
||||
- `5` - 其他
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 1. 字典表配置
|
||||
|
||||
执行以下SQL更新字典表:
|
||||
|
||||
```sql
|
||||
-- 方案A:更新现有数据
|
||||
UPDATE `dicinfo` SET `dicvalue` = '4' WHERE `dicname` = '现金支付' AND `parent_code` = 'PAY_TYPE';
|
||||
UPDATE `dicinfo` SET `dicvalue` = '1' WHERE `dicname` = '微信' AND `parent_code` = 'PAY_TYPE';
|
||||
INSERT INTO `dicinfo` VALUES ('juhezf001', '聚合支付', '1', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 6);
|
||||
INSERT INTO `dicinfo` VALUES ('junbao001', '军保支付', '3', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 7);
|
||||
|
||||
-- 方案B:重新创建(推荐)
|
||||
DELETE FROM `dicinfo` WHERE `parent_code` = 'PAY_TYPE' AND `diccode` != 'PAY_TYPE';
|
||||
|
||||
INSERT INTO `dicinfo` VALUES ('pay_type_001', '扫码支付', '1', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 1);
|
||||
INSERT INTO `dicinfo` VALUES ('pay_type_002', '银行卡支付', '2', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 2);
|
||||
INSERT INTO `dicinfo` VALUES ('pay_type_003', '军保支付', '3', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 3);
|
||||
INSERT INTO `dicinfo` VALUES ('pay_type_004', '现金支付', '4', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 4);
|
||||
INSERT INTO `dicinfo` VALUES ('pay_type_005', '其他', '5', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 5);
|
||||
```
|
||||
|
||||
### 2. HIS数据转换映射
|
||||
|
||||
已在 `HISGetDataMethodByJH.java` 中添加了 `convertPayTypeToStandard()` 方法:
|
||||
|
||||
```java
|
||||
private String convertPayTypeToStandard(String originalPayType) {
|
||||
if (originalPayType == null || originalPayType.trim().isEmpty()) {
|
||||
return "5"; // 其他
|
||||
}
|
||||
|
||||
String payType = originalPayType.trim().toLowerCase();
|
||||
|
||||
// 根据你的四种HIS支付方式进行转换
|
||||
if (payType.contains("现金")) {
|
||||
return "4"; // 现金支付
|
||||
} else if (payType.contains("微信") || payType.contains("聚合")) {
|
||||
return "1"; // 扫码支付(包含微信和聚合支付)
|
||||
} else if (payType.contains("军保") || payType.contains("掌医")) {
|
||||
return "3"; // 军保支付/掌医支付
|
||||
} else if (payType.contains("银行卡") || payType.contains("刷卡")) {
|
||||
return "2"; // 银行卡支付
|
||||
} else {
|
||||
return "5"; // 其他
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 转换逻辑说明
|
||||
|
||||
| HIS原始支付方式 | 转换后PayType | 汇总统计分类 |
|
||||
|----------------|--------------|-------------|
|
||||
| 现金 | 4 | 现金支付 |
|
||||
| 微信 | 1 | 扫码支付 |
|
||||
| 聚合支付 | 1 | 扫码支付 |
|
||||
| 军保支付 | 3 | 掌医支付 |
|
||||
| 其他未知 | 5 | 其他 |
|
||||
|
||||
### 4. 验证步骤
|
||||
|
||||
1. **执行字典表更新SQL**
|
||||
2. **重启应用**确保字典数据重新加载
|
||||
3. **执行HIS数据同步任务**
|
||||
4. **查看汇总统计页面**验证数据是否正确分类
|
||||
5. **检查日志**确认转换逻辑是否正常工作
|
||||
|
||||
### 5. 注意事项
|
||||
|
||||
1. **数据一致性**:确保所有历史数据也按新的PayType编码存储
|
||||
2. **缓存清理**:如果系统有缓存,需要清理字典缓存
|
||||
3. **测试环境验证**:先在测试环境验证转换逻辑
|
||||
4. **监控异常**:关注转换过程中的异常日志
|
||||
|
||||
### 6. 扩展性考虑
|
||||
|
||||
如果未来需要新增支付方式,只需要:
|
||||
1. 在字典表中添加新的记录
|
||||
2. 在 `convertPayTypeToStandard()` 方法中添加转换逻辑
|
||||
3. 确保汇总统计接口能正确处理新的PayType
|
||||
|
||||
## 完成后的效果
|
||||
|
||||
完成配置后,汇总统计接口将能正确统计四种支付方式的数据,并在页面上正确显示各支付方式的交易笔数和金额统计。
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
# HIS支付方式严格匹配配置方案
|
||||
|
||||
## 配置要求
|
||||
严格按照以下四种HIS支付方式进行字典表配置和转换:
|
||||
1. **现金** (一字不差)
|
||||
2. **微信** (一字不差)
|
||||
3. **聚合支付** (一字不差)
|
||||
4. **军保支付** (一字不差)
|
||||
|
||||
## 字典表配置
|
||||
|
||||
### 执行SQL脚本
|
||||
```sql
|
||||
-- 1. 清理现有PAY_TYPE数据(保留父节点)
|
||||
DELETE FROM `dicinfo` WHERE `parent_code` = 'PAY_TYPE' AND `diccode` != 'PAY_TYPE';
|
||||
|
||||
-- 2. 添加严格匹配的四种支付方式
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_001', '现金', '4', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 1);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_002', '微信', '1', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 2);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_003', '聚合支付', '1', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 3);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_004', '军保支付', '3', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 4);
|
||||
INSERT INTO `dicinfo` VALUES ('his_pay_005', '其他', '5', 'PAY_TYPE', '2024-01-01 00:00:00', '2024-01-01 00:00:00', 5);
|
||||
```
|
||||
|
||||
### 字典映射关系(用户自定义编码)
|
||||
| HIS支付方式 | 字典dicname | 字典dicvalue | 汇总统计分类 |
|
||||
|------------|-------------|-------------|-------------|
|
||||
| 现金 | 现金 | 5 | 现金支付 |
|
||||
| 微信 | 微信 | 1 | 微信支付 |
|
||||
| 聚合支付 | 聚合支付 | 2 | 聚合支付 |
|
||||
| 军保支付 | 军保支付 | 3 | 军保支付 |
|
||||
| 其他 | 其他 | 4 | 其他 |
|
||||
|
||||
## 代码转换逻辑
|
||||
|
||||
### 转换方法特点
|
||||
```java
|
||||
private String convertPayTypeByDictionary(String originalPayType, HashMap<String, String> payTypeMap) {
|
||||
// 1. 严格字符串匹配 - 一字不差
|
||||
// 2. 先trim()去除空格
|
||||
// 3. 直接通过字典表Map查找
|
||||
// 4. 找不到记录警告日志并返回"5"(其他)
|
||||
}
|
||||
```
|
||||
|
||||
### 转换流程
|
||||
1. **获取HIS原始支付方式**: `hisBillHashMap.get("payType")`
|
||||
2. **去除空格**: `originalPayType.trim()`
|
||||
3. **字典表查找**: `payTypeMap.get(payTypeName)`
|
||||
4. **严格匹配**: 必须完全一致才能匹配成功
|
||||
5. **异常处理**: 匹配失败记录日志,返回"4"(其他)
|
||||
|
||||
## 验证方法
|
||||
|
||||
### 1. 数据库验证
|
||||
```sql
|
||||
-- 查看字典表配置
|
||||
SELECT diccode, dicname, dicvalue, sort_no
|
||||
FROM dicinfo
|
||||
WHERE parent_code = 'PAY_TYPE'
|
||||
ORDER BY sort_no;
|
||||
```
|
||||
|
||||
### 2. 日志验证
|
||||
查看应用日志中是否有警告信息:
|
||||
```
|
||||
WARN - 未在字典表中找到支付方式映射: [异常支付方式名称], 已转换为其他支付方式
|
||||
```
|
||||
|
||||
### 3. 数据验证
|
||||
```sql
|
||||
-- 查看转换后的PayType分布
|
||||
SELECT PayType, COUNT(*) as count
|
||||
FROM hisbills_history
|
||||
WHERE trade_date = '2024-01-01'
|
||||
GROUP BY PayType;
|
||||
```
|
||||
|
||||
## 严格匹配的优势
|
||||
|
||||
1. **精确性**: 完全按照字典表配置,避免模糊匹配错误
|
||||
2. **可维护性**: 新增支付方式只需要在字典表添加记录
|
||||
3. **可追溯性**: 未匹配的支付方式会记录日志
|
||||
4. **数据一致性**: 确保入库的PayType值完全符合汇总统计接口要求
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **字符严格匹配**: HIS数据中的支付方式名称必须与字典表中的dicname完全一致
|
||||
2. **空格处理**: 系统会自动trim()处理首尾空格
|
||||
3. **大小写敏感**: 字典表中是"现金",HIS数据必须也是"现金"
|
||||
4. **新增支付方式**: 必须先在字典表中添加对应记录
|
||||
5. **历史数据**: 建议重新同步历史数据以保证数据一致性
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 如果PayType都变成"4"(其他):
|
||||
1. 检查字典表是否正确配置
|
||||
2. 检查HIS数据中的支付方式名称是否与字典表完全一致
|
||||
3. 查看应用日志中的警告信息
|
||||
4. 验证payTypeMap是否正确加载
|
||||
|
||||
### 日志示例
|
||||
```
|
||||
正常: HIS支付方式 [现金] 成功转换为 PayType [5]
|
||||
异常: WARN - 未在字典表中找到支付方式映射: [現金], 已转换为其他支付方式
|
||||
```
|
||||
@@ -125,13 +125,29 @@ public class MilitaryInsuranceController {
|
||||
|
||||
// 如果没有传递时间参数,设置默认查询今日数据
|
||||
if (map.get("startTime") == null || "".equals(map.get("startTime"))) {
|
||||
map.put("startTime", DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd) + " 00:00:00");
|
||||
map.put("startTime", DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd));
|
||||
}
|
||||
if (map.get("endTime") == null || "".equals(map.get("endTime"))) {
|
||||
map.put("endTime", DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd) + " 23:59:59");
|
||||
map.put("endTime", DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd));
|
||||
}
|
||||
|
||||
// 处理前端传递的带时间格式的日期,提取日期部分
|
||||
if (map.get("startTime") != null && map.get("startTime").toString().contains(" ")) {
|
||||
String startTime = map.get("startTime").toString();
|
||||
map.put("startTime", startTime.substring(0, 10)); // 提取日期部分
|
||||
}
|
||||
if (map.get("endTime") != null && map.get("endTime").toString().contains(" ")) {
|
||||
String endTime = map.get("endTime").toString();
|
||||
map.put("endTime", endTime.substring(0, 10)); // 提取日期部分
|
||||
}
|
||||
|
||||
// 添加调试信息
|
||||
System.out.println("军保统计查询参数: " + map.toString());
|
||||
|
||||
List<HashMap<Object, Object>> hisDetailCount = hisDetailService.findHisDetailCountData(map);
|
||||
|
||||
// 添加调试信息
|
||||
System.out.println("军保统计查询结果: " + (hisDetailCount != null ? hisDetailCount.toString() : "null"));
|
||||
|
||||
if (hisDetailCount != null && hisDetailCount.size() > 0) {
|
||||
responseMap.put("money", hisDetailCount.get(0).get("MONEY"));
|
||||
|
||||
Reference in New Issue
Block a user