myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java
@@ -43,7 +43,7 @@ // 全局配置 GlobalConfig gc = new GlobalConfig(); //String projectPath = System.getProperty("user.dir"); String projectPath="D:\\tools\\moral\\screen-api\\"; String projectPath="C:\\Users\\cdl\\Desktop\\comProject\\newProject\\moral\\screen-manage\\"; gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("moral"); gc.setOpen(false); screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -82,8 +82,6 @@ public static void main(String[] args) { System.out.println(encrypt("123456","AD42F7787B035B7580000EF93BE20BAD")); System.out.println(encrypt("chenkaiyu111","AD42F7787B035B7580000EF93BE20BAD")); System.out.println(decrypt("KoWjfDMZQhJMLlG1crBPqQ==","AD42F7787B035B7580000EF93BE20BAD")); } } screen-common/src/main/java/com/moral/util/ConvertUtils.java
@@ -1,6 +1,5 @@ package com.moral.util; import org.mockito.internal.util.StringUtil; import java.util.regex.Matcher; import java.util.regex.Pattern; screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
@@ -1,5 +1,6 @@ package com.moral.util; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -11,6 +12,7 @@ * @Version TODO **/ @Component @Slf4j public class TokenEncryptUtils { private static String key; @@ -42,7 +44,7 @@ try { hexStr = hexStrToStr(str); } catch (Exception e) { e.printStackTrace(); log.error("token解密失败"+e.getMessage()); } if (hexStr != null) { hexStr = encodedString(hexStr, key); screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import java.util.concurrent.TimeUnit; @@ -43,6 +44,7 @@ public static Object hget(String uid){ return redisTemplate.opsForHash().get("user_token",uid); } /** * @Description: 生成token,并且将用户信息存入缓存 * @Param: [uid] type: 后台取值:manage 前台取值:api @@ -61,7 +63,7 @@ redisTemplate.delete(oldToken); //新token写入到value中 redisTemplate.opsForValue().set(token, userInfo); redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); //redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); //新token写入到Hash中 redisTemplate.opsForHash().put("user_token", uid, token); return token; @@ -94,14 +96,14 @@ ResponseCodeEnum.TOKEN_INVALID.getMsg()); } } catch (Exception e) { log.error("token工具类校验token异常" + e.getMessage()); throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), ResponseCodeEnum.TOKEN_INVALID.getMsg()); } } /** * @Description: 通过token获取用户信息 前台使用 * @Description: 通过token获取用户信息 * @Param: [token] * @return: java.util.Map<java.lang.String , java.lang.Object> * @Author: 陈凯裕 @@ -128,6 +130,30 @@ } /** * @Description: 销毁token * @Param: [token] * @return: void * @Author: 陈凯裕 * @Date: 2021/4/1 */ public static void destoryToken(String token) { destoryToken(getUidByToken(token), token); } /** * @Description: 根据TOKEN获取Id * @Param: [token] * @return: void * @Author: 陈凯裕 * @Date: 2021/4/1 */ public static String getUidByToken(String token) { String[] string = TokenEncryptUtils.decoded(token).split("/"); return string[0]; } /** * @Description: token延长 * @Param: [token] * @return: void screen-common/src/main/java/com/moral/util/WebUtils.java
@@ -1,22 +1,15 @@ package com.moral.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Enumeration; import java.util.Map; import java.util.TreeMap; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @Slf4j public class WebUtils extends org.springframework.web.util.WebUtils { screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java
@@ -1,18 +1,29 @@ package com.moral.api.aop.log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.moral.api.entity.ManageLog; import com.moral.api.entity.Organization; import com.moral.api.mapper.ManageLogMapper; import com.moral.api.mapper.OrganizationMapper; import com.moral.api.pojo.dto.login.AccountInfoDTO; import com.moral.api.pojo.form.organization.OrganizationDeleteForm; import com.moral.api.pojo.form.organization.OrganizationInsertForm; import com.moral.api.pojo.form.organization.OrganizationUpdateForm; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.util.TokenUtils; import com.moral.util.WebUtils; import lombok.Data; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; @@ -20,6 +31,7 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.util.Map; /** * @ClassName OperationLogAspect @@ -30,10 +42,18 @@ **/ @Aspect @Component @ConfigurationProperties(prefix = "log-aspect") @Data public class OperationLogAspect { @Autowired ManageLogMapper manageLogMapper; @Autowired OrganizationMapper organizationMapper; Map<String,String> organizationFormMap; /** * @Description: 设置切入点为OperationLogAnno注解使用的地方 @@ -55,63 +75,83 @@ * @Date: 2021/3/31 */ @AfterReturning(returning = "result", value = "pointCut()") @Transactional public void saveOperLog(JoinPoint joinPoint, Object result) throws Throwable { //判断操作是否成功,失败不计入日志 Map resultMap = JSONObject.parseObject(JSONObject.toJSONString(result), Map.class); if (!ResponseCodeEnum.SUCCESS.getCode().equals(resultMap.get("code"))) return; //获取请求参数 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST); Object parameters = request.getAttribute("parameters"); String token = request.getHeader("token"); //获取module和type MethodSignature signature = (MethodSignature) joinPoint.getSignature();//获取切入点方法信号 Method method = signature.getMethod();//获取切入点的方法 OperationLogAnno anno = method.getAnnotation(OperationLogAnno.class);//获取方法的注解 String module = anno.module();//获取操作的模块 String type = anno.type();//获取操作的类型 saveLog(request,parameters, module, type); } /** * @Description: 判断模块 * @Param: [paramters, module, type] * @return: void * @Author: 陈凯裕 * @Date: 2021/3/31 */ public void saveLog(HttpServletRequest request,Object paramters, String module, String type) { if (module.equals(Constants.ORGANIZATION_MODULE_NAME)) { saveOrganizationLog(request,paramters, module, type); } } /** * @Description: 处理组织日志 * @Param: [paramters, module, type] * @return: void * @Author: 陈凯裕 * @Date: 2021/3/31 */ @Transactional public void saveOrganizationLog(HttpServletRequest request,Object paramters, String module, String type) { if (type.equals(Constants.INSERT_OPERATE_TYPE)) {//处理组织添加日志插入 OrganizationInsertForm form = JSON.parseObject(JSON.toJSONString(paramters), OrganizationInsertForm.class); Integer accountId = 1;//固定 尚未更改 String accountName = "测试人员"; String organizationName = form.getName(); //获取操作用户id ip 名称 Integer id = Integer.parseInt(TokenUtils.getUidByToken(token)); String ip = WebUtils.getIpAddr(request); String content = accountName+"添加了新组织:"+organizationName; AccountInfoDTO account = (AccountInfoDTO) TokenUtils.getUserInfoByToken(token); String accountName = account.getAccount().getUserName(); //获取content String content = getContent(type,module,parameters); content = content+"操作人员:"+accountName+";"; //存入数据库 ManageLog manageLog = new ManageLog(); manageLog.setContent(content); manageLog.setIp(ip); manageLog.setAccountId(accountId); manageLog.setModule(module); manageLog.setType(type); manageLog.setAccountId(id); manageLogMapper.insert(manageLog); } public String getContent(String type, String module,Object parameters) { String content = ""; if (module.equals(Constants.ORGANIZATION_MODULE_NAME)) { content = getOrganizationContent(type,parameters); } return content; } /** * @Description: 获取组织模块操作描述 * @Param: [type, parameters] * @return: java.lang.String * @Author: 陈凯裕 * @Date: 2021/4/1 */ public String getOrganizationContent(String type,Object parameters) { StringBuilder content = new StringBuilder(); if (type.equals(Constants.INSERT_OPERATE_TYPE)) {//处理组织添加日志插入 OrganizationInsertForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationInsertForm.class); String organizationName = form.getName(); content.append("添加了组织:").append(organizationName).append(";"); } else if (type.equals(Constants.DELETE_OPERATE_TYPE)) { //处理组织删除日志 OrganizationDeleteForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationDeleteForm.class); Organization organization = organizationMapper.selectById(form.getOrganizationId()); String organizationName = organization.getName(); content.append("删除了组织:").append(organizationName).append(";"); } else if (type.equals(Constants.UPDATE_OPERATE_TYPE)) { //处理组织更新日志 OrganizationUpdateForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationUpdateForm.class); Map<String,Object> formMap = JSON.parseObject(JSON.toJSONString(parameters), Map.class); Organization organization = organizationMapper.selectById(form.getOrganizationId()); String organizationName = organization.getName(); content.append("更新了组织:").append(organizationName).append(";"); //将formMap中的Key全部替换为中文写入日志 formMap.forEach((k,v)->{ String key = organizationFormMap.get(k); if(key!=null) content.append(key).append("->").append(v).append(";"); }); } return content.toString(); } } screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -21,6 +21,7 @@ @Slf4j @Api(tags = {"后台账户管理"}) @RestController @CrossOrigin(origins = "*", maxAge = 3600) @RequestMapping("/account") public class AccountController { @Autowired screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java
@@ -12,6 +12,7 @@ import com.moral.api.pojo.vo.organization.OrganizationQueryVO; import com.moral.api.pojo.vo.organization.OrganizationUpdateVO; import com.moral.api.service.OrganizationService; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; @@ -31,6 +32,7 @@ **/ @Slf4j @Api(tags = {"用户组织控制器"}) @CrossOrigin(origins = "*", maxAge = 3600) @RestController @RequestMapping("/organization") public class OrganizationController { @@ -38,10 +40,8 @@ OrganizationService organizationService; @PostMapping("insert") @OperationLogAnno(module = Constants.ORGANIZATION_MODULE_NAME,type = Constants.INSERT_OPERATE_TYPE) public ResultMessage insert(@RequestBody OrganizationInsertForm form, HttpServletRequest request) { //请求参数存入request中 request.setAttribute("parameters",form); //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), @@ -63,7 +63,8 @@ } @PostMapping("update") public ResultMessage update(@RequestBody OrganizationUpdateForm form){ public ResultMessage update(@RequestBody OrganizationUpdateForm form, HttpServletRequest request) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), @@ -85,7 +86,7 @@ } @PostMapping("delete") public ResultMessage delete(@RequestBody OrganizationDeleteForm form){ public ResultMessage delete(@RequestBody OrganizationDeleteForm form,HttpServletRequest request) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), screen-manage/src/main/java/com/moral/api/controller/SystemController.java
New file @@ -0,0 +1,38 @@ package com.moral.api.controller; import com.moral.api.entity.SysArea; import com.moral.api.service.SysAreaService; import com.moral.constant.ResultMessage; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @ClassName SystemController * @Description TODO * @Author 陈凯裕 * @Date 2021/4/7 13:17 * @Version TODO **/ @Slf4j @Api(tags = {"用户组织控制器"}) @CrossOrigin(origins = "*", maxAge = 3600) @RestController @RequestMapping("/system") public class SystemController { @Autowired SysAreaService sysAreaService; @GetMapping("area/query") public ResultMessage query(){ List<SysArea> sysAreas = sysAreaService.querySysArea(); return ResultMessage.ok(sysAreas); } } screen-manage/src/main/java/com/moral/api/controller/TestController.java
@@ -6,6 +6,8 @@ import com.moral.constant.ResultMessage; import com.moral.redis.RedisUtil; import com.moral.util.PageResult; import com.moral.util.TokenEncryptUtils; import com.moral.util.TokenUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -13,12 +15,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.*; @Slf4j @@ -104,4 +104,57 @@ kafkaTemplate.send("test_topic","test111111111111111"); } @GetMapping("testToken") public void testToken(){ String decoded = TokenEncryptUtils.decoded("5b53480d4e570b54565f555775"); String decoded2 = TokenEncryptUtils.decoded("584f560a49510f5453515453"); System.out.println(decoded); System.out.println(decoded2); } public static void main(String[] args) throws IOException { String path = "C:\\Users\\cdl\\Desktop\\province.txt"; BufferedReader fis = new BufferedReader(new FileReader(path)); BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\cdl\\Desktop\\provin1ce.txt")); String line = ""; while((line = fis.readLine())!=null){ //获取code StringBuilder str = new StringBuilder(line); String code = str.substring(31, 37); //获取名称 char[] chars = line.toCharArray(); int i = 0; StringBuilder buffered = new StringBuilder(); for (char aChar : chars) { if(aChar=='\'') i ++; if(i==1){ buffered.append(aChar); } } buffered.append('\''); String name = buffered.toString(); //获取父级code line.trim(); char[] chars1 = line.toCharArray(); int j = 0; StringBuilder buffered2 = new StringBuilder(); for (char c : chars1) { if(j==6){ buffered2.append(c); } if(c==',') j++; } StringBuilder parentCode = buffered2.deleteCharAt(buffered2.length() - 1); //写入 writer.write("INSERT INTO `sys_area` VALUES ("+code+","+name+","+parentCode+");"); writer.newLine(); } writer.close(); fis.close(); } } screen-manage/src/main/java/com/moral/api/entity/ManageLog.java
@@ -14,7 +14,7 @@ * </p> * * @author moral * @since 2021-03-31 * @since 2021-04-02 */ @Data @EqualsAndHashCode(callSuper = false) @@ -29,24 +29,19 @@ private Integer id; /** * 操作类型 * 操作人员id */ private String type; private Integer accountId; /** * 操作模块 * 操作人员 */ private String module; private String userName; /** * 操作描述 */ private String content; /** * 操作人员id */ private Integer accountId; /** * Ip地址 screen-manage/src/main/java/com/moral/api/entity/Organization.java
@@ -16,7 +16,7 @@ * </p> * * @author moral * @since 2021-03-09 * @since 2021-04-06 */ @Data @EqualsAndHashCode(callSuper = false) @@ -51,29 +51,39 @@ private Integer provinceCode; /** * 省份名称 */ private String provinceName; /** * 城市代码 */ private Integer cityCode; /** * 县代码 * 城市名称 */ private String cityName; /** * 区代码 */ private Integer areaCode; /** * 镇代码 * 区名称 */ private Long townCode; private String areaName; /** * 街道代码 * 地图定位级别码 */ private Long villageCode; private Integer locationLevelCode; /** * 地图定位级别 provincd_code city_code ...... * 地图定位级别名称 */ private String locationLevel; private String locationLevelName; /** * 地址 screen-manage/src/main/java/com/moral/api/entity/SysArea.java
New file @@ -0,0 +1,52 @@ package com.moral.api.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import java.io.Serializable; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * 系统区域表 * </p> * * @author moral * @since 2021-04-07 */ @Data @EqualsAndHashCode(callSuper = false) public class SysArea extends Model<SysArea> { private static final long serialVersionUID = 1L; /** * 区域代码 */ private Integer areaCode; /** * 区域名称 */ private String areaName; /** * 父级代码 */ private Integer parentCode; /* * 子级地区 * */ @TableField(exist = false) private List<SysArea> children; @Override protected Serializable pkVal() { return this.areaCode; } } screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
@@ -1,5 +1,6 @@ package com.moral.api.interceptor; import com.moral.util.TokenUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @@ -9,7 +10,10 @@ public class ManageInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return false; String token = request.getHeader("token"); TokenUtils.checkToken(token); //TokenUtils.extendTokenTime(token); return true; } @Override screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java
@@ -9,7 +9,7 @@ * </p> * * @author moral * @since 2021-03-31 * @since 2021-04-02 */ public interface ManageLogMapper extends BaseMapper<ManageLog> { screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
@@ -17,25 +17,8 @@ * @since 2021-03-09 */ public interface ManageMenuMapper extends BaseMapper<ManageMenu> { /** * @Description: 根据角色获取所有的根菜单 * @Param: [roles] * @return: java.util.List<com.moral.api.entity.ManageMenu> * @Author: 陈凯裕 * @Date: 2021/3/10 */ List<ManageMenu> getParentMenuByRoles(List<ManageRole> roles); /** * @Description: 根据根菜单获取对应的子菜单 * @Param: * @return: * @Author: 陈凯裕 * @Date: 2021/3/10 */ List<ManageMenu> getChildrenByParentId(Integer parentId); List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles); List<ManageMenu> getAllMenusByRoles(List<ManageRole> roles); ManageMenu getManageMenuByName(String name); screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java
@@ -9,7 +9,7 @@ * </p> * * @author moral * @since 2021-03-09 * @since 2021-04-06 */ public interface OrganizationMapper extends BaseMapper<Organization> { screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java
New file @@ -0,0 +1,25 @@ package com.moral.api.mapper; import com.moral.api.entity.SysArea; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; /** * <p> * 系统区域表 Mapper 接口 * </p> * * @author moral * @since 2021-04-07 */ public interface SysAreaMapper extends BaseMapper<SysArea> { /** * @Description: 获取所有地区 * @Param: [] * @return: com.moral.api.entity.SysArea * @Author: 陈凯裕 * @Date: 2021/4/7 */ List<SysArea> querySysArea(); } screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java
@@ -41,21 +41,12 @@ private String wechat; private String createTime; private String updateTime; private List<String> roleIds; public boolean valid() { if ( ObjectUtils.isEmpty(account) || ObjectUtils.isEmpty(password) || ObjectUtils.isEmpty(email) || ObjectUtils.isEmpty(mobile) || ObjectUtils.isEmpty(userName) ) return false; screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java
@@ -15,7 +15,7 @@ private Integer organizationId; private Integer deleteChildren; private Integer deleteChildren;//1:删除对应子组织 0:不删除对应自组织 public boolean valid() { if (organizationId == null || organizationId == 0|| ObjectUtils.isEmpty(deleteChildren)) { screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java
@@ -28,15 +28,19 @@ private Integer provinceCode; private String provinceName; private Integer cityCode; private String cityName; private Integer areaCode; private Long townCode; private String areaName; private Long villageCode; private Integer locationLevelCode; private String locationLevel; private String locationLevelName; private String address; @@ -52,9 +56,9 @@ if ( ObjectUtils.isEmpty(name) || ObjectUtils.isEmpty(provinceCode) || ObjectUtils.isEmpty(cityCode) || ObjectUtils.isEmpty(areaCode) || ObjectUtils.isEmpty(locationLevel) || ObjectUtils.isEmpty(provinceName) || ObjectUtils.isEmpty(locationLevelCode) || ObjectUtils.isEmpty(locationLevelName)|| ObjectUtils.isEmpty(address) || ObjectUtils.isEmpty(expireTime) ) @@ -67,11 +71,13 @@ organization.setParentId(parentId); organization.setName(name); organization.setProvinceCode(provinceCode); organization.setProvinceName(provinceName); organization.setCityCode(cityCode); organization.setCityName(cityName); organization.setAreaCode(areaCode); organization.setTownCode(townCode); organization.setVillageCode(villageCode); organization.setLocationLevel(locationLevel); organization.setAreaName(areaName); organization.setLocationLevelCode(locationLevelCode); organization.setLocationLevelName(locationLevelName); organization.setAddress(address); organization.setPhone(phone); organization.setEmail(email); screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java
@@ -36,10 +36,6 @@ private Integer areaCode; private Long townCode; private Long villageCode; private String phone; private String email; screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java
@@ -28,15 +28,19 @@ private Integer provinceCode; private String provinceName; private Integer cityCode; private String cityName; private Integer areaCode; private Long townCode; private String areaName; private Long villageCode; private Integer locationLevelCode; private String locationLevel; private String locationLevelName; private String address; @@ -57,9 +61,7 @@ ObjectUtils.isEmpty(provinceCode) && ObjectUtils.isEmpty(cityCode) && ObjectUtils.isEmpty(areaCode) && ObjectUtils.isEmpty(townCode) && ObjectUtils.isEmpty(villageCode) && ObjectUtils.isEmpty(locationLevel) && ObjectUtils.isEmpty(locationLevelCode) && ObjectUtils.isEmpty(address) && ObjectUtils.isEmpty(phone) && ObjectUtils.isEmpty(email) && @@ -76,11 +78,13 @@ organization.setParentId(parentId); organization.setName(name); organization.setProvinceCode(provinceCode); organization.setProvinceName(provinceName); organization.setCityCode(cityCode); organization.setCityName(cityName); organization.setAreaCode(areaCode); organization.setTownCode(townCode); organization.setVillageCode(villageCode); organization.setLocationLevel(locationLevel); organization.setAreaName(areaName); organization.setLocationLevelCode(locationLevelCode); organization.setLocationLevelName(locationLevelName); organization.setAddress(address); organization.setPhone(phone); organization.setEmail(email); screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java
@@ -78,12 +78,9 @@ vo.setRoleNames(roleNames); //Date转换String Date createTime = account.getCreateTime(); Date updateTime = account.getUpdateTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String createTimeStr = sdf.format(createTime); String updateTimeStr = sdf.format(updateTime); vo.setCreateTime(createTimeStr); vo.setUpdateTime(updateTimeStr); return vo; } } screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java
@@ -62,17 +62,7 @@ /*过滤menu无用属性*/ if (!ObjectUtils.isEmpty(menus)) { for (ManageMenu menu : menus) { menu.setCreateTime(null); menu.setIsDelete(null); menu.setUpdateTime(null); menu.setParentId(null); List<ManageMenu> children = menu.getChildren(); for (ManageMenu child : children) { child.setCreateTime(null); child.setIsDelete(null); child.setUpdateTime(null); child.setParentId(null); } removeAttribute(menu); } } vo.setAccountId(account.getId()); @@ -82,4 +72,17 @@ return vo; } public static void removeAttribute(ManageMenu menu) { menu.setCreateTime(null); menu.setIsDelete(null); menu.setUpdateTime(null); menu.setParentId(null); if (ObjectUtils.isEmpty(menu.getChildren())) return; List<ManageMenu> children = menu.getChildren(); for (ManageMenu child : children) { removeAttribute(child); } } } screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java
@@ -73,6 +73,8 @@ String createTimeStr = DateUtils.dateToDateString(createTime, "yyyy-MM-dd"); String exipreTimeStr = DateUtils.dateToDateString(expireTime, "yyyy-MM-dd"); vo.setId(organization.getId()); vo.setName(organization.getName()); if (!ObjectUtils.isEmpty(parentOrganization)) vo.setParentName(parentOrganization.getName()); @@ -82,6 +84,8 @@ vo.setAddress(organization.getAddress()); vo.setCreateTime(createTimeStr); vo.setExpireTime(exipreTimeStr); vo.setLocationLevelCode(organization.getLocationLevelCode()); vo.setLocationLevelName(organization.getLocationLevelName()); return vo; } } screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java
@@ -36,7 +36,9 @@ private Long villageCode; private String locationLevel; private Integer locationLevelCode; private String locationLevelName; private String address; screen-manage/src/main/java/com/moral/api/service/ManageLogService.java
@@ -9,7 +9,7 @@ * </p> * * @author moral * @since 2021-03-31 * @since 2021-04-02 */ public interface ManageLogService extends IService<ManageLog> { screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java
@@ -2,6 +2,7 @@ import com.moral.api.entity.ManageMenu; import com.baomidou.mybatisplus.extension.service.IService; import com.moral.api.entity.ManageRole; import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -32,4 +33,6 @@ @Transactional List<ManageMenu> getManageMenuByNameFuzzy(Map map); List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles); } screen-manage/src/main/java/com/moral/api/service/OrganizationService.java
@@ -15,10 +15,9 @@ * </p> * * @author moral * @since 2021-03-09 * @since 2021-04-06 */ public interface OrganizationService extends IService<Organization> { /** * @Description: 添加客户组织 * @Param: [organizationInsertForm] @@ -54,7 +53,5 @@ * @Date: 2021/3/25 */ OrganizationQueryDTO queryOrganization(OrganizationQueryForm organizationQueryForm); } screen-manage/src/main/java/com/moral/api/service/SysAreaService.java
New file @@ -0,0 +1,28 @@ package com.moral.api.service; import com.moral.api.entity.SysArea; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * <p> * 系统区域表 服务类 * </p> * * @author moral * @since 2021-04-07 */ public interface SysAreaService extends IService<SysArea> { /** * @Description: 从缓存中查询所有的地区 * @Param: [] * @return: com.moral.api.entity.SysArea * @Author: 陈凯裕 * @Date: 2021/4/7 */ List<SysArea> querySysArea(); } screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -23,6 +23,7 @@ import com.moral.api.service.ManageAccountService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.config.mybatis.wrapper.NullFilterWrapper; import com.moral.api.service.ManageMenuService; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.util.*; @@ -50,7 +51,7 @@ @Autowired ManageRoleMapper manageRoleMapper; @Autowired ManageMenuMapper manageMenuMapper; ManageMenuService manageMenuService; @Autowired ManageAccountRoleMapper manageAccountRoleMapper; @@ -104,7 +105,7 @@ //查询菜单 List<ManageMenu> menus = null; if (!ObjectUtils.isEmpty(roles)) { menus = manageMenuMapper.getParentChildrenMenusByRoles(roles); menus = manageMenuService.getParentChildrenMenusByRoles(roles); } //封装用户信息 screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java
@@ -12,7 +12,7 @@ * </p> * * @author moral * @since 2021-03-31 * @since 2021-04-02 */ @Service public class ManageLogServiceImpl extends ServiceImpl<ManageLogMapper, ManageLog> implements ManageLogService { screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.ManageMenu; import com.moral.api.entity.ManageRole; import com.moral.api.mapper.ManageMenuMapper; import com.moral.api.mapper.ManageRoleMenuMapper; import com.moral.api.service.ManageMenuService; @@ -11,11 +12,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; /** * <p> @@ -120,4 +124,42 @@ List<ManageMenu> manageMenus = manageMenuMapper.getManageRoleByNameFuzzy(limitMap); return manageMenus; } @Override public List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles) { List<ManageMenu> allMenus = manageMenuMapper.getAllMenusByRoles(roles); Map<Integer, ManageMenu> menusMap = new HashMap<>(); for (ManageMenu menu : allMenus) { menu.setChildren(new ArrayList<>());//初始化 menusMap.put(menu.getId(), menu); } for (ManageMenu menu : allMenus) { combinationParentChildrenMenus(menusMap, menu); } //已经封装好父子菜单,去除parentId不是0的菜单,去除重复 allMenus.removeIf(new Predicate<ManageMenu>() { @Override public boolean test(ManageMenu manageMenu) { if(manageMenu.getParentId().equals(0)) return false; return true; } }); return allMenus; } /** * @Description: 组合多级菜单 * @Param: [menuMap, menu]menuMap:key为menuid,value为menu * @return: void * @Author: 陈凯裕 * @Date: 2021/4/7 */ private void combinationParentChildrenMenus(Map<Integer, ManageMenu> menuMap, ManageMenu menu) { Integer parentId = menu.getParentId(); ManageMenu parentMenu = menuMap.get(parentId); if (!ObjectUtils.isEmpty(parentMenu)) { parentMenu.getChildren().add(menu); } } } screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -1,5 +1,7 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,18 +16,22 @@ import com.moral.api.pojo.form.organization.OrganizationUpdateForm; import com.moral.api.service.OrganizationService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.util.ConvertUtils; import com.moral.util.DateUtils; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import java.util.*; /** * <p> @@ -33,13 +39,23 @@ * </p> * * @author moral * @since 2021-03-09 * @since 2021-04-06 */ @Service @ConfigurationProperties(prefix = "log-aspect") public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Organization> implements OrganizationService { @Autowired OrganizationMapper organizationMapper; @Autowired LogUtils logUtils; Map<String, String> organizationFormMap; public void setOrganizationFormMap(Map<String, String> organizationFormMap) { this.organizationFormMap = organizationFormMap; } /** * @Description: 添加客户组织 @@ -82,11 +98,18 @@ } //插入组织 organizationMapper.insert(organization); //封装DTO信息 organizationDTO.setParentOrganization(parentOrganization); organizationDTO.setOrganization(organization); organizationDTO.setCode(ResponseCodeEnum.SUCCESS.getCode()); organizationDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); StringBuilder content = new StringBuilder(); content.append("添加了组织:").append(organization.getName()); logUtils.saveOperationForManage(request, content.toString()); return organizationDTO; } @@ -136,7 +159,7 @@ //更新组织 organizationMapper.updateById(organization); //获取更新后的组合 //获取更新后的组织 organization = organizationMapper.selectById(organization.getId()); //封装DTO信息 @@ -144,6 +167,53 @@ organizationDTO.setOrganization(organization); organizationDTO.setCode(ResponseCodeEnum.SUCCESS.getCode()); organizationDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); StringBuilder content = new StringBuilder(); content.append("更新了组织:").append(organization.getName()).append(";"); //更新对象转为Map Map<String, Object> newParameters = JSONObject.parseObject(JSON.toJSONString(organizationUpdateForm), Map.class); Map<String, Object> oldParameters = JSONObject.parseObject(JSON.toJSONString(existOrganization), Map.class); Set<String> keys = organizationFormMap.keySet(); for (String key : keys) { String value = organizationFormMap.get(key); if ("parentName".equals(key)) {//更新父组织特殊处理 if (organizationUpdateForm.getParentId() != null) {//判断父组织是否进行了更新 String oldParentName = "空"; String newParentName = "空"; if (!existOrganization.getParentId().equals(0)) { oldParentName = organizationMapper.selectById(existOrganization.getParentId()).getName(); } if (!organization.getParentId().equals(0)) { newParentName = organizationMapper.selectById(organization.getParentId()).getName(); } content.append(value + ":" + oldParentName + "->" + newParentName + ";"); } } else if ("expireTime".equals(key)) {//expireTime时间格式特殊处理 if (organizationUpdateForm.getExpireTime() != null) { Date oldExpireTime = existOrganization.getExpireTime(); Date newExpireTime = organization.getExpireTime(); String oldExpireTimeStr = DateUtils.dateToDateString(oldExpireTime, "yyyy-MM-dd"); String newExpireTimeStr = DateUtils.dateToDateString(newExpireTime, "yyyy-MM-dd"); content.append(value + ":" + oldExpireTimeStr + "->" + newExpireTimeStr + ";"); } } else {//处理其他属性 if (newParameters.get(key) != null) { String newValue = "空"; String oldValue = "空"; if (newParameters.get(key) != null && !newParameters.get(key).equals(" ")) { newValue = String.valueOf(newParameters.get(key)); } if (oldParameters.get(key) != null && !oldParameters.get(key).equals(" ")) { oldValue = String.valueOf(oldParameters.get(key)); } content.append(value + ":" + oldValue + "->" + newValue + ";"); } } } logUtils.saveOperationForManage(request, content.toString()); return organizationDTO; } @@ -190,9 +260,18 @@ organizationMapper.update(null, updateChildrenWrapper); } //封装返回结果 dto.setOrganization(existOrganization); dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); StringBuilder content = new StringBuilder(); content.append("删除了组织:").append(existOrganization.getName()); if(form.getDeleteChildren().equals(Constants.DELETE_CHILDREN_ORG)) content.append("以及所有子组织"); logUtils.saveOperationForManage(request, content.toString()); return dto; } @@ -214,8 +293,6 @@ Integer provinceCode = organizationQueryForm.getProvinceCode(); Integer cityCode = organizationQueryForm.getCityCode(); Integer areaCode = organizationQueryForm.getAreaCode(); Long townCode = organizationQueryForm.getTownCode(); Long villageCode = organizationQueryForm.getVillageCode(); String phone = organizationQueryForm.getPhone(); String email = organizationQueryForm.getEmail(); String wechat = organizationQueryForm.getWechat(); @@ -236,8 +313,6 @@ queryWrapper.eq("province_code", provinceCode); queryWrapper.eq("city_code", cityCode); queryWrapper.eq("area_code", areaCode); queryWrapper.eq("town_code", townCode); queryWrapper.eq("village_code", villageCode); queryWrapper.like("phone", phone); queryWrapper.like("email", email); queryWrapper.like("wechat", wechat); @@ -264,10 +339,12 @@ Page<Organization> resultPage = organizationMapper.selectPage(page, queryWrapper); List<Organization> organizations = resultPage.getRecords(); List<OrganizationDTO> organizationDTOS = new ArrayList<>(); //查找所有组织的父组织 //查找所有组织的父组织并且封装organization到DTO中 for (Organization child : organizations) { OrganizationDTO resultDto = new OrganizationDTO(); Organization parent = organizationMapper.selectById(child.getParentId()); Organization parent = organizationMapper.selectById(child.getParentId());//查找父组织 //拼接地址字符串 changeAddressByOrganization(child); resultDto.setOrganization(child); resultDto.setParentOrganization(parent); organizationDTOS.add(resultDto); @@ -283,5 +360,29 @@ return dto; } /** * @Description: 将organization的address字段与provinceName cityName areaName进行拼接 * @Param: [organization] * @return: void * @Author: 陈凯裕 * @Date: 2021/4/2 */ public void changeAddressByOrganization(Organization organization) { String provinceName = organization.getProvinceName(); String cityName = organization.getCityName(); String areaName = organization.getAreaName(); String address = organization.getAddress(); StringBuilder newAddress = new StringBuilder(); if (provinceName != null) newAddress.append(provinceName); if (cityName != null) newAddress.append(cityName); if (areaName != null) newAddress.append(areaName); if (address != null) newAddress.append(address); organization.setAddress(newAddress.toString()); } } screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
New file @@ -0,0 +1,80 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.moral.api.entity.SysArea; import com.moral.api.mapper.SysAreaMapper; import com.moral.api.service.SysAreaService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; /** * <p> * 系统区域表 服务实现类 * </p> * * @author moral * @since 2021-04-07 */ @Service public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService { @Autowired SysAreaMapper sysAreaMapper; @Autowired RedisTemplate redisTemplate; @Override public List<SysArea> querySysArea() { List<SysArea> sysAreas = redisTemplate.opsForList().range("sysArea", 0, -1); if (ObjectUtils.isEmpty(sysAreas)) { sysAreas = querySysAreaFromDB(); } return sysAreas; } private List<SysArea> querySysAreaFromDB() { //取出所有地区 List<SysArea> sysAreas = sysAreaMapper.selectList(null); //创建Map key为地区码 value为地区对象 供组装使用 Map<Integer, SysArea> areaMap = new HashMap<>(); for (SysArea sysArea : sysAreas) { areaMap.put(sysArea.getAreaCode(), sysArea); sysArea.setChildren(new ArrayList<>());//初始化children集合 } //遍历所有城市,判断是否有父城市,如果有则添加到父城市中。 for (SysArea sysArea : sysAreas) { Integer parentCode = sysArea.getParentCode(); if (!parentCode.equals(0)) { SysArea parentArea = areaMap.get(parentCode); parentArea.getChildren().add(sysArea); } } //移除集合中非父顶级城市 sysAreas.removeIf(new Predicate<SysArea>() { @Override public boolean test(SysArea sysArea) { if (sysArea.getParentCode().equals(0)) return false; return true; } }); //存入缓存 redisTemplate.opsForList().rightPushAll("sysArea",sysAreas); return sysAreas; } } screen-manage/src/main/java/com/moral/api/util/LogUtils.java
New file @@ -0,0 +1,44 @@ package com.moral.api.util; import com.moral.api.entity.ManageAccount; import com.moral.api.entity.ManageLog; import com.moral.api.mapper.ManageLogMapper; import com.moral.api.pojo.dto.login.AccountInfoDTO; import com.moral.util.TokenUtils; import com.moral.util.WebUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; /** * @ClassName LogUtils * @Description TODO * @Author 陈凯裕 * @Date 2021/4/2 8:45 * @Version TODO **/ @Component public class LogUtils { @Autowired public ManageLogMapper manageLogMapper; @Transactional public void saveOperationForManage(HttpServletRequest request, String content) { String token = request.getHeader("token"); AccountInfoDTO accountInfoDTO = (AccountInfoDTO) TokenUtils.getUserInfoByToken(token); ManageAccount account = accountInfoDTO.getAccount(); Integer id = account.getId(); String userName = account.getUserName(); String ip = WebUtils.getIpAddr(request); ManageLog log = new ManageLog(); log.setAccountId(id); log.setIp(ip); log.setContent(content); log.setUserName(userName); manageLogMapper.insert(log); } } screen-manage/src/main/resources/application-dev.yml
@@ -13,6 +13,8 @@ spring: profiles: active: dev include: moduleFormColumn application: name: screen-manage redis: @@ -117,25 +119,15 @@ - /swagger-ui.html - /swagger-resources/** - /webjars/** - /logout - /account/insert - /account/query - /account/update - /account/delete - /account/yanzhengma - /verificationCode/get - /verificationCode/verify - /verificationCode/config - /organization/insert - /organization/update - /organization/delete - /organization/query - /verificationCode/** - /system/** - /role/getAllManageRole - /role/getManageRoleByNameFuzzy - /role/updateRoleMenu - /menu/getAllManageMenu - /menu/getManageMenuByNameFuzzy - /api/** AES: KEY: AD42F7787B035B7580000EF93BE20BAD @@ -143,3 +135,4 @@ KEY: foh3wi2ooghiCh5 screen-manage/src/main/resources/application-moduleFormColumn.yml
New file @@ -0,0 +1,17 @@ #接收前端数据实体中属性的含义,用于转换供日志使用。 log-aspect: organization-form-map: parentName: 父组织 name: 名称 provinceName: 省份 cityName: 城市 areaName: 区域 locationLevelName: 定位级别 address: 地址 phone: 电话 email: 邮箱 wechat: 微信 expireTime: 过期时间 screen-manage/src/main/resources/mapper/ManageLogMapper.xml
@@ -5,10 +5,9 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageLog"> <id column="id" property="id" /> <result column="type" property="type" /> <result column="module" property="module" /> <result column="content" property="content" /> <result column="account_id" property="accountId" /> <result column="user_name" property="userName" /> <result column="content" property="content" /> <result column="ip" property="ip" /> <result column="create_time" property="createTime" /> </resultMap> screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
@@ -15,59 +15,14 @@ <result column="is_delete" property="isDelete"/> </resultMap> <!--父子结构查询映射结果--> <resultMap id="ParentChildrenResultMap" type="com.moral.api.entity.ManageMenu"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="url" property="url"/> <result column="icon" property="icon"/> <result column="parent_id" property="parentId"/> <result column="order" property="order"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="is_delete" property="isDelete"/> <collection property="children" ofType="com.moral.api.entity.ManageMenu" column="id" select="getChildrenByParentId"></collection> </resultMap> <sql id="Base_Column_List"> mm.id,mm.name,mm.url,mm.icon,mm.parent_id,mm.order,mm.create_time,mm.update_time,mm.is_delete </sql> <!--根据角色集合查询所有的父菜单--> <select id="getParentMenuByRoles" resultMap="BaseResultMap"> select <include refid="Base_Column_List"></include> from manage_menu mm join manage_role_menu mrm on mm.`id` = mrm.`menu_id` and mm.`is_delete`=0 join manage_role mr on mr.`id` = mrm.`role_id` and mr.`id` IN <foreach collection="list" separator="," open="(" close=")" item="role"> #{role.id} </foreach> where mm.`is_delete`=0 AND mm.`parent_id`=0; </select> <!--根据父菜单Id查询所有的子菜单--> <select id="getChildrenByParentId" parameterType="Integer" resultMap="BaseResultMap"> SELECT <include refid="Base_Column_List"></include> FROM manage_menu mm WHERE mm.parent_id = #{value} </select> <!--根据角色查询父子结构的菜单--> <select id="getParentChildrenMenusByRoles" resultMap="ParentChildrenResultMap"> <select id="getAllMenusByRoles" resultMap="BaseResultMap"> select DISTINCT <include refid="Base_Column_List"></include> @@ -86,8 +41,6 @@ </foreach> where mm.`is_delete`=0 AND mm.`parent_id`=0; </select> <select id="getManageMenuByName" resultMap="BaseResultMap"> screen-manage/src/main/resources/mapper/OrganizationMapper.xml
@@ -9,11 +9,13 @@ <result column="admin_user_id" property="adminUserId" /> <result column="name" property="name" /> <result column="province_code" property="provinceCode" /> <result column="province_name" property="provinceName" /> <result column="city_code" property="cityCode" /> <result column="city_name" property="cityName" /> <result column="area_code" property="areaCode" /> <result column="town_code" property="townCode" /> <result column="village_code" property="villageCode" /> <result column="location_level" property="locationLevel" /> <result column="area_name" property="areaName" /> <result column="location_level_code" property="locationLevelCode" /> <result column="location_level_name" property="locationLevelName" /> <result column="address" property="address" /> <result column="phone" property="phone" /> <result column="email" property="email" /> screen-manage/src/main/resources/mapper/SysAreaMapper.xml
New file @@ -0,0 +1,18 @@ <?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.moral.api.mapper.SysAreaMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.moral.api.entity.SysArea"> <id column="area_code" property="areaCode"/> <result column="area_name" property="areaName"/> <result column="parent_code" property="parentCode"/> </resultMap> <sql id="Base_Column_List"> area_code,area_name,parent_code </sql> </mapper>