浏览代码

增加后台菜单功能模块、调整部分配置

chenwen 2 年之前
父节点
当前提交
22019822ff

+ 11 - 4
pom.xml

@@ -66,10 +66,17 @@
 		    <groupId>com.github.ben-manes.caffeine</groupId>
 		    <artifactId>caffeine</artifactId>
 		</dependency>
-	  <dependency>
-		  <groupId>org.projectlombok</groupId>
-		  <artifactId>lombok</artifactId>
-	  </dependency>
+		
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+		</dependency>
+		
+		<dependency>
+		    <groupId>com.belerweb</groupId>
+		    <artifactId>pinyin4j</artifactId>
+		    <version>2.5.1</version>
+		</dependency>
   </dependencies>
 	
   <dependencyManagement>

+ 1 - 1
src/main/java/com/hb/proj/allconfig/AccessToken.java

@@ -47,7 +47,7 @@ public class AccessToken {
 		return authCodes.contains("~"+MD5Encrypt.md5(uri.trim())+"~");
 	}
 
-	public boolean getSuperAdminIf() {
+	public boolean isSuperAdminIf() {
 		return superAdminIf;
 	}
 

+ 1 - 1
src/main/java/com/hb/proj/allconfig/CacheConfig.java

@@ -20,7 +20,7 @@ public class CacheConfig {
 	public CacheConfig(@Value("${cache.token.expire}") long expireVal, @Value("${token.header.name}") String tokenHeaderName) {
 		//System.out.println(expireVal);
 		tokenCache = Caffeine.newBuilder()
-				.expireAfterAccess(expireVal, TimeUnit.SECONDS)
+				.expireAfterAccess(expireVal, TimeUnit.MINUTES)
 				.initialCapacity(20)
 				.build();
 		

+ 1 - 2
src/main/java/com/hb/proj/allconfig/SpringMvcConfigurer.java

@@ -13,7 +13,6 @@ import org.springframework.web.cors.CorsConfiguration;
 import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 import org.springframework.web.filter.CorsFilter;
 import org.springframework.web.method.support.HandlerMethodArgumentResolver;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@@ -63,7 +62,7 @@ public class SpringMvcConfigurer implements WebMvcConfigurer {
         configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "HEAD", "DELETE", "OPTION"));
         configuration.setAllowedHeaders(Arrays.asList("*"));
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-        source.registerCorsConfiguration("/*", configuration);
+        source.registerCorsConfiguration("/**", configuration);
 
         // 有多个filter时此处可设置改CorsFilter的优先执行顺序,保证CorsFilter在其他过滤器之前执行(避免其他过滤器执行异常,导致CorsFilter没执行,从而导致跨域失效)
         FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));

+ 70 - 0
src/main/java/com/hb/proj/auth/controller/AuthController.java

@@ -1,9 +1,21 @@
 package com.hb.proj.auth.controller;
 
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.hb.proj.allconfig.AccessToken;
+import com.hb.proj.auth.service.AuthService;
+import com.hb.proj.utils.RespVO;
+import com.hb.proj.utils.RespVOBuilder;
+
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotBlank;
+
 /**
  * 权限相关接口
  * @author cwen
@@ -15,4 +27,62 @@ import org.springframework.web.bind.annotation.RestController;
 @Validated
 public class AuthController {
 
+	@Autowired
+	private AuthService service;
+	
+	/**
+	 * 加载当前登录人的导航菜单
+	 * @param token  登录人token 
+	 * @return
+	 */
+	@RequestMapping("/loadMyMenus")
+	public RespVO<Object> loadMyMenus(AccessToken token){
+		if(token==null){
+			return RespVOBuilder.error("缺少登录信息");
+		}
+		return RespVOBuilder.ok(token.isSuperAdminIf()?service.loadAllMenus():service.loadMyMenus(token.getTokenId()));
+		
+	}
+	
+	
+	/**
+	 * 可分配的权限节点(菜单,功能点暂时不需要)
+	 * @param response
+	 */
+	@RequestMapping("/loadAuthNodes")
+	public RespVO<Object> loadAuthNodes(){
+		List<Map<String,Object>> nodes=service.loadAllMenuNodes();
+		if(nodes==null||nodes.size()==0){
+			return RespVOBuilder.error("未找到数据");
+			
+		}
+		return RespVOBuilder.ok(nodes);
+	}
+	
+	@RequestMapping("/loadUsAuth")
+	public RespVO<Object> loadUsAuth(@NotBlank(message = "缺少用户信息") String userId){
+		
+		return RespVOBuilder.ok(service.loadUserAuth(userId));
+	}
+	
+	
+	@RequestMapping("/save")
+	public RespVO<Object> save(@NotBlank(message = "缺少用户信息") String userId,@NotBlank(message = "缺少已分配数据") String authIds){
+		
+		service.saveUserAuth(userId, authIds);
+		return RespVOBuilder.ok();
+	}
+	
+	@RequestMapping("/loadRoleAuth")
+	public RespVO<Object> loadRoleAuth(@NotBlank(message = "缺少角色信息") String roleId,HttpServletResponse response){
+		return RespVOBuilder.ok(service.loadRoleAuth(roleId));
+	}
+	
+	
+	@RequestMapping("/saveRoleAuth")
+	public RespVO<Object> saveRoleAuth(@NotBlank(message = "缺少角色信息") String roleId,@NotBlank(message = "缺少已分配数据") String authIds){
+		
+		service.saveRoleAuth(roleId, authIds);
+		return RespVOBuilder.ok();
+	}
 }

