src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
@@ -40,11 +40,14 @@ @Autowired private CompensationPerformanceService compensationPerformanceService; @Autowired private StaffOnJobMapper staffOnJobMapper; @GetMapping("/listPage") @Log(title = "薪酬绩效-分页查询", businessType = BusinessType.OTHER) @ApiOperation("薪酬绩效-分页查询") public AjaxResult listPage(Page page, CompensationPerformance compensationPerformance){ IPage<CompensationPerformance> listPage = compensationPerformanceService.listPage(page, compensationPerformance); public AjaxResult listPage(Page page, String staffName, String payDateStr) { IPage<CompensationPerformance> listPage = compensationPerformanceService.listPage(page, staffName, payDateStr); return AjaxResult.success(listPage); } @@ -52,7 +55,7 @@ @Log(title = "薪酬绩效-添加", businessType = BusinessType.INSERT) @ApiOperation("薪酬绩效-添加") @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody CompensationPerformance compensationPerformance){ public AjaxResult add(@RequestBody CompensationPerformance compensationPerformance) { boolean save = compensationPerformanceService.save(compensationPerformance); return save ? AjaxResult.success("添加成功") : AjaxResult.error("添加失败"); } @@ -61,7 +64,7 @@ @Log(title = "薪酬绩效-修改", businessType = BusinessType.UPDATE) @ApiOperation("薪酬绩效-修改") @Transactional(rollbackFor = Exception.class) public AjaxResult update(@RequestBody CompensationPerformance compensationPerformance){ public AjaxResult update(@RequestBody CompensationPerformance compensationPerformance) { boolean update = compensationPerformanceService.updateById(compensationPerformance); return update ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败"); } @@ -70,17 +73,17 @@ @Log(title = "薪酬绩效-删除", businessType = BusinessType.DELETE) @ApiOperation("薪酬绩效-删除") @Transactional(rollbackFor = Exception.class) public AjaxResult delete(@RequestBody List<Long> ids){ if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("请传入要删除的ID"); public AjaxResult delete(@RequestBody List<Long> ids) { if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("请传入要删除的ID"); boolean delete = compensationPerformanceService.removeBatchByIds(ids); return delete ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败"); } @Log(title = "导出薪资管理列表", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response ) { public void export(HttpServletResponse response) { List<CompensationPerformance> list = compensationPerformanceService.list(); ExcelUtil<CompensationPerformance> util = new ExcelUtil<CompensationPerformance>(CompensationPerformance.class); ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class); util.exportExcel(response, list, "导出薪资管理列表"); } @@ -92,18 +95,15 @@ util.exportExcel(response, list, "下载薪资管理列表模板"); } @Autowired private SysUserMapper sysUserMapper; @Log(title = "导入薪资管理列表", businessType = BusinessType.IMPORT) @PostMapping("/importData") public AjaxResult importData(MultipartFile file) throws Exception { ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class); List<CompensationPerformance> list = util.importExcel(file.getInputStream()); list.forEach(item->{ SysUser staffOnJob = sysUserMapper.selectUserByNickName(item.getName()); if(staffOnJob!=null){ item.setStaffId(staffOnJob.getUserId()); list.forEach(item -> { StaffOnJob staffOnJob = staffOnJobMapper.selectStaffByNickName(item.getStaffName()); if (staffOnJob != null) { item.setStaffId(staffOnJob.getId()); } }); boolean b = compensationPerformanceService.saveBatch(list); src/main/java/com/ruoyi/compensationperformance/mapper/CompensationPerformanceMapper.java
@@ -15,9 +15,10 @@ /** * 分页查询 * * @param page * @param compensationPerformance * @param page 分页 * @param staffName 员工姓名 * @param payDateStr 薪资日期 * @return */ IPage<CompensationPerformance> listPage(Page page,@Param("req") CompensationPerformance compensationPerformance); IPage<CompensationPerformance> listPage(Page page, @Param("staffName") String staffName, @Param("payDateStr") String payDateStr); } src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
@@ -8,193 +8,156 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; /** * 薪酬绩效明细 * * @author :yys * @date : 2025/8/8 9:40 * @date : 2025/8/8 */ @Data @TableName("compensation_performance") @ApiModel public class CompensationPerformance { @ApiModel("薪酬绩效明细") public class CompensationPerformance implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty("主键") private Long id; /** * 用户id * 员工id */ @ApiModelProperty("用户id") @ApiModelProperty("员工id") private Long staffId; /** * 姓名 * 员工姓名 */ @ApiModelProperty("姓名") @Excel(name = "姓名") private String name; @ApiModelProperty("员工姓名") @Excel(name = "员工姓名") @TableField(exist = false) private String staffName; /** * 薪资月份(查询) * 岗位名称 */ @ApiModelProperty("薪资月份(查询)") @ApiModelProperty("岗位名称") @Excel(name = "岗位名称") @TableField(exist = false) private String payDateStr; private String postName; /** * 部门名称 */ @ApiModelProperty("部门名称") @Excel(name = "部门名称") @TableField(exist = false) private String deptName; /** * 薪资月份 */ @ApiModelProperty("薪资月份") @Excel(name = "薪资月份", dateFormat = "yyyy-MM", width = 30) @Excel(name = "月份", dateFormat = "yyyy-MM", width = 20) @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM") private Date payDate; /** * 应出勤天数 */ @ApiModelProperty("应出勤天数") // @Excel(name = "应出勤天数") private BigDecimal shouldAttendedNum; /** * 实际出勤天数 */ @ApiModelProperty("实际出勤天数") // @Excel(name = "实际出勤天数") private BigDecimal actualAttendedNum; /** * 基本工资 */ @ApiModelProperty("基本工资") // @Excel(name = "基本工资") @Excel(name = "基本工资") private BigDecimal basicSalary; /** * 岗位工资 * 计件工资 */ @ApiModelProperty("岗位工资") // @Excel(name = "岗位工资") private BigDecimal postSalary; @ApiModelProperty("计件工资") @Excel(name = "计件工资") private BigDecimal pieceworkSalary; /** * 入离职缺勤扣款 * 计时工资 */ @ApiModelProperty("入离职缺勤扣款") // @Excel(name = "入离职缺勤扣款") private BigDecimal deductionAbsenteeism; @ApiModelProperty("计时工资") @Excel(name = "计时工资") private BigDecimal hourlySalary; /** * 病假扣款 * 其他收入 */ @ApiModelProperty("病假扣款") // @Excel(name = "病假扣款") private BigDecimal sickLeaveDeductions; /** * 事假扣款 */ @ApiModelProperty("事假扣款") // @Excel(name = "事假扣款") private BigDecimal deductionPersonalLeave; /** * 忘记打卡扣款 */ @ApiModelProperty("忘记打卡扣款") // @Excel(name = "忘记打卡扣款") private BigDecimal forgetClockDeduct; /** * 绩效得分 */ @ApiModelProperty("绩效得分") // @Excel(name = "绩效得分") private BigDecimal performanceScore; /** * 绩效工资 */ @ApiModelProperty("绩效工资") // @Excel(name = "绩效工资") private BigDecimal performancePay; /** * 应发合计 */ @ApiModelProperty("应发合计") // @Excel(name = "应发合计") private BigDecimal payableWages; @ApiModelProperty("其他收入") @Excel(name = "其他收入") private BigDecimal otherIncome; /** * 社保个人 */ @ApiModelProperty("社保个人") // @Excel(name = "社保个人") @Excel(name = "社保个人") private BigDecimal socialSecurityIndividuals; /** * 社保公司 */ @ApiModelProperty("社保公司") // @Excel(name = "社保公司") private BigDecimal socialSecurityCompanies; /** * 社保合计 */ @ApiModelProperty("社保合计") // @Excel(name = "社保合计") private BigDecimal socialSecurityTotal; /** * 公积金合计 */ @ApiModelProperty("公积金合计") // @Excel(name = "公积金合计") private BigDecimal providentFundTotal; /** * 公积金公司 */ @ApiModelProperty("公积金公司") // @Excel(name = "公积金公司") private BigDecimal providentFundCompany; /** * 公积金个人 */ @ApiModelProperty("公积金个人") // @Excel(name = "公积金个人") @Excel(name = "公积金个人") private BigDecimal providentFundIndividuals; /** * 应税工资 * 工资个税 */ @ApiModelProperty("应税工资") // @Excel(name = "应税工资") private BigDecimal taxableWaget; /** * 个人所得税 */ @ApiModelProperty("个人所得税") // @Excel(name = "个人所得税") @ApiModelProperty("工资个税") @Excel(name = "工资个税") private BigDecimal personalIncomeTax; /** * 其他支出 */ @ApiModelProperty("其他支出") @Excel(name = "其他支出") private BigDecimal otherDeductions; /** * 应发工资 */ @ApiModelProperty("应发工资") @Excel(name = "应发工资") private BigDecimal payableWages; /** * 应扣工资 */ @ApiModelProperty("应扣工资") @Excel(name = "应扣工资") private BigDecimal deductibleWages; /** * 实发工资 */ @ApiModelProperty("实发工资") @Excel(name = "实发工资", width = 30) @Excel(name = "实发工资") private BigDecimal actualWages; /** * 备注 */ @ApiModelProperty("备注") @Excel(name = "备注") private String remark; /** * 租户ID */ @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 创建者 @@ -206,6 +169,7 @@ * 创建时间 */ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; /** @@ -218,12 +182,7 @@ * 修改时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime updateTime; /** * 租户ID */ @TableField(fill = FieldFill.INSERT) private Long tenantId; } } src/main/java/com/ruoyi/compensationperformance/service/CompensationPerformanceService.java
@@ -14,9 +14,11 @@ /** * 分页查询 * * @param page * @param compensationPerformance * @param page 分页插件 * @param staffName 员工姓名 * @param payDateStr 薪资日期 * @return */ IPage<CompensationPerformance> listPage(Page page, CompensationPerformance compensationPerformance); IPage<CompensationPerformance> listPage(Page page, String staffName, String payDateStr); } src/main/java/com/ruoyi/compensationperformance/service/impl/CompensationPerformanceServiceImpl.java
@@ -23,8 +23,8 @@ @Override public IPage<CompensationPerformance> listPage(Page page, CompensationPerformance compensationPerformance) { IPage<CompensationPerformance> compensationPerformanceIPage = compensationPerformanceMapper.listPage(page, compensationPerformance); return compensationPerformanceIPage; public IPage<CompensationPerformance> listPage(Page page, String staffName, String payDateStr) { return compensationPerformanceMapper.listPage(page, staffName, payDateStr); } } src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java
@@ -20,6 +20,7 @@ /** * 统计指定日期的在职员工数 * * @param date 日期 * @return 在职员工数 */ @@ -27,9 +28,18 @@ /** * 统计指定月份的新入职员工数 * * @param monthStart 月份开始日期 * @param monthEnd 月份结束日期 * @param monthEnd 月份结束日期 * @return 新入职员工数 */ Integer countNewHireByMonth(@Param("monthStart") LocalDate monthStart, @Param("monthEnd") LocalDate monthEnd); /** * 根据员工姓名查询员工信息 * * @param staffName 员工姓名 * @return 员工数据 */ StaffOnJob selectStaffByNickName(String staffName); } src/main/resources/mapper/compensationperformance/CompensationPerformanceMapper.xml
@@ -3,14 +3,23 @@ <mapper namespace="com.ruoyi.compensationperformance.mapper.CompensationPerformanceMapper"> <select id="listPage" resultType="com.ruoyi.compensationperformance.pojo.CompensationPerformance"> select * from compensation_performance SELECT cp.*, soj.staff_name AS staffName, sp.post_name AS postName, sd.dept_name AS deptName FROM compensation_performance cp LEFT JOIN staff_on_job soj ON soj.id = cp.staff_id LEFT JOIN sys_post sp ON sp.post_id = soj.sys_post_id LEFT JOIN sys_dept sd ON sd.dept_id = soj.sys_dept_id <where> <if test="req.name != null and req.name != ''"> and `name` like concat('%',#{req.name},'%') <if test="staffName != null and staffName != ''"> AND soj.staff_name LIKE CONCAT('%', #{staffName}, '%') </if> <if test="req.payDateStr != null and req.payDateStr != ''"> and pay_date like concat('%',#{req.payDateStr},'%') <if test="payDateStr != null and payDateStr != ''"> AND DATE_FORMAT(cp.pay_date, '%Y-%m') = #{payDateStr} </if> </where> ORDER BY cp.pay_date DESC, cp.id DESC </select> </mapper> src/main/resources/mapper/staff/StaffOnJobMapper.xml
@@ -13,7 +13,7 @@ sys_dept sd ON sd.dept_id = staff_on_job.sys_dept_id where 1=1 <if test="staffOnJob.staffState != null"> AND staff_state = #{staffOnJob.staffState} AND staff_state = #{staffOnJob.staffState} </if> <if test="staffOnJob.staffName != null and staffOnJob.staffName != '' "> AND staff_name LIKE CONCAT('%',#{staffOnJob.staffName},'%') @@ -22,7 +22,7 @@ AND contract_expire_time >= DATE_FORMAT(#{staffOnJob.entryDateStart},'%Y-%m-%d') </if> <if test="staffOnJob.entryDateEnd != null and staffOnJob.entryDateEnd != '' "> AND contract_expire_time <= DATE_FORMAT(#{staffOnJob.entryDateEnd},'%Y-%m-%d') AND contract_expire_time <= DATE_FORMAT(#{staffOnJob.entryDateEnd},'%Y-%m-%d') </if> </select> <select id="staffOnJobList" resultType="com.ruoyi.staff.dto.StaffOnJobDto"> @@ -48,7 +48,7 @@ SELECT COUNT(*) FROM staff_on_job WHERE staff_state = 1 AND DATE_FORMAT(create_time, '%Y-%m-%d') <= #{date} AND DATE_FORMAT(create_time, '%Y-%m-%d') <= #{date} </select> <!-- 统计指定月份的新入职员工数 --> @@ -56,6 +56,23 @@ SELECT COUNT(*) FROM staff_on_job WHERE staff_state = 1 AND DATE_FORMAT(create_time, '%Y-%m-%d') BETWEEN #{monthStart} AND #{monthEnd} AND DATE_FORMAT(create_time, '%Y-%m-%d') BETWEEN #{monthStart} AND #{monthEnd} </select> <select id="selectStaffByNickName" resultType="com.ruoyi.staff.pojo.StaffOnJob" parameterType="java.lang.String"> SELECT id nick_name AS staffName FROM staff_on_job WHERE del_flag = '0' <choose> <when test="staffName != null and staffName != ''"> AND nick_name = #{staffName} </when> <otherwise> AND 1 = 0 </otherwise> </choose> LIMIT 1 </select> </mapper>