基于springboot实现功能超全企业进销存系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本系统基于springboot实现了一个功能十分完整的企业进销存系统,主要功能包括:用户的登录注册、客户信息增添改查、来往客户信息查询等、商品的进货和销售、采购订单明细、销售订单明细、库存盘点、商品查询及分类、商品价格调整、进销存报表、商品库存预警、系统退出、角色管理、用户管理、权限分配、数据统计图形报表、等等,功能可以说是十分完整,整个系统设计简洁大方,运行无误。下面展示一下系统的主要功能:

 作者主页编程指南针

简介:20年开发经验、Java领域优质创作者、CSDN博客专家  Java项目、简历模板、学习资料、面试题库、技术互助

文末获取源码

  ↵

项目编号:BS-XX-099

后台开发:Springboot+mybatis+springmvc

前台开发:bootstrap+easyui+jquery+highcharts

数据库:MYSQL

开发工具:IDEA / ECLIPSE

应用服务器:TOMCAT8.5

本系统基于springboot实现了一个功能十分完整的企业进销存系统,主要功能包括:用户的登录注册、客户信息增添改查、来往客户信息查询等、商品的进货和销售、采购订单明细、销售订单明细、库存盘点、商品查询及分类、商品价格调整、进销存报表、商品库存预警、系统退出、角色管理、用户管理、权限分配、数据统计图形报表、等等,功能可以说是十分完整,整个系统设计简洁大方,运行无误。

下面展示一下系统的主要功能:

登陆页面:

image.gif编辑

管理主页面

image.gif编辑

系统管理-角色管理

image.gif编辑

系统管理-用户管理

image.gif编辑

基础资料-供应商管理

image.gif编辑

基础资料-客户管理

image.gif编辑

基础资料-商品分类和商品管理

image.gif编辑

基础资料-期初库存管理

image.gif编辑

统计报表—供应商统计

image.gif编辑

统计报表—按日统计

image.gif编辑

库存管理-商品报损

image.gif编辑

库存管理-库存报警

image.gif编辑

销售管理—销售出货

image.gif编辑

销售管理—销售单据查询

image.gif编辑

进货管理—进货入库

image.gif编辑

进货管理—进货单据查询

image.gif编辑

进货管理—退货出库

image.gif编辑

篇幅所限,只展示部分功能,整体来说,此系统还是十分优秀,包含了进销存常见所有的功能需求。

部分核心实现代码:

package com.jude.controller.admin;
import com.jude.service.LogService;
import com.jude.entity.Customer;
import com.jude.entity.Log;
import com.jude.service.CustomerService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 后台管理客户Controller
 * @author znz
 *
 */
@RestController
@RequestMapping("/admin/customer")
public class CustomerAdminController {
  @Resource
  private CustomerService customerService;
  @Resource
  private LogService logService;
  /**
   * 分页查询客户信息
   * @param customer
   * @param page
   * @param rows
   * @return
   * @throws Exception
   */
  @RequestMapping("/list")
  @RequiresPermissions(value = { "客户管理" })
  public Map<String,Object> list(Customer customer, @RequestParam(value="page",required=false)Integer page, @RequestParam(value="rows",required=false)Integer rows)throws Exception{
    List<Customer> customerList=customerService.list(customer, page, rows, Direction.ASC, "id");
    Long total=customerService.getCount(customer);
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("rows", customerList);
    resultMap.put("total", total);
    logService.save(new Log(Log.SEARCH_ACTION,"查询客户信息")); // 写入日志
    return resultMap;
  }
  /**
   * 下拉框模糊查询
   * @param q
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/comboList")
  @RequiresPermissions(value = {"销售出库","客户退货","销售单据查询","客户退货查询"},logical=Logical.OR)
  public List<Customer> comboList(String q)throws Exception{
    if(q==null){
      q="";
    }
    return customerService.findByName("%"+q+"%");
  }
  /**
   * 添加或者修改客户信息
   * @param customer
   * @return
   * @throws Exception
   */
  @RequestMapping("/save")
  @RequiresPermissions(value = { "客户管理" })
  public Map<String,Object> save(Customer customer)throws Exception{
    if(customer.getId()!=null){ // 写入日志
      logService.save(new Log(Log.UPDATE_ACTION,"更新客户信息"+customer)); 
    }else{
      logService.save(new Log(Log.ADD_ACTION,"添加客户信息"+customer)); 
    }
    Map<String, Object> resultMap = new HashMap<>();
    customerService.save(customer);     
    resultMap.put("success", true);
    return resultMap;
  }
  /**
   * 删除客户信息
   * @param id
   * @param response
   * @return
   * @throws Exception
   */
  @RequestMapping("/delete")
  @RequiresPermissions(value = { "客户管理" })
  public Map<String,Object> delete(String ids)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    String []idsStr=ids.split(",");
    for(int i=0;i<idsStr.length;i++){
      int id=Integer.parseInt(idsStr[i]);
      logService.save(new Log(Log.DELETE_ACTION,"删除客户信息"+customerService.findById(id)));  // 写入日志
      customerService.delete(id);             
    }
    resultMap.put("success", true);
    return resultMap;
  }
}

image.gif

package com.jude.controller.admin;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jude.service.CustomerReturnListGoodsService;
import com.jude.service.CustomerReturnListService;
import com.jude.service.LogService;
import com.jude.util.DateUtil;
import com.jude.util.StringUtil;
import com.jude.entity.CustomerReturnList;
import com.jude.entity.CustomerReturnListGoods;
import com.jude.entity.Log;
import com.jude.service.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 客户退货单Controller类
 * @author Administrator
 *
 */
@RestController
@RequestMapping("/admin/customerReturnList")
public class CustomerReturnListAdminController {
  @Resource
  private CustomerReturnListService customerReturnListService;
  @Resource
  private CustomerReturnListGoodsService customerReturnListGoodsService;
  @Resource
  private LogService logService;
  @Resource
  private UserService userService;
  @InitBinder
  public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    dateFormat.setLenient(true);
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));   //true:允许输入空值,false:不能为空值
  }
  /**
   * 根据条件分页查询客户退货单信息
   * @param customerReturnList
   * @param page
   * @param rows
   * @return
   * @throws Exception
   */
  @RequestMapping("/list")
  @RequiresPermissions(value = { "客户退货查询" })
  public Map<String,Object> list(CustomerReturnList customerReturnList)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    List<CustomerReturnList> customerReturnListList=customerReturnListService.list(customerReturnList, Direction.DESC, "customerReturnDate");
    resultMap.put("rows", customerReturnListList);
    return resultMap;
  }
  /**
   * 根据客户退货单id查询所有客户退货单商品
   * @param customerReturnListId
   * @return
   * @throws Exception
   */
  @RequestMapping("/listGoods")
  @RequiresPermissions(value = { "客户退货查询" })
  public Map<String,Object> listGoods(Integer customerReturnListId)throws Exception{
    if(customerReturnListId==null){
      return null;
    }
    Map<String, Object> resultMap = new HashMap<>();
    List<CustomerReturnListGoods> customerReturnListGoodsList=customerReturnListGoodsService.listByCustomerReturnListId(customerReturnListId);
    resultMap.put("rows", customerReturnListGoodsList);
    return resultMap;
  }
  /**
   * 客户统计 获取客户退货单的所有商品信息
   * @param purchaseList
   * @param purchaseListGoods
   * @return
   * @throws Exception
   */
  @RequestMapping("/listCount")
  @RequiresPermissions(value = { "客户统计" })
  public Map<String,Object> listCount(CustomerReturnList customerReturnList,CustomerReturnListGoods customerReturnListGoods)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    List<CustomerReturnList> customerReturnListList=customerReturnListService.list(customerReturnList, Direction.DESC, "customerReturnDate");
    for(CustomerReturnList crl:customerReturnListList){
      customerReturnListGoods.setCustomerReturnList(crl);
      List<CustomerReturnListGoods> crlList=customerReturnListGoodsService.list(customerReturnListGoods);
      for(CustomerReturnListGoods crlg:crlList){
        crlg.setCustomerReturnList(null);
      }
      crl.setCustomerReturnListGoodsList(crlList);
    }
    resultMap.put("rows", customerReturnListList);
    return resultMap;
  }
  /**
   * 获取客户退货单号
   * @param type
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/getCustomerReturnNumber")
  @RequiresPermissions(value = {"客户退货"})
  public String genBillCode(String type)throws Exception{
    StringBuffer biilCodeStr=new StringBuffer();
    biilCodeStr.append("XT");
    biilCodeStr.append(DateUtil.getCurrentDateStr()); // 拼接当前日期
    String customerReturnNumber=customerReturnListService.getTodayMaxCustomerReturnNumber(); // 获取当天最大的客户退货单号
    if(customerReturnNumber!=null){
      biilCodeStr.append(StringUtil.formatCode(customerReturnNumber));
    }else{
      biilCodeStr.append("0001");
    }
    return biilCodeStr.toString();
  }
  /**
   * 添加客户退货单 以及所有客户退货单商品
   * @param customerReturnList
   * @param goodsJson
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/save")
  @RequiresPermissions(value = {"客户退货"})
  public Map<String,Object> save(CustomerReturnList customerReturnList,String goodsJson)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    customerReturnList.setUser(userService.findByUserName((String) SecurityUtils.getSubject().getPrincipal())); // 设置操作用户
    Gson gson = new Gson();
    List<CustomerReturnListGoods> plgList=gson.fromJson(goodsJson, new TypeToken<List<CustomerReturnListGoods>>(){}.getType());
    customerReturnListService.save(customerReturnList, plgList);
    logService.save(new Log(Log.ADD_ACTION,"添加客户退货单"));
    resultMap.put("success", true); 
    return resultMap;
  }
  /**
   * 修改退货单的支付状态
   * @param id
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/update")
  @RequiresPermissions(value = {"客户统计"})
  public Map<String,Object> update(Integer id)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    CustomerReturnList customerReturnList=customerReturnListService.findById(id);
    customerReturnList.setState(1); // 修改成支付状态
    customerReturnListService.update(customerReturnList);
    resultMap.put("success", true); 
    return resultMap;
  }
  /**
   * 根据id删除客户退货单信息 包括客户退货单里的商品
   * @param id
   * @return
   * @throws Exception
   */
  @RequestMapping("/delete")
  @RequiresPermissions(value = { "客户退货查询" })
  public Map<String,Object> delete(Integer id)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    customerReturnListService.delete(id);
    logService.save(new Log(Log.DELETE_ACTION,"删除客户退货单信息"+customerReturnListService.findById(id)));  // 写入日志
    resultMap.put("success", true);   
    return resultMap;
  }
}

