Răsfoiți Sursa

Merge branch 'dev' of http://git.sckaiwu.cn/17358629955/sckw-service-platform into dev

chenlin 2 ani în urmă
părinte
comite
f6bd0f6bcd
16 a modificat fișierele cu 431 adăugiri și 30 ștergeri
  1. 19 6
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java
  2. 11 5
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/config/CustomConfig.java
  3. 5 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  4. 9 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WalletController.java
  5. 13 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpWalletMapper.java
  6. 102 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpWallet.java
  7. 52 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/WalletActionEnum.java
  8. 1 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/wallet/CashItem.java
  9. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/PrePayWalletVo.java
  10. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/FundVo.java
  11. 100 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpWalletService.java
  12. 3 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java
  13. 78 11
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java
  14. 27 0
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpWalletMapper.xml
  15. 3 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsUserController.java
  16. 6 2
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java

+ 19 - 6
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java

@@ -32,11 +32,20 @@ import java.util.*;
  * @date: 2023/6/14
  */
 public class RequestCheckFilter implements Filter {
+
     @Autowired
     CustomConfig customConfig;
 
+    /**
+     * 直接放行不需要校验token的请求
+     */
     private static final List<String> EXCLUDEPATH = new ArrayList<>();
 
+    /**
+     * 需要校验token但不用接口权限校验的请求
+     */
+    private static final List<String> WITHOUTPATH = new ArrayList<>();
+
     private static final String REGISTER = "/kwsEnt/register";
 
     /**
@@ -49,6 +58,10 @@ public class RequestCheckFilter implements Filter {
         if (StringUtils.isNotBlank(links)) {
             EXCLUDEPATH.addAll(Arrays.asList(links.split(Global.COMMA)));
         }
+//        String withoutLinks = customConfig.getWithoutLinks();
+//        if (StringUtils.isNotBlank(withoutLinks)) {
+//            WITHOUTPATH.addAll(Arrays.asList(withoutLinks.split(Global.COMMA)));
+//        }
     }
 
     @Override
@@ -153,12 +166,12 @@ public class RequestCheckFilter implements Filter {
 
         /*5、请求权限校验*/
         //非管理员有接口权限才放行
-        if (loginUserInfo.getIsMain() != Global.YES
-                && NumberUtils.parseInt(systemType) == SystemTypeEnum.MANAGE.getCode()
-                && !checkMenu(clientType, loginUserInfo.getId(), requestUri)) {
-            ResponseUtil.writer(response, HttpResult.error(HttpStatus.AUTHORITY_NO_CODE, HttpStatus.ACCESS_FIAL));
-            return;
-        }
+//        if (loginUserInfo.getIsMain() == Global.NO
+//                && !WITHOUTPATH.contains(requestUri)
+//                && !checkMenu(clientType, loginUserInfo.getId(), requestUri)) {
+//            ResponseUtil.writer(response, HttpResult.error(HttpStatus.AUTHORITY_NO_CODE, HttpStatus.ACCESS_FIAL));
+//            return;
+//        }
 
         LoginUserHolder.set(loginUserInfo);
         LoginEntHolder.set(loginEntInfo);

+ 11 - 5
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/config/CustomConfig.java

@@ -19,10 +19,16 @@ public class CustomConfig {
     @Value("${links}")
     private String links;
 
-    /**
-     * 是否允许一个账号绑定多个角色
-     */
-    @Value("${isBindManyRole}")
-    private Integer isBindManyRole;
+//    /**
+//     * 是否允许一个账号绑定多个角色
+//     */
+//    @Value("${isBindManyRole}")
+//    private Integer isBindManyRole;
+
+//    /**
+//     * 需要token校验但不需要接口权限校验的请求链接
+//     */
+//    @Value("${withoutLinks}")
+//    private String withoutLinks;
 
 }

+ 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 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/wallet/CashItem.java

@@ -20,6 +20,7 @@ public class CashItem implements Serializable {
     @JSONField(name = "order_no")
     private String orderNo;
     private String uid;
+    private String uidName;
     private Integer status;
     @JSONField(name = "status_label")
     private String statusLabel;

+ 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;
 
 

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

@@ -70,7 +70,7 @@ public class FundVo implements Serializable {
     private LocalDateTime createTime;
 
     /**
-     * 更新时间 todo-xcq 自我维护
+     * 更新时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     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<>() {
         });

+ 78 - 11
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java

@@ -7,10 +7,7 @@ import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.page.PageRes;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.IdWorker;
-import com.sckw.core.utils.OrderUtils;
-import com.sckw.core.utils.StringTimeUtil;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.manage.api.RemoteManageService;
@@ -21,13 +18,11 @@ import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.payment.dao.KwpWalletRefundMapper;
 import com.sckw.payment.dao.KwpWalletTransferMapper;
 import com.sckw.payment.job.AsyncPool;
+import com.sckw.payment.model.KwpWallet;
 import com.sckw.payment.model.KwpWalletRefund;
 import com.sckw.payment.model.KwpWalletRelation;
 import com.sckw.payment.model.KwpWalletTransfer;
-import com.sckw.payment.model.constant.PrePayEnum;
-import com.sckw.payment.model.constant.RefundEnum;
-import com.sckw.payment.model.constant.TransferEnum;
-import com.sckw.payment.model.constant.WalletChannelEnum;
+import com.sckw.payment.model.constant.*;
 import com.sckw.payment.model.dto.WalletInfoDto;
 import com.sckw.payment.model.dto.WalletRelationDto;
 import com.sckw.payment.model.dto.common.BusinessNo;
@@ -41,7 +36,6 @@ import com.sckw.payment.model.vo.req.page.MoneyPage;
 import com.sckw.payment.model.vo.req.page.PrePayPage;
 import com.sckw.payment.model.vo.req.page.RefundPage;
 import com.sckw.payment.model.vo.res.*;
-import com.sckw.core.utils.DateTimeUtil;
 import com.sckw.redis.config.RedisLockUtil;
 import com.sckw.redis.constant.RedisLockKey;
 import com.sckw.system.api.RemoteSystemService;
@@ -83,6 +77,7 @@ public class WalletService {
     private final KwpWalletTransferMapper kwpWalletTransferMapper;
     private final RedisLockUtil redisLockUtil;
     private final KwpWalletRefundSubService kwpWalletRefundSubService;
+    private final KwpWalletService kwpWalletService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -220,6 +215,15 @@ public class WalletService {
         }
     }
 
+    /**
+     * 更新时间填充
+     *
+     * @param prePayWalletVo
+     */
+    private void time(PrePayWalletVo prePayWalletVo) {
+        prePayWalletVo.setUpdateTime(kwpWalletService.queryTime(prePayWalletVo.getUid(), prePayWalletVo.getFilter(), prePayWalletVo.getChannel()));
+    }
+
     /**
      * 资金明细设置退款中金额
      *
@@ -252,6 +256,19 @@ public class WalletService {
         fundVo.setTransferMoney(df.format(bigDecimal));
     }
 
+    /**
+     * 相关操作
+     *
+     * @param fundVo
+     */
+    private void action(FundVo fundVo) {
+        KwpWallet kwpWallet = kwpWalletService.queryOne(fundVo.getUid(), fundVo.getFilter(), fundVo.getChannel());
+        if (Objects.nonNull(kwpWallet)) {
+            fundVo.setAction(kwpWallet.getAction());
+            fundVo.setUpdateTime(kwpWallet.getActionTime());
+        }
+    }
+
     /**
      * 按钱包渠道进行统计钱包清单数量
      *
@@ -479,6 +496,7 @@ public class WalletService {
             fundVo.setTotalMoney(dfMoney(re.getTotalMoney()));
             refundMoney2(fundVo);
             transferMoney(fundVo);
+            action(fundVo);
             vo.add(fundVo);
         }
         DecimalFormat df = new DecimalFormat("0.00");
@@ -560,6 +578,7 @@ public class WalletService {
             fundVo.setTotalMoney(dfMoney(re.getTotalMoney()));
             refundMoney2(fundVo);
             transferMoney(fundVo);
+            action(fundVo);
             vo.add(fundVo);
         }
         DecimalFormat df = new DecimalFormat("0.00");
@@ -599,6 +618,16 @@ public class WalletService {
         if (!payIndexR.getStatus()) {
             throw new BusinessException(StringUtils.isBlank(payIndexR.getMsg()) ? "充值失败" : payIndexR.getMsg());
         }
+        KwpWallet kwpWallet = new KwpWallet();
+        kwpWallet.setUid(uid);
+        kwpWallet.setFilter(filter);
+        kwpWallet.setChannel(channelEnum.getChannel());
+        kwpWallet.setAction(WalletActionEnum.CHARGING.getDesc());
+        kwpWallet.setActionTime(LocalDateTime.now());
+        kwpWallet.setRemark("");
+        kwpWallet.setOrderNo(Objects.nonNull(payIndexR.getData()) ? payIndexR.getData().getOrderNo() : "");
+        kwpWallet.setStatus(WalletActionEnum.CHARGING.getStatus());
+        kwpWalletService.saveOrUpdate(kwpWallet);
         return payIndexR.getData();
     }
 
@@ -625,6 +654,16 @@ public class WalletService {
         if (!payIndexR.getStatus()) {
             throw new BusinessException(StringUtils.isBlank(payIndexR.getMsg()) ? "充值失败" : payIndexR.getMsg());
         }
+        KwpWallet kwpWallet = new KwpWallet();
+        kwpWallet.setUid(uid);
+        kwpWallet.setFilter(filter);
+        kwpWallet.setChannel(channelEnum.getChannel());
+        kwpWallet.setAction(WalletActionEnum.CHARGING.getDesc());
+        kwpWallet.setActionTime(LocalDateTime.now());
+        kwpWallet.setRemark("");
+        kwpWallet.setOrderNo(Objects.nonNull(payIndexR.getData()) ? payIndexR.getData().getOrderNo() : "");
+        kwpWallet.setStatus(WalletActionEnum.CHARGING.getStatus());
+        kwpWalletService.saveOrUpdate(kwpWallet);
         return payIndexR.getData();
     }
 
@@ -646,6 +685,16 @@ public class WalletService {
         if (!payIndexR.getStatus()) {
             throw new BusinessException(StringUtils.isNotBlank(payIndexR.getMsg()) ? payIndexR.getMsg() : "申请提现异常");
         }
+        KwpWallet kwpWallet = new KwpWallet();
+        kwpWallet.setUid(cashWalletReq.getUid());
+        kwpWallet.setFilter(cashWalletReq.getFilter());
+        kwpWallet.setChannel(byChannel.getChannel());
+        kwpWallet.setAction(WalletActionEnum.CASHING.getDesc());
+        kwpWallet.setActionTime(LocalDateTime.now());
+        kwpWallet.setRemark("");
+        kwpWallet.setOrderNo(Objects.nonNull(payIndexR.getData()) ? payIndexR.getData().getOrderNo() : "");
+        kwpWallet.setStatus(WalletActionEnum.CASHING.getStatus());
+        kwpWalletService.saveOrUpdate(kwpWallet);
         return payIndexR.getData();
     }
 
@@ -721,6 +770,17 @@ public class WalletService {
                 //转帐中
                 walletTransfer.setStatus(TransferEnum.TRANSFERRING.getStatus());
                 kwpWalletTransferMapper.insert(walletTransfer);
+
+                KwpWallet kwpWallet = new KwpWallet();
+                kwpWallet.setUid(transferReq.getUid());
+                kwpWallet.setFilter(transferReq.getFilter());
+                kwpWallet.setChannel(channelEnum.getChannel());
+                kwpWallet.setAction(WalletActionEnum.TRANSFERRING.getDesc());
+                kwpWallet.setActionTime(LocalDateTime.now());
+                kwpWallet.setRemark("");
+                kwpWallet.setOrderNo(Objects.nonNull(businessNoR1.getData()) ? businessNoR1.getData().getBusinessNo() : "");
+                kwpWallet.setStatus(WalletActionEnum.TRANSFERRING.getStatus());
+                kwpWalletService.saveOrUpdate(kwpWallet);
                 return businessNoR1.getData();
             } finally {
                 redisLockUtil.unlock(key);
@@ -815,6 +875,7 @@ public class WalletService {
             LocalDateTime parse2 = LocalDateTime.parse(c2.getCreateTime(), df);
             return parse.compareTo(parse2);
         });
+        res.forEach(a -> a.setUidName(getFirmName(a.getUid())));
         //组装数据
         return new MorePageRes<>(cashPageReq.getPage(), cashPageReq.getPageSize(), res, String.valueOf(sum / 100.0D));
     }
@@ -972,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);
                 }
             }
@@ -1019,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));
@@ -1292,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();
     }
 
@@ -1317,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();
     }
 
@@ -1418,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);
@@ -1908,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<>());
         }
@@ -1952,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>

+ 3 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsUserController.java

@@ -89,7 +89,9 @@ public class KwsUserController {
      */
     @PostMapping("/add")
     @RepeatSubmit(interval = 3000,message ="两次请求间隔未超过3秒")
-    public HttpResult add(@Valid @RequestBody UserAddReqVo reqVo) {
+    public HttpResult add(@Valid @RequestBody UserAddReqVo reqVo,
+                          @RequestHeader(name = "System-Type", required = true) int systemType) {
+        reqVo.setSystemType(systemType);
         kwsUserService.add(reqVo);
         return HttpResult.ok(HttpStatus.MSG_003);
     }

+ 6 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsRoleService.java

@@ -33,6 +33,7 @@ import com.sckw.system.model.vo.res.KwsMenuResVo;
 import com.sckw.system.model.vo.res.RoleResVo;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -78,6 +79,9 @@ public class KwsRoleService {
     @Autowired
     CustomConfig customConfig;
 
+    @Value("${isBindManyRole}")
+    private Integer isBindManyRole;
+
     /**
      * @param params KwsRole
      * @desc: 单表插入
@@ -397,8 +401,8 @@ public class KwsRoleService {
     @Transactional(rollbackFor = Exception.class)
     public void userBindRole(UserBindRoleReqVo reqVo) {
         //特殊校验,之前说用户和角色是一对多,后来产品改成一对一
-        String[] roleIdArr = reqVo.getRoleIds().split(",");
-        if (customConfig.getIsBindManyRole() == Global.NO && roleIdArr.length > 1) {
+        String[] roleIdArr = reqVo.getRoleIds().split(Global.COMMA);
+        if (isBindManyRole.equals(Global.NO) && roleIdArr.length > 1) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.MSG_006);
         }