Bladeren bron

钱包相关时间维护和相关操作维护

xucaiqin 2 jaren geleden
bovenliggende
commit
862f5ef5e1

+ 5 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -84,5 +84,10 @@ public class RedisConstant {
      * 钱包关联企业
      */
     public static final String WALLET_UID = "wallet:uid";
+    /**
+     * 电子钱包时间记录
+     * uid:filter:channel->time
+     */
+    public static final String WALLET_TIME = "%s:%s:%s";
 
 }

+ 9 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WalletController.java

@@ -38,10 +38,17 @@ public class WalletController {
         return HttpResult.ok(walletService.createUser(createUserReq));
     }
 
+    /**
+     * 渠道用户开通信息
+     *
+     * @param uid
+     * @param channel
+     * @return
+     */
     @GetMapping("userInfo")
     public HttpResult userInfo(@NotBlank(message = "uid不能为空") @RequestParam("uid") String uid,
-                               @NotBlank(message = "channel不能为空")@RequestParam("channel") String channel) {
-        return HttpResult.ok(walletService.userInfo(uid,channel));
+                               @NotBlank(message = "channel不能为空") @RequestParam("channel") String channel) {
+        return HttpResult.ok(walletService.userInfo(uid, channel));
     }
 
     /**

+ 13 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpWalletMapper.java

@@ -0,0 +1,13 @@
+package com.sckw.payment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpWallet;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @date 2023-10-07 08:49:45
+* @author xucaiqin
+*/
+@Mapper
+public interface KwpWalletMapper extends BaseMapper<KwpWallet> {
+}

+ 102 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpWallet.java

@@ -0,0 +1,102 @@
+package com.sckw.payment.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 钱包相关操作表
+* @date 2023-10-07 08:49:45
+* @author xucaiqin
+*/
+@Data
+@TableName(value = "kwp_wallet")
+public class KwpWallet {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * uid
+     */
+    @TableField(value = "`uid`")
+    private String uid;
+
+    /**
+     * filter
+     */
+    @TableField(value = "`filter`")
+    private String filter;
+
+    /**
+     * 渠道
+     */
+    @TableField(value = "channel")
+    private String channel;
+
+    /**
+     * 相关操作
+     */
+    @TableField(value = "`action`")
+    private String action;
+
+    /**
+     * 关联的操作时间
+     */
+    @TableField(value = "action_time")
+    private LocalDateTime actionTime;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 关联操作对应的订单
+     */
+    @TableField(value = "order_no")
+    private String orderNo;
+
+    /**
+     * 关联操作对应的状态
+     */
+    @TableField(value = "`status`")
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_by")
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_by")
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    /**
+     * 0-正常 1-删除
+     */
+    @TableField(value = "del_flag")
+    private Integer delFlag;
+}

+ 52 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/WalletActionEnum.java

