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.

313 lines
13 KiB

6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
  1. package com.example.demo.controller.coin;
  2. import com.example.demo.Util.JWTUtil;
  3. import com.example.demo.Util.LanguageTranslationUtil;
  4. import com.example.demo.config.interfac.Log;
  5. import com.example.demo.domain.entity.Admin;
  6. import com.example.demo.domain.vo.coin.ConsumeUser;
  7. import com.example.demo.domain.vo.coin.Gold;
  8. import com.example.demo.domain.vo.coin.Page;
  9. import com.example.demo.domain.vo.coin.Result;
  10. import com.example.demo.service.coin.ConsumeService;
  11. import com.example.demo.service.coin.TranslationService;
  12. import com.github.pagehelper.PageInfo;
  13. import jakarta.servlet.http.HttpServletRequest;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.util.ObjectUtils;
  19. import org.springframework.web.bind.annotation.*;
  20. import org.springframework.web.context.request.RequestContextHolder;
  21. import org.springframework.web.context.request.ServletRequestAttributes;
  22. import java.util.Arrays;
  23. import java.util.List;
  24. /**
  25. * @program: gold-java
  26. * @ClassName ConsumeController
  27. * @description:消费模块
  28. * @author: Double
  29. * @create: 202506-23 13:06
  30. * @Version 1.0
  31. **/
  32. @RestController
  33. @RequestMapping("/consume")
  34. @RequiredArgsConstructor
  35. @Slf4j
  36. @CrossOrigin
  37. public class ConsumeController {
  38. @Autowired
  39. private ConsumeService consumeService;
  40. // 注入多语言转换工具类
  41. @Autowired
  42. private LanguageTranslationUtil languageTranslationUtil;
  43. @Autowired
  44. private TranslationService translationService;
  45. //消耗明细
  46. @Log("查看所有消耗明细")
  47. @PostMapping("/selectAll")
  48. public Result selectAll(@RequestBody Page page) {
  49. try {
  50. //页码校验
  51. if (ObjectUtils.isEmpty(page.getPageNum())) {
  52. return Result.error("页码数为空!");
  53. }
  54. //页面大小校验
  55. if (ObjectUtils.isEmpty(page.getPageSize())) {
  56. return Result.error("页大小为空!");
  57. } else {
  58. //解token权限
  59. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  60. String token = request.getHeader("token");
  61. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  62. if (admin != null) {
  63. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  64. page.getConsumeUser().setMarkets(list);
  65. }
  66. else{
  67. return Result.error("角色为空");
  68. }
  69. return Result.success(consumeService.selectAll(page.getPageNum(), page.getPageSize(),page.getConsumeUser()));
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. return Result.error("请检查筛选数据的格式");
  74. }
  75. }
  76. @Log("筛选查询消耗明细")
  77. @PostMapping("/selectBy")
  78. public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  79. try {
  80. //页码校验
  81. if (ObjectUtils.isEmpty(page.getPageNum())) {
  82. return Result.error("页码数为空!");
  83. }
  84. //页面大小校验
  85. if (ObjectUtils.isEmpty(page.getPageSize())) {
  86. return Result.error("页大小为空!");
  87. } else {
  88. // 解析语言参数,提取语言代码
  89. String languageCode = parseLanguageCode(lang);
  90. // 如果不是中文,则尝试将查询条件中的翻译文本转换为中文简体
  91. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  92. convertTranslatedFieldsToChinese(page.getConsumeUser(), languageCode);
  93. }
  94. //解token权限
  95. if(page.getConsumeUser().getMarkets()==null||page.getConsumeUser().getMarkets().isEmpty()) {
  96. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  97. String token = request.getHeader("token");
  98. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  99. if (admin != null) {
  100. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  101. page.getConsumeUser().setMarkets(list);
  102. }
  103. else{
  104. return Result.error("角色为空");
  105. }
  106. }
  107. Result result = Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
  108. // 对返回结果进行多语言转换
  109. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  110. PageInfo<ConsumeUser> pageInfo = (PageInfo<ConsumeUser>) result.getData();
  111. translateConsumeUsers(pageInfo, lang);
  112. }
  113. return result;
  114. }
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. return Result.error("请检查筛选数据的格式");
  118. }
  119. }
  120. //消耗金币统计
  121. @Log("消耗金币合计数统计")
  122. @PostMapping("/statsGold")
  123. public Result statsGold(@RequestBody ConsumeUser consumeUser) {
  124. try {
  125. if(consumeUser.getMarkets()==null||consumeUser.getMarkets().isEmpty()) {
  126. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  127. String token = request.getHeader("token");
  128. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  129. if (admin != null) {
  130. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  131. consumeUser.setMarkets(list);
  132. }
  133. else{
  134. return Result.error("角色为空");
  135. }
  136. }
  137. Gold gold = consumeService.statsGold(consumeUser);
  138. return Result.success(gold);
  139. } catch (Exception e) {
  140. e.printStackTrace();
  141. return Result.error("请检查数据的格式");
  142. }
  143. }
  144. //消耗金币增加
  145. @Log("新增金币消耗")
  146. @PostMapping("/add")
  147. public Result add(@RequestBody ConsumeUser consumeUser, @RequestHeader(defaultValue = "zh_CN") String lang) {
  148. try {
  149. // 解析语言参数,提取语言代码
  150. String languageCode = parseLanguageCode(lang);
  151. // 如果不是中文,则尝试将输入的翻译文本转换为中文简体
  152. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  153. convertTranslatedFieldsToChinese(consumeUser, languageCode);
  154. }
  155. Result result = consumeService.add(consumeUser);
  156. // 如果操作成功,对返回消息进行多语言转换
  157. if (result.getCode() == 200) {
  158. String translatedMsg = languageTranslationUtil.translate("添加成功", lang);
  159. return Result.success(translatedMsg);
  160. } else {
  161. // 对错误消息进行多语言转换
  162. String translatedErrorMsg = languageTranslationUtil.translate(result.getMsg(), lang);
  163. return Result.error(translatedErrorMsg);
  164. }
  165. // if(consumeUser.getJwcode().equals(94226013))
  166. // {
  167. // return consumeService.add(consumeUser);
  168. // }else {
  169. // return Result.error("不是测试的精网号,无法添加消费");
  170. // }
  171. //
  172. } catch (Exception e) {
  173. e.printStackTrace();
  174. String translatedErrorMsg = languageTranslationUtil.translate("请查看后端报错信息", lang);
  175. return Result.error(translatedErrorMsg);
  176. }
  177. }
  178. // //消耗金币增加
  179. // @Log("充值退款(消耗版)")
  180. // @PostMapping("/addRefund")
  181. // public Result addRefund(@RequestBody ConsumeUser consumeUser) {
  182. // try {
  183. // return consumeService.addRefund(consumeUser);
  184. //// if(consumeUser.getJwcode().equals(94226013))
  185. //// {
  186. //// return consumeService.add(consumeUser);
  187. //// }else {
  188. //// return Result.error("不是测试的精网号,无法添加消费");
  189. //// }
  190. ////
  191. // } catch (Exception e) {
  192. // e.printStackTrace();
  193. // return Result.error("请检查数据的格式");
  194. // }
  195. // }
  196. public Result select(@RequestBody Page page) {
  197. try {
  198. //页码校验
  199. if (ObjectUtils.isEmpty(page.getPageNum())) {
  200. return Result.error("页码数为空!");
  201. }
  202. //页面大小校验
  203. if (ObjectUtils.isEmpty(page.getPageSize())) {
  204. return Result.error("页大小为空!");
  205. } else {
  206. return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
  207. }
  208. } catch (Exception e) {
  209. e.printStackTrace();
  210. return Result.error("请检查筛选数据的格式");
  211. }
  212. }
  213. /**
  214. * 转换消费用户信息的多语言字段
  215. */
  216. private void translateConsumeUsers(PageInfo<ConsumeUser> pageInfo, String lang) {
  217. if (pageInfo != null && pageInfo.getList() != null) {
  218. for (ConsumeUser user : pageInfo.getList()) {
  219. // 翻译市场名称
  220. if (user.getMarket() != null) {
  221. user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang));
  222. }
  223. // 翻译商品名称
  224. if (user.getGoodsName() != null) {
  225. user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang));
  226. }
  227. // // 翻译支付平台
  228. // if (user.getPayPlatform() != null) {
  229. // user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang));
  230. // }
  231. // 翻译退款状态
  232. if (user.getIsRefund() != null) {
  233. if (user.getIsRefund() == 1) {
  234. user.setIsRefundDesc(languageTranslationUtil.translate("已退款", lang));
  235. } else if (user.getIsRefund() == 0) {
  236. user.setIsRefundDesc(languageTranslationUtil.translate("正常", lang));
  237. }
  238. }
  239. }
  240. }
  241. }
  242. /**
  243. * 解析语言代码
  244. */
  245. private String parseLanguageCode(String langHeader) {
  246. if (langHeader == null || langHeader.isEmpty()) {
  247. return "zh_CN";
  248. }
  249. // 处理类似 "en-US" 或 "zh-TW" 的情况
  250. if (langHeader.contains("-")) {
  251. String[] parts = langHeader.split("-");
  252. // 特殊处理中文繁体
  253. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  254. return "zh_TW";
  255. }
  256. return parts[0].toLowerCase();
  257. }
  258. return langHeader.toLowerCase();
  259. }
  260. /**
  261. * 将翻译后的字段转换为中文简体用于查询
  262. */
  263. private void convertTranslatedFieldsToChinese(ConsumeUser consumeUser, String languageCode) {
  264. if (consumeUser != null) {
  265. // 转换商品名称
  266. if (consumeUser.getGoodsName() != null && !consumeUser.getGoodsName().isEmpty()) {
  267. String chineseName = translationService.findChineseSimplifiedByTranslation(
  268. consumeUser.getGoodsName(), languageCode);
  269. consumeUser.setGoodsName(chineseName);
  270. }
  271. // 转换市场名称
  272. if (consumeUser.getMarket() != null && !consumeUser.getMarket().isEmpty()) {
  273. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  274. consumeUser.getMarket(), languageCode);
  275. consumeUser.setMarket(chineseMarket);
  276. }
  277. // // 转换支付平台
  278. // if (consumeUser.getPayPlatform() != null && !consumeUser.getPayPlatform().isEmpty()) {
  279. // String chinesePlatform = translationService.findChineseSimplifiedByTranslation(
  280. // consumeUser.getPayPlatform(), languageCode);
  281. // consumeUser.setPayPlatform(chinesePlatform);
  282. // }
  283. }
  284. }
  285. }