From c2614ad5c7d1e27fae68e52cd058af363464cdb4 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期六, 21 五月 2022 23:16:38 +0800
Subject: [PATCH] 优化代码

---
 service-acct/src/main/java/com/java110/acct/smo/impl/AccountInnerServiceSMOImpl.java |  136 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 0 deletions(-)

diff --git a/service-acct/src/main/java/com/java110/acct/smo/impl/AccountInnerServiceSMOImpl.java b/service-acct/src/main/java/com/java110/acct/smo/impl/AccountInnerServiceSMOImpl.java
index e66c5eb..a3292ee 100644
--- a/service-acct/src/main/java/com/java110/acct/smo/impl/AccountInnerServiceSMOImpl.java
+++ b/service-acct/src/main/java/com/java110/acct/smo/impl/AccountInnerServiceSMOImpl.java
@@ -1,19 +1,27 @@
 package com.java110.acct.smo.impl;
 
 
+import com.java110.acct.dao.IAccountDetailServiceDao;
 import com.java110.acct.dao.IAccountServiceDao;
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.PageDto;
 import com.java110.dto.account.AccountDto;
+import com.java110.dto.accountDetail.AccountDetailDto;
 import com.java110.dto.user.UserDto;
 import com.java110.intf.acct.IAccountInnerServiceSMO;
 import com.java110.po.account.AccountPo;
+import com.java110.po.accountDetail.AccountDetailPo;
+import com.java110.utils.lock.DistributedLock;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -30,6 +38,9 @@
 
     @Autowired
     private IAccountServiceDao accountServiceDaoImpl;
+
+    @Autowired
+    private IAccountDetailServiceDao accountDetailServiceDaoImpl;
 
 
     @Override
@@ -89,6 +100,131 @@
         return accountServiceDaoImpl.updateAccount(BeanConvertUtil.beanCovertMap(accountPo));
     }
 