+ 115 - 0
src/main/java/com/hb/proj/auth/controller/MenuController.java

@@ -0,0 +1,115 @@
+package com.hb.proj.auth.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.hb.proj.allconfig.AccessToken;
+import com.hb.proj.auth.service.MenuService;
+import com.hb.proj.model.MenuPO;
+import com.hb.proj.utils.RespVO;
+import com.hb.proj.utils.RespVOBuilder;
+
+import jakarta.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/menu")
+@Validated
+public class MenuController {
+
+	@Autowired
+	private MenuService service;
+	
+	
+	/**
+	 * 获得单个菜单
+	 * @param menuId  菜单记录id
+	 * @return
+	 */
+	@GetMapping("/get")
+	public RespVO<Object> get(@NotBlank(message = "菜单编号不能为空") String menuId){
+		
+		return RespVOBuilder.ok(service.getMenu(menuId));
+	}
+	
+	
+	/**
+	 * 增加新菜单
+	 * @param menu  菜单实体
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/add")
+	public RespVO<Object> add(@Validated MenuPO  menu,AccessToken token){
+		
+		if(StringUtils.isBlank(menu.getFatherMenuId())){
+			menu.setFatherMenuId("0");
+		}
+		String newAssistCode = service.generateLeveledCode(menu.getFatherMenuId());
+		if(newAssistCode==null){
+			return RespVOBuilder.error("指定的父菜单不存在");
+		}
+		menu.setAssistCode(newAssistCode);
+		menu.setModifyBy(token!=null?token.getTokenId():"unknow");
+		return RespVOBuilder.ok(service.addMenu(menu));
+	}
+	
+	/**
+	 * 更新菜单
+	 * @param menu  菜单实体
+	 * @param oldFatherMenuId 菜单原上级菜单id
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/update")
+	public RespVO<Object> update(@Validated MenuPO  menu,String oldFatherMenuId,AccessToken token){
+		if(StringUtils.isEmpty(menu.getFatherMenuId())){
+			menu.setFatherMenuId("0");
+		}
+		menu.setModifyBy(token!=null?token.getTokenId():"unknow");
+		String fatherMenuId=menu.getFatherMenuId();
+		if (!oldFatherMenuId.equals(fatherMenuId)) { // 隶属关系变动后,修正assistCode
+			String newAssistCode =service.generateLeveledCode(fatherMenuId);
+			if(newAssistCode==null){
+				return RespVOBuilder.error("指定的父菜单不存在");
+			}
+			service.updateMenu(menu,newAssistCode);
+		}
+		else{
+			service.updateMenu(menu,null);
+		}
+		return RespVOBuilder.ok();
+	}
+	
+	
+	/**
+	 * 删除单个菜单
+	 * @param menuId  被删除菜单id
+	 * @return
+	 */
+	@RequestMapping("/delete")
+	public RespVO<Object> delete(@NotBlank(message = "菜单编号不能为空") String menuId){
+		service.deleteMenu(menuId);
+		return RespVOBuilder.ok();
+	}
+	
+	/**
+	 * 获得菜单子节点
+	 * @param superId
+	 * @param targetDepth
+	 * @param response
+	 */
+	@PostMapping("/treeNode")
+	public RespVO<Object> treeNode(String superId){
+		List<Map<String,Object>> nodes=service.queryTreeNodeBySuperId(StringUtils.isEmpty(superId)?"0":superId);
+		return RespVOBuilder.ok(nodes);
+	}
+	
+}

