From cdc4b8b1f21239b0bd313f7214d0f8b444efce20 Mon Sep 17 00:00:00 2001
From: 唐耀东 <18861537@qq.com>
Date: 星期日, 05 十二月 2021 19:40:07 +0800
Subject: [PATCH] 编写依赖库,国内高校
---
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml | 9
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsCityVo.java | 121 +++
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsCity.java | 82 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CommonApiImpl.java | 34
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsProvinceMapper.java | 14
pom.xml | 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java | 118 +++
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsSchoolBo.java | 101 ++
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Dict.java | 33
ruoyi-common/src/main/java/com/ruoyi/common/api/CommonAPI.java | 23
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataDictClass.java | 11
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsSchoolMapper.java | 14
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java | 33
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsProvinceServiceImpl.java | 26
ruoyi-common/src/main/java/com/ruoyi/common/utils/OConvertUtils.java | 651 ++++++++++++++++
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstant.java | 46 +
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsSchoolVo.java | 89 ++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsCityController.java | 36
ruoyi-oa/src/main/resources/mapper/oa/BsProvinceMapper.xml | 23
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsSchool.java | 74 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsProvinceController.java | 36
ruoyi-admin/pom.xml | 6
ruoyi-common/src/main/java/com/ruoyi/common/enums/CommonConstant.java | 12
ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java | 6
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java | 5
ruoyi-admin/src/main/resources/application.yml | 4
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsProvince.java | 78 ++
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsSchoolServiceImpl.java | 109 ++
ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsProvinceVo.java | 114 ++
ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsCityMapper.java | 14
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsProvinceService.java | 21
ruoyi-oa/pom.xml | 30
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DictAspect.java | 189 ++++
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsCityService.java | 20
ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsSchoolService.java | 56 +
ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsCityServiceImpl.java | 26
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java | 20
ruoyi-oa/src/main/resources/mapper/oa/BsSchoolMapper.xml | 26
ruoyi-admin/src/main/resources/application-dev.yml | 4
39 files changed, 2,311 insertions(+), 11 deletions(-)
diff --git a/pom.xml b/pom.xml
index 4dd5166..ef4a0bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -279,6 +279,13 @@
<version>${ruoyi-vue-plus.version}</version>
</dependency>
+ <!-- oa妯″潡 -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-oa</artifactId>
+ <version>${ruoyi-vue-plus.version}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
@@ -292,6 +299,7 @@
<module>ruoyi-demo</module>
<module>ruoyi-extend</module>
<module>ruoyi-oss</module>
+ <module>ruoyi-oa</module>
</modules>
<packaging>pom</packaging>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 91aa013..8ac2c3d 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -63,6 +63,12 @@
<artifactId>ruoyi-demo</artifactId>
</dependency>
+ <!-- oa妯″潡 -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-oa</artifactId>
+ </dependency>
+
</dependencies>
<build>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsCityController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsCityController.java
new file mode 100644
index 0000000..244bb43
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsCityController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.web.controller.oa;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.oa.service.IBsCityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 鍩庡競璁剧疆Controller
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Validated
+@Api(value = "鍩庡競璁剧疆鎺у埗鍣�", tags = {"鍩庡競璁剧疆绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/city")
+public class BsCityController extends BaseController {
+
+ private final IBsCityService iBsCityService;
+
+ /**
+ * 鏍规嵁鐪佷唤缂栫爜鏌ヨ鍩庡競璁剧疆鍒楄〃
+ */
+ @ApiOperation("鏍规嵁鐪佷唤缂栫爜鏌ヨ鍩庡競璁剧疆鍒楄〃")
+ @GetMapping
+ public AjaxResult list(@RequestParam String provinceCode) {
+ return AjaxResult.success(iBsCityService.queryList(provinceCode));
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsProvinceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsProvinceController.java
new file mode 100644
index 0000000..90b83ca
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsProvinceController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.web.controller.oa;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.oa.service.IBsProvinceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 鐪佷唤璁剧疆Controller
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Validated
+@Api(value = "鐪佷唤璁剧疆鎺у埗鍣�", tags = {"鐪佷唤璁剧疆绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/province")
+public class BsProvinceController extends BaseController {
+
+ private final IBsProvinceService iBsProvinceService;
+
+ /**
+ * 鏌ヨ鐪佷唤璁剧疆鍒楄〃
+ */
+ @ApiOperation("鏌ヨ鐪佷唤璁剧疆鍒楄〃")
+ @GetMapping
+ public AjaxResult list() {
+ return AjaxResult.success(iBsProvinceService.queryList());
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java
new file mode 100644
index 0000000..eb87d3f
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/BsSchoolController.java
@@ -0,0 +1,118 @@
+package com.ruoyi.web.controller.oa;
+
+import com.ruoyi.common.annotation.DataDictClass;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.oa.domain.bo.BsSchoolBo;
+import com.ruoyi.oa.domain.vo.BsSchoolVo;
+import com.ruoyi.oa.service.IBsSchoolService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 瀛︽牎Controller
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Validated
+@Api(value = "瀛︽牎鎺у埗鍣�", tags = {"瀛︽牎绠$悊"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/oa/school")
+public class BsSchoolController extends BaseController {
+
+ private final IBsSchoolService iBsSchoolService;
+
+ /**
+ * 鏌ヨ瀛︽牎鍒楄〃
+ */
+ @ApiOperation("鏌ヨ瀛︽牎鍒楄〃")
+ @PreAuthorize("@ss.hasPermi('oa:school:list')")
+ @GetMapping("/list")
+ @DataDictClass
+ public TableDataInfo<BsSchoolVo> list(@Validated(QueryGroup.class) BsSchoolBo bo) {
+ return iBsSchoolService.queryPageList(bo);
+ }
+
+ /**
+ * 瀵煎嚭瀛︽牎鍒楄〃
+ */
+ @ApiOperation("瀵煎嚭瀛︽牎鍒楄〃")
+ @PreAuthorize("@ss.hasPermi('oa:school:export')")
+ @Log(title = "瀛︽牎", businessType = BusinessType.EXPORT)
+ @GetMapping("/export")
+ public void export(@Validated BsSchoolBo bo, HttpServletResponse response) {
+ List<BsSchoolVo> list = iBsSchoolService.queryList(bo);
+ ExcelUtil.exportExcel(list, "瀛︽牎", BsSchoolVo.class, response);
+ }
+
+ /**
+ * 鑾峰彇瀛︽牎璇︾粏淇℃伅
+ */
+ @ApiOperation("鑾峰彇瀛︽牎璇︾粏淇℃伅")
+ @PreAuthorize("@ss.hasPermi('oa:school:query')")
+ @GetMapping("/{id}")
+ public AjaxResult<BsSchoolVo> getInfo(@ApiParam("涓婚敭")
+ @NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable("id") Long id) {
+ return AjaxResult.success(iBsSchoolService.queryById(id));
+ }
+
+ /**
+ * 鏂板瀛︽牎
+ */
+ @ApiOperation("鏂板瀛︽牎")
+ @PreAuthorize("@ss.hasPermi('oa:school:add')")
+ @Log(title = "瀛︽牎", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody BsSchoolBo bo) {
+ return toAjax(iBsSchoolService.insertByBo(bo) ? 1 : 0);
+ }
+
+ /**
+ * 淇敼瀛︽牎
+ */
+ @ApiOperation("淇敼瀛︽牎")
+ @PreAuthorize("@ss.hasPermi('oa:school:edit')")
+ @Log(title = "瀛︽牎", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody BsSchoolBo bo) {
+ return toAjax(iBsSchoolService.updateByBo(bo) ? 1 : 0);
+ }
+
+ /**
+ * 鍒犻櫎瀛︽牎
+ */
+ @ApiOperation("鍒犻櫎瀛︽牎")
+ @PreAuthorize("@ss.hasPermi('oa:school:remove')")
+ @Log(title = "瀛︽牎" , businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult<Void> remove(@ApiParam("涓婚敭涓�")
+ @NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable Long[] ids) {
+ return toAjax(iBsSchoolService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+ }
+}
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 015b302..89dc978 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -51,9 +51,9 @@
# 涓诲簱鏁版嵁婧�
master:
driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
+ url: jdbc:mysql://47.95.0.46:3307/ytsl_oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
username: root
- password: root
+ password: test1214
# 浠庡簱鏁版嵁婧�
slave:
lazy: true
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index f7ef633..c0d7d1e 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -16,9 +16,9 @@
captcha:
# 椤甸潰 <鍙傛暟璁剧疆> 鍙紑鍚叧闂� 楠岃瘉鐮佹牎楠�
# 楠岃瘉鐮佺被鍨� math 鏁扮粍璁$畻 char 瀛楃楠岃瘉
- type: MATH
+ type: CHAR
# line 绾挎骞叉壈 circle 鍦嗗湀骞叉壈 shear 鎵洸骞叉壈
- category: CIRCLE
+ category: LINE
# 鏁板瓧楠岃瘉鐮佷綅鏁�
numberLength: 1
# 瀛楃楠岃瘉鐮侀暱搴�
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataDictClass.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataDictClass.java
new file mode 100644
index 0000000..80daf6f
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataDictClass.java
@@ -0,0 +1,11 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Documented
+public @interface DataDictClass {
+
+}
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Dict.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Dict.java
new file mode 100644
index 0000000..0d0373f
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Dict.java
@@ -0,0 +1,33 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description: 瀛楀吀娉ㄨВ
+ * @Date:2021-11-17
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Dict {
+
+ /**
+ * @Description: 鏁版嵁code
+ * @Date:2021-11-17
+ */
+ String dicCode();
+
+ /**
+ * @Description: 鏁版嵁Text
+ * @Date:2021-11-17
+ */
+ String dicText() default "";
+
+ /**
+ * @Description: 鏁版嵁瀛楀吀琛�
+ * @Date:2021-11-17
+ */
+ String dictTable() default "";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/api/CommonAPI.java b/ruoyi-common/src/main/java/com/ruoyi/common/api/CommonAPI.java
new file mode 100644
index 0000000..1c0155c
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/api/CommonAPI.java
@@ -0,0 +1,23 @@
+package com.ruoyi.common.api;
+
+public interface CommonAPI {
+
+ /**
+ * 瀛楀吀琛ㄧ殑 缈昏瘧
+ * @param table
+ * @param text
+ * @param code
+ * @param key
+ * @return
+ */
+ String translateDictFromTable(String table, String text, String code, String key);
+
+ /**
+ * 鏅�氬瓧鍏哥殑缈昏瘧
+ * @param code
+ * @param key
+ * @return
+ */
+ String translateDict(String code, String key);
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstant.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstant.java
new file mode 100644
index 0000000..10cb00a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstant.java
@@ -0,0 +1,46 @@
+package com.ruoyi.common.constant;
+
+/**
+ * @date: 21-11-17
+ * @description: 缂撳瓨甯搁噺
+ */
+public interface CacheConstant {
+
+ /**
+ * 瀛楀吀淇℃伅缂撳瓨
+ */
+ public static final String SYS_DICT_CACHE = "sys:cache:dict";
+ /**
+ * 琛ㄥ瓧鍏镐俊鎭紦瀛�
+ */
+ public static final String SYS_DICT_TABLE_CACHE = "sys:cache:dictTable";
+ public static final String SYS_DICT_TABLE_BY_KEYS_CACHE = SYS_DICT_TABLE_CACHE + "ByKeys";
+
+ /**
+ * 鏁版嵁鏉冮檺閰嶇疆缂撳瓨
+ */
+ public static final String SYS_DATA_PERMISSIONS_CACHE = "sys:cache:permission:datarules";
+
+ /**
+ * 缂撳瓨鐢ㄦ埛淇℃伅
+ */
+ public static final String SYS_USERS_CACHE = "sys:cache:user";
+
+ /**
+ * 鍏ㄩ儴閮ㄩ棬淇℃伅缂撳瓨
+ */
+ public static final String SYS_DEPARTS_CACHE = "sys:cache:depart:alldata";
+
+
+ /**
+ * 鍏ㄩ儴閮ㄩ棬ids缂撳瓨
+ */
+ public static final String SYS_DEPART_IDS_CACHE = "sys:cache:depart:allids";
+
+
+ /**
+ * 瀛楀吀淇℃伅缂撳瓨
+ */
+ public static final String SYS_DYNAMICDB_CACHE = "sys:cache:dbconnect:dynamic:";
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/CommonConstant.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/CommonConstant.java
new file mode 100644
index 0000000..150363d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/CommonConstant.java
@@ -0,0 +1,12 @@
+package com.ruoyi.common.enums;
+
+public interface CommonConstant {
+
+ /**瀛楀吀缈昏瘧鏂囨湰鍚庣紑*/
+ public static final String DICT_TEXT_SUFFIX = "_dictText";
+
+ /**
+ * 绗笁鏂圭櫥褰� 楠岃瘉瀵嗙爜/鍒涘缓鐢ㄦ埛 閮介渶瑕佽缃竴涓搷浣滅爜 闃叉琚伓鎰忚皟鐢�
+ */
+ public final static String THIRD_LOGIN_CODE = "third_login_code";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/OConvertUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OConvertUtils.java
new file mode 100644
index 0000000..1b84930
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OConvertUtils.java
@@ -0,0 +1,651 @@
+package com.ruoyi.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+import java.sql.Date;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * @Author 寮犱唬娴�
+ *
+ */
+@Slf4j
+public class OConvertUtils {
+ public static boolean isEmpty(Object object) {
+ if (object == null) {
+ return (true);
+ }
+ if ("".equals(object)) {
+ return (true);
+ }
+ if ("null".equals(object)) {
+ return (true);
+ }
+ return (false);
+ }
+
+ public static boolean isNotEmpty(Object object) {
+ if (object != null && !object.equals("") && !object.equals("null")) {
+ return (true);
+ }
+ return (false);
+ }
+
+ public static String decode(String strIn, String sourceCode, String targetCode) {
+ String temp = code2code(strIn, sourceCode, targetCode);
+ return temp;
+ }
+
+ public static String StrToUTF(String strIn, String sourceCode, String targetCode) {
+ strIn = "";
+ try {
+ strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK");
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return strIn;
+
+ }
+
+ private static String code2code(String strIn, String sourceCode, String targetCode) {
+ String strOut = null;
+ if (strIn == null || (strIn.trim()).equals("")) {
+ return strIn;
+ }
+ try {
+ byte[] b = strIn.getBytes(sourceCode);
+ for (int i = 0; i < b.length; i++) {
+ System.out.print(b[i] + " ");
+ }
+ strOut = new String(b, targetCode);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ return strOut;
+ }
+
+ public static int getInt(String s, int defval) {
+ if (s == null || s == "") {
+ return (defval);
+ }
+ try {
+ return (Integer.parseInt(s));
+ } catch (NumberFormatException e) {
+ return (defval);
+ }
+ }
+
+ public static int getInt(String s) {
+ if (s == null || s == "") {
+ return 0;
+ }
+ try {
+ return (Integer.parseInt(s));
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ }
+
+ public static int getInt(String s, Integer df) {
+ if (s == null || s == "") {
+ return df;
+ }
+ try {
+ return (Integer.parseInt(s));
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ }
+
+ public static Integer[] getInts(String[] s) {
+ Integer[] integer = new Integer[s.length];
+ if (s == null) {
+ return null;
+ }
+ for (int i = 0; i < s.length; i++) {
+ integer[i] = Integer.parseInt(s[i]);
+ }
+ return integer;
+
+ }
+
+ public static double getDouble(String s, double defval) {
+ if (s == null || s == "") {
+ return (defval);
+ }
+ try {
+ return (Double.parseDouble(s));
+ } catch (NumberFormatException e) {
+ return (defval);
+ }
+ }
+
+ public static double getDou(Double s, double defval) {
+ if (s == null) {
+ return (defval);
+ }
+ return s;
+ }
+
+ /*public static Short getShort(String s) {
+ if (StringUtil.isNotEmpty(s)) {
+ return (Short.parseShort(s));
+ } else {
+ return null;
+ }
+ }*/
+
+ public static int getInt(Object object, int defval) {
+ if (isEmpty(object)) {
+ return (defval);
+ }
+ try {
+ return (Integer.parseInt(object.toString()));
+ } catch (NumberFormatException e) {
+ return (defval);
+ }
+ }
+
+ public static Integer getInt(Object object) {
+ if (isEmpty(object)) {
+ return null;
+ }
+ try {
+ return (Integer.parseInt(object.toString()));
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ public static int getInt(BigDecimal s, int defval) {
+ if (s == null) {
+ return (defval);
+ }
+ return s.intValue();
+ }
+
+ public static Integer[] getIntegerArry(String[] object) {
+ int len = object.length;
+ Integer[] result = new Integer[len];
+ try {
+ for (int i = 0; i < len; i++) {
+ result[i] = new Integer(object[i].trim());
+ }
+ return result;
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ public static String getString(String s) {
+ return (getString(s, ""));
+ }
+
+ /**
+ * 杞箟鎴怳nicode缂栫爜
+ * @param s
+ * @return
+ */
+ /*public static String escapeJava(Object s) {
+ return StringEscapeUtils.escapeJava(getString(s));
+ }*/
+
+ public static String getString(Object object) {
+ if (isEmpty(object)) {
+ return "";
+ }
+ return (object.toString().trim());
+ }
+
+ public static String getString(int i) {
+ return (String.valueOf(i));
+ }
+
+ public static String getString(float i) {
+ return (String.valueOf(i));
+ }
+
+ public static String getString(String s, String defval) {
+ if (isEmpty(s)) {
+ return (defval);
+ }
+ return (s.trim());
+ }
+
+ public static String getString(Object s, String defval) {
+ if (isEmpty(s)) {
+ return (defval);
+ }
+ return (s.toString().trim());
+ }
+
+ public static long stringToLong(String str) {
+ Long test = new Long(0);
+ try {
+ test = Long.valueOf(str);
+ } catch (Exception e) {
+ }
+ return test.longValue();
+ }
+
+ /**
+ * 鑾峰彇鏈満IP
+ */
+ public static String getIp() {
+ String ip = null;
+ try {
+ InetAddress address = InetAddress.getLocalHost();
+ ip = address.getHostAddress();
+
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ }
+ return ip;
+ }
+
+ /**
+ * 鍒ゆ柇涓�涓被鏄惁涓哄熀鏈暟鎹被鍨嬨��
+ *
+ * @param clazz
+ * 瑕佸垽鏂殑绫汇��
+ * @return true 琛ㄧず涓哄熀鏈暟鎹被鍨嬨��
+ */
+ private static boolean isBaseDataType(Class clazz) throws Exception {
+ return (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Byte.class) || clazz.equals(Long.class) || clazz.equals(Double.class) || clazz.equals(Float.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(BigDecimal.class) || clazz.equals(BigInteger.class) || clazz.equals(Boolean.class) || clazz.equals(Date.class) || clazz.isPrimitive());
+ }
+
+ /**
+ * @param request
+ * IP
+ * @return IP Address
+ */
+ public static String getIpAddrByRequest(HttpServletRequest request) {
+ String ip = request.getHeader("x-forwarded-for");
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getHeader("Proxy-Client-IP");
+ }
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getHeader("WL-Proxy-Client-IP");
+ }
+ if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+ ip = request.getRemoteAddr();
+ }
+ return ip;
+ }
+
+ /**
+ * @return 鏈満IP
+ * @throws SocketException
+ */
+ public static String getRealIp() throws SocketException {
+ String localip = null;// 鏈湴IP锛屽鏋滄病鏈夐厤缃缃慖P鍒欒繑鍥炲畠
+ String netip = null;// 澶栫綉IP
+
+ Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
+ InetAddress ip = null;
+ boolean finded = false;// 鏄惁鎵惧埌澶栫綉IP
+ while (netInterfaces.hasMoreElements() && !finded) {
+ NetworkInterface ni = netInterfaces.nextElement();
+ Enumeration<InetAddress> address = ni.getInetAddresses();
+ while (address.hasMoreElements()) {
+ ip = address.nextElement();
+ if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 澶栫綉IP
+ netip = ip.getHostAddress();
+ finded = true;
+ break;
+ } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 鍐呯綉IP
+ localip = ip.getHostAddress();
+ }
+ }
+ }
+
+ if (netip != null && !"".equals(netip)) {
+ return netip;
+ } else {
+ return localip;
+ }
+ }
+
+ /**
+ * java鍘婚櫎瀛楃涓蹭腑鐨勭┖鏍笺�佸洖杞︺�佹崲琛岀銆佸埗琛ㄧ
+ *
+ * @param str
+ * @return
+ */
+ public static String replaceBlank(String str) {
+ String dest = "";
+ if (str != null) {
+ Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+ Matcher m = p.matcher(str);
+ dest = m.replaceAll("");
+ }
+ return dest;
+
+ }
+
+ /**
+ * 鍒ゆ柇鍏冪礌鏄惁鍦ㄦ暟缁勫唴
+ *
+ * @param substring
+ * @param source
+ * @return
+ */
+ public static boolean isIn(String substring, String[] source) {
+ if (source == null || source.length == 0) {
+ return false;
+ }
+ for (int i = 0; i < source.length; i++) {
+ String aSource = source[i];
+ if (aSource.equals(substring)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 鑾峰彇Map瀵硅薄
+ */
+ public static Map<Object, Object> getHashMap() {
+ return new HashMap<Object, Object>();
+ }
+
+ /**
+ * SET杞崲MAP
+ *
+ * @param str
+ * @return
+ */
+ public static Map<Object, Object> SetToMap(Set<Object> setobj) {
+ Map<Object, Object> map = getHashMap();
+ for (Iterator iterator = setobj.iterator(); iterator.hasNext();) {
+ Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) iterator.next();
+ map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim());
+ }
+ return map;
+
+ }
+
+ public static boolean isInnerIP(String ipAddress) {
+ boolean isInnerIp = false;
+ long ipNum = getIpNum(ipAddress);
+ /**
+ * 绉佹湁IP锛欰绫� 10.0.0.0-10.255.255.255 B绫� 172.16.0.0-172.31.255.255 C绫� 192.168.0.0-192.168.255.255 褰撶劧锛岃繕鏈�127杩欎釜缃戞鏄幆鍥炲湴鍧�
+ **/
+ long aBegin = getIpNum("10.0.0.0");
+ long aEnd = getIpNum("10.255.255.255");
+ long bBegin = getIpNum("172.16.0.0");
+ long bEnd = getIpNum("172.31.255.255");
+ long cBegin = getIpNum("192.168.0.0");
+ long cEnd = getIpNum("192.168.255.255");
+ isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || ipAddress.equals("127.0.0.1");
+ return isInnerIp;
+ }
+
+ private static long getIpNum(String ipAddress) {
+ String[] ip = ipAddress.split("\\.");
+ long a = Integer.parseInt(ip[0]);
+ long b = Integer.parseInt(ip[1]);
+ long c = Integer.parseInt(ip[2]);
+ long d = Integer.parseInt(ip[3]);
+
+ long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
+ return ipNum;
+ }
+
+ private static boolean isInner(long userIp, long begin, long end) {
+ return (userIp >= begin) && (userIp <= end);
+ }
+
+ /**
+ * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆�
+ * 濡傛灉杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓蹭负绌猴紝鍒欒繑鍥炵┖瀛楃涓层��</br>
+ * 渚嬪锛歨ello_world->helloWorld
+ *
+ * @param name
+ * 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+ * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+ */
+ public static String camelName(String name) {
+ StringBuilder result = new StringBuilder();
+ // 蹇�熸鏌�
+ if (name == null || name.isEmpty()) {
+ // 娌″繀瑕佽浆鎹�
+ return "";
+ } else if (!name.contains("_")) {
+ // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅皬鍐�
+ //update-begin--Author:zhoujf Date:20180503 for锛歍ASK #2500 銆愪唬鐮佺敓鎴愬櫒銆戜唬鐮佺敓鎴愬櫒寮�鍙戜竴閫氱敤妯℃澘鐢熸垚鍔熻兘
+ //update-begin--Author:zhoujf Date:20180503 for锛歍ASK #2500 銆愪唬鐮佺敓鎴愬櫒銆戜唬鐮佺敓鎴愬櫒寮�鍙戜竴閫氱敤妯℃澘鐢熸垚鍔熻兘
+ return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase();
+ //update-end--Author:zhoujf Date:20180503 for锛歍ASK #2500 銆愪唬鐮佺敓鎴愬櫒銆戜唬鐮佺敓鎴愬櫒寮�鍙戜竴閫氱敤妯℃澘鐢熸垚鍔熻兘
+ }
+ // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
+ String camels[] = name.split("_");
+ for (String camel : camels) {
+ // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
+ if (camel.isEmpty()) {
+ continue;
+ }
+ // 澶勭悊鐪熸鐨勯┘宄扮墖娈�
+ if (result.length() == 0) {
+ // 绗竴涓┘宄扮墖娈碉紝鍏ㄩ儴瀛楁瘝閮藉皬鍐�
+ result.append(camel.toLowerCase());
+ } else {
+ // 鍏朵粬鐨勯┘宄扮墖娈碉紝棣栧瓧姣嶅ぇ鍐�
+ result.append(camel.substring(0, 1).toUpperCase());
+ result.append(camel.substring(1).toLowerCase());
+ }
+ }
+ return result.toString();
+ }
+
+ /**
+ * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆�
+ * 濡傛灉杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓蹭负绌猴紝鍒欒繑鍥炵┖瀛楃涓层��</br>
+ * 渚嬪锛歨ello_world,test_id->helloWorld,testId
+ *
+ * @param name
+ * 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+ * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+ */
+ public static String camelNames(String names) {
+ if(names==null||names.equals("")){
+ return null;
+ }
+ StringBuffer sf = new StringBuffer();
+ String[] fs = names.split(",");
+ for (String field : fs) {
+ field = camelName(field);
+ sf.append(field + ",");
+ }
+ String result = sf.toString();
+ return result.substring(0, result.length() - 1);
+ }
+
+ //update-begin--Author:zhoujf Date:20180503 for锛歍ASK #2500 銆愪唬鐮佺敓鎴愬櫒銆戜唬鐮佺敓鎴愬櫒寮�鍙戜竴閫氱敤妯℃澘鐢熸垚鍔熻兘
+ /**
+ * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆�(棣栧瓧姣嶅啓)
+ * 濡傛灉杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓蹭负绌猴紝鍒欒繑鍥炵┖瀛楃涓层��</br>
+ * 渚嬪锛歨ello_world->HelloWorld
+ *
+ * @param name
+ * 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+ * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+ */
+ public static String camelNameCapFirst(String name) {
+ StringBuilder result = new StringBuilder();
+ // 蹇�熸鏌�
+ if (name == null || name.isEmpty()) {
+ // 娌″繀瑕佽浆鎹�
+ return "";
+ } else if (!name.contains("_")) {
+ // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅皬鍐�
+ return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
+ }
+ // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
+ String camels[] = name.split("_");
+ for (String camel : camels) {
+ // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
+ if (camel.isEmpty()) {
+ continue;
+ }
+ // 鍏朵粬鐨勯┘宄扮墖娈碉紝棣栧瓧姣嶅ぇ鍐�
+ result.append(camel.substring(0, 1).toUpperCase());
+ result.append(camel.substring(1).toLowerCase());
+ }
+ return result.toString();
+ }
+ //update-end--Author:zhoujf Date:20180503 for锛歍ASK #2500 銆愪唬鐮佺敓鎴愬櫒銆戜唬鐮佺敓鎴愬櫒寮�鍙戜竴閫氱敤妯℃澘鐢熸垚鍔熻兘
+
+ /**
+ * 灏嗛┘宄板懡鍚嶈浆鍖栨垚涓嬪垝绾�
+ * @param para
+ * @return
+ */
+ public static String camelToUnderline(String para){
+ if(para.length()<3){
+ return para.toLowerCase();
+ }
+ StringBuilder sb=new StringBuilder(para);
+ int temp=0;//瀹氫綅
+ //浠庣涓変釜瀛楃寮�濮� 閬垮厤鍛藉悕涓嶈鑼�
+ for(int i=2;i<para.length();i++){
+ if(Character.isUpperCase(para.charAt(i))){
+ sb.insert(i+temp, "_");
+ temp+=1;
+ }
+ }
+ return sb.toString().toLowerCase();
+ }
+
+ /**
+ * 闅忔満鏁�
+ * @param place 瀹氫箟闅忔満鏁扮殑浣嶆暟
+ */
+ public static String randomGen(int place) {
+ String base = "qwertyuioplkjhgfdsazxcvbnmQAZWSXEDCRFVTGBYHNUJMIKLOP0123456789";
+ StringBuffer sb = new StringBuffer();
+ Random rd = new Random();
+ for(int i=0;i<place;i++) {
+ sb.append(base.charAt(rd.nextInt(base.length())));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 鑾峰彇绫荤殑鎵�鏈夊睘鎬э紝鍖呮嫭鐖剁被
+ *
+ * @param object
+ * @return
+ */
+ public static Field[] getAllFields(Object object) {
+ Class<?> clazz = object.getClass();
+ List<Field> fieldList = new ArrayList<>();
+ while (clazz != null) {
+ fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
+ clazz = clazz.getSuperclass();
+ }
+ Field[] fields = new Field[fieldList.size()];
+ fieldList.toArray(fields);
+ return fields;
+ }
+
+ /**
+ * 灏唌ap鐨刱ey鍏ㄩ儴杞垚灏忓啓
+ * @param list
+ * @return
+ */
+ public static List<Map<String, Object>> toLowerCasePageList(List<Map<String, Object>> list){
+ List<Map<String, Object>> select = new ArrayList<>();
+ for (Map<String, Object> row : list) {
+ Map<String, Object> resultMap = new HashMap<>();
+ Set<String> keySet = row.keySet();
+ for (String key : keySet) {
+ String newKey = key.toLowerCase();
+ resultMap.put(newKey, row.get(key));
+ }
+ select.add(resultMap);
+ }
+ return select;
+ }
+
+ /**
+ * 灏唀ntityList杞崲鎴恗odelList
+ * @param fromList
+ * @param tClass
+ * @param <F>
+ * @param <T>
+ * @return
+ */
+ public static<F,T> List<T> entityListToModelList(List<F> fromList, Class<T> tClass){
+ if(fromList == null || fromList.isEmpty()){
+ return null;
+ }
+ List<T> tList = new ArrayList<>();
+ for(F f : fromList){
+ T t = entityToModel(f, tClass);
+ tList.add(t);
+ }
+ return tList;
+ }
+
+ public static<F,T> T entityToModel(F entity, Class<T> modelClass) {
+ log.debug("entityToModel : Entity灞炴�х殑鍊艰祴鍊煎埌Model");
+ Object model = null;
+ if (entity == null || modelClass ==null) {
+ return null;
+ }
+
+ try {
+ model = modelClass.newInstance();
+ } catch (InstantiationException e) {
+ log.error("entityToModel : 瀹炰緥鍖栧紓甯�", e);
+ } catch (IllegalAccessException e) {
+ log.error("entityToModel : 瀹夊叏鏉冮檺寮傚父", e);
+ }
+ BeanUtils.copyProperties(entity, model);
+ return (T)model;
+ }
+
+ /**
+ * 鍒ゆ柇 list 鏄惁涓虹┖
+ *
+ * @param list
+ * @return true or false
+ * list == null : true
+ * list.size() == 0 : true
+ */
+ public static boolean listIsEmpty(Collection list) {
+ return (list == null || list.size() == 0);
+ }
+
+ /**
+ * 鍒ゆ柇 list 鏄惁涓嶄负绌�
+ *
+ * @param list
+ * @return true or false
+ * list == null : false
+ * list.size() == 0 : false
+ */
+ public static boolean listIsNotEmpty(Collection list) {
+ return !listIsEmpty(list);
+ }
+
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
index 74b57d9..8e0c8a1 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
@@ -59,10 +59,4 @@
@Version
private Long version;
- /**
- * 鍒犻櫎鏍囧織
- */
- @TableLogic
- private Long delFlag;
-
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DictAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DictAspect.java
new file mode 100644
index 0000000..f163281
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DictAspect.java
@@ -0,0 +1,189 @@
+package com.ruoyi.framework.aspectj;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.annotation.DataDictClass;
+import com.ruoyi.common.annotation.Dict;
+import com.ruoyi.common.api.CommonAPI;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.CommonConstant;
+import com.ruoyi.common.utils.OConvertUtils;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 瀛楀吀aop绫�
+ * @Date: 21-11-17
+ */
+@Aspect
+@Component
+@SuppressWarnings({"unused"})
+@Slf4j
+public class DictAspect {
+
+ @Autowired
+ private CommonAPI commonAPI;
+
+ // 瀹氫箟鍒囩偣Pointcut
+ @Pointcut("@annotation(dataDictClass)")
+ public void dataDictClass(DataDictClass dataDictClass) {
+ }
+
+ @Around("@annotation(dataDictClass)")
+ public Object doAround(ProceedingJoinPoint pjp, DataDictClass dataDictClass) throws Throwable {
+ long time1 = System.currentTimeMillis();
+ Object result = pjp.proceed();
+ long time2 = System.currentTimeMillis();
+ log.debug("鑾峰彇JSON鏁版嵁 鑰楁椂锛�" + (time2 - time1) + "ms");
+ long start = System.currentTimeMillis();
+ this.parseDictText(result);
+ long end = System.currentTimeMillis();
+ log.debug("瑙f瀽娉ㄥ叆JSON鏁版嵁 鑰楁椂" + (end - start) + "ms");
+ return result;
+ }
+
+ /**
+ * 鏈柟娉曢拡瀵硅繑鍥炲璞′负Result 鐨処Page鐨勫垎椤靛垪琛ㄦ暟鎹繘琛屽姩鎬佸瓧鍏告敞鍏�
+ * 瀛楀吀娉ㄥ叆瀹炵幇 閫氳繃瀵瑰疄浣撶被娣诲姞娉ㄨВ@dict 鏉ユ爣璇嗛渶瑕佺殑瀛楀吀鍐呭,瀛楀吀鍒嗕负鍗曞瓧鍏竎ode鍗冲彲 锛宼able瀛楀吀 code table text閰嶅悎浣跨敤涓庡師鏉eecg鐨勭敤娉曠浉鍚�
+ * 绀轰緥涓篠ysUser 瀛楁涓簊ex 娣诲姞浜嗘敞瑙Dict(dicCode = "sex") 浼氬湪瀛楀吀鏈嶅姟绔嬮┈鏌ュ嚭鏉ュ搴旂殑text 鐒跺悗鍦ㄨ姹俵ist鐨勬椂鍊欏皢杩欎釜瀛楀吀text锛屽凡瀛楁鍚嶇О鍔燺dictText褰㈠紡杩斿洖鍒板墠绔�
+ * 渚嬭緭鍏ュ綋鍓嶈繑鍥炲�肩殑灏变細澶氬嚭涓�涓猻ex_dictText瀛楁
+ * {
+ * sex:1,
+ * sex_dictText:"鐢�"
+ * }
+ * 鍓嶇鐩存帴鍙栧�約ext_dictText鍦╰able閲岄潰鏃犻渶鍐嶈繘琛屽墠绔殑瀛楀吀杞崲浜�
+ * customRender:function (text) {
+ * if(text==1){
+ * return "鐢�";
+ * }else if(text==2){
+ * return "濂�";
+ * }else{
+ * return text;
+ * }
+ * }
+ * 鐩墠vue鏄繖涔堣繘琛屽瓧鍏告覆鏌撳埌table涓婄殑澶氫簡灏卞緢楹荤儲浜� 杩欎釜鐩存帴鍦ㄦ湇鍔$娓叉煋瀹屾垚鍓嶇鍙互鐩存帴鐢�
+ *
+ * @param result
+ */
+ private void parseDictText(Object result) {
+ // TableDataInfo鍒嗛〉
+ if (result instanceof TableDataInfo) {
+ (((TableDataInfo) result)).setRows(transformation(((TableDataInfo<?>) result).getRows()));
+ }
+ if (result instanceof AjaxResult) {
+ // 鍒嗛〉
+ if (((AjaxResult) result).getData() instanceof IPage) {
+ ((IPage) ((AjaxResult) result).getData()).setRecords(transformation(((IPage) ((AjaxResult) result).getData()).getRecords()));
+ }
+ // 鏃犲垎椤�-list
+ if (((AjaxResult) result).getData() instanceof ArrayList) {
+ (((AjaxResult) result)).setData(transformation((List<?>) ((AjaxResult) result).getData()));
+ }
+ // object
+ if (((AjaxResult) result).getData() instanceof Object) {
+ (((AjaxResult) result)).setData(transformation(Arrays.asList(((AjaxResult<?>) result).getData())).get(0));
+ }
+ }
+ }
+
+ /**
+ * 缈昏瘧瀛楀吀鏂囨湰
+ *
+ * @param code
+ * @param text
+ * @param table
+ * @param key
+ * @return
+ */
+ private String translateDictValue(String code, String text, String table, String key) {
+ if (OConvertUtils.isEmpty(key)) {
+ return null;
+ }
+ StringBuffer textValue = new StringBuffer();
+ String[] keys = key.split(",");
+ for (String k : keys) {
+ String tmpValue = null;
+ log.debug(" 瀛楀吀 key : " + k);
+ if (k.trim().length() == 0) {
+ continue; //璺宠繃寰幆
+ }
+ if (!StringUtils.isEmpty(table)) {
+ log.debug("--DictAspect------dicTable=" + table + " ,dicText= " + text + " ,dicCode=" + code);
+ tmpValue = commonAPI.translateDictFromTable(table, text, code, k.trim());
+ } else {
+ tmpValue = commonAPI.translateDict(code, k.trim());
+ }
+ if (tmpValue != null) {
+ if (!"".equals(textValue.toString())) {
+ textValue.append(",");
+ }
+ textValue.append(tmpValue);
+ }
+
+ }
+ return textValue.toString();
+ }
+
+ /**
+ * 鏁版嵁杞崲
+ *
+ * @param list
+ * @return
+ */
+ private List<JSONObject> transformation(List<?> list) {
+ List<JSONObject> items = new ArrayList<>();
+ for (Object record : list) {
+ ObjectMapper mapper = new ObjectMapper();
+ String json = "{}";
+ try {
+ //瑙e喅@JsonFormat娉ㄨВ瑙f瀽涓嶄簡鐨勯棶棰樿瑙丼ysAnnouncement绫荤殑@JsonFormat
+ json = mapper.writeValueAsString(record);
+ } catch (JsonProcessingException e) {
+ log.error("json瑙f瀽澶辫触" + e.getMessage(), e);
+ }
+ JSONObject item = JSONObject.parseObject(json);
+ //update-begin--Author:scott -- Date:20190603 ----for锛氳В鍐崇户鎵垮疄浣撳瓧娈垫棤娉曠炕璇戦棶棰�------
+ //for (Field field : record.getClass().getDeclaredFields()) {
+ for (Field field : OConvertUtils.getAllFields(record)) {
+ //update-end--Author:scott -- Date:20190603 ----for锛氳В鍐崇户鎵垮疄浣撳瓧娈垫棤娉曠炕璇戦棶棰�------
+ if (field.getAnnotation(Dict.class) != null) {
+ String code = field.getAnnotation(Dict.class).dicCode();
+ String text = field.getAnnotation(Dict.class).dicText();
+ String table = field.getAnnotation(Dict.class).dictTable();
+ String key = String.valueOf(item.get(field.getName()));
+
+ //缈昏瘧瀛楀吀鍊煎搴旂殑txt
+ String textValue = translateDictValue(code, text, table, key);
+
+ log.debug(" 瀛楀吀Val : " + textValue);
+ log.debug(" __缈昏瘧瀛楀吀瀛楁__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + "锛� " + textValue);
+ item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
+ }
+ //date绫诲瀷榛樿杞崲string鏍煎紡鍖栨棩鏈�
+ if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
+ SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
+ }
+ }
+ items.add(item);
+ }
+ return items;
+ }
+}
diff --git a/ruoyi-oa/pom.xml b/ruoyi-oa/pom.xml
new file mode 100644
index 0000000..2c164bb
--- /dev/null
+++ b/ruoyi-oa/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>ruoyi-vue-plus</artifactId>
+ <groupId>com.ruoyi</groupId>
+ <version>3.4.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <packaging>jar</packaging>
+ <artifactId>ruoyi-oa</artifactId>
+
+ <description>
+ oa鏈嶅姟
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-framework</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsCity.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsCity.java
new file mode 100644
index 0000000..40fd060
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsCity.java
@@ -0,0 +1,82 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 鍩庡競璁剧疆瀵硅薄 bs_city
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@Accessors(chain = true)
+@TableName("bs_city")
+public class BsCity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 鑷鍒�
+ */
+ @TableId(value = "CITY_ID")
+ private Long cityId;
+ /**
+ * 甯備唬鐮�
+ */
+ private String cityCode;
+ /**
+ * 甯傚悕绉�
+ */
+ private String cityName;
+ /**
+ * 绠�绉�
+ */
+ private String shortName;
+ /**
+ * 鐪佷唬鐮�
+ */
+ private String provinceCode;
+ /**
+ * 缁忓害
+ */
+ private String lng;
+ /**
+ * 绾害
+ */
+ private String lat;
+ /**
+ * 鎺掑簭
+ */
+ private Integer sort;
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private Date gmtCreate;
+ /**
+ * 淇敼鏃堕棿
+ */
+ private Date gmtModified;
+ /**
+ * 澶囨敞
+ */
+ private String memo;
+ /**
+ * 鐘舵��
+ */
+ private Long dataState;
+ /**
+ * 绉熸埛ID
+ */
+ private String tenantCode;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsProvince.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsProvince.java
new file mode 100644
index 0000000..5aac819
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsProvince.java
@@ -0,0 +1,78 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 鐪佷唤璁剧疆瀵硅薄 bs_province
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@Accessors(chain = true)
+@TableName("bs_province")
+public class BsProvince {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 鑷鍒�
+ */
+ @TableId(value = "PROVINCE_ID")
+ private Long provinceId;
+ /**
+ * 鐪佷唤浠g爜
+ */
+ private String provinceCode;
+ /**
+ * 鐪佷唤鍚嶇О
+ */
+ private String provinceName;
+ /**
+ * 绠�绉�
+ */
+ private String shortName;
+ /**
+ * 缁忓害
+ */
+ private String lng;
+ /**
+ * 绾害
+ */
+ private String lat;
+ /**
+ * 鎺掑簭
+ */
+ private Integer sort;
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private Date gmtCreate;
+ /**
+ * 淇敼鏃堕棿
+ */
+ private Date gmtModified;
+ /**
+ * 澶囨敞
+ */
+ private String memo;
+ /**
+ * 鐘舵��
+ */
+ private Long dataState;
+ /**
+ * 绉熸埛ID
+ */
+ private String tenantCode;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsSchool.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsSchool.java
new file mode 100644
index 0000000..0c0fb95
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/BsSchool.java
@@ -0,0 +1,74 @@
+package com.ruoyi.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 瀛︽牎瀵硅薄 bas_school
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@Accessors(chain = true)
+@TableName("bs_school")
+public class BsSchool extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 瀛︽牎浠g爜
+ */
+ private String code;
+ /**
+ * 瀛︽牎鍚嶇О
+ */
+ private String name;
+ /**
+ * 鐪佷唬鐮�
+ */
+ private String provinceCode;
+ /**
+ * 甯備唬鐮�
+ */
+ private String cityCode;
+ /**
+ * 鍖轰唬鐮�
+ */
+ private String areaCode;
+ /**
+ * 鍔炲灞傛
+ */
+ private String schoolRunLevel;
+ /**
+ * 瀛︾鑼冨洿
+ */
+ private String disciplineScope;
+ /**
+ * 澶囨敞
+ */
+ private String remarks;
+ /**
+ * 鍒犻櫎鏍囪瘑
+ */
+ @TableLogic
+ private String delFlag;
+ /**
+ * 涔愯閿�
+ */
+ @Version
+ private Integer version;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsSchoolBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsSchoolBo.java
new file mode 100644
index 0000000..51b5ae6
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/BsSchoolBo.java
@@ -0,0 +1,101 @@
+package com.ruoyi.oa.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 瀛︽牎涓氬姟瀵硅薄 bas_school
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("瀛︽牎涓氬姟瀵硅薄")
+public class BsSchoolBo extends BaseEntity {
+
+ private Long id;
+ /**
+ * 瀛︽牎浠g爜
+ */
+ @ApiModelProperty(value = "瀛︽牎浠g爜", required = true)
+ @NotBlank(message = "瀛︽牎浠g爜涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String code;
+
+ /**
+ * 瀛︽牎鍚嶇О
+ */
+ @ApiModelProperty(value = "瀛︽牎鍚嶇О", required = true)
+ @NotBlank(message = "瀛︽牎鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+ /**
+ * 鐪佷唬鐮�
+ */
+ @ApiModelProperty(value = "鐪佷唬鐮�", required = true)
+// @NotBlank(message = "鐪佷唬鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+ private String provinceCode;
+
+ /**
+ * 甯備唬鐮�
+ */
+ @ApiModelProperty(value = "甯備唬鐮�", required = true)
+// @NotBlank(message = "甯備唬鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+ private String cityCode;
+
+ /**
+ * 鍔炲灞傛
+ */
+ @ApiModelProperty(value = "鍔炲灞傛", required = true)
+ @NotBlank(message = "鍔炲灞傛涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String schoolRunLevel;
+
+ /**
+ * 瀛︾鑼冨洿
+ */
+ @ApiModelProperty(value = "瀛︾鑼冨洿", required = true)
+ @NotBlank(message = "瀛︾鑼冨洿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String disciplineScope;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty(value = "澶囨敞")
+ private String remarks;
+
+
+ /**
+ * 鍒嗛〉澶у皬
+ */
+ @ApiModelProperty("鍒嗛〉澶у皬")
+ private Integer pageSize;
+
+ /**
+ * 褰撳墠椤垫暟
+ */
+ @ApiModelProperty("褰撳墠椤垫暟")
+ private Integer pageNum;
+
+ /**
+ * 鎺掑簭鍒�
+ */
+ @ApiModelProperty("鎺掑簭鍒�")
+ private String orderByColumn;
+
+ /**
+ * 鎺掑簭鐨勬柟鍚慸esc鎴栬�卆sc
+ */
+ @ApiModelProperty(value = "鎺掑簭鐨勬柟鍚�", example = "asc,desc")
+ private String isAsc;
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsCityVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsCityVo.java
new file mode 100644
index 0000000..b62a556
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsCityVo.java
@@ -0,0 +1,121 @@
+package com.ruoyi.oa.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 鍩庡競璁剧疆瑙嗗浘瀵硅薄 bs_city
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@ApiModel("鍩庡競璁剧疆瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class BsCityVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鑷鍒�
+ */
+ @ExcelProperty(value = "鑷鍒�")
+ @ApiModelProperty("鑷鍒�")
+ private Long cityId;
+
+ /**
+ * 甯備唬鐮�
+ */
+ @ExcelProperty(value = "甯備唬鐮�")
+ @ApiModelProperty("甯備唬鐮�")
+ private String cityCode;
+
+ /**
+ * 甯傚悕绉�
+ */
+ @ExcelProperty(value = "甯傚悕绉�")
+ @ApiModelProperty("甯傚悕绉�")
+ private String cityName;
+
+ /**
+ * 绠�绉�
+ */
+ @ExcelProperty(value = "绠�绉�")
+ @ApiModelProperty("绠�绉�")
+ private String shortName;
+
+ /**
+ * 鐪佷唬鐮�
+ */
+ @ExcelProperty(value = "鐪佷唬鐮�")
+ @ApiModelProperty("鐪佷唬鐮�")
+ private String provinceCode;
+
+ /**
+ * 缁忓害
+ */
+ @ExcelProperty(value = "缁忓害")
+ @ApiModelProperty("缁忓害")
+ private String LNG;
+
+ /**
+ * 绾害
+ */
+ @ExcelProperty(value = "绾害")
+ @ApiModelProperty("绾害")
+ private String LAT;
+
+ /**
+ * 鎺掑簭
+ */
+ @ExcelProperty(value = "鎺掑簭")
+ @ApiModelProperty("鎺掑簭")
+ private Integer SORT;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ExcelProperty(value = "鍒涘缓鏃堕棿")
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ private Date gmtCreate;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ExcelProperty(value = "淇敼鏃堕棿")
+ @ApiModelProperty("淇敼鏃堕棿")
+ private Date gmtModified;
+
+ /**
+ * 澶囨敞
+ */
+ @ExcelProperty(value = "澶囨敞")
+ @ApiModelProperty("澶囨敞")
+ private String MEMO;
+
+ /**
+ * 鐘舵��
+ */
+ @ExcelProperty(value = "鐘舵��")
+ @ApiModelProperty("鐘舵��")
+ private Long dataState;
+
+ /**
+ * 绉熸埛ID
+ */
+ @ExcelProperty(value = "绉熸埛ID")
+ @ApiModelProperty("绉熸埛ID")
+ private String tenantCode;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsProvinceVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsProvinceVo.java
new file mode 100644
index 0000000..38d33be
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsProvinceVo.java
@@ -0,0 +1,114 @@
+package com.ruoyi.oa.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 鐪佷唤璁剧疆瑙嗗浘瀵硅薄 bs_province
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@ApiModel("鐪佷唤璁剧疆瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class BsProvinceVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鑷鍒�
+ */
+ @ExcelProperty(value = "鑷鍒�")
+ @ApiModelProperty("鑷鍒�")
+ private Long provinceId;
+
+ /**
+ * 鐪佷唤浠g爜
+ */
+ @ExcelProperty(value = "鐪佷唤浠g爜")
+ @ApiModelProperty("鐪佷唤浠g爜")
+ private String provinceCode;
+
+ /**
+ * 鐪佷唤鍚嶇О
+ */
+ @ExcelProperty(value = "鐪佷唤鍚嶇О")
+ @ApiModelProperty("鐪佷唤鍚嶇О")
+ private String provinceName;
+
+ /**
+ * 绠�绉�
+ */
+ @ExcelProperty(value = "绠�绉�")
+ @ApiModelProperty("绠�绉�")
+ private String shortName;
+
+ /**
+ * 缁忓害
+ */
+ @ExcelProperty(value = "缁忓害")
+ @ApiModelProperty("缁忓害")
+ private String LNG;
+
+ /**
+ * 绾害
+ */
+ @ExcelProperty(value = "绾害")
+ @ApiModelProperty("绾害")
+ private String LAT;
+
+ /**
+ * 鎺掑簭
+ */
+ @ExcelProperty(value = "鎺掑簭")
+ @ApiModelProperty("鎺掑簭")
+ private Integer SORT;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ExcelProperty(value = "鍒涘缓鏃堕棿")
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ private Date gmtCreate;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ExcelProperty(value = "淇敼鏃堕棿")
+ @ApiModelProperty("淇敼鏃堕棿")
+ private Date gmtModified;
+
+ /**
+ * 澶囨敞
+ */
+ @ExcelProperty(value = "澶囨敞")
+ @ApiModelProperty("澶囨敞")
+ private String MEMO;
+
+ /**
+ * 鐘舵��
+ */
+ @ExcelProperty(value = "鐘舵��")
+ @ApiModelProperty("鐘舵��")
+ private Long dataState;
+
+ /**
+ * 绉熸埛ID
+ */
+ @ExcelProperty(value = "绉熸埛ID")
+ @ApiModelProperty("绉熸埛ID")
+ private String tenantCode;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsSchoolVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsSchoolVo.java
new file mode 100644
index 0000000..1ca5c09
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/BsSchoolVo.java
@@ -0,0 +1,89 @@
+package com.ruoyi.oa.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.Dict;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 瀛︽牎瑙嗗浘瀵硅薄 bas_school
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Data
+@ApiModel("瀛︽牎瑙嗗浘瀵硅薄")
+@ExcelIgnoreUnannotated
+public class BsSchoolVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @ExcelProperty(value = "id")
+ @ApiModelProperty("id")
+ private Long id;
+
+ /**
+ * 瀛︽牎浠g爜
+ */
+ @ExcelProperty(value = "瀛︽牎浠g爜")
+ @ApiModelProperty("瀛︽牎浠g爜")
+ private String code;
+
+ /**
+ * 瀛︽牎鍚嶇О
+ */
+ @ExcelProperty(value = "瀛︽牎鍚嶇О")
+ @ApiModelProperty("瀛︽牎鍚嶇О")
+ private String name;
+
+ /**
+ * 鐪佷唬鐮�
+ */
+ @ExcelProperty(value = "鐪佷唬鐮�")
+ @ApiModelProperty("鐪佷唬鐮�")
+ @Dict(dictTable = "bs_province", dicCode = "PROVINCE_CODE", dicText = "PROVINCE_NAME")
+ private String provinceCode;
+
+ /**
+ * 甯備唬鐮�
+ */
+ @ExcelProperty(value = "甯備唬鐮�")
+ @ApiModelProperty("甯備唬鐮�")
+ @Dict(dictTable = "bs_city", dicCode = "CITY_CODE", dicText = "CITY_NAME")
+ private String cityCode;
+
+ /**
+ * 鍔炲灞傛
+ */
+ @ExcelProperty(value = "鍔炲灞傛", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "DICT105")
+ @ApiModelProperty("鍔炲灞傛")
+ private String schoolRunLevel;
+
+ /**
+ * 瀛︾鑼冨洿
+ */
+ @ExcelProperty(value = "瀛︾鑼冨洿", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "DICT106")
+ @ApiModelProperty("瀛︾鑼冨洿")
+ private String disciplineScope;
+
+ /**
+ * 澶囨敞
+ */
+ @ExcelProperty(value = "澶囨敞")
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsCityMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsCityMapper.java
new file mode 100644
index 0000000..04cf152
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsCityMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.BsCity;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 鍩庡競璁剧疆Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface BsCityMapper extends BaseMapperPlus<BsCity> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsProvinceMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsProvinceMapper.java
new file mode 100644
index 0000000..7bd71f9
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsProvinceMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.BsProvince;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 鐪佷唤璁剧疆Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface BsProvinceMapper extends BaseMapperPlus<BsProvince> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsSchoolMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsSchoolMapper.java
new file mode 100644
index 0000000..8a8b4d9
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/BsSchoolMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.oa.mapper;
+
+import com.ruoyi.oa.domain.BsSchool;
+import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+
+/**
+ * 瀛︽牎Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface BsSchoolMapper extends BaseMapperPlus<BsSchool> {
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsCityService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsCityService.java
new file mode 100644
index 0000000..2cbb646
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsCityService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.BsCity;
+import com.ruoyi.oa.domain.vo.BsCityVo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import java.util.List;
+
+/**
+ * 鍩庡競璁剧疆Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface IBsCityService extends IServicePlus<BsCity, BsCityVo> {
+ /**
+ * 鏌ヨ鍒楄〃
+ */
+ List<BsCity> queryList(String provinceCode);
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsProvinceService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsProvinceService.java
new file mode 100644
index 0000000..e039304
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsProvinceService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.BsProvince;
+import com.ruoyi.oa.domain.vo.BsProvinceVo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import java.util.List;
+
+/**
+ * 鐪佷唤璁剧疆Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface IBsProvinceService extends IServicePlus<BsProvince, BsProvinceVo> {
+
+ /**
+ * 鏌ヨ鍒楄〃
+ */
+ List<BsProvince> queryList();
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsSchoolService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsSchoolService.java
new file mode 100644
index 0000000..4e68569
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IBsSchoolService.java
@@ -0,0 +1,56 @@
+package com.ruoyi.oa.service;
+
+import com.ruoyi.oa.domain.BsSchool;
+import com.ruoyi.oa.domain.bo.BsSchoolBo;
+import com.ruoyi.oa.domain.vo.BsSchoolVo;
+import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 瀛︽牎Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+public interface IBsSchoolService extends IServicePlus<BsSchool, BsSchoolVo> {
+ /**
+ * 鏌ヨ鍗曚釜
+ * @return
+ */
+ BsSchoolVo queryById(Long id);
+
+ /**
+ * 鏌ヨ鍒楄〃
+ */
+ TableDataInfo<BsSchoolVo> queryPageList(BsSchoolBo bo);
+
+ /**
+ * 鏌ヨ鍒楄〃
+ */
+ List<BsSchoolVo> queryList(BsSchoolBo bo);
+
+ /**
+ * 鏍规嵁鏂板涓氬姟瀵硅薄鎻掑叆瀛︽牎
+ * @param bo 瀛︽牎鏂板涓氬姟瀵硅薄
+ * @return
+ */
+ Boolean insertByBo(BsSchoolBo bo);
+
+ /**
+ * 鏍规嵁缂栬緫涓氬姟瀵硅薄淇敼瀛︽牎
+ * @param bo 瀛︽牎缂栬緫涓氬姟瀵硅薄
+ * @return
+ */
+ Boolean updateByBo(BsSchoolBo bo);
+
+ /**
+ * 鏍¢獙骞跺垹闄ゆ暟鎹�
+ * @param ids 涓婚敭闆嗗悎
+ * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
+ * @return
+ */
+ Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsCityServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsCityServiceImpl.java
new file mode 100644
index 0000000..e2c9b42
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsCityServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.ruoyi.oa.domain.vo.BsCityVo;
+import com.ruoyi.oa.domain.BsCity;
+import com.ruoyi.oa.mapper.BsCityMapper;
+import com.ruoyi.oa.service.IBsCityService;
+import java.util.List;
+
+/**
+ * 鍩庡競璁剧疆Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Service
+public class BsCityServiceImpl extends ServicePlusImpl<BsCityMapper, BsCity, BsCityVo> implements IBsCityService {
+
+ @Override
+ public List<BsCity> queryList(String provinceCode) {
+ return baseMapper.selectList(new QueryWrapper<BsCity>().lambda().eq(BsCity::getProvinceCode, provinceCode).orderByAsc(BsCity::getSort));
+ }
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsProvinceServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsProvinceServiceImpl.java
new file mode 100644
index 0000000..2a4a369
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsProvinceServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.ruoyi.oa.domain.vo.BsProvinceVo;
+import com.ruoyi.oa.domain.BsProvince;
+import com.ruoyi.oa.mapper.BsProvinceMapper;
+import com.ruoyi.oa.service.IBsProvinceService;
+import java.util.List;
+
+/**
+ * 鐪佷唤璁剧疆Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Service
+public class BsProvinceServiceImpl extends ServicePlusImpl<BsProvinceMapper, BsProvince, BsProvinceVo> implements IBsProvinceService {
+
+ @Override
+ public List<BsProvince> queryList() {
+ return baseMapper.selectList(new QueryWrapper<BsProvince>().lambda().orderByAsc(BsProvince::getSort));
+ }
+
+}
diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsSchoolServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsSchoolServiceImpl.java
new file mode 100644
index 0000000..c4892a4
--- /dev/null
+++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/BsSchoolServiceImpl.java
@@ -0,0 +1,109 @@
+package com.ruoyi.oa.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.oa.domain.bo.BsSchoolBo;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.oa.domain.vo.BsSchoolVo;
+import com.ruoyi.oa.domain.BsSchool;
+import com.ruoyi.oa.mapper.BsSchoolMapper;
+import com.ruoyi.oa.service.IBsSchoolService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 瀛︽牎Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2021-12-03
+ */
+@Service
+public class BsSchoolServiceImpl extends ServicePlusImpl<BsSchoolMapper, BsSchool, BsSchoolVo> implements IBsSchoolService {
+
+ @Value("${mybatis-plus.global-config.dbConfig.logicNotDeleteValue}")
+ private String logicNotDeleteValue;
+
+ @Override
+ public BsSchoolVo queryById(Long id){
+ return getVoById(id);
+ }
+
+ @Override
+ public TableDataInfo<BsSchoolVo> queryPageList(BsSchoolBo bo) {
+ PagePlus<BsSchool, BsSchoolVo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo));
+ return PageUtils.buildDataInfo(result);
+ }
+
+ @Override
+ public List<BsSchoolVo> queryList(BsSchoolBo bo) {
+ return listVo(buildQueryWrapper(bo));
+ }
+
+ private LambdaQueryWrapper<BsSchool> buildQueryWrapper(BsSchoolBo bo) {
+ Map<String, Object> params = bo.getParams();
+ LambdaQueryWrapper<BsSchool> lqw = Wrappers.lambdaQuery();
+ lqw.like(StringUtils.isNotBlank(bo.getCode()), BsSchool::getCode, bo.getCode());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), BsSchool::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getProvinceCode()), BsSchool::getProvinceCode, bo.getProvinceCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getCityCode()), BsSchool::getCityCode, bo.getCityCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getSchoolRunLevel()), BsSchool::getSchoolRunLevel, bo.getSchoolRunLevel());
+ lqw.eq(StringUtils.isNotBlank(bo.getDisciplineScope()), BsSchool::getDisciplineScope, bo.getDisciplineScope());
+ return lqw;
+ }
+
+ @Override
+ public Boolean insertByBo(BsSchoolBo bo) {
+ List<BsSchool> list = baseMapper.selectList(new QueryWrapper<BsSchool>().lambda().eq(BsSchool::getCode, bo.getCode()));
+ if (list.size() > 0) {
+ throw new ServiceException("瀛︽牎浠g爜閲嶅", HttpStatus.HTTP_PARTIAL);
+ }
+ BsSchool add = BeanUtil.toBean(bo, BsSchool.class);
+ add.setDelFlag(logicNotDeleteValue);
+ boolean flag = save(add);
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ @Override
+ public Boolean updateByBo(BsSchoolBo bo) {
+ List<BsSchool> list = baseMapper.selectList(new QueryWrapper<BsSchool>().lambda()
+ .eq(BsSchool::getCode, bo.getCode()).ne(BsSchool::getId, bo.getId()));
+ if (list.size() > 0) {
+ throw new ServiceException("瀛︽牎浠g爜閲嶅", HttpStatus.HTTP_PARTIAL);
+ }
+ BsSchool update = BeanUtil.toBean(bo, BsSchool.class);
+ validEntityBeforeSave(update);
+ return updateById(update);
+ }
+
+ /**
+ * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+ *
+ * @param entity 瀹炰綋绫绘暟鎹�
+ */
+ private void validEntityBeforeSave(BsSchool entity){
+ //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+ }
+
+ @Override
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+ if(isValid){
+ //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+ }
+ return removeByIds(ids);
+ }
+}
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/BsProvinceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/BsProvinceMapper.xml
new file mode 100644
index 0000000..3e62f41
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/BsProvinceMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oa.mapper.BsProvinceMapper">
+
+ <resultMap type="com.ruoyi.oa.domain.BsProvince" id="BsProvinceResult">
+ <result property="provinceId" column="PROVINCE_ID"/>
+ <result property="provinceCode" column="PROVINCE_CODE"/>
+ <result property="provinceName" column="PROVINCE_NAME"/>
+ <result property="shortName" column="SHORT_NAME"/>
+ <result property="LNG" column="LNG"/>
+ <result property="LAT" column="LAT"/>
+ <result property="SORT" column="SORT"/>
+ <result property="gmtCreate" column="GMT_CREATE"/>
+ <result property="gmtModified" column="GMT_MODIFIED"/>
+ <result property="MEMO" column="MEMO"/>
+ <result property="dataState" column="DATA_STATE"/>
+ <result property="tenantCode" column="TENANT_CODE"/>
+ </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-oa/src/main/resources/mapper/oa/BsSchoolMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/BsSchoolMapper.xml
new file mode 100644
index 0000000..c5b1e9a
--- /dev/null
+++ b/ruoyi-oa/src/main/resources/mapper/oa/BsSchoolMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oa.mapper.BsSchoolMapper">
+
+ <resultMap type="com.ruoyi.oa.domain.BsSchool" id="BasSchoolResult">
+ <result property="id" column="id"/>
+ <result property="code" column="code"/>
+ <result property="name" column="name"/>
+ <result property="provinceCode" column="province_code"/>
+ <result property="cityCode" column="city_code"/>
+ <result property="areaCode" column="area_code"/>
+ <result property="schoolRunLevel" column="school_run_level"/>
+ <result property="disciplineScope" column="discipline_scope"/>
+ <result property="remarks" column="remarks"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="delFlag" column="del_flag"/>
+ <result property="version" column="version"/>
+ </resultMap>
+
+
+</mapper>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
index e45c198..30c477c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -20,4 +21,8 @@
.eq(SysDictData::getDictType, dictType)
.orderByAsc(SysDictData::getDictSort));
}
+
+ String queryDictTextByKey(@Param("code") String code, @Param("key") String key);
+
+ String queryTableDictTextByKey(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("key") String key);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
index ce6898e..12a3df3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
@@ -64,4 +64,24 @@
* @return 缁撴灉
*/
int updateDictData(SysDictData dictData);
+
+ /**
+ * 閫氳繃瀛楀吀code鑾峰彇瀛楀吀鏁版嵁
+ *
+ * @param code 瀛楀吀code
+ * @param key 瀛楀吀鍊�
+ * @return 瀛楀吀text
+ */
+ String queryDictTextByKey(String code, String key);
+
+ /**
+ * 閫氳繃鏌ヨ鎸囧畾table鐨� text code 鑾峰彇瀛楀吀鍊紅ext
+ * dictTableCache閲囩敤redis缂撳瓨鏈夋晥鏈�10鍒嗛挓
+ * @param table
+ * @param text
+ * @param code
+ * @param key
+ * @return
+ */
+ String queryTableDictTextByKey(String table, String text, String code, String key);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CommonApiImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CommonApiImpl.java
new file mode 100644
index 0000000..60d6e2d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CommonApiImpl.java
@@ -0,0 +1,34 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.api.CommonAPI;
+import com.ruoyi.system.service.ISysDictDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 搴曞眰鍏遍�氫笟鍔PI锛屾彁渚涘叾浠栫嫭绔嬫ā鍧楄皟鐢�
+ * @Date:2021-11-17
+ */
+@Slf4j
+@Service
+public class CommonApiImpl implements CommonAPI {
+ /**
+ * 褰撳墠绯荤粺鏁版嵁搴撶被鍨�
+ */
+ private static String DB_TYPE = "";
+
+ @Autowired
+ private ISysDictDataService dictDataService;
+
+ @Override
+ public String translateDictFromTable(String table, String text, String code, String key) {
+ return dictDataService.queryTableDictTextByKey(table, text, code, key);
+ }
+
+ @Override
+ public String translateDict(String code, String key) {
+ return dictDataService.queryDictTextByKey(code, key);
+ }
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
index d2ac2a0..e001ad2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.constant.CacheConstant;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
@@ -10,6 +11,7 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.service.ISysDictDataService;
+import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -131,4 +133,35 @@
String getCacheKey(String configKey) {
return Constants.SYS_DICT_KEY + configKey;
}
+
+ /**
+ * 閫氳繃鏌ヨ鎸囧畾code 鑾峰彇瀛楀吀鍊紅ext
+ *
+ * @param code
+ * @param key
+ * @return
+ */
+ @Override
+ @Cacheable(value = CacheConstant.SYS_DICT_CACHE, key = "#code+':'+#key")
+ public String queryDictTextByKey(String code, String key) {
+ System.out.println("鏃犵紦瀛榙ictText鐨勬椂鍊欒皟鐢ㄨ繖閲岋紒");
+ return baseMapper.queryDictTextByKey(code, key);
+ }
+
+ /**
+ * 閫氳繃鏌ヨ鎸囧畾table鐨� text code 鑾峰彇瀛楀吀鍊紅ext
+ * dictTableCache閲囩敤redis缂撳瓨鏈夋晥鏈�10鍒嗛挓
+ *
+ * @param table
+ * @param text
+ * @param code
+ * @param key
+ * @return
+ */
+ @Override
+ @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
+ public String queryTableDictTextByKey(String table, String text, String code, String key) {
+ System.out.println("鏃犵紦瀛榙ictTable鐨勬椂鍊欒皟鐢ㄨ繖閲岋紒");
+ return baseMapper.queryTableDictTextByKey(table, text, code, key);
+ }
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
index f17d593..663ff90 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -20,4 +20,11 @@
<result property="updateTime" column="update_time"/>
</resultMap>
-</mapper>
\ No newline at end of file
+ <select id="queryDictTextByKey" resultType="java.lang.String">
+ select s.dict_label from sys_dict_data s where s.dict_type = #{code} and s.dict_value = #{key}
+ </select>
+
+ <select id="queryTableDictTextByKey" resultType="java.lang.String">
+ select ${text} as "text" from ${table} where ${code}= #{key}
+ </select>
+</mapper>
--
Gitblit v1.9.1