基于javaweb+mysql的springboot企业员工绩效工资管理系统(java+springboot+freemarker+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot企业员工绩效工资管理系统(java+springboot+freemarker+mysql)
超级管理员等角色,除基础脚手架外,实现的功能有:
超级管理员:系统管理、用户管理(冻结等)、职称管理、部门管理(工资项)、岗位管理(考核指标管理,可指定部门)、工龄管理等。
普通员工:考勤管理(查看自己的考勤记录)、工资管理(查看自己的工资详情)。
HR人事:员工管理、考勤管理、工资管理。
部门经理:部门绩效考核管理、年度考核管理、考核指标管理。
运行环境:windows/Linux均可、jdk1.8、mysql5.7、idea/eclipse均可。
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(role);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
Role existRole = roleService.find(role.getId());
if(existRole == null){
return Result.error(CodeMsg.ADMIN_ROLE_NO_EXIST);
}
existRole.setName(role.getName());
existRole.setRemark(role.getRemark());
existRole.setStatus(role.getStatus());
existRole.setAuthorities(role.getAuthorities());
if(roleService.save(existRole) == null){
return Result.error(CodeMsg.ADMIN_ROLE_EDIT_ERROR);
}
log.info("编辑角色【"+role+"】");
operaterLogService.add("编辑角色【"+role.getName()+"】");
return Result.success(true);
}
/**
* 删除角色
* @param request
* @param id
* @return
*/
@RequestMapping(value="delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try {
roleService.delete(id);
} catch (Exception e) {
// TODO: handle exception
return Result.error(CodeMsg.ADMIN_ROLE_DELETE_ERROR);
}
log.info("编辑角色ID【"+id+"】");
operaterLogService.add("删除角色ID【"+id+"】");
return Result.success(true);
}
}
package com.yuanlrc.base.controller.admin;
* @return
*/
@RequestMapping("/edit")
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
AssessTarget assessTarget = assessTargetService.find(id);
model.addAttribute("assessTarget",assessTarget);
model.addAttribute("targetClassifyList",TargetClassify.values());
model.addAttribute("departmentList",departmentService.findAll());
List<Department> departments = assessTarget.getDepartments();
List<Long> departmentIds = departments.stream().map(Department::getId).collect(Collectors.toList());
String departmentIdList = JSONArray.toJSONString(departmentIds);
model.addAttribute("departments",departmentIdList);
model.addAttribute("departmentIds",departmentIds);
return "/admin/assess_target/edit";
}
/**
* 指标编辑表单提交处理
* @param assessTarget
* @return
*/
@RequestMapping(value = "/edit",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(AssessTarget assessTarget){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(assessTarget);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(assessTarget.getTargetClassify().getCode()==-1){
return Result.error(CodeMsg.ADMIN_ASSESS_TARGET_CATEGORY_ERROR);
}
if(assessTargetService.isExistName(assessTarget.getName(),assessTarget.getId())){
return Result.error(CodeMsg.ADMIN_ASSESS_TARGET_NAME_EXIST_ERROR);
}
//到这说明一切符合条件,进行数据库保存
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);
request.setAttribute("siteUrl", siteConfig.getSiteUrl());
}
return true;
}
}
package com.yuanlrc.base.controller.admin;
/**
* 后台工资项管理Controller
*/
@Controller
@RequestMapping("/admin/wage_item")
public class WageItemController {
@Autowired
private OperaterLogService operaterLogService;
@Autowired
private WageItemService wageItemService;
/**
staff.setJobNumber(jobNumber);
//到这说明一切符合条件,进行数据库新增
if(staffService.save(staff) == null){
return Result.error(CodeMsg.ADMIN_STAFF_ADD_ERROR);
}
operaterLogService.add("添加员工,员工名:" + staff.getName());
return Result.success(true);
}
@RequestMapping(value="/edit_self",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit_self(Staff staff, HttpServletRequest request){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(staff);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(!StringUtil.isMobile(staff.getMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_MOBILE_ERROR);
}
if(!StringUtil.isMobile(staff.getEmergencyMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_EMERGENCY_MOBILE_ERROR);
}
if(staff.getId() == null || staff.getId().longValue() <= 0){
return Result.error(CodeMsg.ADMIN_STAFF_NOT_EXIST_ERROR);
}
//到这说明一切符合条件,进行数据库保存
Staff findById = staffService.find(staff.getId());
//讲提交的员工信息指定字段复制到已存在的staff对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(staff, findById, "id","createTime","updateTime","jobNumber",
"role","educationEnum","jobTitle",
"position","department","entryTime");
Staff saveStaff = staffService.save(findById);
if(saveStaff == null){
return Result.error(CodeMsg.ADMIN_STAFF_EDIT_ERROR);
}
Staff loginedStaff = SessionUtil.getLoginedStaff();
if(loginedStaff != null){
if(loginedStaff.getId().longValue() == findById.getId().longValue()){
loginedStaff.setHeadPic(saveStaff.getHeadPic());
loginedStaff.setName(saveStaff.getName());
loginedStaff.setMobile(saveStaff.getMobile());
@Autowired
private MenuService menuService;
@Autowired
private OperaterLogService operaterLogService;
@Autowired
private RoleService roleService;
/**
* 分页搜索角色列表
* @param model
* @param role
* @param pageBean
* @return
*/
@RequestMapping(value="/list")
public String list(Model model,Role role,PageBean<Role> pageBean){
model.addAttribute("title", "角色列表");
model.addAttribute("name", role.getName());
model.addAttribute("pageBean", roleService.findByName(role, pageBean));
return "admin/role/list";
}
/**
* 角色添加页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
List<Menu> findAll = menuService.findAll();
model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
return "admin/role/add";
}
/**
* 角色添加表单提交处理
* @param role
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(Role role){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(role);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(attendance.getMonth().getTime() > new Date().getTime()){
return Result.error(CodeMsg.ADMIN_DATE_ERROR);
}
Calendar cal = Calendar.getInstance();
cal.setTime(attendance.getMonth());
int month = cal.get(Calendar.MONTH)+1;
int year = cal.get(Calendar.YEAR);
if(attendanceService.findByJobNumberAndYearAndMonthOfDay(attendance.getJobNumber(),year,month)!= null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_MONTH_EXIST);
}
int daysByYearMonth = DateUtil.getDaysByYearMonth(year, month);
if(daysOver(attendance,daysByYearMonth)){
return Result.error(CodeMsg.ADMIN_DAYS_ERROR);
}
if(attendance.getDaysSick() == 0 && attendance.getPersonalLeaveDays() == 0 && attendance.getLateNumber() == 0
&& attendance.getLeaveEarlyTimes() == 0 && attendance.getAbsenceDays() == 0){
attendance.setIsStatus(IsStatus.IS_ATTENDANCE);
}
attendance.setYear(year);
attendance.setMonthOfDay(month);
attendance.setLeaveDays(attendance.getDaysSick() + attendance.getPersonalLeaveDays());
attendance.setStaff(byJobNumber);
attendance.setDepartment(byJobNumber.getDepartment());
if(attendanceService.save(attendance) == null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_SAVE_ERROR);
}
return Result.success(true);
}
/**
* 编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping("/edit")
public String edit(Model model,@RequestParam(value = "id",required = true)Long id){
Attendance attendance = attendanceService.find(id);
model.addAttribute("attendance",attendance);
return "admin/attendance/edit";
}
/**
/**
* 员工编辑页面
* @param model
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
model.addAttribute("staff", staffService.find(id));
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/edit";
}
/**
* 编辑员工信息表单提交处理
* @param staff
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(Staff staff, HttpServletRequest request){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(staff);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(staff.getRole() == null || staff.getRole().getId() == null){
return Result.error(CodeMsg.ADMIN_STAFF_ROLE_ERROR);
}
if(!StringUtil.isMobile(staff.getMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_MOBILE_ERROR);
}
if(!StringUtil.isMobile(staff.getEmergencyMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_EMERGENCY_MOBILE_ERROR);
}
if(staff.getId() == null || staff.getId().longValue() <= 0){
return Result.error(CodeMsg.ADMIN_STAFF_NOT_EXIST_ERROR);
}
//到这说明一切符合条件,进行数据库保存
Staff findById = staffService.find(staff.getId());
//讲提交的员工信息指定字段复制到已存在的staff对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(staff, findById, "id","createTime","updateTime","jobNumber");
Staff saveStaff = staffService.save(findById);
if(saveStaff == null){
return Result.error(CodeMsg.ADMIN_STAFF_EDIT_ERROR);
int year = cal.get(Calendar.YEAR);
Salary byStaffIdAndYearAndMonthOfDay = salaryService.findByStaffIdAndYearAndMonthOfDay(salary.getStaff().getId(), year, monthOfDay);
if(byStaffIdAndYearAndMonthOfDay != null){
return Result.error(CodeMsg.ADMIN_SALARY_MONTH_EXIST);
}
salary.setMonthOfDay(monthOfDay);
salary.setYear(year);
salary.setStaff(staff);
salary.setDepartment(staff.getDepartment());
setSalary(salary);
if(salaryService.save(salary) == null){
return Result.error(CodeMsg.ADMIN_SALARY_SAVE_ERROR);
}
return Result.success(true);
}
public Salary setSalary(Salary salary){
BigDecimal basicWage = salary.getStaff().getSalary();
int daysByYearMonth = DateUtil.getDaysByYearMonth(salary.getYear(), salary.getMonthOfDay());
//该月平均每日工资
BigDecimal dayBasicWage = basicWage.divide(BigDecimal.valueOf(daysByYearMonth),4,BigDecimal.ROUND_HALF_UP);
//查询工资项
WageItem wageItem = wageItemService.findFirstByOrderByCreateTimeDesc();
//餐饮补贴
BigDecimal foodSubsidy = BigDecimal.ZERO;
//交通补贴
BigDecimal travelAllowance = BigDecimal.ZERO;
//出差补贴
BigDecimal missionAllowance = BigDecimal.ZERO;
//加班奖金
BigDecimal overTimeBonus = BigDecimal.ZERO;
//全勤奖金
BigDecimal attendanceBonus = BigDecimal.ZERO;
Department findById = departmentService.find(department.getId());
//讲提交的用户信息指定字段复制到已存在的department对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(department, findById, "id","createTime","updateTime");
if(departmentService.save(findById) == null){
return Result.error(CodeMsg.ADMIN_DEPARTMENT_EDIT_ERROR);
}
operaterLogService.add("编辑部门,部门名:" + department.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{
departmentService.delete(id);
}catch (Exception e){
return Result.error(CodeMsg.ADMIN_DEPARTMENT_DELETE_ERROR);
}
operaterLogService.add("删除部门,部门ID:" + id);
return Result.success(true);
}
}
package com.yuanlrc.base.controller.admin;
}
attendanceList = attendanceList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(f -> f.getJobNumber() + f.getYear() + f.getMonthOfDay()))), ArrayList::new));
try
{
attendanceService.saveAll(attendanceList);
}catch (Exception e)
{
return Result.error(CodeMsg.ADMIN_ATTENDANCE_LIST_ADD_ERROR);
}
return Result.success(true);
}
}
package com.yuanlrc.base.controller.admin;
/**
* 系统控制器
@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";
}
/**
* 员工添加表单提交处理
* @param staff
* @return
* @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);
}
int daysByYearMonth = DateUtil.getDaysByYearMonth(salary.getYear(), salary.getMonthOfDay());
//该月平均每日工资
BigDecimal dayBasicWage = basicWage.divide(BigDecimal.valueOf(daysByYearMonth),4,BigDecimal.ROUND_HALF_UP);
//查询工资项
WageItem wageItem = wageItemService.findFirstByOrderByCreateTimeDesc();
//餐饮补贴
BigDecimal foodSubsidy = BigDecimal.ZERO;
//交通补贴
BigDecimal travelAllowance = BigDecimal.ZERO;
//出差补贴
BigDecimal missionAllowance = BigDecimal.ZERO;
//加班奖金
BigDecimal overTimeBonus = BigDecimal.ZERO;
//全勤奖金
BigDecimal attendanceBonus = BigDecimal.ZERO;
//迟到罚金
BigDecimal latePenalty = BigDecimal.ZERO;
//早退罚金
BigDecimal leaveEarlyFine = BigDecimal.ZERO;
//病假罚金
BigDecimal sick = BigDecimal.ZERO;
//事假罚金
BigDecimal personalLeave = BigDecimal.ZERO;
//缺勤罚金
BigDecimal absence = BigDecimal.ZERO;
//绩效奖金
BigDecimal performance = BigDecimal.ZERO;
//年度考核奖金
BigDecimal annualAssessmentBonus = BigDecimal.ZERO;
if(wageItem != null){
foodSubsidy = wageItem.getFoodSubsidy();
travelAllowance = wageItem.getTravelAllowance();
missionAllowance = wageItem.getMissionAllowance();
overTimeBonus = wageItem.getOverTimeAllowance();
attendanceBonus = wageItem.getAttendanceBonus();
latePenalty = wageItem.getLatePenalty().negate();//转为负数
leaveEarlyFine = wageItem.getLeaveEarlyFine().negate();//转为负数
performance = wageItem.getPerformance();
annualAssessmentBonus = wageItem.getAnnualAssessmentBonus();
}
{
String checkIdCard = "^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$";
Pattern c = Pattern.compile(checkIdCard);
Matcher m2 = c.matcher(card);
if (m2.matches()){
return true;
}
return false;
}
public static String getMac(){
String mac = "";
try {
InetAddress localHost = InetAddress.getLocalHost();
byte[] hardwareAddress = NetworkInterface.getByInetAddress(localHost).getHardwareAddress();
StringBuffer sb = new StringBuffer("");
for(int i=0; i<hardwareAddress.length; i++) {
//字节转换为整数
int temp = hardwareAddress[i]&0xff;
String str = Integer.toHexString(temp);
//System.out.println("每8位:"+str);
if(str.length()==1) {
sb.append("0"+str);
}else {
sb.append(str);
}
}
mac = sb.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mac.toUpperCase();
}
}
package com.yuanlrc.base.interceptor.admin;
}
//基本工资
salary.setBasicWage(basicWage.setScale(2,BigDecimal.ROUND_HALF_UP));
//餐饮补贴
salary.setFoodSubsidy(foodSubsidy.setScale(2,BigDecimal.ROUND_HALF_UP));
//岗位补贴
salary.setPositionSubsidy((salary.getStaff().getPosition().getSubsidy()).setScale(2,BigDecimal.ROUND_HALF_UP));
//交通补贴
salary.setTravelAllowance(travelAllowance.setScale(2,BigDecimal.ROUND_HALF_UP));
//出差补贴
salary.setMissionAllowance(missionAllowance.setScale(2,BigDecimal.ROUND_HALF_UP));
//工龄奖金
BigDecimal yearsBonus = BigDecimal.ZERO;
//获取工龄
int year = DateUtil.getYear(salary.getStaff().getEntryTime());
WorkingYears workingYears = workingYearsService.findByYears(year);
if(workingYears != null){
yearsBonus = workingYears.getSubsidy();
}
//工龄奖金
salary.setYearsBonus(yearsBonus.setScale(2,BigDecimal.ROUND_HALF_UP));
//职称奖金
salary.setJobTitleBonus((salary.getStaff().getJobTitle().getBonus()).setScale(2,BigDecimal.ROUND_HALF_UP));
//加班奖金
salary.setOverTimeBonus(overTimeBonus.setScale(2,BigDecimal.ROUND_HALF_UP));
//全勤奖金
salary.setAttendanceBonus(attendanceBonus.setScale(2,BigDecimal.ROUND_HALF_UP));
//迟到罚金
salary.setLatePenalty(latePenalty.setScale(2,BigDecimal.ROUND_HALF_UP));
//早退罚金
salary.setLeaveEarlyFine(leaveEarlyFine.setScale(2,BigDecimal.ROUND_HALF_UP));
//病假
salary.setSick(sick.setScale(2,BigDecimal.ROUND_HALF_UP));
//事假
salary.setPersonalLeave(personalLeave.setScale(2,BigDecimal.ROUND_HALF_UP));
//缺勤
salary.setAbsence(absence.setScale(2,BigDecimal.ROUND_HALF_UP));
//查询绩效
PerformanceAssessment performanceAssessment = peranceAssmentService.findByYearAndMonthAndStaffId(salary.getYear(), salary.getMonthOfDay(), salary.getStaff().getId());
if(performanceAssessment != null){
Double rate = performanceAssessment.getGrade().getRate();
performance = BigDecimalUtil.multiply(performance,rate);
private MenuService menuService;
@Autowired
private OperaterLogService operaterLogService;
@Autowired
private RoleService roleService;
/**
* 分页搜索角色列表
* @param model
* @param role
* @param pageBean
* @return
*/
@RequestMapping(value="/list")
public String list(Model model,Role role,PageBean<Role> pageBean){
model.addAttribute("title", "角色列表");
model.addAttribute("name", role.getName());
model.addAttribute("pageBean", roleService.findByName(role, pageBean));
return "admin/role/list";
}
/**
* 角色添加页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
List<Menu> findAll = menuService.findAll();
model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
return "admin/role/add";
}
/**
* 角色添加表单提交处理
* @param role
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
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());
CodeMsg validate = ValidateEntityUtil.validate(attendance);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
attendance.setLeaveDays(attendance.getDaysSick() + attendance.getPersonalLeaveDays());
int daysByYearMonth = DateUtil.getDaysByYearMonth(year, monthOfDay);
if(daysOver(attendance,daysByYearMonth)){
CodeMsg codeMsg = CodeMsg.ADMIN_DAYS_ERROR;
codeMsg.setMsg("Excel第" + line + "行"+codeMsg.getMsg());
return Result.error(codeMsg);
}
* 添加页面
* @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";
}
@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())){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_JOB_NUMBER_EMPTY);
}
Staff byJobNumber = staffService.findByJobNumberAndIsStatus(attendance.getJobNumber());
if(byJobNumber == null){
return Result.error(CodeMsg.ADMIN_JOB_NUMBER_EMPTY);
}
if(attendance.getMonth().getTime() > new Date().getTime()){
return Result.error(CodeMsg.ADMIN_DATE_ERROR);
}
Calendar cal = Calendar.getInstance();
cal.setTime(attendance.getMonth());
int month = cal.get(Calendar.MONTH)+1;
int year = cal.get(Calendar.YEAR);
if(attendanceService.findByJobNumberAndYearAndMonthOfDay(attendance.getJobNumber(),year,month)!= null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_MONTH_EXIST);
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);
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);
Integer month = performanceAssessment.getMonth();
if(month<=0){
return Result.error(CodeMsg.ADMIN_PERFORMANCE_MONTH_ERROR);
}
PerformanceAssessment assessment = peranceAssmentService.findByYearAndMonthAndStaffId(year, month,staff.getId());
if(assessment!=null){
return Result.error(CodeMsg.ADMIN_PERFORMANCE_EXIST_ERROR);
}
JSONArray array = JSONObject.parseArray(assTarget);
double totalScore=0;
double weight=0;
for(int i=0;i<array.size();i++){
Object assessmentTarget = array.getJSONObject(i);
Object targetId = ((com.alibaba.fastjson.JSONObject) assessmentTarget).get("targetId");
Object currentScore = ((com.alibaba.fastjson.JSONObject) assessmentTarget).get("score");
String idl = targetId.toString();
AssessTarget assessTarget = assessTargetService.find(Long.valueOf(idl));
Integer targetScore = assessTarget.getScore();
String score = currentScore.toString();
totalScore += Double.parseDouble(score) *targetScore.doubleValue();
weight+=targetScore.doubleValue();
}
double finalScore = totalScore / weight;
BigDecimal bigDecimal = new BigDecimal(0.0d);
try {
bigDecimal = new BigDecimal(finalScore);
} catch (Exception e) {
e.printStackTrace();
}
performanceAssessment.setPercentage(bigDecimal);
GradeEnum gradeEnum = GradeEnum.countGrade(finalScore);
performanceAssessment.setGrade(gradeEnum);
if(peranceAssmentService.save(performanceAssessment)==null){
return Result.error(CodeMsg.ADMIN_PERFORMANCE_ADD_ERROR);
}
return Result.success(true);
}
/**
* 添加年度考核
* @param id
* @return
*/
@RequestMapping("/annual_add")
public String annualAdd(Model model,@RequestParam(name="id",required=true)Long id){
Staff staff = staffService.findByIdAndIsStatus(id, StaffStatus.ON_THE_JOB.getCode());
if(staff == null){
&& attendance.getLeaveEarlyTimes() == 0 && attendance.getAbsenceDays() == 0){
attendance.setIsStatus(IsStatus.IS_ATTENDANCE);
}else{
attendance.setIsStatus(IsStatus.NOT_ATTENDANCE);
}
attendance.setLeaveDays(attendance.getDaysSick() + attendance.getPersonalLeaveDays());
BeanUtils.copyProperties(attendance,findById,"id","createTime","updateTime","staff","year","monthOfDay","department","jobNumber");
if(attendanceService.save(findById) == null){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_EDIT_ERROR);
}
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{
attendanceService.delete(id);
}catch (Exception e){
return Result.error(CodeMsg.ADMIN_ATTENDANCE_DELETE_ERROR);
}
return Result.success(true);
}
/**
* 判断天数是否超出
* @param attendance
* @param daysByYearMonth
* @return
*/
public Boolean daysOver(Attendance attendance,int daysByYearMonth){
if(attendance.getDaysSick() + attendance.getPersonalLeaveDays() + attendance.getAbsenceDays() +
attendance.getTravelDays() > daysByYearMonth){
return true;
}
return false;
}
/**
*/
@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
*/
@RequestMapping("/edit")
public String edit(Model model, @RequestParam("id")Long id){
model.addAttribute("position",positionService.find(id));
/**
* 后台岗位管理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")
/**
* 后台岗位管理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
if(maxId<10){
jobNumber=jobNumber+"0"+maxId;
}else{
jobNumber=jobNumber+maxId;
}
staff.setJobNumber(jobNumber);
//到这说明一切符合条件,进行数据库新增
if(staffService.save(staff) == null){
return Result.error(CodeMsg.ADMIN_STAFF_ADD_ERROR);
}
operaterLogService.add("添加员工,员工名:" + staff.getName());
return Result.success(true);
}
@RequestMapping(value="/edit_self",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit_self(Staff staff, HttpServletRequest request){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(staff);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(!StringUtil.isMobile(staff.getMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_MOBILE_ERROR);
}
if(!StringUtil.isMobile(staff.getEmergencyMobile())){
return Result.error(CodeMsg.ADMIN_STAFF_EMERGENCY_MOBILE_ERROR);
}
if(staff.getId() == null || staff.getId().longValue() <= 0){
return Result.error(CodeMsg.ADMIN_STAFF_NOT_EXIST_ERROR);
}
//到这说明一切符合条件,进行数据库保存
Staff findById = staffService.find(staff.getId());
//讲提交的员工信息指定字段复制到已存在的staff对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(staff, findById, "id","createTime","updateTime","jobNumber",
"role","educationEnum","jobTitle",
"position","department","entryTime");
Staff saveStaff = staffService.save(findById);
if(saveStaff == null){
return Result.error(CodeMsg.ADMIN_STAFF_EDIT_ERROR);
}
Staff loginedStaff = SessionUtil.getLoginedStaff();
if(loginedStaff != null){
if(loginedStaff.getId().longValue() == findById.getId().longValue()){
loginedStaff.setHeadPic(saveStaff.getHeadPic());
loginedStaff.setName(saveStaff.getName());
loginedStaff.setMobile(saveStaff.getMobile());
loginedStaff.setEmergencyContact(saveStaff.getEmergencyContact());
loginedStaff.setEmergencyMobile(saveStaff.getEmergencyMobile());
loginedStaff.setAge(saveStaff.getAge());
loginedStaff.setSex(saveStaff.getSex());
SessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY,loginedStaff);
}
}
@ResponseBody
public Result<Boolean> add(Department department){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(department);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(department.getNote().length() > 50){
return Result.error(CodeMsg.DEPARTMENT_LENGTH_EXIST);
}
if(departmentService.isExistName(department.getName(),0l)){
return Result.error(CodeMsg.ADMIN_DEPARTMENT_NAME_EXIST);
}
if(departmentService.save(department) == null){
return Result.error(CodeMsg.ADMIN_DEPARTMENT_SAVE_ERROR);
}
operaterLogService.add("添加部门,部门名:" + department.getName());
return Result.success(true);
}
/**
* 编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping("/edit")
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
model.addAttribute("department",departmentService.find(id));
return "/admin/department/edit";
}
/**
* 编辑表单提交处理
* @param department
* @return
*/
@RequestMapping(value = "/edit",method = RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(Department department){
//用统一验证实体方法验证是否合法