Prechádzať zdrojové kódy

功能提交,加款失败删除数据库记录,撤销失败报错异常,初始化客户的redis 金额key

杨六六 4 rokov pred
rodič
commit
dab202f632

+ 1 - 0
common/fire-dto/src/main/java/com/fire/dto/enums/Status.java

@@ -33,6 +33,7 @@ public enum Status {
     BALANCE_NOT_ENOUGH("301", "可用余额不足"),
     RECORDING_EXISTS("410", "记录已经存在"),
     REQUEST_PARAM_ERROR("411","请求参数不合法"),
+    ACCOUNT_CANCEL_FAIL("412","款项撤销失败"),
     PARAM_ERROR("306", "参数不合法");
 
     private final String status;

+ 6 - 0
common/fire-dto/src/main/java/com/fire/dto/system/SysUser.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -88,6 +89,11 @@ public class SysUser extends Model<SysUser> {
      */
     private String delFlag;
 
+    /**
+     * 1 :管理员  2:客户  3: 中间人
+     */
+    private Integer type;
+
     /**
      * 角色列表
      */

+ 6 - 0
modules/admin/src/main/java/com/fire/admin/dto/UserDTO.java

@@ -26,6 +26,12 @@ public class UserDTO implements Serializable {
     private String delFlag;
     private List<Long> roleList;
     private List<Long> deptList;
+
+    /**
+     * 1 :管理员  2:客户  3: 中间人
+     */
+    private Integer type;
+
     /**
      * 新密码
      */

+ 54 - 0
modules/admin/src/main/java/com/fire/admin/rest/UtilController.java

@@ -0,0 +1,54 @@
+package com.fire.admin.rest;
+
+import com.fire.admin.service.CustomerService;
+import com.fire.dto.CustomerInfo;
+import com.fire.dto.response.BaseResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import redis.clients.jedis.JedisCluster;
+
+import java.util.List;
+
+import static com.fire.dto.enums.RedisKey.CUSTOMER_AMOUNT;
+
+/**
+ * @author: liuliu
+ * @ClassName: UtilController
+ * @Description: TODO
+ * @date: 2021-06-15 16:03
+ */
+@Api(tags = "工具接口")
+@RestController
+@RequestMapping("/util")
+public class UtilController {
+
+    @Autowired
+    private CustomerService customerService;
+
+    @Autowired
+    private JedisCluster jedisCluster;
+
+    /**
+     * @Description: TODO  工具接口,给所有的客户初始化key
+     * @Param: []
+     * @return:
+     * @Author: liuliu
+     * @Date: 2021/6/15 16:12
+     */
+    @ApiOperation("给所有的客户初始化可用金额,构建redisKey")
+    @PostMapping("/customer")
+    public BaseResponse createCustomerRedisKey() {
+
+        List<CustomerInfo> customerInfos = customerService.queryCustomerInfo(null);
+
+        customerInfos.forEach(cu -> {
+            jedisCluster.hset(CUSTOMER_AMOUNT.key(), CUSTOMER_AMOUNT.key().concat(cu.getCustomerId().toString()), "0");
+        });
+        return new BaseResponse();
+    }
+
+}

+ 23 - 11
modules/admin/src/main/java/com/fire/admin/service/impl/AdditionalPaymentServiceImpl.java

@@ -62,14 +62,21 @@ public class AdditionalPaymentServiceImpl extends ServiceImpl<AdditionalPaymentM
     @Override
     public void insertAdditionalPaymen(AdditionalPaymentDto additionalPaymentDto) {
         if (additionalPaymentDto.getType().equals("customer")) {
+            additionalPaymentDto.setId(jedisCluster.incr(GLOBAL_ID_INCR.key()));
             additionalPaymentDto.setDistinguish(2);
             // TODO 客户加款
             int count = this.additionalPayment(additionalPaymentDto);
-            if (count > 0) {
-                // TODO 加款成功之后,把加款的金额写入数据库
-                redisAmountScript.changeAmount(CUSTOMER_AMOUNT.key(), Long.getLong(additionalPaymentDto.getRelationId()), "add", additionalPaymentDto.getAmount().multiply(new BigDecimal(10000)).longValue(), 0L);
+            // TODO 加款操作
+            Long amount = redisAmountScript.changeAmount(CUSTOMER_AMOUNT.key(), Long.parseLong(additionalPaymentDto.getRelationId()), "add", additionalPaymentDto.getAmount().multiply(new BigDecimal(10000)).longValue(), 0L);
+            if (count > 0 && ObjectUtil.isNotEmpty(amount)) {
+                log.info("客户加款成功,客户编号为:【{}】,加款金额为:【{}】", additionalPaymentDto.getRelationId(), additionalPaymentDto.getAmount());
+            } else {
+                // TODO 客户加款失败,删除该条加款记录
+                log.info("加款失败,加款编号为:【{}】将删除此条记录,客户编号为:【{}】,加款金额为:【{}】", additionalPaymentDto.getId(), additionalPaymentDto.getRelationId(), additionalPaymentDto.getAmount());
+                baseMapper.deleteById(additionalPaymentDto.getId());
             }
         } else if (additionalPaymentDto.getType().equals("suppler")) {
+            additionalPaymentDto.setId(jedisCluster.incr(GLOBAL_ID_INCR.key()));
             additionalPaymentDto.setDistinguish(1);
             // TODO 供应商加款
             this.additionalPayment(additionalPaymentDto);
@@ -88,7 +95,7 @@ public class AdditionalPaymentServiceImpl extends ServiceImpl<AdditionalPaymentM
 
         if (ObjectUtil.isNotEmpty(additionalPaymentDto.getType()) && ObjectUtil.isNotEmpty(additionalPaymentDto.getRelationId())) {
             AdditionalPayment payment = AdditionalPayment.builder()
-                    .id(jedisCluster.incr(GLOBAL_ID_INCR.key()))
+                    .id(additionalPaymentDto.getId())
                     .cardNo(additionalPaymentDto.getCardNo())
                     .bankDeposit(additionalPaymentDto.getBankDeposit())
                     .account(additionalPaymentDto.getAccount())
@@ -160,15 +167,20 @@ public class AdditionalPaymentServiceImpl extends ServiceImpl<AdditionalPaymentM
             additionalPaymentDto.setUndo(1);
             // TODO  实例化对象
             AdditionalPayment payment = this.formatAdditionalPaymentDto(additionalPaymentDto);
-            // TODO 修改记录的撤销状态
-            int count = baseMapper.updateById(payment);
+
             // TODO 获取客户授信金额
             CustomerInfo customerInfo = customerService.getcustomerOne(Long.parseLong(payment.getRelationId()));
-            if (count > 0) {
-                // TODO 撤销
-                Long amount = redisAmountScript.changeAmount(CUSTOMER_AMOUNT.key(), Long.parseLong(payment.getRelationId()), "sub", payment.getAmount(), customerInfo.getCreditAmount());
-                log.info("客户加款撤销。 客户编号为:【{}】 撤销金额为:【{}】 ,授信额度为:【{}】 剩余额度为:【{}】", payment.getRelationId(), additionalPaymentDto.getAmount(), new BigDecimal(customerInfo.getCreditAmount()).divide(new BigDecimal("10000"), 2, BigDecimal.ROUND_DOWN), new BigDecimal(amount).divide(new BigDecimal("10000"), 2, BigDecimal.ROUND_DOWN));
+            // TODO 进行账户撤销
+            Long amount = redisAmountScript.changeAmount(CUSTOMER_AMOUNT.key(), Long.parseLong(payment.getRelationId()), "sub", payment.getAmount(), customerInfo.getCreditAmount());
+            if (ObjectUtil.isNotEmpty(amount)) {
+                // TODO 修改记录的撤销状态
+                baseMapper.updateById(payment);
+                log.info("客户款项撤销。 客户编号为:【{}】 撤销金额为:【{}】 ,授信额度为:【{}】 剩余额度为:【{}】", payment.getRelationId(), additionalPaymentDto.getAmount(), new BigDecimal(customerInfo.getCreditAmount()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_DOWN), new BigDecimal(amount).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_DOWN));
                 return payment.getRelationId().concat("_").concat(amount.toString());
+            } else {
+                // TODO 撤销失败的处理
+                log.info("客户编号为“【{}】 款项撤销失败,撤销金额为:【{}】", additionalPaymentDto.getRelationId(), additionalPaymentDto.getAmount().divide(new BigDecimal(10000), 2, BigDecimal.ROUND_DOWN));
+                throw new BaseException(Status.ACCOUNT_CANCEL_FAIL.status(), Status.ACCOUNT_CANCEL_FAIL.message());
             }
         }
 
@@ -180,7 +192,7 @@ public class AdditionalPaymentServiceImpl extends ServiceImpl<AdditionalPaymentM
         return AdditionalPayment.builder()
                 .id(additionalPaymentDto.getId())
                 .relationId(additionalPaymentDto.getRelationId())
-                .amount(additionalPaymentDto.getAmount().multiply(new BigDecimal(10000)).longValue())
+                .amount(additionalPaymentDto.getAmount().longValue())
                 .undo(additionalPaymentDto.getUndo())
                 .build();
     }