Bladeren bron

远程调用扣除创客余额

mac 2 jaren geleden
bovenliggende
commit
f65367cedb

+ 7 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteOldService.java

@@ -23,4 +23,11 @@ public interface RemoteOldService {
 	@PostExchange("/v1/kxsmain/tochargebackrecord/addtochargebackrecord")
 	R savePosAdvance(@RequestParam Map<String, Object> param);
 
+	/**
+	 * 创客欠款扣除
+	 * @param param 请求实体
+	 */
+	@PostExchange("/v1/kxsmain/users/deductmakerdebts")
+	R deductMakerDebts(@RequestParam Map<String, Object> param);
+
 }

+ 22 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/totalDebt/TotalDebtDetailVO.java

@@ -0,0 +1,22 @@
+package com.kxs.user.api.vo.kxsapp.totalDebt;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 总欠款明细 VO
+ *
+ * @author 没秃顶的码农
+ * @date 2024-03-22
+ */
+@Data
+@Schema(description = "总欠款明细")
+@Builder
+public class TotalDebtDetailVO implements Serializable {
+
+    private BigDecimal totalDebt;
+}

+ 2 - 3
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/TotalDebtController.java

@@ -29,12 +29,11 @@ public class TotalDebtController {
     /**
      * 盟主中心-盟主提现-欠款金额
      *
-     * @param id 主键
      * @return 盟主中心-盟主提现-欠款金额
      */
     @GetMapping("/detail")
-    public R detail(@RequestParam("id") Long id) {
-        return R.ok();
+    public R detail() {
+        return R.ok(kxsTotalDebtService.detail());
     }
 
 

+ 28 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsTotalDebtService.java

@@ -3,6 +3,7 @@ package com.kxs.user.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.common.core.util.R;
 import com.kxs.user.api.model.KxsTotalDebt;
+import com.kxs.user.api.vo.kxsapp.totalDebt.TotalDebtDetailVO;
 
 /**
  * 用户总欠款表(KxsTotalDebt)表服务接口
@@ -12,6 +13,33 @@ import com.kxs.user.api.model.KxsTotalDebt;
  */
 public interface KxsTotalDebtService extends IService<KxsTotalDebt> {
 
+    /**
+     * 添加数据
+     *
+     * @param param 参数
+     * @return {@link R}
+     */
     R addData(KxsTotalDebt param);
+
+    /**
+     * app查询总欠款
+     *
+     * @return {@link TotalDebtDetailVO}
+     */
+    TotalDebtDetailVO detail();
+
+    /**
+     * 扣除合伙人可提现额度
+     *
+     * @param kxsTotalDebt KXS总债务
+     */
+    void deductPartner(KxsTotalDebt kxsTotalDebt);
+
+    /**
+     * 扣除盟主可提现额度
+     *
+     * @param kxsTotalDebt KXS总债务
+     */
+    void deductLeader(KxsTotalDebt kxsTotalDebt);
 }
 

+ 110 - 4
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsTotalDebtServiceImpl.java

@@ -2,15 +2,21 @@ package com.kxs.user.biz.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.enums.KindTypeEnum;
 import com.kxs.common.core.util.R;
-import com.kxs.user.api.model.KxsUser;
+import com.kxs.common.security.util.SecurityUtils;
+import com.kxs.system.api.feign.RemoteOldService;
+import com.kxs.user.api.model.*;
+import com.kxs.user.api.vo.kxsapp.totalDebt.TotalDebtDetailVO;
 import com.kxs.user.biz.constant.enums.UserErrorTypeEnum;
-import com.kxs.user.biz.mapper.KxsTotalDebtMapper;
-import com.kxs.user.api.model.KxsTotalDebt;
-import com.kxs.user.biz.mapper.KxsUserMapper;
+import com.kxs.user.biz.mapper.*;
 import com.kxs.user.biz.service.KxsTotalDebtService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
 
 /**
  * 用户总欠款表(KxsTotalDebt)表服务实现类
@@ -24,6 +30,16 @@ public class KxsTotalDebtServiceImpl extends ServiceImpl<KxsTotalDebtMapper, Kxs
 
     private final KxsUserMapper kxsUserMapper;
 
+    private final KxsLeaderMapper kxsLeaderMapper;
+
+    private final KxsUserAmountMapper kxsUserAmountMapper;
+
+    private final KxsPartnerMapper kxsPartnerMapper;
+
+    private final RemoteOldService remoteOldService;
+
+    private final KxsTotalDebtLogMapper kxsTotalDebtLogMapper;
+
     @Override
     public R addData(KxsTotalDebt param) {
         KxsUser user = kxsUserMapper.selectById(param.getUserId());
@@ -36,5 +52,95 @@ public class KxsTotalDebtServiceImpl extends ServiceImpl<KxsTotalDebtMapper, Kxs
         }
         return R.ok(save(param));
     }
+
+    @Override
+    public TotalDebtDetailVO detail() {
+
+        Long userId = SecurityUtils.getUser().getId();
+        KxsTotalDebt kxsTotalDebt = baseMapper.selectOne(Wrappers.<KxsTotalDebt>lambdaQuery().eq(KxsTotalDebt::getUserId, userId));
+
+        return TotalDebtDetailVO.builder()
+                .totalDebt(kxsTotalDebt == null ? BigDecimal.ZERO : kxsTotalDebt.getTotalDebt())
+                .build();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deductPartner(KxsTotalDebt kxsTotalDebt) {
+        //查询该创客合伙人/盟主是否有客提现余额,如果大于0则扣除
+        KxsPartner kxsPartner = kxsPartnerMapper.selectOne(Wrappers.<KxsPartner>lambdaQuery().eq(KxsPartner::getUserId, kxsTotalDebt.getUserId()));
+        //合伙人扣除金额
+        BigDecimal partnerDeductAmount;
+        if(kxsPartner != null && kxsPartner.getWithdrawalAmount().compareTo(BigDecimal.ZERO) > 0){
+            //扣除可提现余额
+            if(kxsTotalDebt.getTotalDebt().compareTo(kxsPartner.getWithdrawalAmount()) >= 0){
+                partnerDeductAmount = kxsPartner.getWithdrawalAmount();
+            }else{
+                partnerDeductAmount = kxsTotalDebt.getTotalDebt();
+            }
+            HashMap<String, Object> partner = new HashMap<>();
+            partner.put("UserId", kxsTotalDebt.getUserId());
+            partner.put("Kind", 2);
+            partner.put("Amount", partnerDeductAmount);
+            R res = remoteOldService.deductMakerDebts(partner);
+            if(res.getStatus() == 1){
+                //扣除成功
+                BigDecimal afterAmount = kxsTotalDebt.getTotalDebt().subtract(partnerDeductAmount);
+
+                //添加日志
+                KxsTotalDebtLog kxsTotalDebtLog = new KxsTotalDebtLog();
+                kxsTotalDebtLog.setKind(KindTypeEnum.SUB.getType());
+                kxsTotalDebtLog.setUserId(kxsTotalDebt.getUserId());
+                kxsTotalDebtLog.setRemark("扣除合伙人可提现余额");
+                kxsTotalDebtLog.setCreateBy("系统");
+                kxsTotalDebtLog.setAmount(partnerDeductAmount);
+                kxsTotalDebtLog.setAfterAmount(afterAmount);
+                kxsTotalDebtLog.setBeforeAmount(kxsTotalDebt.getTotalDebt());
+                kxsTotalDebtLogMapper.insert(kxsTotalDebtLog);
+
+                kxsTotalDebt.setTotalDebt(afterAmount);
+                baseMapper.updateById(kxsTotalDebt);
+            }
+        }
+    }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deductLeader(KxsTotalDebt kxsTotalDebt) {
+        //查询该创客合伙人/盟主是否有客提现余额,如果大于0则扣除
+        KxsUserAmount userAmount = kxsUserAmountMapper.selectOne(Wrappers.<KxsUserAmount>lambdaQuery().eq(KxsUserAmount::getUserId, kxsTotalDebt.getUserId()));
+        //合伙人扣除金额
+        BigDecimal leaderDeductAmount;
+        if(userAmount != null && userAmount.getLeaderBalanceAmount().compareTo(BigDecimal.ZERO) > 0){
+            //扣除可提现余额
+            if(kxsTotalDebt.getTotalDebt().compareTo(userAmount.getLeaderBalanceAmount()) >= 0){
+                leaderDeductAmount = userAmount.getLeaderBalanceAmount();
+            }else{
+                leaderDeductAmount = kxsTotalDebt.getTotalDebt();
+            }
+            HashMap<String, Object> partner = new HashMap<>();
+            partner.put("UserId", kxsTotalDebt.getUserId());
+            partner.put("Kind", 1);
+            partner.put("Amount", leaderDeductAmount);
+            R res = remoteOldService.deductMakerDebts(partner);
+            if(res.getStatus() == 1){
+                //扣除成功
+                BigDecimal afterAmount = kxsTotalDebt.getTotalDebt().subtract(leaderDeductAmount);
+
+                //添加日志
+                KxsTotalDebtLog kxsTotalDebtLog = new KxsTotalDebtLog();
+                kxsTotalDebtLog.setKind(KindTypeEnum.SUB.getType());
+                kxsTotalDebtLog.setUserId(kxsTotalDebt.getUserId());
+                kxsTotalDebtLog.setRemark("扣除盟主可提现余额");
+                kxsTotalDebtLog.setCreateBy("系统");
+                kxsTotalDebtLog.setAmount(leaderDeductAmount);
+                kxsTotalDebtLog.setAfterAmount(afterAmount);
+                kxsTotalDebtLog.setBeforeAmount(kxsTotalDebt.getTotalDebt());
+                kxsTotalDebtLogMapper.insert(kxsTotalDebtLog);
+
+                kxsTotalDebt.setTotalDebt(afterAmount);
+                baseMapper.updateById(kxsTotalDebt);
+            }
+        }
+    }
 }
 

+ 29 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/task/KxsUserTaskJob.java

@@ -2,15 +2,28 @@ package com.kxs.user.biz.task;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.NumberUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
-import com.kxs.user.biz.mapper.KxsUserAmountLogMapper;
+import com.kxs.system.api.feign.RemoteOldService;
+import com.kxs.user.api.model.KxsLeader;
+import com.kxs.user.api.model.KxsPartner;
+import com.kxs.user.api.model.KxsTotalDebt;
+import com.kxs.user.api.model.KxsUserAmount;
+import com.kxs.user.biz.mapper.*;
+import com.kxs.user.biz.service.KxsTotalDebtService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * 产品模块定时任务
@@ -26,6 +39,9 @@ public class KxsUserTaskJob {
 
     private final KxsUserAmountLogMapper kxsUserAmountLogMapper;
 
+    private final KxsTotalDebtService kxsTotalDebtService;
+
+    private final KxsTotalDebtMapper kxsTotalDebtMapper;
 
     /**
      * 自动表创建任务
@@ -46,5 +62,17 @@ public class KxsUserTaskJob {
     @Inner
     @GetMapping("/userTotalDebtSub")
     public void userTotalDebtSub(){
+        //查询所有欠款大于0的创客
+        List<KxsTotalDebt> kxsTotalDebts = kxsTotalDebtMapper.selectList(Wrappers.<KxsTotalDebt>lambdaQuery().gt(KxsTotalDebt::getTotalDebt, BigDecimal.ZERO));
+        for (KxsTotalDebt kxsTotalDebt : kxsTotalDebts) {
+            //扣除合伙人
+            kxsTotalDebtService.deductPartner(kxsTotalDebt);
+            //扣除盟主
+            kxsTotalDebtService.deductLeader(kxsTotalDebt);
+
+        }
+
     }
+
+
 }