Mr.qian il y a 2 semaines
Parent
commit
a15e7bc7cc

+ 4 - 0
cif-service/src/main/java/com/txz/cif/model/AccountFreezd.java

@@ -88,4 +88,8 @@ public class AccountFreezd {
     @Column(name = "unfreeze_time")
     private Date unfreezeTime;
     
+    /**
+     * 业务单号
+     */
+    private String bizNo;
 }

+ 76 - 75
cif-service/src/main/java/com/txz/cif/service/impl/AccountServiceImpl.java

@@ -36,68 +36,69 @@ import java.util.List;
 public class AccountServiceImpl extends AbstractService<Account> implements AccountService {
     @Resource
     private AccountMapper cAccountMapper;
-
+    
     @Resource
     private SubjectService subjectService;
-
+    
     @Resource
     private AccountFlowService accountFlowService;
-
+    
     @Resource
     private FlowService flowService;
-
+    
     @Override
     public void deal(AccountFlow accountFlow) {
-        if (accountFlow.getFlowType() == 4){
-            //冻结
-            cAccountMapper.dealFreeze(accountFlow.getAccountId(),accountFlow.getAmount());
-        } else  if (accountFlow.getFlowType() == 5){
-            //解冻
-            cAccountMapper.dealFreeze(accountFlow.getAccountId(),accountFlow.getAmount().negate());
+        if (accountFlow.getFlowType() == 4) {
+            // 冻结
+            cAccountMapper.dealFreeze(accountFlow.getAccountId(), accountFlow.getAmount());
+        } else if (accountFlow.getFlowType() == 5) {
+            // 解冻
+            cAccountMapper.dealFreeze(accountFlow.getAccountId(), accountFlow.getAmount().negate());
         } else {
-
-            if (accountFlow.getType() == 1){
+            
+            if (accountFlow.getType() == 1) {
                 if (BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.WITHDRAW
-                  || BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.RECHARGE){
-                    int i = cAccountMapper.dealWithDayCutHasTotal(accountFlow.getAccountId(),accountFlow.getAmount().negate());
-                    if (i == 0){
-                        cAccountMapper.dealHasTotal(accountFlow.getAccountId(),accountFlow.getAmount().negate());
+                        || BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.RECHARGE) {
+                    int i = cAccountMapper.dealWithDayCutHasTotal(accountFlow.getAccountId(), accountFlow.getAmount().negate());
+                    if (i == 0) {
+                        cAccountMapper.dealHasTotal(accountFlow.getAccountId(), accountFlow.getAmount().negate());
                     }
                 } else {
-                    int i = cAccountMapper.dealWithDayCut(accountFlow.getAccountId(),accountFlow.getAmount().negate());
-                    if (i == 0){
-                        cAccountMapper.deal(accountFlow.getAccountId(),accountFlow.getAmount().negate());
+                    int i = cAccountMapper.dealWithDayCut(accountFlow.getAccountId(), accountFlow.getAmount().negate());
+                    if (i == 0) {
+                        cAccountMapper.deal(accountFlow.getAccountId(), accountFlow.getAmount().negate());
                     }
                 }
             } else {
                 if (BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.WITHDRAW
-                        || BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.RECHARGE){
-                    int i = cAccountMapper.dealWithDayCutHasTotal(accountFlow.getAccountId(),accountFlow.getAmount());
-                    if (i == 0){
-                        cAccountMapper.dealHasTotal(accountFlow.getAccountId(),accountFlow.getAmount());
+                        || BizTypeEnum.getByKey(accountFlow.getBizType()) == BizTypeEnum.RECHARGE) {
+                    int i = cAccountMapper.dealWithDayCutHasTotal(accountFlow.getAccountId(), accountFlow.getAmount());
+                    if (i == 0) {
+                        cAccountMapper.dealHasTotal(accountFlow.getAccountId(), accountFlow.getAmount());
                     }
                 } else {
-                    int i = cAccountMapper.dealWithDayCut(accountFlow.getAccountId(),accountFlow.getAmount());
-                    if (i == 0){
-                        cAccountMapper.deal(accountFlow.getAccountId(),accountFlow.getAmount());
+                    int i = cAccountMapper.dealWithDayCut(accountFlow.getAccountId(), accountFlow.getAmount());
+                    if (i == 0) {
+                        cAccountMapper.deal(accountFlow.getAccountId(), accountFlow.getAmount());
                     }
                 }
             }
         }
+        accountFlow.setCreateTime(new Date());
         accountFlowService.save(accountFlow);
     }
-
+    
     @Override
     public void innerRecharge(RechargeForm form) {
-        SnowflakeGenerator snowflake =new  SnowflakeGenerator();
+        SnowflakeGenerator snowflake = new SnowflakeGenerator();
         String bizNo = snowflake.next().toString();
         Date today = DateUtil.date();
         Account innerAccount = findById(form.getInnerAccountId());
-        if (innerAccount == null){
+        if (innerAccount == null) {
             return;
         }
         Account account = findById(form.getAccountId());
-        if (account == null){
+        if (account == null) {
             return;
         }
         Flow flow = Flow.builder().amount(form.getAmount()).bizType(1001).createUser(
@@ -107,78 +108,78 @@ public class AccountServiceImpl extends AbstractService<Account> implements Acco
                 .type(1)
                 .build();
         flowService.saveUseGeneratedKeys(flow);
-        //借 :资金应收-渠道款-银行xx元  内部户1(资产类:借方账户)+钱
+        // 借 :资金应收-渠道款-银行xx元  内部户1(资产类:借方账户)+钱
         deal(AccountFlow.builder().accountId(form.getInnerAccountId()).amount(flow.getAmount())
                 .bizId(flow.getBizNo()).aliases(innerAccount.getAliases()).transTime(today)
                 .balance(innerAccount.getBalance().add(flow.getAmount()))
                 .freezeAmount(innerAccount.getFreezeAmount())
                 .flowType(1).type(2).bizType(1001).flowId(flow.getId()).build());
-        //贷 :客户资金账户xx元 客户账号(负债类:贷方账户)+钱
+        // 贷 :客户资金账户xx元 客户账号(负债类:贷方账户)+钱
         deal(AccountFlow.builder().accountId(form.getAccountId()).amount(flow.getAmount())
                 .bizId(flow.getBizNo()).aliases(account.getAliases()).transTime(today)
                 .balance(account.getBalance().add(flow.getAmount()))
                 .freezeAmount(account.getFreezeAmount())
                 .flowType(1).type(2).bizType(1001).flowId(flow.getId()).build());
     }
-
+    
     @Override
     public void innerCarry() {
-        SnowflakeGenerator snowflake =new  SnowflakeGenerator();
+        SnowflakeGenerator snowflake = new SnowflakeGenerator();
         String bizNo = snowflake.next().toString();
         Date today = DateUtil.date();
-
+        
         Condition c = new Condition(Subject.class);
-        c.createCriteria().andEqualTo("parentId",3).andEqualTo("leaf",1);
+        c.createCriteria().andEqualTo("parentId", 3).andEqualTo("leaf", 1);
         List<Subject> subjectList = subjectService.findByCondition(c);
-        if (CollUtil.isEmpty(subjectList)){
+        if (CollUtil.isEmpty(subjectList)) {
             return;
         }
         Account innerAccount = findById(MyConstants.INNER_PROFIT);
-        if (innerAccount == null){
+        if (innerAccount == null) {
             log.error("[日切-结转]本年利润账户未找到");
             return;
         }
-        for (Subject subject:subjectList) {
-            Account account = findBy("aliases",subject.getAliases());
-            if (account == null){
-                log.error("[日切-结转]别名为"+subject.getAliases()+"的账户未找到。");
+        for (Subject subject : subjectList) {
+            Account account = findBy("aliases", subject.getAliases());
+            if (account == null) {
+                log.error("[日切-结转]别名为" + subject.getAliases() + "的账户未找到。");
                 return;
             }
-            if (account.getBeforeDayBalance().compareTo(BigDecimal.ZERO) == 0){
+            if (account.getBeforeDayBalance().compareTo(BigDecimal.ZERO) == 0) {
                 continue;
             }
-             BigDecimal amount  = account.getBeforeDayBalance();
-            if (!DateUtil.isSameDay(account.getBeforeDayTime(),DateUtil.date())){
+            BigDecimal amount = account.getBeforeDayBalance();
+            if (!DateUtil.isSameDay(account.getBeforeDayTime(), DateUtil.date())) {
                 amount = account.getBalance();
             }
-
-            //借方结转
+            
+            // 借方结转
             /**
              * 借方结转
              * 借:本年利润(贷)       -500元
              * 贷:专家提成(借)       -500元
              */
-            if (StrUtil.equals("D",subject.getDirection())){
+            if (StrUtil.equals("D", subject.getDirection())) {
                 Flow flow = Flow.builder().amount(amount).bizType(6001).createUser("sys")
                         .bizNo(bizNo).createTime(today).updateTime(today).transTime(today)
                         .debitAccount(innerAccount.getId()).creditAccount(account.getId())
                         .type(8)
                         .build();
                 flowService.saveUseGeneratedKeys(flow);
-                //借:本年利润(贷)       -500元
+                // 借:本年利润(贷)       -500元
                 deal(AccountFlow.builder().accountId(innerAccount.getId()).amount(flow.getAmount())
                         .bizId(flow.getBizNo()).aliases(innerAccount.getAliases())
                         .balance(innerAccount.getBalance().subtract(flow.getAmount()))
                         .freezeAmount(innerAccount.getFreezeAmount()).transTime(today)
                         .flowType(8).type(1).bizType(6001).flowId(flow.getId()).build());
-                //贷:专家提成(借)       -500元
+                // 贷:专家提成(借)       -500元
                 deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
                         .bizId(flow.getBizNo()).aliases(account.getAliases())
                         .balance(account.getBalance().subtract(flow.getAmount()))
                         .freezeAmount(account.getFreezeAmount()).transTime(today)
                         .flowType(8).type(1).bizType(6001).flowId(flow.getId()).build());
             } else {
-                //贷方结转
+                // 贷方结转
                 /**
                  * 贷方结转
                  * 借:主营业务收入    (贷)       -500元
@@ -190,65 +191,65 @@ public class AccountServiceImpl extends AbstractService<Account> implements Acco
                         .type(9)
                         .build();
                 flowService.saveUseGeneratedKeys(flow);
-                //借:主营业务收入    (贷)       -500元
+                // 借:主营业务收入    (贷)       -500元
                 deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
                         .bizId(flow.getBizNo()).aliases(innerAccount.getAliases()).transTime(today)
                         .balance(innerAccount.getBalance().subtract(flow.getAmount()))
                         .freezeAmount(innerAccount.getFreezeAmount())
-
+                        
                         .flowType(9).type(1).bizType(6002).flowId(flow.getId()).build());
-                //贷:本年利润       (贷)       +500元
+                // 贷:本年利润       (贷)       +500元
                 deal(AccountFlow.builder().accountId(innerAccount.getId()).amount(flow.getAmount())
                         .bizId(flow.getBizNo()).aliases(account.getAliases()).transTime(today)
                         .balance(account.getBalance().add(flow.getAmount()))
                         .freezeAmount(account.getFreezeAmount())
                         .flowType(9).type(2).bizType(6002).flowId(flow.getId()).build());
             }
-
+            
         }
-
+        
     }
-
+    
     @Override
     public BigDecimal sumInit(String aliases) {
-        //查询当日所有初始上日余额
-        BigDecimal today =  cAccountMapper.sumTodayInit(aliases);
-        if (today == null){
+        // 查询当日所有初始上日余额
+        BigDecimal today = cAccountMapper.sumTodayInit(aliases);
+        if (today == null) {
             today = BigDecimal.ZERO;
         }
-        //查询非当日所有初始上日余额
-        BigDecimal befor =  cAccountMapper.sumBeforInit(aliases);
-        if (befor == null){
+        // 查询非当日所有初始上日余额
+        BigDecimal befor = cAccountMapper.sumBeforInit(aliases);
+        if (befor == null) {
             befor = BigDecimal.ZERO;
         }
         return today.add(befor);
     }
-
+    
     @Override
     public BigDecimal sumEnd(String aliases) {
-
-        BigDecimal today =  cAccountMapper.sumTodayEnd(aliases);
-        if (today == null){
+        
+        BigDecimal today = cAccountMapper.sumTodayEnd(aliases);
+        if (today == null) {
             today = BigDecimal.ZERO;
         }
-        //查询非当日所有初始上日余额
-        BigDecimal befor =  cAccountMapper.sumBeforEnd(aliases);
-        if (befor == null){
+        // 查询非当日所有初始上日余额
+        BigDecimal befor = cAccountMapper.sumBeforEnd(aliases);
+        if (befor == null) {
             befor = BigDecimal.ZERO;
         }
         return today.add(befor);
     }
-
+    
     @Override
     public Account getAccount(Long userId, int type) {
         Condition c = new Condition(Account.class);
-        c.createCriteria().andEqualTo("userId",userId)
-                .andEqualTo("bizType",type);
+        c.createCriteria().andEqualTo("userId", userId)
+                .andEqualTo("bizType", type);
         List<Account> accounts = findByCondition(c);
-        if (CollUtil.isEmpty(accounts)){
+        if (CollUtil.isEmpty(accounts)) {
             return null;
         }
         return accounts.get(0);
-
+        
     }
 }

+ 19 - 9
cif-service/src/main/java/com/txz/cif/service/impl/FlowServiceImpl.java

@@ -3,8 +3,6 @@ package com.txz.cif.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.txz.cif.configurer.LocalUtil;
 import com.txz.cif.constants.MyConstants;
 import com.txz.cif.core.AbstractService;
@@ -86,6 +84,7 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
                     .userId(param.getUserId())
                     .accountId(account.getId())
                     .bizId(flow.getId())
+                    .bizNo(flow.getBizNo())
                     .amount(param.getAmount())
                     .createTime(today)
                     .unfreezeAmount(BigDecimal.ZERO)
@@ -112,10 +111,21 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
         if (freezd.getStatus() != 1) {
             return Result.genFailResult(LocalUtil.get("frozen.status.is.abnormal"));
         }
-        Flow oldFlow = findById(freezd.getBizId());
-        if (oldFlow == null) {
+        
+        Condition c = new Condition(Flow.class);
+        c.createCriteria()
+                .andEqualTo("bizNo", freezd.getBizNo())
+                .andEqualTo("userId", freezd.getUserId())
+        ;
+        List<Flow> oldFlows = findByCondition(c);
+        // Flow oldFlow = findById(freezd.getBizId());
+        if (CollectionUtil.isEmpty(oldFlows)) {
             return Result.genFailResult(LocalUtil.get("frozen.record.not.found"));
         }
+        Flow oldFlow = oldFlows.get(0);
+        // if (oldFlow == null) {
+        //     return Result.genFailResult(LocalUtil.get("frozen.record.not.found"));
+        // }
         
         Account account = accountService.findById(freezd.getAccountId());
         if (account == null) {
@@ -361,8 +371,8 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
     
     @Override
     public Result withdraw(WithdrawParam param) {
-//        log.error("withdraw : " + JSONUtil.toJsonStr(param));
-
+        //        log.error("withdraw : " + JSONUtil.toJsonStr(param));
+        
         Account account = accountService.getAccount(param.getUserId(), param.getAccountType());
         if (account == null) {
             return Result.genFailResult(LocalUtil.get("account.not.found"));
@@ -387,7 +397,7 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
                 .type(3)
                 .build();
         saveUseGeneratedKeys(flow);
-//        log.error("withdraw flowId: " + flow.getId() + " amount :"+param.getAmount().subtract(param.getFee()).toPlainString());
+        //        log.error("withdraw flowId: " + flow.getId() + " amount :"+param.getAmount().subtract(param.getFee()).toPlainString());
         // 借 :客户资金账户xx元 客户账号(负债类:贷方账户)-钱
         accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
                 .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
@@ -417,7 +427,7 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
                 .bizId(param.getBizId()).type(6)
                 .build();
         saveUseGeneratedKeys(flow2);
-//        log.error("withdraw flowId2: " + flow2.getId());
+        //        log.error("withdraw flowId2: " + flow2.getId());
         // 借:个人账户钱包(贷)     -500元
         accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow2.getAmount())
                 .bizId(flow2.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
@@ -430,7 +440,7 @@ public class FlowServiceImpl extends AbstractService<Flow> implements FlowServic
                 .bizNo(flow2.getBizNo()).balance(innerIncomeAccount.getBalance().add(flow2.getAmount()))
                 .freezeAmount(innerIncomeAccount.getFreezeAmount()).userId(flow2.getUserId())
                 .flowType(6).type(2).bizType(flow2.getBizType()).flowId(flow2.getId()).build());
-
+        
         return Result.genSuccessResult();
     }
     

+ 1 - 7
cif-service/src/main/java/com/txz/cif/web/AccountApiController.java

@@ -31,7 +31,6 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -201,13 +200,8 @@ public class AccountApiController extends AbstractApiController {
         }
         c.setOrderByClause("create_time desc");
         List<AccountFlow> flows = accountFlowService.findByCondition(c);
-        // 根据bizId和type相同的数据去重
+        // 根据bizId和type相同的数据去重,并确保按创建时间倒序排列
         List<AccountFlow> distinctFlows = flows.stream()
-                .collect(Collectors.toMap(
-                        flow -> flow.getBizId() + "_" + flow.getType(), 
-                        Function.identity(), 
-                        (existing, replacement) -> existing))
-                .values().stream()
                 .sorted((af1, af2) -> af2.getCreateTime().compareTo(af1.getCreateTime()))
                 .collect(Collectors.toList());
         PageInfo pageInfo = new PageInfo(distinctFlows);

+ 1 - 1
cif-service/src/main/java/com/txz/cif/web/WithdrawRecordApiController.java

@@ -260,7 +260,7 @@ public class WithdrawRecordApiController {
                 return "FAIL";
             }
             boolean checkSignResult = TFPayUtil.verifySignature(BeanUtil.copyProperties(dto, CheckWithdrawSignDTO.class), paymentChannels.get(0).getSecretKey(), dto.getSign());
-            
+
             if (!checkSignResult) {
                 log.error("签名校验失败");
                 return "FAIL";