BaseLangController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package jnpf.base.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.dev33.satoken.annotation.SaMode;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import io.swagger.v3.oas.annotations.Operation;
  6. import io.swagger.v3.oas.annotations.Parameter;
  7. import io.swagger.v3.oas.annotations.Parameters;
  8. import io.swagger.v3.oas.annotations.tags.Tag;
  9. import jakarta.validation.Valid;
  10. import jnpf.base.ActionResult;
  11. import jnpf.base.Pagination;
  12. import jnpf.base.entity.BaseLangEntity;
  13. import jnpf.base.entity.DictionaryDataEntity;
  14. import jnpf.base.model.language.*;
  15. import jnpf.base.service.BaseLangService;
  16. import jnpf.base.service.DictionaryDataService;
  17. import jnpf.base.util.ExcelTool;
  18. import jnpf.base.vo.DownloadVO;
  19. import jnpf.config.ConfigValueUtil;
  20. import jnpf.constant.ConfigConst;
  21. import jnpf.constant.FileTypeConstant;
  22. import jnpf.constant.MsgCode;
  23. import jnpf.model.ExcelColumnAttr;
  24. import jnpf.model.ExcelImportVO;
  25. import jnpf.model.ExcelModel;
  26. import jnpf.util.JsonUtil;
  27. import jnpf.util.RegexUtils;
  28. import jnpf.util.StringUtil;
  29. import org.apache.commons.collections4.MapUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.web.bind.annotation.*;
  32. import java.util.*;
  33. /**
  34. * 多语言管理
  35. *
  36. * @author JNPF开发平台组
  37. * @version v5.0.0
  38. * @copyright 引迈信息技术有限公司
  39. * @date 2024/4/28 11:26:57
  40. */
  41. @Tag(name = "多语言配置", description = "BaseLang")
  42. @RestController
  43. @RequestMapping("/api/system/BaseLang")
  44. public class BaseLangController {
  45. @Autowired
  46. private BaseLangService baseLangService;
  47. @Autowired
  48. private ConfigValueUtil configValueUtil;
  49. @Autowired
  50. private DictionaryDataService dictionaryDataApi;
  51. @Operation(summary = "标记翻译列表")
  52. @GetMapping("/List")
  53. public ActionResult getList(Pagination pagination) {
  54. // pagination.setPageSize(100000);
  55. BaseLangListVO list = baseLangService.getList(pagination);
  56. // List list1 = list.getList();
  57. // for(Object o : list1) {
  58. // Map<String, Object> stringObjectMap = JsonUtil.entityToMap(o);
  59. // LinkedHashMap<String, String> map = new LinkedHashMap<>();
  60. // map.put("zh-CN",stringObjectMap.get("zh_CN").toString());
  61. // map.put("zh-TW",stringObjectMap.get("zh_TW").toString());
  62. // map.put("en",stringObjectMap.get("en").toString());
  63. // BaseLangForm form =new BaseLangForm();
  64. // form.setType(0);
  65. // form.setEnCode(stringObjectMap.get("code").toString());
  66. // form.setMap(map);
  67. // baseLangService.create(form);
  68. // }
  69. return ActionResult.success(list);
  70. }
  71. @Operation(summary = "标记翻译列表")
  72. @SaCheckPermission("sysData.language")
  73. @GetMapping()
  74. public ActionResult list(BaseLangPage pagination) {
  75. BaseLangListVO list = baseLangService.list(pagination);
  76. return ActionResult.success(list);
  77. }
  78. @Operation(summary = "创建")
  79. @Parameters({
  80. @Parameter(name = "form", description = "多语言表单对象", required = true)
  81. })
  82. @SaCheckPermission(value = {"sysData.language", "onlineDev.formDesign"}, mode = SaMode.OR)
  83. @PostMapping()
  84. public ActionResult create(@RequestBody @Valid BaseLangForm form) {
  85. if (RegexUtils.checkEnCode2(form.getEnCode())) {
  86. ActionResult.fail(MsgCode.SYS050.get());
  87. }
  88. baseLangService.create(form);
  89. return ActionResult.success(MsgCode.SU001.get());
  90. }
  91. @Operation(summary = "修改")
  92. @Parameters({
  93. @Parameter(name = "form", description = "多语言表单对象", required = true)
  94. })
  95. @SaCheckPermission("sysData.language")
  96. @PutMapping("/{id}")
  97. public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid BaseLangForm form) {
  98. if (RegexUtils.checkEnCode2(form.getEnCode())) {
  99. ActionResult.fail(MsgCode.SYS050.get());
  100. }
  101. form.setId(id);
  102. baseLangService.update(form);
  103. return ActionResult.success(MsgCode.SU004.get());
  104. }
  105. @Operation(summary = "详情")
  106. @Parameters({
  107. @Parameter(name = "enCode", description = "翻译标记", required = true)
  108. })
  109. @SaCheckPermission("sysData.language")
  110. @GetMapping("/{id}")
  111. public ActionResult info(@PathVariable("id") String id) {
  112. BaseLangForm info = baseLangService.getInfo(id);
  113. return ActionResult.success(info);
  114. }
  115. @Operation(summary = "删除")
  116. @Parameters({
  117. @Parameter(name = "id", description = "翻译标记", required = true)
  118. })
  119. @SaCheckPermission("sysData.language")
  120. @DeleteMapping("/{id}")
  121. public ActionResult delete(@PathVariable("id") String id) {
  122. baseLangService.delete(id);
  123. return ActionResult.success();
  124. }
  125. @Operation(summary = "获取语种json")
  126. @Parameters({
  127. @Parameter(name = "language", description = "语种编码", required = true)
  128. })
  129. @GetMapping("/LangJson")
  130. public ActionResult LangJson(Locale locale) {
  131. if (locale == null || StringUtil.isEmpty(locale.toLanguageTag()) || "und".equals(locale.toLanguageTag())) {
  132. locale = Locale.SIMPLIFIED_CHINESE;
  133. }
  134. String languageJson = baseLangService.getLanguageJson(locale);
  135. return ActionResult.success(MsgCode.SU000.get(), languageJson);
  136. }
  137. @Operation(summary = "获取语种json")
  138. @Parameters({
  139. @Parameter(name = "language", description = "语种编码", required = true)
  140. })
  141. @GetMapping("/ServerLang")
  142. public ActionResult<List<BaseLangVo>> getServerLang(Locale locale) {
  143. List<BaseLangEntity> serverLang = baseLangService.getServerLang(locale);
  144. List<BaseLangVo> list = JsonUtil.getJsonToList(serverLang, BaseLangVo.class);
  145. return ActionResult.success(list);
  146. }
  147. //++++++++++++++++++++++++++++++++++以下导入导出接口++++++++++++++++++++++++++++++++++++++++++
  148. @Operation(summary = "模板下载")
  149. @SaCheckPermission("sysData.language")
  150. @GetMapping("/TemplateDownload")
  151. public ActionResult<DownloadVO> TemplateDownload() {
  152. BaseLangColumn columnMap = new BaseLangColumn(getDicLangMap());
  153. String excelName = columnMap.getExcelName();
  154. Map<String, String> keyMap = columnMap.getColumnByType(0);
  155. List<ExcelColumnAttr> models = columnMap.getFieldsModel(false);
  156. List<Map<String, Object>> list = columnMap.getDefaultList();
  157. Map<String, String[]> optionMap = new HashMap<>();
  158. optionMap.put("type", new String[]{"客户端", "服务端"});
  159. ExcelModel excelModel = ExcelModel.builder().models(models).selectKey(new ArrayList<>(keyMap.keySet())).optionMap(optionMap).hasHeader(true).build();
  160. DownloadVO vo = ExcelTool.getImportTemplate(FileTypeConstant.TEMPORARY, excelName, keyMap, list, excelModel);
  161. return ActionResult.success(vo);
  162. }
  163. /**
  164. * 从字典获取语言map
  165. *
  166. * @return
  167. */
  168. private Map<String, String> getDicLangMap() {
  169. List<DictionaryDataEntity> langTypeList = dictionaryDataApi.getListByTypeDataCode(ConfigConst.BASE_LANGUAGE);
  170. Map<String, String> collect = new LinkedHashMap<>();
  171. langTypeList.forEach(t -> collect.put(t.getEnCode(), t.getFullName()));
  172. return collect;
  173. }
  174. @Operation(summary = "上传导入Excel")
  175. @SaCheckPermission("sysData.language")
  176. @PostMapping("/Uploader")
  177. public ActionResult<Object> Uploader() {
  178. return ExcelTool.uploader();
  179. }
  180. @Operation(summary = "导入数据")
  181. @SaCheckPermission("sysData.language")
  182. @PostMapping("/ImportData")
  183. public ActionResult<ExcelImportVO> ImportData(@RequestBody BaseLangModel model) {
  184. // 导入字段
  185. BaseLangColumn columnMap = new BaseLangColumn(getDicLangMap());
  186. Map<String, String> keyMap = columnMap.getColumnByType(0);
  187. Map<String, Object> headAndDataMap = ExcelTool.importPreview(FileTypeConstant.TEMPORARY, model.getFileName(), keyMap,1,1);
  188. List<Map<String, Object>> listData = (List<Map<String, Object>>) headAndDataMap.get("dataRow");
  189. List<BaseLangEntity> addList = new ArrayList<>();
  190. List<Map<String, Object>> failList = new ArrayList<>();
  191. // 对数据做校验 (处理)
  192. this.validateImportData(listData, addList, failList);
  193. //写入数据
  194. baseLangService.importSaveOrUpdate(addList);
  195. return ActionResult.success(MsgCode.IMP001.get());
  196. }
  197. public void validateImportData(List<Map<String, Object>> listData, List<BaseLangEntity> addList, List<Map<String, Object>> failList) {
  198. List<DictionaryDataEntity> langTypeList = dictionaryDataApi.getListByTypeDataCode(ConfigConst.BASE_LANGUAGE);
  199. for (Map<String, Object> map : listData) {
  200. if (MapUtils.isNotEmpty(map) && map.get("enCode")!=null && StringUtil.isNotBlank(map.get("enCode").toString()) && RegexUtils.checkEnCode2(map.get("enCode").toString())) {
  201. BaseLangEntity baseLangEntity = new BaseLangEntity();
  202. baseLangEntity.setEnCode(map.get("enCode").toString());
  203. Integer type = 0;
  204. if (map.get("type") != null && StringUtil.isNotBlank(map.get("type").toString())) {
  205. type = "服务端".equals(map.get("type").toString()) ? 1 : 0;
  206. }
  207. baseLangEntity.setType(type);
  208. boolean allNull = true;
  209. List<BaseLangEntity> thisList =new ArrayList<>();
  210. for (DictionaryDataEntity item : langTypeList) {
  211. String enCode = item.getEnCode();
  212. String fullName = "";
  213. if (map.get(enCode) != null) {
  214. fullName = map.get(enCode).toString();
  215. }
  216. if(StringUtil.isNotBlank(fullName)){
  217. allNull = false;
  218. }
  219. baseLangEntity.setLanguage(enCode);
  220. baseLangEntity.setFullName(fullName);
  221. BaseLangEntity entity = BeanUtil.copyProperties(baseLangEntity, BaseLangEntity.class);
  222. thisList.add(entity);
  223. }
  224. if(!allNull){
  225. addList.addAll(thisList);
  226. }
  227. } else {
  228. failList.add(map);
  229. }
  230. }
  231. }
  232. }