AccountDubboServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.txz.cif.dubbo.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.txz.cif.configurer.LocalUtil;
  8. import com.txz.cif.core.ServiceException;
  9. import com.txz.cif.dto.AccountDTO;
  10. import com.txz.cif.dto.Result;
  11. import com.txz.cif.dubbo.client.OperatingConfigDubboServiceClient;
  12. import com.txz.cif.enums.BizTypeEnum;
  13. import com.txz.cif.model.Account;
  14. import com.txz.cif.model.User;
  15. import com.txz.cif.param.*;
  16. import com.txz.cif.service.*;
  17. import com.txz.cif.web.para.RedEnvelopeParam;
  18. import com.txz.operating.dto.ConfigDTO;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.dubbo.config.annotation.DubboService;
  21. import javax.annotation.Resource;
  22. import java.math.BigDecimal;
  23. import java.math.RoundingMode;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. @Slf4j
  27. @DubboService
  28. public class AccountDubboServiceImpl implements AccountDubboService {
  29. @Resource
  30. private FlowService flowService;
  31. @Resource
  32. private AccountService accountService;
  33. @Resource
  34. private UserService userService;
  35. @Resource
  36. private RedEnvelopeService redEnvelopeService;
  37. @Resource
  38. private OperatingConfigDubboServiceClient operatingConfigDubboServiceClient;
  39. // @Override
  40. // public Result freeze(FreezdParam param) {
  41. // return flowService.freeze(param);
  42. // }
  43. //
  44. // @Override
  45. // public Result unFreeze(Long freezdId) {
  46. // return flowService.unFreeze(freezdId);
  47. // }
  48. @Override
  49. public Result createAccount(Long userId) {
  50. User user = userService.findById(userId);
  51. Account qb = Account.builder().userId(userId).createTime(DateUtil.date())
  52. .aliases("202").freezeAmount(BigDecimal.ZERO).balance(BigDecimal.ZERO)
  53. .type(1).beforeDayBalance(BigDecimal.ZERO).beforeDayTime(DateUtil.date())
  54. .direction("C").bizType(1).subjectType(2).remark("个人钱包账户").name(user.getName())
  55. .beforeDayInitBalance(BigDecimal.ZERO).version("1.0.0").totalInamount(BigDecimal.ZERO)
  56. .totalOutAmount(BigDecimal.ZERO)
  57. .build();
  58. Account yl = Account.builder().userId(userId).createTime(DateUtil.date())
  59. .aliases("202").freezeAmount(BigDecimal.ZERO).balance(BigDecimal.ZERO)
  60. .type(1).beforeDayBalance(BigDecimal.ZERO).beforeDayTime(DateUtil.date())
  61. .direction("C").bizType(2).subjectType(2).remark("个人收益账户").name(user.getName())
  62. .beforeDayInitBalance(BigDecimal.ZERO).version("1.0.0").totalInamount(BigDecimal.ZERO)
  63. .totalOutAmount(BigDecimal.ZERO)
  64. .build();
  65. List<Account> add = new ArrayList<>();
  66. add.add(qb);
  67. add.add(yl);
  68. accountService.save(add);
  69. return Result.genSuccessResult();
  70. }
  71. @Override
  72. public Result getWalletAccount(Long userId) {
  73. Account account = accountService.getAccount(userId, 1);
  74. if (account == null) {
  75. return Result.genFailResult(LocalUtil.get("not.found"));
  76. }
  77. AccountDTO dto = BeanUtil.toBean(account, AccountDTO.class);
  78. return Result.genSuccessResult(dto);
  79. }
  80. @Override
  81. public Result openGroup(OpenParam param) {
  82. if (param == null){
  83. return Result.genFailResult(LocalUtil.get("object.is.empty"));
  84. }
  85. if (param.getUserId() == null){
  86. return Result.genFailResult(LocalUtil.get("userid.is.empty"));
  87. }
  88. if (param.getAmount() == null){
  89. return Result.genFailResult(LocalUtil.get("amount.is.empty"));
  90. }
  91. // 支付
  92. // BizTypeEnum 类型 1001充值 2001提现 3001开团支付 3002参团支付 4001未成团退款 4002成团退款 5001开团红包收益 5002参团红包收益 5003签到红包收益 5004下级红包佣金 5005下下级红包佣金
  93. Result result = flowService.pay(PayParam.builder().bizNo(param.getBizNo())
  94. .amount(param.getAmount())
  95. .userId(param.getUserId())
  96. .bizId(param.getBizId())
  97. .transTime(param.getTransTime())
  98. .bizType(BizTypeEnum.OPEN_GROUP_PAY.getKey())
  99. .build());
  100. return result;
  101. }
  102. @Override
  103. public Result joinGroup(JoinParam param) {
  104. if (param == null){
  105. return Result.genFailResult(LocalUtil.get("object.is.empty"));
  106. }
  107. if (param.getUserId() == null){
  108. return Result.genFailResult(LocalUtil.get("userid.is.empty"));
  109. }
  110. if (param.getAmount() == null){
  111. return Result.genFailResult(LocalUtil.get("amount.is.empty"));
  112. }
  113. // 支付
  114. // 类型 1001充值 2001提现 3001开团支付 3002参团支付 4001未成团退款 4002成团退款 5001开团红包收益 5002参团红包收益 5003签到红包收益 5004下级红包佣金 5005下下级红包佣金
  115. Result result = flowService.pay(PayParam.builder().bizNo(param.getBizNo())
  116. .amount(param.getAmount())
  117. .bizId(param.getBizId())
  118. .userId(param.getUserId())
  119. .transTime(param.getTransTime())
  120. .bizType(BizTypeEnum.JOIN_GROUP_PAY.getKey())
  121. .build());
  122. return result;
  123. }
  124. @Override
  125. public Result cancelGroup(CancelParam param) {
  126. // 类型 1001充值 2001提现 3001开团支付 3002参团支付 4001未成团退款 4002成团退款 5001开团红包收益 5002参团红包收益 5003签到红包收益 5004下级红包佣金 5005下下级红包佣金
  127. for (Long userId : param.getUserIds()) {
  128. Result result = flowService.refund(RefundParam.builder()
  129. .transTime(param.getTransTime())
  130. .bizType(BizTypeEnum.FAIL_GROUP_REFUND.getKey()).bizNo(param.getBizNo())
  131. .bizId(param.getBizId())
  132. .amount(param.getAmount())
  133. .userId(userId)
  134. .build());
  135. if (!StrUtil.equals("200", result.getCode())) {
  136. throw new ServiceException();
  137. }
  138. }
  139. return Result.genSuccessResult();
  140. }
  141. @Override
  142. public Result accomplishGroup(AccomplishParam param) {
  143. log.info("accomplishGroup param :"+ JSONObject.toJSONString(param));
  144. // 类型 1001充值 2001提现 3001开团支付 3002参团支付 4001未成团退款 4002成团退款 5001开团红包收益 5002参团红包收益 5003签到红包收益 5004下级红包佣金 5005下下级红包佣金
  145. for (OrderParam orderParam : param.getUserIds()) {
  146. Result result = flowService.refund(RefundParam.builder()
  147. .transTime(param.getTransTime())
  148. .bizType(BizTypeEnum.SUCCESS_GROUP_REFUND.getKey()).bizNo(param.getBizNo())
  149. .bizId(param.getBizId())
  150. .amount(param.getAmount())
  151. .userId(orderParam.getUserId())
  152. .build());
  153. if (!StrUtil.equals("200", result.getCode())) {
  154. throw new ServiceException();
  155. }
  156. }
  157. if (param.getOpenGroupUserId() != null) {
  158. log.info("param.getOpenGroupUserId() :"+ param.getOpenGroupUserId());
  159. // 计算开团红包金额
  160. com.txz.operating.result.Result<ConfigDTO> openRedEnvelopeRate = operatingConfigDubboServiceClient.getConfigByCode("open_red_envelope_rate");
  161. log.info("operatingConfigDubboServiceClient.getConfigByCode openRedEnvelopeRate:"+ JSONObject.toJSONString(openRedEnvelopeRate));
  162. String rate = openRedEnvelopeRate.getData().getValueInfo();
  163. BigDecimal amount = param.getAmount().multiply(new BigDecimal(rate)).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN);
  164. // 开团红包
  165. Result result1 = redEnvelopeService.addRedEnvelope(RedEnvelopeParam.builder()
  166. .amount(amount).bizType(BizTypeEnum.OPEN_GROUP_RED_ENVELOPE.getKey()).orderNo(param.getBizNo())
  167. .userIds(CollUtil.newArrayList(OrderParam.builder().userId(param.getOpenGroupUserId()).orderNo(param.getOpenOrderNo()).build()))
  168. .transTime(param.getTransTime())
  169. .build());
  170. }
  171. // 计算参团红包金额
  172. for (int i = param.getUserIds().size() -1; i >=0 ; i--) {
  173. OrderParam p = param.getUserIds().get(i);
  174. if (p.getUserId().compareTo(param.getOpenGroupUserId()) == 0){
  175. param.getUserIds().remove(i);
  176. }
  177. }
  178. if (param.getWinnerUserId().compareTo(param.getOpenGroupUserId()) != 0){
  179. param.getUserIds().add(OrderParam.builder().orderNo(param.getWinnerOrderNo()).userId(param.getWinnerUserId()).build());
  180. }
  181. com.txz.operating.result.Result<ConfigDTO> openRedEnvelopeRate = operatingConfigDubboServiceClient.getConfigByCode("join_red_envelope_rate");
  182. log.info("operatingConfigDubboServiceClient.getConfigByCode2 openRedEnvelopeRate:"+ JSONObject.toJSONString(openRedEnvelopeRate));
  183. String rate = openRedEnvelopeRate.getData().getValueInfo();
  184. BigDecimal amount = param.getAmount().multiply(new BigDecimal(rate)).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN);
  185. // 参团红包
  186. if (CollUtil.isNotEmpty(param.getUserIds())){
  187. Result result1 = redEnvelopeService.addRedEnvelope(RedEnvelopeParam.builder()
  188. .amount(amount).bizType(BizTypeEnum.JOIN_GROUP_RED_ENVELOPE.getKey()).orderNo(param.getBizNo())
  189. .userIds(param.getUserIds())
  190. .transTime(param.getTransTime())
  191. .build());
  192. }
  193. log.info("accomplishGroup end param :"+ JSONObject.toJSONString(param));
  194. return Result.genSuccessResult();
  195. }
  196. /**
  197. * 类型 1001充值 2001提现 3001开团支付 3002参团支付 4001未成团退款 4002成团退款 5001开团红包收益 5002参团红包收益 5003签到红包收益 5004下级红包佣金 5005下下级红包佣金
  198. *
  199. * @param param
  200. *
  201. * @return
  202. */
  203. @Override
  204. public Result addRedEnvelope(SignRedEnvelopeParam param) {
  205. RedEnvelopeParam p = BeanUtil.toBean(param, RedEnvelopeParam.class);
  206. p.setUserIds(CollUtil.newArrayList(OrderParam.builder().userId(param.getUserId()).orderNo(param.getOrderNo()).build()));
  207. if (param.getBizType() == BizTypeEnum.SIGN_RED_ENVELOPE || param.getBizType() == BizTypeEnum.PROMOTION_COMMISSION) {
  208. p.setBizType(param.getBizType().getKey());
  209. } else {
  210. return Result.genFailResult(LocalUtil.get("unsupported.type"));
  211. }
  212. return redEnvelopeService.addRedEnvelope(p);
  213. }
  214. @Override
  215. public Result recharge(RechargeParam param) {
  216. if (param == null) {
  217. return Result.genFailResult(LocalUtil.get("parameter.is.empty"));
  218. }
  219. if (param.getUserId() == null) {
  220. return Result.genFailResult(LocalUtil.get("parameter.account.id.is.empty"));
  221. }
  222. if (param.getAmount() == null) {
  223. return Result.genFailResult(LocalUtil.get("parameter.amount.is.empty"));
  224. }
  225. param.setBizType(BizTypeEnum.RECHARGE.getKey());
  226. if (param.getTransTime() == null) {
  227. param.setTransTime(DateUtil.date());
  228. }
  229. Result result = flowService.recharge(param);
  230. return result;
  231. }
  232. @Override
  233. public Result withdraw(WithdrawParam param) {
  234. param.setBizType(BizTypeEnum.WITHDRAW.getKey());
  235. return flowService.withdraw(param);
  236. }
  237. }