From ebfa25bb16b2a3d92f61d6a2ad711f46283299be Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 9 Aug 2025 13:20:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(oa):=20=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8F=91=E6=94=BE=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 GearSalaryRecords 实体类 - 新增 GearSalaryRecordsBo 业务对象类 - 新增 GearSalaryRecordsController 控制器 - 新增 GearSalaryRecordsMapper Mapper 接口和 XML 文件 - 新增 GearSalaryRecordsServiceImpl 服务实现类 - 新增 GearSalaryRecordsVo 视图对象类 - 新增 IGearSalaryRecordsService 服务接口 --- .../GearSalaryRecordsController.java | 102 +++++++++++++++ .../com/gear/oa/domain/GearSalaryRecords.java | 91 +++++++++++++ .../oa/domain/bo/GearSalaryRecordsBo.java | 98 ++++++++++++++ .../oa/domain/vo/GearSalaryRecordsVo.java | 112 ++++++++++++++++ .../oa/mapper/GearSalaryRecordsMapper.java | 15 +++ .../oa/service/IGearSalaryRecordsService.java | 49 +++++++ .../impl/GearSalaryRecordsServiceImpl.java | 120 ++++++++++++++++++ .../mapper/oa/GearSalaryRecordsMapper.xml | 30 +++++ 8 files changed, 617 insertions(+) create mode 100644 gear-oa/src/main/java/com/gear/oa/controller/GearSalaryRecordsController.java create mode 100644 gear-oa/src/main/java/com/gear/oa/domain/GearSalaryRecords.java create mode 100644 gear-oa/src/main/java/com/gear/oa/domain/bo/GearSalaryRecordsBo.java create mode 100644 gear-oa/src/main/java/com/gear/oa/domain/vo/GearSalaryRecordsVo.java create mode 100644 gear-oa/src/main/java/com/gear/oa/mapper/GearSalaryRecordsMapper.java create mode 100644 gear-oa/src/main/java/com/gear/oa/service/IGearSalaryRecordsService.java create mode 100644 gear-oa/src/main/java/com/gear/oa/service/impl/GearSalaryRecordsServiceImpl.java create mode 100644 gear-oa/src/main/resources/mapper/oa/GearSalaryRecordsMapper.xml diff --git a/gear-oa/src/main/java/com/gear/oa/controller/GearSalaryRecordsController.java b/gear-oa/src/main/java/com/gear/oa/controller/GearSalaryRecordsController.java new file mode 100644 index 0000000..28d1d72 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/controller/GearSalaryRecordsController.java @@ -0,0 +1,102 @@ +package com.gear.oa.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.gear.common.annotation.RepeatSubmit; +import com.gear.common.annotation.Log; +import com.gear.common.core.controller.BaseController; +import com.gear.common.core.domain.PageQuery; +import com.gear.common.core.domain.R; +import com.gear.common.core.validate.AddGroup; +import com.gear.common.core.validate.EditGroup; +import com.gear.common.core.validate.QueryGroup; +import com.gear.common.enums.BusinessType; +import com.gear.common.utils.poi.ExcelUtil; +import com.gear.oa.domain.vo.GearSalaryRecordsVo; +import com.gear.oa.domain.bo.GearSalaryRecordsBo; +import com.gear.oa.service.IGearSalaryRecordsService; +import com.gear.common.core.page.TableDataInfo; + +/** + * 工资发放记录 + * + * @author Joshi + * @date 2025-08-09 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/salaryRecords") +public class GearSalaryRecordsController extends BaseController { + + private final IGearSalaryRecordsService iGearSalaryRecordsService; + + /** + * 查询工资发放记录列表 + */ + @GetMapping("/list") + public TableDataInfo list(GearSalaryRecordsBo bo, PageQuery pageQuery) { + return iGearSalaryRecordsService.queryPageList(bo, pageQuery); + } + + /** + * 导出工资发放记录列表 + */ + @Log(title = "工资发放记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(GearSalaryRecordsBo bo, HttpServletResponse response) { + List list = iGearSalaryRecordsService.queryList(bo); + ExcelUtil.exportExcel(list, "工资发放记录", GearSalaryRecordsVo.class, response); + } + + /** + * 获取工资发放记录详细信息 + * + * @param salaryId 主键 + */ + @GetMapping("/{salaryId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long salaryId) { + return R.ok(iGearSalaryRecordsService.queryById(salaryId)); + } + + /** + * 新增工资发放记录 + */ + @Log(title = "工资发放记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody GearSalaryRecordsBo bo) { + return toAjax(iGearSalaryRecordsService.insertByBo(bo)); + } + + /** + * 修改工资发放记录 + */ + @Log(title = "工资发放记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody GearSalaryRecordsBo bo) { + return toAjax(iGearSalaryRecordsService.updateByBo(bo)); + } + + /** + * 删除工资发放记录 + * + * @param salaryIds 主键串 + */ + @Log(title = "工资发放记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{salaryIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] salaryIds) { + return toAjax(iGearSalaryRecordsService.deleteWithValidByIds(Arrays.asList(salaryIds), true)); + } +} diff --git a/gear-oa/src/main/java/com/gear/oa/domain/GearSalaryRecords.java b/gear-oa/src/main/java/com/gear/oa/domain/GearSalaryRecords.java new file mode 100644 index 0000000..6ece278 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/domain/GearSalaryRecords.java @@ -0,0 +1,91 @@ +package com.gear.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gear.common.core.domain.BaseEntity; + +/** + * 工资发放记录对象 gear_salary_records + * + * @author Joshi + * @date 2025-08-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("gear_salary_records") +public class GearSalaryRecords extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 唯一记录ID + */ + @TableId(value = "salary_id") + private Long salaryId; + /** + * 员工ID(加密存储) + */ + private Long employeeId; + /** + * 发薪月份(YYYY-MM-01) + */ + private Date payPeriod; + /** + * 基本工资 + */ + private BigDecimal baseSalary; + /** + * 绩效奖金 + */ + private BigDecimal performanceBonus; + /** + * 加班工资 + */ + private BigDecimal overtimePay; + /** + * 各类补贴 + */ + private BigDecimal allowance; + /** + * 社保个人部分 + */ + private BigDecimal socialSecurity; + /** + * 公积金个人部分 + */ + private BigDecimal housingFund; + /** + * 个人所得税 + */ + private BigDecimal incomeTax; + /** + * 应发工资 + */ + private BigDecimal grossSalary; + /** + * 实发工资 + */ + private BigDecimal netSalary; + /** + * 删除标志(0 正常,1 删除) + */ + @TableLogic + private Long delFlag; + /** + * 备注 + */ + private String remark; + /** + * 发放状态 + */ + private String payStatus; + +} diff --git a/gear-oa/src/main/java/com/gear/oa/domain/bo/GearSalaryRecordsBo.java b/gear-oa/src/main/java/com/gear/oa/domain/bo/GearSalaryRecordsBo.java new file mode 100644 index 0000000..e40bbb2 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/domain/bo/GearSalaryRecordsBo.java @@ -0,0 +1,98 @@ +package com.gear.oa.domain.bo; + +import com.gear.common.core.validate.AddGroup; +import com.gear.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gear.common.core.domain.BaseEntity; + +/** + * 工资发放记录业务对象 gear_salary_records + * + * @author Joshi + * @date 2025-08-09 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class GearSalaryRecordsBo extends BaseEntity { + + /** + * 唯一记录ID + */ + private Long salaryId; + + /** + * 员工ID(加密存储) + */ + private Long employeeId; + + /** + * 发薪月份(YYYY-MM-01) + */ + private Date payPeriod; + + /** + * 基本工资 + */ + private BigDecimal baseSalary; + + /** + * 绩效奖金 + */ + private BigDecimal performanceBonus; + + /** + * 加班工资 + */ + private BigDecimal overtimePay; + + /** + * 各类补贴 + */ + private BigDecimal allowance; + + /** + * 社保个人部分 + */ + private BigDecimal socialSecurity; + + /** + * 公积金个人部分 + */ + private BigDecimal housingFund; + + /** + * 个人所得税 + */ + private BigDecimal incomeTax; + + /** + * 应发工资 + */ + private BigDecimal grossSalary; + + /** + * 实发工资 + */ + private BigDecimal netSalary; + + /** + * 备注 + */ + private String remark; + + /** + * 发放状态 + */ + private String payStatus; + + +} diff --git a/gear-oa/src/main/java/com/gear/oa/domain/vo/GearSalaryRecordsVo.java b/gear-oa/src/main/java/com/gear/oa/domain/vo/GearSalaryRecordsVo.java new file mode 100644 index 0000000..2608b54 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/domain/vo/GearSalaryRecordsVo.java @@ -0,0 +1,112 @@ +package com.gear.oa.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.gear.common.annotation.ExcelDictFormat; +import com.gear.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 工资发放记录视图对象 gear_salary_records + * + * @author Joshi + * @date 2025-08-09 + */ +@Data +@ExcelIgnoreUnannotated +public class GearSalaryRecordsVo { + + private static final long serialVersionUID = 1L; + + /** + * 唯一记录ID + */ + @ExcelProperty(value = "唯一记录ID") + private Long salaryId; + + /** + * 员工ID(加密存储) + */ + @ExcelProperty(value = "员工ID(加密存储)") + private Long employeeId; + + /** + * 发薪月份(YYYY-MM-01) + */ + @ExcelProperty(value = "发薪月份(YYYY-MM-01)") + private Date payPeriod; + + /** + * 基本工资 + */ + @ExcelProperty(value = "基本工资") + private BigDecimal baseSalary; + + /** + * 绩效奖金 + */ + @ExcelProperty(value = "绩效奖金") + private BigDecimal performanceBonus; + + /** + * 加班工资 + */ + @ExcelProperty(value = "加班工资") + private BigDecimal overtimePay; + + /** + * 各类补贴 + */ + @ExcelProperty(value = "各类补贴") + private BigDecimal allowance; + + /** + * 社保个人部分 + */ + @ExcelProperty(value = "社保个人部分") + private BigDecimal socialSecurity; + + /** + * 公积金个人部分 + */ + @ExcelProperty(value = "公积金个人部分") + private BigDecimal housingFund; + + /** + * 个人所得税 + */ + @ExcelProperty(value = "个人所得税") + private BigDecimal incomeTax; + + /** + * 应发工资 + */ + @ExcelProperty(value = "应发工资") + private BigDecimal grossSalary; + + /** + * 实发工资 + */ + @ExcelProperty(value = "实发工资") + private BigDecimal netSalary; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 发放状态 + */ + @ExcelProperty(value = "发放状态") + private String payStatus; + + +} diff --git a/gear-oa/src/main/java/com/gear/oa/mapper/GearSalaryRecordsMapper.java b/gear-oa/src/main/java/com/gear/oa/mapper/GearSalaryRecordsMapper.java new file mode 100644 index 0000000..2e913d5 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/mapper/GearSalaryRecordsMapper.java @@ -0,0 +1,15 @@ +package com.gear.oa.mapper; + +import com.gear.oa.domain.GearSalaryRecords; +import com.gear.oa.domain.vo.GearSalaryRecordsVo; +import com.gear.common.core.mapper.BaseMapperPlus; + +/** + * 工资发放记录Mapper接口 + * + * @author Joshi + * @date 2025-08-09 + */ +public interface GearSalaryRecordsMapper extends BaseMapperPlus { + +} diff --git a/gear-oa/src/main/java/com/gear/oa/service/IGearSalaryRecordsService.java b/gear-oa/src/main/java/com/gear/oa/service/IGearSalaryRecordsService.java new file mode 100644 index 0000000..dec96ca --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/service/IGearSalaryRecordsService.java @@ -0,0 +1,49 @@ +package com.gear.oa.service; + +import com.gear.oa.domain.GearSalaryRecords; +import com.gear.oa.domain.vo.GearSalaryRecordsVo; +import com.gear.oa.domain.bo.GearSalaryRecordsBo; +import com.gear.common.core.page.TableDataInfo; +import com.gear.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工资发放记录Service接口 + * + * @author Joshi + * @date 2025-08-09 + */ +public interface IGearSalaryRecordsService { + + /** + * 查询工资发放记录 + */ + GearSalaryRecordsVo queryById(Long salaryId); + + /** + * 查询工资发放记录列表 + */ + TableDataInfo queryPageList(GearSalaryRecordsBo bo, PageQuery pageQuery); + + /** + * 查询工资发放记录列表 + */ + List queryList(GearSalaryRecordsBo bo); + + /** + * 新增工资发放记录 + */ + Boolean insertByBo(GearSalaryRecordsBo bo); + + /** + * 修改工资发放记录 + */ + Boolean updateByBo(GearSalaryRecordsBo bo); + + /** + * 校验并批量删除工资发放记录信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/gear-oa/src/main/java/com/gear/oa/service/impl/GearSalaryRecordsServiceImpl.java b/gear-oa/src/main/java/com/gear/oa/service/impl/GearSalaryRecordsServiceImpl.java new file mode 100644 index 0000000..9c863f2 --- /dev/null +++ b/gear-oa/src/main/java/com/gear/oa/service/impl/GearSalaryRecordsServiceImpl.java @@ -0,0 +1,120 @@ +package com.gear.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.gear.common.utils.StringUtils; +import com.gear.common.core.page.TableDataInfo; +import com.gear.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.gear.oa.domain.bo.GearSalaryRecordsBo; +import com.gear.oa.domain.vo.GearSalaryRecordsVo; +import com.gear.oa.domain.GearSalaryRecords; +import com.gear.oa.mapper.GearSalaryRecordsMapper; +import com.gear.oa.service.IGearSalaryRecordsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工资发放记录Service业务层处理 + * + * @author Joshi + * @date 2025-08-09 + */ +@RequiredArgsConstructor +@Service +public class GearSalaryRecordsServiceImpl implements IGearSalaryRecordsService { + + private final GearSalaryRecordsMapper baseMapper; + + /** + * 查询工资发放记录 + */ + @Override + public GearSalaryRecordsVo queryById(Long salaryId){ + return baseMapper.selectVoById(salaryId); + } + + /** + * 查询工资发放记录列表 + */ + @Override + public TableDataInfo queryPageList(GearSalaryRecordsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询工资发放记录列表 + */ + @Override + public List queryList(GearSalaryRecordsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(GearSalaryRecordsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getEmployeeId() != null, GearSalaryRecords::getEmployeeId, bo.getEmployeeId()); + lqw.eq(bo.getPayPeriod() != null, GearSalaryRecords::getPayPeriod, bo.getPayPeriod()); + lqw.eq(bo.getBaseSalary() != null, GearSalaryRecords::getBaseSalary, bo.getBaseSalary()); + lqw.eq(bo.getPerformanceBonus() != null, GearSalaryRecords::getPerformanceBonus, bo.getPerformanceBonus()); + lqw.eq(bo.getOvertimePay() != null, GearSalaryRecords::getOvertimePay, bo.getOvertimePay()); + lqw.eq(bo.getAllowance() != null, GearSalaryRecords::getAllowance, bo.getAllowance()); + lqw.eq(bo.getSocialSecurity() != null, GearSalaryRecords::getSocialSecurity, bo.getSocialSecurity()); + lqw.eq(bo.getHousingFund() != null, GearSalaryRecords::getHousingFund, bo.getHousingFund()); + lqw.eq(bo.getIncomeTax() != null, GearSalaryRecords::getIncomeTax, bo.getIncomeTax()); + lqw.eq(bo.getGrossSalary() != null, GearSalaryRecords::getGrossSalary, bo.getGrossSalary()); + lqw.eq(bo.getNetSalary() != null, GearSalaryRecords::getNetSalary, bo.getNetSalary()); + lqw.eq(StringUtils.isNotBlank(bo.getPayStatus()), GearSalaryRecords::getPayStatus, bo.getPayStatus()); + return lqw; + } + + /** + * 新增工资发放记录 + */ + @Override + public Boolean insertByBo(GearSalaryRecordsBo bo) { + GearSalaryRecords add = BeanUtil.toBean(bo, GearSalaryRecords.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSalaryId(add.getSalaryId()); + } + return flag; + } + + /** + * 修改工资发放记录 + */ + @Override + public Boolean updateByBo(GearSalaryRecordsBo bo) { + GearSalaryRecords update = BeanUtil.toBean(bo, GearSalaryRecords.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(GearSalaryRecords entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除工资发放记录 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/gear-oa/src/main/resources/mapper/oa/GearSalaryRecordsMapper.xml b/gear-oa/src/main/resources/mapper/oa/GearSalaryRecordsMapper.xml new file mode 100644 index 0000000..3c11d0c --- /dev/null +++ b/gear-oa/src/main/resources/mapper/oa/GearSalaryRecordsMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +