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.

230 lines
8.6 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.Util.JWTUtil;
  3. import com.example.demo.Util.RedisUtil;
  4. import com.example.demo.domain.DTO.GoldDetailDTO;
  5. import com.example.demo.domain.DTO.GoldUserDTO;
  6. import com.example.demo.domain.entity.Admin;
  7. import com.example.demo.domain.entity.User;
  8. import com.example.demo.domain.vo.*;
  9. import com.example.demo.exception.SystemException;
  10. import com.example.demo.mapper.GoldDetailMapper;
  11. import com.example.demo.service.GoldDetailService;
  12. import com.fasterxml.jackson.databind.ObjectMapper;
  13. import com.github.pagehelper.PageHelper;
  14. import com.github.pagehelper.PageInfo;
  15. import jakarta.servlet.http.HttpServletRequest;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.security.core.userdetails.UserDetails;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.web.context.request.RequestContextHolder;
  20. import org.springframework.web.context.request.ServletRequestAttributes;
  21. import java.io.IOException;
  22. import java.time.LocalDateTime;
  23. import java.time.format.DateTimeFormatter;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. /**
  28. * @program: GOLD
  29. * @ClassName GoldDetailServiceImpl
  30. * @description:
  31. * @author: huangqizhen
  32. * @create: 202506-23 13:44
  33. * @Version 1.0
  34. **/
  35. @Service
  36. public class GoldDetailServiceImpl implements GoldDetailService {
  37. @Autowired
  38. private GoldDetailMapper goldDetailMapper;
  39. @Autowired
  40. private RedisUtil redisUtil;
  41. @Override
  42. public PageInfo<GoldDetail> getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail) {
  43. PageHelper.startPage(pageNum, pageSize);
  44. List<GoldDetail> list = goldDetailMapper.getGoldDetail(goldDetail);
  45. return new PageInfo<>(list);
  46. }
  47. @Override
  48. public Total getTotal(GoldDetail goldDetail) {
  49. return goldDetailMapper.getTotal(goldDetail);
  50. }
  51. @Override
  52. public PageInfo<User> getGold(Integer pageNum, Integer pageSize, User user) {
  53. PageHelper.startPage(pageNum, pageSize);
  54. List<User> list = goldDetailMapper.getGold(user);
  55. return new PageInfo<>(list);
  56. }
  57. @Override
  58. public Total GoldTotal(User user) {
  59. return goldDetailMapper.GoldTotal(user);
  60. }
  61. /*
  62. 用户金币合计数
  63. */
  64. @Override
  65. public Gold sumGold(Integer pageNum, Integer pageSize, GoldDetail goldDetail) {
  66. Gold gold = new Gold();
  67. //获取订单列表
  68. PageHelper.startPage(1, 500000);
  69. List<GoldDetail> goldDetails = goldDetailMapper.getGoldDetail(goldDetail);
  70. // List<GoldDetail> goldDetails=goldDetailMapper.getGoldDetail1(1,500000,goldDetail);
  71. // 初始化累加器
  72. int totalNum=0;
  73. int permanentGoldSum = 0;
  74. int freeGoldSum = 0;
  75. int taskGoldSum = 0;
  76. // 遍历消费记录并累加金币
  77. for (GoldDetail detail : goldDetails) {
  78. // 累加永久金币
  79. if (detail.getPermanentGold() != null) {
  80. permanentGoldSum += detail.getPermanentGold();
  81. }
  82. // 累加免费金币
  83. if (detail.getFreeJune() != null||detail.getFreeDecember() != null) {
  84. freeGoldSum = freeGoldSum+detail.getFreeJune()+detail.getFreeDecember();
  85. }
  86. // 累加任务金币
  87. if (detail.getTaskGold() != null) {
  88. taskGoldSum += detail.getTaskGold();
  89. }
  90. // 每遍历一条记录,总条数加1
  91. totalNum++;
  92. }
  93. // 将累加结果设置到Gold对象
  94. gold.setPermanentGolds(permanentGoldSum);
  95. gold.setFreeGolds(freeGoldSum);
  96. gold.setTotalNum(totalNum);
  97. gold.setTaskGolds(taskGoldSum);
  98. gold.setSumGolds(permanentGoldSum+freeGoldSum+taskGoldSum);
  99. return gold;
  100. }
  101. @Override
  102. public Result addExportRecord(GoldDetailDTO dto) {
  103. // 获取操作者 jwcode
  104. HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  105. String token = request.getHeader("token");
  106. try {
  107. UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  108. dto.setAccount(Integer.valueOf(token1.getUsername()));
  109. } catch (Exception e) {
  110. throw new RuntimeException(e.getMessage());
  111. }
  112. // 生成文件名
  113. String fileName = String.format("%s_%s_%s.xlsx",
  114. "客户金币明细",
  115. "操作人",
  116. LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
  117. System.out.println(fileName);
  118. dto.setUrl("");
  119. dto.setFileName(fileName);
  120. dto.setDataNum(0);
  121. try{
  122. // 调用方式
  123. GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
  124. goldDetailMapper.insertExportRecord(
  125. idHolder, // 用于接收主键
  126. dto.getAccount(),
  127. dto.getType(),
  128. dto.getState(),
  129. dto.getUrl(),
  130. dto.getFileName(),
  131. dto.getDataNum()
  132. );
  133. // 获取主键
  134. Long recordId = idHolder.getId();
  135. // 2. 构造完整的 JSON 数据(包含所有请求参数)
  136. Map<String, Object> exportData = new HashMap<>();
  137. exportData.put("recordId", recordId);
  138. // 手动构造请求数据(避免 toString() 只返回部分字段)
  139. Map<String, Object> requestData = new HashMap<>();
  140. requestData.put("text", dto.getText());
  141. requestData.put("sort", dto.getSort());
  142. requestData.put("field", dto.getField());
  143. requestData.put("deptId", dto.getDeptid());
  144. exportData.put("requestData", requestData);
  145. // 3. 发送到 Redis 消息队列
  146. String jsonData = new ObjectMapper().writeValueAsString(exportData);
  147. redisUtil.sendMessage("hwgold:queue:export_queue", jsonData);
  148. }catch (Exception e){
  149. e.printStackTrace();
  150. throw new SystemException("导出数据异常,请稍后重试", e);
  151. }
  152. return Result.success();
  153. }
  154. @Override
  155. public Result addExportRecordGold(GoldUserDTO dto) {
  156. // 获取操作者 jwcode
  157. HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  158. String token = request.getHeader("token");
  159. try {
  160. UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  161. dto.setAccount(Integer.valueOf(token1.getUsername()));
  162. } catch (Exception e) {
  163. throw new RuntimeException(e.getMessage());
  164. }
  165. // 生成文件名
  166. String fileName = String.format("%s_%s_%s.xlsx",
  167. "金币余额明细",
  168. "操作人",
  169. LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
  170. System.out.println(fileName);
  171. dto.setUrl("");
  172. dto.setFileName(fileName);
  173. dto.setDataNum(0);
  174. try{
  175. // 调用方式
  176. GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder();
  177. goldDetailMapper.insertExportRecord(
  178. idHolder, // 用于接收主键
  179. dto.getAccount(),
  180. dto.getType(),
  181. dto.getState(),
  182. dto.getUrl(),
  183. dto.getFileName(),
  184. dto.getDataNum()
  185. );
  186. // 获取主键
  187. Long recordId = idHolder.getId();
  188. // 2. 构造完整的 JSON 数据(包含所有请求参数)
  189. Map<String, Object> exportData = new HashMap<>();
  190. exportData.put("recordId", recordId);
  191. // 手动构造请求数据(避免 toString() 只返回部分字段)
  192. Map<String, Object> requestData = new HashMap<>();
  193. requestData.put("text", dto.getText());
  194. requestData.put("sort", dto.getSort());
  195. requestData.put("field", dto.getField());
  196. requestData.put("deptId", dto.getDeptid());
  197. exportData.put("requestData", requestData);
  198. // 3. 发送到 Redis 消息队列
  199. String jsonData = new ObjectMapper().writeValueAsString(exportData);
  200. redisUtil.sendMessage("gold:queue:export_queue", jsonData);
  201. }catch (Exception e){
  202. e.printStackTrace();
  203. throw new SystemException("导出数据异常,请稍后重试", e);
  204. }
  205. return Result.success();
  206. }
  207. }