Sfoglia il codice sorgente

仓库模块接口代码完成

mac 2 anni fa
parent
commit
4befc6f568
41 ha cambiato i file con 718 aggiunte e 168 eliminazioni
  1. 1 1
      kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/enums/VariationTypeEnum.java
  2. 4 1
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/constant/ProductConstants.java
  3. 4 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/kxsapp/BrandController.java
  4. 6 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsBrandServiceImpl.java
  5. 7 8
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java
  6. 4 10
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsTicketTransferServiceImpl.java
  7. 5 2
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/ForAmountWithdrawDTO.java
  8. 4 19
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/WarehouseApplyDTO.java
  9. 28 0
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/WarehouseApplyInfoDTO.java
  10. 0 41
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/userAdvance/ForAmountWithdrawDTO.java
  11. 49 7
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/model/KxsForAmountWithdraw.java
  12. 6 0
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/model/KxsWarehouseMachineApplyDetail.java
  13. 4 3
      kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/vo/kxsapp/storeLimit/MachineApplyDetailVO.java
  14. 1 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/constant/enums/StoreErrorTypeEnum.java
  15. 7 5
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/StoreLimitController.java
  16. 2 2
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/UserAdvanceController.java
  17. 12 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/mapper/KxsWarehouseMachineApplyMapper.java
  18. 15 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsForAmountWithdrawService.java
  19. 10 1
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsWarehouseLimitService.java
  20. 21 2
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsWarehouseMachineApplyService.java
  21. 156 0
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsForAmountWithdrawServiceImpl.java
  22. 5 14
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineAdvanceServiceImpl.java
  23. 14 15
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineApplyServiceImpl.java
  24. 37 1
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseLimitServiceImpl.java
  25. 122 3
      kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseMachineApplyServiceImpl.java
  26. 8 2
      kxs-store/kxs-store-biz/src/main/resources/mapper/KxsForAmountWithdrawMapper.xml
  27. 4 0
      kxs-store/kxs-store-biz/src/main/resources/mapper/KxsWarehouseMachineApplyMapper.xml
  28. 1 1
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/user/RealUserDTO.java
  29. 0 1
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/userAccount/UserAmountVariationListDTO.java
  30. 27 15
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java
  31. 12 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/RealUserInfoVO.java
  32. 26 4
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsUserController.java
  33. 14 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/UserAccountController.java
  34. 1 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserMapper.java
  35. 14 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserAmountService.java
  36. 17 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java
  37. 1 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserAmountLogServiceImpl.java
  38. 45 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserAmountServiceImpl.java
  39. 22 5
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java
  40. 1 1
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserAmountLogMapper.xml
  41. 1 1
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserMapper.xml

+ 1 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/constant/enums/VariationTypeEnum.java → kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/enums/VariationTypeEnum.java

@@ -1,4 +1,4 @@
-package com.kxs.user.biz.constant.enums;
+package com.kxs.common.core.constant.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 4 - 1
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/constant/ProductConstants.java

@@ -9,5 +9,8 @@ package com.kxs.product.biz.constant;
  */
 public interface ProductConstants {
 
-
+    /**
+     * 品牌信息缓存
+     */
+    String BRAND_DETAILS = "brand_details";
 }

+ 4 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/kxsapp/BrandController.java

@@ -1,9 +1,12 @@
 package com.kxs.product.biz.controller.kxsapp;
 
+import com.kxs.common.core.constant.CacheConstants;
 import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
