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.

565 lines
25 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.domain.DTO.PerformanceDTO;
  5. import com.example.demo.domain.entity.Admin;
  6. import com.example.demo.domain.entity.CashRecord;
  7. import com.example.demo.domain.entity.RechargeActivity;
  8. import com.example.demo.domain.entity.User;
  9. import com.example.demo.domain.vo.cash.CashCollection;
  10. import com.example.demo.domain.vo.cash.PerformanceVO;
  11. import com.example.demo.domain.vo.coin.Page;
  12. import com.example.demo.domain.vo.coin.Result;
  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. /**
  27. * @program: gold-java
  28. * @ClassName CashCollectionController
  29. * @description:
  30. * @author: Ethan
  31. * @create: 202509-26 10:22
  32. * @Version 1.0
  33. **/
  34. @RestController
  35. @RequestMapping("/cashCollection")
  36. @RequiredArgsConstructor
  37. @Slf4j
  38. @CrossOrigin
  39. public class CashCollectionController {
  40. @Autowired
  41. private CashCollectionService cashCollectionService;
  42. @Autowired
  43. private LanguageTranslationUtil languageTranslationUtil;
  44. @Autowired
  45. private TranslationService translationService;
  46. //根据精网号获取姓名和地区
  47. @PostMapping("/getNameAndMarket")
  48. public Result getNameAndMarket(@RequestBody Integer jwcode, @RequestHeader(defaultValue = "zh_CN") String lang) {
  49. try {
  50. Result result = cashCollectionService.getNameAndMarket(jwcode, lang);
  51. // 对返回结果进行多语言转换
  52. if (result.getCode() == 200 && result.getData() instanceof User) {
  53. User user = (User) result.getData();
  54. // 如果服务层未处理市场名称翻译,在这里进行处理
  55. if (user.getMarketName() != null) {
  56. user.setMarketName(languageTranslationUtil.translate(user.getMarketName(), lang));
  57. }
  58. }
  59. return result;
  60. } catch (Exception e) {
  61. String errorMsg = languageTranslationUtil.translate("查询失败", lang);
  62. return Result.error(errorMsg + ": " + e.getMessage());
  63. }
  64. }
  65. //获取收款活动列表
  66. @PostMapping("/getActivityList")
  67. public Result getActivityList()
  68. {
  69. List<RechargeActivity> list = cashCollectionService.getActivityList();
  70. return Result.success(list);
  71. }
  72. //新增收款订单
  73. @PostMapping("/add")
  74. public Result add(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  75. try {
  76. // 解析语言代码
  77. String languageCode = parseLanguageCode(lang);
  78. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  79. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  80. convertTranslatedFieldsToChinese(cashCollection, languageCode);
  81. }
  82. String result = cashCollectionService.add(cashCollection,lang);
  83. String successMsg = languageTranslationUtil.translate(result, lang);
  84. return Result.success(successMsg);
  85. } catch (Exception e) {
  86. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  87. return Result.error(errorMsg);
  88. }
  89. }
  90. //新增赠送免费金币
  91. @PostMapping("/addFreeCoin")
  92. public Result addFreeCoin(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  93. try {
  94. return Result.success(cashCollectionService.addFreeCoin(cashCollection, lang));
  95. } catch (Exception e) {
  96. return Result.error(e.getMessage());
  97. }
  98. }
  99. //撤回未审核的收款订单
  100. @PostMapping("/cancel")
  101. public Result cancel(@RequestBody CashCollection cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  102. try {
  103. String result = cashCollectionService.cancel(cashRecord.getOrderCode());
  104. String successMsg = languageTranslationUtil.translate(result, lang);
  105. return Result.success(successMsg);
  106. } catch (Exception e) {
  107. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  108. return Result.error(errorMsg);
  109. }
  110. }
  111. //重新提交审核的收款订单
  112. @PostMapping("/reSubmit")
  113. public Result reSubmit(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  114. try {
  115. // 解析语言代码
  116. String languageCode = parseLanguageCode(lang);
  117. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  118. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  119. convertTranslatedRecordFieldsToChinese(cashRecord, languageCode);
  120. }
  121. String result = cashCollectionService.reSubmit(cashRecord, lang);
  122. String successMsg = languageTranslationUtil.translate(result, lang);
  123. return Result.success(successMsg);
  124. } catch (Exception e) {
  125. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  126. return Result.error(errorMsg);
  127. }
  128. }
  129. //多条件查询收款订单列表
  130. @PostMapping("/selectCollection")
  131. public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  132. try {
  133. if (ObjectUtils.isEmpty(page.getPageNum())) {
  134. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  135. return Result.error(errorMsg);
  136. }
  137. if (ObjectUtils.isEmpty(page.getPageSize())) {
  138. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  139. return Result.error(errorMsg);
  140. } else {
  141. //解token权限
  142. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  143. String token = request.getHeader("token");
  144. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  145. if (admin != null) {
  146. List<String> list = Arrays.asList(admin.getMarkets().split(","));
  147. page.getCashCollection().setMarkets(list);
  148. // 解析语言代码
  149. String languageCode = parseLanguageCode(lang);
  150. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  151. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  152. convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode);
  153. }
  154. } else {
  155. String errorMsg = languageTranslationUtil.translate("角色为空", lang);
  156. return Result.error(errorMsg);
  157. }
  158. Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection()));
  159. // 对返回结果进行多语言转换
  160. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  161. PageInfo<CashCollection> pageInfo = (PageInfo<CashCollection>) result.getData();
  162. translateCashCollections(pageInfo, lang);
  163. }
  164. return result;
  165. }
  166. } catch (Exception e) {
  167. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  168. return Result.error(errorMsg);
  169. }
  170. }
  171. @PostMapping("/export")
  172. public Result export(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  173. try {
  174. if (ObjectUtils.isEmpty(page.getPageNum())) {
  175. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  176. return Result.error(errorMsg);
  177. }
  178. if (ObjectUtils.isEmpty(page.getPageSize())) {
  179. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  180. return Result.error(errorMsg);
  181. }
  182. // 解析语言代码
  183. String languageCode = parseLanguageCode(lang);
  184. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  185. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  186. convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode);
  187. }
  188. Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection()));
  189. // 对返回结果进行多语言转换
  190. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  191. PageInfo<CashCollection> pageInfo = (PageInfo<CashCollection>) result.getData();
  192. translateCashCollections(pageInfo, lang);
  193. }
  194. return result;
  195. } catch (Exception e) {
  196. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  197. return Result.error(errorMsg);
  198. }
  199. }
  200. //补全手续费等
  201. @PostMapping("/complete")
  202. public Result complete(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) {
  203. try {
  204. String result = cashCollectionService.complete(cashRecord);
  205. String successMsg = languageTranslationUtil.translate(result, lang);
  206. return Result.success(successMsg);
  207. } catch (Exception e) {
  208. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  209. return Result.error(errorMsg);
  210. }
  211. }
  212. //同步g_order订单到cash_record表
  213. @PostMapping("/syncToCashRecord")
  214. public Result syncToCashRecord(@RequestHeader(defaultValue = "zh_CN") String lang) {
  215. try {
  216. Object result = cashCollectionService.syncToCashRecord();
  217. return Result.success(result);
  218. } catch (Exception e) {
  219. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  220. return Result.error(errorMsg);
  221. }
  222. }
  223. //根据id查询收款订单
  224. @PostMapping("/selectById")
  225. public Result selectById(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) {
  226. try {
  227. CashCollection result = cashCollectionService.selectById(cashCollection);
  228. // 对返回结果进行多语言转换
  229. if (result != null) {
  230. translateSingleCashCollection(result, lang);
  231. }
  232. return Result.success(result);
  233. } catch (Exception e) {
  234. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  235. return Result.error(errorMsg);
  236. }
  237. }
  238. //根据goldcoin订单号查询收款订单
  239. @PostMapping("/selectByGoldCoinOrderCode")
  240. public Result selectByGoldCoinOrderCode(@RequestBody String orderNo, @RequestHeader(defaultValue = "zh_CN") String lang) {
  241. try {
  242. CashCollection result = cashCollectionService.selectByGoldCoinOrderCode(orderNo);
  243. // 对返回结果进行多语言转换
  244. if (result != null) {
  245. translateSingleCashCollection(result, lang);
  246. }
  247. return Result.success(result);
  248. } catch (Exception e) {
  249. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  250. return Result.error(errorMsg);
  251. }
  252. }
  253. //根据id查询收款订单
  254. @PostMapping("/performanceSelect")
  255. public Result performanceSelect(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  256. try {
  257. // 解析语言代码
  258. String languageCode = parseLanguageCode(lang);
  259. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  260. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  261. convertTranslatedPerformanceFieldsToChinese(page.getPerformanceVO(), languageCode);
  262. }
  263. Result result = Result.success(cashCollectionService.performanceSelect(page.getPageNum(), page.getPageSize(), page.getPerformanceDTO()));
  264. // 对返回结果进行多语言转换
  265. if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
  266. PageInfo<PerformanceVO> pageInfo = (PageInfo<PerformanceVO>) result.getData();
  267. translatePerformanceVOs(pageInfo, lang);
  268. }
  269. return result;
  270. } catch (Exception e) {
  271. String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
  272. return Result.error(errorMsg);
  273. }
  274. }
  275. /**
  276. * 转换现金收款订单的多语言字段
  277. */
  278. private void translateCashCollections(PageInfo<CashCollection> pageInfo, String lang) {
  279. if (pageInfo != null && pageInfo.getList() != null) {
  280. for (CashCollection collection : pageInfo.getList()) {
  281. translateSingleCashCollection(collection, lang);
  282. }
  283. }
  284. }
  285. /**
  286. * 转换单个现金收款订单的多语言字段
  287. */
  288. private void translateSingleCashCollection(CashCollection collection, String lang) {
  289. if (collection != null) {
  290. // 翻译市场名称
  291. if (collection.getMarketName() != null) {
  292. collection.setMarketName(languageTranslationUtil.translate(collection.getMarketName(), lang));
  293. }
  294. // 翻译商品名称
  295. if (collection.getGoodsName() != null) {
  296. collection.setGoodsName(languageTranslationUtil.translate(collection.getGoodsName(), lang));
  297. }
  298. // 翻译支付方式
  299. if (collection.getPayType() != null) {
  300. collection.setPayType(languageTranslationUtil.translate(collection.getPayType(), lang));
  301. }
  302. // 翻译到账地区
  303. if (collection.getReceivedMarket() != null) {
  304. collection.setReceivedMarket(languageTranslationUtil.translate(collection.getReceivedMarket(), lang));
  305. }
  306. // 翻译支付币种
  307. if (collection.getPaymentCurrency() != null) {
  308. collection.setPaymentCurrency(languageTranslationUtil.translate(collection.getPaymentCurrency(), lang));
  309. }
  310. // 翻译数量单位
  311. if (collection.getNumUnit() != null) {
  312. collection.setNumUnit(languageTranslationUtil.translate(collection.getNumUnit(), lang));
  313. }
  314. }
  315. }
  316. /**
  317. * 转换绩效数据的多语言字段
  318. */
  319. private void translatePerformanceVOs(PageInfo<PerformanceVO> pageInfo, String lang) {
  320. if (pageInfo != null && pageInfo.getList() != null) {
  321. for (PerformanceVO performance : pageInfo.getList()) {
  322. translateSinglePerformanceVO(performance, lang);
  323. }
  324. }
  325. }
  326. /**
  327. * 转换单个绩效数据的多语言字段
  328. */
  329. private void translateSinglePerformanceVO(PerformanceVO performance, String lang) {
  330. if (performance != null) {
  331. // 翻译市场名称
  332. if (performance.getMarketName() != null) {
  333. performance.setMarketName(languageTranslationUtil.translate(performance.getMarketName(), lang));
  334. }
  335. // 翻译支付币种
  336. if (performance.getPaymentCurrency() != null) {
  337. performance.setPaymentCurrency(languageTranslationUtil.translate(performance.getPaymentCurrency(), lang));
  338. }
  339. // 翻译到账币种
  340. if (performance.getReceivedCurrency() != null) {
  341. performance.setReceivedCurrency(languageTranslationUtil.translate(performance.getReceivedCurrency(), lang));
  342. }
  343. }
  344. }
  345. /**
  346. * 解析语言代码
  347. */
  348. private String parseLanguageCode(String langHeader) {
  349. if (langHeader == null || langHeader.isEmpty()) {
  350. return "zh";
  351. }
  352. // 处理类似 "en-US" 或 "zh-TW" 的情况
  353. if (langHeader.contains("-")) {
  354. String[] parts = langHeader.split("-");
  355. // 特殊处理中文繁体
  356. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  357. return "zh_TW";
  358. }
  359. return parts[0].toLowerCase();
  360. }
  361. return langHeader.toLowerCase();
  362. }
  363. /**
  364. * 将收款订单查询条件中的翻译字段转换为中文简体
  365. */
  366. private void convertTranslatedFieldsToChinese(CashCollection cashCollection, String languageCode) {
  367. if (cashCollection != null) {
  368. // 转换商品名称
  369. if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) {
  370. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  371. cashCollection.getGoodsName(), languageCode);
  372. cashCollection.setGoodsName(chineseGoodsName);
  373. }
  374. // 转换支付方式
  375. if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) {
  376. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  377. cashCollection.getPayType(), languageCode);
  378. cashCollection.setPayType(chinesePayType);
  379. }
  380. // 转换到账地区
  381. if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) {
  382. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  383. cashCollection.getReceivedMarket(), languageCode);
  384. cashCollection.setReceivedMarket(chineseMarket);
  385. }
  386. // 转换所属地区名称
  387. if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
  388. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  389. cashCollection.getMarketName(), languageCode);
  390. cashCollection.setMarketName(chineseMarketName);
  391. }
  392. // 转换数量单位
  393. if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
  394. String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
  395. cashCollection.getNumUnit(), languageCode);
  396. cashCollection.setNumUnit(chineseNumUnit);
  397. }
  398. }
  399. }
  400. /**
  401. * 将现金记录查询条件中的翻译字段转换为中文简体
  402. */
  403. private void convertTranslatedRecordFieldsToChinese(CashRecord cashRecord, String languageCode) {
  404. if (cashRecord != null) {
  405. // 转换商品名称
  406. if (cashRecord.getGoodsName() != null && !cashRecord.getGoodsName().isEmpty()) {
  407. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  408. cashRecord.getGoodsName(), languageCode);
  409. cashRecord.setGoodsName(chineseGoodsName);
  410. }
  411. // 转换支付方式
  412. if (cashRecord.getPayType() != null && !cashRecord.getPayType().isEmpty()) {
  413. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  414. cashRecord.getPayType(), languageCode);
  415. cashRecord.setPayType(chinesePayType);
  416. }
  417. // 转换到账地区
  418. if (cashRecord.getReceivedMarket() != null && !cashRecord.getReceivedMarket().isEmpty()) {
  419. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  420. cashRecord.getReceivedMarket(), languageCode);
  421. cashRecord.setReceivedMarket(chineseMarket);
  422. }
  423. }
  424. }
  425. /**
  426. * 将收款订单列表查询条件中的翻译字段转换为中文简体
  427. */
  428. private void convertTranslatedCollectionFieldsToChinese(CashCollection cashCollection, String languageCode) {
  429. if (cashCollection != null) {
  430. // 转换商品名称
  431. if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) {
  432. String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
  433. cashCollection.getGoodsName(), languageCode);
  434. cashCollection.setGoodsName(chineseGoodsName);
  435. }
  436. // 转换支付方式
  437. if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) {
  438. String chinesePayType = translationService.findChineseSimplifiedByTranslation(
  439. cashCollection.getPayType(), languageCode);
  440. cashCollection.setPayType(chinesePayType);
  441. }
  442. // 转换到账地区
  443. if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) {
  444. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  445. cashCollection.getReceivedMarket(), languageCode);
  446. cashCollection.setReceivedMarket(chineseMarket);
  447. }
  448. // 转换支付币种
  449. if (cashCollection.getPaymentCurrency() != null && !cashCollection.getPaymentCurrency().isEmpty()) {
  450. String chineseCurrency = translationService.findChineseSimplifiedByTranslation(
  451. cashCollection.getPaymentCurrency(), languageCode);
  452. cashCollection.setPaymentCurrency(chineseCurrency);
  453. }
  454. // 转换提交人地区
  455. if (cashCollection.getSubmitterMarket() != null && !cashCollection.getSubmitterMarket().isEmpty()) {
  456. String chineseMarket = translationService.findChineseSimplifiedByTranslation(
  457. cashCollection.getSubmitterMarket(), languageCode);
  458. cashCollection.setSubmitterMarket(chineseMarket);
  459. }
  460. // 转换所属地区名称
  461. if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
  462. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  463. cashCollection.getMarketName(), languageCode);
  464. cashCollection.setMarketName(chineseMarketName);
  465. }
  466. // 转换数量单位
  467. if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
  468. String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
  469. cashCollection.getNumUnit(), languageCode);
  470. cashCollection.setNumUnit(chineseNumUnit);
  471. }
  472. }
  473. }
  474. /**
  475. * 将绩效查询条件中的翻译字段转换为中文简体
  476. */
  477. private void convertTranslatedPerformanceFieldsToChinese(PerformanceVO performanceVO, String languageCode) {
  478. if (performanceVO != null) {
  479. // 转换市场名称
  480. if (performanceVO.getMarketName() != null && !performanceVO.getMarketName().isEmpty()) {
  481. String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
  482. performanceVO.getMarketName(), languageCode);
  483. performanceVO.setMarketName(chineseMarketName);
  484. }
  485. // 转换支付币种
  486. if (performanceVO.getPaymentCurrency() != null && !performanceVO.getPaymentCurrency().isEmpty()) {
  487. String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation(
  488. performanceVO.getPaymentCurrency(), languageCode);
  489. performanceVO.setPaymentCurrency(chinesePaymentCurrency);
  490. }
  491. // 转换到账币种
  492. if (performanceVO.getReceivedCurrency() != null && !performanceVO.getReceivedCurrency().isEmpty()) {
  493. String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation(
  494. performanceVO.getReceivedCurrency(), languageCode);
  495. performanceVO.setReceivedCurrency(chineseReceivedCurrency);
  496. }
  497. }
  498. }
  499. }