Browse Source

代码修改

LAPTOP-KB9HII50\70708 2 years ago
parent
commit
129255ded9

+ 143 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/menu/BaseAppMenu.java

@ -0,0 +1,143 @@
package com.yihu.jw.entity.base.menu;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
/**
 * app端菜单配置
 * Created by yeshijie on 2022/9/27.
 */
@Entity
@Table(name = "base_app_menu")
public class BaseAppMenu extends UuidIdentityEntityWithCreateTime {
    public final static String topPid = "0";//顶级父id
    private String pid;//父类id(第一级pid为0)
    private String name;//菜单名称
    private String code;//菜单编码
    private String img;//图标
    private String url;//跳转链接
    private Integer isTop;//是否展示在app首页(1是 0否)
    private String isTopName;
    private Integer status;//状态(1有效,0失效)
    private String statusName;
    private Integer sort;//排序字段
    private String remark;//备注
    private List<BaseAppMenu> children = new ArrayList<>(); // 子节点
    @Column(name = "pid")
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "img")
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    @Column(name = "url")
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Column(name = "is_top")
    public Integer getIsTop() {
        return isTop;
    }
    public void setIsTop(Integer isTop) {
        this.isTop = isTop;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Column(name = "sort")
    public Integer getSort() {
        return sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Transient
    public List<BaseAppMenu> getChildren() {
        return children;
    }
    public void setChildren(List<BaseAppMenu> children) {
        this.children = children;
    }
    @Transient
    public String getIsTopName() {
        return isTopName;
    }
    public void setIsTopName(String isTopName) {
        this.isTopName = isTopName;
    }
    @Transient
    public String getStatusName() {
        return statusName;
    }
    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }
}

+ 6 - 28
starter/mysql-starter/src/main/java/com/yihu/jw/mysql/query/BaseJpaService.java

