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.

392 lines
19 KiB

  1. package com.example.demo.controller.coin;
  2. import com.example.demo.config.interfac.Log;
  3. import com.example.demo.domain.vo.coin.AreaInfo;
  4. import com.example.demo.domain.vo.coin.Page;
  5. import com.example.demo.domain.vo.coin.RechargeActivity;
  6. import com.example.demo.domain.vo.coin.Result;
  7. import com.example.demo.service.coin.RechargeActivityCenterService;
  8. import com.example.demo.Util.LanguageTranslationUtil;
  9. import com.example.demo.service.coin.TranslationService;
  10. import lombok.RequiredArgsConstructor;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.util.ObjectUtils;
  14. import org.springframework.web.bind.annotation.*;
  15. import java.util.List;
  16. /**
  17. * @program: gold-java
  18. * @ClassName RechargeActivityCenterController
  19. * @description: 充值活动中心管理
  20. * @author: Double
  21. * @create: 202511-04 14:23
  22. * @Version 1.0
  23. **/
  24. @RestController
  25. @RequestMapping("/admin/coin/rechargeActivityCenter")
  26. @RequiredArgsConstructor
  27. @Slf4j
  28. @CrossOrigin
  29. public class RechargeActivityCenterController {
  30. @Autowired
  31. private RechargeActivityCenterService rechargeActivityCenterService;
  32. // 注入多语言转换工具类
  33. @Autowired
  34. private LanguageTranslationUtil languageTranslationUtil;
  35. @Autowired
  36. private TranslationService translationService;
  37. /**
  38. * 导出用户权限数据
  39. *
  40. * @param page 导出请求参数
  41. * @return 导出结果成功返回活动信息失败返回错误信息
  42. * @throws NullPointerException 当参数为空时抛出如activity为null关键属性为null
  43. * @throws IllegalArgumentException 当参数无效时抛出如活动ID非法参数格式错误
  44. */
  45. @Log("条件查询充值活动")
  46. @PostMapping("/queryActivity")
  47. public Result queryActivity(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
  48. try {
  49. // 解析语言代码
  50. String languageCode = parseLanguageCode(lang);
  51. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  52. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  53. convertTranslatedQueryFieldsToChinese(page.getRechargeActivity(), languageCode);
  54. }
  55. //校验参数
  56. if (ObjectUtils.isEmpty(page.getPageNum())) {
  57. String errorMsg = languageTranslationUtil.translate("页码数为空!", lang);
  58. return Result.error(errorMsg);
  59. }
  60. if (ObjectUtils.isEmpty(page.getPageSize())) {
  61. String errorMsg = languageTranslationUtil.translate("页大小为空!", lang);
  62. return Result.error(errorMsg);
  63. }
  64. if (page.getRechargeActivity() == null) {
  65. String errorMsg = languageTranslationUtil.translate("查询失败:活动信息不能为空", lang);
  66. return Result.error(errorMsg);
  67. }
  68. Result result = Result.success(rechargeActivityCenterService.queryActivity(page.getPageNum(), page.getPageSize(), page.getRechargeActivity()));
  69. // 对返回结果进行多语言转换
  70. if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) {
  71. com.github.pagehelper.PageInfo<RechargeActivity> pageInfo = (com.github.pagehelper.PageInfo<RechargeActivity>) result.getData();
  72. translateRechargeActivities(pageInfo, lang);
  73. }
  74. return result;
  75. } catch (NullPointerException e) {
  76. log.error("查询活动失败:空指针异常", e);
  77. String errorMsg = languageTranslationUtil.translate("查询失败:数据为空", lang);
  78. return Result.error(errorMsg);
  79. } catch (IllegalArgumentException e) {
  80. log.error("查询活动失败:参数异常", e);
  81. String errorMsg = languageTranslationUtil.translate("查询失败:" + e.getMessage(), lang);
  82. return Result.error(errorMsg);
  83. }
  84. }
  85. /**
  86. * 新增充值活动
  87. *
  88. * @param activity 充值活动请求参数包含活动名称活动规则等信息
  89. * @return 新增结果成功返回提示信息失败返回错误原因
  90. * @throws NullPointerException 当请求参数为空时抛出如activity为null活动名称等关键属性为null
  91. * @throws IllegalArgumentException 当请求参数无效时抛出如活动名称为空字符串参数格式不符合要求等
  92. */
  93. @Log("新增充值活动")
  94. @PostMapping("/addActivity")
  95. public Result addActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) {
  96. try {
  97. // 解析语言代码
  98. String languageCode = parseLanguageCode(lang);
  99. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  100. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  101. convertTranslatedActivityFieldsToChinese(activity, languageCode);
  102. }
  103. if (activity == null) {
  104. String errorMsg = languageTranslationUtil.translate("添加失败:活动信息不能为空", lang);
  105. return Result.error(errorMsg);
  106. }
  107. if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) {
  108. String errorMsg = languageTranslationUtil.translate("添加失败:活动名称不能为空", lang);
  109. return Result.error(errorMsg);
  110. }
  111. if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) {
  112. String errorMsg = languageTranslationUtil.translate("添加失败:业绩归属地不能为空", lang);
  113. return Result.error(errorMsg);
  114. }else if (activity.getBusinessBelong().equals("活动归属地")) {
  115. if (activity.getArea() == null || activity.getArea().trim().isEmpty()) {
  116. String errorMsg = languageTranslationUtil.translate("添加失败:地区不能为空", lang);
  117. return Result.error(errorMsg);
  118. }
  119. }
  120. if (activity.getStartTime() == null) {
  121. String errorMsg = languageTranslationUtil.translate("添加失败:活动开始时间不能为空", lang);
  122. return Result.error(errorMsg);
  123. }
  124. if (activity.getEndTime() == null) {
  125. String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间不能为空", lang);
  126. return Result.error(errorMsg);
  127. }
  128. if (activity.getEndTime().before(activity.getStartTime())) {
  129. String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间必须晚于活动开始时间", lang);
  130. return Result.error(errorMsg);
  131. }
  132. if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) {
  133. String errorMsg = languageTranslationUtil.translate("添加失败:添加人不能为空", lang);
  134. return Result.error(errorMsg);
  135. }
  136. rechargeActivityCenterService.addActivity(activity);
  137. String successMsg = languageTranslationUtil.translate("添加活动成功", lang);
  138. return Result.success(successMsg);
  139. } catch (NullPointerException e) {
  140. log.error("添加活动失败:空指针异常", e);
  141. String errorMsg = languageTranslationUtil.translate("添加失败:数据为空", lang);
  142. return Result.error(errorMsg);
  143. } catch (IllegalArgumentException e) {
  144. log.error("添加活动失败:参数异常", e);
  145. String errorMsg = languageTranslationUtil.translate("添加失败:" + e.getMessage(), lang);
  146. return Result.error(errorMsg);
  147. }
  148. }
  149. /**
  150. * 更新充值活动
  151. *
  152. * @param activity 充值活动更新参数包含活动ID待更新的活动名称等信息
  153. * @return 更新结果成功返回提示信息失败返回错误原因
  154. * @throws NullPointerException 当请求参数为空时抛出如activity为null活动ID活动名称等关键属性为null
  155. * @throws IllegalArgumentException 当请求参数无效时抛出如活动名称为空字符串活动ID格式错误等
  156. */
  157. @Log("更新充值活动")
  158. @PostMapping("/updateActivity")
  159. public Result updateActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) {
  160. try {
  161. // 解析语言代码
  162. String languageCode = parseLanguageCode(lang);
  163. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  164. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  165. convertTranslatedActivityFieldsToChinese(activity, languageCode);
  166. }
  167. if (activity == null) {
  168. String errorMsg = languageTranslationUtil.translate("添加失败:活动信息不能为空", lang);
  169. return Result.error(errorMsg);
  170. }
  171. if (activity.getId() == null) {
  172. String errorMsg = languageTranslationUtil.translate("添加失败:活动ID不能为空", lang);
  173. return Result.error(errorMsg);
  174. }
  175. if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) {
  176. String errorMsg = languageTranslationUtil.translate("添加失败:活动名称不能为空", lang);
  177. return Result.error(errorMsg);
  178. }
  179. if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) {
  180. String errorMsg = languageTranslationUtil.translate("添加失败:业绩归属地不能为空", lang);
  181. return Result.error(errorMsg);
  182. }else if (activity.getBusinessBelong().equals("活动归属地")) {
  183. if (activity.getArea() == null || activity.getArea().trim().isEmpty()) {
  184. String errorMsg = languageTranslationUtil.translate("添加失败:地区不能为空", lang);
  185. return Result.error(errorMsg);
  186. }
  187. }
  188. if (activity.getStartTime() == null) {
  189. String errorMsg = languageTranslationUtil.translate("添加失败:活动开始时间不能为空", lang);
  190. return Result.error(errorMsg);
  191. }
  192. if (activity.getEndTime() == null) {
  193. String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间不能为空", lang);
  194. return Result.error(errorMsg);
  195. }
  196. if (activity.getEndTime().before(activity.getStartTime())) {
  197. String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间必须晚于活动开始时间", lang);
  198. return Result.error(errorMsg);
  199. }
  200. if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) {
  201. String errorMsg = languageTranslationUtil.translate("添加失败:添加人不能为空", lang);
  202. return Result.error(errorMsg);
  203. }
  204. rechargeActivityCenterService.updateActivity(activity);
  205. String successMsg = languageTranslationUtil.translate("更新活动成功", lang);
  206. return Result.success(successMsg);
  207. } catch (NullPointerException e) {
  208. log.error("更新活动失败:空指针异常", e);
  209. String errorMsg = languageTranslationUtil.translate("更新失败:数据为空", lang);
  210. return Result.error(errorMsg);
  211. } catch (IllegalArgumentException e) {
  212. log.error("更新活动失败:参数异常", e);
  213. String errorMsg = languageTranslationUtil.translate("更新失败:" + e.getMessage(), lang);
  214. return Result.error(errorMsg);
  215. }
  216. }
  217. /**
  218. * 删除充值活动
  219. *
  220. * @param activity 待删除的充值活动ID
  221. * @return 删除结果成功返回提示信息失败返回错误原因
  222. * @throws NullPointerException 当活动ID为空时抛出如id为null
  223. * @throws IllegalArgumentException 当活动ID无效时抛出如id为负数非整数格式等不符合业务要求的情况
  224. */
  225. @Log("删除充值活动")
  226. @PostMapping("/deleteActivity")
  227. public Result deleteActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) {
  228. try {
  229. if (activity.getId() == null) {
  230. String errorMsg = languageTranslationUtil.translate("删除失败:活动ID不能为空", lang);
  231. return Result.error(errorMsg);
  232. }
  233. rechargeActivityCenterService.deleteActivity(activity);
  234. String successMsg = languageTranslationUtil.translate("删除活动成功", lang);
  235. return Result.success(successMsg);
  236. } catch (NullPointerException e) {
  237. log.error("删除活动失败:空指针异常", e);
  238. String errorMsg = languageTranslationUtil.translate("删除失败:数据为空", lang);
  239. return Result.error(errorMsg);
  240. } catch (IllegalArgumentException e) {
  241. log.error("删除活动失败:参数异常", e);
  242. String errorMsg = languageTranslationUtil.translate("删除失败:" + e.getMessage(), lang);
  243. return Result.error(errorMsg);
  244. }
  245. }
  246. /**
  247. * 根据活动 ID 查询归属地
  248. *
  249. * @param activity 充值活动请求参数包含活动 ID
  250. * @return 查询结果成功返回归属地信息失败返回错误信息
  251. * @throws NullPointerException 当活动 ID 为空时抛出
  252. * @throws IllegalArgumentException 当活动 ID 无效时抛出
  253. */
  254. @Log("查询活动归属地")
  255. @PostMapping("/queryActivityArea")
  256. public Result queryActivityArea(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) {
  257. try {
  258. // 解析语言代码
  259. String languageCode = parseLanguageCode(lang);
  260. if (activity.getId() == null) {
  261. String errorMsg = languageTranslationUtil.translate("查询失败:活动 ID 不能为空", lang);
  262. return Result.error(errorMsg);
  263. }
  264. AreaInfo result = rechargeActivityCenterService.queryActivityAreaById(activity.getId());
  265. // 如果 area 为 "0",直接返回
  266. if ("0".equals(result.getArea())) {
  267. return Result.success(result);
  268. }
  269. // 对返回结果进行多语言转换
  270. if (result.getArea() != null && !result.getArea().isEmpty()) {
  271. result.setArea(languageTranslationUtil.translate(result.getArea(), lang));
  272. }
  273. if (result.getAreaName() != null && !result.getAreaName().isEmpty()) {
  274. result.setAreaName(languageTranslationUtil.translate(result.getAreaName(), lang));
  275. }
  276. return Result.success(result);
  277. } catch (NullPointerException e) {
  278. log.error("查询活动归属地失败:空指针异常", e);
  279. String errorMsg = languageTranslationUtil.translate("查询失败:数据为空", lang);
  280. return Result.error(errorMsg);
  281. } catch (IllegalArgumentException e) {
  282. log.error("查询活动归属地失败:参数异常", e);
  283. String errorMsg = languageTranslationUtil.translate("查询失败:" + e.getMessage(), lang);
  284. return Result.error(errorMsg);
  285. }
  286. }
  287. /**
  288. * 转换充值活动的多语言字段
  289. */
  290. private void translateRechargeActivities(com.github.pagehelper.PageInfo<RechargeActivity> pageInfo, String lang) {
  291. if (pageInfo != null && pageInfo.getList() != null) {
  292. for (RechargeActivity activity : pageInfo.getList()) {
  293. // 翻译业务归属
  294. if (activity.getBusinessBelong() != null) {
  295. activity.setBusinessBelong(languageTranslationUtil.translate(activity.getBusinessBelong(), lang));
  296. }
  297. // 翻译地区名称
  298. if (activity.getAreaName() != null) {
  299. activity.setAreaName(languageTranslationUtil.translate(activity.getAreaName(), lang));
  300. }
  301. }
  302. }
  303. }
  304. /**
  305. * 解析语言代码
  306. */
  307. private String parseLanguageCode(String langHeader) {
  308. if (langHeader == null || langHeader.isEmpty()) {
  309. return "zh";
  310. }
  311. // 处理类似 "en-US" 或 "zh-TW" 的情况
  312. if (langHeader.contains("-")) {
  313. String[] parts = langHeader.split("-");
  314. // 特殊处理中文繁体
  315. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  316. return "zh_TW";
  317. }
  318. return parts[0].toLowerCase();
  319. }
  320. return langHeader.toLowerCase();
  321. }
  322. /**
  323. * 将查询条件中的翻译字段转换为中文简体
  324. */
  325. private void convertTranslatedQueryFieldsToChinese(RechargeActivity activity, String languageCode) {
  326. if (activity != null) {
  327. // 转换业务归属
  328. if (activity.getBusinessBelong() != null && !activity.getBusinessBelong().isEmpty()) {
  329. String chineseBelong = translationService.findChineseSimplifiedByTranslation(
  330. activity.getBusinessBelong(), languageCode);
  331. activity.setBusinessBelong(chineseBelong);
  332. }
  333. // 转换地区
  334. if (activity.getAreaName() != null && !activity.getAreaName().isEmpty()) {
  335. String chineseArea = translationService.findChineseSimplifiedByTranslation(
  336. activity.getAreaName(), languageCode);
  337. activity.setAreaName(chineseArea);
  338. }
  339. }
  340. }
  341. /**
  342. * 将活动字段中的翻译字段转换为中文简体
  343. */
  344. private void convertTranslatedActivityFieldsToChinese(RechargeActivity activity, String languageCode) {
  345. if (activity != null) {
  346. // 转换业务归属
  347. if (activity.getBusinessBelong() != null && !activity.getBusinessBelong().isEmpty()) {
  348. String chineseBelong = translationService.findChineseSimplifiedByTranslation(
  349. activity.getBusinessBelong(), languageCode);
  350. activity.setBusinessBelong(chineseBelong);
  351. }
  352. // 转换地区
  353. if (activity.getArea() != null && !activity.getArea().isEmpty()) {
  354. String chineseArea = translationService.findChineseSimplifiedByTranslation(
  355. activity.getArea(), languageCode);
  356. activity.setArea(chineseArea);
  357. }
  358. }
  359. }
  360. }