+ 123 - 0
src/main/java/com/hb/proj/auth/service/AuthService.java

@@ -0,0 +1,123 @@
+package com.hb.proj.auth.service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.hb.xframework.dao.core.PreparedSQLArgs;
+import com.hb.xframework.dao.core.SpringJdbcDAO;
+import com.hb.xframework.dao.core.UpdateHandler;
+import com.hb.xframework.dao.util.UUIDHexGenerator;
+import com.hb.xframework.util.SessionThreadLocal;
+import com.hb.xframework.util.SessionUser;
+
+@Service
+public class AuthService {
+
+	@Autowired
+	private SpringJdbcDAO  dao;
+	
+	public List<Map<String,Object>> loadMyMenus(String usId){
+		StringBuilder sql=new StringBuilder();
+		
+		sql.append("select distinct tm.* from tsys_menu tm  inner join  ( ");
+		sql.append("select m.assist_code from tsys_menu m ");
+		sql.append("inner join  tsys_user_menu um on um.menu_id=m.menu_id ");
+		sql.append("where um.user_id=? ");
+		sql.append(") tf on tf.assist_code like concat(tm.assist_code,'%') ");
+		sql.append("order by display_num ");
+		
+		
+		return dao.queryForList(sql.toString(), usId);
+	}
+	
+	public List<Map<String,Object>> loadMyRoleMenus(String usId){
+		StringBuilder sql=new StringBuilder();
+		
+		sql.append("select distinct tm.* from tsys_menu tm  inner join  ( ");
+		sql.append("select rm.menu_id,m.menu_name,m.assist_code from tsys_user_role ur  ");
+		sql.append("inner join  tsys_role_menu rm on ur.role_id=rm.role_id ");
+		sql.append("inner join tsys_menu m  on rm.menu_id=m.menu_id ");
+		sql.append("where ur.user_id=? ");
+		sql.append(") tf on tf.assist_code like concat(tm.assist_code,'%') ");
+		sql.append(" where tm.del_if=false");
+		sql.append("order by display_num ");
+				
+		return dao.queryForList(sql.toString(), usId);
+	}
+	
+	public List<Map<String,Object>> loadAllMenus(){
+		StringBuilder sql=new StringBuilder();
+		sql.append("select * from tsys_menu m where del_if=false order by m.display_num");
+		return dao.queryForList(sql.toString());
+	}
+	
+	public List<Map<String,Object>>  loadAllMenuNodes(){
+		StringBuilder sql=new StringBuilder();
+		sql.append("select menu_id id,menu_name name,father_menu_id p_id,'menu' node_type,length(menu_link) link_tag from tsys_menu m where del_if=false order by display_num");
+		return dao.queryForList(sql.toString());
+	}
+	
+	public List<Map<String,Object>> loadAllFunNodes(){
+		StringBuilder sql=new StringBuilder();
+		sql.append("select fun_id id,fun_name name,menu_id p_id,'fun' node_type from tsys_fun f where del_if=false");
+		return dao.queryForList(sql.toString());
+	}
+	
+	public List<Map<String,Object>>  loadUserAuth(String userId){
+		String sql="select menu_id id from tsys_user_menu where user_id=? and del_if=false";
+		return dao.queryForList(sql,userId);
+	}
+	
+	public void saveUserAuth(String userId,String authIds){
+		String sql="delete from tsys_user_menu where user_id=?";
+		dao.exeUpdate(sql, userId);
+		String[] ids=authIds.split(",");
+		List<Map<String,Object>> datas=new ArrayList<Map<String,Object>>(ids.length);
+		UUIDHexGenerator uuid=UUIDHexGenerator.getInstance();
+		Map<String,Object> d=null;
+		SessionUser su=SessionThreadLocal.getSessionUser();
+		for(String id : ids){
+			d=new HashMap<String,Object>();
+			d.put("recordId", uuid.generate());
+			d.put("userId", userId);
+			d.put("menuId", id);
+			d.put("createTime", new Date());
+			d.put("createBy", su!=null?su.getUserName():null);
+			datas.add(d);
+		}
+		PreparedSQLArgs preSQL=UpdateHandler.getInsertPreparedSQL(datas.get(0), "tsys_user_menu");
+		dao.executeBatchUpdate(datas, preSQL);
+	}
+	
+	public List<Map<String,Object>>  loadRoleAuth(String roleId){
+		String sql="select menu_id id from tsys_role_menu where role_id=? and del_if=false";
+		return dao.queryForList(sql,roleId);
+	}
+	
+	public void saveRoleAuth(String roleId,String authIds){
+		String sql="delete from tsys_role_menu where role_id=?";
+		dao.getJdbcTemplate().update(sql, roleId);
+		String[] ids=authIds.split(",");
+		List<Map<String,Object>> datas=new ArrayList<Map<String,Object>>(ids.length);
+		UUIDHexGenerator uuid=UUIDHexGenerator.getInstance();
+		Map<String,Object> d=null;
+		SessionUser su=SessionThreadLocal.getSessionUser();
+		for(String id : ids){
+			d=new HashMap<String,Object>();
+			d.put("recordId", uuid.generate());
+			d.put("roleId", roleId);
+			d.put("menuId", id);
+			d.put("modifyTime", new Date());
+			d.put("modifyBy", su!=null?su.getUserName():null);
+			datas.add(d);
+		}
+		PreparedSQLArgs preSQL=UpdateHandler.getInsertPreparedSQL(datas.get(0), "tsys_role_menu");
+		dao.executeBatchUpdate(datas, preSQL);
+	}
+}

