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.

374 lines
16 KiB

6 months ago
6 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 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
6 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
4 months ago
3 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.service.coin.RefundService;
  7. import com.example.demo.service.coin.TranslationService;
  8. import com.github.pagehelper.PageInfo;
  9. import jakarta.servlet.http.HttpServletRequest;
  10. import lombok.RequiredArgsConstructor;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.util.ObjectUtils;
  15. import org.springframework.web.bind.annotation.*;
  16. import org.springframework.web.context.request.RequestContextHolder;
  17. import org.springframework.web.context.request.ServletRequestAttributes;
  18. import com.example.demo.domain.vo.coin.*;
  19. import java.util.Arrays;
  20. import java.util.List;
  21. /**
  22. * @program: gold-java
  23. * @ClassName RefundMapper.xml
  24. * @description:
  25. * @author: Double
  26. * @create: 202506-26 11:28
  27. * @Version 1.0
  28. **/
  29. @RestController
  30. @RequestMapping("/refund")
  31. @RequiredArgsConstructor
  32. @Slf4j
  33. @CrossOrigin
  34. public class RefundController {
  35. @Autowired
  36. private RefundService refundService;
  37. // 注入 TranslationService
  38. @Autowired
  39. private TranslationService translationService;
  40. // 注入多语言转换工具类
  41. @Autowired
  42. private LanguageTranslationUtil languageTranslationUtil;
  43. //退款明细
  44. @Log("获取全部退款明细")
  45. @PostMapping("/selectAll")
  46. public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) {
  47. try {
  48. // 解析语言代码
  49. String languageCode = parseLanguageCode(lang);
  50. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  51. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  52. convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode);
  53. }
  54. if (ObjectUtils.isEmpty(page.getPageNum())) {
  55. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  56. return Result.error(errorMsg);
  57. }
  58. if (ObjectUtils.isEmpty(page.getPageSize())) {
  59. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  60. return Result.error(errorMsg);
  61. } else {
  62. //解token权限
  63. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  64. String token = request.getHeader("token");
  65. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  66. if (admin != null) {
  67. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  68. page.getRefundUser().setMarkets(list);
  69. } else {
  70. String errorMsg = languageTranslationUtil.translate("角色为空", lang);
  71. return Result.error(errorMsg);
  72. }
  73. Result result = Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
  74. // 对返回结果进行多语言转换
  75. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  76. PageInfo<RefundUser> pageInfo = (PageInfo<RefundUser>) result.getData();
  77. translateRefundUsers(pageInfo, lang);
  78. }
  79. return result;
  80. }
  81. } catch (Exception e) {
  82. String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang);
  83. return Result.error(errorMsg);
  84. }
  85. }
  86. //退款筛选
  87. @Log("退款明细筛选")
  88. @PostMapping("/selectBy")
  89. public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) {
  90. try {
  91. // 解析语言代码
  92. String languageCode = parseLanguageCode(lang);
  93. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  94. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  95. convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode);
  96. }
  97. if (ObjectUtils.isEmpty(page.getPageNum())) {
  98. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  99. return Result.error(errorMsg);
  100. }
  101. if (ObjectUtils.isEmpty(page.getPageSize())) {
  102. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  103. return Result.error(errorMsg);
  104. } else {
  105. //解token权限
  106. if(page.getRefundUser().getMarkets()==null||page.getRefundUser().getMarkets().isEmpty()) {
  107. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  108. String token = request.getHeader("token");
  109. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  110. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  111. page.getRefundUser().setMarkets(markets);
  112. }
  113. Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
  114. // 对返回结果进行多语言转换
  115. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  116. PageInfo<RefundUser> pageInfo = (PageInfo<RefundUser>) result.getData();
  117. translateRefundUsers(pageInfo, lang);
  118. }
  119. return result;
  120. }
  121. } catch (Exception e) {
  122. String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang);
  123. return Result.error(errorMsg);
  124. }
  125. }
  126. //退款金币统计
  127. @Log("退款金币合计数统计")
  128. @PostMapping("/statsGold")
  129. public Result statsGold(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) {
  130. try {
  131. // 解析语言代码
  132. String languageCode = parseLanguageCode(lang);
  133. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  134. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  135. convertRefundTranslatedFieldsToChinese(refundUser, languageCode);
  136. }
  137. //解token权限
  138. if(refundUser.getMarkets()==null||refundUser.getMarkets().isEmpty()) {
  139. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  140. String token = request.getHeader("token");
  141. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  142. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  143. refundUser.setMarkets(markets);
  144. }
  145. Gold gold = refundService.statsGold(refundUser);
  146. return Result.success(gold);
  147. } catch (Exception e) {
  148. String errorMsg = languageTranslationUtil.translate("请检查数据的格式", lang);
  149. return Result.error(errorMsg);
  150. }
  151. }
  152. //获取退款类型
  153. @Log("获取退款类型")
  154. @PostMapping("/refundType")
  155. public Result getRefundType(@RequestHeader(defaultValue = "zh") String lang) {
  156. // 解析语言代码
  157. String languageCode = parseLanguageCode(lang);
  158. List<String> list = refundService.getRefundType(lang);
  159. // 如果不是中文环境,先将翻译后的退款类型转换为中文简体进行处理
  160. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  161. convertTranslatedRefundTypesToChinese(list, languageCode);
  162. }
  163. // 对退款类型进行多语言转换
  164. translateRefundTypes(list, lang);
  165. return Result.success(list);
  166. }
  167. //筛选产品
  168. // @Log("筛选商品")
  169. @PostMapping("/selectGoods")
  170. public Result getSelectGoods(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) {
  171. // 解析语言代码
  172. String languageCode = parseLanguageCode(lang);
  173. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  174. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  175. convertRefundTranslatedFieldsToChinese(refundUser, languageCode);
  176. }
  177. List<RefundUser> list = refundService.selectGoods(refundUser, lang);
  178. return Result.success(list);
  179. }
  180. //消耗金币退款
  181. @Log("新增金币退款")
  182. @PostMapping("/add")
  183. public Result add(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) {
  184. try {
  185. // 解析语言代码
  186. String languageCode = parseLanguageCode(lang);
  187. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  188. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  189. convertRefundTranslatedFieldsToChinese(refundUser, languageCode);
  190. }
  191. return refundService.add(refundUser, lang);
  192. } catch (Exception e) {
  193. e.printStackTrace();
  194. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  195. return Result.error(errorMsg);
  196. }
  197. }
  198. public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) {
  199. try {
  200. // 解析语言代码
  201. String languageCode = parseLanguageCode(lang);
  202. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  203. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  204. convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode);
  205. }
  206. if (ObjectUtils.isEmpty(page.getPageNum())) {
  207. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  208. return Result.error(errorMsg);
  209. }
  210. if (ObjectUtils.isEmpty(page.getPageSize())) {
  211. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  212. return Result.error(errorMsg);
  213. } else {
  214. Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
  215. // 对返回结果进行多语言转换
  216. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  217. PageInfo<RefundUser> pageInfo = (PageInfo<RefundUser>) result.getData();
  218. translateRefundUsers(pageInfo, lang);
  219. }
  220. return result;
  221. }
  222. } catch (Exception e) {
  223. e.printStackTrace();
  224. String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang);
  225. return Result.error(errorMsg);
  226. }
  227. }
  228. /**
  229. * 解析语言代码
  230. */
  231. private String parseLanguageCode(String langHeader) {
  232. if (langHeader == null || langHeader.isEmpty()) {
  233. return "zh";
  234. }
  235. // 处理类似 "en-US" 或 "zh-TW" 的情况
  236. if (langHeader.contains("-")) {
  237. String[] parts = langHeader.split("-");
  238. // 特殊处理中文繁体
  239. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  240. return "zh_TW";
  241. }
  242. return parts[0].toLowerCase();
  243. }
  244. return langHeader.toLowerCase();
  245. }
  246. /**
  247. * 将退款查询条件中的翻译字段转换为中文简体
  248. */
  249. private void convertRefundTranslatedFieldsToChinese(RefundUser refundUser, String languageCode) {
  250. if (refundUser != null) {
  251. // 转换市场名称
  252. if (refundUser.getMarket() != null && !refundUser.getMarket().isEmpty()) {
  253. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  254. refundUser.getMarket(), languageCode);
  255. refundUser.setMarket(chineseMarket);
  256. }
  257. // 转换商品名称
  258. if (refundUser.getGoodsName() != null && !refundUser.getGoodsName().isEmpty()) {
  259. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  260. refundUser.getGoodsName(), languageCode);
  261. refundUser.setGoodsName(chineseGoodsName);
  262. }
  263. // 转换退款类型
  264. if (refundUser.getRefundType() != null && !refundUser.getRefundType().isEmpty()) {
  265. String chineseRefundType = translationService.findChineseSimplifiedByTranslation(
  266. refundUser.getRefundType(), languageCode);
  267. refundUser.setRefundType(chineseRefundType);
  268. }
  269. }
  270. }
  271. /**
  272. * 将翻译后的退款类型转换为中文简体
  273. */
  274. private void convertTranslatedRefundTypesToChinese(List<String> refundTypes, String languageCode) {
  275. if (refundTypes != null && !refundTypes.isEmpty()) {
  276. for (int i = 0; i < refundTypes.size(); i++) {
  277. String chineseType = translationService.findChineseSimplifiedByTranslation(
  278. refundTypes.get(i), languageCode);
  279. refundTypes.set(i, chineseType);
  280. }
  281. }
  282. }
  283. /**
  284. * 转换退款用户信息的多语言字段
  285. */
  286. private void translateRefundUsers(PageInfo<RefundUser> pageInfo, String lang) {
  287. if (pageInfo != null && pageInfo.getList() != null) {
  288. for (RefundUser user : pageInfo.getList()) {
  289. // 翻译市场名称
  290. if (user.getMarket() != null) {
  291. user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang));
  292. }
  293. // 翻译商品名称
  294. if (user.getGoodsName() != null) {
  295. user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang));
  296. }
  297. // 翻译退款类型
  298. if (user.getRefundType() != null) {
  299. user.setRefundType(languageTranslationUtil.translate(user.getRefundType(), lang));
  300. }
  301. // 翻译退款模型描述
  302. if (user.getRefundModel() != null) {
  303. String refundModelDesc = convertRefundModelToString(user.getRefundModel());
  304. user.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang));
  305. }
  306. }
  307. }
  308. }
  309. /**
  310. * 转换退款类型列表的多语言字段
  311. */
  312. private void translateRefundTypes(List<String> refundTypes, String lang) {
  313. if (refundTypes != null && !refundTypes.isEmpty()) {
  314. for (int i = 0; i < refundTypes.size(); i++) {
  315. String translatedType = languageTranslationUtil.translate(refundTypes.get(i), lang);
  316. refundTypes.set(i, translatedType);
  317. }
  318. }
  319. }
  320. /**
  321. * 将退款模型数字转换为中文描述
  322. */
  323. private String convertRefundModelToString(Byte refundModel) {
  324. if (refundModel == null) return "";
  325. switch (refundModel) {
  326. case 0: return "全部退款";
  327. case 1: return "部分退款";
  328. default: return "未知退款方式";
  329. }
  330. }
  331. }