Browse Source

bugfix:卡务操作-错扣补款;

bing 4 days ago
parent
commit
aadb2f80dd
13 changed files with 360 additions and 8 deletions
  1. 2 2
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/BuildAreaTypeEnum.java
  2. 34 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/ConsumeRecordTypeEnum.java
  3. 4 0
      ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java
  4. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/errfill/ErrFillBusiness.java
  5. 10 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfConsumeDetailController.java
  6. 5 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfConsumeDetail.java
  7. 5 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfConsumeDetailBo.java
  8. 239 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfConsumeDetailCKBKVo.java
  9. 5 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfConsumeDetailVo.java
  10. 2 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfConsumeDetailService.java
  11. 51 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfConsumeDetailServiceImpl.java
  12. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaNormalConsumer.java
  13. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRegisterInfoServiceImpl.java

+ 2 - 2
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/BuildAreaTypeEnum.java

@@ -15,9 +15,9 @@ public enum BuildAreaTypeEnum {
15 15
     private final String code;
16 16
     private final String name;
17 17
 
18
-    BuildAreaTypeEnum(String code, String message) {
18
+    BuildAreaTypeEnum(String code, String name) {
19 19
         this.code = code;
20
-        this.name = message;
20
+        this.name = name;
21 21
     }
22 22
 
23 23
     public String code() {

+ 34 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/ConsumeRecordTypeEnum.java

@@ -0,0 +1,34 @@
1
+package org.dromara.common.core.enums;
2
+
3
+/**
4
+ * 消费类型  consume_record_type
5
+ */
6
+public enum ConsumeRecordTypeEnum {
7
+    CKBK("0","错扣补款消费"),
8
+    XFJXF_1("1","消费机消费"),
9
+    BKXF("3","补扣消费"),
10
+    XFJXF_4("4","消费机消费");
11
+
12
+    private final String code;
13
+    private final String name;
14
+
15
+    ConsumeRecordTypeEnum(String code, String name) {
16
+        this.code = code;
17
+        this.name = name;
18
+    }
19
+
20
+    public String code() {
21
+        return this.code;
22
+    }
23
+
24
+    public String message() {
25
+        return this.name;
26
+    }
27
+
28
+
29
+    @Override
30
+    public String toString() {
31
+        return this.name();
32
+    }
33
+
34
+}

+ 4 - 0
ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/TenantKeyPrefixHandler.java

@@ -36,6 +36,8 @@ public class TenantKeyPrefixHandler extends KeyPrefixHandler {
36 36
         String tenantId = TenantHelper.getTenantId();
37 37
         if (StringUtils.isBlank(tenantId)) {
38 38
             log.error("无法获取有效的租户id -> Null");
39
+            // todo 暂时设置租户id
40
+            tenantId = "20200813044411";
39 41
         }
40 42
         if (StringUtils.startsWith(name, tenantId + "")) {
41 43
             // 如果存在则直接返回
@@ -62,6 +64,8 @@ public class TenantKeyPrefixHandler extends KeyPrefixHandler {
62 64
         String tenantId = TenantHelper.getTenantId();
63 65
         if (StringUtils.isBlank(tenantId)) {
64 66
             log.error("无法获取有效的租户id -> Null");
67
+            // todo 暂时设置租户id
68
+            tenantId = "20200813044411";
65 69
         }
66 70
         if (StringUtils.startsWith(unmap, tenantId + "")) {
67 71
             // 如果存在则删除

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/errfill/ErrFillBusiness.java

@@ -151,7 +151,7 @@ public class ErrFillBusiness {
151 151
         //错扣补款设置statusFlag为0
152 152
         consumeDetailBo.setStatusFlag(0L);
153 153
         //将需要补款的消费记录Id记入原始消费Id,以便追查消费记录是否有补扣以及对应的补扣记录
154
-        consumeDetailBo.setOriginalId(bo.getConsumeId());
154
+        consumeDetailBo.setDetailId(bo.getConsumeId());
155 155
         consumeDetailBo.setRemark(remark);
156 156
 
157 157
         return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);

+ 10 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfConsumeDetailController.java

@@ -9,6 +9,7 @@ import jakarta.validation.constraints.*;
9 9
 import cn.dev33.satoken.annotation.SaCheckPermission;
10 10
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
11 11
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
12
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
12 13
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
13 14
 import org.dromara.common.satoken.utils.LoginHelper;
14 15
 import org.springframework.web.bind.annotation.*;
@@ -49,6 +50,15 @@ public class XfConsumeDetailController extends BaseController {
49 50
         return xfConsumeDetailService.queryPageList(bo, pageQuery);
50 51
     }
51 52
 
53
+    /**
54
+     * 查询消费明细列表 for 错扣补款
55
+     */
56
+    @SaCheckPermission("consumption:xfConsumeDetail:list")
57
+    @GetMapping("/listCKBK")
58
+    public TableDataInfo<XfConsumeDetailCKBKVo> listCKBK(XfConsumeDetailBo bo, PageQuery pageQuery) {
59
+        return xfConsumeDetailService.queryPageCKBKList(bo, pageQuery);
60
+    }
61
+
52 62
     @GetMapping("/selfList")
53 63
     public TableDataInfo<XfConsumeDetailVo> selfList(XfConsumeDetailBo bo, PageQuery pageQuery) {
54 64
         bo.setUserId(LoginHelper.getUserId());

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfConsumeDetail.java

@@ -196,4 +196,9 @@ public class XfConsumeDetail extends TenantEntity {
196 196
     @TableLogic
197 197
     private String delFlag;
198 198
 
199
+    /**
200
+     * 针对错扣补款的消费记录的id
201
+     */
202
+    private String detailId;
203
+
199 204
 }

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfConsumeDetailBo.java

@@ -202,5 +202,10 @@ public class XfConsumeDetailBo extends BaseEntity {
202 202
      */
203 203
     private String remark;
204 204
 
205
+    /**
206
+     * 针对错扣补款的消费记录的id
207
+     */
208
+    private String detailId;
209
+
205 210
 
206 211
 }

+ 239 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfConsumeDetailCKBKVo.java

@@ -0,0 +1,239 @@
1
+package org.dromara.backstage.consumption.domain.vo;
2
+
3
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
4
+import com.alibaba.excel.annotation.ExcelProperty;
5
+import io.github.linpeilie.annotations.AutoMapper;
6
+import lombok.Data;
7
+import org.dromara.backstage.consumption.domain.XfConsumeDetail;
8
+import org.dromara.common.excel.annotation.ExcelDictFormat;
9
+import org.dromara.common.excel.convert.ExcelDictConvert;
10
+
11
+import java.io.Serial;
12
+import java.io.Serializable;
13
+import java.math.BigDecimal;
14
+import java.util.Date;
15
+import java.util.List;
16
+
17
+
18
+/**
19
+ * 消费明细视图对象 t_xf_consumeDetail
20
+ *
21
+ * @author LionLi
22
+ * @date 2024-08-15
23
+ */
24
+@Data
25
+@ExcelIgnoreUnannotated
26
+@AutoMapper(target = XfConsumeDetail.class)
27
+public class XfConsumeDetailCKBKVo implements Serializable {
28
+
29
+    @Serial
30
+    private static final long serialVersionUID = 1L;
31
+
32
+    /**
33
+     * 消费记录Id,主键
34
+     */
35
+    @ExcelProperty(value = "消费记录Id,主键")
36
+    private String consumeId;
37
+
38
+    /**
39
+     * 原始记录Id,主键
40
+     */
41
+    @ExcelProperty(value = "原始记录Id,主键")
42
+    private String originalId;
43
+
44
+    /**
45
+     * 记录Id
46
+     */
47
+    @ExcelProperty(value = "记录Id")
48
+    private Long recordId;
49
+
50
+    /**
51
+     * 人员Id
52
+     */
53
+    @ExcelProperty(value = "人员Id")
54
+    private Long userId;
55
+
56
+    /**
57
+     * 学/工号
58
+     */
59
+    @ExcelProperty(value = "学/工号")
60
+    private String userNumb;
61
+
62
+    /**
63
+     * 用户姓名
64
+     */
65
+    @ExcelProperty(value = "用户姓名")
66
+    private String realName;
67
+
68
+    /**
69
+     * 部门Id
70
+     */
71
+    @ExcelProperty(value = "部门Id")
72
+    private Long deptId;
73
+
74
+    /**
75
+     * 部门名称
76
+     */
77
+    @ExcelProperty(value = "部门名称")
78
+    private String deptName;
79
+
80
+    /**
81
+     * 消费日期
82
+     */
83
+    @ExcelProperty(value = "消费日期")
84
+    private Date consumeDate;
85
+
86
+    /**
87
+     * 消费金额
88
+     */
89
+    @ExcelProperty(value = "消费金额")
90
+    private BigDecimal consumeMoney;
91
+
92
+    /**
93
+     * 卡流水号
94
+     */
95
+    @ExcelProperty(value = "卡流水号")
96
+    private Long cardNo;
97
+
98
+    /**
99
+     * 物理卡号
100
+     */
101
+    @ExcelProperty(value = "物理卡号")
102
+    private Long factoryId;
103
+
104
+    /**
105
+     * 卡上余额
106
+     */
107
+    @ExcelProperty(value = "卡上余额")
108
+    private BigDecimal cardValue;
109
+
110
+    /**
111
+     * 卡使用次数
112
+     */
113
+    @ExcelProperty(value = "卡使用次数")
114
+    private Long cardCount;
115
+
116
+    /**
117
+     * 消费账户金额
118
+     */
119
+    @ExcelProperty(value = "消费账户金额")
120
+    private BigDecimal consumeBalance;
121
+
122
+    /**
123
+     * 设备机号
124
+     */
125
+    @ExcelProperty(value = "设备机号")
126
+    private Long termNo;
127
+
128
+    /**
129
+     * 设备名称
130
+     */
131
+    @ExcelProperty(value = "设备名称")
132
+    private String termName;
133
+
134
+    /**
135
+     * 机器流水号
136
+     */
137
+    @ExcelProperty(value = "机器流水号")
138
+    private Long termRecordId;
139
+
140
+    /**
141
+     * 是否已处理(和灰记录处理有关)
142
+     */
143
+    @ExcelProperty(value = "是否已处理(和灰记录处理有关)")
144
+    private Long analysisFlag;
145
+
146
+    /**
147
+     * 状态标识(记录消费类型?)
148
+     */
149
+    @ExcelProperty(value = "状态标识", converter = ExcelDictConvert.class)
150
+    @ExcelDictFormat(readConverterExp = "记=录消费类型?")
151
+    private Long statusFlag;
152
+
153
+    /**
154
+     * 营业员Id
155
+     */
156
+    @ExcelProperty(value = "营业员Id")
157
+    private Long operatorId;
158
+
159
+    /**
160
+     * 营业员名称
161
+     */
162
+    @ExcelProperty(value = "营业员名称")
163
+    private String operatorName;
164
+
165
+    /**
166
+     * 结算账户Id
167
+     */
168
+    @ExcelProperty(value = "结算账户Id")
169
+    private Long accountId;
170
+
171
+    /**
172
+     * 结算账户名称
173
+     */
174
+    @ExcelProperty(value = "结算账户名称")
175
+    private String accountName;
176
+
177
+    /**
178
+     * 房间Id
179
+     */
180
+    @ExcelProperty(value = "房间Id")
181
+    private Long roomId;
182
+
183
+    /**
184
+     * 房间名称
185
+     */
186
+    @ExcelProperty(value = "房间名称")
187
+    private String roomName;
188
+
189
+    /**
190
+     * 钱包类型
191
+     */
192
+    @ExcelProperty(value = "钱包类型")
193
+    private String bagType;
194
+
195
+    /**
196
+     * 餐类Id
197
+     */
198
+    @ExcelProperty(value = "餐类Id")
199
+    private Long mealType;
200
+
201
+    /**
202
+     * 餐类名称
203
+     */
204
+    @ExcelProperty(value = "餐类名称")
205
+    private String mealName;
206
+
207
+    /**
208
+     * 是否发送短信,见 sys_yes_no字典类别
209
+     */
210
+    @ExcelProperty(value = "是否发送短信,见 sys_yes_no字典类别")
211
+    private String smsSend;
212
+
213
+    /**
214
+     * 消费记录标志位?
215
+     */
216
+    @ExcelProperty(value = "消费记录标志位?")
217
+    private Long recordStatus;
218
+
219
+    /**
220
+     * 同步标志,0-未同步,1-已同步
221
+     */
222
+    @ExcelProperty(value = "同步标志,0-未同步,1-已同步")
223
+    private Long syncStatus;
224
+
225
+    /**
226
+     * 备注
227
+     */
228
+    @ExcelProperty(value = "备注")
229
+    private String remark;
230
+
231
+    /**
232
+     * 针对错扣补款的消费记录的id
233
+     */
234
+    private String detailId;
235
+
236
+    private List<XfConsumeDetailVo> details;
237
+
238
+
239
+}

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfConsumeDetailVo.java

@@ -228,5 +228,10 @@ public class XfConsumeDetailVo implements Serializable {
228 228
     @ExcelProperty(value = "备注")
229 229
     private String remark;
230 230
 
231
+    /**
232
+     * 针对错扣补款的消费记录的id
233
+     */
234
+    private String detailId;
235
+
231 236
 
232 237
 }

+ 2 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfConsumeDetailService.java

@@ -2,6 +2,7 @@ package org.dromara.backstage.consumption.service;
2 2
 
3 3
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
4 4
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
5
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
5 6
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
6 7
 import org.dromara.common.mybatis.core.page.TableDataInfo;
7 8
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -34,6 +35,7 @@ public interface IXfConsumeDetailService {
34 35
      * @return 消费明细分页列表
35 36
      */
36 37
     TableDataInfo<XfConsumeDetailVo> queryPageList(XfConsumeDetailBo bo, PageQuery pageQuery);
38
+    TableDataInfo<XfConsumeDetailCKBKVo> queryPageCKBKList(XfConsumeDetailBo bo, PageQuery pageQuery);
37 39
 
38 40
     /**
39 41
      * 查询符合条件的消费明细列表

+ 51 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfConsumeDetailServiceImpl.java

@@ -1,16 +1,20 @@
1 1
 package org.dromara.backstage.consumption.service.impl;
2 2
 
3
+import cn.hutool.core.bean.BeanUtil;
3 4
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 5
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
5 6
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6 7
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8
+import io.seata.common.util.CollectionUtils;
7 9
 import lombok.RequiredArgsConstructor;
8 10
 import org.dromara.backstage.consumption.domain.XfConsumeDetail;
9 11
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
10 12
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
13
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
11 14
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
12 15
 import org.dromara.backstage.consumption.mapper.XfConsumeDetailMapper;
13 16
 import org.dromara.backstage.consumption.service.IXfConsumeDetailService;
17
+import org.dromara.common.core.enums.ConsumeRecordTypeEnum;
14 18
 import org.dromara.common.core.utils.DateUtils;
15 19
 import org.dromara.common.core.utils.MapstructUtils;
16 20
 import org.dromara.common.core.utils.StringUtils;
@@ -20,9 +24,8 @@ import org.springframework.stereotype.Service;
20 24
 
21 25
 import java.time.YearMonth;
22 26
 import java.time.format.DateTimeFormatter;
23
-import java.util.Collection;
24
-import java.util.List;
25
-import java.util.Map;
27
+import java.util.*;
28
+import java.util.stream.Collectors;
26 29
 
27 30
 /**
28 31
  * 消费明细Service业务层处理
@@ -68,6 +71,51 @@ public class XfConsumeDetailServiceImpl implements IXfConsumeDetailService {
68 71
         return TableDataInfo.build(result);
69 72
     }
70 73
 
74
+    /**
75
+     * @param bo
76
+     * @param pageQuery
77
+     * @return
78
+     */
79
+    @Override
80
+    public TableDataInfo<XfConsumeDetailCKBKVo> queryPageCKBKList(XfConsumeDetailBo bo, PageQuery pageQuery) {
81
+        LambdaQueryWrapper<XfConsumeDetail> lqw = buildQueryWrapper(bo);
82
+        Map<String, Object> params = bo.getParams();
83
+        Object beginDate =  params.get("beginConsumeDate");
84
+        Object endDate =  params.get("endConsumeDate");
85
+        if(beginDate != null && endDate != null){
86
+            lqw.between(XfConsumeDetail::getConsumeDate, beginDate + " 00:00:00", endDate + " 23:59:59");
87
+        }
88
+        //lqw.orderByDesc(XfConsumeDetail::getConsumeDate);
89
+        lqw.in(XfConsumeDetail::getStatusFlag,
90
+            Arrays.asList(ConsumeRecordTypeEnum.XFJXF_1.code(), ConsumeRecordTypeEnum.XFJXF_4.code(), ConsumeRecordTypeEnum.BKXF.code()));
91
+        Page<XfConsumeDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
92
+        List<XfConsumeDetailCKBKVo> records = BeanUtil.copyToList(result.getRecords(), XfConsumeDetailCKBKVo.class);
93
+        Page<XfConsumeDetailCKBKVo> rs = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
94
+        rs.setRecords(records);
95
+
96
+        //查询各消费记录的 错扣补款记录
97
+        if(CollectionUtils.isNotEmpty(records)){
98
+            List<String> consumeIds = records.stream().map(XfConsumeDetailCKBKVo::getConsumeId).toList();
99
+            LambdaQueryWrapper<XfConsumeDetail> wrapper = new LambdaQueryWrapper<>();
100
+            wrapper.in(XfConsumeDetail::getDetailId, consumeIds);
101
+            wrapper.eq(XfConsumeDetail::getStatusFlag, ConsumeRecordTypeEnum.CKBK.code());
102
+            List<XfConsumeDetailVo> vos = baseMapper.selectVoList(wrapper);
103
+            if(CollectionUtils.isNotEmpty(vos)){
104
+                Map<String, List<XfConsumeDetailVo>> map = vos.stream().collect(Collectors.groupingBy(XfConsumeDetailVo::getDetailId));
105
+                records.forEach(item -> {
106
+                    List<XfConsumeDetailVo> list = map.get(item.getConsumeId());
107
+                    if(CollectionUtils.isNotEmpty(list)){
108
+                        item.setDetails(list);
109
+                    }else{
110
+                        item.setDetails(new ArrayList<>());
111
+                    }
112
+                });
113
+           }
114
+        }
115
+
116
+        return TableDataInfo.build(rs);
117
+    }
118
+
71 119
     /**
72 120
      * 查询符合条件的消费明细列表
73 121
      *

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaNormalConsumer.java

@@ -33,7 +33,7 @@ import java.util.HashMap;
33 33
  */
34 34
 @RequiredArgsConstructor
35 35
 @Slf4j
36
-@Component
36
+//@Component
37 37
 public class KafkaNormalConsumer {
38 38
     private final ConsumeStrategyContent consumeStrategyContent;
39 39
 

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRegisterInfoServiceImpl.java

@@ -193,7 +193,7 @@ public class SysRegisterInfoServiceImpl implements ISysRegisterInfoService {
193 193
             tempVo.setCustomerId(customerId);
194 194
             tempVo.setDealerNo(dealerNo);
195 195
             vo.set(tempVo);
196
-
196
+            // todo 获取不到租户id,无法设置缓存 使用默认租户id
197 197
             RedisUtils.setCacheObject(CacheNames.CUSTOM_PUB_KEY,customerPublicKey);
198 198
             RedisUtils.setCacheObject(CacheNames.CUSTOM_PRI_KEY,customerPrivateKey);
199 199
         });