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.

515 lines
22 KiB

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