+    @Override
+    public int saveAccount(@RequestBody AccountPo accountPo) {
+        accountServiceDaoImpl.saveAccount(BeanConvertUtil.beanCovertMap(accountPo));
+        return 1;
+    }
+
+    /**
+     * 棰勫瓨鎺ュ彛
+     *
+     * @param accountDetailPo
+     * @return
+     */
+    @Override
+    @Java110Transactional
+    public int prestoreAccount(@RequestBody AccountDetailPo accountDetailPo) {
+
+        if (StringUtil.isEmpty(accountDetailPo.getAcctId())) {
+            throw new IllegalArgumentException("璐︽埛ID涓虹┖");
+        }
+        //寮�濮嬫灧閿�
+        String requestId = DistributedLock.getLockUUID();
+        String key = accountDetailPo.getAcctId();
+        AccountDto accountDto = null;
+        List<AccountDto> accounts = null;
+        int flag;
+        try {
+            DistributedLock.waitGetDistributedLock(key, requestId);
+            accountDto = new AccountDto();
+            accountDto.setObjId(accountDetailPo.getObjId());
+            accountDto.setAcctId(accountDetailPo.getAcctId());
+            accounts = BeanConvertUtil.covertBeanList(accountServiceDaoImpl.getAccountInfo(BeanConvertUtil.beanCovertMap(accountDto)), AccountDto.class);
+            if (accounts == null || accounts.size() < 1) {
+                throw new IllegalArgumentException("璐︽埛涓嶅瓨鍦�");
+            }
+            //鍦ㄨ处鎴峰鍔�
+            double amount = Double.parseDouble(accounts.get(0).getAmount());
+            BigDecimal amountBig = new BigDecimal(amount);
+            amount = amountBig.add(new BigDecimal(accountDetailPo.getAmount())).doubleValue();
+            AccountPo accountPo = new AccountPo();
+            accountPo.setObjId(accountDetailPo.getObjId());
+            accountPo.setAcctId(accountDetailPo.getAcctId());
+            accountPo.setAmount(amount + "");
+            flag = accountServiceDaoImpl.updateAccount(BeanConvertUtil.beanCovertMap(accountPo));
+            if (flag < 1) {
+                throw new IllegalArgumentException("鏇存柊璐︽埛澶辫触");
+            }
+        } finally {
+            DistributedLock.releaseDistributedLock(requestId, key);
+        }
+        accountDetailPo.setDetailType(AccountDetailDto.DETAIL_TYPE_IN);
+        if(StringUtil.isEmpty(accountDetailPo.getDetailId())) {
+            accountDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+        }
+        if(StringUtil.isEmpty(accountDetailPo.getOrderId())){
+            accountDetailPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
+        }
+        if(StringUtil.isEmpty(accountDetailPo.getRelAcctId())){
+            accountDetailPo.setRelAcctId("-1");
+        }
+
+        //淇濆瓨浜ゆ槗鏄庣粏
+        return accountDetailServiceDaoImpl.saveAccountDetails(BeanConvertUtil.beanCovertMap(accountDetailPo));
+    }
+
+    /**
+     * 鎵f鎺ュ彛
+     *
+     * @param accountDetailPo
+     * @return
+     */
+    @Override
+    @Java110Transactional
+    public int withholdAccount(@RequestBody AccountDetailPo accountDetailPo) {
+
+        if (StringUtil.isEmpty(accountDetailPo.getAcctId())) {
+            throw new IllegalArgumentException("璐︽埛ID涓虹┖");
+        }
+        //寮�濮嬫灧閿�
+        String requestId = DistributedLock.getLockUUID();
+        String key = accountDetailPo.getAcctId();
+        AccountDto accountDto = null;
+        List<AccountDto> accounts = null;
+        int flag;
+        try {
+            DistributedLock.waitGetDistributedLock(key, requestId);
+            accountDto = new AccountDto();
+            accountDto.setObjId(accountDetailPo.getObjId());
+            accountDto.setAcctId(accountDetailPo.getAcctId());
+            accounts = BeanConvertUtil.covertBeanList(accountServiceDaoImpl.getAccountInfo(BeanConvertUtil.beanCovertMap(accountDto)), AccountDto.class);
+            if (accounts == null || accounts.size() < 1) {
+                throw new IllegalArgumentException("璐︽埛涓嶅瓨鍦�");
+            }
+            //鍦ㄨ处鎴峰鍔�
+            double amount = Double.parseDouble(accounts.get(0).getAmount());
+            BigDecimal amountBig = new BigDecimal(amount);
+            amount = amountBig.subtract(new BigDecimal(accountDetailPo.getAmount())).doubleValue();
+            if(amount < 0){
+                throw new IllegalArgumentException("浣欓涓嶈冻");
+            }
+            AccountPo accountPo = new AccountPo();
+            accountPo.setObjId(accountDetailPo.getObjId());
+            accountPo.setAcctId(accountDetailPo.getAcctId());
+            accountPo.setAmount(amount + "");
+            flag = accountServiceDaoImpl.updateAccount(BeanConvertUtil.beanCovertMap(accountPo));
+            if (flag < 1) {
+                throw new IllegalArgumentException("鏇存柊璐︽埛澶辫触");
+            }
+            accountDetailPo.setObjType(accounts.get(0).getObjType());
+        } finally {
+            DistributedLock.releaseDistributedLock(requestId, key);
+        }
+        accountDetailPo.setDetailType(AccountDetailDto.DETAIL_TYPE_OUT);
+        if(StringUtil.isEmpty(accountDetailPo.getDetailId())) {
+            accountDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+        }
+        if(StringUtil.isEmpty(accountDetailPo.getOrderId())){
+            accountDetailPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
+        }
+        if(StringUtil.isEmpty(accountDetailPo.getRelAcctId())){
+            accountDetailPo.setRelAcctId("-1");
+        }
+        //淇濆瓨浜ゆ槗鏄庣粏
+        return accountDetailServiceDaoImpl.saveAccountDetails(BeanConvertUtil.beanCovertMap(accountDetailPo));
+    }
+
     public IAccountServiceDao getAccountServiceDaoImpl() {
         return accountServiceDaoImpl;
     }

--
Gitblit v1.8.0