Ver código fonte

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

bing 1 ano atrás
pai
commit
aadb2f80dd
13 arquivos alterados com 360 adições e 8 exclusões
  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 {
     private final String code;
     private final String name;
 
-    BuildAreaTypeEnum(String code, String message) {
+    BuildAreaTypeEnum(String code, String name) {
         this.code = code;
-        this.name = message;
+        this.name = name;
     }
 
     public String code() {

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

@@ -0,0 +1,34 @@
+package org.dromara.common.core.enums;
+
+/**
+ * 消费类型  consume_record_type
+ */
+public enum ConsumeRecordTypeEnum {
+    CKBK("0","错扣补款消费"),
+    XFJXF_1("1","消费机消费"),
+    BKXF("3","补扣消费"),
+    XFJXF_4("4","消费机消费");
+
+    private final String code;
+    private final String name;
+
+    ConsumeRecordTypeEnum(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String code() {
+        return this.code;
+    }
+
+    public String message() {
+        return this.name;
+    }
+
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+}

+ 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 {
         String tenantId = TenantHelper.getTenantId();
         if (StringUtils.isBlank(tenantId)) {
             log.error("无法获取有效的租户id -> Null");
+            // todo 暂时设置租户id
+            tenantId = "20200813044411";
         }
         if (StringUtils.startsWith(name, tenantId + "")) {
             // 如果存在则直接返回
@@ -62,6 +64,8 @@ public class TenantKeyPrefixHandler extends KeyPrefixHandler {
         String tenantId = TenantHelper.getTenantId();
         if (StringUtils.isBlank(tenantId)) {
             log.error("无法获取有效的租户id -> Null");
+            // todo 暂时设置租户id
+            tenantId = "20200813044411";
         }
         if (StringUtils.startsWith(unmap, tenantId + "")) {
             // 如果存在则删除

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

@@ -151,7 +151,7 @@ public class ErrFillBusiness {
         //错扣补款设置statusFlag为0
         consumeDetailBo.setStatusFlag(0L);
         //将需要补款的消费记录Id记入原始消费Id,以便追查消费记录是否有补扣以及对应的补扣记录
-        consumeDetailBo.setOriginalId(bo.getConsumeId());
+        consumeDetailBo.setDetailId(bo.getConsumeId());
         consumeDetailBo.setRemark(remark);
 
         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.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.springframework.web.bind.annotation.*;
@@ -49,6 +50,15 @@ public class XfConsumeDetailController extends BaseController {
         return xfConsumeDetailService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询消费明细列表 for 错扣补款
+     */
+    @SaCheckPermission("consumption:xfConsumeDetail:list")
+    @GetMapping("/listCKBK")
+    public TableDataInfo<XfConsumeDetailCKBKVo> listCKBK(XfConsumeDetailBo bo, PageQuery pageQuery) {
+        return xfConsumeDetailService.queryPageCKBKList(bo, pageQuery);
+    }
+
     @GetMapping("/selfList")
     public TableDataInfo<XfConsumeDetailVo> selfList(XfConsumeDetailBo bo, PageQuery pageQuery) {
         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 {
     @TableLogic
     private String delFlag;
 
+    /**
+     * 针对错扣补款的消费记录的id
+     */
+    private String detailId;
+
 }

+ 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 {
      */
     private String remark;
 
+    /**
+     * 针对错扣补款的消费记录的id
+     */
+    private String detailId;
+
 
 }

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

@@ -0,0 +1,239 @@
+package org.dromara.backstage.consumption.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.backstage.consumption.domain.XfConsumeDetail;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 消费明细视图对象 t_xf_consumeDetail
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = XfConsumeDetail.class)
+public class XfConsumeDetailCKBKVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 消费记录Id,主键
+     */
+    @ExcelProperty(value = "消费记录Id,主键")
+    private String consumeId;
+
+    /**
+     * 原始记录Id,主键
+     */
+    @ExcelProperty(value = "原始记录Id,主键")
+    private String originalId;
+
+    /**
+     * 记录Id
+     */
+    @ExcelProperty(value = "记录Id")
+    private Long recordId;
+
+    /**
+     * 人员Id
+     */
+    @ExcelProperty(value = "人员Id")
+    private Long userId;
+
+    /**
+     * 学/工号
+     */
+    @ExcelProperty(value = "学/工号")
+    private String userNumb;
+
+    /**
+     * 用户姓名
+     */
+    @ExcelProperty(value = "用户姓名")
+    private String realName;
+
+    /**
+     * 部门Id
+     */
+    @ExcelProperty(value = "部门Id")
+    private Long deptId;
+
+    /**
+     * 部门名称
+     */
+    @ExcelProperty(value = "部门名称")
+    private String deptName;
+
+    /**
+     * 消费日期
+     */
+    @ExcelProperty(value = "消费日期")
+    private Date consumeDate;
+
+    /**
+     * 消费金额
+     */
+    @ExcelProperty(value = "消费金额")
+    private BigDecimal consumeMoney;
+
+    /**
+     * 卡流水号
+     */
+    @ExcelProperty(value = "卡流水号")
+    private Long cardNo;
+
+    /**
+     * 物理卡号
+     */
+    @ExcelProperty(value = "物理卡号")
+    private Long factoryId;
+
+    /**
+     * 卡上余额
+     */
+    @ExcelProperty(value = "卡上余额")
+    private BigDecimal cardValue;
+
+    /**
+     * 卡使用次数
+     */
+    @ExcelProperty(value = "卡使用次数")
+    private Long cardCount;
+
+    /**
+     * 消费账户金额
+     */
+    @ExcelProperty(value = "消费账户金额")
+    private BigDecimal consumeBalance;
+
+    /**
+     * 设备机号
+     */
+    @ExcelProperty(value = "设备机号")
+    private Long termNo;
+
+    /**
+     * 设备名称
+     */
+    @ExcelProperty(value = "设备名称")
+    private String termName;
+
+    /**
+     * 机器流水号
+     */
+    @ExcelProperty(value = "机器流水号")
+    private Long termRecordId;
+
+    /**
+     * 是否已处理(和灰记录处理有关)
+     */
+    @ExcelProperty(value = "是否已处理(和灰记录处理有关)")
+    private Long analysisFlag;
+
+    /**
+     * 状态标识(记录消费类型?)
+     */
+    @ExcelProperty(value = "状态标识", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "记=录消费类型?")
+    private Long statusFlag;
+
+    /**
+     * 营业员Id
+     */
+    @ExcelProperty(value = "营业员Id")
+    private Long operatorId;
+
+    /**
+     * 营业员名称
+     */
+    @ExcelProperty(value = "营业员名称")
+    private String operatorName;
+
+    /**
+     * 结算账户Id
+     */
+    @ExcelProperty(value = "结算账户Id")
+    private Long accountId;
+
+    /**
+     * 结算账户名称
+     */
+    @ExcelProperty(value = "结算账户名称")
+    private String accountName;
+
+    /**
+     * 房间Id
+     */
+    @ExcelProperty(value = "房间Id")
+    private Long roomId;
+
+    /**
+     * 房间名称
+     */
+    @ExcelProperty(value = "房间名称")
+    private String roomName;
+
+    /**
+     * 钱包类型
+     */
+    @ExcelProperty(value = "钱包类型")
+    private String bagType;
+
+    /**
+     * 餐类Id
+     */
+    @ExcelProperty(value = "餐类Id")
+    private Long mealType;
+
+    /**
+     * 餐类名称
+     */
+    @ExcelProperty(value = "餐类名称")
+    private String mealName;
+
+    /**
+     * 是否发送短信,见 sys_yes_no字典类别
+     */
+    @ExcelProperty(value = "是否发送短信,见 sys_yes_no字典类别")
+    private String smsSend;
+
+    /**
+     * 消费记录标志位?
+     */
+    @ExcelProperty(value = "消费记录标志位?")
+    private Long recordStatus;
+
+    /**
+     * 同步标志,0-未同步,1-已同步
+     */
+    @ExcelProperty(value = "同步标志,0-未同步,1-已同步")
+    private Long syncStatus;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 针对错扣补款的消费记录的id
+     */
+    private String detailId;
+
+    private List<XfConsumeDetailVo> details;
+
+
+}

+ 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 {
     @ExcelProperty(value = "备注")
     private String remark;
 
+    /**
+     * 针对错扣补款的消费记录的id
+     */
+    private String detailId;
+
 
 }

+ 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;
 
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -34,6 +35,7 @@ public interface IXfConsumeDetailService {
      * @return 消费明细分页列表
      */
     TableDataInfo<XfConsumeDetailVo> queryPageList(XfConsumeDetailBo bo, PageQuery pageQuery);
+    TableDataInfo<XfConsumeDetailCKBKVo> queryPageCKBKList(XfConsumeDetailBo bo, PageQuery pageQuery);
 
     /**
      * 查询符合条件的消费明细列表

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

@@ -1,16 +1,20 @@
 package org.dromara.backstage.consumption.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.seata.common.util.CollectionUtils;
 import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.consumption.domain.XfConsumeDetail;
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeAnalyzeVo;
+import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailCKBKVo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
 import org.dromara.backstage.consumption.mapper.XfConsumeDetailMapper;
 import org.dromara.backstage.consumption.service.IXfConsumeDetailService;
+import org.dromara.common.core.enums.ConsumeRecordTypeEnum;
 import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -20,9 +24,8 @@ import org.springframework.stereotype.Service;
 
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 消费明细Service业务层处理
@@ -68,6 +71,51 @@ public class XfConsumeDetailServiceImpl implements IXfConsumeDetailService {
         return TableDataInfo.build(result);
     }
 
+    /**
+     * @param bo
+     * @param pageQuery
+     * @return
+     */
+    @Override
+    public TableDataInfo<XfConsumeDetailCKBKVo> queryPageCKBKList(XfConsumeDetailBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<XfConsumeDetail> lqw = buildQueryWrapper(bo);
+        Map<String, Object> params = bo.getParams();
+        Object beginDate =  params.get("beginConsumeDate");
+        Object endDate =  params.get("endConsumeDate");
+        if(beginDate != null && endDate != null){
+            lqw.between(XfConsumeDetail::getConsumeDate, beginDate + " 00:00:00", endDate + " 23:59:59");
+        }
+        //lqw.orderByDesc(XfConsumeDetail::getConsumeDate);
+        lqw.in(XfConsumeDetail::getStatusFlag,
+            Arrays.asList(ConsumeRecordTypeEnum.XFJXF_1.code(), ConsumeRecordTypeEnum.XFJXF_4.code(), ConsumeRecordTypeEnum.BKXF.code()));
+        Page<XfConsumeDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<XfConsumeDetailCKBKVo> records = BeanUtil.copyToList(result.getRecords(), XfConsumeDetailCKBKVo.class);
+        Page<XfConsumeDetailCKBKVo> rs = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
+        rs.setRecords(records);
+
+        //查询各消费记录的 错扣补款记录
+        if(CollectionUtils.isNotEmpty(records)){
+            List<String> consumeIds = records.stream().map(XfConsumeDetailCKBKVo::getConsumeId).toList();
+            LambdaQueryWrapper<XfConsumeDetail> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(XfConsumeDetail::getDetailId, consumeIds);
+            wrapper.eq(XfConsumeDetail::getStatusFlag, ConsumeRecordTypeEnum.CKBK.code());
+            List<XfConsumeDetailVo> vos = baseMapper.selectVoList(wrapper);
+            if(CollectionUtils.isNotEmpty(vos)){
+                Map<String, List<XfConsumeDetailVo>> map = vos.stream().collect(Collectors.groupingBy(XfConsumeDetailVo::getDetailId));
+                records.forEach(item -> {
+                    List<XfConsumeDetailVo> list = map.get(item.getConsumeId());
+                    if(CollectionUtils.isNotEmpty(list)){
+                        item.setDetails(list);
+                    }else{
+                        item.setDetails(new ArrayList<>());
+                    }
+                });
+           }
+        }
+
+        return TableDataInfo.build(rs);
+    }
+
     /**
      * 查询符合条件的消费明细列表
      *

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

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

+ 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 {
             tempVo.setCustomerId(customerId);
             tempVo.setDealerNo(dealerNo);
             vo.set(tempVo);
-
+            // todo 获取不到租户id,无法设置缓存 使用默认租户id
             RedisUtils.setCacheObject(CacheNames.CUSTOM_PUB_KEY,customerPublicKey);
             RedisUtils.setCacheObject(CacheNames.CUSTOM_PRI_KEY,customerPrivateKey);
         });