فهرست منبع

业务员提现的时候,考虑冻结流水,避免重复提现

lipf 3 ماه پیش
والد
کامیت
147a421fb5

+ 8 - 3
commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java

@@ -1,12 +1,10 @@
 package com.jzg.commons.entity.po;
 package com.jzg.commons.entity.po;
 
 
-import java.io.Serializable;
+import java.io.Serial;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
-import java.util.Date;
 
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import com.jzg.commons.core.base.BaseModel;
 import com.jzg.commons.entity.dto.ApplyWithdrawParam;
 import com.jzg.commons.entity.dto.ApplyWithdrawParam;
@@ -14,18 +12,22 @@ import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
 /**
 /**
  * 提现申请表
  * 提现申请表
  * @TableName sys_amount_auditing
  * @TableName sys_amount_auditing
  */
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Data
 @Schema(description = "提现申请表")
 @Schema(description = "提现申请表")
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 public class SysAmountAuditing extends BaseModel {
 public class SysAmountAuditing extends BaseModel {
 
 
+    @Serial
+    private static final long serialVersionUID = -4444248789874668987L;
     @Schema(description = "主键")
     @Schema(description = "主键")
     @TableId
     @TableId
     private String id;
     private String id;
@@ -97,6 +99,9 @@ public class SysAmountAuditing extends BaseModel {
     @Schema(description = "系统code")
     @Schema(description = "系统code")
     private String systemCode;
     private String systemCode;
 
 
+    // 解决对应mapper报错的问题
+    private String bankNumber;
+
 
 
     /**
     /**
      * 构造提现
      * 构造提现

+ 6 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java

@@ -129,6 +129,12 @@ public class AmountAuditingController extends BaseController {
         return HttpResult.ok(b.toString());
         return HttpResult.ok(b.toString());
     }
     }
 
 
+    /**
+     * 业务员提交提现申请
+     *
+     * @author lipf
+     * @date 2026/5/29 16:11
+     */
     @PostMapping("/applyWithdraw")
     @PostMapping("/applyWithdraw")
     @Operation(summary = "申请提现")
     @Operation(summary = "申请提现")
     public HttpResult applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){
     public HttpResult applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java

@@ -48,6 +48,17 @@ public interface SysAmountAuditingMapper extends BaseMapper<SysAmountAuditing> {
      * @return
      * @return
      */
      */
     List<AmountAuditVo> queryPaymentList(Page page,@Param("param") AmountAuditParam param,@Param("userName") String userName);
     List<AmountAuditVo> queryPaymentList(Page page,@Param("param") AmountAuditParam param,@Param("userName") String userName);
+
+    /**
+     * 查询指定业务员的提现申请
+     *
+     * @param userId 业务员序号
+     * @param auditingStatus 审核状态
+     * @author lipf
+     * @date 2026/5/29 16:20
+     */
+    List<SysAmountAuditing> queryPaymentByUserId(@Param("userId") String userId,
+                                                 @Param("auditingStatus") Integer auditingStatus);
 }
 }
 
 
 
 

+ 11 - 5
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java

@@ -259,17 +259,23 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
 
 
     @Override
     @Override
     public Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
     public Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
-
+        String userName = baseController.getUserName();
+        String userId = baseController.getUserId();
+        log.info("业务员提交提现申请:userName=[{}],userId=[{}],applyWithdrawParam=[{}]",userId, userName, JSONUtil.toJsonStr(applyWithdrawParam));
         if(applyWithdrawParam.getWithdrawAmount().compareTo(BigDecimal.ZERO) <= 0){
         if(applyWithdrawParam.getWithdrawAmount().compareTo(BigDecimal.ZERO) <= 0){
             throw new SystemException("提现金额错误,请重新输入");
             throw new SystemException("提现金额错误,请重新输入");
         }
         }
-
-        SysUserAccount sysUserAccount = userAccountService.queryByUserId(baseController.getUserId());
+        SysUserAccount sysUserAccount = userAccountService.queryByUserId(userId);
         AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户");
         AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户");
 
 
+        // sys_amount_auditing 表中的 balance_amount 字段,表示冻结的金额, 避免重复提现
+        // 查询处于提现进程中的申请记录。 汇总其中的冻结金额
+        List<SysAmountAuditing> amountAuditings =  baseMapper.queryPaymentByUserId(userId,0);
+        BigDecimal freezAmount = amountAuditings.stream()
+                .filter(action-> action.getAuditingStatus() != null &&  0 == action.getAuditingStatus())
+                .map(SysAmountAuditing::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
         // 当前用户的余额
         // 当前用户的余额
-        BigDecimal sumAmount = sysUserAccount.getSumAmount();
-
+        BigDecimal sumAmount =freezAmount.add(sysUserAccount.getSumAmount());
         if(sumAmount.compareTo(applyWithdrawParam.getWithdrawAmount()) < 0){
         if(sumAmount.compareTo(applyWithdrawParam.getWithdrawAmount()) < 0){
             throw new SystemException("无法提现,请检查当前账户余额");
             throw new SystemException("无法提现,请检查当前账户余额");
         }
         }

+ 12 - 0
tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml

@@ -218,4 +218,16 @@
             </if>
             </if>
         ORDER BY saa.create_time desc
         ORDER BY saa.create_time desc
     </select>
     </select>
+    <select id="queryPaymentByUserId" resultType="com.jzg.commons.entity.po.SysAmountAuditing">
+        SELECT saa.*
+        FROM sys_amount_auditing saa
+        <where>
+            <if test="userId != null and userId != ''">
+                and saa.user_id  = #{userId}
+            </if>
+            <if test="auditingStatus != null">
+                AND saa.auditing_status = #{auditingStatus}
+            </if>
+        </where>
+    </select>
 </mapper>
 </mapper>