当前位置: 首页 > news >正文

Java项目:SSM企业工资管理系统

作者主页:夜未央5788

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

文末获取源码

项目介绍

本项目包含管理员与普通员工两种角色,

管理员角色包含以下功能:

管理员登录,员工管理,部门管理,岗位管理,职称管理,工龄奖金管理,工资项管理,考勤管理,工资查询,统计图表等功能。

员工角色包含以下功能:

员工登录,个人信息管理,考勤管理,工资详情等功能。
PS:在折线图的工资展示分析模块,需要先结算某一个月的工资然后在折线图的地方查询才可以出来图哦

环境需要

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版本;

6.是否Maven项目:是;

技术栈

1. 后端:Spring+SpringMVC+Mybatis

2. 前端:HTML+CSS+JavaScript+LayUI+jquery+bootstrap

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;

2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;

若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;

3. 将项目中dbconfig.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/ssm_esms 登录
注:tomcat中需配置路径为/ssm_esms,否则会有异常
管理员账号/密码:admin/admin

用户账号/密码:18080833/123456

运行截图

管理员端

 

 

 

 

 

员工页面

 

 

 

 

代码相关

工资管理控制器

@Controller
public class RankBonusController {
    @Autowired
    private IRankBonusService service;
    //@Qualifier("rankBonusService")

    public void setiRankBonusService(IRankBonusService iRankBonusService) {
        this.service = iRankBonusService;
    }


    //插入数据
    @RequestMapping("/insertRankBonus.do")
    @ResponseBody
    public String doInsertRankBonus(int bonus,String name){
        if(service.CountByName(name)>0){
            return "exist";
        }
        if(!name.equals("")&& bonus>=0){
            RankBonus rb= new RankBonus();
            rb.setRankName(name);
            rb.setRbBonus(bonus);
            service.addRankBonus(rb);

            return "ok";

        }
        else{
            return "no";
        }

    }
    //查询出所有记录
    @RequestMapping("/findAll.do")
    public String doFindAll(@RequestParam(value="pn",defaultValue = "1") Integer pn, Model model){
        // 引入PageHelper分页插件
        // 在查询之前只需要调用,传入页码,以及每页的大小
        int pageSize = 10;
        PageHelper.startPage(pn, pageSize);
        // startPage后面紧跟的这个查询就是一个分页查询
        List<RankBonus> rbs = service.findAll();
        System.out.println(rbs+"=================================");
        /*for (RankBonus rb:rbs) {
         System.out.println(rb.getRankName());
        }*/
        // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
        // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
        PageInfo page = new PageInfo(rbs, 5);
        //ModelAndView modelAndView = new ModelAndView();
       // modelAndView.setViewName("admin/rank-list.jsp");
         // modelAndView.addObject("pageInfo",page);
        model.addAttribute("pageInfo", page);
        return "admin/rank-list.jsp";
    }

    @RequestMapping("/findRankBonusList.do")
    @ResponseBody
    public RankBonusPages findSelective(
            @RequestParam(value="page", defaultValue="1")int pageNum,
            @RequestParam(value="limit", defaultValue="10") int limit,
            @RequestParam(value="rb_name", defaultValue="") String rb_name) throws Exception {
        /*return rb_name;*/
        List<RankBonus> list;
        //模糊查询,有多少个条件就接收多少个字段
        RankBonus rb = new RankBonus();
        rb.setRankName(rb_name);
        //pageNum:起始页面  pageSize:每页的大小
        PageHelper.startPage(pageNum,limit);
        //查找条件,一定要紧跟在startPage后
        list = service.findSelective(rb);
        PageInfo pageResult = new PageInfo(list);

        //设置前台需要的数据
        RankBonusPages rankBonusPages = new RankBonusPages();
        rankBonusPages.setCode(0);
        rankBonusPages.setMsg("");
        rankBonusPages.setCount((int) pageResult.getTotal());
        rankBonusPages.setData(pageResult.getList());
        return rankBonusPages;
    }

    //根据id删除数据
    @RequestMapping("rankBonusDelete.do")
    @ResponseBody
    public String doDelete(int id){
        if(service.CountByRbid(id)>0){
            return "exist";
        }
        if(service.moveRankBonus(id)==true)
            return "ok";
        else{
            return "no";}
    }
    //更新记录
    @RequestMapping("/updateRankBonus.do")
    @ResponseBody
    public String doUpdate(int id,String  rank,int bonus){
        RankBonus rankBonus=service.findByName(rank);
        if(rankBonus!=null&& !rankBonus.getRbId().equals(id)){
            return "exist";
        }
        RankBonus rb=new RankBonus();
        rb.setRbId(id);
        rb.setRbBonus(bonus);
        rb.setRankName(rank);
        if(service.modifyRankName(rb)==true)
            return "ok";
        else
            return "no";
    }


}

工资查询管理控制器

@Controller
public class SalaryController {
    @Autowired
    private SalaryServiceImpl salaryService = null;

