FlowServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package com.txz.cif.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.txz.cif.constants.MyConstants;
  4. import com.txz.cif.dao.FlowMapper;
  5. import com.txz.cif.dto.Result;
  6. import com.txz.cif.model.Account;
  7. import com.txz.cif.model.AccountFlow;
  8. import com.txz.cif.model.AccountFreezd;
  9. import com.txz.cif.model.Flow;
  10. import com.txz.cif.param.*;
  11. import com.txz.cif.service.AccountFlowService;
  12. import com.txz.cif.service.AccountFreezdService;
  13. import com.txz.cif.service.AccountService;
  14. import com.txz.cif.service.FlowService;
  15. import com.txz.cif.core.AbstractService;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import javax.annotation.Resource;
  20. import java.math.BigDecimal;
  21. import java.util.Date;
  22. /**
  23. * Created by CodeGenerator on 2022/11/02.
  24. */
  25. @Slf4j
  26. @Service
  27. @Transactional
  28. public class FlowServiceImpl extends AbstractService<Flow> implements FlowService {
  29. @Resource
  30. private FlowMapper cFlowMapper;
  31. @Resource
  32. private AccountService accountService;
  33. @Resource
  34. private AccountFlowService accountFlowService;
  35. @Resource
  36. private AccountFreezdService accountFreezdService;
  37. @Override
  38. public Result freeze(FreezdParam param) {
  39. try{
  40. Account account = accountService.getAccount(param.getUserId(),param.getAccountType());
  41. if (account == null){
  42. return Result.genFailResult("账号未找到");
  43. }
  44. if (account.getEffectiveBalance().subtract(param.getAmount()).compareTo(BigDecimal.ZERO) < 0){
  45. return Result.genFailResult("冻结金额不足");
  46. }
  47. Date today = DateUtil.date();
  48. Flow flow = Flow.builder().amount(param.getAmount()).bizType(param.getBizType())
  49. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  50. .debitAccount(account.getId()).creditAccount(account.getId())
  51. .bizId(param.getBizId()).type(4)
  52. .build();
  53. saveUseGeneratedKeys(flow);
  54. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  55. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  56. .bizNo(flow.getBizNo()).balance(account.getBalance()).freezeAmount(account.getFreezeAmount().add(param.getAmount()))
  57. .flowType(4).type(1).bizType(param.getBizType()).flowId(flow.getId()).build());
  58. AccountFreezd freezd = AccountFreezd.builder().accountId(account.getId()).bizId(flow.getId())
  59. .amount(param.getAmount()).createTime(today).unfreezeAmount(BigDecimal.ZERO)
  60. .updateTime(today).status(1).build();
  61. accountFreezdService.saveUseGeneratedKeys(freezd);
  62. return Result.genSuccessResult(freezd.getId());
  63. }catch (Exception e){
  64. log.error("冻结异常",e);
  65. return Result.genFailResult("冻结异常",e);
  66. }
  67. }
  68. @Override
  69. public Result unFreeze(Long freezdId) {
  70. AccountFreezd freezd = accountFreezdService.findById(freezdId);
  71. if (freezd == null){
  72. return Result.genFailResult("冻结记录未找到");
  73. }
  74. Flow oldFlow = findById(freezd.getBizId());
  75. if (oldFlow == null){
  76. return Result.genFailResult("冻结记录未找到");
  77. }
  78. Account account = accountService.findById(freezd.getAccountId());
  79. if (account == null){
  80. return Result.genFailResult("冻结账号未找到");
  81. }
  82. Date today = DateUtil.date();
  83. Flow flow = Flow.builder().amount(freezd.getAmount()).bizType(5001)
  84. .bizNo(oldFlow.getBizNo()).createTime(today).updateTime(today).transTime(today)
  85. .debitAccount(oldFlow.getDebitAccount()).creditAccount(oldFlow.getCreditAccount())
  86. .bizId(oldFlow.getBizId()).type(5)
  87. .build();
  88. saveUseGeneratedKeys(flow);
  89. accountService.deal(AccountFlow.builder().accountId(oldFlow.getDebitAccount()).amount(flow.getAmount())
  90. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(today)
  91. .bizNo(flow.getBizNo()).balance(account.getBalance()).freezeAmount(account.getFreezeAmount().subtract(oldFlow.getAmount()))
  92. .flowType(5).type(2).bizType(flow.getBizType()).flowId(flow.getId()).build());
  93. accountFreezdService.update(AccountFreezd.builder().id(freezdId).status(3).unfreezeAmount(oldFlow.getAmount()).build());
  94. return Result.genSuccessResult();
  95. }
  96. // @Override
  97. // public Result trans(TransParam param) {
  98. // switch (param.getBizType()){
  99. // case 1001:
  100. // RechargeParam p1 = BeanUtil.toBean(param,RechargeParam.class);
  101. // p1.setAccountId(param.getCreditAccount());
  102. // return recharge(p1);
  103. // case 2001:
  104. // FeeParam p2 = BeanUtil.toBean(param,FeeParam.class);
  105. // p2.setAccountId(param.getDebitAccount());
  106. // return fee(p2);
  107. // case 2002:
  108. // CommissionParam p3 = BeanUtil.toBean(param,CommissionParam.class);
  109. // p3.setAccountId(param.getCreditAccount());
  110. // return commission(p3);
  111. // }
  112. // return null;
  113. // }
  114. // @Override
  115. // public Result unFreezeAndTrans(UnFreezdAndTransParam param) {
  116. // unFreeze(param.getFreezdId());
  117. // if (CollUtil.isNotEmpty(param.getTrans())){
  118. // for (TransParam p: param.getTrans()) {
  119. // Result r = trans(p);
  120. // if (r == null || !StrUtil.equals(r.getCode() , "200")){
  121. // throw new ServiceException(ResultCode.INTERNAL_SERVER_ERROR);
  122. // }
  123. // }
  124. // }
  125. // return Result.genSuccessResult();
  126. // }
  127. @Override
  128. public Result recharge(RechargeParam param) {
  129. Account account = accountService.getAccount(param.getUserId(),1);
  130. if (account == null){
  131. return Result.genFailResult("账号未找到");
  132. }
  133. Account innerCapitalAccount = accountService.findById(MyConstants.INNER_CAPITAL);
  134. if (innerCapitalAccount == null){
  135. return Result.genFailResult("账号未找到");
  136. }
  137. Date today = DateUtil.date();
  138. Flow flow = Flow.builder().amount(param.getAmount()).bizType(param.getBizType())
  139. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  140. .debitAccount(MyConstants.INNER_CAPITAL).creditAccount(account.getId())
  141. .bizId(param.getBizId()).type(1)
  142. .build();
  143. saveUseGeneratedKeys(flow);
  144. //借 :平台资金银行xx元 内部户1(资产类:借方账户)+钱
  145. accountService.deal(AccountFlow.builder().accountId(MyConstants.INNER_CAPITAL).amount(flow.getAmount())
  146. .bizId(flow.getBizId()).aliases(innerCapitalAccount.getAliases()).transTime(param.getTransTime())
  147. .bizNo(flow.getBizNo()).balance(innerCapitalAccount.getBalance().add(flow.getAmount()))
  148. .freezeAmount(innerCapitalAccount.getFreezeAmount())
  149. .flowType(1).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  150. //贷 :客户资金账户xx元 客户账号(负债类:贷方账户)+钱
  151. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  152. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  153. .bizNo(flow.getBizNo()).balance(account.getBalance().add(flow.getAmount()))
  154. .freezeAmount(account.getFreezeAmount())
  155. .flowType(1).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  156. //充值返点
  157. Account innerRebateAccount = accountService.findById(MyConstants.INNER_REBATE);
  158. if (innerCapitalAccount == null){
  159. return Result.genFailResult("账号未找到");
  160. }
  161. flow = Flow.builder().amount(param.getDiscount()).bizType(10)
  162. .userId(param.getUserId())
  163. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  164. .debitAccount(MyConstants.INNER_REBATE).creditAccount(account.getId())
  165. .bizId(param.getBizId()).type(10)
  166. .build();
  167. saveUseGeneratedKeys(flow);
  168. //借 :平台资金银行xx元 内部户1(资产类:借方账户)+钱
  169. accountService.deal(AccountFlow.builder().accountId(MyConstants.INNER_REBATE).amount(flow.getAmount())
  170. .bizId(flow.getBizId()).aliases(innerRebateAccount.getAliases()).transTime(param.getTransTime())
  171. .bizNo(flow.getBizNo()).balance(innerRebateAccount.getBalance().add(flow.getAmount()))
  172. .freezeAmount(innerRebateAccount.getFreezeAmount())
  173. .flowType(1).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  174. //贷 :客户资金账户xx元 客户账号(负债类:贷方账户)+钱
  175. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  176. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  177. .bizNo(flow.getBizNo()).balance(account.getBalance().add(flow.getAmount()))
  178. .freezeAmount(account.getFreezeAmount())
  179. .flowType(1).type(2).bizType(10).flowId(flow.getId()).build());
  180. return Result.genSuccessResult();
  181. }
  182. @Override
  183. public Result pay(PayParam param) {
  184. Account account = accountService.getAccount(param.getUserId(),1);
  185. if (account == null){
  186. return Result.genFailResult("账号未找到");
  187. }
  188. Account innerIncomeAccount = accountService.findById(MyConstants.INNER_INCOME);
  189. if (innerIncomeAccount == null){
  190. return Result.genFailResult("账号未找到");
  191. }
  192. //借:个人账户钱包(贷) -500元
  193. //贷:平台主营收入(贷) +500元
  194. Date today = DateUtil.date();
  195. Flow flow = Flow.builder().amount(param.getAmount()).bizType(param.getBizType())
  196. .userId(param.getUserId())
  197. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  198. .debitAccount(account.getId()).creditAccount(MyConstants.INNER_INCOME).createUser(param.getUserId()+"")
  199. .bizId(param.getBizId()).type(6)
  200. .build();
  201. saveUseGeneratedKeys(flow);
  202. //借:个人账户钱包(贷) -500元
  203. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  204. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  205. .bizNo(flow.getBizNo()).balance(account.getBalance().subtract(flow.getAmount()))
  206. .freezeAmount(account.getFreezeAmount())
  207. .flowType(6).type(1).bizType(param.getBizType()).flowId(flow.getId()).build());
  208. //贷:平台主营收入(贷) +500元
  209. accountService.deal(AccountFlow.builder().accountId(MyConstants.INNER_INCOME).amount(flow.getAmount())
  210. .bizId(flow.getBizId()).aliases(innerIncomeAccount.getAliases()).transTime(param.getTransTime())
  211. .bizNo(flow.getBizNo()).balance(innerIncomeAccount.getBalance().add(flow.getAmount()))
  212. .freezeAmount(innerIncomeAccount.getFreezeAmount())
  213. .flowType(6).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  214. return Result.genSuccessResult();
  215. }
  216. @Override
  217. public Result refund(RefundParam param) {
  218. //借:主营支出-退款(借) +100元
  219. //贷:个人账户 (贷) +100元
  220. Account account = accountService.getAccount(param.getUserId(),1);
  221. if (account == null){
  222. return Result.genFailResult("账号未找到");
  223. }
  224. Account innerRefundAccount = accountService.findById(MyConstants.INNER_REFUND);
  225. if (innerRefundAccount == null){
  226. return Result.genFailResult("账号未找到");
  227. }
  228. Date today = DateUtil.date();
  229. Flow flow = Flow.builder().amount(param.getAmount()).bizType(param.getBizType())
  230. .userId(param.getUserId())
  231. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  232. .debitAccount(MyConstants.INNER_REFUND).creditAccount(account.getId())
  233. .bizId(param.getBizId()).type(9)
  234. .build();
  235. saveUseGeneratedKeys(flow);
  236. //借:主营支出-退款(借) +100元
  237. accountService.deal(AccountFlow.builder().accountId(MyConstants.INNER_REFUND).amount(flow.getAmount())
  238. .bizId(flow.getBizId()).aliases(innerRefundAccount.getAliases()).transTime(param.getTransTime())
  239. .bizNo(flow.getBizNo()).balance(innerRefundAccount.getBalance().add(flow.getAmount()))
  240. .freezeAmount(innerRefundAccount.getFreezeAmount())
  241. .flowType(7).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  242. //贷:个人账户(贷) +100元
  243. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  244. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  245. .bizNo(flow.getBizNo()).balance(account.getBalance().add(flow.getAmount()))
  246. .freezeAmount(account.getFreezeAmount())
  247. .flowType(7).type(2).bizType(param.getBizType()).flowId(flow.getId()).build());
  248. return Result.genSuccessResult();
  249. }
  250. @Override
  251. public Result withdraw(WithdrawParam param) {
  252. Account account = accountService.getAccount(param.getUserId(),param.getAccountType());
  253. if (account == null){
  254. return Result.genFailResult("账号未找到");
  255. }
  256. Account innerCapitalAccount = accountService.findById(MyConstants.INNER_CAPITAL);
  257. if (innerCapitalAccount == null){
  258. return Result.genFailResult("账号未找到");
  259. }
  260. Date today = DateUtil.date();
  261. Flow flow = Flow.builder().amount(param.getAmount()).bizType(param.getBizType())
  262. .userId(param.getUserId())
  263. .bizNo(param.getBizNo()).createTime(today).updateTime(today).transTime(param.getTransTime())
  264. .creditAccount(MyConstants.INNER_CAPITAL).debitAccount(account.getId())
  265. .bizId(param.getBizId()).type(3)
  266. .build();
  267. saveUseGeneratedKeys(flow);
  268. //借 :客户资金账户xx元 客户账号(负债类:贷方账户)-钱
  269. accountService.deal(AccountFlow.builder().accountId(account.getId()).amount(flow.getAmount())
  270. .bizId(flow.getBizId()).aliases(account.getAliases()).transTime(param.getTransTime())
  271. .bizNo(flow.getBizNo()).balance(account.getBalance().subtract(flow.getAmount()))
  272. .freezeAmount(account.getFreezeAmount())
  273. .flowType(3).type(1).bizType(param.getBizType()).flowId(flow.getId()).build());
  274. //贷 :资金应收-渠道款-银行xx元 内部户1(资产类:借方账户)-钱
  275. accountService.deal(AccountFlow.builder().accountId(MyConstants.INNER_CAPITAL).amount(flow.getAmount())
  276. .bizId(flow.getBizId()).aliases(innerCapitalAccount.getAliases()).transTime(param.getTransTime())
  277. .bizNo(flow.getBizNo()).balance(innerCapitalAccount.getBalance().subtract(flow.getAmount()))
  278. .freezeAmount(innerCapitalAccount.getFreezeAmount())
  279. .flowType(3).type(1).bizType(param.getBizType()).flowId(flow.getId()).build());
  280. return Result.genSuccessResult();
  281. }
  282. }