image.gif

package com.jude.controller.admin;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jude.entity.PurchaseListGoods;
import com.jude.service.LogService;
import com.jude.util.StringUtil;
import com.jude.entity.Log;
import com.jude.entity.PurchaseList;
import com.jude.service.PurchaseListGoodsService;
import com.jude.service.PurchaseListService;
import com.jude.service.UserService;
import com.jude.util.DateUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 进货单Controller类
 * @author Administrator
 *
 */
@RestController
@RequestMapping("/admin/purchaseList")
public class PurchaseListAdminController {
  @Resource
  private PurchaseListService purchaseListService;
  @Resource
  private PurchaseListGoodsService purchaseListGoodsService;
  @Resource
  private LogService logService;
  @Resource
  private UserService userService;
  @InitBinder
  public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    dateFormat.setLenient(true);
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));   //true:允许输入空值,false:不能为空值
  }   
  /**
   * 根据条件分页查询进货单信息
   * @param purchaseList
   * @param page
   * @param rows
   * @return
   * @throws Exception
   */
  @RequestMapping("/list")
  @RequiresPermissions(value = { "进货单据查询" })
  public Map<String,Object> list(PurchaseList purchaseList)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    List<PurchaseList> purchaseListList=purchaseListService.list(purchaseList, Direction.DESC, "purchaseDate");
    resultMap.put("rows", purchaseListList);
    return resultMap;
  }
  /**
   * 根据进货单id查询所有进货单商品
   * @param purchaseListId
   * @return
   * @throws Exception
   */
  @RequestMapping("/listGoods")
  @RequiresPermissions(value = { "进货单据查询" })
  public Map<String,Object> listGoods(Integer purchaseListId)throws Exception{
    if(purchaseListId==null){
      return null;
    }
    Map<String, Object> resultMap = new HashMap<>();
    List<PurchaseListGoods> purchaseListGoodsList=purchaseListGoodsService.listByPurchaseListId(purchaseListId);
    resultMap.put("rows", purchaseListGoodsList);
    return resultMap;
  }
  /**
   * 客户统计 获取进货单的所有商品信息
   * @param purchaseList
   * @param purchaseListGoods
   * @return
   * @throws Exception
   */
  @RequestMapping("/listCount")
  @RequiresPermissions(value = { "客户统计" })
  public Map<String,Object> listCount(PurchaseList purchaseList,PurchaseListGoods purchaseListGoods)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    List<PurchaseList> purchaseListList=purchaseListService.list(purchaseList, Direction.DESC, "purchaseDate");
    for(PurchaseList pl:purchaseListList){
      purchaseListGoods.setPurchaseList(pl);
      List<PurchaseListGoods> plgList=purchaseListGoodsService.list(purchaseListGoods);
      for(PurchaseListGoods plg:plgList){
        plg.setPurchaseList(null);
      }
      pl.setPurchaseListGoodsList(plgList);
    }
    resultMap.put("rows", purchaseListList);
    return resultMap;
  }
  /**
   * 获取进货单号
   * @param type
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/getPurchaseNumber")
  @RequiresPermissions(value = {"进货入库"})
  public String genBillCode(String type)throws Exception{
    StringBuffer biilCodeStr=new StringBuffer();
    biilCodeStr.append("JH");
    biilCodeStr.append(DateUtil.getCurrentDateStr()); // 拼接当前日期
    String purchaseNumber=purchaseListService.getTodayMaxPurchaseNumber(); // 获取当天最大的进货单号
    if(purchaseNumber!=null){
      biilCodeStr.append(StringUtil.formatCode(purchaseNumber));
    }else{
      biilCodeStr.append("0001");
    }
    return biilCodeStr.toString();
  }
  /**
   * 添加进货单 以及所有进货单商品 以及 修改商品的成本均价
   * @param purchaseList
   * @param goodsJson
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/save")
  @RequiresPermissions(value = {"进货入库"})
  public Map<String,Object> save(PurchaseList purchaseList,String goodsJson)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    purchaseList.setUser(userService.findByUserName((String) SecurityUtils.getSubject().getPrincipal())); // 设置操作用户
    Gson gson = new Gson();
    List<PurchaseListGoods> plgList=gson.fromJson(goodsJson, new TypeToken<List<PurchaseListGoods>>(){}.getType());
    purchaseListService.save(purchaseList, plgList);
    logService.save(new Log(Log.ADD_ACTION,"添加进货单"));
    resultMap.put("success", true); 
    return resultMap;
  }
  /**
   * 修改进货单的支付状态
   * @param id
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/update")
  @RequiresPermissions(value = {"供应商统计"})
  public Map<String,Object> update(Integer id)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    PurchaseList purchaseList=purchaseListService.findById(id);
    purchaseList.setState(1); // 修改成支付状态
    purchaseListService.update(purchaseList);
    resultMap.put("success", true); 
    return resultMap;
  }
  /**
   * 根据id删除进货单信息 包括进货单里的商品
   * @param id
   * @return
   * @throws Exception
   */
  @RequestMapping("/delete")
  @RequiresPermissions(value = { "进货单据查询" })
  public Map<String,Object> delete(Integer id)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    purchaseListService.delete(id);
    logService.save(new Log(Log.DELETE_ACTION,"删除进货单信息"+purchaseListService.findById(id)));  // 写入日志
    resultMap.put("success", true);   
    return resultMap;
  }
}

