package com.example.demo.controller.coin; import com.example.demo.config.interfac.Log; import com.example.demo.domain.vo.coin.AreaInfo; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.RechargeActivity; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.RechargeActivityCenterService; import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @program: gold-java * @ClassName RechargeActivityCenterController * @description: 充值活动中心管理 * @author: Double * @create: 2025−11-04 14:23 * @Version 1.0 **/ @RestController @RequestMapping("/admin/coin/rechargeActivityCenter") @RequiredArgsConstructor @Slf4j @CrossOrigin public class RechargeActivityCenterController { @Autowired private RechargeActivityCenterService rechargeActivityCenterService; // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @Autowired private TranslationService translationService; /** * 导出用户权限数据 * * @param page 导出请求参数) * @return 导出结果(成功返回活动信息,失败返回错误信息) * @throws NullPointerException 当参数为空时抛出(如activity为null、关键属性为null) * @throws IllegalArgumentException 当参数无效时抛出(如活动ID非法、参数格式错误) */ @Log("条件查询充值活动") @PostMapping("/queryActivity") public Result queryActivity(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertTranslatedQueryFieldsToChinese(page.getRechargeActivity(), languageCode); } //校验参数 if (ObjectUtils.isEmpty(page.getPageNum())) { String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); return Result.error(errorMsg); } if (ObjectUtils.isEmpty(page.getPageSize())) { String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); return Result.error(errorMsg); } if (page.getRechargeActivity() == null) { String errorMsg = languageTranslationUtil.translate("查询失败:活动信息不能为空", lang); return Result.error(errorMsg); } Result result = Result.success(rechargeActivityCenterService.queryActivity(page.getPageNum(), page.getPageSize(), page.getRechargeActivity())); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); translateRechargeActivities(pageInfo, lang); } return result; } catch (NullPointerException e) { log.error("查询活动失败:空指针异常", e); String errorMsg = languageTranslationUtil.translate("查询失败:数据为空", lang); return Result.error(errorMsg); } catch (IllegalArgumentException e) { log.error("查询活动失败:参数异常", e); String errorMsg = languageTranslationUtil.translate("查询失败:" + e.getMessage(), lang); return Result.error(errorMsg); } } /** * 新增充值活动 * * @param activity 充值活动请求参数(包含活动名称、活动规则等信息) * @return 新增结果(成功返回提示信息,失败返回错误原因) * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动名称等关键属性为null) * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、参数格式不符合要求等) */ @Log("新增充值活动") @PostMapping("/addActivity") public Result addActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertTranslatedActivityFieldsToChinese(activity, languageCode); } if (activity == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动信息不能为空", lang); return Result.error(errorMsg); } if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:活动名称不能为空", lang); return Result.error(errorMsg); } if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:业绩归属地不能为空", lang); return Result.error(errorMsg); }else if (activity.getBusinessBelong().equals("活动归属地")) { if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:地区不能为空", lang); return Result.error(errorMsg); } } if (activity.getStartTime() == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动开始时间不能为空", lang); return Result.error(errorMsg); } if (activity.getEndTime() == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间不能为空", lang); return Result.error(errorMsg); } if (activity.getEndTime().before(activity.getStartTime())) { String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间必须晚于活动开始时间", lang); return Result.error(errorMsg); } if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:添加人不能为空", lang); return Result.error(errorMsg); } rechargeActivityCenterService.addActivity(activity); String successMsg = languageTranslationUtil.translate("添加活动成功", lang); return Result.success(successMsg); } catch (NullPointerException e) { log.error("添加活动失败:空指针异常", e); String errorMsg = languageTranslationUtil.translate("添加失败:数据为空", lang); return Result.error(errorMsg); } catch (IllegalArgumentException e) { log.error("添加活动失败:参数异常", e); String errorMsg = languageTranslationUtil.translate("添加失败:" + e.getMessage(), lang); return Result.error(errorMsg); } } /** * 更新充值活动 * * @param activity 充值活动更新参数(包含活动ID、待更新的活动名称等信息) * @return 更新结果(成功返回提示信息,失败返回错误原因) * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动ID、活动名称等关键属性为null) * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、活动ID格式错误等) */ @Log("更新充值活动") @PostMapping("/updateActivity") public Result updateActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertTranslatedActivityFieldsToChinese(activity, languageCode); } if (activity == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动信息不能为空", lang); return Result.error(errorMsg); } if (activity.getId() == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动ID不能为空", lang); return Result.error(errorMsg); } if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:活动名称不能为空", lang); return Result.error(errorMsg); } if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:业绩归属地不能为空", lang); return Result.error(errorMsg); }else if (activity.getBusinessBelong().equals("活动归属地")) { if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:地区不能为空", lang); return Result.error(errorMsg); } } if (activity.getStartTime() == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动开始时间不能为空", lang); return Result.error(errorMsg); } if (activity.getEndTime() == null) { String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间不能为空", lang); return Result.error(errorMsg); } if (activity.getEndTime().before(activity.getStartTime())) { String errorMsg = languageTranslationUtil.translate("添加失败:活动结束时间必须晚于活动开始时间", lang); return Result.error(errorMsg); } if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { String errorMsg = languageTranslationUtil.translate("添加失败:添加人不能为空", lang); return Result.error(errorMsg); } rechargeActivityCenterService.updateActivity(activity); String successMsg = languageTranslationUtil.translate("更新活动成功", lang); return Result.success(successMsg); } catch (NullPointerException e) { log.error("更新活动失败:空指针异常", e); String errorMsg = languageTranslationUtil.translate("更新失败:数据为空", lang); return Result.error(errorMsg); } catch (IllegalArgumentException e) { log.error("更新活动失败:参数异常", e); String errorMsg = languageTranslationUtil.translate("更新失败:" + e.getMessage(), lang); return Result.error(errorMsg); } } /** * 删除充值活动 * * @param activity 待删除的充值活动ID * @return 删除结果(成功返回提示信息,失败返回错误原因) * @throws NullPointerException 当活动ID为空时抛出(如id为null) * @throws IllegalArgumentException 当活动ID无效时抛出(如id为负数、非整数格式等不符合业务要求的情况) */ @Log("删除充值活动") @PostMapping("/deleteActivity") public Result deleteActivity(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) { try { if (activity.getId() == null) { String errorMsg = languageTranslationUtil.translate("删除失败:活动ID不能为空", lang); return Result.error(errorMsg); } rechargeActivityCenterService.deleteActivity(activity); String successMsg = languageTranslationUtil.translate("删除活动成功", lang); return Result.success(successMsg); } catch (NullPointerException e) { log.error("删除活动失败:空指针异常", e); String errorMsg = languageTranslationUtil.translate("删除失败:数据为空", lang); return Result.error(errorMsg); } catch (IllegalArgumentException e) { log.error("删除活动失败:参数异常", e); String errorMsg = languageTranslationUtil.translate("删除失败:" + e.getMessage(), lang); return Result.error(errorMsg); } } /** * 根据活动 ID 查询归属地 * * @param activity 充值活动请求参数(包含活动 ID) * @return 查询结果(成功返回归属地信息,失败返回错误信息) * @throws NullPointerException 当活动 ID 为空时抛出 * @throws IllegalArgumentException 当活动 ID 无效时抛出 */ @Log("查询活动归属地") @PostMapping("/queryActivityArea") public Result queryActivityArea(@RequestBody RechargeActivity activity, @RequestHeader(defaultValue = "zh_CN") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); if (activity.getId() == null) { String errorMsg = languageTranslationUtil.translate("查询失败:活动 ID 不能为空", lang); return Result.error(errorMsg); } AreaInfo result = rechargeActivityCenterService.queryActivityAreaById(activity.getId()); // 如果 area 为 "0",直接返回 if ("0".equals(result.getArea())) { return Result.success(result); } // 对返回结果进行多语言转换 if (result.getArea() != null && !result.getArea().isEmpty()) { result.setArea(languageTranslationUtil.translate(result.getArea(), lang)); } if (result.getAreaName() != null && !result.getAreaName().isEmpty()) { result.setAreaName(languageTranslationUtil.translate(result.getAreaName(), lang)); } return Result.success(result); } catch (NullPointerException e) { log.error("查询活动归属地失败:空指针异常", e); String errorMsg = languageTranslationUtil.translate("查询失败:数据为空", lang); return Result.error(errorMsg); } catch (IllegalArgumentException e) { log.error("查询活动归属地失败:参数异常", e); String errorMsg = languageTranslationUtil.translate("查询失败:" + e.getMessage(), lang); return Result.error(errorMsg); } } /** * 转换充值活动的多语言字段 */ private void translateRechargeActivities(com.github.pagehelper.PageInfo pageInfo, String lang) { if (pageInfo != null && pageInfo.getList() != null) { for (RechargeActivity activity : pageInfo.getList()) { // 翻译业务归属 if (activity.getBusinessBelong() != null) { activity.setBusinessBelong(languageTranslationUtil.translate(activity.getBusinessBelong(), lang)); } // 翻译地区名称 if (activity.getAreaName() != null) { activity.setAreaName(languageTranslationUtil.translate(activity.getAreaName(), lang)); } } } } /** * 解析语言代码 */ private String parseLanguageCode(String langHeader) { if (langHeader == null || langHeader.isEmpty()) { return "zh"; } // 处理类似 "en-US" 或 "zh-TW" 的情况 if (langHeader.contains("-")) { String[] parts = langHeader.split("-"); // 特殊处理中文繁体 if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) { return "zh_TW"; } return parts[0].toLowerCase(); } return langHeader.toLowerCase(); } /** * 将查询条件中的翻译字段转换为中文简体 */ private void convertTranslatedQueryFieldsToChinese(RechargeActivity activity, String languageCode) { if (activity != null) { // 转换业务归属 if (activity.getBusinessBelong() != null && !activity.getBusinessBelong().isEmpty()) { String chineseBelong = translationService.findChineseSimplifiedByTranslation( activity.getBusinessBelong(), languageCode); activity.setBusinessBelong(chineseBelong); } // 转换地区 if (activity.getAreaName() != null && !activity.getAreaName().isEmpty()) { String chineseArea = translationService.findChineseSimplifiedByTranslation( activity.getAreaName(), languageCode); activity.setAreaName(chineseArea); } } } /** * 将活动字段中的翻译字段转换为中文简体 */ private void convertTranslatedActivityFieldsToChinese(RechargeActivity activity, String languageCode) { if (activity != null) { // 转换业务归属 if (activity.getBusinessBelong() != null && !activity.getBusinessBelong().isEmpty()) { String chineseBelong = translationService.findChineseSimplifiedByTranslation( activity.getBusinessBelong(), languageCode); activity.setBusinessBelong(chineseBelong); } // 转换地区 if (activity.getArea() != null && !activity.getArea().isEmpty()) { String chineseArea = translationService.findChineseSimplifiedByTranslation( activity.getArea(), languageCode); activity.setArea(chineseArea); } } } }