@@ -0,0 +1,52 @@
+package com.sckw.payment.model.constant;
+
+import java.util.Objects;
+
+/**
+ * 钱包操作
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum WalletActionEnum {
+    CHARGING(1, "充值中", "1"),
+    CASHING(2, "提现中", "2"),
+    TRANSFERRING(3, "转帐中", "3"),
+    REFUNDING(4, "退款中", "4"),
+    ;
+    private final int status;
+    private final String desc;
+    private final String label;
+
+    WalletActionEnum(int status, String desc, String label) {
+        this.status = status;
+        this.label = label;
+        this.desc = desc;
+    }
+
+    public static String getDesc(Integer status) {
+        if (Objects.isNull(status)) {
+            return "";
+        }
+        for (WalletActionEnum value : values()) {
+            if (status == value.getStatus()) {
+                return value.getDesc();
+            }
+        }
+        return "";
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+
+    public String getDesc() {
+        return desc;
+    }
+
+}

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/PrePayWalletVo.java

@@ -70,7 +70,7 @@ public class PrePayWalletVo implements Serializable {
     @JSONField(name = "total_ap_money")
     private String totalApMoney;
 
-    @JsonFormat(timezone = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
 
 

+ 100 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpWalletService.java

@@ -0,0 +1,100 @@
+package com.sckw.payment.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.DateTimeUtil;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.payment.dao.KwpWalletMapper;
+import com.sckw.payment.model.KwpWallet;
+import com.sckw.redis.constant.RedisConstant;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ * @author xucaiqin
+ * @date 2023-10-07 08:49:45
+ */
+@Service
+@RequiredArgsConstructor
+public class KwpWalletService {
+    private final KwpWalletMapper kwpWalletMapper;
+    private final RedisTemplate<String, Object> redisTemplate;
+
+
+    /**
+     * 更新或新增 相关操作
+     *
+     * @param kwpWallet
+     */
+    public void saveOrUpdate(KwpWallet kwpWallet) {
+        LambdaQueryWrapper<KwpWallet> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpWallet::getUid, kwpWallet.getUid())
+                .eq(KwpWallet::getFilter, kwpWallet.getFilter())
+                .eq(KwpWallet::getChannel, kwpWallet.getChannel())
+                .last("limit 1");
+        KwpWallet kwpWalletCheck = kwpWalletMapper.selectOne(wrapper);
+        if (Objects.nonNull(kwpWalletCheck)) {
+            kwpWalletCheck.setAction(kwpWallet.getAction());
+            kwpWalletCheck.setActionTime(kwpWallet.getActionTime());
+            kwpWalletCheck.setRemark(kwpWallet.getRemark());
+            kwpWalletCheck.setOrderNo(kwpWallet.getOrderNo());
+            kwpWalletCheck.setStatus(kwpWallet.getStatus());
+            kwpWalletCheck.setUpdateBy(LoginUserHolder.getUserId());
+            kwpWalletCheck.setUpdateTime(LocalDateTime.now());
+            kwpWalletMapper.updateById(kwpWalletCheck);
+            return;
+        }
+        kwpWallet.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwpWallet.setCreateBy(LoginUserHolder.getUserId());
+        kwpWallet.setCreateTime(LocalDateTime.now());
+        kwpWallet.setUpdateBy(LoginUserHolder.getUserId());
+        kwpWallet.setUpdateTime(LocalDateTime.now());
+        kwpWallet.setDelFlag(Global.UN_DELETED);
+        kwpWalletMapper.insert(kwpWallet);
+    }
+
+    public KwpWallet queryOne(String uid, String filter, String channel) {
+        LambdaQueryWrapper<KwpWallet> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpWallet::getUid, uid)
+                .eq(KwpWallet::getFilter, filter)
+                .eq(KwpWallet::getChannel, channel)
+                .last("limit 1");
+        return kwpWalletMapper.selectOne(wrapper);
+    }
+
+    /**
+     * 记录预付业务的更新时间
+     *
+     * @param uid
+     * @param filter
+     * @param channel
+     */
+    public void saveTime(String uid, String filter, String channel) {
+        redisTemplate.opsForValue().set(String.format(RedisConstant.WALLET_TIME, uid, filter, channel), DateTimeUtil.format(LocalDateTime.now()));
+    }
+
+    /**
+     * 获取预付记录的更新时间
+     *
+     * @param uid
+     * @param filter
+     * @param channel
+     * @return
+     */
+    public LocalDateTime queryTime(String uid, String filter, String channel) {
+        String time = (String) redisTemplate.opsForValue().get(String.format(RedisConstant.WALLET_TIME, uid, filter, channel));
+        if (StringUtils.isNotBlank(time)) {
+            return DateTimeUtil.parse(time);
+        }
+        return null;
+    }
+
+
+}

+ 3 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java