+ 144 - 0
src/main/java/com/hb/proj/auth/service/MenuService.java

@@ -0,0 +1,144 @@
+package com.hb.proj.auth.service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.hb.proj.model.MenuPO;
+import com.hb.proj.utils.PinyinFromHanzi;
+import com.hb.xframework.dao.core.SpringJdbcDAO;
+import com.hb.xframework.dao.util.UUIDHexGenerator;
+
+@Service
+public class MenuService {
+
+	@Autowired
+	private SpringJdbcDAO  dao;
+	
+	
+	public List<Map<String,Object>> queryTreeNodeBySuperId(String fatherMenuId) {
+		StringBuilder sql=new StringBuilder();
+		sql.append("select m.menu_id id,m.menu_name name,m.father_menu_id p_id,menu_link, ");
+		sql.append("(select count(1) from tsys_menu cm where cm.father_menu_id=m.menu_id) child_count");
+		sql.append(" from tsys_menu  m where m.father_menu_id=?");
+		sql.append(" order by m.display_num");
+		return dao.queryForList(sql.toString(),fatherMenuId);
+	}
+	
+	public Map<String,Object> getMenu(String menuId){
+		StringBuilder sql=new StringBuilder(100);
+		sql.append("select menu.*,");
+		sql.append("(select sm.menu_name from tsys_menu sm where sm.menu_id=menu.father_menu_id) father_menu_name");
+		sql.append(" from tsys_menu menu where menu.menu_id=?");
+		return dao.queryForMap(sql.toString(), menuId);
+	}
+	
+	public String  addMenu(MenuPO menu){
+		UUIDHexGenerator uuid=new UUIDHexGenerator();
+		menu.setModifyTime(new Date());
+		menu.setMenuId(uuid.generate());
+		if(StringUtils.isEmpty(menu.getFatherMenuId())){
+			menu.setFatherMenuId("0");
+		}
+		if(menu.getDisplayNum()==null){
+			Number num=getMenuMaxDispNum(menu.getFatherMenuId());
+			menu.setDisplayNum(num==null?0:(num.intValue()+1));
+		}
+		dao.insert(menu, "tsys_menu");
+		
+		//增加菜单的时候,自动增加浏览功能项
+		Map<String,Object>  fun=new HashMap<String,Object>();
+		fun.put("funId", uuid.generate());
+		fun.put("createTime", new Date());
+		fun.put("menuId",menu.getMenuId());
+		fun.put("createBy", menu.getModifyBy());
+		fun.put("funCode", PinyinFromHanzi.getPinyin(menu.getMenuName()).toUpperCase()+"_BROWSE");
+		fun.put("funName", "浏览");
+		
+		dao.insert(fun, "tsys_fun");
+		
+		return menu.getMenuId();
+	}
+	
+	public boolean deleteMenu(String menuId){
+		String sql="delete from tsys_menu where menu_id=?";
+		dao.exeUpdate(sql, menuId);
+		
+		//级联删除分配给所有用户的该的功能
+		sql="update  tsys_user_fun set del_if=true,modify_time=now() where fun_id in (select fun_id from tsys_fun where menu_id=?)";
+		dao.exeUpdate(sql,menuId);
+		
+		//级联删除挂载的功能点
+		sql="update  tsys_fun set del_if=true where menu_id=?";
+		dao.exeUpdate(sql,menuId);
+		return true;
+	}
+	
+	
+	
+	public boolean updateMenu(MenuPO menu,String newAssistCode){
+		if(StringUtils.isNotEmpty(newAssistCode)){
+			updateAssistCode(menu.getAssistCode(),newAssistCode);
+			menu.setAssistCode(newAssistCode);
+		}
+		menu.setModifyTime(new Date());
+		dao.update(menu, "tsys_menu", "menu_id");
+		return true;
+	}
+	
+	/**
+	 * 获得指定级别下的最大assistCode
+	 * @param superId
+	 * @return
+	 */
+	public String generateLeveledCode(String superId) {
+		String superAssistCode=null;
+		if("0".equals(superId)){  //顶级父节点
+			superAssistCode="C";
+		}
+		else{
+			Map<String,Object> superMenu=getMenu(superId);
+			if(superMenu==null){
+				return null;
+			}
+			superAssistCode=(String)superMenu.get("assistCode");
+			if(StringUtils.isEmpty(superAssistCode)){
+				superAssistCode="C";
+			}
+		}
+		String subMaxAssistCode =getMaxSubAssistCode(superId);
+		if (subMaxAssistCode == null || "null".equalsIgnoreCase(subMaxAssistCode)) { // 没有子编码时
+			return superAssistCode + "000";
+		}
+		String subSerial = subMaxAssistCode.replaceFirst(superAssistCode, ""); // 子编码流水号
+
+		int nextNum = Integer.parseInt(subSerial) + 1;
+		subSerial = String.format("%1$03d", nextNum);
+		return superAssistCode + subSerial;
+	}
+	
+	private String getMaxSubAssistCode(String superId) {
+		String sql = "select max(assist_code) assist_code from tsys_menu where father_menu_id=?";
+		Map<String,Object> rst=dao.queryForMap(sql, superId);
+		return rst!=null?(String)rst.get("assistCode"):null;
+	}
+	
+	private boolean updateAssistCode(String assistCode, String newAssistCode){
+		StringBuilder sql = new StringBuilder();
+		sql.append("update tsys_menu set assist_code=replace(assist_code,?,?)");
+		sql.append(" where assist_code like ?");
+		dao.getJdbcTemplate().update(sql.toString(), assistCode, newAssistCode, assistCode + "%");
+		return true;
+	}
+	
+	private Number getMenuMaxDispNum(String fatherMenuId){
+		String sql="select max(m.display_num) num from tsys_menu m where m.father_menu_id=?";
+		Map<String,Object> rst=dao.queryForMap(sql, fatherMenuId);
+		return rst!=null?((Number)rst.get("num")):null;
+	}
+}

