作者主页:夜未央5788

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

系统主要功能包括:
首页
零售管理:零售出库、零售退货;
采购管理:采购订单、采购入库、采购退货;
销售管理:销售订单、销售出库、销售退货;
仓库管理:其它入库、其它出库、调拨出库、组装单、拆卸单;
财务管理:收入单、支出单、收款单、付款单、转账单、收预付款;
报表查询:库存状况、结算账户、进货统计、销售统计、入库明细、出库明细、入库汇总、出库汇总、客户对账、供应商对账、库存预警;
商品管理:商品类别、商品信息、计量单位、序列号;
基本资料:供应商信息、客户信息、会员信息、仓库信息、收支项目、结算账户、经手人管理;

系统管理:角色管理、机构管理、用户管理、日志管理、系统配置;

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
5.数据库:MySql 5.7或8.0版本;

6.是否Maven项目:是;

技术栈

* 核心框架:SpringBoot 2.0.0
* 持久层框架:Mybatis 1.3.2
* 日志管理:Log4j 2.10.0
* JS框架:Jquery 1.8.0
* UI框架: EasyUI 1.3.5
* 模板框架: AdminLTE 2.4.0

* 项目管理框架: Maven 3.2.3

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.properties配置文件中的数据库配置改为自己的配置;
4. 运行com.jsh.erp包中的ErpApplication类,启动项目。(使用SpringBoot的启动方式)
5. 浏览器地址访问登录页面http://localhost:8080/login.html

默认管理员账号:admin,管理员账号一些特殊模块不具有修改权限,建议使用普通账号:jsh,密码都为123456

运行截图

代码相关

人员前端控制器