@@ -612,13 +612,15 @@ public class PayCenterService {
      * @param pageSize
      * @return
      */
-    public R<Page<PrePayIndex2>> advancePayIndex2(String uid, ChannelEnum channel, String filter, Integer page, Integer pageSize) {
+    public R<Page<PrePayIndex2>> advancePayIndex2(String uid, ChannelEnum channel, String filter, Integer page, Integer pageSize,String keyword) {
         String sync = getHttp(PayCenterEnum.ADVANCE_PAY_INDEX2, new HashMap<>() {{
             put("uid", uid);
             put("channel", channel);
             put("filter", filter);
             put("page", page);
             put("pageSize", pageSize);
+            put("keyword", keyword);
+
         }});
         return JSONObject.parseObject(sync, new TypeReference<>() {
         });

+ 17 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java

@@ -215,6 +215,15 @@ public class WalletService {
         }
     }
 
+    /**
+     * 更新时间填充
+     *
+     * @param prePayWalletVo
+     */
+    private void time(PrePayWalletVo prePayWalletVo) {
+        prePayWalletVo.setUpdateTime(kwpWalletService.queryTime(prePayWalletVo.getUid(), prePayWalletVo.getFilter(), prePayWalletVo.getChannel()));
+    }
+
     /**
      * 资金明细设置退款中金额
      *
@@ -1024,6 +1033,7 @@ public class WalletService {
                     prePayWalletVo.setSettlingApMoney(dfMoney(row.getSettlingApMoney()));
                     prePayWalletVo.setTotalApMoney(dfMoney(row.getTotalApMoney()));
                     refundMoney(row, prePayWalletVo, false);
+                    time(prePayWalletVo);
                     list.add(prePayWalletVo);
                 }
             }
@@ -1071,6 +1081,7 @@ public class WalletService {
             usingApSum += map.get("usingApSum");
             totalApSum += map.get("totalApSum");
         }
+        list.forEach(this::time);
         ApPageRes<PrePayWalletVo> page = new ApPageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), list);
         page.setApMoney(dfMoney(apSum));
         page.setUsingApMoney(dfMoney(usingApSum));
@@ -1344,6 +1355,7 @@ public class WalletService {
         if (Objects.nonNull(orderR.getData())) {
             kwpWalletPrepayService.savePrepay(orderR.getData().getOrderNo(), PrePayEnum.ADD);
         }
+        kwpWalletService.saveTime(uid, filter, channelEnum.getChannel());
         return orderR.getData();
     }
 
@@ -1369,6 +1381,7 @@ public class WalletService {
         if (Objects.nonNull(orderR.getData())) {
             kwpWalletPrepayService.savePrepay(orderR.getData().getOrderNo(), PrePayEnum.APPEND);
         }
+        kwpWalletService.saveTime(uid, prePay.getFilter(), channelEnum.getChannel());
         return orderR.getData();
     }
 
@@ -1470,6 +1483,8 @@ public class WalletService {
                 Long userId = LoginUserHolder.getUserId();
                 //异步提交清分退款任务
                 AsyncPool.addTask(new Refund(refundReq, kwpWalletRefund, payCenterService, kwpWalletRefundMapper, userId));
+                //记录操作时间
+                kwpWalletService.saveTime(kwpWalletRefund.getUid(), kwpWalletRefund.getFilter(), channelEnum.getChannel());
                 return businessNoR;
             } finally {
                 redisLockUtil.unlock(key);
@@ -1960,7 +1975,7 @@ public class WalletService {
         if (Objects.isNull(byChannel)) {
             throw new BusinessException("支付通道异常");
         }
-        R<Page<PrePayIndex2>> pageR = payCenterService.advancePayIndex2(moneyPage.getUid(), byChannel, moneyPage.getFilter(), moneyPage.getPage(), moneyPage.getPageSize());
+        R<Page<PrePayIndex2>> pageR = payCenterService.advancePayIndex2(moneyPage.getUid(), byChannel, moneyPage.getFilter(), moneyPage.getPage(), moneyPage.getPageSize(), moneyPage.getKeywords());
         if (!pageR.getStatus()) {
             return new PageRes<>(moneyPage.getPage(), moneyPage.getPageSize(), 0, 0, new ArrayList<>());
         }
@@ -2004,7 +2019,7 @@ public class WalletService {
         if (Objects.isNull(byChannel)) {
             throw new BusinessException("支付通道异常");
         }
-        R<Page<PrePayIndex2>> pageR = payCenterService.advancePayIndex2(moneyPage.getFilter(), byChannel, moneyPage.getUid(), moneyPage.getPage(), moneyPage.getPageSize());
+        R<Page<PrePayIndex2>> pageR = payCenterService.advancePayIndex2(moneyPage.getFilter(), byChannel, moneyPage.getUid(), moneyPage.getPage(), moneyPage.getPageSize(), moneyPage.getKeywords());
         if (!pageR.getStatus()) {
             return new PageRes<>(moneyPage.getPage(), moneyPage.getPageSize(), 0, 0, new ArrayList<>());
         }

+ 27 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpWalletMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.payment.dao.KwpWalletMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.payment.model.KwpWallet">
+    <!--@mbg.generated-->
+    <!--@Table kwp_wallet-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="uid" jdbcType="VARCHAR" property="uid" />
+    <result column="filter" jdbcType="VARCHAR" property="filter" />
+    <result column="channel" jdbcType="VARCHAR" property="channel" />
+    <result column="action" jdbcType="VARCHAR" property="action" />
+    <result column="action_time" jdbcType="TIMESTAMP" property="actionTime" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_by" jdbcType="BIGINT" property="createBy" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_by" jdbcType="BIGINT" property="updateBy" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, `uid`, `filter`, channel, `action`, action_time, remark, order_no, `status`, 
+    create_by, create_time, update_by, update_time, del_flag
+  </sql>
+</mapper>