+ 131 - 0
src/main/java/com/hb/proj/model/MenuPO.java

@@ -0,0 +1,131 @@
+package com.hb.proj.model;
+
+import java.util.Date;
+
+import jakarta.validation.constraints.NotNull;
+
+public class MenuPO {
+
+	private String menuId;
+	
+	private String fatherMenuId;
+	
+	@NotNull(message="菜单名不能为空")
+	private String menuName;
+	
+	private String menuIcon;
+	
+	private String menuLink;
+	
+	private String modifyBy;
+	
+	private Date modifyTime;
+	
+	private Date createTime;
+	
+	private String createBy;
+	
+	private Integer displayNum;
+	
+	private String  targetDepth;
+	
+	private String assistCode;
+
+	public String getMenuId() {
+		return menuId;
+	}
+
+	public void setMenuId(String menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getFatherMenuId() {
+		return fatherMenuId;
+	}
+
+	public void setFatherMenuId(String fatherMenuId) {
+		this.fatherMenuId = fatherMenuId;
+	}
+
+	public String getMenuName() {
+		return menuName;
+	}
+
+	public void setMenuName(String menuName) {
+		this.menuName = menuName;
+	}
+
+	public String getMenuIcon() {
+		return menuIcon;
+	}
+
+	public void setMenuIcon(String menuIcon) {
+		this.menuIcon = menuIcon;
+	}
+
+	public String getMenuLink() {
+		return menuLink;
+	}
+
+	public void setMenuLink(String menuLink) {
+		this.menuLink = menuLink;
+	}
+
+	public Integer getDisplayNum() {
+		return displayNum;
+	}
+
+	public void setDisplayNum(Integer displayNum) {
+		this.displayNum = displayNum;
+	}
+
+	public String getTargetDepth() {
+		return targetDepth;
+	}
+
+	public void setTargetDepth(String targetDepth) {
+		this.targetDepth = targetDepth;
+	}
+
+	public String getAssistCode() {
+		return assistCode;
+	}
+
+	public void setAssistCode(String assistCode) {
+		this.assistCode = assistCode;
+	}
+
+	
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getModifyBy() {
+		return modifyBy;
+	}
+
+	public void setModifyBy(String modifyBy) {
+		this.modifyBy = modifyBy;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+}

+ 78 - 0
src/main/java/com/hb/proj/utils/PinyinFromHanzi.java

@@ -0,0 +1,78 @@
+package com.hb.proj.utils;
+
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+
+public class PinyinFromHanzi {
+	
+	private static HanyuPinyinOutputFormat defaultFormat=new HanyuPinyinOutputFormat();
+	static{
+		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+	}
+	
+	public static String getPinyin(String chinese){
+		StringBuffer pybf = new StringBuffer();
+		char[] arr = chinese.toCharArray();
+	    for (int i = 0; i < arr.length; i++) {
+			if (arr[i] > 128) {
+				try {
+					String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr[i],defaultFormat);
+					if (_t != null) {
+						pybf.append(_t[0].charAt(0));
+					}
+				} catch (BadHanyuPinyinOutputFormatCombination e) {
+					e.printStackTrace();
+				}
+			} else {
+				pybf.append(arr[i]);
+			}
+		}
+		return pybf.toString().replaceAll("\\W", "").trim();
+	}
+	
+	public static String getFullPinyin(String chinese){
+		StringBuffer pybf = new StringBuffer();
+		char[] arr = chinese.toCharArray();
+		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+		String py=null;
+		for (int i = 0; i < arr.length; i++) {
+			py=getCharPinyin(arr[i]);
+			if(py==null){
+				pybf.append(arr[i]);
+			}
+			else{
+				pybf.append(py);
+			}
+		}
+		
+		return pybf.toString();
+	}
+	
+	public static String getCharPinyin(char c ){
+		try{
+
+			String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat);
+			return pinyin!=null?pinyin[0]:null;
+        } 
+		catch(BadHanyuPinyinOutputFormatCombination e)
+		{
+			e.printStackTrace();
+            return null;
+        }
+
+	}
+	
+	public static void main(String[] args){
+		
+       System.out.println(PinyinFromHanzi.getFullPinyin("丽菊"));
+      
+       
+	}
+
+}

+ 5 - 5
src/main/java/com/hb/proj/well/service/WellService.java

@@ -1,14 +1,14 @@
 package com.hb.proj.well.service;
 
 
-import com.hb.proj.auth.service.User;
-import com.hb.proj.model.Well;
-import com.hb.xframework.dao.core.SpringJdbcDAO;
-import com.hb.xframework.dao.util.PageModel;
+import java.util.Map;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Map;
+import com.hb.proj.model.Well;
+import com.hb.xframework.dao.core.SpringJdbcDAO;
+import com.hb.xframework.dao.util.PageModel;
 
 @Service
 public class WellService {

+ 2 - 2
src/main/resources/application-dev.properties

@@ -30,8 +30,8 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 spring.datasource.type=com.hb.xframework.dao.util.HikariDataSourceWrap
 spring.datasource.dialect=MySQL
 
-#缓存配置  登录信息过期时间,单位
-cache.token.expire=120
+#缓存配置  登录信息过期时间,单位分钟
+cache.token.expire=30
 
 #token 在请求header中的name,默认为token
 token.header.name=token