PartnerExtractHistoryController.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com.ydtech.modules.partner.controller;
  2. import java.math.BigDecimal;
  3. import java.util.*;
  4. import java.util.stream.Collectors;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.ydtech.core.page.HttpResult;
  8. import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
  9. import com.ydtech.modules.admin.model.SysPartnerAccount;
  10. import com.ydtech.modules.base.controller.BaseController;
  11. import com.ydtech.modules.base.model.dto.PageDto;
  12. import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
  13. import com.ydtech.modules.partner.model.PartnerExtractHistory;
  14. import com.ydtech.modules.partner.model.PartnerPartnerAccount;
  15. import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
  16. import com.ydtech.modules.partner.service.PartnerExtractHistoryService;
  17. import com.ydtech.modules.partner.service.PartnerRuleService;
  18. import io.swagger.annotations.Api;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.web.bind.annotation.*;
  24. @Api(tags = "提现记录")
  25. @Slf4j
  26. @RestController
  27. @RequestMapping("/partnerExtractHistory")
  28. public class PartnerExtractHistoryController extends BaseController {
  29. @Autowired
  30. private PartnerExtractHistoryService partnerExtractHistoryService;
  31. @Autowired
  32. private SysPartnerAccountMapper sysPartnerAccountMapper;
  33. @Autowired
  34. private PartnerPartnerAccountMapper partnerPartnerAccountMapper;
  35. @Autowired
  36. private PartnerRuleService ruleService;
  37. @PostMapping("/query")
  38. public HttpResult query(@RequestBody PartnerExtractHistory extractHistory){
  39. // if (StringUtils.isEmpty(extractHistory.getGrade())){
  40. // return HttpResult.error("用户等级不能为空");
  41. // }
  42. if (extractHistory.getPageNum() == null || extractHistory.getPageSize() == null){
  43. return HttpResult.error("分页参数不能为空");
  44. }
  45. PageDto pageDto = new PageDto();
  46. pageDto.setPageNum(extractHistory.getPageNum());
  47. pageDto.setPageSize(extractHistory.getPageSize());
  48. extractHistory.setPage(buildPageRequest(pageDto));
  49. extractHistory.setUserId(getUserId());
  50. return HttpResult.ok(partnerExtractHistoryService.queryPage(extractHistory));
  51. }
  52. /**
  53. * 提现
  54. * @param extractHistory
  55. * @return
  56. */
  57. @PostMapping("/extractRecords")
  58. @Transactional(rollbackFor = Exception.class)
  59. public HttpResult extractRecords(@RequestBody PartnerExtractHistory extractHistory){
  60. if (StringUtils.isEmpty(extractHistory.getGrade())){
  61. return HttpResult.error("用户等级不能为空");
  62. }
  63. if (null != extractHistory.getAmount() &&extractHistory.getAmount().compareTo(new BigDecimal("0")) <= 0){
  64. return HttpResult.error("提现金额不能小于0");
  65. }
  66. String userId = getUserId();
  67. PartnerPartnerAccount partnerAccount = partnerPartnerAccountMapper.selectOne(new LambdaQueryWrapper<PartnerPartnerAccount>()
  68. .eq(PartnerPartnerAccount::getUserId, userId)
  69. .eq(PartnerPartnerAccount::getGrade, extractHistory.getGrade()));
  70. if (null == partnerAccount){
  71. return HttpResult.error("账号余额不足");
  72. }
  73. if (partnerAccount.getCashFee().compareTo(extractHistory.getAmount()) == -1){
  74. return HttpResult.error("账号余额不足");
  75. }
  76. extractHistory.setUserId(userId);
  77. boolean save = partnerExtractHistoryService.save(extractHistory);
  78. if (save){
  79. SysPartnerAccount account = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
  80. .eq(SysPartnerAccount::getUserId,userId));
  81. if (account != null){
  82. account.setExtractFee(account.getExtractFee().add(extractHistory.getAmount()));
  83. account.setCashFee(account.getCashFee().add(extractHistory.getAmount()));
  84. sysPartnerAccountMapper.updateById(account);
  85. }else {
  86. account = new SysPartnerAccount();
  87. account.setUserId(userId);
  88. account.setExtractFee(extractHistory.getAmount());
  89. account.setHistoryFee(new BigDecimal("0"));
  90. account.setCashFee(extractHistory.getAmount());
  91. account.setCreateTime(new Date());
  92. sysPartnerAccountMapper.insert( account);
  93. }
  94. partnerAccount.setHistoryFee(partnerAccount.getHistoryFee().add(extractHistory.getAmount()));
  95. partnerAccount.setCashFee(partnerAccount.getCashFee().subtract(extractHistory.getAmount()));
  96. partnerPartnerAccountMapper.updateById(partnerAccount);
  97. }
  98. return HttpResult.ok(save ? "提取成功" : "提取失败");
  99. }
  100. /**
  101. * 未转入的金额
  102. * @return
  103. */
  104. @GetMapping("/queryExtractRecords")
  105. public HttpResult queryExtractRecords(){
  106. List<PartnerPartnerAccount> partnerPartnerAccounts = partnerPartnerAccountMapper.selectList(new LambdaQueryWrapper<PartnerPartnerAccount>()
  107. .eq(PartnerPartnerAccount::getUserId,getUserId()));
  108. List<Map.Entry<Integer, BigDecimal>> collect = partnerPartnerAccounts.stream()
  109. .collect(Collectors.groupingBy(
  110. PartnerPartnerAccount::getGrade,
  111. Collectors.reducing(
  112. BigDecimal.ZERO,
  113. PartnerPartnerAccount::getCashFee,
  114. BigDecimal::add
  115. )
  116. ))
  117. .entrySet().stream()
  118. .sorted(Map.Entry.comparingByKey())
  119. .collect(Collectors.toList());
  120. List<JSONObject> list = new ArrayList<>();
  121. for (Map.Entry<Integer, BigDecimal> entry : collect) {
  122. JSONObject jsonObject = new JSONObject();
  123. jsonObject.put("grade", entry.getKey().toString());
  124. jsonObject.put("cashFee", entry.getValue().toString());
  125. PartnerRuleEntity ruleEntity = ruleService.selectByGrade(entry.getKey().toString());
  126. jsonObject.put("gradeName", ruleEntity.getGradeName());
  127. list.add(jsonObject);
  128. }
  129. HashMap<String, Object> map = new HashMap<>();
  130. map.put("list", list);
  131. map.put("total", partnerPartnerAccounts.stream()
  132. .map(PartnerPartnerAccount::getCashFee)
  133. .filter(Objects::nonNull)
  134. .reduce(BigDecimal.ZERO, BigDecimal::add));
  135. return HttpResult.ok(map);
  136. }
  137. }