feat(国际化): 新增国际化

This commit is contained in:
gx_ma
2026-03-24 11:41:41 +08:00
parent abe46baf18
commit e70c198071
97 changed files with 10802 additions and 5302 deletions

View File

@@ -1,6 +1,7 @@
package com.fastbee.data.controller;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.utils.MessageUtils;
import org.springframework.web.bind.annotation.*;
/**
@@ -18,7 +19,7 @@ public class AuthResourceController extends BaseController
*/
@GetMapping("/product")
public String findAll() {
return "查询产品列表成功!";
return MessageUtils.message("auth.resource.product.query.success");
}

View File

@@ -6,6 +6,7 @@ import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.iot.domain.Device;
@@ -199,10 +200,10 @@ public class DeviceController extends BaseController
public AjaxResult relateUser(@RequestBody DeviceRelateUserInput deviceRelateUserInput)
{
if(deviceRelateUserInput.getUserId()==0 || deviceRelateUserInput.getUserId()==null){
return AjaxResult.error("用户ID不能为空");
return AjaxResult.error(MessageUtils.message("device.user.id.null"));
}
if(deviceRelateUserInput.getDeviceNumberAndProductIds()==null || deviceRelateUserInput.getDeviceNumberAndProductIds().size()==0){
return AjaxResult.error("设备编号和产品ID不能为空");
return AjaxResult.error(MessageUtils.message("device.product.id.null"));
}
return deviceService.deviceRelateUser(deviceRelateUserInput);
}

View File

