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.

333 lines
14 KiB

10 months ago
10 months ago
10 months ago
10 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.AuditService;
  7. import com.example.demo.service.coin.TranslationService;
  8. import com.example.demo.serviceImpl.coin.AuditServiceImpl;
  9. import com.github.pagehelper.PageInfo;
  10. import jakarta.servlet.http.HttpServletRequest;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.http.ResponseEntity;
  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.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * @program: gold-java
  25. * @ClassName AuditController
  26. * @description: 审核模块
  27. * @author: Ethan
  28. * @create: 202506-19 17:30
  29. * @Version 1.0
  30. **/
  31. @RestController
  32. @RequestMapping("/audit")
  33. @RequiredArgsConstructor
  34. @Slf4j
  35. @CrossOrigin
  36. public class AuditController {
  37. @Autowired
  38. private AuditService auditService;
  39. @Autowired
  40. private LanguageTranslationUtil languageTranslationUtil;
  41. @Autowired
  42. private TranslationService translationService;
  43. //审核订单
  44. @Log("审核订单")
  45. @PostMapping("audit")
  46. public ResponseEntity<Map<String, Object>> auditOrder(@RequestBody AuditRequest request) throws Exception {
  47. boolean result = auditService.auditOrder(request.getToken(), request.getOrderCode(), request.getAuditId(),
  48. request.getAction(), request.getRejectReason(), request.getPrice(), request.getLinkId(), request.getRefundModel()
  49. );
  50. Map<String, Object> resp = new HashMap<>();
  51. resp.put("success", result);
  52. if (!result) {
  53. resp.put("message", AuditServiceImpl.AuditContext.getFailMsg());
  54. } else {
  55. resp.put("message", "审核成功");
  56. }
  57. AuditServiceImpl.AuditContext.clear(); // 必须清理
  58. return ResponseEntity.ok(resp);
  59. }
  60. //多条件查询充值审核订单列表
  61. @Log("查询充值审核订单列表")
  62. @PostMapping("selectRecharge")
  63. public PageInfo<RechargeAudit> searchRechargeAudit(
  64. @RequestBody Page page,
  65. @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  66. Integer pageNum = page.getPageNum();
  67. Integer pageSize = page.getPageSize();
  68. RechargeAudit rechargeAudit = page.getRechargeAudit();
  69. // 解析语言代码
  70. String languageCode = parseLanguageCode(lang);
  71. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  72. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  73. convertRechargeTranslatedFieldsToChinese(rechargeAudit, languageCode);
  74. }
  75. //解token权限
  76. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  77. String token = request.getHeader("token");
  78. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  79. if (admin != null) {
  80. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  81. rechargeAudit.setMarkets(list);
  82. }
  83. PageInfo<RechargeAudit> pageInfo = auditService.selectRechargeBy(pageNum, pageSize, rechargeAudit);
  84. // 对结果进行多语言转换
  85. translateRechargeAuditResults(pageInfo, lang);
  86. return pageInfo;
  87. }
  88. //多条件查询退款审核订单列表
  89. @Log("查询退款审核订单列表")
  90. @PostMapping("selectRefund")
  91. public PageInfo<RefundAudit> searchRefundAudit(
  92. @RequestBody Page page,
  93. @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  94. Integer pageNum = page.getPageNum();
  95. Integer pageSize = page.getPageSize();
  96. RefundAudit refundAudit = page.getRefundAudit();
  97. // 解析语言代码
  98. String languageCode = parseLanguageCode(lang);
  99. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  100. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  101. convertRefundTranslatedFieldsToChinese(refundAudit, languageCode);
  102. }
  103. //解token权限
  104. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  105. String token = request.getHeader("token");
  106. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  107. if (admin != null) {
  108. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  109. refundAudit.setMarkets(list);
  110. }
  111. PageInfo<RefundAudit> pageInfo = auditService.selectRefundBy(pageNum, pageSize, refundAudit);
  112. // 对结果进行多语言转换
  113. translateRefundAuditResults(pageInfo, lang);
  114. return pageInfo;
  115. }
  116. //充值审核合计数
  117. @Log("充值审核合计数")
  118. @PostMapping("sumRechargeGold")
  119. public Gold sumRechargeGold(@RequestBody Page page)throws Exception {
  120. Integer pageNum = page.getPageNum();
  121. Integer pageSize = page.getPageSize();
  122. RechargeAudit rechargeAudit = page.getRechargeAudit();
  123. //解token权限
  124. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  125. String token = request.getHeader("token");
  126. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  127. if (admin != null) {
  128. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  129. rechargeAudit.setMarkets(list);
  130. }
  131. return auditService.sumRechargeGold(pageNum, pageSize, rechargeAudit);
  132. }
  133. //退款审核合计数
  134. @Log("退款审核合计数")
  135. @PostMapping("sumRefundGold")
  136. public Gold sumRefundGold(@RequestBody Page page) throws Exception{
  137. Integer pageNum = page.getPageNum();
  138. Integer pageSize = page.getPageSize();
  139. RefundAudit refundAudit = page.getRefundAudit();
  140. //解token权限
  141. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  142. String token = request.getHeader("token");
  143. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  144. if (admin != null) {
  145. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  146. refundAudit.setMarkets(list);
  147. }
  148. return auditService.sumRefundGold(pageNum, pageSize, refundAudit);
  149. }
  150. /**
  151. * 转换充值审核结果的多语言字段
  152. */
  153. private void translateRechargeAuditResults(PageInfo<RechargeAudit> pageInfo, String lang) {
  154. if (pageInfo != null && pageInfo.getList() != null) {
  155. for (RechargeAudit audit : pageInfo.getList()) {
  156. // 翻译市场名称
  157. if (audit.getMarket() != null) {
  158. audit.setMarket(languageTranslationUtil.translate(audit.getMarket(), lang));
  159. }
  160. // 翻译汇率名称
  161. if (audit.getRateName() != null) {
  162. audit.setRateName(languageTranslationUtil.translate(audit.getRateName(), lang));
  163. }
  164. // 翻译支付方式
  165. if (audit.getPayModel() != null) {
  166. audit.setPayModel(languageTranslationUtil.translate(audit.getPayModel(), lang));
  167. }
  168. // 翻译备注
  169. if (audit.getRemark() != null) {
  170. audit.setRemark(languageTranslationUtil.translate(audit.getRemark(), lang));
  171. }
  172. }
  173. }
  174. }
  175. /**
  176. * 转换退款审核结果的多语言字段
  177. */
  178. private void translateRefundAuditResults(PageInfo<RefundAudit> pageInfo, String lang) {
  179. if (pageInfo != null && pageInfo.getList() != null) {
  180. for (RefundAudit audit : pageInfo.getList()) {
  181. // 翻译市场名称
  182. if (audit.getMarket() != null) {
  183. audit.setMarket(languageTranslationUtil.translate(audit.getMarket(), lang));
  184. }
  185. // 翻译商品名称
  186. if (audit.getGoodsName() != null) {
  187. audit.setGoodsName(languageTranslationUtil.translate(audit.getGoodsName(), lang));
  188. }
  189. // 翻译退款方式
  190. if (audit.getRefundModel() != null) {
  191. // refundModel是数字,需要先转换为对应的中文描述再翻译
  192. String refundModelDesc = convertRefundModelToString(audit.getRefundModel());
  193. audit.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang));
  194. }
  195. // 翻译退款类型
  196. if (audit.getRefundType() != null) {
  197. audit.setRefundType(languageTranslationUtil.translate(audit.getRefundType(), lang));
  198. }
  199. // 翻译备注
  200. if (audit.getRemark() != null) {
  201. audit.setRemark(languageTranslationUtil.translate(audit.getRemark(), lang));
  202. }
  203. }
  204. }
  205. }
  206. /**
  207. * 将退款方式数字转换为中文描述
  208. */
  209. private String convertRefundModelToString(Integer refundModel) {
  210. if (refundModel == null) return "";
  211. switch (refundModel) {
  212. case 0:
  213. return "全部退款";
  214. case 1:
  215. return "部分退款";
  216. default:
  217. return "未知退款方式";
  218. }
  219. }
  220. /**
  221. * 解析语言代码
  222. */
  223. private String parseLanguageCode(String langHeader) {
  224. if (langHeader == null || langHeader.isEmpty()) {
  225. return "zh";
  226. }
  227. // 处理类似 "en-US" 或 "zh-TW" 的情况
  228. if (langHeader.contains("-")) {
  229. String[] parts = langHeader.split("-");
  230. // 特殊处理中文繁体
  231. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  232. return "zh_TW";
  233. }
  234. return parts[0].toLowerCase();
  235. }
  236. return langHeader.toLowerCase();
  237. }
  238. /**
  239. * 将充值审核查询条件中的翻译字段转换为中文简体
  240. */
  241. private void convertRechargeTranslatedFieldsToChinese(RechargeAudit rechargeAudit, String languageCode) {
  242. if (rechargeAudit != null) {
  243. // 转换市场名称
  244. if (rechargeAudit.getMarket() != null && !rechargeAudit.getMarket().isEmpty()) {
  245. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  246. rechargeAudit.getMarket(), languageCode);
  247. rechargeAudit.setMarket(chineseMarket);
  248. }
  249. // 转换汇率名称
  250. if (rechargeAudit.getRateName() != null && !rechargeAudit.getRateName().isEmpty()) {
  251. String chineseRateName = translationService.findChineseSimplifiedByTranslation(
  252. rechargeAudit.getRateName(), languageCode);
  253. rechargeAudit.setRateName(chineseRateName);
  254. }
  255. // 转换支付方式
  256. if (rechargeAudit.getPayModel() != null && !rechargeAudit.getPayModel().isEmpty()) {
  257. String chinesePayModel = translationService.findChineseSimplifiedByTranslation(
  258. rechargeAudit.getPayModel(), languageCode);
  259. rechargeAudit.setPayModel(chinesePayModel);
  260. }
  261. // 转换备注
  262. if (rechargeAudit.getRemark() != null && !rechargeAudit.getRemark().isEmpty()) {
  263. String chineseRemark = translationService.findChineseSimplifiedByTranslation(
  264. rechargeAudit.getRemark(), languageCode);
  265. rechargeAudit.setRemark(chineseRemark);
  266. }
  267. }
  268. }
  269. /**
  270. * 将退款审核查询条件中的翻译字段转换为中文简体
  271. */
  272. private void convertRefundTranslatedFieldsToChinese(RefundAudit refundAudit, String languageCode) {
  273. if (refundAudit != null) {
  274. // 转换市场名称
  275. if (refundAudit.getMarket() != null && !refundAudit.getMarket().isEmpty()) {
  276. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  277. refundAudit.getMarket(), languageCode);
  278. refundAudit.setMarket(chineseMarket);
  279. }
  280. // 转换商品名称
  281. if (refundAudit.getGoodsName() != null && !refundAudit.getGoodsName().isEmpty()) {
  282. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  283. refundAudit.getGoodsName(), languageCode);
  284. refundAudit.setGoodsName(chineseGoodsName);
  285. }
  286. // 转换退款类型
  287. if (refundAudit.getRefundType() != null && !refundAudit.getRefundType().isEmpty()) {
  288. String chineseRefundType = translationService.findChineseSimplifiedByTranslation(
  289. refundAudit.getRefundType(), languageCode);
  290. refundAudit.setRefundType(chineseRefundType);
  291. }
  292. // 转换备注
  293. if (refundAudit.getRemark() != null && !refundAudit.getRemark().isEmpty()) {
  294. String chineseRemark = translationService.findChineseSimplifiedByTranslation(
  295. refundAudit.getRemark(), languageCode);
  296. refundAudit.setRemark(chineseRemark);
  297. }
  298. }
  299. }
  300. }