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.

882 lines
38 KiB

  1. package com.example.demo.controller.cash;
  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.DTO.AddFundsDTO;
  6. import com.example.demo.domain.DTO.PerformanceAdjustmentDTO;
  7. import com.example.demo.domain.DTO.PerformanceDTO;
  8. import com.example.demo.domain.entity.*;
  9. import com.example.demo.domain.vo.cash.*;
  10. import com.example.demo.domain.vo.coin.Page;
  11. import com.example.demo.domain.vo.coin.Result;
  12. import com.example.demo.service.Wallet.WalletService;
  13. import com.example.demo.service.cash.CashCollectionService;
  14. import com.example.demo.service.coin.TranslationService;
  15. import com.github.pagehelper.PageInfo;
  16. import jakarta.servlet.http.HttpServletRequest;
  17. import lombok.RequiredArgsConstructor;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.util.ObjectUtils;
  21. import org.springframework.web.bind.annotation.*;
  22. import org.springframework.web.context.request.RequestContextHolder;
  23. import org.springframework.web.context.request.ServletRequestAttributes;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import java.util.Map;
  27. /**
  28. * @program: gold-java
  29. * @ClassName CashCollectionController
  30. * @description:
  31. * @author: Ethan
  32. * @create: 202509-26 10:22
  33. * @Version 1.0
  34. **/
  35. @RestController
  36. @RequestMapping("/cashCollection")
  37. @RequiredArgsConstructor
  38. @Slf4j
  39. @CrossOrigin
  40. public class CashCollectionController {
  41. @Autowired
  42. private CashCollectionService cashCollectionService;
  43. @Autowired
  44. private LanguageTranslationUtil languageTranslationUtil;
  45. @Autowired
  46. private TranslationService translationService;
  47. @Autowired
  48. private WalletService walletService;
  49. //根据精网号获取姓名和地区
  50. @PostMapping("/getNameAndMarket")
  51. public Result getNameAndMarket(@RequestBody Integer jwcode, @RequestHeader(defaultValue = "zh_CN") String lang) {
  52. try {
  53. Result result = cashCollectionService.getNameAndMarket(jwcode, lang);
  54. // 对返回结果进行多语言转换
  55. if (result.getCode() == 200 && result.getData() instanceof User) {
  56. User user = (User) result.getData();
  57. // 如果服务层未处理市场名称翻译,在这里进行处理
  58. if (user.getMarketName() != null) {
  59. user.setMarketName(languageTranslationUtil.translate(user.getMarketName(), lang));
  60. }
  61. }
  62. return result;
  63. } catch (Exception e) {
  64. String errorMsg = languageTranslationUtil.translate("查询失败", lang);
  65. return Result.error(errorMsg + ": " + e.getMessage());
  66. }
  67. }
  68. //获取收款活动列表
  69. @PostMapping("/getActivityList")
  70. public Result getActivityList()
  71. {
  72. List<RechargeActivity> list = cashCollectionService.getActivityList();
  73. return Result.success(list);
  74. }
  75. //新增收款订单
  76. @PostMapping("/add")
  77. public Result add(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  78. try {
  79. // 解析语言代码
  80. String languageCode = parseLanguageCode(lang);
  81. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  82. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  83. convertTranslatedFieldsToChinese(cashCollection, languageCode);
  84. }
  85. String result = cashCollectionService.add(cashCollection,lang);
  86. String successMsg = languageTranslationUtil.translate(result, lang);
  87. return Result.success(successMsg);
  88. } catch (Exception e) {
  89. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  90. return Result.error(errorMsg);
  91. }
  92. }
  93. //新增赠送免费金币
  94. @PostMapping("/addFreeCoin")
  95. public Result addFreeCoin(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  96. try {
  97. return Result.success(cashCollectionService.addFreeCoin(cashCollection, lang));
  98. } catch (Exception e) {
  99. return Result.error(e.getMessage());
  100. }
  101. }
  102. //撤回未审核的收款订单
  103. @PostMapping("/cancel")
  104. public Result cancel(@RequestBody CashCollection cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  105. try {
  106. String result = cashCollectionService.cancel(cashRecord.getOrderCode());
  107. String successMsg = languageTranslationUtil.translate(result, lang);
  108. return Result.success(successMsg);
  109. } catch (Exception e) {
  110. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  111. return Result.error(errorMsg);
  112. }
  113. }
  114. //重新提交审核的收款订单
  115. @PostMapping("/reSubmit")
  116. public Result reSubmit(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  117. try {
  118. // 解析语言代码
  119. String languageCode = parseLanguageCode(lang);
  120. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  121. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  122. convertTranslatedRecordFieldsToChinese(cashRecord, languageCode);
  123. }
  124. String result = cashCollectionService.reSubmit(cashRecord, lang);
  125. String successMsg = languageTranslationUtil.translate(result, lang);
  126. return Result.success(successMsg);
  127. } catch (Exception e) {
  128. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  129. return Result.error(errorMsg);
  130. }
  131. }
  132. //多条件查询收款订单列表
  133. @PostMapping("/selectCollection")
  134. public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  135. try {
  136. if (ObjectUtils.isEmpty(page.getPageNum())) {
  137. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  138. return Result.error(errorMsg);
  139. }
  140. if (ObjectUtils.isEmpty(page.getPageSize())) {
  141. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  142. return Result.error(errorMsg);
  143. } else {
  144. //解token权限
  145. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  146. String token = request.getHeader("token");
  147. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  148. if (admin != null) {
  149. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  150. page.getCashCollection().setMarkets(list);
  151. // 解析语言代码
  152. String languageCode = parseLanguageCode(lang);
  153. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  154. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  155. convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode);
  156. }
  157. } else {
  158. String errorMsg = languageTranslationUtil.translate("角色为空", lang);
  159. return Result.error(errorMsg);
  160. }
  161. Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection()));
  162. // 对返回结果进行多语言转换
  163. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  164. PageInfo<CashCollection> pageInfo = (PageInfo<CashCollection>) result.getData();
  165. translateCashCollections(pageInfo, lang);
  166. }
  167. return result;
  168. }
  169. } catch (Exception e) {
  170. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  171. return Result.error(errorMsg);
  172. }
  173. }
  174. @PostMapping("/export")
  175. public Result export(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  176. try {
  177. if (ObjectUtils.isEmpty(page.getPageNum())) {
  178. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  179. return Result.error(errorMsg);
  180. }
  181. if (ObjectUtils.isEmpty(page.getPageSize())) {
  182. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  183. return Result.error(errorMsg);
  184. }
  185. // 解析语言代码
  186. String languageCode = parseLanguageCode(lang);
  187. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  188. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  189. convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode);
  190. }
  191. Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection()));
  192. // 对返回结果进行多语言转换
  193. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  194. PageInfo<CashCollection> pageInfo = (PageInfo<CashCollection>) result.getData();
  195. translateCashCollections(pageInfo, lang);
  196. }
  197. return result;
  198. } catch (Exception e) {
  199. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  200. return Result.error(errorMsg);
  201. }
  202. }
  203. //补全手续费等
  204. @PostMapping("/complete")
  205. public Result complete(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  206. try {
  207. // 解析语言代码
  208. String languageCode = parseLanguageCode(lang);
  209. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  210. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  211. convertTranslatedRecordFieldsToChinese(cashRecord, languageCode);
  212. }
  213. String result = cashCollectionService.complete(cashRecord);
  214. String successMsg = languageTranslationUtil.translate(result, lang);
  215. return Result.success(successMsg);
  216. } catch (Exception e) {
  217. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  218. return Result.error(errorMsg);
  219. }
  220. }
  221. //同步g_order订单到cash_record表
  222. @PostMapping("/syncToCashRecord")
  223. public Result syncToCashRecord(@RequestHeader(defaultValue = "zh_CN") String lang) {
  224. try {
  225. Object result = cashCollectionService.syncToCashRecord();
  226. return Result.success(result);
  227. } catch (Exception e) {
  228. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  229. return Result.error(errorMsg);
  230. }
  231. }
  232. //根据id查询收款订单
  233. @PostMapping("/selectById")
  234. public Result selectById(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  235. try {
  236. CashCollection result = cashCollectionService.selectById(cashCollection);
  237. // 对返回结果进行多语言转换
  238. if (result != null) {
  239. translateSingleCashCollection(result, lang);
  240. }
  241. return Result.success(result);
  242. } catch (Exception e) {
  243. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  244. return Result.error(errorMsg);
  245. }
  246. }
  247. //根据gold coin订单号查询收款订单
  248. @PostMapping("/selectByGoldCoinOrderCode")
  249. public Result selectByGoldCoinOrderCode(@RequestBody String orderNo, @RequestHeader(defaultValue = "zh_CN") String lang) {
  250. try {
  251. CashCollection result = cashCollectionService.selectByGoldCoinOrderCode(orderNo);
  252. // 对返回结果进行多语言转换
  253. if (result != null) {
  254. translateSingleCashCollection(result, lang);
  255. }
  256. return Result.success(result);
  257. } catch (Exception e) {
  258. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  259. return Result.error(errorMsg);
  260. }
  261. }
  262. //根据id查询收款订单
  263. @PostMapping("/performanceSelect")
  264. public Result performanceSelect(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  265. try {
  266. // 解析语言代码
  267. String languageCode = parseLanguageCode(lang);
  268. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  269. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  270. convertTranslatedPerformanceFieldsToChinese(page.getPerformanceVO(), languageCode);
  271. }
  272. Result result = Result.success(cashCollectionService.performanceSelect(page.getPageNum(), page.getPageSize(), page.getPerformanceDTO()));
  273. // 对返回结果进行多语言转换
  274. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  275. PageInfo<PerformanceVO> pageInfo = (PageInfo<PerformanceVO>) result.getData();
  276. translatePerformanceVOs(pageInfo, lang);
  277. }
  278. return result;
  279. } catch (Exception e) {
  280. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  281. return Result.error(errorMsg);
  282. }
  283. }
  284. // 根据精网号和钱包 ID 查询用户钱包明细列表
  285. @PostMapping("/selectWalletRecords")
  286. public Result selectWalletRecords(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  287. try {
  288. if (ObjectUtils.isEmpty(page.getPageNum())) {
  289. return Result.error("页码数为空!");
  290. }
  291. if (ObjectUtils.isEmpty(page.getPageSize())) {
  292. return Result.error("页大小为空!");
  293. }
  294. UserWalletRecord queryCondition = page.getUserWalletRecord();
  295. if (queryCondition == null ||
  296. (queryCondition.getJwcode() == null && queryCondition.getWalletId() == null)) {
  297. return Result.error("精网号和钱包 ID 不能同时为空");
  298. }
  299. Result result = Result.success(cashCollectionService.selectWalletRecordsByJwcodeAndWalletId(
  300. page.getPageNum(),
  301. page.getPageSize(),
  302. queryCondition.getJwcode(),
  303. queryCondition.getWalletId()
  304. ));
  305. // 对返回结果进行多语言转换
  306. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  307. PageInfo<UserWalletRecordVO> pageInfo = (PageInfo<UserWalletRecordVO>) result.getData();
  308. translateWalletRecordVOs(pageInfo, lang);
  309. }
  310. return result;
  311. } catch (Exception e) {
  312. return Result.error("查询失败" + ": " + e.getMessage());
  313. }
  314. }
  315. // 根据精网号和地区查询用户的所有钱包 ID 和金币数量
  316. @PostMapping("/selectUserWallets")
  317. public Result selectUserWallets(@RequestBody Map<String, Object> params, @RequestHeader(defaultValue = "zh_CN") String lang) {
  318. try {
  319. Integer jwcode = null;
  320. String market = null;
  321. Integer pageNum = null;
  322. Integer pageSize = null;
  323. String sortField = null;
  324. String sortOrder = null;
  325. Integer sortWalletId = null;
  326. if (params.containsKey("jwcode")) {
  327. Object jwcodeObj = params.get("jwcode");
  328. if (jwcodeObj != null && !jwcodeObj.toString().isEmpty()) {
  329. try {
  330. jwcode = ((Number) jwcodeObj).intValue();
  331. } catch (Exception e) {
  332. // 如果转换失败,保持为 null
  333. }
  334. }
  335. }
  336. if (params.containsKey("market")) {
  337. Object marketObj = params.get("market");
  338. if (marketObj != null && !marketObj.toString().isEmpty()) {
  339. market = marketObj.toString();
  340. }
  341. }
  342. if (params.containsKey("pageNum")) {
  343. Object pageNumObj = params.get("pageNum");
  344. if (pageNumObj != null && !pageNumObj.toString().isEmpty()) {
  345. try {
  346. pageNum = ((Number) pageNumObj).intValue();
  347. } catch (Exception e) {
  348. pageNum = 1;
  349. }
  350. }
  351. }
  352. if (params.containsKey("pageSize")) {
  353. Object pageSizeObj = params.get("pageSize");
  354. if (pageSizeObj != null && !pageSizeObj.toString().isEmpty()) {
  355. try {
  356. pageSize = ((Number) pageSizeObj).intValue();
  357. } catch (Exception e) {
  358. pageSize = 10;
  359. }
  360. }
  361. }
  362. if (params.containsKey("sortField")) {
  363. Object sortFieldObj = params.get("sortField");
  364. if (sortFieldObj != null && !sortFieldObj.toString().isEmpty()) {
  365. sortField = sortFieldObj.toString();
  366. }
  367. }
  368. if (params.containsKey("sortOrder")) {
  369. Object sortOrderObj = params.get("sortOrder");
  370. if (sortOrderObj != null && !sortOrderObj.toString().isEmpty()) {
  371. sortOrder = sortOrderObj.toString();
  372. }
  373. }
  374. if (params.containsKey("sortWalletId")) {
  375. Object sortWalletIdObj = params.get("sortWalletId");
  376. if (sortWalletIdObj != null) {
  377. try {
  378. sortWalletId = ((Number) sortWalletIdObj).intValue();
  379. } catch (Exception e) {
  380. // 如果转换失败,保持为 null
  381. }
  382. }
  383. }
  384. if (pageNum == null) {
  385. pageNum = 1;
  386. }
  387. if (pageSize == null) {
  388. pageSize = 10;
  389. }
  390. PageInfo<UserWalletVO> result = cashCollectionService.selectUserWallets(jwcode, market, pageNum, pageSize, sortField, sortOrder, sortWalletId);
  391. // 对返回结果进行多语言转换
  392. if (result != null && result.getList() != null) {
  393. for (UserWalletVO vo : result.getList()) {
  394. translateUserWalletVO(vo, lang);
  395. }
  396. }
  397. return Result.success(result);
  398. } catch (Exception e) {
  399. return Result.error("查询失败" + ": " + e.getMessage());
  400. }
  401. }
  402. /**
  403. *新增流水-其他收入
  404. */
  405. @PostMapping("/addExFund")
  406. public Result addExFund(@RequestBody CashCollection addFundsDTO, @RequestHeader(defaultValue = "zh_CN") String lang) {
  407. try {
  408. // 解析语言代码
  409. String languageCode = parseLanguageCode(lang);
  410. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  411. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  412. convertTranslatedFieldsToChinese(addFundsDTO, languageCode);
  413. }
  414. String result = cashCollectionService.addExFund(addFundsDTO);
  415. String successMsg = languageTranslationUtil.translate(result, lang);
  416. return Result.success(successMsg);
  417. } catch (Exception e) {
  418. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  419. return Result.error(errorMsg);
  420. }
  421. }
  422. /**
  423. *新增iPay88手续费
  424. */
  425. @PostMapping("/addiPay88Fee")
  426. public Result addIpay88Fee(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  427. try {
  428. // 解析语言代码
  429. String languageCode = parseLanguageCode(lang);
  430. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  431. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  432. convertTranslatedFieldsToChinese(cashCollection, languageCode);
  433. }
  434. String result = cashCollectionService.addIpay88Fee(cashCollection);
  435. String successMsg = languageTranslationUtil.translate(result, lang);
  436. return Result.success(successMsg);
  437. } catch (Exception e) {
  438. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  439. return Result.error(errorMsg);
  440. }
  441. }
  442. /**
  443. * 查询所有钱包类型
  444. */
  445. @Log("查询所有钱包类型")
  446. @PostMapping("/selectAllWallets")
  447. public Result selectAllWallets(@RequestHeader(defaultValue = "zh_CN") String lang) {
  448. try {
  449. List<Wallet> wallets = walletService.selectAllWallets();
  450. // 对钱包名称进行多语言转换
  451. if (wallets != null && !"zh".equalsIgnoreCase(parseLanguageCode(lang))
  452. && !"zh_cn".equalsIgnoreCase(parseLanguageCode(lang))) {
  453. for (Wallet wallet : wallets) {
  454. if (wallet.getWalletName() != null) {
  455. wallet.setWalletName(
  456. languageTranslationUtil.translate(wallet.getWalletName().toString(), lang)
  457. );
  458. }
  459. }
  460. }
  461. return Result.success(wallets);
  462. } catch (Exception e) {
  463. log.error("查询所有钱包类型失败", e);
  464. return Result.error("查询失败");
  465. }
  466. }
  467. @PostMapping("/adjust")
  468. public Result adjust(@RequestBody PerformanceAdjustmentDTO adjustDTO) {
  469. try {
  470. cashCollectionService.adjust(adjustDTO);
  471. return Result.success("调整成功");
  472. } catch (Exception e) {
  473. return Result.error(e.getMessage());
  474. }
  475. }
  476. /**
  477. * 转换用户钱包 VO 的多语言字段
  478. */
  479. private void translateUserWalletVO(UserWalletVO vo, String lang) {
  480. if (vo != null) {
  481. // 翻译地区名称
  482. if (vo.getMarketName() != null) {
  483. vo.setMarketName(languageTranslationUtil.translate(vo.getMarketName(), lang));
  484. }
  485. // 翻译钱包名称
  486. if (vo.getWalletList() != null) {
  487. for (WalletItem wallet : vo.getWalletList()) {
  488. if (wallet.getWalletName() != null) {
  489. wallet.setWalletName(languageTranslationUtil.translate(wallet.getWalletName(), lang));
  490. }
  491. }
  492. }
  493. }
  494. }
  495. /**
  496. * 转换现金收款订单的多语言字段
  497. */
  498. private void translateCashCollections(PageInfo<CashCollection> pageInfo, String lang) {
  499. if (pageInfo != null && pageInfo.getList() != null) {
  500. for (CashCollection collection : pageInfo.getList()) {
  501. translateSingleCashCollection(collection, lang);
  502. }
  503. }
  504. }
  505. /**
  506. * 转换单个现金收款订单的多语言字段
  507. */
  508. private void translateSingleCashCollection(CashCollection collection, String lang) {
  509. if (collection != null) {
  510. // 翻译市场名称
  511. if (collection.getMarketName() != null) {
  512. collection.setMarketName(languageTranslationUtil.translate(collection.getMarketName(), lang));
  513. }
  514. // 翻译商品名称
  515. if (collection.getGoodsName() != null) {
  516. collection.setGoodsName(languageTranslationUtil.translate(collection.getGoodsName(), lang));
  517. }
  518. // 翻译支付方式
  519. if (collection.getPayType() != null) {
  520. collection.setPayType(languageTranslationUtil.translate(collection.getPayType(), lang));
  521. }
  522. // 翻译到账地区
  523. if (collection.getReceivedMarket() != null) {
  524. collection.setReceivedMarket(languageTranslationUtil.translate(collection.getReceivedMarket(), lang));
  525. }
  526. // 翻译支付币种
  527. if (collection.getPaymentCurrency() != null) {
  528. collection.setPaymentCurrency(languageTranslationUtil.translate(collection.getPaymentCurrency(), lang));
  529. }
  530. // 翻译到账币种
  531. if (collection.getReceivedCurrency() != null) {
  532. collection.setReceivedCurrency(languageTranslationUtil.translate(collection.getReceivedCurrency(), lang));
  533. }
  534. // 翻译数量单位
  535. if (collection.getNumUnit() != null) {
  536. collection.setNumUnit(languageTranslationUtil.translate(collection.getNumUnit(), lang));
  537. }
  538. }
  539. }
  540. /**
  541. * 转换绩效数据的多语言字段
  542. */
  543. private void translatePerformanceVOs(PageInfo<PerformanceVO> pageInfo, String lang) {
  544. if (pageInfo != null && pageInfo.getList() != null) {
  545. for (PerformanceVO performance : pageInfo.getList()) {
  546. translateSinglePerformanceVO(performance, lang);
  547. }
  548. }
  549. }
  550. /**
  551. * 转换单个绩效数据的多语言字段
  552. */
  553. private void translateSinglePerformanceVO(PerformanceVO performance, String lang) {
  554. if (performance != null) {
  555. // 翻译市场名称
  556. if (performance.getMarketName() != null) {
  557. performance.setMarketName(languageTranslationUtil.translate(performance.getMarketName(), lang));
  558. }
  559. // 翻译支付币种
  560. if (performance.getPaymentCurrency() != null) {
  561. performance.setPaymentCurrency(languageTranslationUtil.translate(performance.getPaymentCurrency(), lang));
  562. }
  563. // 翻译到账币种
  564. if (performance.getReceivedCurrency() != null) {
  565. performance.setReceivedCurrency(languageTranslationUtil.translate(performance.getReceivedCurrency(), lang));
  566. }
  567. }
  568. }
  569. /**
  570. * 解析语言代码
  571. */
  572. private String parseLanguageCode(String langHeader) {
  573. if (langHeader == null || langHeader.isEmpty()) {
  574. return "zh";
  575. }
  576. // 处理类似 "en-US" 或 "zh-TW" 的情况
  577. if (langHeader.contains("-")) {
  578. String[] parts = langHeader.split("-");
  579. // 特殊处理中文繁体
  580. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  581. return "zh_TW";
  582. }
  583. return parts[0].toLowerCase();
  584. }
  585. return langHeader.toLowerCase();
  586. }
  587. /**
  588. * 将收款订单查询条件中的翻译字段转换为中文简体
  589. */
  590. private void convertTranslatedFieldsToChinese(CashCollection cashCollection, String languageCode) {
  591. if (cashCollection != null) {
  592. // 转换商品名称
  593. if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) {
  594. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  595. cashCollection.getGoodsName(), languageCode);
  596. cashCollection.setGoodsName(chineseGoodsName);
  597. }
  598. // 转换支付方式
  599. if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) {
  600. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  601. cashCollection.getPayType(), languageCode);
  602. cashCollection.setPayType(chinesePayType);
  603. }
  604. // 转换到账地区
  605. if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) {
  606. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  607. cashCollection.getReceivedMarket(), languageCode);
  608. cashCollection.setReceivedMarket(chineseMarket);
  609. }
  610. // 转换所属地区名称
  611. if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
  612. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  613. cashCollection.getMarketName(), languageCode);
  614. cashCollection.setMarketName(chineseMarketName);
  615. }
  616. // 转换数量单位
  617. if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
  618. String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
  619. cashCollection.getNumUnit(), languageCode);
  620. cashCollection.setNumUnit(chineseNumUnit);
  621. }
  622. }
  623. }
  624. /**
  625. * 将现金记录查询条件中的翻译字段转换为中文简体
  626. */
  627. private void convertTranslatedRecordFieldsToChinese(CashRecord cashRecord, String languageCode) {
  628. if (cashRecord != null) {
  629. // 转换商品名称
  630. if (cashRecord.getGoodsName() != null && !cashRecord.getGoodsName().isEmpty()) {
  631. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  632. cashRecord.getGoodsName(), languageCode);
  633. cashRecord.setGoodsName(chineseGoodsName);
  634. }
  635. // 转换支付方式
  636. if (cashRecord.getPayType() != null && !cashRecord.getPayType().isEmpty()) {
  637. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  638. cashRecord.getPayType(), languageCode);
  639. cashRecord.setPayType(chinesePayType);
  640. }
  641. // 转换到账地区
  642. if (cashRecord.getReceivedMarket() != null && !cashRecord.getReceivedMarket().isEmpty()) {
  643. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  644. cashRecord.getReceivedMarket(), languageCode);
  645. cashRecord.setReceivedMarket(chineseMarket);
  646. }
  647. // 转换原始付款币种
  648. if (cashRecord.getPaymentCurrencyOrig() != null && !cashRecord.getPaymentCurrencyOrig().isEmpty()) {
  649. String chinesePaymentCurrencyOrig = translationService.findChineseSimplifiedByTranslation(
  650. cashRecord.getPaymentCurrencyOrig(), languageCode);
  651. cashRecord.setPaymentCurrencyOrig(chinesePaymentCurrencyOrig);
  652. }
  653. // 转换数量单位
  654. if (cashRecord.getNumUnit() != null && !cashRecord.getNumUnit().isEmpty()) {
  655. String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
  656. cashRecord.getNumUnit(), languageCode);
  657. cashRecord.setNumUnit(chineseNumUnit);
  658. }
  659. }
  660. }
  661. /**
  662. * 将收款订单列表查询条件中的翻译字段转换为中文简体
  663. */
  664. private void convertTranslatedCollectionFieldsToChinese(CashCollection cashCollection, String languageCode) {
  665. if (cashCollection != null) {
  666. // 转换商品名称
  667. if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) {
  668. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  669. cashCollection.getGoodsName(), languageCode);
  670. cashCollection.setGoodsName(chineseGoodsName);
  671. }
  672. // 转换支付方式
  673. if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) {
  674. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  675. cashCollection.getPayType(), languageCode);
  676. cashCollection.setPayType(chinesePayType);
  677. }
  678. // 转换到账地区
  679. if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) {
  680. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  681. cashCollection.getReceivedMarket(), languageCode);
  682. cashCollection.setReceivedMarket(chineseMarket);
  683. }
  684. // 转换支付币种
  685. if (cashCollection.getPaymentCurrency() != null && !cashCollection.getPaymentCurrency().isEmpty()) {
  686. String chineseCurrency = translationService.findChineseSimplifiedByTranslation(
  687. cashCollection.getPaymentCurrency(), languageCode);
  688. cashCollection.setPaymentCurrency(chineseCurrency);
  689. }
  690. // 转换到账币种
  691. if (cashCollection.getReceivedCurrency() != null && !cashCollection.getReceivedCurrency().isEmpty()) {
  692. String chineseCurrency = translationService.findChineseSimplifiedByTranslation(
  693. cashCollection.getReceivedCurrency(), languageCode);
  694. cashCollection.setReceivedCurrency(chineseCurrency);
  695. }
  696. // 转换提交人地区
  697. if (cashCollection.getSubmitterMarket() != null && !cashCollection.getSubmitterMarket().isEmpty()) {
  698. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  699. cashCollection.getSubmitterMarket(), languageCode);
  700. cashCollection.setSubmitterMarket(chineseMarket);
  701. }
  702. // 转换所属地区名称
  703. if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
  704. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  705. cashCollection.getMarketName(), languageCode);
  706. cashCollection.setMarketName(chineseMarketName);
  707. }
  708. // 转换数量单位
  709. if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
  710. String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
  711. cashCollection.getNumUnit(), languageCode);
  712. cashCollection.setNumUnit(chineseNumUnit);
  713. }
  714. }
  715. }
  716. /**
  717. * 将绩效查询条件中的翻译字段转换为中文简体
  718. */
  719. private void convertTranslatedPerformanceFieldsToChinese(PerformanceVO performanceVO, String languageCode) {
  720. if (performanceVO != null) {
  721. // 转换市场名称
  722. if (performanceVO.getMarketName() != null && !performanceVO.getMarketName().isEmpty()) {
  723. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  724. performanceVO.getMarketName(), languageCode);
  725. performanceVO.setMarketName(chineseMarketName);
  726. }
  727. // 转换支付币种
  728. if (performanceVO.getPaymentCurrency() != null && !performanceVO.getPaymentCurrency().isEmpty()) {
  729. String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation(
  730. performanceVO.getPaymentCurrency(), languageCode);
  731. performanceVO.setPaymentCurrency(chinesePaymentCurrency);
  732. }
  733. // 转换到账币种
  734. if (performanceVO.getReceivedCurrency() != null && !performanceVO.getReceivedCurrency().isEmpty()) {
  735. String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation(
  736. performanceVO.getReceivedCurrency(), languageCode);
  737. performanceVO.setReceivedCurrency(chineseReceivedCurrency);
  738. }
  739. }
  740. }
  741. /**
  742. * 转换用户钱包明细 VO 列表的多语言字段
  743. */
  744. private void translateWalletRecordVOs(PageInfo<UserWalletRecordVO> pageInfo, String lang) {
  745. if (pageInfo != null && pageInfo.getList() != null) {
  746. for (UserWalletRecordVO vo : pageInfo.getList()) {
  747. translateWalletRecordVO(vo, lang);
  748. }
  749. }
  750. }
  751. /**
  752. * 转换用户钱包明细 VO 的多语言字段
  753. */
  754. private void translateWalletRecordVO(UserWalletRecordVO vo, String lang) {
  755. if (vo != null) {
  756. // 翻译地区名称
  757. if (vo.getMarketName() != null) {
  758. vo.setMarketName(languageTranslationUtil.translate(vo.getMarketName(), lang));
  759. }
  760. // 翻译钱包名称
  761. if (vo.getWalletName() != null) {
  762. vo.setWalletName(languageTranslationUtil.translate(vo.getWalletName(), lang));
  763. }
  764. // 翻译交易说明
  765. if (vo.getDescription() != null) {
  766. vo.setDescription(languageTranslationUtil.translate(vo.getDescription(), lang));
  767. }
  768. // 翻译交易类型
  769. if (vo.getType() != null) {
  770. String typeText = vo.getType() == 0 ? "充值" : (vo.getType() == 1 ? "消耗" : "退款");
  771. vo.setTypeText(languageTranslationUtil.translate(typeText, lang));
  772. }
  773. // 翻译状态
  774. if (vo.getStatus() != null) {
  775. String statusText = vo.getStatus() == 0 ? "正常" : "已退款";
  776. vo.setStatusText(languageTranslationUtil.translate(statusText, lang));
  777. }
  778. // 翻译交易币种
  779. if (vo.getTransactionCurrency() != null) {
  780. vo.setTransactionCurrency(languageTranslationUtil.translate(vo.getTransactionCurrency(), lang));
  781. }
  782. }
  783. }
  784. }