@@ -6,6 +6,8 @@ import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.exception.job.TaskException;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.iot.domain.DeviceJob;
import com.fastbee.iot.service.IDeviceJobService;
@@ -82,7 +84,7 @@ public class DeviceJobController extends BaseController
{
if (!CronUtils.isValid(job.getCronExpression()))
{
return error("新增任务'" + job.getJobName() + "'失败Cron表达式不正确");
return error(StringUtils.format(MessageUtils.message("job.add.failed.cron.not.valid"), job.getJobName()));
}
job.setCreateBy(getUsername());
return toAjax(jobService.insertJob(job));
@@ -99,7 +101,7 @@ public class DeviceJobController extends BaseController
{
if (!CronUtils.isValid(job.getCronExpression()))
{
return error("修改任务'" + job.getJobName() + "'失败Cron表达式不正确");
return error(StringUtils.format(MessageUtils.message("job.add.failed.product.not.modbus.config"), job.getJobName()));
}
job.setUpdateBy(getUsername());
return toAjax(jobService.updateJob(job));

View File

@@ -2,6 +2,7 @@ package com.fastbee.data.controller;
import java.util.List;
import com.fastbee.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -128,7 +129,7 @@ public class DeviceUserController extends BaseController
{
int count=deviceUserService.deleteDeviceUser(deviceUser);
if(count==0){
return AjaxResult.error("设备所有者不能删除");
return AjaxResult.error(MessageUtils.message("device.user.delete.failed.user.not.valid"));
}else{
return AjaxResult.success();
}

View File

@@ -15,6 +15,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.fastbee.common.constant.Constants.LANGUAGE;
/**
* 第三方登录接口Controller
*
@@ -69,9 +71,9 @@ public class SocialLoginController {
@GetMapping("/login/{loginId}")
@ApiOperation("跳转登录api")
@ApiImplicitParam(name = "loginId", value = "登录Id", required = true, dataType = "String", paramType = "path", dataTypeClass = String.class)
public AjaxResult socialLogin(@PathVariable String loginId) {
public AjaxResult socialLogin(HttpServletRequest request, @PathVariable String loginId) {
// 生成授权页面
return iSocialLoginService.socialLogin(loginId);
return iSocialLoginService.socialLogin(loginId, request.getHeader(LANGUAGE));
}
/**
@@ -82,8 +84,8 @@ public class SocialLoginController {
*/
@ApiOperation("绑定登录方法")
@PostMapping("/bind/login")
public AjaxResult bindLogin(@RequestBody BindLoginBody bindLoginBody) {
return iSocialLoginService.bindLogin(bindLoginBody);
public AjaxResult bindLogin(HttpServletRequest request, @RequestBody BindLoginBody bindLoginBody) {
return iSocialLoginService.bindLogin(bindLoginBody, request.getHeader(LANGUAGE));
}
/**
@@ -94,8 +96,8 @@ public class SocialLoginController {
*/
@ApiOperation("注册绑定")
@PostMapping("/bind/register")
public AjaxResult bindRegister(@RequestBody BindRegisterBody bindRegisterBody) {
return iSocialLoginService.bindRegister(bindRegisterBody);
public AjaxResult bindRegister(HttpServletRequest request, @RequestBody BindRegisterBody bindRegisterBody) {
return iSocialLoginService.bindRegister(bindRegisterBody, request.getHeader(LANGUAGE));
}
}

View File

@@ -5,6 +5,7 @@ import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.iot.domain.ThingsModel;
@@ -86,7 +87,7 @@ public class ThingsModelController extends BaseController
if(result==1){
return AjaxResult.success();
}else if(result==2){
return AjaxResult.error("产品下的标识符不能重复");
return AjaxResult.error(MessageUtils.message("things.model.identifier.repeat"));
}else{
return AjaxResult.error();
}
@@ -98,9 +99,9 @@ public class ThingsModelController extends BaseController
public AjaxResult ImportByTemplateIds(@RequestBody ImportThingsModelInput input){
int repeatCount=thingsModelService.importByTemplateIds(input);
if(repeatCount==0){
return AjaxResult.success("数据导入成功");
return AjaxResult.success(MessageUtils.message("import.success"));
}else{
return AjaxResult.success(repeatCount+"条数据未导入,标识符重复");
return AjaxResult.success(StringUtils.format(MessageUtils.message("things.model.import.failed.identifier.repeat"), repeatCount));
}
}
@@ -117,7 +118,7 @@ public class ThingsModelController extends BaseController
if(result==1){
return AjaxResult.success();
}else if(result==2){
return AjaxResult.error("产品下的标识符不能重复");
return AjaxResult.error(MessageUtils.message("things.model.identifier.repeat"));
}else{
return AjaxResult.error();
}
@@ -143,7 +144,7 @@ public class ThingsModelController extends BaseController
@ApiOperation("获取缓存的JSON物模型")
public AjaxResult getCacheThingsModelByProductId(@PathVariable("productId") Long productId)
{
return AjaxResult.success("操作成功",thingsModelService.getCacheThingsModelByProductId(productId));
return AjaxResult.success(MessageUtils.message("operate.success"),thingsModelService.getCacheThingsModelByProductId(productId));
}
@ApiOperation(value = "物模型导入模板")

View File

@@ -12,6 +12,7 @@ import com.fastbee.common.core.iot.response.DeCodeBo;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.exception.file.FileNameLengthLimitExceededException;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.file.FileUploadUtils;
import com.fastbee.common.utils.file.FileUtils;
@@ -71,13 +72,13 @@ import static com.fastbee.common.utils.file.FileUploadUtils.getExtension;
public class ToolController extends BaseController {
private static final Logger log = LoggerFactory.getLogger(ToolController.class);
@Autowired
@Resource
private IDeviceService deviceService;
@Autowired
@Resource
private IMqttMessagePublish messagePublish;
@Autowired
@Resource
private MqttClientConfig mqttConfig;
@Autowired
@Resource
private IToolService toolService;
// 令牌秘钥
@Value("${token.secret}")
@@ -119,7 +120,7 @@ public class ToolController extends BaseController {
log.info("-----------服务端mqtt认证成功,clientId:" + clientid + "---------------");
return ResponseEntity.ok().body("ok");
} else {
return toolService.returnUnauthorized(new MqttAuthenticationModel(clientid, username, password), "mqtt账号和密码与认证服务器配置不匹配");
return toolService.returnUnauthorized(new MqttAuthenticationModel(clientid, username, password), MessageUtils.message("mqtt.unauthorized"));
}
} else if (clientid.startsWith("web") || clientid.startsWith("phone")) {
// web端和移动端认证token认证

View File

@@ -0,0 +1,97 @@
package com.fastbee.data.controller.translate;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fastbee.common.core.domain.CommonResult;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.system.domain.AppLanguage;
import com.fastbee.system.domain.vo.AppLanguageVO;
import com.fastbee.system.service.IAppLanguageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
* app语言Controller
*/
@RestController
@RequestMapping("/app/language")
@Api(tags = "APP语言")
public class AppLanguageController extends BaseController
{
@Resource
private IAppLanguageService appLanguageService;
/**
* 查询app语言列表
*/
//@PreAuthorize("@ss.hasPermi('app:language:list')")
@GetMapping("/list")
@ApiOperation("查询app语言列表")
public TableDataInfo list(AppLanguage appLanguage)
{
Page<AppLanguageVO> voPage = appLanguageService.pageAppLanguageVO(appLanguage);
return getDataTable(voPage.getRecords(), voPage.getTotal());
}
/**
* 导出app语言列表
*/
@PreAuthorize("@ss.hasPermi('app:language:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, AppLanguage appLanguage)
{
Page<AppLanguageVO> voPage = appLanguageService.pageAppLanguageVO(appLanguage);
ExcelUtil<AppLanguageVO> util = new ExcelUtil<AppLanguageVO>(AppLanguageVO.class);
util.exportExcel(response, voPage.getRecords(), "app语言数据");
}
/**
* 获取app语言详细信息
*/
//@PreAuthorize("@ss.hasPermi('app:language:query')")
@GetMapping(value = "/{id}")
@ApiOperation("获取app语言详细信息")
public CommonResult getInfo(@PathVariable("id") Long id)
{
return CommonResult.success(appLanguageService.selectAppLanguageById(id));
}
/**
* 新增app语言
*/
@PreAuthorize("@ss.hasPermi('app:language:add')")
@PostMapping
public CommonResult add(@RequestBody AppLanguage appLanguage)
{
appLanguage.setCreateBy(getUsername());
return CommonResult.success(appLanguageService.insertAppLanguage(appLanguage));
}
/**
* 修改app语言
*/
@PreAuthorize("@ss.hasPermi('app:language:edit')")
@PutMapping
public CommonResult edit(@RequestBody AppLanguage appLanguage)
{
return CommonResult.success(appLanguageService.updateAppLanguage(appLanguage));
}
/**
* 删除app语言
*/
@PreAuthorize("@ss.hasPermi('app:language:remove')")
@DeleteMapping("/{ids}")
public CommonResult remove(@PathVariable Long[] ids)
{
return CommonResult.success(appLanguageService.deleteAppLanguageByIds(ids));
}
}

View File

@@ -0,0 +1,107 @@
package com.fastbee.data.controller.translate;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fastbee.common.core.domain.CommonResult;
import com.fastbee.common.core.domain.model.LoginUser;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.utils.SecurityUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.framework.web.service.TokenService;
import com.fastbee.system.domain.AppPreferences;
import com.fastbee.system.domain.vo.AppPreferencesVO;
import com.fastbee.system.service.IAppPreferencesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
* APP用户偏好设置Controller
*/
@RestController
@RequestMapping("/app/preferences")
@Api(tags = "APP用户偏好设置")
public class AppPreferencesController extends BaseController
{
@Resource
private IAppPreferencesService appPreferencesService;
@Resource
private TokenService tokenService;
/**
* 查询APP用户偏好设置列表
*/
@PreAuthorize("@ss.hasPermi('iot:preferences:list')")
@GetMapping("/list")
public TableDataInfo list(AppPreferences appPreferences)
{
Page<AppPreferencesVO> voPage = appPreferencesService.pageAppPreferencesVO(appPreferences);
return getDataTable(voPage.getRecords(), voPage.getTotal());
}
/**
* 导出APP用户偏好设置列表
*/
@PreAuthorize("@ss.hasPermi('iot:preferences:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, AppPreferences appPreferences)
{
Page<AppPreferencesVO> voPage = appPreferencesService.pageAppPreferencesVO(appPreferences);
ExcelUtil<AppPreferencesVO> util = new ExcelUtil<AppPreferencesVO>(AppPreferencesVO.class);
util.exportExcel(response, voPage.getRecords(), "APP用户偏好设置数据");
}
/**
* 获取APP用户偏好设置详细信息
*/
@PreAuthorize("@ss.hasPermi('iot:preferences:query')")
@GetMapping(value = "/{userId}")
public CommonResult getInfo(@PathVariable("userId") Long userId)
{
if (userId == null) {
userId = SecurityUtils.getUserId();
}
return CommonResult.success(appPreferencesService.selectAppPreferencesByUserId(userId));
}
/**
* 新增APP用户偏好设置
*/
//@PreAuthorize("@ss.hasPermi('iot:preferences:add')")
@PostMapping("/addOrUpdate")
@ApiOperation("新增或者更新APP用户偏好设置")
public CommonResult add(@RequestBody AppPreferences appPreferences)
{
LoginUser loginUser = getLoginUser();
loginUser.setLanguage(appPreferences.getLanguage());
tokenService.setLoginUser(loginUser);
return CommonResult.success(appPreferencesService.addOrUpdate(appPreferences));
}
/**
* 修改APP用户偏好设置
*/
@PreAuthorize("@ss.hasPermi('iot:preferences:edit')")
@PutMapping
public CommonResult edit(@RequestBody AppPreferences appPreferences)
{
return CommonResult.success(appPreferencesService.updateAppPreferences(appPreferences));
}
/**
* 删除APP用户偏好设置
*/
@PreAuthorize("@ss.hasPermi('iot:preferences:remove')")
@DeleteMapping("/{userIds}")
public CommonResult remove(@PathVariable Long[] userIds)
{
return CommonResult.success(appPreferencesService.deleteAppPreferencesByUserIds(userIds));
}
}

View File

@@ -2,6 +2,7 @@ package com.fastbee.data.controller.wechat;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.wechat.WeChatLoginBody;
import com.fastbee.common.wechat.WeChatLoginResult;
@@ -21,6 +22,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.fastbee.common.constant.Constants.LANGUAGE;
/**
* 微信相关控制器
* @author fastb
@@ -41,8 +44,8 @@ public class WeChatController {
*/
@ApiOperation("移动应用微信登录")
@PostMapping("/mobileLogin")
public AjaxResult mobileLogin(@RequestBody WeChatLoginBody weChatLoginBody) {
return AjaxResult.success(weChatService.mobileLogin(weChatLoginBody));
public AjaxResult mobileLogin(HttpServletRequest request, @RequestBody WeChatLoginBody weChatLoginBody) {
return AjaxResult.success(weChatService.mobileLogin(weChatLoginBody, request.getHeader(LANGUAGE)));
}
/**
@@ -52,8 +55,8 @@ public class WeChatController {
*/
@ApiOperation("小程序微信登录")
@PostMapping("/miniLogin")
public AjaxResult miniLogin(@RequestBody WeChatLoginBody weChatLoginBody) {
WeChatLoginResult weChatLoginResult = weChatService.miniLogin(weChatLoginBody);
public AjaxResult miniLogin(HttpServletRequest request, @RequestBody WeChatLoginBody weChatLoginBody) {
WeChatLoginResult weChatLoginResult = weChatService.miniLogin(weChatLoginBody, request.getHeader(LANGUAGE));
return AjaxResult.success(weChatLoginResult);
}
@@ -66,7 +69,7 @@ public class WeChatController {
@PostMapping("/bind")
public AjaxResult bind(@RequestBody WxBindReqVO wxBindReqVO) {
if (StringUtils.isEmpty(wxBindReqVO.getSourceClient())) {
throw new ServiceException("请传入验证方式");
throw new ServiceException(MessageUtils.message("wechat.verify.type.null"));
}
return weChatService.bind(wxBindReqVO);
}
@@ -80,7 +83,7 @@ public class WeChatController {
@PostMapping("/cancelBind")
public AjaxResult cancelBind(@RequestBody WxCancelBindReqVO wxCancelBindReqVO) {
if (wxCancelBindReqVO.getVerifyType() == null) {
throw new ServiceException("请传入验证方式");
throw new ServiceException(MessageUtils.message("wechat.verify.type.null"));
}
return weChatService.cancelBind(wxCancelBindReqVO);
}
@@ -119,7 +122,7 @@ public class WeChatController {
@GetMapping("/getWxBindMsg")
public AjaxResult getWxBindMsg(String wxBindMsgId) {
if (StringUtils.isEmpty(wxBindMsgId)) {
return AjaxResult.error("请传入wxBindMsgId");
return AjaxResult.error(MessageUtils.message("wechat.bind.message.id.null"));
}
// 返回二维码信息
return weChatService.getWxBindMsg(wxBindMsgId);