基于javaweb+mysql的springboot企业员工绩效工资管理系统(java+springboot+freemarker+mysql+maven)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot企业员工绩效工资管理系统(java+springboot+freemarker+mysql+maven)
超级管理员等角色,除基础脚手架外,实现的功能有:
超级管理员:系统管理、用户管理(冻结等)、职称管理、部门管理(工资项)、岗位管理(考核指标管理,可指定部门)、工龄管理等。
普通员工:考勤管理(查看自己的考勤记录)、工资管理(查看自己的工资详情)。
HR人事:员工管理、考勤管理、工资管理。
部门经理:部门绩效考核管理、年度考核管理、考核指标管理。
运行环境:windows/Linux均可、jdk1.8、mysql5.7、idea/eclipse均可。
Date setupTime = HSSFDateUtil.getJavaDate(Double.valueOf(month));
Calendar cal = Calendar.getInstance();
cal.setTime(setupTime);
int monthOfDay = cal.get(Calendar.MONTH)+1;
int year = cal.get(Calendar.YEAR);
Staff byJobNumber = staffService.findByJobNumberAndIsStatus(jobNumber);
if(byJobNumber == null){
CodeMsg codeMsg = CodeMsg.ADMIN_JOB_NUMBER_EMPTY;
codeMsg.setMsg("Excel第" + line + "行"+codeMsg.getMsg());
return Result.error(codeMsg);
}
Date date= new Date();
Date setDate = DateUtil.setDate(date, year, monthOfDay, 0, 0, 0, 0);
if(setDate.getTime() > date.getTime()){
CodeMsg codeMsg = CodeMsg.ADMIN_IMPORT_DATE_ERROR;
codeMsg.setMsg("Excel第" + line + "行"+codeMsg.getMsg());
return Result.error(codeMsg);
}
if(attendanceService.findByJobNumberAndYearAndMonthOfDay(jobNumber,year, monthOfDay)!= null){
CodeMsg codeMsg = CodeMsg.ADMIN_ATTENDANCE_MONTH_EXIST;
codeMsg.setMsg("Excel第" + line + "行"+codeMsg.getMsg());
return Result.error(codeMsg);
}
double sick = 0;
double personal = 0;
double overtime = 0;
double overtimeWeekends = 0;
double holidayOvertime = 0;
int later = 0;
int leaveEarly = 0;
double absence = 0;
double travel = 0;
try{
sick = Double.parseDouble(daysSick);
personal = Double.parseDouble(personalLeaveDays);
overtime = Double.parseDouble(overtimeHours);
overtimeWeekends = Double.parseDouble(overtimeOnWeekends);
holidayOvertime = Double.parseDouble(holidayOvertimeHours);
later = Integer.parseInt(lateNumber);
leaveEarly = Integer.parseInt(leaveEarlyTimes);
absence = Double.parseDouble(absenceDays);
* @param model
* @param pageBean
* @param staff
* @return
*/
@RequestMapping("/list")
public String list(Model model, PageBean<Staff> pageBean, Staff staff){
model.addAttribute("title","考核列表");
Staff loginedStaff = SessionUtil.getLoginedStaff();
model.addAttribute("jobNumber",staff.getJobNumber());
model.addAttribute("pageBean",staffService.findDepartmentList(staff, pageBean,loginedStaff));
return "/admin/assessment/list";
}
/**
* 绩效考核页面
* @return
*/
@RequestMapping("/achieve_add")
public String add(@RequestParam("id")Long id,Model model){
Staff staff = staffService.find(id);
Long departmentId = staff.getDepartment().getId();
Department department = departmentService.find(departmentId);
List<AssessTarget> assessTargets = department.getAssessTargets();
model.addAttribute("staff",staff);
model.addAttribute("assessTargetList",assessTargets);
return "/admin/assessment/add";
}
/**
* 绩效考核添加提交处理
* @param performanceAssessment
* @return
*/
@RequestMapping(value = "/achieve_add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(PerformanceAssessment performanceAssessment,@RequestParam("assTarget")String assTarget){
//判断员工是否存在
Staff staff = performanceAssessment.getStaff();
if(staff==null){
return Result.error(CodeMsg.ADMIN_STAFF_NOT_EXIST_ERROR);
}
//年份判断
Integer year = performanceAssessment.getYear();
* @param month
* @return
*/
@RequestMapping("/personage_list")
public String personageList(Model model, PageBean<Attendance> pageBean,Attendance attendance,
String month){
model.addAttribute("title","个人考勤列表");
model.addAttribute("month",month);
model.addAttribute("pageBean",attendanceService.findPersonageList(attendance,pageBean));
return "admin/attendance/personage_list";
}
/**
* 添加页面
* @return
*/
@RequestMapping("/add")
public String add(Model model){
model.addAttribute("staffList",staffService.findByIsStatus(StaffStatus.ON_THE_JOB.getCode()));
return "admin/attendance/add";
}
/**
* 添加表单提交
* @param attendance
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(Attendance attendance){
CodeMsg validate = ValidateEntityUtil.validate(attendance);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(attendance.getMonth() == null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_MONTH_EMPTY);
}
if(StringUtils.isEmpty(attendance.getJobNumber())){
/**
* 系统控制器
*
*/
@RequestMapping("/system")
@Controller
public class SystemController {
@Autowired
private OperaterLogService operaterLogService;
@Autowired
private UserService userService;
@Autowired
private StaffService staffService;
@Autowired
private OrderAuthService orderAuthService;
private Logger log = LoggerFactory.getLogger(SystemController.class);
/**
* 登录页面
* @param model
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.GET)
public String login(Model model){
model.addAttribute("loginTypes", LoginType.values());
return "admin/system/login";
}
/**
* 用户登录提交表单处理方法
* @param request
* @param cpacha
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
* 删除菜单信息
* @param request
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try {
menuService.delete(id);
} catch (Exception e) {
return Result.error(CodeMsg.ADMIN_MENU_DELETE_ERROR);
}
//数据库添加操作成功,记录日志
operaterLogService.add("删除菜单信息,菜单ID【" + id + "】");
return Result.success(true);
}
}
/**
* 后台部门管理Controller
*/
@Controller
@RequestMapping("/admin/department")
public class DepartmentController {
@Autowired
private DepartmentService departmentService;
@Autowired
private OperaterLogService operaterLogService;
/**
@Autowired
private AssessTargetService assessTargetService;
@Autowired
private AttendanceService attendanceService;
/**
* 分页查询员工列表
* @param model
* @param pageBean
* @param staff
* @return
*/
@RequestMapping("/list")
public String list(Model model, PageBean<Staff> pageBean, Staff staff){
model.addAttribute("title","考核列表");
Staff loginedStaff = SessionUtil.getLoginedStaff();
model.addAttribute("jobNumber",staff.getJobNumber());
model.addAttribute("pageBean",staffService.findDepartmentList(staff, pageBean,loginedStaff));
return "/admin/assessment/list";
}
/**
* 绩效考核页面
* @return
*/
@RequestMapping("/achieve_add")
public String add(@RequestParam("id")Long id,Model model){
Staff staff = staffService.find(id);
Long departmentId = staff.getDepartment().getId();
Department department = departmentService.find(departmentId);
List<AssessTarget> assessTargets = department.getAssessTargets();
model.addAttribute("staff",staff);
model.addAttribute("assessTargetList",assessTargets);
return "/admin/assessment/add";
}
/**
* 绩效考核添加提交处理
* @param performanceAssessment
* @return
*/
@RequestMapping(value = "/achieve_add",method = RequestMethod.POST)
@ResponseBody
/**
* 添加页面
* @return
*/
@RequestMapping("/add")
public String add(){
return "admin/job_title/add";
}
/**
* 添加表单提交处理
* @param jobTitle
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(JobTitle jobTitle){
//统一验证法验证
CodeMsg validate = ValidateEntityUtil.validate(jobTitle);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
//判断是否已有该名称
if(jobTitleService.isExistName(jobTitle.getName(),0l)){
return Result.error(CodeMsg.ADMIN_JOB_TITLE_NAME_EXIST);
}
if(jobTitleService.save(jobTitle) == null){
return Result.error(CodeMsg.ADMIN_JOB_TITLE_SAVE_ERROR);
}
operaterLogService.add("添加职称,职称名:" + jobTitle.getName());
return Result.success(true);
}
/**
* 编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping("/edit")
public String edit(Model model, @RequestParam(value = "id",required = true)Long id){
model.addAttribute("jobTitle",jobTitleService.find(id));
return "admin/job_title/edit";
}
}
//到这说明一切符合条件,进行数据库保存
AssessTarget findById = assessTargetService.find(assessTarget.getId());
//讲提交的用户信息指定字段复制到已存在的department对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(assessTarget, findById, "id","createTime","updateTime");
if(assessTargetService.save(findById) == null){
return Result.error(CodeMsg.ADMIN_ASSESS_TARGET_EDIT_ERROR);
}
operaterLogService.add("编辑指标,指标名:" + assessTarget.getName());
return Result.success(true);
}
/**
* 根据id删除
* @param id
* @return
*/
@RequestMapping(value = "delete",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try{
assessTargetService.delete(id);
}catch (Exception e){
return Result.error(CodeMsg.ADMIN_ASSESS_TARGET_DELETE_ERROR);
}
operaterLogService.add("删除指标,指标ID:" + id);
return Result.success(true);
}
}
@RequestMapping("/admin/staff")
@Controller
public class StaffController {
@Autowired
private StaffService staffService;
@Autowired
private JobTitleService jobTitleService;
@Autowired
private RoleService roleService;
@Autowired
private PositionService positionService;
@Autowired
private DepartmentService departmentService;
@Autowired
private OperaterLogService operaterLogService;
@Autowired
private AttendanceService attendanceService;
/**
* 员工列表页面
* @param model
* @param staff
* @param pageBean
* @return
*/
@RequestMapping(value="/list")
public String list(Model model, Staff staff, PageBean<Staff> pageBean){
model.addAttribute("title", "员工列表");
model.addAttribute("jobNumber", staff.getJobNumber()==null?"":staff.getJobNumber());
model.addAttribute("pageBean", staffService.findList(staff, pageBean));
return "admin/staff/list";
}
/**
* 新增员工页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
model.addAttribute("roles", roleService.findAll());
model.addAttribute("educationEnum",EducationEnum.values());
model.addAttribute("jobTitleList",jobTitleService.findAll());
model.addAttribute("positionList",positionService.findAll());
model.addAttribute("departmentList",departmentService.findAll());
return "admin/staff/add";
}
return "admin/salary/list";
}
/**
* 个人工资列表
* @param model
* @param pageBean
* @param salary
* @param month
* @return
*/
@RequestMapping("/personage_list")
public String personageList(Model model, PageBean<Salary> pageBean, Salary salary,
String month){
model.addAttribute("title","个人工资列表");
model.addAttribute("month",month);
model.addAttribute("pageBean",salaryService.findPersonageList(salary,pageBean));
return "admin/salary/personage_list";
}
/**
* 查看详情
* @param id
* @return
*/
@RequestMapping("/show")
public String show(@RequestParam(name="id",required=true)Long id,Model model){
Salary salary = salaryService.find(id);
model.addAttribute("salary",salary);
return "admin/salary/show";
}
/**
* 工资结算页面
* @return
*/
@RequestMapping("/calculation")
public String calculation(Model model){
model.addAttribute("staffList",staffService.findByIsStatus(StaffStatus.ON_THE_JOB.getCode()));
return "admin/salary/calculation";
}
/**
* 结算全体员工奖金
* @param salary
* @return
*/
@RequestMapping(value = "/calculation_all",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> calculateAll(Salary salary){
if(salary.getMonth() == null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_MONTH_EMPTY);
}
/**
* 根据id删除
* @param id
* @return
*/
@RequestMapping(value = "delete",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try{
departmentService.delete(id);
}catch (Exception e){
return Result.error(CodeMsg.ADMIN_DEPARTMENT_DELETE_ERROR);
}
operaterLogService.add("删除部门,部门ID:" + id);
return Result.success(true);
}
}
/**
/**
* 登录拦截器
*
*/
@Component
public class AdminLoginInterceptor implements HandlerInterceptor{
private Logger log = LoggerFactory.getLogger(AdminLoginInterceptor.class);
@Autowired
private SiteConfig siteConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
String requestURI = request.getRequestURI();
HttpSession session = request.getSession();
session.setAttribute(SessionConstant.SESSION_USER_AUTH_KEY, AppConfig.ORDER_AUTH);
Object loginType = session.getAttribute("loginType");
Object attribute = null;
if(loginType != null){
if((Integer) loginType == LoginType.ADMINISTRATOR.getCode()){
attribute = session.getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
}else{
attribute = session.getAttribute(SessionConstant.SESSION_STAFF_LOGIN_KEY);
}
*/
@RequestMapping("/list")
public String list(Model model, PageBean<Position> pageBean,Position position){
model.addAttribute("title","岗位列表");
model.addAttribute("name",position.getName());
model.addAttribute("pageBean",positionService.findList(position,pageBean));
return "admin/position/list";
}
/**
* 添加页面
* @return
*/
@RequestMapping("/add")
public String add(){
return "admin/position/add";
}
/**
* 添加表单提交
* @param position
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(Position position){
//统一验证法验证
CodeMsg validate = ValidateEntityUtil.validate(position);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(position.getNote().length() > 50){
return Result.error(CodeMsg.POSITION_LENGTH_EXIST);
}
if(positionService.isExistName(position.getName(),0l)){
return Result.error(CodeMsg.ADMIN_POSITION_NAME_EXIST);
}
if(positionService.save(position) == null){
return Result.error(CodeMsg.ADMIN_POSITION_SAVE_ERROR);
}
operaterLogService.add("添加岗位,岗位名:" + position.getName());
return Result.success(true);
}
/**
* 编辑页面
* @param model
* @param id
* @return
/**
* 后台岗位管理Controller
*/
@RequestMapping("/admin/position")
@Controller
public class PositionController {
@Autowired
private PositionService positionService;
@Autowired
private OperaterLogService operaterLogService;
/**
* 分页查询岗位列表
* @param model
* @param pageBean
* @param position
* @return
*/
@RequestMapping("/list")
public String list(Model model, PageBean<Position> pageBean,Position position){
model.addAttribute("title","岗位列表");
model.addAttribute("name",position.getName());
model.addAttribute("pageBean",positionService.findList(position,pageBean));
return "admin/position/list";
}
/**
* 添加页面
* @return
*/
@RequestMapping("/add")
public String add(){
return "admin/position/add";
}
/**
* 添加表单提交
* @param position
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(Position position){
*/
@RequestMapping("/list")
public String list(Model model){
model.addAttribute("title","工资项列表");
WageItem wageItem = wageItemService.findFirstByOrderByCreateTimeDesc();
if(wageItem==null){
//表示还没有添加
return "/admin/wage_item/list";
}else{
//表示存在 编辑
model.addAttribute("wageItem",wageItem);
return "/admin/wage_item/edit";
}
}
/**
* 工资项添加提交处理
* @param
* @return
*/
@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(WageItem wageItem){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(wageItem);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(wageItemService.save(wageItem) == null){
return Result.error(CodeMsg.ADMIN_WAGE_ITEM_ADD_ERROR);
}
operaterLogService.add("添加工资项,工资项Id:" + wageItem.getId());
return Result.success(true);
}
/**
* 工资项编辑
* @param wageItem
* @return
*/
@RequestMapping(value = "/edit",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(WageItem wageItem){
/**
* 登录拦截器
*
*/
@Component
public class AdminLoginInterceptor implements HandlerInterceptor{
private Logger log = LoggerFactory.getLogger(AdminLoginInterceptor.class);
@Autowired
private SiteConfig siteConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
String requestURI = request.getRequestURI();
HttpSession session = request.getSession();
session.setAttribute(SessionConstant.SESSION_USER_AUTH_KEY, AppConfig.ORDER_AUTH);
Object loginType = session.getAttribute("loginType");
Object attribute = null;
if(loginType != null){
if((Integer) loginType == LoginType.ADMINISTRATOR.getCode()){
attribute = session.getAttribute(SessionConstant.SESSION_USER_LOGIN_KEY);
return Result.error(codeMsg);
}
if(attendanceService.findByJobNumberAndYearAndMonthOfDay(jobNumber,year, monthOfDay)!= null){
CodeMsg codeMsg = CodeMsg.ADMIN_ATTENDANCE_MONTH_EXIST;
codeMsg.setMsg("Excel第" + line + "行"+codeMsg.getMsg());
return Result.error(codeMsg);
}
double sick = 0;
double personal = 0;
double overtime = 0;
double overtimeWeekends = 0;
double holidayOvertime = 0;
int later = 0;
int leaveEarly = 0;
double absence = 0;
double travel = 0;
try{
sick = Double.parseDouble(daysSick);
personal = Double.parseDouble(personalLeaveDays);
overtime = Double.parseDouble(overtimeHours);
overtimeWeekends = Double.parseDouble(overtimeOnWeekends);
holidayOvertime = Double.parseDouble(holidayOvertimeHours);
later = Integer.parseInt(lateNumber);
leaveEarly = Integer.parseInt(leaveEarlyTimes);
absence = Double.parseDouble(absenceDays);
travel = Double.parseDouble(travelDays);
}catch (Exception e){
return Result.error(CodeMsg.NUMBER_TYPE_ERROR);
}
attendance.setJobNumber(jobNumber);
attendance.setYear(year);
attendance.setMonthOfDay(monthOfDay);
attendance.setDaysSick(sick);
attendance.setPersonalLeaveDays(personal);
attendance.setOvertimeHours(overtime);
attendance.setOvertimeOnWeekends(overtimeWeekends);
attendance.setHolidayOvertimeHours(holidayOvertime);
attendance.setLateNumber(later);
attendance.setLeaveEarlyTimes(leaveEarly);
attendance.setAbsenceDays(absence);
attendance.setTravelDays(travel);
attendance.setStaff(byJobNumber);
attendance.setDepartment(byJobNumber.getDepartment());
SessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY,null);
}
}
return "redirect:login";
}
/**
* 无权限提示页面
* @return
*/
@RequestMapping(value="/no_right")
public String noRight(){
return "admin/system/no_right";
}
/**
* 修改用户个人信息
* @return
*/
@RequestMapping(value="/update_userinfo",method=RequestMethod.GET)
public String updateUserInfo(){
return "admin/system/update_userinfo";
}
/**
* 修改个人信息保存
* @param user
* @return
*/
@RequestMapping(value="/update_userinfo",method=RequestMethod.POST)
public String updateUserInfo(User user){
User loginedUser = SessionUtil.getLoginedUser();
loginedUser.setEmail(user.getEmail());
loginedUser.setMobile(user.getMobile());
loginedUser.setHeadPic(user.getHeadPic());
//首先保存到数据库
userService.save(loginedUser);
//更新session里的值
SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);
return "redirect:update_userinfo";
}
/**
* 修改密码页面
* @return