image.gif

package com.jude.controller.admin;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.jude.entity.Log;
import com.jude.entity.Menu;
import com.jude.entity.Role;
import com.jude.service.*;
import com.jude.util.StringUtil;
import com.jude.entity.RoleMenu;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.web.bind.annotation.PostMapping;
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.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
 * 后台管理角色Controller
 * @author znz
 *
 */
@RestController
@RequestMapping("/admin/role")
public class RoleAdminController {
  @Resource
  private RoleService roleService;
  @Resource
  private UserRoleService userRoleService;
  @Resource
  private MenuService menuService;
  @Resource
  private RoleMenuService roleMenuService;
  @Resource
  private LogService logService;
  /**
   * 查询所有角色
   * @return
   * @throws Exception
   */
  @RequestMapping("/listAll")
  @RequiresPermissions(value = { "角色管理" })
  public Map<String,Object> listAll()throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("rows", roleService.listAll());
    logService.save(new Log(Log.SEARCH_ACTION,"查询所有角色信息")); // 写入日志
    return resultMap;
  }
  /**
   * 分页查询角色信息
   * @param user
   * @param page
   * @param rows
   * @return
   * @throws Exception
   */
  @RequestMapping("/list")
  @RequiresPermissions(value = { "角色管理" })
  public Map<String,Object> list(Role role, @RequestParam(value="page",required=false)Integer page, @RequestParam(value="rows",required=false)Integer rows)throws Exception{
    List<Role> roleList=roleService.list(role, page, rows, Direction.ASC, "id");
    Long total=roleService.getCount(role);
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("rows", roleList);
    resultMap.put("total", total);
    logService.save(new Log(Log.SEARCH_ACTION,"查询角色信息")); // 写入日志
    return resultMap;
  }
  /**
   * 添加或者修改角色信息
   * @param role
   * @return
   * @throws Exception
   */
  @RequestMapping("/save")
  @RequiresPermissions(value = { "角色管理" })
  public Map<String,Object> save(Role role)throws Exception{
    if(role.getId()!=null){ // 写入日志
      logService.save(new Log(Log.UPDATE_ACTION,"更新角色信息"+role)); 
    }else{
      logService.save(new Log(Log.ADD_ACTION,"添加角色信息"+role)); 
    }
    Map<String, Object> resultMap = new HashMap<>();
    roleService.save(role);
    resultMap.put("success", true);
    return resultMap;
  }
  /**
   * 删除角色信息
   * @param id
   * @param response
   * @return
   * @throws Exception
   */
  @RequestMapping("/delete")
  @RequiresPermissions(value = { "角色管理" })
  public Map<String,Object> delete(Integer id)throws Exception{
    logService.save(new Log(Log.DELETE_ACTION,"删除角色信息"+roleService.findById(id)));  // 写入日志
    Map<String, Object> resultMap = new HashMap<>();
    userRoleService.deleteByRoleId(id); // 删除用户角色关联信息
    roleService.delete(id);       
    resultMap.put("success", true);
    return resultMap;
  }
  /**
   * 根据父节点获取所有复选框权限菜单树
   * @param parentId
   * @param roleId
   * @return
   * @throws Exception
   */
    @PostMapping("/loadCheckMenuInfo")
  @RequiresPermissions(value = { "角色管理" })
  public String loadCheckMenuInfo(Integer parentId,Integer roleId)throws Exception{
    List<Menu> menuList=menuService.findByRoleId(roleId); // 根据角色查询所有权限菜单信息
    List<Integer> menuIdList=new LinkedList<Integer>();
    for(Menu menu:menuList){
      menuIdList.add(menu.getId());
    }
    return getAllCheckedMenuByParentId(parentId,menuIdList).toString();
  }
  /**
   * 根据父节点ID和权限菜单ID集合获取复选框菜单节点
   * @param parentId
   * @param menuIdList
   * @return
   */
  private JsonArray getAllCheckedMenuByParentId(Integer parentId,List<Integer> menuIdList){
    JsonArray jsonArray=this.getCheckedMenuByParentId(parentId, menuIdList);
    for(int i=0;i<jsonArray.size();i++){
      JsonObject jsonObject=(JsonObject) jsonArray.get(i);
      if("open".equals(jsonObject.get("state").getAsString())){
          continue;
        }else{
          jsonObject.add("children", getAllCheckedMenuByParentId(jsonObject.get("id").getAsInt(),menuIdList));
        }
    }
    return jsonArray;
  }
  /**
   * 根据父节点ID和权限菜单ID集合获取复选框菜单节点
   * @param parentId
   * @param menuIdList
   * @return
   */
  private JsonArray getCheckedMenuByParentId(Integer parentId,List<Integer> menuIdList){
    List<Menu> menuList=menuService.findByParentId(parentId);
    JsonArray jsonArray=new JsonArray();
    for(Menu menu:menuList){
        JsonObject jsonObject=new JsonObject();
        int menuId=menu.getId();
        jsonObject.addProperty("id", menuId); // 节点id
        jsonObject.addProperty("text", menu.getName()); // 节点名称
        if(menu.getState()==1){
          jsonObject.addProperty("state", "closed"); // 根节点
        }else{
          jsonObject.addProperty("state", "open"); // 叶子节点
        }
        if(menuIdList.contains(menuId)){
          jsonObject.addProperty("checked", true);
        }
        jsonObject.addProperty("iconCls", menu.getIcon());
      jsonArray.add(jsonObject);
      }
    return jsonArray;
  }
  /**
   * 保存角色权限设置
   * @param menuIds
   * @param roleId
   * @return
   * @throws Exception
   */
  @RequestMapping("/saveMenuSet")
  @RequiresPermissions(value = { "角色管理" })
  public Map<String,Object> saveMenuSet(String menuIds,Integer roleId)throws Exception{
    Map<String, Object> resultMap = new HashMap<>();
    roleMenuService.deleteByRoleId(roleId); // 根据角色id删除所有角色权限关联实体
    if(StringUtil.isNotEmpty(menuIds)){
      String idsStr[]=menuIds.split(",");
      for(int i=0;i<idsStr.length;i++){ // 然后添加所有角色权限关联实体
        RoleMenu roleMenu=new RoleMenu();
        roleMenu.setRole(roleService.findById(roleId));
        roleMenu.setMenu(menuService.findById(Integer.parseInt(idsStr[i])));
        roleMenuService.save(roleMenu);
      }
    }
    resultMap.put("success", true);
    logService.save(new Log(Log.ADD_ACTION,"保存角色权限设置"));  // 写入日志
    return resultMap;
  }
}

image.gif


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
29天前
|
消息中间件 缓存 Java
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
41 3
|
29天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
47 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
54 4
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
172 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
41 0
|
3月前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
111 62
|
1月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
87 8
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
69 2
|
2月前
|
Java 数据安全/隐私保护 Spring
springboot实现邮箱发送(激活码)功能
本文介绍了如何在Spring Boot应用中配置和使用邮箱发送功能,包括开启邮箱的SMTP服务、添加Spring Boot邮件发送依赖、配置application.properties文件,以及编写邮件发送的代码实现。
88 2
springboot实现邮箱发送(激活码)功能

热门文章

最新文章