@RestController
@RequestMapping(value = "/person")
public class PersonController {private Logger logger = LoggerFactory.getLogger(PersonController.class);@Resourceprivate PersonService personService;@GetMapping(value = "/getAllList")public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();Map<String, Object> map = new HashMap<String, Object>();try {List<Person> personList = personService.getPerson();map.put("personList", personList);res.code = 200;res.data = personList;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取数据失败";}return res;}/*** 根据Id获取经手人信息* @param personIDs* @param request* @return*/@GetMapping(value = "/getPersonByIds")public BaseResponseInfo getPersonByIds(@RequestParam("personIDs") String personIDs,HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();Map<String, Object> map = new HashMap<String, Object>();try {String names = personService.getPersonByIds(personIDs);map.put("names", names);res.code = 200;res.data = map;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取数据失败";}return res;}/*** 根据类型获取经手人信息* @param type* @param request* @return*/@GetMapping(value = "/getPersonByType")public BaseResponseInfo getPersonByType(@RequestParam("type") String type,HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();Map<String, Object> map = new HashMap<String, Object>();try {List<Person> personList = personService.getPersonByType(type);map.put("personList", personList);res.code = 200;res.data = map;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取数据失败";}return res;}/*** 根据类型获取经手人信息 1-业务员,2-仓管员,3-财务员* @param typeNum* @param request* @return*/@PostMapping(value = "/getPersonByNumType")public JSONArray getPersonByNumType(@RequestParam("type") String typeNum,HttpServletRequest request)throws Exception {JSONArray dataArray = new JSONArray();try {String type = "";if (typeNum.equals("1")) {type = "业务员";} else if (typeNum.equals("2")) {type = "仓管员";} else if (typeNum.equals("3")) {type = "财务员";}List<Person> personList = personService.getPersonByType(type);if (null != personList) {for (Person person : personList) {JSONObject item = new JSONObject();item.put("id", person.getId());item.put("name", person.getName());dataArray.add(item);}}} catch(Exception e){e.printStackTrace();}return dataArray;}/*** create by: qiankunpingtai* website:https://qiankunpingtai.cn* description:*  批量删除经手人信息* create time: 2019/3/29 11:15* @Param: ids* @return java.lang.Object*/@RequestMapping(value = "/batchDeletePersonByIds")public Object batchDeletePersonByIds(@RequestParam("ids") String ids,@RequestParam(value="deleteType",required =false,defaultValue= BusinessConstants.DELETE_TYPE_NORMAL)String deleteType) throws Exception {JSONObject result = ExceptionConstants.standardSuccess();int i=0;if(BusinessConstants.DELETE_TYPE_NORMAL.equals(deleteType)){i= personService.batchDeletePersonByIdsNormal(ids);}else if(BusinessConstants.DELETE_TYPE_FORCE.equals(deleteType)){i= personService.batchDeletePersonByIds(ids);}else{logger.error("异常码[{}],异常提示[{}],参数,ids[{}],deleteType[{}]",ExceptionConstants.DELETE_REFUSED_CODE,ExceptionConstants.DELETE_REFUSED_MSG,ids,deleteType);throw new BusinessRunTimeException(ExceptionConstants.DELETE_REFUSED_CODE,ExceptionConstants.DELETE_REFUSED_MSG);}if(i<1){logger.error("异常码[{}],异常提示[{}],参数,ids[{}]",ExceptionConstants.PERSON_DELETE_FAILED_CODE,ExceptionConstants.PERSON_DELETE_FAILED_MSG,ids);throw new BusinessRunTimeException(ExceptionConstants.PERSON_DELETE_FAILED_CODE,ExceptionConstants.PERSON_DELETE_FAILED_MSG);}return result;}
}

用户前端控制器

@RestController
@RequestMapping(value = "/user")
public class UserController {private Logger logger = LoggerFactory.getLogger(UserController.class);@Value("${manage.roleId}")private Integer manageRoleId;@Resourceprivate UserService userService;@Resourceprivate TenantService tenantService;@Resourceprivate LogService logService;private static String message = "成功";private static final String HTTP = "http://";private static final String CODE_OK = "200";@PostMapping(value = "/login")public BaseResponseInfo login(@RequestParam(value = "loginame", required = false) String loginame,@RequestParam(value = "password", required = false) String password,HttpServletRequest request)throws Exception {logger.info("============用户登录 login 方法调用开始==============");String msgTip = "";User user=null;BaseResponseInfo res = new BaseResponseInfo();try {String username = loginame.trim();password = password.trim();//判断用户是否已经登录过,登录过不再处理Object userInfo = request.getSession().getAttribute("user");User sessionUser = new User();if (userInfo != null) {sessionUser = (User) userInfo;}if (sessionUser != null && username.equalsIgnoreCase(sessionUser.getLoginame())) {logger.info("====用户 " + username + "已经登录过, login 方法调用结束====");msgTip = "user already login";}//获取用户状态int userStatus = -1;try {userStatus = userService.validateUser(username, password);} catch (Exception e) {e.printStackTrace();logger.error(">>>>>>>>>>>>>用户  " + username + " 登录 login 方法 访问服务层异常====", e);msgTip = "access service exception";}switch (userStatus) {case ExceptionCodeConstants.UserExceptionCode.USER_NOT_EXIST:msgTip = "user is not exist";break;case ExceptionCodeConstants.UserExceptionCode.USER_PASSWORD_ERROR:msgTip = "user password error";break;case ExceptionCodeConstants.UserExceptionCode.BLACK_USER:msgTip = "user is black";break;case ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION:msgTip = "access service error";break;default:try {msgTip = "user can login";//验证通过 ,可以登录,放入session,记录登录日志user = userService.getUserByUserName(username);request.getSession().setAttribute("user",user);if(user.getTenantId()!=null) {Tenant tenant = tenantService.getTenantByTenantId(user.getTenantId());if(tenant!=null) {Long tenantId = tenant.getTenantId();Integer userNumLimit = tenant.getUserNumLimit();Integer billsNumLimit = tenant.getBillsNumLimit();if(tenantId!=null) {request.getSession().setAttribute("tenantId",tenantId); //租户tenantIdrequest.getSession().setAttribute("userNumLimit",userNumLimit); //用户限制数request.getSession().setAttribute("billsNumLimit",billsNumLimit); //单据限制数}}}logService.insertLog("用户",new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_LOGIN).append(user.getId()).toString(),((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());} catch (Exception e) {e.printStackTrace();logger.error(">>>>>>>>>>>>>>>查询用户名为:" + username + " ,用户信息异常", e);}break;}Map<String, Object> data = new HashMap<String, Object>();data.put("msgTip", msgTip);/*** 在IE模式下,无法获取到user数据,* 在此处明确添加上user信息* */if(user!=null){data.put("user",user);}res.code = 200;res.data = data;logger.info("===============用户登录 login 方法调用结束===============");} catch(Exception e){e.printStackTrace();logger.error(e.getMessage());res.code = 500;res.data = "用户登录失败";}return res;}@GetMapping(value = "/getUserSession")public BaseResponseInfo getSessionUser(HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {Map<String, Object> data = new HashMap<String, Object>();Object userInfo = request.getSession().getAttribute("user");if(userInfo!=null) {User user = (User) userInfo;user.setPassword(null);data.put("user", user);}res.code = 200;res.data = data;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取session失败";}return res;}@GetMapping(value = "/logout")public BaseResponseInfo logout(HttpServletRequest request, HttpServletResponse response)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {request.getSession().removeAttribute("user");request.getSession().removeAttribute("tenantId");request.getSession().removeAttribute("userNumLimit");request.getSession().removeAttribute("billsNumLimit");response.sendRedirect("/login.html");} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "退出失败";}return res;}@PostMapping(value = "/resetPwd")public String resetPwd(@RequestParam("id") Long id,HttpServletRequest request) throws Exception {Map<String, Object> objectMap = new HashMap<String, Object>();String password = "123456";String md5Pwd = Tools.md5Encryp(password);int update = userService.resetPwd(md5Pwd, id);if(update > 0) {return returnJson(objectMap, message, ErpInfo.OK.code);} else {return returnJson(objectMap, message, ErpInfo.ERROR.code);}}@PostMapping(value = "/updatePwd")public String updatePwd(@RequestParam("userId") Long userId, @RequestParam("password") String password,@RequestParam("oldpwd") String oldpwd, HttpServletRequest request)throws Exception {Integer flag = 0;Map<String, Object> objectMap = new HashMap<String, Object>();try {User user = userService.getUser(userId);String oldPassword = Tools.md5Encryp(oldpwd);String md5Pwd = Tools.md5Encryp(password);//必须和原始密码一致才可以更新密码if(user.getLoginame().equals("jsh")){flag = 3; //管理员jsh不能修改密码} else if (oldPassword.equalsIgnoreCase(user.getPassword())) {user.setPassword(md5Pwd);flag = userService.updateUserByObj(user); //1-成功} else {flag = 2; //原始密码输入错误}objectMap.put("status", flag);if(flag > 0) {return returnJson(objectMap, message, ErpInfo.OK.code);} else {return returnJson(objectMap, message, ErpInfo.ERROR.code);}} catch (Exception e) {logger.error(">>>>>>>>>>>>>修改用户ID为 : " + userId + "密码信息失败", e);flag = 3;objectMap.put("status", flag);return returnJson(objectMap, message, ErpInfo.ERROR.code);}}/*** 获取全部用户数据列表* @param request* @return*/@GetMapping(value = "/getAllList")public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception {BaseResponseInfo res = new BaseResponseInfo();try {Map<String, Object> data = new HashMap<String, Object>();List<User> dataList = userService.getUser();if(dataList!=null) {data.put("userList", dataList);}res.code = 200;res.data = data;} catch(Exception e){e.printStackTrace();res.code = 500;res.data = "获取失败";}return res;}/*** create by: cjl* description:*  查询分页用户列表* create time: 2019/3/8 15:08* @Param: pageSize* @Param: currentPage* @Param: search* @return java.lang.String*/@GetMapping(value = "/getUserList")public String getUserList(@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,@RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,@RequestParam(value = Constants.SEARCH, required = false) String search)throws Exception {Map<String, Object> parameterMap = new HashMap<String, Object>();//查询参数JSONObject obj= JSON.parseObject(search);Set<String> key= obj.keySet();for(String keyEach: key){parameterMap.put(keyEach,obj.getString(keyEach));}PageQueryInfo queryInfo = new PageQueryInfo();Map<String, Object> objectMap = new HashMap<String, Object>();if (pageSize == null || pageSize <= 0) {pageSize = BusinessConstants.DEFAULT_PAGINATION_PAGE_SIZE;}if (currentPage == null || currentPage <= 0) {currentPage = BusinessConstants.DEFAULT_PAGINATION_PAGE_NUMBER;}PageHelper.startPage(currentPage,pageSize,true);List<UserEx> list = userService.getUserList(parameterMap);//获取分页查询后的数据PageInfo<UserEx> pageInfo = new PageInfo<>(list);objectMap.put("page", queryInfo);if (list == null) {queryInfo.setRows(new ArrayList<Object>());queryInfo.setTotal(BusinessConstants.DEFAULT_LIST_NULL_NUMBER);return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);}queryInfo.setRows(list);queryInfo.setTotal(pageInfo.getTotal());return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);}/*** create by: cjl* description:*  新增用户及机构和用户关系* create time: 2019/3/8 16:06* @Param: beanJson* @return java.lang.Object*/@PostMapping("/addUser")@ResponseBodypublic Object addUser(@RequestParam("info") String beanJson, HttpServletRequest request)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();Long userNumLimit = Long.parseLong(request.getSession().getAttribute("userNumLimit").toString());Long count = userService.countUser(null,null);if(count>= userNumLimit) {throw new BusinessParamCheckingException(ExceptionConstants.USER_OVER_LIMIT_FAILED_CODE,ExceptionConstants.USER_OVER_LIMIT_FAILED_MSG);} else {UserEx ue= JSON.parseObject(beanJson, UserEx.class);userService.addUserAndOrgUserRel(ue);}return result;}/*** 注册用户* @param loginame* @param password* @return* @throws Exception*/@PostMapping(value = "/registerUser")public Object registerUser(@RequestParam(value = "loginame", required = false) String loginame,@RequestParam(value = "password", required = false) String password,HttpServletRequest request)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();UserEx ue= new UserEx();ue.setUsername(loginame);ue.setLoginame(loginame);ue.setPassword(password);userService.checkUserNameAndLoginName(ue); //检查用户名和登录名userService.registerUser(ue,manageRoleId,request);return result;}/*** create by: cjl* description:*  修改用户及机构和用户关系* create time: 2019/3/8 16:06* @Param: beanJson* @return java.lang.Object*/@PostMapping("/updateUser")@ResponseBodypublic Object updateUser(@RequestParam("info") String beanJson,@RequestParam("id") Long id)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();UserEx ue= JSON.parseObject(beanJson, UserEx.class);ue.setId(id);userService.updateUserAndOrgUserRel(ue);return result;}@PostMapping("/deleteUser")@ResponseBodypublic Object deleteUser(@RequestParam("ids") String ids)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();userService.batDeleteUser(ids);return result;}@PostMapping("/batchDeleteUser")@ResponseBodypublic Object batchDeleteUser(@RequestParam("ids") String ids)throws Exception{JSONObject result = ExceptionConstants.standardSuccess();userService.batDeleteUser(ids);return result;}@RequestMapping("/getOrganizationUserTree")public JSONArray getOrganizationUserTree()throws Exception{JSONArray arr=new JSONArray();List<TreeNodeEx> organizationUserTree= userService.getOrganizationUserTree();if(organizationUserTree!=null&&organizationUserTree.size()>0){for(TreeNodeEx node:organizationUserTree){String str=JSON.toJSONString(node);JSONObject obj=JSON.parseObject(str);arr.add(obj) ;}}return arr;}
}

如果也想学习本系统,下面领取。回复:091springboot

Java项目:springboot ERP管理系统相关推荐

  1. Java项目01-菜谱管理系统控制台实现

    Java项目01-菜谱管理系统控制台实现: 源代码及展示视频请到资源处下载,也可私聊本人提供免积分百度云下载,另外后续还有Java Swing+数据库实现的界面项目哦! 系统主界面: Java Swi ...

  2. 完成我的第一个java项目“评标人才库管理系统”——环境配置+创项目

    完成我的第一个java项目"评标人才库管理系统"--环境配置+创项目 idea配置maven环境 创建第一个Spring项目 idea配置maven环境 1.下载maven htt ...

  3. Java项目实战---歌曲管理系统

    Java项目实战-歌曲管理系统 声明:本人仅整理了代码,方便大家进行调试优化,功能上还存在很多纰漏,欢迎大家评论区讨论 代码原地址放于文章末尾 一.实验目的: 掌握类的定义,JAVA应用程序的设计与实 ...

  4. Java项目:汽车配件销售管理系统(java+SpringBoot+layui+html+maven+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 本项目为后台管理系统, 主要功能包括: 公告增删改查,用户管理,登录页面,订单查询,配件添加等等 环境需要 1.运行环境:最好是j ...

  5. java项目springboot医院固定资产检修管理系统

    功能介绍 主要对主页.个人中心.员工管理.供应商管理.设备类型管理.仪器设备管理.设备采购管理.设备入库管理.设备申请管理.检修信息管理的实现. springboot是spring家族中的一个全新框架 ...

  6. Java项目:景区旅游管理系统(java+SpringBoot+html+layui+bootstrap+jQuery+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 springboot景区管理系统.该项目分为前台网站展示与后台管理. 前台网站主要功能有:用户登录.注册:首页有热门酒店.热门景点 ...

  7. Java项目:智能小区物业管理系统(java+JSP+bootstrap+JavaScript+servlet+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目为后台管理系统,分为管理员与业主两种角色: 管理员主要功能包括: 首页.公告查询.修改密码.报修管理.业主信息.房产信息 ...

  8. Java项目:酒店宾馆管理系统(java+SpringBoot+html+layui+jQuery+maven+mysql)

    源码获取:博客首页 "资源" 里下载! 功能介绍 springboot酒店宾馆管理系统.该系统为后管系统,无前台.主要分三种角色:管理者/工作人员/前台人员. 主要功能有: 客房: ...

  9. Java项目:大学生健康档案管理系统(java+jpa+swagger-ui+springboot+vue+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 大学生健康档案管理系统,目前演示数据中主要包括三种角色:管理员.医生.学生:其中管理员包含最高权限:可对体检表,健康文档,体检数据 ...

  10. Java项目:蓝天幼儿园管理系统(java+SpringBoot+thymeleaf+html+maven+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 蓝天幼儿园管理系统,共分为三种角色,管理员.家长.教师. 管理员角色具有功能: 系统管理-用户管理.页面管理.角色管理, 校园管理 ...

最新文章

  1. 聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
  2. 测试u盘信息软件,U盘检测器
  3. Adapter适配器设计模式
  4. python编程制作接金币游戏,闪电侠接金币的FlashMan类
  5. 2016年小升初海淀区全部初中排名分析
  6. 《Java Web 程序设计与开发》读书笔记——JSP编程基础和JSP内置对象
  7. IDEA 配置SVN ,SVN安装后没有svn.exe
  8. 微信小程序选项卡底线转换滑动动画
  9. 什么是搜索引擎营销(SEM)?
  10. 基于matlab的三相逆变电路仿真,三相逆变电路matlab仿真.docx
  11. Word——LaTeX如何在Word使用(二)
  12. python 图片合成视频
  13. 多线程-并发工具类之CyclicBarrier详解
  14. 计算机数值方法知识,计算机数值方法.pdf
  15. SEO是什么意思?为什么要做SEO?
  16. python:自然常数 e =2.71828
  17. 网页设计中的灰色调配色技巧
  18. hdl语言哪种语言类似c,Verilog HDL笔记
  19. mpVue的基本介绍
  20. 无聊记录下爬取虎牙录播

热门文章

  1. Discuz采集之Discuz论坛采集全网文章采集伪原创发布方法(图文)
  2. 微软的teredo服务器,win10系统通过teredo连接ipv6的具体教程
  3. DSP28335的eCAP模块
  4. 2021年中国访客管理系统市场趋势报告、技术动态创新及2027年市场预测
  5. coursera “the media could not be loaded either because the server or network falled...“解决办法
  6. 配音软件哪个好?这三款很火的配音软件,简直是短视频后期配音必备
  7. java 去掉图片水印文字_Java实现图片水印工具类
  8. 平衡二叉树、B树、B+树,B*树的区别与联系
  9. arm嵌入式led灯闪烁实验报告_嵌入式ARM键盘控制LED灯实验报告
  10. 交叉编译openssl(arm和x86_64)