You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

260 lines
10 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. package com.example.demo.serviceImpl.bean;
  2. import com.example.demo.Util.BaseDES2;
  3. import com.example.demo.domain.DTO.BeanConsumeCartDTO;
  4. import com.example.demo.domain.vo.bean.*;
  5. import com.example.demo.domain.vo.coin.*;
  6. import com.example.demo.mapper.bean.BeanConsumeMapper;
  7. import com.example.demo.mapper.bean.BeanUserMapper;
  8. import com.example.demo.mapper.coin.AdminMapper;
  9. import com.example.demo.mapper.coin.BeanRechargeMapper1;
  10. import com.example.demo.mapper.coin.RoleMapper;
  11. import com.example.demo.mapper.coin.UserMapper;
  12. import com.example.demo.mapper.live.LiveMapper;
  13. import com.example.demo.service.bean.BeanConsumeService;
  14. import com.github.pagehelper.PageHelper;
  15. import com.github.pagehelper.PageInfo;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.http.HttpEntity;
  19. import org.springframework.http.HttpHeaders;
  20. import org.springframework.http.MediaType;
  21. import org.springframework.http.ResponseEntity;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import org.springframework.web.client.RestClientException;
  25. import org.springframework.web.client.RestTemplate;
  26. import org.springframework.web.util.UriComponentsBuilder;
  27. import java.util.HashMap;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.UUID;
  31. /**
  32. * @program: gold-java
  33. * @ClassName BeanConsumeServiceImpl
  34. * @description:
  35. * @author: Ethan
  36. * @create: 202507-30 11:53
  37. * @Version 1.0
  38. **/
  39. @Service
  40. public class BeanConsumeServiceImpl implements BeanConsumeService {
  41. @Autowired
  42. private BeanConsumeMapper beanConsumeMapper;
  43. @Autowired
  44. private LiveMapper liveMapper;
  45. @Autowired
  46. private BeanRechargeMapper1 beanRechargeMapper1;
  47. @Autowired
  48. private RoleMapper roleMapper;
  49. @Autowired
  50. private RestTemplate restTemplate;
  51. // 构建接口URL及参数
  52. @Value("${bean.consume.url}")
  53. String apiUrl;
  54. @Autowired
  55. private BeanUserMapper beanUserMapper;
  56. //获取消费用户分部
  57. @Override
  58. public List<String> getDept() {
  59. List<String> deptList = beanConsumeMapper.getDept();
  60. return deptList;
  61. }
  62. //获取直播消费客户分部
  63. @Override
  64. public List<String> getLiveDept() {
  65. List<String> liveDeptList = liveMapper.getDept();
  66. return liveDeptList;
  67. }
  68. //减少金豆
  69. @Transactional
  70. @Override
  71. public Result reduce(BeanConsume consume) {
  72. // 验证精网号是否有效
  73. if (consume.getJwcode() == null || consume.getJwcode().isEmpty()) {
  74. return Result.error("精网号不能为空");
  75. }
  76. // 验证免费豆和永久豆是否为非负数
  77. if (consume.getFreeBean() < 0 || consume.getPermanentBean() < 0) {
  78. return Result.error("免费豆和永久豆不能为负数");
  79. }
  80. // 验证免费豆和永久豆是否为非负数
  81. if (consume.getFreeBean() > 999999 || consume.getPermanentBean() > 999999) {
  82. return Result.error("免费豆和永久豆不能超过999999");
  83. }
  84. // 验证免费豆和永久豆是否均为0
  85. if (consume.getFreeBean() == 0 && consume.getPermanentBean() == 0) {
  86. return Result.error("免费豆和永久豆不能同时为0");
  87. }
  88. //获取用户当前余额
  89. BeanUserCard user= beanUserMapper.userCard(consume.getJwcode());
  90. if (user.getFreeBean() < consume.getFreeBean()) {
  91. return Result.error("用户免费金豆余额不足");
  92. }
  93. if (user.getPermanentBean() < consume.getPermanentBean()) {
  94. return Result.error("用户永久金豆余额不足");
  95. }
  96. // 验证备注是否为空
  97. if (consume.getRemark() == null || consume.getRemark().isEmpty()) {
  98. return Result.error("备注不能为空");
  99. }
  100. String jwcode = consume.getJwcode();
  101. //String jwcode = "1bf7194c2dc63c45cd834d35e38faa71";
  102. try {
  103. BaseDES2 d = new BaseDES2();
  104. jwcode = d.encrypt(jwcode);
  105. } catch (Exception e) {
  106. return Result.error("加密失败");
  107. }
  108. String content = consume.getRemark(); // 备注作为content参数
  109. // 2. 创建请求参数对象(使用Map或自定义实体类)
  110. Map<String, String> params = new HashMap<>();
  111. params.put("jwcode", jwcode);
  112. int total = consume.getPermanentBean() + consume.getFreeBean();
  113. params.put("total", String.valueOf(total));
  114. params.put("buy", consume.getPermanentBean().toString());
  115. params.put("free", consume.getFreeBean().toString());
  116. params.put("content", content);
  117. // 3. 构建请求头,指定Content-Type为JSON
  118. HttpHeaders headers = new HttpHeaders();
  119. headers.setContentType(MediaType.APPLICATION_JSON); // 关键:设置为JSON格式
  120. // 4. 构建请求实体(参数+头信息)
  121. HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(params, headers);
  122. try {
  123. // 5. 发送POST请求
  124. ResponseEntity<String> response = restTemplate.postForEntity(
  125. apiUrl,
  126. requestEntity,
  127. String.class
  128. );
  129. System.out.println("请求参数:" + params);
  130. System.out.println("响应状态码:" + response.getStatusCodeValue());
  131. System.out.println("响应内容:" + response.getBody());
  132. if (!response.getStatusCode().is2xxSuccessful()) {
  133. return Result.error("远程接口接口调用失败,状态码:" + response.getStatusCodeValue() + ",响应:" + response.getBody());
  134. }
  135. } catch (RestClientException e) {
  136. e.printStackTrace();
  137. return Result.error("请求发送失败:" + e.getMessage());
  138. }
  139. return Result.success();
  140. }
  141. //筛选查询直播消费
  142. @Override
  143. public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
  144. String channel=roleMapper.getChannel(beanConsumeLive.getRoleId());
  145. if (channel==null){
  146. return "角色频道有误";
  147. }
  148. if (!channel.equals("全部")){
  149. beanConsumeLive.setLiveChannel(channel);
  150. }
  151. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  152. List<BeanConsumeLive> beanConsumeLives = liveMapper.selectLiveBy(beanConsumeLive);
  153. //int total = liveMapper.selectLiveCount(beanConsumeLive);
  154. return new PageInfo<>(beanConsumeLives);
  155. }
  156. //筛选查询铁粉消费
  157. @Override
  158. public Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan) {
  159. String channel=roleMapper.getChannel(beanConsumeFan.getRoleId());
  160. if (channel==null){
  161. return "角色频道有误";
  162. }
  163. if (!channel.equals("全部")){
  164. beanConsumeFan.setChannel(channel);
  165. }
  166. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  167. List<BeanConsumeFan> beanConsumeFans = beanConsumeMapper.selectFanBy(beanConsumeFan);
  168. return new PageInfo<>(beanConsumeFans);
  169. }
  170. //筛选查询文章消费
  171. @Override
  172. public Object selectArticleBy(Integer pageNum, Integer pageSize, BeanConsumeArticle beanConsumeArticle) {
  173. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  174. List<BeanConsumeArticle> beanConsumeArticles = beanConsumeMapper.selectArticleBy(beanConsumeArticle);
  175. return new PageInfo<>(beanConsumeArticles);
  176. }
  177. //筛选查询小黄车消费
  178. @Override
  179. public Object selectCartBy(Integer pageNum, Integer pageSize, BeanConsumeCartDTO beanConsumeCartDTO) {
  180. String channel=roleMapper.getChannel(beanConsumeCartDTO.getRoleId());
  181. if (channel==null){
  182. return "角色频道有误";
  183. }
  184. if (!channel.equals("全部")){
  185. beanConsumeCartDTO.setSourceName(channel);
  186. }
  187. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  188. List<BeanConsumeCartVo> beanConsumeCarts = beanRechargeMapper1.selectCartBy(beanConsumeCartDTO);
  189. return new PageInfo<>(beanConsumeCarts);
  190. }
  191. @Override
  192. public BeanConsumeGold sumConsumeGold(Page page) {
  193. BeanConsumeGold gold = new BeanConsumeGold();
  194. Integer payType = page.getPayType();
  195. if (payType==1) {
  196. //设置频道权限
  197. String channel=roleMapper.getChannel(page.getBeanConsumeLive().getRoleId());
  198. if (channel==null){
  199. page.getBeanConsumeLive().setLiveChannel(null);
  200. }
  201. if (!channel.equals("全部")){
  202. page.getBeanConsumeLive().setLiveChannel(channel);
  203. }
  204. //直播消费合计
  205. gold = liveMapper.selectSumLiveBy(page.getBeanConsumeLive());
  206. }else if (payType==7) {
  207. //设置频道权限
  208. String channel=roleMapper.getChannel(page.getBeanConsumeFan().getRoleId());
  209. if (channel==null){
  210. page.getBeanConsumeFan().setChannel(null);
  211. }
  212. if (!channel.equals("全部")){
  213. page.getBeanConsumeFan().setChannel(channel);
  214. }
  215. //充值消费合计
  216. gold = beanConsumeMapper.selectSumFansBy(page.getBeanConsumeFan());
  217. }else if (payType==8) {
  218. //文章消费合计
  219. gold = beanConsumeMapper.selectSumArticleBy(page.getBeanConsumeArticle());
  220. }
  221. return gold;
  222. }
  223. //查询直播礼物
  224. @Override
  225. public List<String> getLiveGift() {
  226. return liveMapper.getLiveGift();
  227. }
  228. //查询直播全部频道
  229. @Override
  230. public List<String> getLiveChannel() {
  231. return liveMapper.getLiveChannel();
  232. }
  233. }