    @RequestMapping("salarySettlementByAcount.do")
    @ResponseBody
    public Map<String, String> salarySettlementByAcount(String eAccount, String date) {
        Map<String, String> stringMap = new HashMap<String, String>();
        try {
            salaryService.insertSalaryByAcountAndDate(eAccount, date);
            stringMap.put("msg", "工资结算完成");
            return stringMap;
        } catch (CustomException e) {
            stringMap.put("msg", e.getMessage());
            return stringMap;
        }
    }

    @RequestMapping("salarySettlementAll.do")
    @ResponseBody
    public Map<String, String> salarySettlementAll(String date) {
        Map<String, String> stringMap = new HashMap<String, String>();
        try {
            salaryService.insertSalaryAllByDate(date);
            stringMap.put("msg", "工资结算完成");
            return stringMap;
        } catch (CustomException e) {
            stringMap.put("msg", e.getMessage());
            return stringMap;
        }
    }

    // 删除工资项目
    @RequestMapping("deleteSalaryByEid.do")
    @ResponseBody
    public int deleteSalaryByEid(@RequestParam(value = "arr")int[] ids) {
        salaryService.deleteSalaryByEid(ids);
        return 1;
    }

    // 发放工资项目
    @RequestMapping("issueSalaryByEid.do")
    @ResponseBody
    public void issueSalaryByEid(@RequestParam(value = "arr")int[] ids) {
        salaryService.updateSalaryBySid(ids);
    }

    @RequestMapping(value = "selectSalaryByEaccountDIdDate.do",
            produces = "application/json;charset=utf-8")
    @ResponseBody
    public String selectSalaryByEaccountDIdDate(@RequestParam(value = "page", defaultValue = "1") int pageNum,
                                                @RequestParam(value = "limit", defaultValue = "5") int limit,
                                                String eAccount, Integer dId, String sTime) {
        /**
         * @Author: 方宏泰
         * @Description: 工资查询
         * @Date: 12:37 2020/02/11
         * @Param: [pageNum , limit, eAccount, dId, sTime]
         * @Return: java.lang.String
         **/
        SalaryPages salaryPages = salaryService.selectSalaryByEaccountDIdDate(pageNum, limit, eAccount, dId, sTime);
        //使用fastjson以字符串形式返回数据
        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM";
        return JSON.toJSONString(salaryPages, SerializerFeature.WriteDateUseDateFormat);
    }

    @RequestMapping(value = "selectSalaryByEaccountDIdDateState.do",
            produces = "application/json;charset=utf-8")
    @ResponseBody
    public String selectSalaryByEaccountDIdDateState(@RequestParam(value = "page", defaultValue = "1") int pageNum,
                                                @RequestParam(value = "limit", defaultValue = "5") int limit,
                                                String eAccount, Integer dId, String sTime) {
        SalaryPages salaryPages = salaryService.selectSalaryByEaccountDIdDateState(pageNum, limit, eAccount, dId, sTime);
        //使用fastjson以字符串形式返回数据
        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM";
        return JSON.toJSONString(salaryPages, SerializerFeature.WriteDateUseDateFormat);
    }

    @RequestMapping(value = "updateSalaryByEidAndRissuePay.do")
    @ResponseBody
    public void updateSalaryByEidAndRissuePay(int sId, double rissuePay) {
        salaryService.updateSalaryByEidAndRissuePay(sId, rissuePay);
    }
}

 

如果也想学习本系统,下面领取。关注并回复:108ssm 

相关文章:

  • Python基于Django的汽车销售网站
  • 花好月圆时,邀你一起来读诗!
  • 在Slicer中添加点、直线和曲线
  • Win7下安装Docker(虚拟机win7)
  • JavaWeb对于JSP内置对象及其作用域的深入理解与运用
  • HarmonyOS(鸿蒙系统)物联网开发教程——环境搭建
  • 《MySQL》增删查改(进阶)
  • 【Django】REST_Framework框架——APIView类源码解析
  • 多线程之Thread
  • Selenium自动化测试框架
  • 四年时间,从一个浑浑噩噩的程序员到csdn博客专家的成长之路
  • Spring Boot 9 :详细描述Spring Boot + Vue项目部署过程:Centos为例(重点)
  • 医疗项目业务介绍
  • 猿创征文 | Git的良心教程
  • 【线性代数基础进阶】特征值和特征向量-补充+练习
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • CSS3 变换
  • export和import的用法总结
  • HTTP 简介
  • iOS 颜色设置看我就够了
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • LeetCode18.四数之和 JavaScript
  • node学习系列之简单文件上传
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Swift 中的尾递归和蹦床
  • WebSocket使用
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 翻译--Thinking in React
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 码农张的Bug人生 - 见面之礼
  • 提醒我喝水chrome插件开发指南
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我的面试准备过程--容器(更新中)
  • 移动端解决方案学习记录
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ###STL(标准模板库)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)终结任务
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (未解决)macOS matplotlib 中文是方框
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .cn根服务器被攻击之后
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 设置默认首页
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .sys文件乱码_python vscode输出乱码