+import com.kxs.product.biz.constant.ProductConstants;
 import com.kxs.product.biz.service.KxsBrandService;
 import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -47,6 +50,7 @@ public class BrandController {
      */
     @Inner
     @GetMapping("/loadByBrand")
+    @Cacheable(value = ProductConstants.BRAND_DETAILS, key = "#id", unless = "#result == null")
     public R loadByBrand(@RequestParam("id") Integer id) {
 
         return R.ok(kxsBrandService.getById(id));

+ 6 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsBrandServiceImpl.java

@@ -2,10 +2,14 @@ package com.kxs.product.biz.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.CacheConstants;
 import com.kxs.product.api.model.KxsBrand;
 import com.kxs.product.api.vo.kxsapp.brand.BrandListVO;
+import com.kxs.product.biz.constant.ProductConstants;
 import com.kxs.product.biz.mapper.KxsBrandMapper;
 import com.kxs.product.biz.service.KxsBrandService;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -20,6 +24,7 @@ import java.util.List;
 public class KxsBrandServiceImpl extends ServiceImpl<KxsBrandMapper, KxsBrand> implements KxsBrandService {
 
     @Override
+    @CacheEvict(value = ProductConstants.BRAND_DETAILS, key = "'list'")
     public Boolean sortByList(List<Integer> sorts) {
 
         for (int i = 0; i < sorts.size(); i++) {
@@ -33,6 +38,7 @@ public class KxsBrandServiceImpl extends ServiceImpl<KxsBrandMapper, KxsBrand> i
     }
 
     @Override
+    @Cacheable(value = ProductConstants.BRAND_DETAILS, key = "'list'", unless = "#result.isEmpty()")
     public List<BrandListVO> getSortByList() {
 
         return baseMapper.getSortByList();

+ 7 - 8
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java

@@ -133,15 +133,14 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
     public R machineTransferUser(MachineTransferDTO param) {
 
         Integer userId = SecurityUtils.getUser().getId().intValue();
-        R<KxsUser> result = remoteKxsUserService.loadUserByCode(param.getUserCode(), SecurityConstants.FROM_IN);
-        KxsUser toUser = RetOps.of(result)
+
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserByCode(param.getUserCode(), SecurityConstants.FROM_IN);
+        KxsUser toUser = RetOps.of(kxsUserR)
                 .getData()
                 .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
 
-        String pidPath = toUser.getPidPath();
-        //判断是否是下级
-        boolean contains = pidPath.contains("," + userId + ",");
-        if(!contains){
+        R<Boolean> booleanR = remoteKxsUserService.checkUserIsChildren(userId, toUser.getId(), SecurityConstants.FROM_IN);
+        if (!booleanR.getData()) {
             return R.failed(ProductErrorTypeEnum.USER_IS_NOT_FIND.getDescription());
         }
 
@@ -152,10 +151,10 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
             if (machine == null) {
                 throw new GlobalCustomerException(sn + ProductErrorTypeEnum.MACHINE_NOT_FOUND.getDescription());
             }
-            if(machine.getBindStatus().equals(MachineTypeEnum.BIND.getType())){
+            if (machine.getBindStatus().equals(MachineTypeEnum.BIND.getType())) {
                 throw new GlobalCustomerException(sn + ProductErrorTypeEnum.MACHINE_BIND.getDescription());
             }
-            if(!machine.getUserId().equals(userId)){
+            if (!machine.getUserId().equals(userId)) {
                 throw new GlobalCustomerException(sn + ProductErrorTypeEnum.MACHINE_NOT_USER.getDescription());
             }
             //循环机不可划拨

+ 4 - 10
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsTicketTransferServiceImpl.java

@@ -60,21 +60,15 @@ public class KxsTicketTransferServiceImpl extends ServiceImpl<KxsTicketTransferM
                 .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
 
         //查询拨入创客
-        R<KxsUser> toResult = remoteKxsUserService.loadUserByCode(param.getUserCode(), SecurityConstants.FROM_IN);
-        KxsUser toUser = RetOps.of(toResult)
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserByCode(param.getUserCode(), SecurityConstants.FROM_IN);
+        KxsUser toUser = RetOps.of(kxsUserR)
                 .getData()
                 .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
 
-        String pidPath = toUser.getPidPath();
-        //判断是否是下级
-        boolean contains = pidPath.contains("," + userId + ",");
-        if(!contains){
+        R<Boolean> booleanR = remoteKxsUserService.checkUserIsChildren(userId, toUser.getId(), SecurityConstants.FROM_IN);
+        if (!booleanR.getData()) {
             return R.failed(ProductErrorTypeEnum.USER_IS_NOT_FIND.getDescription());
         }
-        //是否实名认证
-//        if(toUser.getRealStatus() != 1){
-//            return R.failed(ProductErrorTypeEnum.USER_IS_NOT_AUTH.getDescription());
-//        }
 
         for (String ticketCode : param.getTicketCodes()) {
             KxsTicket kxsTicket = kxsTicketMapper.selectOne(Wrappers.<KxsTicket>lambdaQuery().eq(KxsTicket::getTicketCode, ticketCode));

+ 5 - 2
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/ForAmountWithdrawDTO.java

@@ -1,6 +1,7 @@
 package com.kxs.store.api.dto.kxsapp.storeLimit;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -19,7 +20,8 @@ public class ForAmountWithdrawDTO {
      * 银行卡提现金额
      */
     @Schema(description = "银行卡提现金额")
-    private BigDecimal bankAmount;
+    @NotNull(message = "银行卡提现金额不能为空")
+    private Integer bankAmount;
 
 
     /**
@@ -33,7 +35,8 @@ public class ForAmountWithdrawDTO {
      * 余额提现金额
      */
     @Schema(description = "余额提现金额")
-    private BigDecimal yueAmount;
+    @NotNull(message = "余额提现金额不能为空")
+    private Integer yueAmount;
 
 
 

+ 4 - 19
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/WarehouseApplySubmitDTO.java → kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/WarehouseApplyDTO.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @date 2024-01-11
  */
 @Data
-public class WarehouseApplySubmitDTO {
+public class WarehouseApplyDTO {
 
     /**
      * 申请数量
@@ -20,25 +20,10 @@ public class WarehouseApplySubmitDTO {
     @NotNull(message = "申请数量不能为空")
     private Integer applyNum;
 
-    private List<applyBrandInfoDTO> applyData;
-
-}
-
-@Data
-class applyBrandInfoDTO{
-
     /**
-     * 品牌 ID
+     * 申请json数据[{'brandId':1,'brandName':'金控电签','number':100}]
      */
-    private Integer brandId;
+    private List<WarehouseApplyInfoDTO> applyData;
 
-    /**
-     * 品牌
-     */
-    private String brandName;
-
-    /**
-     * 数量
-     */
-    private Integer number;
 }
+

+ 28 - 0
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/storeLimit/WarehouseApplyInfoDTO.java

@@ -0,0 +1,28 @@
+package com.kxs.store.api.dto.kxsapp.storeLimit;
+
+import lombok.Data;
+
+/**
+ * 申请补货 详细 DTO
+ *
+ * @author 没秃顶的码农
+ * @date 2024-01-12
+ */
+@Data
+public class WarehouseApplyInfoDTO {
+
+    /**
+     * 品牌 ID
+     */
+    private Integer brandId;
+
+    /**
+     * 品牌
+     */
+    private String brandName;
+
+    /**
+     * 数量
+     */
+    private Integer number;
+}

+ 0 - 41
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/dto/kxsapp/userAdvance/ForAmountWithdrawDTO.java

@@ -1,41 +0,0 @@
-package com.kxs.store.api.dto.kxsapp.userAdvance;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-
-/**
- * 临额提现-dto
- *
- * @author 系统
- * @date 2024-01-10 11:43:18
- */
-@Data
-public class ForAmountWithdrawDTO {
-
-    /**
-     * 银行卡提现金额
-     */
-    @Schema(description = "银行卡提现金额")
-    private BigDecimal bankAmount;
-
-
-    /**
-     * 提现类型 0分仓 1小分仓
-     */
-    @Schema(description = "提现类型 0分仓 1小分仓")
-    private Integer withdrawType;
-
-
-    /**
-     * 余额提现金额
-     */
-    @Schema(description = "余额提现金额")
-    private BigDecimal yueAmount;
-
-
-
-
-}

+ 49 - 7
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/model/KxsForAmountWithdraw.java

@@ -66,20 +66,49 @@ public class KxsForAmountWithdraw extends Model<KxsForAmountWithdraw> implements
     @Schema(description = "版本")
     private Integer version;
 
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
 
     /**
-     * 银行卡提现金额
+     * 提现金额
      */
-    @Schema(description = "银行卡提现金额")
-    private BigDecimal bankAmount;
+    @Schema(description = "提现金额")
+    private BigDecimal amount;
 
 
     /**
      * 状态 0申请中 1提现成功 2驳回
      */
-    @Schema(description = "状态 0申请中 1提现成功 2驳回")
+    @Schema(description = "状态 0申请中 1提现成功 2驳回 3处理中")
     private Integer status;
 
+    /**
+     * 用户名
+     */
+    @Schema(description = "用户名")
+    private String username;
+
+    /**
+     * 邀请码
+     */
+    @Schema(description = "邀请码")
+    private String userCode;
+
+    /**
+     * 身份证
+     */
+    @Schema(description = "身份证")
+    private String idCard;
+
+    /**
+     * 银行名称
+     */
+    @Schema(description = "银行名称")
+    private String bankName;
 
     /**
      * 提现类型 0分仓 1小分仓
@@ -87,12 +116,25 @@ public class KxsForAmountWithdraw extends Model<KxsForAmountWithdraw> implements
     @Schema(description = "提现类型 0分仓 1小分仓")
     private Integer withdrawType;
 
+    /**
+     * 预留手机号
+     */
+    @Schema(description = "预留手机号")
+    private String bankPhone;
+
+
+    /**
+     * 银行卡号
+     */
+    @Schema(description = "银行卡号")
+    private String bankCode;
+
 
     /**
-     * 余额提现金额
+     * 提现方式 0提现到余额 1提现到银行卡
      */
-    @Schema(description = "余额提现金额")
-    private BigDecimal yueAmount;
+    @Schema(description = "提现方式 0提现到余额 1提现到银行卡")
+    private Integer amountType;
 
 
 

+ 6 - 0
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/model/KxsWarehouseMachineApplyDetail.java

@@ -72,6 +72,12 @@ public class KxsWarehouseMachineApplyDetail extends Model<KxsWarehouseMachineApp
     @Schema(description = "品牌")
     private Integer brandId;
 
+    /**
+     * 品牌名称
+     */
+    @Schema(description = "品牌名称")
+    private String brandName;
+
 
     /**
      * 机具sn

+ 4 - 3
kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/vo/kxsapp/storeLimit/StoreLimitGetMahcineApplyDetailVO.java → kxs-store/kxs-store-api/src/main/java/com/kxs/store/api/vo/kxsapp/storeLimit/MachineApplyDetailVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -17,7 +18,7 @@ import java.util.List;
  */
 @Data
 @Schema(description = "申请补货-申请记录明细返回实体")
-public class StoreLimitGetMahcineApplyDetailVO implements Serializable {
+public class MachineApplyDetailVO implements Serializable {
 
 	@Serial
 	private static final long serialVersionUID = 1L;
@@ -90,14 +91,14 @@ public class StoreLimitGetMahcineApplyDetailVO implements Serializable {
      * 使用额度
      */
     @Schema(description = "使用额度")
-    private Object amount;
+    private BigDecimal useAmount;
 
 
     /**
      * 客小爽分仓申请补货订单详情表
      */
     @Schema(description = "客小爽分仓申请补货订单详情表")
-    private List<Object> snDetail;
+    private List<Object> brandList;
 
 
 

+ 1 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/constant/enums/StoreErrorTypeEnum.java

@@ -31,6 +31,7 @@ public enum StoreErrorTypeEnum {
 	MACHINE_NOT_USER(-1, "机具不属于该创客"),
 	MACHINE_TRANSFER_NO(-1, "循环机不可划拨"),
 	USER_IS_NOT_FIND(-1, "该创客不在您的预发范围内"),
+	INSUFFICIENT_QUOTA(-1, "可用额度不足"),
 	ADVANCE_MACHINE_NUMBER_ERROR(-1, "预发数量超限"),
 	DATA_ERROR(-1, "数据错误");
 

+ 7 - 5
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/StoreLimitController.java

@@ -3,7 +3,7 @@ package com.kxs.store.biz.controller.kxsapp;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
 import com.kxs.store.api.dto.kxsapp.storeLimit.ForAmountWithdrawDTO;
-import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplySubmitDTO;
+import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplyDTO;
 import com.kxs.store.api.model.KxsWarehouseCreditAmount;
 import com.kxs.store.api.vo.kxsapp.storeLimit.WarehouseMachineApplyListVO;
 import com.kxs.store.biz.service.KxsForAmountWithdrawService;
@@ -67,7 +67,7 @@ public class StoreLimitController {
      * @return 申请补货-申请补货提交
      */
     @PostMapping("/warehouseApplySubmit")
-    public R warehouseApplySubmit(@RequestBody WarehouseApplySubmitDTO param) {
+    public R warehouseApplySubmit(@RequestBody WarehouseApplyDTO param) {
 
         return kxsWarehouseMachineApplyService.warehouseApplySubmit(param);
     }
@@ -80,7 +80,8 @@ public class StoreLimitController {
      */
     @GetMapping("/getMachineApplyList")
     public R getMachineApplyList(@ParameterObject Page<WarehouseMachineApplyListVO> page) {
-        return R.ok();
+
+        return R.ok(kxsWarehouseMachineApplyService.getByPage(page));
     }
 
 
@@ -92,7 +93,8 @@ public class StoreLimitController {
      */
     @GetMapping("/getMachineApplyDetail")
     public R getMachineApplyDetail(@RequestParam("id") Integer id) {
-        return R.ok();
+
+        return R.ok(kxsWarehouseMachineApplyService.getMachineApplyDetail(id));
     }
 
 
@@ -104,7 +106,7 @@ public class StoreLimitController {
      */
     @PostMapping("/subFixedAmount")
     public R subFixedAmount(@RequestBody ForAmountWithdrawDTO param) {
-        return R.ok();
+        return R.ok(kxsForAmountWithdrawService.forAmountWithdraw(param, 0));
     }
 
 

+ 2 - 2
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/controller/kxsapp/UserAdvanceController.java

@@ -2,8 +2,8 @@ package com.kxs.store.biz.controller.kxsapp;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
+import com.kxs.store.api.dto.kxsapp.storeLimit.ForAmountWithdrawDTO;
 import com.kxs.store.api.dto.kxsapp.userAdvance.ConfirmAdvanceMachineDTO;
-import com.kxs.store.api.dto.kxsapp.userAdvance.ForAmountWithdrawDTO;
 import com.kxs.store.api.vo.kxsapp.userAdvance.UserAdvanceListVO;
 import com.kxs.store.biz.service.KxsForAmountWithdrawService;
 import com.kxs.store.biz.service.KxsMachineAdvanceService;
@@ -67,7 +67,7 @@ public class UserAdvanceController {
     @PostMapping("/forAmountWithdraw")
     public R forAmountWithdraw(@RequestBody ForAmountWithdrawDTO param) {
 
-        return R.ok();
+        return kxsForAmountWithdrawService.forAmountWithdraw(param, 1);
     }
 
 

+ 12 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/mapper/KxsWarehouseMachineApplyMapper.java

@@ -1,8 +1,12 @@
 package com.kxs.store.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.store.api.model.KxsWarehouseMachineApply;
+import com.kxs.store.api.vo.kxsapp.storeLimit.WarehouseMachineApplyListVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 客小爽分仓申请补货订单表(KxsWarehouseMachineApply)表数据库访问层
@@ -13,5 +17,13 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KxsWarehouseMachineApplyMapper extends BaseMapper<KxsWarehouseMachineApply> {
 
+    /**
+     * app-分页
+     *
+     * @param page   页
+     * @param userId 用户 ID
+     * @return {@link IPage}<{@link WarehouseMachineApplyListVO}>
+     */
+    IPage<WarehouseMachineApplyListVO> getByPage(Page<WarehouseMachineApplyListVO> page, @Param("userId") Long userId);
 }
 

+ 15 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsForAmountWithdrawService.java

@@ -1,7 +1,11 @@
 package com.kxs.store.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.common.core.util.R;
+import com.kxs.store.api.dto.kxsapp.storeLimit.ForAmountWithdrawDTO;
 import com.kxs.store.api.model.KxsForAmountWithdraw;
+import com.kxs.store.api.model.KxsWarehouseLimit;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 客小爽仓库临额提现申请表(KxsForAmountWithdraw)表服务接口
@@ -11,5 +15,16 @@ import com.kxs.store.api.model.KxsForAmountWithdraw;
  */
 public interface KxsForAmountWithdrawService extends IService<KxsForAmountWithdraw> {
 
+    /**
+     * 临额提现
+     *
+     * @param param        参数
+     * @param withdrawType 提款类型 0分仓 1小分仓
+     * @return {@link R}
+     */
+    R forAmountWithdraw(ForAmountWithdrawDTO param, Integer withdrawType);
+
+
+
 }
 

+ 10 - 1
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsWarehouseLimitService.java

@@ -46,6 +46,15 @@ public interface KxsWarehouseLimitService extends IService<KxsWarehouseLimit> {
      * @param amount   类型
      * @param kind     add sub
      */
-    void subUserUsedAmount(Integer toUserId, Integer amount, String kind);
+    void refreshUserAmount(Integer toUserId, Integer amount, String kind);
+
+    /**
+     * 刷新仓库金额
+     *
+     * @param userId      用户 ID
+     * @param amount      量
+     * @param kind        add sub
+     */
+    void refreshWarehouseAmount(Integer userId, int amount, String kind);
 }
 

+ 21 - 2
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/KxsWarehouseMachineApplyService.java

@@ -1,9 +1,13 @@
 package com.kxs.store.biz.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.common.core.util.R;
-import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplySubmitDTO;
+import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplyDTO;
 import com.kxs.store.api.model.KxsWarehouseMachineApply;
+import com.kxs.store.api.vo.kxsapp.storeLimit.MachineApplyDetailVO;
+import com.kxs.store.api.vo.kxsapp.storeLimit.WarehouseMachineApplyListVO;
 
 /**
  * 客小爽分仓申请补货订单表(KxsWarehouseMachineApply)表服务接口
@@ -19,7 +23,22 @@ public interface KxsWarehouseMachineApplyService extends IService<KxsWarehouseMa
      * @param param 参数
      * @return {@link R}
      */
-    R warehouseApplySubmit(WarehouseApplySubmitDTO param);
+    R warehouseApplySubmit(WarehouseApplyDTO param);
 
+    /**
+     * app-申请记录
+     *
+     * @param page 页
+     * @return {@link IPage}<{@link WarehouseMachineApplyListVO}>
+     */
+    IPage<WarehouseMachineApplyListVO> getByPage(Page<WarehouseMachineApplyListVO> page);
+
+    /**
+     * app-申请记录详情
+     *
+     * @param id 编号
+     * @return {@link MachineApplyDetailVO}
+     */
+    MachineApplyDetailVO getMachineApplyDetail(Integer id);
 }
 

+ 156 - 0
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsForAmountWithdrawServiceImpl.java

@@ -1,10 +1,31 @@
 package com.kxs.store.biz.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.constant.enums.KindTypeEnum;
+import com.kxs.common.core.constant.enums.VariationTypeEnum;
+import com.kxs.common.core.exception.GlobalCustomerException;
+import com.kxs.common.core.util.R;
+import com.kxs.common.core.util.RetOps;
+import com.kxs.common.security.util.SecurityUtils;
+import com.kxs.store.api.dto.kxsapp.storeLimit.ForAmountWithdrawDTO;
+import com.kxs.store.api.model.KxsWarehouseLimit;
+import com.kxs.store.biz.constant.enums.StoreErrorTypeEnum;
+import com.kxs.store.biz.constant.enums.WarehouseLimitTypeEnum;
 import com.kxs.store.biz.mapper.KxsForAmountWithdrawMapper;
 import com.kxs.store.api.model.KxsForAmountWithdraw;
+import com.kxs.store.biz.mapper.KxsWarehouseLimitMapper;
 import com.kxs.store.biz.service.KxsForAmountWithdrawService;
+import com.kxs.user.api.feign.RemoteKxsUserService;
+import com.kxs.user.api.model.KxsUserAmountLog;
+import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
 
 /**
  * 客小爽仓库临额提现申请表(KxsForAmountWithdraw)表服务实现类
@@ -13,7 +34,142 @@ import org.springframework.stereotype.Service;
  * @since 2024-01-08 09:46:02
  */
 @Service("kxsForAmountWithdrawService")
+@RequiredArgsConstructor
 public class KxsForAmountWithdrawServiceImpl extends ServiceImpl<KxsForAmountWithdrawMapper, KxsForAmountWithdraw> implements KxsForAmountWithdrawService {
 
+    private final RemoteKxsUserService  remoteKxsUserService;
+
+    private final KxsWarehouseLimitMapper kxsWarehouseLimitMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R forAmountWithdraw(ForAmountWithdrawDTO param, Integer withdrawType) {
+
+        Long userId = SecurityUtils.getUser().getId();
+
+        //查询实名信息
+        R<RealUserInfoVO> realUserInfoR = remoteKxsUserService.loadUserRealBankById(userId.intValue(), SecurityConstants.FROM_IN);
+        RealUserInfoVO realUserInfoVO = RetOps.of(realUserInfoR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.DATA_ERROR.getDescription()));
+
+        KxsForAmountWithdraw kxsForAmountWithdraw = new KxsForAmountWithdraw();
+        kxsForAmountWithdraw.setUserId(userId.intValue());
+        kxsForAmountWithdraw.setIdCard(realUserInfoVO.getIdCard());
+        kxsForAmountWithdraw.setBankCode(realUserInfoVO.getBankCode());
+        kxsForAmountWithdraw.setUsername(realUserInfoVO.getRealName());
+        kxsForAmountWithdraw.setUserCode(realUserInfoVO.getUserCode());
+        kxsForAmountWithdraw.setBankName(realUserInfoVO.getBankName());
+        kxsForAmountWithdraw.setBankPhone(realUserInfoVO.getPhone());
+        kxsForAmountWithdraw.setWithdrawType(withdrawType);
+
+        KxsWarehouseLimit userLimit = kxsWarehouseLimitMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
+                .eq(KxsWarehouseLimit::getWarehouseType, WarehouseLimitTypeEnum.XFC.getType())
+                .eq(KxsWarehouseLimit::getUserId, userId));
+
+        BigDecimal forAmount;
+        //小分仓提现
+        if(withdrawType == 1){
+            //可提现临时额度 可用额度-固定额度 = 可提现临时额度
+            forAmount = NumberUtil.sub(userLimit.getValidAmount(), userLimit.getFixedAmount());
+        }else{
+            //仓库提现 可提现临时额度 = 临时额度 - (已用额度 - 担保额度 < 0 ? 0: )
+            BigDecimal sub = NumberUtil.sub(userLimit.getUsedAmount(), userLimit.getCreditAmount());
+            forAmount = NumberUtil.sub(userLimit.getForAmount(), sub.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : sub);
+        }
+
+        if(forAmount.compareTo(NumberUtil.add(param.getBankAmount(),param.getYueAmount())) < 0){
+            return R.failed("临额不足");
+        }
+        //余额提现
+        if(param.getYueAmount() != null && param.getYueAmount() > 0){
+            yueWithdrawAmount(kxsForAmountWithdraw, param, userLimit);
+        }
+        //银行卡提现
+        if(param.getBankAmount() != null && param.getBankAmount() > 0){
+            bankWithdrawAmount(kxsForAmountWithdraw, param, userLimit);
+        }
+
+        return R.ok();
+
+    }
+
+
+    /**
+     * 提现到银行卡
+     *
+     * @param kxsForAmountWithdraw KXS 提取金额
+     * @param param                参数
+     * @param userLimit            用户限制
+     */
+    private void bankWithdrawAmount(KxsForAmountWithdraw kxsForAmountWithdraw, ForAmountWithdrawDTO param, KxsWarehouseLimit userLimit) {
+        //银行卡最大提现金额
+        BigDecimal bankCashAmount = NumberUtil.sub(userLimit.getBankRechargeAmount(), userLimit.getBankWithdrawAmount());
+        //银行卡提现
+        if(param.getBankAmount() > bankCashAmount.intValue()){
+            throw new GlobalCustomerException("提现到银行卡超出限额");
+        }
+        kxsForAmountWithdraw.setAmount(BigDecimal.valueOf(param.getBankAmount()));
+        baseMapper.insert(kxsForAmountWithdraw);
+
+        //扣减可用余额,扣减临额
+        userLimit.setForAmount(NumberUtil.sub(userLimit.getForAmount(),param.getBankAmount()));
+        userLimit.setValidAmount(NumberUtil.sub(userLimit.getValidAmount(),param.getBankAmount()));
+        kxsWarehouseLimitMapper.updateById(userLimit);
+
+    }
+
+    /**
+     * 提现到余额
+     *
+     * @param kxsForAmountWithdraw KXS 提取金额
+     * @param param                参数
+     * @param userLimit            用户限制
+     */
+    public void yueWithdrawAmount(KxsForAmountWithdraw kxsForAmountWithdraw, ForAmountWithdrawDTO param, KxsWarehouseLimit userLimit){
+
+        //余额最大提现金额
+        BigDecimal yueCashAmount = NumberUtil.sub(userLimit.getYueRechargeAmount(), userLimit.getYueWithdrawAmount());
+        //余额提现
+        if(param.getYueAmount() > yueCashAmount.intValue()){
+            throw new GlobalCustomerException("提现到余额超出限额");
+        }
+        kxsForAmountWithdraw.setAmount(BigDecimal.valueOf(param.getYueAmount()));
+        kxsForAmountWithdraw.setStatus(1);
+        baseMapper.insert(kxsForAmountWithdraw);
+
+        //扣减可用余额,扣减临额
+        userLimit.setForAmount(NumberUtil.sub(userLimit.getForAmount(),param.getYueAmount()));
+        userLimit.setValidAmount(NumberUtil.sub(userLimit.getValidAmount(),param.getYueAmount()));
+        kxsWarehouseLimitMapper.updateById(userLimit);
+
+        KxsUserAmountLog userAmount = new KxsUserAmountLog();
+        userAmount.setUserId(kxsForAmountWithdraw.getUserId());
+        userAmount.setKind(KindTypeEnum.ADD.getType());
+        userAmount.setVariationCause("临额提现");
+        userAmount.setVariationType(VariationTypeEnum.ACCOUNT_TYPE_BA_RETURN.getType());
+        userAmount.setAmount(BigDecimal.valueOf(param.getYueAmount()));
+
+        R<Boolean> booleanR = remoteKxsUserService.userAmountChange(userAmount, SecurityConstants.FROM_IN);
+        if(!booleanR.getData()){
+            throw new GlobalCustomerException("提现申请失败");
+        }
+
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 }
 

+ 5 - 14
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineAdvanceServiceImpl.java

@@ -1,5 +1,6 @@
 package com.kxs.store.biz.service.impl;
 
+import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -159,12 +160,8 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
                     .orElseThrow(() -> new GlobalCustomerException(StoreErrorTypeEnum.DATA_ERROR.getDescription()));
 
             //小分仓减少已用额度 刷新可用额度
-            if(Objects.equals(brand.getBrandType(), BrandTypeEnum.DIANQIAN.getType())){
-                kxsWarehouseLimitService.subUserUsedAmount(kxsMachineAdvance.getToUserId(), BrandTypeEnum.DQ_PRICE.getType(), KindTypeEnum.SUB.getType());
-            }else{
-                kxsWarehouseLimitService.subUserUsedAmount(kxsMachineAdvance.getToUserId(), BrandTypeEnum.DJ_PRICE.getType(), KindTypeEnum.SUB.getType());
-            }
-
+            Integer price = EnumUtil.getFieldBy(BrandTypeEnum::getType, BrandTypeEnum::getType, brand.getBrandType());
+            kxsWarehouseLimitService.refreshUserAmount(kxsMachineAdvance.getToUserId(), price, KindTypeEnum.SUB.getType());
         }
 
         KxsMachineAdvance kxsMachineAdvance = baseMapper.selectById(machineAdvanceInfo.getOrderId());
@@ -271,9 +268,6 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
         //查询仓库
         KxsWarehouse warehouse = kxsWarehouseMapper.selectById(machineAdvance.getWarehouseId());
 
-        //查询仓库额度
-        KxsWarehouseLimit warehouseLimit = kxsWarehouseLimitMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery().eq(KxsWarehouseLimit::getUserId, warehouse.getUserId()));
-
         //查询品牌
         R<KxsBrand> kxsBrandR = remoteKxsProductService.loadByBrand(warehouse.getBrandId(), SecurityConstants.FROM_IN);
         KxsBrand brand = RetOps.of(kxsBrandR)
@@ -309,11 +303,8 @@ public class KxsMachineAdvanceServiceImpl extends ServiceImpl<KxsMachineAdvanceM
                 userLimit.setValidAmount(NumberUtil.sub(userLimit.getValidAmount(), amount));
                 kxsWarehouseLimitMapper.updateById(userLimit);
 
-                //减少仓库已用额度
-                warehouseLimit.setUsedAmount(NumberUtil.sub(warehouseLimit.getUsedAmount(), amount));
-                //增加仓库可用额度
-                warehouseLimit.setValidAmount(NumberUtil.add(warehouseLimit.getValidAmount(), amount));
-                kxsWarehouseLimitMapper.updateById(warehouseLimit);
+                //减少仓库已用额度增加仓库可用额度
+                kxsWarehouseLimitService.refreshWarehouseAmount(warehouse.getUserId(), amount, KindTypeEnum.SUB.getType());
             }
             //给预发对象发送通知
             KxsUserMsg toUserMsg = MsgTemplateUtil.confirmAdvanceMachineUserNote(userId.intValue(), warehouse.getWarehouseName(), machineAdvance.getBrandName(), param.getSnList());

+ 14 - 15
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsMachineApplyServiceImpl.java

@@ -1,11 +1,9 @@
 package com.kxs.store.biz.service.impl;
 
 import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.NumberUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,11 +12,9 @@ import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.constant.enums.BrandTypeEnum;
 import com.kxs.common.core.constant.enums.ErrorTypeEnum;
 import com.kxs.common.core.constant.enums.KindTypeEnum;
-import com.kxs.common.core.constant.enums.TotalTypeEnum;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.RetOps;
-import com.kxs.common.core.util.TotalDateUtil;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.product.api.feign.RemoteKxsProductService;
 import com.kxs.product.api.model.KxsBrand;
@@ -43,19 +39,14 @@ import com.kxs.user.api.model.KxsUser;
 import com.kxs.user.api.model.KxsUserAdvance;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
-import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -203,11 +194,8 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
                 //占用自己的预发额度
                 if (kxsMachineAdvance.getIsUseAmount() == 1) {
                     //小分仓减少已用额度 刷新可用额度
-                    if(Objects.equals(brand.getBrandType(), BrandTypeEnum.DIANQIAN.getType())){
-                        kxsWarehouseLimitService.subUserUsedAmount(userId.intValue(), BrandTypeEnum.DQ_PRICE.getType(), KindTypeEnum.SUB.getType());
-                    }else{
-                        kxsWarehouseLimitService.subUserUsedAmount(userId.intValue(), BrandTypeEnum.DJ_PRICE.getType(), KindTypeEnum.SUB.getType());
-                    }
+                    Integer price = EnumUtil.getFieldBy(BrandTypeEnum::getType, BrandTypeEnum::getType, brand.getBrandType());
+                    kxsWarehouseLimitService.refreshUserAmount(userId.intValue(), price, KindTypeEnum.SUB.getType());
                 }
                 //已经添加到预扣款
                 if (kxsMachineAdvance.getIsAdvance() == 1 && kxsMachineAdvance.getAdvanceId() != null) {
@@ -279,6 +267,8 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
     @Override
     public R storeOrderTransferUser(StoreOrderTransferUserDTO param) {
 
+        Long userId = SecurityUtils.getUser().getId();
+
         KxsMachineApply order = baseMapper.selectOne(Wrappers.<KxsMachineApply>lambdaQuery().eq(KxsMachineApply::getOrderSn, param.getOrderSn()));
         if(order == null){
             return R.failed(StoreErrorTypeEnum.ORDER_NULL.getDescription());
@@ -363,6 +353,15 @@ public class KxsMachineApplyServiceImpl extends ServiceImpl<KxsMachineApplyMappe
         //修改订单状态
         order.setStatus(MachineOrderEnum.APPLY_SUCCESSFUL.getType());
         baseMapper.updateById(order);
+        //刷新仓库额度
+        R<KxsBrand> kxsBrandR = remoteKxsProductService.loadByBrand(order.getBrandId(), SecurityConstants.FROM_IN);
+        KxsBrand kxsBrand = RetOps.of(kxsBrandR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription()));
+        Integer price = EnumUtil.getFieldBy(BrandTypeEnum::getType, BrandTypeEnum::getType, kxsBrand.getBrandType());
+        int amount = snList.size() * price;
+        //减少仓库已用额度增加仓库可用额度
+        kxsWarehouseLimitService.refreshWarehouseAmount(userId.intValue(), amount, KindTypeEnum.SUB.getType());
 
         //发货统计
         kxsSendTotalService.shipmentStatistics(param.getSnList().size(), order.getWarehouseId(), order.getBrandId());

+ 37 - 1
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseLimitServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.Objects;
 
 /**
  * 客小爽仓库额度表(KxsWarehouseLimit)表服务实现类
@@ -102,7 +103,7 @@ public class KxsWarehouseLimitServiceImpl extends ServiceImpl<KxsWarehouseLimitM
     }
 
     @Override
-    public void subUserUsedAmount(Integer userId, Integer amount, String kind) {
+    public void refreshUserAmount(Integer userId, Integer amount, String kind) {
         //查询用户额度
         KxsWarehouseLimit userLimit = baseMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
                 .eq(KxsWarehouseLimit::getWarehouseType, WarehouseLimitTypeEnum.XFC.getType())
@@ -123,6 +124,41 @@ public class KxsWarehouseLimitServiceImpl extends ServiceImpl<KxsWarehouseLimitM
         baseMapper.updateById(userLimit);
     }
 
+    @Override
+    public void refreshWarehouseAmount(Integer userId, int amount, String kind) {
+
+        //查询仓库额度
+        KxsWarehouseLimit warehouseLimit = baseMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
+                .eq(KxsWarehouseLimit::getWarehouseType, WarehouseLimitTypeEnum.FC.getType())
+                .eq(KxsWarehouseLimit::getUserId, userId));
+
+        if(KindTypeEnum.ADD.getType().equals(kind)){
+            //已用额度增加
+            warehouseLimit.setUsedAmount(NumberUtil.add(warehouseLimit.getUsedAmount(), amount));
+            //可用额度减少
+            warehouseLimit.setValidAmount(NumberUtil.sub(warehouseLimit.getValidAmount(), amount));
+        }else{
+            //已用额度减少
+            warehouseLimit.setUsedAmount(NumberUtil.sub(warehouseLimit.getUsedAmount(), amount));
+            //可用额度增加
+            warehouseLimit.setValidAmount(NumberUtil.add(warehouseLimit.getValidAmount(), amount));
+        }
+
+        baseMapper.updateById(warehouseLimit);
+
+    }
+
+
+
+
+
+
+
+
+
+
+
+
 
 }
 

+ 122 - 3
kxs-store/kxs-store-biz/src/main/java/com/kxs/store/biz/service/impl/KxsWarehouseMachineApplyServiceImpl.java

@@ -1,13 +1,49 @@
 package com.kxs.store.biz.service.impl;
 
+import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.NumberUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.constant.enums.BrandTypeEnum;
+import com.kxs.common.core.constant.enums.ErrorTypeEnum;
+import com.kxs.common.core.constant.enums.KindTypeEnum;
+import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
+import com.kxs.common.core.util.RetOps;
 import com.kxs.common.security.util.SecurityUtils;
-import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplySubmitDTO;
+import com.kxs.product.api.feign.RemoteKxsProductService;
+import com.kxs.product.api.model.KxsBrand;
+import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplyDTO;
+import com.kxs.store.api.dto.kxsapp.storeLimit.WarehouseApplyInfoDTO;
+import com.kxs.store.api.model.KxsWarehouseLimit;
+import com.kxs.store.api.model.KxsWarehouseMachineApplyDetail;
+import com.kxs.store.api.vo.kxsapp.storeLimit.MachineApplyDetailVO;
+import com.kxs.store.api.vo.kxsapp.storeLimit.WarehouseMachineApplyListVO;
+import com.kxs.store.biz.constant.enums.StoreErrorTypeEnum;
+import com.kxs.store.biz.constant.enums.WarehouseLimitTypeEnum;
+import com.kxs.store.biz.mapper.KxsWarehouseLimitMapper;
+import com.kxs.store.biz.mapper.KxsWarehouseMachineApplyDetailMapper;
 import com.kxs.store.biz.mapper.KxsWarehouseMachineApplyMapper;
 import com.kxs.store.api.model.KxsWarehouseMachineApply;
+import com.kxs.store.biz.service.KxsWarehouseLimitService;
 import com.kxs.store.biz.service.KxsWarehouseMachineApplyService;
+import com.kxs.user.api.feign.RemoteKxsUserService;
+import com.kxs.user.api.model.KxsUser;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 客小爽分仓申请补货订单表(KxsWarehouseMachineApply)表服务实现类
@@ -16,16 +52,99 @@ import org.springframework.stereotype.Service;
  * @since 2024-01-08 09:46:02
  */
 @Service("kxsWarehouseMachineApplyService")
+@RequiredArgsConstructor
 public class KxsWarehouseMachineApplyServiceImpl extends ServiceImpl<KxsWarehouseMachineApplyMapper, KxsWarehouseMachineApply> implements KxsWarehouseMachineApplyService {
 
+    private final RemoteKxsUserService remoteKxsUserService;
+
+    private final RemoteKxsProductService remoteKxsProductService;
+
+    private final KxsWarehouseMachineApplyDetailMapper kxsWarehouseMachineApplyDetailMapper;
+
+    private final KxsWarehouseLimitMapper kxsWarehouseLimitMapper;
+
+    private final KxsWarehouseLimitService kxsWarehouseLimitService;
+
+
     @Override
-    public R warehouseApplySubmit(WarehouseApplySubmitDTO param) {
+    @Transactional(rollbackFor = Exception.class)
+    public R warehouseApplySubmit(WarehouseApplyDTO param) {
 
         Long userId = SecurityUtils.getUser().getId();
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(userId.intValue(), SecurityConstants.FROM_IN);
+        KxsUser user = RetOps.of(kxsUserR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
+        List<WarehouseApplyInfoDTO> applyData = param.getApplyData();
+        //计算额度
+        BigDecimal useAmount = BigDecimal.ZERO;
+        for (WarehouseApplyInfoDTO info : applyData) {
+            R<KxsBrand> kxsBrandR = remoteKxsProductService.loadByBrand(info.getBrandId(), SecurityConstants.FROM_IN);
+            KxsBrand kxsBrand = RetOps.of(kxsBrandR)
+                    .getData()
+                    .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription()));
+
+            Integer price = EnumUtil.getFieldBy(BrandTypeEnum::getType, BrandTypeEnum::getType, kxsBrand.getBrandType());
+            BigDecimal brandAmount = NumberUtil.mul(price, info.getNumber());
+            useAmount = useAmount.add(brandAmount);
+        }
+        KxsWarehouseLimit warehouseLimit = kxsWarehouseLimitMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
+                .eq(KxsWarehouseLimit::getWarehouseType, WarehouseLimitTypeEnum.FC.getType())
+                .eq(KxsWarehouseLimit::getUserId, userId));
+        if(warehouseLimit.getValidAmount().compareTo(useAmount) < 0){
+            return R.failed(StoreErrorTypeEnum.INSUFFICIENT_QUOTA.getDescription());
+        }
+
 
+        KxsWarehouseMachineApply kxsWarehouseMachineApply = new KxsWarehouseMachineApply();
+        kxsWarehouseMachineApply.setUserId(userId.intValue());
+        kxsWarehouseMachineApply.setApplyNum(param.getApplyNum());
+        kxsWarehouseMachineApply.setUsername(user.getUsername());
+        kxsWarehouseMachineApply.setUserCode(user.getUserCode());
+        kxsWarehouseMachineApply.setApplyData(JSON.toJSONString(param.getApplyData()));
+        kxsWarehouseMachineApply.setUseAmount(useAmount);
+        baseMapper.insert(kxsWarehouseMachineApply);
+
+        //刷新仓库额度
+        kxsWarehouseLimitService.refreshWarehouseAmount(userId.intValue(), useAmount.intValue(), KindTypeEnum.ADD.getType());
+
+        return R.ok();
+    }
+
+    @Override
+    public IPage<WarehouseMachineApplyListVO> getByPage(Page<WarehouseMachineApplyListVO> page) {
+
+        return baseMapper.getByPage(page, SecurityUtils.getUser().getId());
+    }
+
+    @Override
+    public MachineApplyDetailVO getMachineApplyDetail(Integer id) {
+        MachineApplyDetailVO machineApplyDetailVO = new MachineApplyDetailVO();
+        KxsWarehouseMachineApply kxsWarehouseMachineApply = baseMapper.selectById(id);
+        BeanUtils.copyProperties(kxsWarehouseMachineApply, machineApplyDetailVO);
 
+        List<KxsWarehouseMachineApplyDetail> kxsWarehouseMachineApplyDetails = kxsWarehouseMachineApplyDetailMapper.selectList(Wrappers.lambdaQuery(KxsWarehouseMachineApplyDetail.class)
+                .eq(KxsWarehouseMachineApplyDetail::getOrderId, id));
+        //分组后组装数据
+        Map<String, List<KxsWarehouseMachineApplyDetail>> brands = kxsWarehouseMachineApplyDetails.stream().collect(Collectors.groupingBy(KxsWarehouseMachineApplyDetail::getBrandName));
+        ArrayList<Object> brandList = new ArrayList<>();
+        brands.forEach((key, value) -> {
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("id", value.get(0).getBrandId());
+            map.put("brandName", key);
+            ArrayList<Object> snList = new ArrayList<>();
+            for (KxsWarehouseMachineApplyDetail info : value) {
+                HashMap<String, Object> sn = new HashMap<>();
+                sn.put("id", info.getId());
+                sn.put("posSn", info.getPosSn());
+                snList.add(sn);
+            }
+            map.put("snList", snList);
+            brandList.add(map);
+        });
+        machineApplyDetailVO.setBrandList(brandList);
 
-        return null;
+        return machineApplyDetailVO;
     }
 }
 

+ 8 - 2
kxs-store/kxs-store-biz/src/main/resources/mapper/KxsForAmountWithdrawMapper.xml

@@ -8,10 +8,16 @@
         <result column="update_time" property="updateTime" />
         <result column="del_flag" property="delFlag" />
         <result column="version" property="version" />
-        <result column="bank_amount" property="bankAmount" />
+        <result column="user_id" property="userId" />
+        <result column="amount" property="amount" />
         <result column="status" property="status" />
         <result column="withdraw_type" property="withdrawType" />
-        <result column="yue_amount" property="yueAmount" />
+        <result column="amount_type" property="amountType" />
+        <result column="username" property="username" />
+        <result column="user_code" property="userCode" />
+        <result column="bank_code" property="bankCode" />
+        <result column="bank_name" property="bankName" />
+        <result column="bank_phone" property="bankPhone" />
 
     </resultMap>
 

+ 4 - 0
kxs-store/kxs-store-biz/src/main/resources/mapper/KxsWarehouseMachineApplyMapper.xml

@@ -22,5 +22,9 @@
         <result column="status" property="status" />
 
     </resultMap>
+    <select id="getByPage" resultType="com.kxs.store.api.vo.kxsapp.storeLimit.WarehouseMachineApplyListVO">
+        select id, apply_num, status, create_time from kxs_warehouse_machine_apply
+        where del_flag = 0 and user_id = #{userId}
+    </select>
 
 </mapper>

+ 1 - 1
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/user/UserRealUserDTO.java → kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/user/RealUserDTO.java

@@ -12,7 +12,7 @@ import lombok.Data;
  * @date 2024-01-03 09:39:58
  */
 @Data
-public class UserRealUserDTO {
+public class RealUserDTO {
 
     /**
      * 身份证号

+ 0 - 1
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/userAccount/UserAmountVariationListDTO.java

@@ -26,7 +26,6 @@ public class UserAmountVariationListDTO {
      * 日志类型 add新增 sub减少
      */
     @Schema(description = "日志类型 add新增 sub减少")
-    @NotBlank(message = "日志类型不能为空")
     private String kind;
 
     /**

+ 27 - 15
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java

@@ -3,9 +3,12 @@ package com.kxs.user.api.feign;
 
 import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.util.R;
+import com.kxs.user.api.dto.kxsapp.user.RealUserDTO;
 import com.kxs.user.api.model.KxsUser;
 import com.kxs.user.api.model.KxsUserAdvance;
-import org.springframework.web.bind.annotation.PostMapping;
+import com.kxs.user.api.model.KxsUserAmountLog;
+import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.service.annotation.DeleteExchange;
@@ -47,6 +50,15 @@ public interface RemoteKxsUserService {
 	@GetExchange("/user/loadUserById")
 	R<KxsUser> loadUserById(@RequestParam("userId") Integer userId, @RequestHeader(SecurityConstants.FROM) String from);
 
+	/**
+	 * 通过用户ID查询用户银行信息
+	 * @param userId 用户ID
+	 * @param from 调用标志
+	 * @return R
+	 */
+	@GetExchange("/user/loadUserRealBankById")
+	R<RealUserInfoVO> loadUserRealBankById(@RequestParam("userId") Integer userId, @RequestHeader(SecurityConstants.FROM) String from);
+
 	/**
 	 * 通过预扣款ID查询预扣款信息
 	 * @param advanceId 预扣款ID
@@ -64,7 +76,7 @@ public interface RemoteKxsUserService {
 	 * @return {@link R}<{@link Boolean}>
 	 */
 	@DeleteExchange("/userAdvance/removeById")
-	R<Boolean> removeById(Integer id, @RequestHeader(SecurityConstants.FROM) String from);
+	R<Boolean> removeById(@RequestParam("id") Integer id, @RequestHeader(SecurityConstants.FROM) String from);
 
 	/**
 	 * 退回预扣款
@@ -74,19 +86,19 @@ public interface RemoteKxsUserService {
 	 * @return {@link R}<{@link Boolean}>
 	 */
 	@GetExchange("/userAdvance/returnAdvance")
-	R<Boolean> returnAdvance(Integer id, @RequestHeader(SecurityConstants.FROM) String from);
-
-
-
-
-
-
-
-
-
-
-
-
+	R<Boolean> returnAdvance(@RequestParam("id") Integer id, @RequestHeader(SecurityConstants.FROM) String from);
 
+	/**
+	 * 检查用户是否在自己伞下
+	 *
+	 * @param from        调用标志
+	 * @param userId      用户 ID
+	 * @param checkUserId 检查用户 ID
+	 * @return {@link R}<{@link Boolean}>
+	 */
+	@GetExchange("/user/checkUserIsChildren")
+	R<Boolean> checkUserIsChildren(@RequestParam("userId") Integer userId, @RequestParam("checkUserId") Integer checkUserId, @RequestHeader(SecurityConstants.FROM) String from);
 
+	@PostExchange("/userAccount/userAmountChange")
+	R<Boolean> userAmountChange(@RequestBody KxsUserAmountLog userAmount, @RequestHeader(SecurityConstants.FROM) String from);
 }

+ 12 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/user/RealUserInfoVO.java

@@ -34,6 +34,12 @@ public class RealUserInfoVO implements Serializable {
     @Schema(description = "真实姓名")
     private String realName;
 
+    /**
+     * 用户编码
+     */
+    @Schema(description = "用户编码")
+    private String userCode;
+
 
     /**
      * 身份证号
@@ -62,6 +68,12 @@ public class RealUserInfoVO implements Serializable {
     @Schema(description = "银行名称")
     private String bankOpen;
 
+    /**
+     * 预留电话
+     */
+    @Schema(description = "预留电话")
+    private String bankPhone;
+
 
 
 

+ 26 - 4
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsUserController.java

@@ -14,8 +14,6 @@ import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * 用户表(KxsSecurityUser)表控制层
  *
@@ -63,7 +61,19 @@ public class KxsUserController {
     }
 
     /**
-     * 根据code获取用户全部信息
+     * 检查用户是否在自己伞下
+     * 内部调用
+     * @return Boolean
+     */
+    @Inner
+    @GetMapping(value = { "/checkUserIsChildren" })
+    public R checkUserIsChildren(@RequestParam("userId") Integer userId, @RequestParam("checkUserId") Integer checkUserId) {
+
+        return R.ok(kxsUserService.checkUserIsChildren(userId, checkUserId));
+    }
+
+    /**
+     * 根据id获取用户全部信息
      * 内部调用
      * @return 用户信息
      */
@@ -74,6 +84,18 @@ public class KxsUserController {
         return R.ok(kxsUserService.getById(userId));
     }
 
+    /**
+     * 根据id获取用户银行卡和实名信息
+     * 内部调用
+     * @return 用户信息
+     */
+    @Inner
+    @GetMapping(value = { "/loadUserRealBankById" })
+    public R loadUserRealBankById(@RequestParam("userId") Integer userId) {
+
+        return R.ok(kxsUserService.loadUserRealBankById(userId));
+    }
+
     /**
      * 获取用户数据
      *
@@ -155,7 +177,7 @@ public class KxsUserController {
      * @return 设置-实名认证
      */
     @PostMapping("/realUser")
-    public R realUser(@Valid @RequestBody UserRealUserDTO param) {
+    public R realUser(@Valid @RequestBody RealUserDTO param) {
         return kxsUserService.realUser(param);
     }
 

+ 14 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/UserAccountController.java

@@ -6,6 +6,7 @@ import com.kxs.common.core.util.R;
 import com.kxs.user.api.dto.kxsapp.userAccount.UserAmountVariationListDTO;
 import com.kxs.user.api.dto.kxsapp.userAccount.WithdrawDepositDTO;
 import com.kxs.user.api.model.KxsUserAdvance;
+import com.kxs.user.api.model.KxsUserAmountLog;
 import com.kxs.user.api.vo.kxsapp.userAccount.UserAmountVariationListVO;
 import com.kxs.user.api.vo.kxsapp.userAccount.WithdrawListVO;
 import com.kxs.user.biz.constant.enums.UserAdvanceStatusEnum;
@@ -155,6 +156,19 @@ public class UserAccountController {
         return R.ok(kxsUserAmountLogService.variationTypeList(kind));
     }
 
+    /**
+     * 余额变动
+     *
+     * 内部调用
+     *
+     * @return 收支明细-筛选变动类型
+     */
+    @PostMapping("/userAmountChange")
+    public R userAmountChange(@RequestBody KxsUserAmountLog userAmountLog) {
+
+        return R.ok(kxsUserAmountService.userAmountChange(userAmountLog));
+    }
+
 
 
 

+ 1 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserMapper.java

@@ -20,6 +20,6 @@ public interface KxsUserMapper extends BaseMapper<KxsUser> {
      * @param userId 用户ID
      * @return {@link RealUserInfoVO}
      */
-    RealUserInfoVO findUserRealBankInfo(Long userId);
+    RealUserInfoVO findUserRealBankInfo(Integer userId);
 }
 

+ 14 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserAmountService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.common.core.util.R;
 import com.kxs.user.api.dto.kxsapp.userAccount.WithdrawDepositDTO;
 import com.kxs.user.api.model.KxsUserAmount;
+import com.kxs.user.api.model.KxsUserAmountLog;
 import com.kxs.user.api.vo.kxsapp.userAccount.MyAccountVO;
 
 /**
@@ -14,7 +15,20 @@ import com.kxs.user.api.vo.kxsapp.userAccount.MyAccountVO;
  */
 public interface KxsUserAmountService extends IService<KxsUserAmount> {
 
+    /**
+     * 我帐户
+     *
+     * @return {@link MyAccountVO}
+     */
     MyAccountVO myAccount();
 
+    /**
+     * 余额变动
+     *
+     * @param userAmountLog 变动日志
+     * @return {@link R}
+     */
+    R userAmountChange(KxsUserAmountLog userAmountLog);
+
 }
 

+ 17 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java

@@ -134,7 +134,7 @@ public interface KxsUserService extends IService<KxsUser> {
      * @param param 参数
      * @return {@link R}
      */
-    R realUser(UserRealUserDTO param);
+    R realUser(RealUserDTO param);
 
     /**
      * 实名认证查看
@@ -174,5 +174,21 @@ public interface KxsUserService extends IService<KxsUser> {
      */
     Boolean removeUser();
 
+    /**
+     * 检查用户是否在自己伞下
+     *
+     * @param userId      用户 ID
+     * @param checkUserId 检查用户 ID
+     * @return {@link Boolean}
+     */
+    Boolean checkUserIsChildren(Integer userId, Integer checkUserId);
+
+    /**
+     * 根据id获取用户银行卡和实名信息
+     *
+     * @param userId 用户 ID
+     * @return {@link RealUserInfoVO}
+     */
+    RealUserInfoVO loadUserRealBankById(Integer userId);
 }
 

+ 1 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserAmountLogServiceImpl.java

@@ -10,7 +10,7 @@ import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.user.api.dto.kxsapp.userAccount.UserAmountVariationListDTO;
 import com.kxs.user.api.vo.kxsapp.userAccount.AmountInExpendTotalVO;
 import com.kxs.user.api.vo.kxsapp.userAccount.UserAmountVariationListVO;
-import com.kxs.user.biz.constant.enums.VariationTypeEnum;
+import com.kxs.common.core.constant.enums.VariationTypeEnum;
 import com.kxs.user.biz.mapper.KxsUserAmountLogMapper;
 import com.kxs.user.api.model.KxsUserAmountLog;
 import com.kxs.user.biz.service.KxsUserAmountLogService;

+ 45 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserAmountServiceImpl.java

@@ -3,16 +3,23 @@ package com.kxs.user.biz.service.impl;
 import cn.hutool.core.util.NumberUtil;
 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.common.security.util.SecurityUtils;
 import com.kxs.user.api.dto.kxsapp.userAccount.WithdrawDepositDTO;
+import com.kxs.user.api.model.KxsUserAmountLog;
 import com.kxs.user.api.vo.kxsapp.userAccount.MyAccountVO;
 import com.kxs.user.biz.mapper.KxsUserAmountMapper;
 import com.kxs.user.api.model.KxsUserAmount;
+import com.kxs.user.biz.service.KxsUserAmountLogService;
 import com.kxs.user.biz.service.KxsUserAmountService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Objects;
+
 /**
  * 用户账户表(KxsUserAmount)表服务实现类
  *
@@ -20,8 +27,10 @@ import org.springframework.stereotype.Service;
  * @since 2023-12-11 23:33:30
  */
 @Service("kxsUserAmountService")
+@RequiredArgsConstructor
 public class KxsUserAmountServiceImpl extends ServiceImpl<KxsUserAmountMapper, KxsUserAmount> implements KxsUserAmountService {
 
+    private final KxsUserAmountLogService kxsUserAmountLogService;
     @Override
     public MyAccountVO myAccount() {
 
@@ -36,5 +45,41 @@ public class KxsUserAmountServiceImpl extends ServiceImpl<KxsUserAmountMapper, K
 
         return myAccountVO;
     }
+
+    @Override
+    public R userAmountChange(KxsUserAmountLog userAmountLog) {
+
+        KxsUserAmount userAmount = this.getOne(Wrappers.<KxsUserAmount>lambdaQuery()
+                .eq(KxsUserAmount::getUserId, userAmountLog.getUserId()));
+
+        userAmountLog.setBeforeAmount(userAmount.getAmount());
+        BigDecimal afterAmount;
+        //增加余额
+        if (Objects.equals(userAmountLog.getKind(), KindTypeEnum.ADD.getType())) {
+            afterAmount = NumberUtil.add(userAmount.getAmount(), userAmountLog.getAmount());
+        }else{
+            afterAmount = NumberUtil.sub(userAmount.getAmount(), userAmountLog.getAmount());
+        }
+        userAmountLog.setAfterAmount(afterAmount);
+        userAmount.setAmount(NumberUtil.add(afterAmount));
+        kxsUserAmountLogService.save(userAmountLog);
+
+        this.updateById(userAmount);
+
+
+        return R.ok(Boolean.FALSE);
+    }
+
+
+
+
+
+
+
+
+
+
+
+
 }
 

+ 22 - 5
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.constant.CacheConstants;
@@ -17,7 +16,6 @@ import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.exception.ValidateCodeException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.SpringContextHolder;
-import com.kxs.common.security.model.KxsSecurityUser;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.system.api.feign.RemoteUserMsgService;
 import com.kxs.system.api.model.KxsUserMsg;
@@ -56,7 +54,6 @@ import org.springframework.security.web.authentication.preauth.PreAuthenticatedA
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDateTime;
 import java.util.Objects;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
@@ -355,7 +352,7 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R realUser(UserRealUserDTO param) {
+    public R realUser(RealUserDTO param) {
 
         if(!IdcardUtil.isValidCard(param.getIdCard())){
             return R.failed(UserErrorTypeEnum.ID_CARD_ERROR.getDescription());
@@ -404,7 +401,7 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
     @Override
     public RealUserInfoVO getRealUserInfo() {
 
-        return baseMapper.findUserRealBankInfo(SecurityUtils.getUser().getId());
+        return baseMapper.findUserRealBankInfo(SecurityUtils.getUser().getId().intValue());
     }
 
     @Override
@@ -452,6 +449,26 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
                 .set(KxsUser::getStatus, KxsUserStatusEnum.REMOVE.getType()));
     }
 
+    @Override
+    public Boolean checkUserIsChildren(Integer userId, Integer checkUserId) {
+
+        KxsUser user = baseMapper.selectById(checkUserId);
+        String pidPath = user.getPidPath();
+        //判断是否是下级
+        boolean contains = pidPath.contains("," + userId + ",");
+        if(!contains){
+            return Boolean.FALSE;
+        }
+
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public RealUserInfoVO loadUserRealBankById(Integer userId) {
+
+        return baseMapper.findUserRealBankInfo(userId);
+    }
+
 
     /**
      * 检查验证码

+ 1 - 1
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserAmountLogMapper.xml

@@ -27,7 +27,7 @@
             <if test="query.brandId != null">
                 and brand_id = #{query.brandId}
             </if>
-            <if test="query.kind != null">
+            <if test="query.kind != null and query.kind != ''">
                 and kind = #{query.kind}
             </if>
             <if test="query.variationType != null">

+ 1 - 1
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserMapper.xml

@@ -29,7 +29,7 @@
         <result column="create_time" property="createTime" />
     </resultMap>
     <select id="findUserRealBankInfo" resultType="com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO">
-        select a.phone, r.real_name, r.id_card, b.bank_name, b.bank_open, b.bank_phone, b.bank_code
+        select a.phone, a.user_code, r.real_name, r.id_card, b.bank_name, b.bank_open, b.bank_phone, b.bank_code
         from kxs_user a
         left join kxs_user_real r on a.id = r.user_id
         left join kxs_user_bank b on a.id = b.user_id