@ -1,7 +1,7 @@
package com.yihu.jw.mysql.query;
import com.yihu.jw.lang.SpringContext;
import org.hibernate.Query;
import org.hibernate.query.Query;
import org.hibernate.Session;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -77,7 +77,7 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    }
    public void delete(Serializable id) {
        getRepository().delete(id);
        getRepository().deleteById(id);
    }
    public void delete(T entity) {
@ -103,7 +103,7 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    }
    public T retrieve(Serializable id) {
        return (T) getRepository().findById(id);
        return (T) getRepository().findById(id).orElse(null);
    }
    public List search(String filters) throws ParseException {
@ -245,11 +245,6 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 将实体转换为模型。
     *
     * @param source
     * @param target
     * @param <T>
     * @return
     */
    public <T> T convertToModel(Object source, Class<T> target) {
        if (source == null) {
@ -262,11 +257,6 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 将实体集合转换为模型集合。
     * @param sources
     * @param targets
     * @param target
     * @param <T>
     * @return
     */
    public <T> List<T> convertToModels(Collection sources, List<T> targets, Class<T> target){
        if (null == sources) {
@ -286,8 +276,6 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 获取指定长度的随机数字字符串
     * @param length
     * @return
     */
    public String randomInt(int length) {
        String str = "0123456789";
@ -302,8 +290,6 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 获取指定长度的随机字符串
     * @param length
     * @return
     */
    public String randomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
@ -318,17 +304,15 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 排序条件 第一个字符为 + 表示升序,第一个字符为 - 表示减序,不包含 + 或者 - 默认升序
     * @param sorts
     * @return
     */
    public Sort createSort(String sorts){
        Sort sort = null;
        if (!org.springframework.util.StringUtils.isEmpty(sorts)) {
            // 默认升序
            if(sorts.contains("-")){
                sort = Sort.by(Sort.Direction.DESC,sorts.substring(1,sorts.length()).split(","));
                sort = Sort.by(Sort.Direction.DESC,sorts.substring(1).split(","));
            }else if(sorts.contains("+")){
                sort = Sort.by(Sort.Direction.ASC,sorts.substring(1,sorts.length()).split(","));
                sort = Sort.by(Sort.Direction.ASC,sorts.substring(1).split(","));
            }else{
                sort = Sort.by(Sort.Direction.ASC,sorts.split(","));
            }
@ -338,13 +322,9 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 创建分页对象
     * @param page
     * @param size
     * @param sorts
     * @return
     */
    public Pageable createPage(Integer page, Integer size, String sorts){
        PageRequest pageRequest = null;
        PageRequest pageRequest;
        if(null == page || page <= 0){
            page = defaultPage;
        }
@ -362,8 +342,6 @@ public abstract class BaseJpaService<T, R extends CrudRepository> {
    /**
     * 获取指定长度的随机字符串
     * @param length
     * @return
     */
    protected String getRandomString(int length) {
        String str = "abcdefghigklmnopkrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";

+ 25 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/menu/BaseAppMenuDao.java

@ -0,0 +1,25 @@
package com.yihu.jw.base.dao.menu;
import com.yihu.jw.entity.base.menu.BaseAppMenu;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * Created by yeshijie on 2022/9/27.
 */
public interface BaseAppMenuDao extends JpaRepository<BaseAppMenu, String>, JpaSpecificationExecutor<BaseAppMenu> {
    @Query(" FROM BaseAppMenu rc WHERE rc.pid = :pid ")
    List<BaseAppMenu> getChildrenByPid(@Param("pid") String pid);
    @Query(" FROM BaseAppMenu rc WHERE rc.pid = '0' ")
    List<BaseAppMenu> getTopParents();
    @Query(" FROM BaseAppMenu rc WHERE rc.id <> :id AND rc.code = :code ")
    BaseAppMenu isUniqueCode(@Param("id") String id, @Param("code") String code);
}

+ 208 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/menu/BaseAppMenuEndPoint.java

@ -0,0 +1,208 @@
package com.yihu.jw.base.endpoint.menu;
import com.yihu.jw.base.dao.menu.BaseAppMenuDao;
import com.yihu.jw.base.service.menu.BaseAppMenuService;
import com.yihu.jw.entity.base.menu.BaseAppMenu;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * app应用管理,按报表分类来做
 * Created by yeshijie on 2022/9/27.
 */
@RestController
@RequestMapping(value = "appMenu")
@Api(value = "app菜单管理",  tags = {"基础服务 - app菜单管理"})
public class BaseAppMenuEndPoint extends EnvelopRestEndpoint {
    @Resource
    private BaseAppMenuService baseAppMenuService;
    @Resource
    private BaseAppMenuDao baseAppMenuDao;
    public static Map<Integer,String> isTopName = new HashMap<>();
    public static Map<Integer,String> statusName = new HashMap<>();
    static {
        isTopName.put(1,"是");
        isTopName.put(0,"否");
        isTopName.put(null,"否");
        statusName.put(1,"生效");
        statusName.put(0,"失效");
        statusName.put(null,"失效");
    }
    @RequestMapping("/save")
    @ApiOperation(value = "保存或修改")
    public Envelop save(@ApiParam(name = "data", value = "data",required = true)
                        @RequestParam(value = "data") String data) {
        try {
            String rsReportCategory = data;
            BaseAppMenu newBaseApp = toEntity(rsReportCategory, BaseAppMenu.class);
            if (StringUtils.isEmpty(newBaseApp.getCode())) {
                return failed("编码不能为空!");
            }
            if (StringUtils.isEmpty(newBaseApp.getName())) {
                return failed("名称不能为空!");
            }
            if (newBaseApp.getId() == null) {
                // 新增
                if (null == newBaseApp.getPid()) {
                    newBaseApp.setPid("0");
                }
                if (null == newBaseApp.getSort()) {
                    newBaseApp.setSort(99);
                }
                //新增判断名称和code 是否唯一
                if(!baseAppMenuService.isUniqueCode("0", newBaseApp.getCode())){
                    return ObjEnvelop.getError("编码已存在",-1);
                }
                baseAppMenuDao.save(newBaseApp);
                return ObjEnvelop.getSuccess("操作成功",newBaseApp);
            } else {
                //修改 如果有修改name和code要判断是否唯一
                BaseAppMenu oldBaseApp = baseAppMenuDao.findById(newBaseApp.getId()).orElse(null);
                if (oldBaseApp==null){
                    return failed("id错误");
                }
                if(!oldBaseApp.getCode().equals(newBaseApp.getCode())){
                    if(!baseAppMenuService.isUniqueCode(newBaseApp.getId(), newBaseApp.getCode())){
                        return ObjEnvelop.getError("编码已存在",-1);
                    }
                }
                oldBaseApp.setCode(newBaseApp.getCode());
                oldBaseApp.setName(newBaseApp.getName());
                oldBaseApp.setPid(newBaseApp.getPid());
                oldBaseApp.setSort(null == newBaseApp.getSort() ? 99 : newBaseApp.getSort());
                oldBaseApp.setRemark(newBaseApp.getRemark());
                oldBaseApp.setIsTop(newBaseApp.getIsTop());
                oldBaseApp.setStatus(newBaseApp.getStatus());
                oldBaseApp.setImg(newBaseApp.getImg());
                oldBaseApp.setUrl(newBaseApp.getUrl());
                baseAppMenuDao.save(oldBaseApp);
                return ObjEnvelop.getSuccess("操作成功",oldBaseApp);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed("操作失败");
        }
    }
    @RequestMapping("/delete")
    @ApiOperation(value = "删除")
    public Envelop delete(@ApiParam(name = "id", value = "id",required = true)
                          @RequestParam(value = "id") String id) {
        try {
            baseAppMenuDao.deleteById(id);
            return success("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failed("删除失败");
        }
    }
    @RequestMapping("/getComboTreeData")
    @ApiOperation(value = "获取资源报表分类下拉框数据")
    public Envelop getComboTreeData() {
        try {
            List<BaseAppMenu> list = baseAppMenuDao.findAll();
            list.forEach(one->{
                one.setIsTopName(isTopName.get(one.getIsTop()));
                one.setStatusName(statusName.get(one.getStatus()));
            });
            return ListEnvelop.getSuccess ("查询成功",list);
        } catch (Exception e) {
            e.printStackTrace();
            return failed("查询失败");
        }
    }
    @RequestMapping(value = "detail")
    @ApiOperation(value = "获取详情")
    public Envelop detail(@ApiParam(name = "id", value = "id",required = true)
                              @RequestParam(value = "id") String id) {
        try {
            BaseAppMenu one = baseAppMenuDao.findById(id).orElse(null);
            if(one == null){
                return failed("查询失败");
            }
            one.setIsTopName(isTopName.get(one.getIsTop()));
            one.setStatusName(statusName.get(one.getStatus()));
            return ObjEnvelop.getSuccess("查询成功",one);
        } catch (Exception e) {
            e.printStackTrace();
            return failed("查询失败");
        }
    }
    @RequestMapping("/getTreeData")
    @ApiOperation(value = "根据条件,获取菜单列表(树形结构)")
    public Envelop getTreeData(@ApiParam(name = "codeName", value = "codeName")
                               @RequestParam(value = "codeName",required = false) String codeName) {
        try {
            List<BaseAppMenu> resultList = new ArrayList<>();
            // 获取最顶层的资源报表分类集合
            List<BaseAppMenu> topNodeList = baseAppMenuService.getChildrenByPid(BaseAppMenu.topPid);
            if (topNodeList.size() == 0) {
                return success("查询成功");
            }
            // 暂存最顶层资源报表分类中,满足条件的集合
            List<BaseAppMenu> topNodeListIn = new ArrayList<>();
            // 暂存最顶层资源报表分类中,不满足条件的集合
            List<BaseAppMenu> topNodeListOut = new ArrayList<>();
            if (StringUtils.isEmpty(codeName)) {
                List<BaseAppMenu> treeList = baseAppMenuService.getTreeByParents(topNodeList);
                return ListEnvelop.getSuccess("查询成功",treeList);
            }
            for (BaseAppMenu reportCategory : topNodeList) {
                if (reportCategory.getCode().contains(codeName) || reportCategory.getName().contains(codeName)) {
                    topNodeListIn.add(reportCategory);
                    continue;
                }
                topNodeListOut.add(reportCategory);
            }
            if (topNodeListIn.size() != 0) {
                List<BaseAppMenu> inList = baseAppMenuService.getTreeByParents(topNodeListIn);
                resultList.addAll(inList);
            }
            List<BaseAppMenu> outList = baseAppMenuService.getTreeByParentsAndCodeName(topNodeListOut, codeName);
            resultList.addAll(outList);
            resultList.forEach(one->{
                one.setIsTopName(isTopName.get(one.getIsTop()));
                one.setStatusName(statusName.get(one.getStatus()));
            });
            return ListEnvelop.getSuccess("查询成功",resultList);
        } catch (Exception ex) {
            ex.printStackTrace();
            return failed("查询失败");
        }
    }
}

+ 101 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/menu/BaseAppMenuService.java

@ -0,0 +1,101 @@
package com.yihu.jw.base.service.menu;
import com.yihu.jw.base.dao.menu.BaseAppMenuDao;
import com.yihu.jw.entity.base.menu.BaseAppMenu;
import com.yihu.jw.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by yeshijie on 2022/9/27.
 */
@Service
public class BaseAppMenuService extends BaseJpaService {
    @Resource
    private BaseAppMenuDao baseAppMenuDao;
    /**
     * 验证资源报表分类编码是否唯一
     *
     * @param id   主键
     * @param code 编码
     * @return true:唯一,false:不唯一
     */
    public Boolean isUniqueCode(String id, String code) {
        BaseAppMenu rsReportCategory = baseAppMenuDao.isUniqueCode(id, code);
        return rsReportCategory == null;
    }
    /**
     * 根据父级ID,获取其子节点;父级ID为 -1 时,返回顶级节点。
     * @param pid 父级ID。
     * @return 子节点集合
     */
    public List<BaseAppMenu> getChildrenByPid(String pid) {
        List<BaseAppMenu> children;
        if (BaseAppMenu.topPid.equals(pid)) {
            children = baseAppMenuDao.getTopParents();
        } else {
            children = baseAppMenuDao.getChildrenByPid(pid);
        }
        return children;
    }
    /**
     * 根据父级集合,递归获取父级及其自子级集合,形成树形结构
     * @param parentList 父级集合
     * @return 父级及其子集的树形结构数据
     */
    public List<BaseAppMenu> getTreeByParents(List<BaseAppMenu> parentList) {
        List<BaseAppMenu> resultList = new ArrayList<>();
        for (int i = 0; i < parentList.size(); i++) {
            BaseAppMenu parent = parentList.get(i);
            List<BaseAppMenu> childList = this.getChildrenByPid(parent.getId());
            List<BaseAppMenu> childTreeList = getTreeByParents(childList);
            parent.setChildren(childTreeList);
            resultList.add(parent);
        }
        return resultList;
    }
    /**
     * 递归不满足条件的父级集合,获取其满足条件的子集,并返回子集及其父级的树形结构
     *
     * @param parents  不满足条件的父级集合
     * @param codeName 资源报表分类编码或名称
     * @return 满足条件的子集及其父级的树形结构
     */
    public List<BaseAppMenu> getTreeByParentsAndCodeName(List<BaseAppMenu> parents, String codeName) throws ParseException {
        List<BaseAppMenu> treeData = new ArrayList<>();
        for (BaseAppMenu parent : parents) {
            String parentId = parent.getId();
            List<BaseAppMenu> childrenTree = new ArrayList<>();
            List<BaseAppMenu> children = this.getChildrenByPid(parentId);
            if (children.size() == 0) continue;
            // 获取满足条件的子节点
            String filters = "pid=" + parentId + ";code?" + codeName + " g1;name?" + codeName + " g1;";
            List<BaseAppMenu> childrenIin = (List<BaseAppMenu>) this.search(filters);
            if (childrenIin.size() != 0) {
                childrenTree.addAll(getTreeByParents(childrenIin));
            }
            // 递归不满足条件的子节点
            children.removeAll(childrenIin);
            if (children.size() != 0) {
                childrenTree.addAll(getTreeByParentsAndCodeName(children, codeName));
            }
            if (childrenTree.size() != 0) {
                parent.setChildren(childrenTree);
                treeData.add(parent);
            }
        }
        return treeData;
    }
}

+ 2 - 10
svr/svr-basic/src/main/java/com/yihu/jw/basic/resource/service/RsReportCategoryService.java

@ -94,11 +94,7 @@ public class RsReportCategoryService extends BaseJpaService<RsReportCategory, Rs
     */
    public Boolean isUniqueCode(Integer id, String code) {
        RsReportCategory rsReportCategory = rsReportCategoryDao.isUniqueCode(id, code);
        if (rsReportCategory == null) {
            return true;
        } else {
            return false;
        }
        return rsReportCategory == null;
    }
    /**
@ -110,11 +106,7 @@ public class RsReportCategoryService extends BaseJpaService<RsReportCategory, Rs
     */
    public Boolean isUniqueName(Integer id, String name) {
        RsReportCategory rsReportCategory = rsReportCategoryDao.isUniqueName(id, name);
        if (rsReportCategory == null) {
            return true;
        } else {
            return false;
        }
        return rsReportCategory == null;
    }
    /**