diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaBindingItemDetailController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaBindingItemDetailController.java new file mode 100644 index 0000000..a0c6bb7 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaBindingItemDetailController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaBindingItemDetailVo; +import com.ruoyi.oa.domain.bo.OaBindingItemDetailBo; +import com.ruoyi.oa.service.IOaBindingItemDetailService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 绑定记录明细 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/bindingItemDetail") +public class OaBindingItemDetailController extends BaseController { + + private final IOaBindingItemDetailService iOaBindingItemDetailService; + + /** + * 查询绑定记录明细列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaBindingItemDetailBo bo, PageQuery pageQuery) { + return iOaBindingItemDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出绑定记录明细列表 + */ + + @Log(title = "绑定记录明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaBindingItemDetailBo bo, HttpServletResponse response) { + List list = iOaBindingItemDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "绑定记录明细", OaBindingItemDetailVo.class, response); + } + + /** + * 获取绑定记录明细详细信息 + * + * @param bindingItemId 主键 + */ + + @GetMapping("/{bindingItemId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long bindingItemId) { + return R.ok(iOaBindingItemDetailService.queryById(bindingItemId)); + } + + /** + * 新增绑定记录明细 + */ + + @Log(title = "绑定记录明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaBindingItemDetailBo bo) { + return toAjax(iOaBindingItemDetailService.insertByBo(bo)); + } + + /** + * 修改绑定记录明细 + */ + + @Log(title = "绑定记录明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaBindingItemDetailBo bo) { + return toAjax(iOaBindingItemDetailService.updateByBo(bo)); + } + + /** + * 删除绑定记录明细 + * + * @param bindingItemIds 主键串 + */ + @Log(title = "绑定记录明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{bindingItemIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] bindingItemIds) { + return toAjax(iOaBindingItemDetailService.deleteWithValidByIds(Arrays.asList(bindingItemIds), true)); + } + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeController.java new file mode 100644 index 0000000..e88aa95 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaEmployeeVo; +import com.ruoyi.oa.domain.bo.OaEmployeeBo; +import com.ruoyi.oa.service.IOaEmployeeService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 员工基础信息 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/employee") +public class OaEmployeeController extends BaseController { + + private final IOaEmployeeService iOaEmployeeService; + + /** + * 查询员工基础信息列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaEmployeeBo bo, PageQuery pageQuery) { + return iOaEmployeeService.queryPageList(bo, pageQuery); + } + + /** + * 导出员工基础信息列表 + */ + + @Log(title = "员工基础信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaEmployeeBo bo, HttpServletResponse response) { + List list = iOaEmployeeService.queryList(bo); + ExcelUtil.exportExcel(list, "员工基础信息", OaEmployeeVo.class, response); + } + + /** + * 获取员工基础信息详细信息 + * + * @param employeeId 主键 + */ + + @GetMapping("/{employeeId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long employeeId) { + return R.ok(iOaEmployeeService.queryById(employeeId)); + } + + /** + * 新增员工基础信息 + */ + + @Log(title = "员工基础信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaEmployeeBo bo) { + return toAjax(iOaEmployeeService.insertByBo(bo)); + } + + /** + * 修改员工基础信息 + */ + + @Log(title = "员工基础信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaEmployeeBo bo) { + return toAjax(iOaEmployeeService.updateByBo(bo)); + } + + /** + * 删除员工基础信息 + * + * @param employeeIds 主键串 + */ + + @Log(title = "员工基础信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{employeeIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] employeeIds) { + return toAjax(iOaEmployeeService.deleteWithValidByIds(Arrays.asList(employeeIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeTemplateBindingController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeTemplateBindingController.java new file mode 100644 index 0000000..4bdb173 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaEmployeeTemplateBindingController.java @@ -0,0 +1,136 @@ +package com.ruoyi.oa.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.ruoyi.oa.domain.vo.EmployeeSalaryRecordVo; +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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaEmployeeTemplateBindingVo; +import com.ruoyi.oa.domain.bo.OaEmployeeTemplateBindingBo; +import com.ruoyi.oa.service.IOaEmployeeTemplateBindingService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 员工模板绑定及月度发放记录 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/employeeTemplateBinding") +public class OaEmployeeTemplateBindingController extends BaseController { + + private final IOaEmployeeTemplateBindingService iOaEmployeeTemplateBindingService; + + /** + * 查询员工模板绑定及月度发放记录列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaEmployeeTemplateBindingBo bo, PageQuery pageQuery) { + return iOaEmployeeTemplateBindingService.queryPageList(bo, pageQuery); + } + + /** + * 导出员工模板绑定及月度发放记录列表 + */ + + @Log(title = "员工模板绑定及月度发放记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaEmployeeTemplateBindingBo bo, HttpServletResponse response) { + List list = iOaEmployeeTemplateBindingService.queryList(bo); + ExcelUtil.exportExcel(list, "员工模板绑定及月度发放记录", OaEmployeeTemplateBindingVo.class, response); + } + + /** + * 获取员工模板绑定及月度发放记录详细信息 + * + * @param bindingId 主键 + */ + + @GetMapping("/{bindingId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long bindingId) { + return R.ok(iOaEmployeeTemplateBindingService.queryById(bindingId)); + } + + /** + * 新增员工模板绑定及月度发放记录 + */ + + @Log(title = "员工模板绑定及月度发放记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaEmployeeTemplateBindingBo bo) { + return toAjax(iOaEmployeeTemplateBindingService.insertByBo(bo)); + } + + /** + * 修改员工模板绑定及月度发放记录 + */ + + @Log(title = "员工模板绑定及月度发放记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaEmployeeTemplateBindingBo bo) { + return toAjax(iOaEmployeeTemplateBindingService.updateByBo(bo)); + } + + /** + * 删除员工模板绑定及月度发放记录 + * + * @param bindingIds 主键串 + */ + + @Log(title = "员工模板绑定及月度发放记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{bindingIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] bindingIds) { + return toAjax(iOaEmployeeTemplateBindingService.deleteWithValidByIds(Arrays.asList(bindingIds), true)); + } + + // 6. 薪资批量计算/一键复制上月 + @PostMapping("/calculate") + public R calculateSalary(@RequestBody OaEmployeeTemplateBindingBo bo) { + if (CollectionUtils.isEmpty(bo.getEmployeeIds())) { + return R.fail("请选择员工"); + } + if (bo.getPayYear() == null || bo.getPayMonth() == null) { + return R.fail("请选择发薪年月"); + } + if (bo.getDefaultInsuranceTemplateId() == null || bo.getDefaultSalaryTemplateId() == null) { + return R.fail("请选择默认模板"); + } + return toAjax(iOaEmployeeTemplateBindingService.calculateSalary(bo.getEmployeeIds(), bo.getPayYear(), bo.getPayMonth(), bo.getDefaultInsuranceTemplateId(), bo.getDefaultSalaryTemplateId())); + } + // 7. 批量确认发放 + @PostMapping("/finalize") + public R finalizeSalary(@RequestBody List bindingIds) { + return toAjax(iOaEmployeeTemplateBindingService.finalizeSalary(bindingIds)); + } + // 8. 查询单员工历史发放记录 + @GetMapping("/history/{employeeId}") + public R> history(@PathVariable Long employeeId) { + return R.ok(iOaEmployeeTemplateBindingService.querySalaryHistory(employeeId)); + } + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateController.java new file mode 100644 index 0000000..708fa79 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateVo; +import com.ruoyi.oa.domain.bo.OaInsuranceTemplateBo; +import com.ruoyi.oa.service.IOaInsuranceTemplateService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 社保/公积金模板主 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/insuranceTemplate") +public class OaInsuranceTemplateController extends BaseController { + + private final IOaInsuranceTemplateService iOaInsuranceTemplateService; + + /** + * 查询社保/公积金模板主列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaInsuranceTemplateBo bo, PageQuery pageQuery) { + return iOaInsuranceTemplateService.queryPageList(bo, pageQuery); + } + + /** + * 导出社保/公积金模板主列表 + */ + + @Log(title = "社保/公积金模板主", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaInsuranceTemplateBo bo, HttpServletResponse response) { + List list = iOaInsuranceTemplateService.queryList(bo); + ExcelUtil.exportExcel(list, "社保/公积金模板主", OaInsuranceTemplateVo.class, response); + } + + /** + * 获取社保/公积金模板主详细信息 + * + * @param insuranceTemplateId 主键 + */ + + @GetMapping("/{insuranceTemplateId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long insuranceTemplateId) { + return R.ok(iOaInsuranceTemplateService.queryById(insuranceTemplateId)); + } + + /** + * 新增社保/公积金模板主 + */ + + @Log(title = "社保/公积金模板主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaInsuranceTemplateBo bo) { + return toAjax(iOaInsuranceTemplateService.insertByBo(bo)); + } + + /** + * 修改社保/公积金模板主 + */ + + @Log(title = "社保/公积金模板主", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaInsuranceTemplateBo bo) { + return toAjax(iOaInsuranceTemplateService.updateByBo(bo)); + } + + /** + * 删除社保/公积金模板主 + * + * @param insuranceTemplateIds 主键串 + */ + + @Log(title = "社保/公积金模板主", businessType = BusinessType.DELETE) + @DeleteMapping("/{insuranceTemplateIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] insuranceTemplateIds) { + return toAjax(iOaInsuranceTemplateService.deleteWithValidByIds(Arrays.asList(insuranceTemplateIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateDetailController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateDetailController.java new file mode 100644 index 0000000..492c10b --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaInsuranceTemplateDetailController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateDetailVo; +import com.ruoyi.oa.domain.bo.OaInsuranceTemplateDetailBo; +import com.ruoyi.oa.service.IOaInsuranceTemplateDetailService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 社保/公积金模板明细 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/insuranceTemplateDetail") +public class OaInsuranceTemplateDetailController extends BaseController { + + private final IOaInsuranceTemplateDetailService iOaInsuranceTemplateDetailService; + + /** + * 查询社保/公积金模板明细列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaInsuranceTemplateDetailBo bo, PageQuery pageQuery) { + return iOaInsuranceTemplateDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出社保/公积金模板明细列表 + */ + + @Log(title = "社保/公积金模板明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaInsuranceTemplateDetailBo bo, HttpServletResponse response) { + List list = iOaInsuranceTemplateDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "社保/公积金模板明细", OaInsuranceTemplateDetailVo.class, response); + } + + /** + * 获取社保/公积金模板明细详细信息 + * + * @param insuranceDetailId 主键 + */ + + @GetMapping("/{insuranceDetailId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long insuranceDetailId) { + return R.ok(iOaInsuranceTemplateDetailService.queryById(insuranceDetailId)); + } + + /** + * 新增社保/公积金模板明细 + */ + + @Log(title = "社保/公积金模板明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaInsuranceTemplateDetailBo bo) { + return toAjax(iOaInsuranceTemplateDetailService.insertByBo(bo)); + } + + /** + * 修改社保/公积金模板明细 + */ + + @Log(title = "社保/公积金模板明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaInsuranceTemplateDetailBo bo) { + return toAjax(iOaInsuranceTemplateDetailService.updateByBo(bo)); + } + + /** + * 删除社保/公积金模板明细 + * + * @param insuranceDetailIds 主键串 + */ + + @Log(title = "社保/公积金模板明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{insuranceDetailIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] insuranceDetailIds) { + return toAjax(iOaInsuranceTemplateDetailService.deleteWithValidByIds(Arrays.asList(insuranceDetailIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateController.java new file mode 100644 index 0000000..5bdca05 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateVo; +import com.ruoyi.oa.domain.bo.OaSalaryTemplateBo; +import com.ruoyi.oa.service.IOaSalaryTemplateService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 薪资模板主 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/salaryTemplate") +public class OaSalaryTemplateController extends BaseController { + + private final IOaSalaryTemplateService iOaSalaryTemplateService; + + /** + * 查询薪资模板主列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaSalaryTemplateBo bo, PageQuery pageQuery) { + return iOaSalaryTemplateService.queryPageList(bo, pageQuery); + } + + /** + * 导出薪资模板主列表 + */ + + @Log(title = "薪资模板主", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaSalaryTemplateBo bo, HttpServletResponse response) { + List list = iOaSalaryTemplateService.queryList(bo); + ExcelUtil.exportExcel(list, "薪资模板主", OaSalaryTemplateVo.class, response); + } + + /** + * 获取薪资模板主详细信息 + * + * @param salaryTemplateId 主键 + */ + + @GetMapping("/{salaryTemplateId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long salaryTemplateId) { + return R.ok(iOaSalaryTemplateService.queryById(salaryTemplateId)); + } + + /** + * 新增薪资模板主 + */ + + @Log(title = "薪资模板主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaSalaryTemplateBo bo) { + return toAjax(iOaSalaryTemplateService.insertByBo(bo)); + } + + /** + * 修改薪资模板主 + */ + + @Log(title = "薪资模板主", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaSalaryTemplateBo bo) { + return toAjax(iOaSalaryTemplateService.updateByBo(bo)); + } + + /** + * 删除薪资模板主 + * + * @param salaryTemplateIds 主键串 + */ + + @Log(title = "薪资模板主", businessType = BusinessType.DELETE) + @DeleteMapping("/{salaryTemplateIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] salaryTemplateIds) { + return toAjax(iOaSalaryTemplateService.deleteWithValidByIds(Arrays.asList(salaryTemplateIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateDetailController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateDetailController.java new file mode 100644 index 0000000..c9148f8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryTemplateDetailController.java @@ -0,0 +1,108 @@ +package com.ruoyi.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.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateDetailVo; +import com.ruoyi.oa.domain.bo.OaSalaryTemplateDetailBo; +import com.ruoyi.oa.service.IOaSalaryTemplateDetailService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 薪资模板明细 + * + * @author ruoyi + * @date 2025-06-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/salaryTemplateDetail") +public class OaSalaryTemplateDetailController extends BaseController { + + private final IOaSalaryTemplateDetailService iOaSalaryTemplateDetailService; + + /** + * 查询薪资模板明细列表 + */ + + @GetMapping("/list") + public TableDataInfo list(OaSalaryTemplateDetailBo bo, PageQuery pageQuery) { + return iOaSalaryTemplateDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出薪资模板明细列表 + */ + + @Log(title = "薪资模板明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaSalaryTemplateDetailBo bo, HttpServletResponse response) { + List list = iOaSalaryTemplateDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "薪资模板明细", OaSalaryTemplateDetailVo.class, response); + } + + /** + * 获取薪资模板明细详细信息 + * + * @param salaryDetailId 主键 + */ + + @GetMapping("/{salaryDetailId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long salaryDetailId) { + return R.ok(iOaSalaryTemplateDetailService.queryById(salaryDetailId)); + } + + /** + * 新增薪资模板明细 + */ + + @Log(title = "薪资模板明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaSalaryTemplateDetailBo bo) { + return toAjax(iOaSalaryTemplateDetailService.insertByBo(bo)); + } + + /** + * 修改薪资模板明细 + */ + + @Log(title = "薪资模板明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaSalaryTemplateDetailBo bo) { + return toAjax(iOaSalaryTemplateDetailService.updateByBo(bo)); + } + + /** + * 删除薪资模板明细 + * + * @param salaryDetailIds 主键串 + */ + + @Log(title = "薪资模板明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{salaryDetailIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] salaryDetailIds) { + return toAjax(iOaSalaryTemplateDetailService.deleteWithValidByIds(Arrays.asList(salaryDetailIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaBindingItemDetail.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaBindingItemDetail.java new file mode 100644 index 0000000..264c119 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaBindingItemDetail.java @@ -0,0 +1,57 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 绑定记录明细对象 oa_binding_item_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_binding_item_detail") +public class OaBindingItemDetail extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 明细ID + */ + @TableId(value = "binding_item_id") + private Long bindingItemId; + /** + * 绑定记录ID → oa_employee_template_binding.binding_id + */ + private Long bindingId; + /** + * 模板类型 + */ + private String templateType; + /** + * 明细ID → oa_insurance_template_detail.insurance_detail_id 或 oa_salary_template_detail.salary_detail_id + */ + private Long itemDetailId; + /** + * 实际缴纳/支付金额 + */ + private BigDecimal paidAmount; + /** + * 删除标志 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployee.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployee.java new file mode 100644 index 0000000..4cec3c3 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployee.java @@ -0,0 +1,48 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 员工基础信息对象 oa_employee + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_employee") +public class OaEmployee extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 员工ID + */ + @TableId(value = "employee_id") + private Long employeeId; + /** + * 姓名 + */ + private String employeeName; + /** + * 公司 + */ + private String company; + /** + * 删除标志 0=未删,1=已删 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployeeTemplateBinding.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployeeTemplateBinding.java new file mode 100644 index 0000000..5af79e9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaEmployeeTemplateBinding.java @@ -0,0 +1,73 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 员工模板绑定及月度发放记录对象 oa_employee_template_binding + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_employee_template_binding") +public class OaEmployeeTemplateBinding extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 记录ID + */ + @TableId(value = "binding_id") + private Long bindingId; + /** + * 员工ID → oa_employee.employee_id + */ + private Long employeeId; + /** + * 保险模板ID → oa_insurance_template.insurance_template_id + */ + private Long insuranceTemplateId; + /** + * 薪资模板ID → oa_salary_template.salary_template_id + */ + private Long salaryTemplateId; + /** + * 发放年度 + */ + private Long payYear; + /** + * 发放月份 + */ + private Long payMonth; + /** + * 实发工资 + */ + private BigDecimal netSalary; + /** + * 单位总支出 + */ + private BigDecimal totalCompanyCost; + /** + * 状态(已发/待发) + */ + private String status; + /** + * 删除标志 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplate.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplate.java new file mode 100644 index 0000000..75ecddf --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplate.java @@ -0,0 +1,44 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 社保/公积金模板主对象 oa_insurance_template + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_insurance_template") +public class OaInsuranceTemplate extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 模板ID + */ + @TableId(value = "insurance_template_id") + private Long insuranceTemplateId; + /** + * 模板名称 + */ + private String templateName; + /** + * 删除标志 0=未删,1=已删 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplateDetail.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplateDetail.java new file mode 100644 index 0000000..54fc93d --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaInsuranceTemplateDetail.java @@ -0,0 +1,53 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 社保/公积金模板明细对象 oa_insurance_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_insurance_template_detail") +public class OaInsuranceTemplateDetail extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 明细ID + */ + @TableId(value = "insurance_detail_id") + private Long insuranceDetailId; + /** + * 模板ID → oa_insurance_template.insurance_template_id + */ + private Long insuranceTemplateId; + /** + * 险种代码,如 pension、unemployment… + */ + private String insuranceType; + /** + * 金额或比例 + */ + private BigDecimal amount; + /** + * 删除标志 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplate.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplate.java new file mode 100644 index 0000000..745b758 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplate.java @@ -0,0 +1,44 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪资模板主对象 oa_salary_template + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_salary_template") +public class OaSalaryTemplate extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 模板ID + */ + @TableId(value = "salary_template_id") + private Long salaryTemplateId; + /** + * 模板名称 + */ + private String templateName; + /** + * 删除标志 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplateDetail.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplateDetail.java new file mode 100644 index 0000000..8a37ed9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryTemplateDetail.java @@ -0,0 +1,57 @@ +package com.ruoyi.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 com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪资模板明细对象 oa_salary_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_salary_template_detail") +public class OaSalaryTemplateDetail extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 明细ID + */ + @TableId(value = "salary_detail_id") + private Long salaryDetailId; + /** + * 模板ID → oa_salary_template.salary_template_id + */ + private Long salaryTemplateId; + /** + * 项目代码,如 basic_salary… + */ + private String salaryItem; + /** + * 固定金额,仅针对金额项 + */ + private BigDecimal amount; + /** + * 费率,仅针对费率项 + */ + private BigDecimal rate; + /** + * 删除标志 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaBindingItemDetailBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaBindingItemDetailBo.java new file mode 100644 index 0000000..03b19ee --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaBindingItemDetailBo.java @@ -0,0 +1,56 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 绑定记录明细业务对象 oa_binding_item_detail + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaBindingItemDetailBo extends BaseEntity { + + /** + * 明细ID + */ + private Long bindingItemId; + + /** + * 绑定记录ID → oa_employee_template_binding.binding_id + */ + private Long bindingId; + + /** + * 模板类型 + */ + private String templateType; + + /** + * 明细ID → oa_insurance_template_detail.insurance_detail_id 或 oa_salary_template_detail.salary_detail_id + */ + private Long itemDetailId; + + /** + * 实际缴纳/支付金额 + */ + private BigDecimal paidAmount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeBo.java new file mode 100644 index 0000000..c04ebe3 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeBo.java @@ -0,0 +1,45 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 员工基础信息业务对象 oa_employee + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaEmployeeBo extends BaseEntity { + + /** + * 员工ID + */ + private Long employeeId; + + /** + * 姓名 + */ + private String employeeName; + + /** + * 公司 + */ + private String company; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeTemplateBindingBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeTemplateBindingBo.java new file mode 100644 index 0000000..1c3da87 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaEmployeeTemplateBindingBo.java @@ -0,0 +1,82 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import liquibase.pro.packaged.L; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import java.util.List; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 员工模板绑定及月度发放记录业务对象 oa_employee_template_binding + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaEmployeeTemplateBindingBo extends BaseEntity { + + /** + * 记录ID + */ + private Long bindingId; + + /** + * 员工ID → oa_employee.employee_id + */ + private Long employeeId; + private List employeeIds; + + /** + * 保险模板ID → oa_insurance_template.insurance_template_id + */ + private Long insuranceTemplateId; + + /** + * 薪资模板ID → oa_salary_template.salary_template_id + */ + private Long salaryTemplateId; + + /** + * 发放年度 + */ + private Long payYear; + + /** + * 发放月份 + */ + private Long payMonth; + + /** + * 实发工资 + */ + private BigDecimal netSalary; + + /** + * 单位总支出 + */ + private BigDecimal totalCompanyCost; + + /** + * 状态(已发/待发) + */ + private String status; + + /** + * 备注 + */ + private String remark; + private Long defaultInsuranceTemplateId; // 新增:默认社保模板ID + private Long defaultSalaryTemplateId; // 新增:默认薪资模板ID + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateBo.java new file mode 100644 index 0000000..afd9651 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateBo.java @@ -0,0 +1,40 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 社保/公积金模板主业务对象 oa_insurance_template + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaInsuranceTemplateBo extends BaseEntity { + + /** + * 模板ID + */ + private Long insuranceTemplateId; + + /** + * 模板名称 + */ + private String templateName; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateDetailBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateDetailBo.java new file mode 100644 index 0000000..2abfbd4 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaInsuranceTemplateDetailBo.java @@ -0,0 +1,51 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 社保/公积金模板明细业务对象 oa_insurance_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaInsuranceTemplateDetailBo extends BaseEntity { + + /** + * 明细ID + */ + private Long insuranceDetailId; + + /** + * 模板ID → oa_insurance_template.insurance_template_id + */ + private Long insuranceTemplateId; + + /** + * 险种代码,如 pension、unemployment… + */ + private String insuranceType; + + /** + * 金额或比例 + */ + private BigDecimal amount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateBo.java new file mode 100644 index 0000000..aa18454 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateBo.java @@ -0,0 +1,40 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪资模板主业务对象 oa_salary_template + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaSalaryTemplateBo extends BaseEntity { + + /** + * 模板ID + */ + private Long salaryTemplateId; + + /** + * 模板名称 + */ + private String templateName; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateDetailBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateDetailBo.java new file mode 100644 index 0000000..f1d28c6 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryTemplateDetailBo.java @@ -0,0 +1,56 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪资模板明细业务对象 oa_salary_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaSalaryTemplateDetailBo extends BaseEntity { + + /** + * 明细ID + */ + private Long salaryDetailId; + + /** + * 模板ID → oa_salary_template.salary_template_id + */ + private Long salaryTemplateId; + + /** + * 项目代码,如 basic_salary… + */ + private String salaryItem; + + /** + * 固定金额,仅针对金额项 + */ + private BigDecimal amount; + + /** + * 费率,仅针对费率项 + */ + private BigDecimal rate; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeSalaryRecordVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeSalaryRecordVo.java new file mode 100644 index 0000000..a73985c --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/EmployeeSalaryRecordVo.java @@ -0,0 +1,20 @@ +package com.ruoyi.oa.domain.vo; + +import lombok.Data; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class EmployeeSalaryRecordVo { + private Long bindingId; + private Long employeeId; + private String employeeName; + private String company; + private Integer payYear; + private Integer payMonth; + private String status; + private BigDecimal netSalary; + private BigDecimal totalCompanyCost; + private List salaryDetails; // 工资明细 + private List insuranceDetails; // 社保明细 +} \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaBindingItemDetailVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaBindingItemDetailVo.java new file mode 100644 index 0000000..0a87e49 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaBindingItemDetailVo.java @@ -0,0 +1,62 @@ +package com.ruoyi.oa.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 绑定记录明细视图对象 oa_binding_item_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaBindingItemDetailVo { + + private static final long serialVersionUID = 1L; + + /** + * 明细ID + */ + @ExcelProperty(value = "明细ID") + private Long bindingItemId; + private String itemName; // 项目名称 + /** + * 绑定记录ID → oa_employee_template_binding.binding_id + */ + @ExcelProperty(value = "绑定记录ID → oa_employee_template_binding.binding_id") + private Long bindingId; + + /** + * 模板类型 + */ + @ExcelProperty(value = "模板类型") + private String templateType; + + /** + * 明细ID → oa_insurance_template_detail.insurance_detail_id 或 oa_salary_template_detail.salary_detail_id + */ + @ExcelProperty(value = "明细ID → oa_insurance_template_detail.insurance_detail_id 或 oa_salary_template_detail.salary_detail_id") + private Long itemDetailId; + + /** + * 实际缴纳/支付金额 + */ + @ExcelProperty(value = "实际缴纳/支付金额") + private BigDecimal paidAmount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeTemplateBindingVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeTemplateBindingVo.java new file mode 100644 index 0000000..f4e8ca8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeTemplateBindingVo.java @@ -0,0 +1,88 @@ +package com.ruoyi.oa.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; +import java.util.List; + + +/** + * 员工模板绑定及月度发放记录视图对象 oa_employee_template_binding + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaEmployeeTemplateBindingVo { + + private static final long serialVersionUID = 1L; + + /** + * 记录ID + */ + @ExcelProperty(value = "记录ID") + private Long bindingId; + + /** + * 员工ID → oa_employee.employee_id + */ + @ExcelProperty(value = "员工ID → oa_employee.employee_id") + private Long employeeId; + + /** + * 保险模板ID → oa_insurance_template.insurance_template_id + */ + @ExcelProperty(value = "保险模板ID → oa_insurance_template.insurance_template_id") + private Long insuranceTemplateId; + + /** + * 薪资模板ID → oa_salary_template.salary_template_id + */ + @ExcelProperty(value = "薪资模板ID → oa_salary_template.salary_template_id") + private Long salaryTemplateId; + + /** + * 发放年度 + */ + @ExcelProperty(value = "发放年度") + private Long payYear; + + /** + * 发放月份 + */ + @ExcelProperty(value = "发放月份") + private Long payMonth; + + /** + * 实发工资 + */ + @ExcelProperty(value = "实发工资") + private BigDecimal netSalary; + + /** + * 单位总支出 + */ + @ExcelProperty(value = "单位总支出") + private BigDecimal totalCompanyCost; + + /** + * 状态(已发/待发) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "已=发/待发") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeVo.java new file mode 100644 index 0000000..3037e58 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaEmployeeVo.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 员工基础信息视图对象 oa_employee + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaEmployeeVo { + + private static final long serialVersionUID = 1L; + + /** + * 员工ID + */ + @ExcelProperty(value = "员工ID") + private Long employeeId; + + /** + * 姓名 + */ + @ExcelProperty(value = "姓名") + private String employeeName; + + /** + * 公司 + */ + @ExcelProperty(value = "公司") + private String company; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateDetailVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateDetailVo.java new file mode 100644 index 0000000..ea1b3fb --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateDetailVo.java @@ -0,0 +1,56 @@ +package com.ruoyi.oa.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 社保/公积金模板明细视图对象 oa_insurance_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaInsuranceTemplateDetailVo { + + private static final long serialVersionUID = 1L; + + /** + * 明细ID + */ + @ExcelProperty(value = "明细ID") + private Long insuranceDetailId; + + /** + * 模板ID → oa_insurance_template.insurance_template_id + */ + @ExcelProperty(value = "模板ID → oa_insurance_template.insurance_template_id") + private Long insuranceTemplateId; + + /** + * 险种代码,如 pension、unemployment… + */ + @ExcelProperty(value = "险种代码,如 pension、unemployment…") + private String insuranceType; + + /** + * 金额或比例 + */ + @ExcelProperty(value = "金额或比例") + private BigDecimal amount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateVo.java new file mode 100644 index 0000000..ae64597 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaInsuranceTemplateVo.java @@ -0,0 +1,43 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 社保/公积金模板主视图对象 oa_insurance_template + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaInsuranceTemplateVo { + + private static final long serialVersionUID = 1L; + + /** + * 模板ID + */ + @ExcelProperty(value = "模板ID") + private Long insuranceTemplateId; + + /** + * 模板名称 + */ + @ExcelProperty(value = "模板名称") + private String templateName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateDetailVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateDetailVo.java new file mode 100644 index 0000000..d9416f4 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateDetailVo.java @@ -0,0 +1,62 @@ +package com.ruoyi.oa.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 薪资模板明细视图对象 oa_salary_template_detail + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaSalaryTemplateDetailVo { + + private static final long serialVersionUID = 1L; + + /** + * 明细ID + */ + @ExcelProperty(value = "明细ID") + private Long salaryDetailId; + + /** + * 模板ID → oa_salary_template.salary_template_id + */ + @ExcelProperty(value = "模板ID → oa_salary_template.salary_template_id") + private Long salaryTemplateId; + + /** + * 项目代码,如 basic_salary… + */ + @ExcelProperty(value = "项目代码,如 basic_salary…") + private String salaryItem; + + /** + * 固定金额,仅针对金额项 + */ + @ExcelProperty(value = "固定金额,仅针对金额项") + private BigDecimal amount; + + /** + * 费率,仅针对费率项 + */ + @ExcelProperty(value = "费率,仅针对费率项") + private BigDecimal rate; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateVo.java new file mode 100644 index 0000000..9cfc332 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryTemplateVo.java @@ -0,0 +1,43 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 薪资模板主视图对象 oa_salary_template + * + * @author ruoyi + * @date 2025-06-23 + */ +@Data +@ExcelIgnoreUnannotated +public class OaSalaryTemplateVo { + + private static final long serialVersionUID = 1L; + + /** + * 模板ID + */ + @ExcelProperty(value = "模板ID") + private Long salaryTemplateId; + + /** + * 模板名称 + */ + @ExcelProperty(value = "模板名称") + private String templateName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaBindingItemDetailMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaBindingItemDetailMapper.java new file mode 100644 index 0000000..2d4c407 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaBindingItemDetailMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaBindingItemDetail; +import com.ruoyi.oa.domain.vo.OaBindingItemDetailVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 绑定记录明细Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaBindingItemDetailMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeMapper.java new file mode 100644 index 0000000..ad15aa8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeMapper.java @@ -0,0 +1,17 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaEmployee; +import com.ruoyi.oa.domain.vo.OaEmployeeVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.springframework.data.repository.query.Param; + +/** + * 员工基础信息Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaEmployeeMapper extends BaseMapperPlus { + Long getDefaultInsuranceTemplateId(@Param("employeeId") Long employeeId); + Long getDefaultSalaryTemplateId(@Param("employeeId") Long employeeId); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeTemplateBindingMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeTemplateBindingMapper.java new file mode 100644 index 0000000..012b79c --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaEmployeeTemplateBindingMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaEmployeeTemplateBinding; +import com.ruoyi.oa.domain.vo.OaEmployeeTemplateBindingVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.springframework.data.repository.query.Param; + +/** + * 员工模板绑定及月度发放记录Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaEmployeeTemplateBindingMapper extends BaseMapperPlus { + OaEmployeeTemplateBinding findByEmployeeAndMonth(@Param("employeeId") Long employeeId, + @Param("payYear") Long payYear, + @Param("payMonth") Long payMonth); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateDetailMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateDetailMapper.java new file mode 100644 index 0000000..2ca2459 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateDetailMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaInsuranceTemplateDetail; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateDetailVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * 社保/公积金模板明细Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaInsuranceTemplateDetailMapper extends BaseMapperPlus { + List findByTemplateId(@Param("templateId") Long templateId); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateMapper.java new file mode 100644 index 0000000..77bf8fd --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaInsuranceTemplateMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaInsuranceTemplate; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 社保/公积金模板主Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaInsuranceTemplateMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateDetailMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateDetailMapper.java new file mode 100644 index 0000000..a317545 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateDetailMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaSalaryTemplateDetail; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateDetailVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * 薪资模板明细Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaSalaryTemplateDetailMapper extends BaseMapperPlus { + List findByTemplateId(@Param("templateId") Long templateId); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateMapper.java new file mode 100644 index 0000000..a1bf979 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryTemplateMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaSalaryTemplate; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 薪资模板主Mapper接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface OaSalaryTemplateMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaBindingItemDetailService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaBindingItemDetailService.java new file mode 100644 index 0000000..cce8dd5 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaBindingItemDetailService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaBindingItemDetail; +import com.ruoyi.oa.domain.vo.OaBindingItemDetailVo; +import com.ruoyi.oa.domain.bo.OaBindingItemDetailBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 绑定记录明细Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaBindingItemDetailService { + + /** + * 查询绑定记录明细 + */ + OaBindingItemDetailVo queryById(Long bindingItemId); + + /** + * 查询绑定记录明细列表 + */ + TableDataInfo queryPageList(OaBindingItemDetailBo bo, PageQuery pageQuery); + + /** + * 查询绑定记录明细列表 + */ + List queryList(OaBindingItemDetailBo bo); + + /** + * 新增绑定记录明细 + */ + Boolean insertByBo(OaBindingItemDetailBo bo); + + /** + * 修改绑定记录明细 + */ + Boolean updateByBo(OaBindingItemDetailBo bo); + + /** + * 校验并批量删除绑定记录明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeService.java new file mode 100644 index 0000000..3cdb972 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaEmployee; +import com.ruoyi.oa.domain.vo.OaEmployeeVo; +import com.ruoyi.oa.domain.bo.OaEmployeeBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 员工基础信息Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaEmployeeService { + + /** + * 查询员工基础信息 + */ + OaEmployeeVo queryById(Long employeeId); + + /** + * 查询员工基础信息列表 + */ + TableDataInfo queryPageList(OaEmployeeBo bo, PageQuery pageQuery); + + /** + * 查询员工基础信息列表 + */ + List queryList(OaEmployeeBo bo); + + /** + * 新增员工基础信息 + */ + Boolean insertByBo(OaEmployeeBo bo); + + /** + * 修改员工基础信息 + */ + Boolean updateByBo(OaEmployeeBo bo); + + /** + * 校验并批量删除员工基础信息信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeTemplateBindingService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeTemplateBindingService.java new file mode 100644 index 0000000..2a18c9c --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaEmployeeTemplateBindingService.java @@ -0,0 +1,54 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaEmployeeTemplateBinding; +import com.ruoyi.oa.domain.vo.EmployeeSalaryRecordVo; +import com.ruoyi.oa.domain.vo.OaEmployeeTemplateBindingVo; +import com.ruoyi.oa.domain.bo.OaEmployeeTemplateBindingBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 员工模板绑定及月度发放记录Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaEmployeeTemplateBindingService { + + /** + * 查询员工模板绑定及月度发放记录 + */ + OaEmployeeTemplateBindingVo queryById(Long bindingId); + + /** + * 查询员工模板绑定及月度发放记录列表 + */ + TableDataInfo queryPageList(OaEmployeeTemplateBindingBo bo, PageQuery pageQuery); + + /** + * 查询员工模板绑定及月度发放记录列表 + */ + List queryList(OaEmployeeTemplateBindingBo bo); + + /** + * 新增员工模板绑定及月度发放记录 + */ + Boolean insertByBo(OaEmployeeTemplateBindingBo bo); + + /** + * 修改员工模板绑定及月度发放记录 + */ + Boolean updateByBo(OaEmployeeTemplateBindingBo bo); + + /** + * 校验并批量删除员工模板绑定及月度发放记录信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + Boolean calculateSalary(List employeeIds, Long payYear, Long payMonth,Long defaultInsuranceTemplateId, Long defaultSalaryTemplateId); + Boolean finalizeSalary(List bindingIds); + List querySalaryHistory(Long employeeId); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateDetailService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateDetailService.java new file mode 100644 index 0000000..37f683b --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateDetailService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaInsuranceTemplateDetail; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateDetailVo; +import com.ruoyi.oa.domain.bo.OaInsuranceTemplateDetailBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 社保/公积金模板明细Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaInsuranceTemplateDetailService { + + /** + * 查询社保/公积金模板明细 + */ + OaInsuranceTemplateDetailVo queryById(Long insuranceDetailId); + + /** + * 查询社保/公积金模板明细列表 + */ + TableDataInfo queryPageList(OaInsuranceTemplateDetailBo bo, PageQuery pageQuery); + + /** + * 查询社保/公积金模板明细列表 + */ + List queryList(OaInsuranceTemplateDetailBo bo); + + /** + * 新增社保/公积金模板明细 + */ + Boolean insertByBo(OaInsuranceTemplateDetailBo bo); + + /** + * 修改社保/公积金模板明细 + */ + Boolean updateByBo(OaInsuranceTemplateDetailBo bo); + + /** + * 校验并批量删除社保/公积金模板明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateService.java new file mode 100644 index 0000000..58fad2d --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaInsuranceTemplateService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaInsuranceTemplate; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateVo; +import com.ruoyi.oa.domain.bo.OaInsuranceTemplateBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 社保/公积金模板主Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaInsuranceTemplateService { + + /** + * 查询社保/公积金模板主 + */ + OaInsuranceTemplateVo queryById(Long insuranceTemplateId); + + /** + * 查询社保/公积金模板主列表 + */ + TableDataInfo queryPageList(OaInsuranceTemplateBo bo, PageQuery pageQuery); + + /** + * 查询社保/公积金模板主列表 + */ + List queryList(OaInsuranceTemplateBo bo); + + /** + * 新增社保/公积金模板主 + */ + Boolean insertByBo(OaInsuranceTemplateBo bo); + + /** + * 修改社保/公积金模板主 + */ + Boolean updateByBo(OaInsuranceTemplateBo bo); + + /** + * 校验并批量删除社保/公积金模板主信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateDetailService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateDetailService.java new file mode 100644 index 0000000..637eac9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateDetailService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaSalaryTemplateDetail; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateDetailVo; +import com.ruoyi.oa.domain.bo.OaSalaryTemplateDetailBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资模板明细Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaSalaryTemplateDetailService { + + /** + * 查询薪资模板明细 + */ + OaSalaryTemplateDetailVo queryById(Long salaryDetailId); + + /** + * 查询薪资模板明细列表 + */ + TableDataInfo queryPageList(OaSalaryTemplateDetailBo bo, PageQuery pageQuery); + + /** + * 查询薪资模板明细列表 + */ + List queryList(OaSalaryTemplateDetailBo bo); + + /** + * 新增薪资模板明细 + */ + Boolean insertByBo(OaSalaryTemplateDetailBo bo); + + /** + * 修改薪资模板明细 + */ + Boolean updateByBo(OaSalaryTemplateDetailBo bo); + + /** + * 校验并批量删除薪资模板明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateService.java new file mode 100644 index 0000000..b2f8404 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryTemplateService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaSalaryTemplate; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateVo; +import com.ruoyi.oa.domain.bo.OaSalaryTemplateBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资模板主Service接口 + * + * @author ruoyi + * @date 2025-06-23 + */ +public interface IOaSalaryTemplateService { + + /** + * 查询薪资模板主 + */ + OaSalaryTemplateVo queryById(Long salaryTemplateId); + + /** + * 查询薪资模板主列表 + */ + TableDataInfo queryPageList(OaSalaryTemplateBo bo, PageQuery pageQuery); + + /** + * 查询薪资模板主列表 + */ + List queryList(OaSalaryTemplateBo bo); + + /** + * 新增薪资模板主 + */ + Boolean insertByBo(OaSalaryTemplateBo bo); + + /** + * 修改薪资模板主 + */ + Boolean updateByBo(OaSalaryTemplateBo bo); + + /** + * 校验并批量删除薪资模板主信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaBindingItemDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaBindingItemDetailServiceImpl.java new file mode 100644 index 0000000..6663f69 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaBindingItemDetailServiceImpl.java @@ -0,0 +1,112 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaBindingItemDetailBo; +import com.ruoyi.oa.domain.vo.OaBindingItemDetailVo; +import com.ruoyi.oa.domain.OaBindingItemDetail; +import com.ruoyi.oa.mapper.OaBindingItemDetailMapper; +import com.ruoyi.oa.service.IOaBindingItemDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 绑定记录明细Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaBindingItemDetailServiceImpl implements IOaBindingItemDetailService { + + private final OaBindingItemDetailMapper baseMapper; + + /** + * 查询绑定记录明细 + */ + @Override + public OaBindingItemDetailVo queryById(Long bindingItemId){ + return baseMapper.selectVoById(bindingItemId); + } + + /** + * 查询绑定记录明细列表 + */ + @Override + public TableDataInfo queryPageList(OaBindingItemDetailBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询绑定记录明细列表 + */ + @Override + public List queryList(OaBindingItemDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaBindingItemDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getBindingId() != null, OaBindingItemDetail::getBindingId, bo.getBindingId()); + lqw.eq(StringUtils.isNotBlank(bo.getTemplateType()), OaBindingItemDetail::getTemplateType, bo.getTemplateType()); + lqw.eq(bo.getItemDetailId() != null, OaBindingItemDetail::getItemDetailId, bo.getItemDetailId()); + lqw.eq(bo.getPaidAmount() != null, OaBindingItemDetail::getPaidAmount, bo.getPaidAmount()); + return lqw; + } + + /** + * 新增绑定记录明细 + */ + @Override + public Boolean insertByBo(OaBindingItemDetailBo bo) { + OaBindingItemDetail add = BeanUtil.toBean(bo, OaBindingItemDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setBindingItemId(add.getBindingItemId()); + } + return flag; + } + + /** + * 修改绑定记录明细 + */ + @Override + public Boolean updateByBo(OaBindingItemDetailBo bo) { + OaBindingItemDetail update = BeanUtil.toBean(bo, OaBindingItemDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaBindingItemDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除绑定记录明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeServiceImpl.java new file mode 100644 index 0000000..74c8da3 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeServiceImpl.java @@ -0,0 +1,110 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaEmployeeBo; +import com.ruoyi.oa.domain.vo.OaEmployeeVo; +import com.ruoyi.oa.domain.OaEmployee; +import com.ruoyi.oa.mapper.OaEmployeeMapper; +import com.ruoyi.oa.service.IOaEmployeeService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 员工基础信息Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaEmployeeServiceImpl implements IOaEmployeeService { + + private final OaEmployeeMapper baseMapper; + + /** + * 查询员工基础信息 + */ + @Override + public OaEmployeeVo queryById(Long employeeId){ + return baseMapper.selectVoById(employeeId); + } + + /** + * 查询员工基础信息列表 + */ + @Override + public TableDataInfo queryPageList(OaEmployeeBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询员工基础信息列表 + */ + @Override + public List queryList(OaEmployeeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaEmployeeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getEmployeeName()), OaEmployee::getEmployeeName, bo.getEmployeeName()); + lqw.eq(StringUtils.isNotBlank(bo.getCompany()), OaEmployee::getCompany, bo.getCompany()); + return lqw; + } + + /** + * 新增员工基础信息 + */ + @Override + public Boolean insertByBo(OaEmployeeBo bo) { + OaEmployee add = BeanUtil.toBean(bo, OaEmployee.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setEmployeeId(add.getEmployeeId()); + } + return flag; + } + + /** + * 修改员工基础信息 + */ + @Override + public Boolean updateByBo(OaEmployeeBo bo) { + OaEmployee update = BeanUtil.toBean(bo, OaEmployee.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaEmployee entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除员工基础信息 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeTemplateBindingServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeTemplateBindingServiceImpl.java new file mode 100644 index 0000000..37b8cc8 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaEmployeeTemplateBindingServiceImpl.java @@ -0,0 +1,274 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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 com.ruoyi.oa.domain.*; +import com.ruoyi.oa.domain.vo.EmployeeSalaryRecordVo; +import com.ruoyi.oa.domain.vo.OaBindingItemDetailVo; +import com.ruoyi.oa.mapper.*; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.oa.domain.bo.OaEmployeeTemplateBindingBo; +import com.ruoyi.oa.domain.vo.OaEmployeeTemplateBindingVo; +import com.ruoyi.oa.service.IOaEmployeeTemplateBindingService; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 员工模板绑定及月度发放记录Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaEmployeeTemplateBindingServiceImpl implements IOaEmployeeTemplateBindingService { + @Autowired + private final OaEmployeeTemplateBindingMapper baseMapper; + @Autowired + private final OaBindingItemDetailMapper bindingItemDetailMapper; + @Autowired + private final OaEmployeeMapper employeeMapper; + @Autowired + private final OaSalaryTemplateDetailMapper salaryDetailMapper; + @Autowired + private final OaInsuranceTemplateDetailMapper insuranceDetailMapper; + + + /** + * 查询员工模板绑定及月度发放记录 + */ + @Override + public OaEmployeeTemplateBindingVo queryById(Long bindingId){ + return baseMapper.selectVoById(bindingId); + } + + /** + * 查询员工模板绑定及月度发放记录列表 + */ + @Override + public TableDataInfo queryPageList(OaEmployeeTemplateBindingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询员工模板绑定及月度发放记录列表 + */ + @Override + public List queryList(OaEmployeeTemplateBindingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaEmployeeTemplateBindingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getEmployeeId() != null, OaEmployeeTemplateBinding::getEmployeeId, bo.getEmployeeId()); + lqw.eq(bo.getInsuranceTemplateId() != null, OaEmployeeTemplateBinding::getInsuranceTemplateId, bo.getInsuranceTemplateId()); + lqw.eq(bo.getSalaryTemplateId() != null, OaEmployeeTemplateBinding::getSalaryTemplateId, bo.getSalaryTemplateId()); + lqw.eq(bo.getPayYear() != null, OaEmployeeTemplateBinding::getPayYear, bo.getPayYear()); + lqw.eq(bo.getPayMonth() != null, OaEmployeeTemplateBinding::getPayMonth, bo.getPayMonth()); + lqw.eq(bo.getNetSalary() != null, OaEmployeeTemplateBinding::getNetSalary, bo.getNetSalary()); + lqw.eq(bo.getTotalCompanyCost() != null, OaEmployeeTemplateBinding::getTotalCompanyCost, bo.getTotalCompanyCost()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OaEmployeeTemplateBinding::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增员工模板绑定及月度发放记录 + */ + @Override + public Boolean insertByBo(OaEmployeeTemplateBindingBo bo) { + OaEmployeeTemplateBinding add = BeanUtil.toBean(bo, OaEmployeeTemplateBinding.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setBindingId(add.getBindingId()); + } + return flag; + } + + /** + * 修改员工模板绑定及月度发放记录 + */ + @Override + public Boolean updateByBo(OaEmployeeTemplateBindingBo bo) { + OaEmployeeTemplateBinding update = BeanUtil.toBean(bo, OaEmployeeTemplateBinding.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaEmployeeTemplateBinding entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除员工模板绑定及月度发放记录 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + @Override + public Boolean calculateSalary(List employeeIds, Long payYear, Long payMonth,Long defaultInsuranceTemplateId, Long defaultSalaryTemplateId) { + // 参数校验 + if (defaultInsuranceTemplateId == null || defaultSalaryTemplateId == null) { + throw new RuntimeException("请选择默认的薪资模板和社保模板"); + } + for (Long employeeId : employeeIds) { + // 1. 检查本月是否已存在记录 + OaEmployeeTemplateBinding exist = baseMapper.findByEmployeeAndMonth(employeeId, payYear, payMonth); + if (exist != null) { + // 已存在,跳过或更新 + continue; + } + + // 2. 获取上月的模板ID(支持一键复制) + Long lastMonth = (payMonth == 1) ? 12 : payMonth - 1; + Long lastYear = (payMonth == 1) ? payYear - 1 : payYear; + OaEmployeeTemplateBinding lastBinding = baseMapper.findByEmployeeAndMonth(employeeId, lastYear, lastMonth); + + Long insuranceTemplateId; + Long salaryTemplateId; + if (lastBinding != null) { + // 存在上月记录,使用上月的模板 + insuranceTemplateId = lastBinding.getInsuranceTemplateId(); + salaryTemplateId = lastBinding.getSalaryTemplateId(); + } else { + // 首次配置,使用前端传入的默认模板 + insuranceTemplateId = defaultInsuranceTemplateId; + salaryTemplateId = defaultSalaryTemplateId; + + // 将默认模板ID保存到员工表 +// OaEmployeeTemplateBinding employee = new OaEmployeeTemplateBinding(); +// employee.setEmployeeId(employeeId); +// employee.setInsuranceTemplateId(defaultInsuranceTemplateId); +// employee.setSalaryTemplateId(defaultSalaryTemplateId); +// baseMapper.updateById(employee); + } + + // 3. 新建本月主表记录 + OaEmployeeTemplateBinding binding = new OaEmployeeTemplateBinding(); + binding.setEmployeeId(employeeId); + binding.setInsuranceTemplateId(insuranceTemplateId); + binding.setSalaryTemplateId(salaryTemplateId); + binding.setPayYear(payYear); + binding.setPayMonth(payMonth); + binding.setStatus("待发"); + baseMapper.insert(binding); + + // 4. 生成明细快照 + List salaryDetails = salaryDetailMapper.findByTemplateId(salaryTemplateId); + List insuranceDetails = insuranceDetailMapper.findByTemplateId(insuranceTemplateId); + + BigDecimal totalSalary = BigDecimal.ZERO; + BigDecimal totalCompanyInsurance = BigDecimal.ZERO; + + // 薪资明细 + for (OaSalaryTemplateDetail detail : salaryDetails) { + BigDecimal paidAmount = detail.getAmount() != null ? detail.getAmount() : BigDecimal.ZERO; + totalSalary = totalSalary.add(paidAmount); + + OaBindingItemDetail item = new OaBindingItemDetail(); + item.setBindingId(binding.getBindingId()); + item.setTemplateType("salary"); + item.setItemDetailId(detail.getSalaryDetailId()); + item.setPaidAmount(paidAmount); + bindingItemDetailMapper.insert(item); + } + + // 社保明细 + for (OaInsuranceTemplateDetail detail : insuranceDetails) { + BigDecimal paidAmount = detail.getAmount() != null ? detail.getAmount() : BigDecimal.ZERO; + totalCompanyInsurance = totalCompanyInsurance.add(paidAmount); + + OaBindingItemDetail item = new OaBindingItemDetail(); + item.setBindingId(binding.getBindingId()); + item.setTemplateType("insurance"); + item.setItemDetailId(detail.getInsuranceDetailId()); + item.setPaidAmount(paidAmount); + bindingItemDetailMapper.insert(item); + } + + // 5. 计算实发工资和单位总支出 + BigDecimal netSalary = totalSalary; + //TODO 可扩展:减去个税、个人社保等 + BigDecimal totalCompanyCost = netSalary.add(totalCompanyInsurance); + + binding.setNetSalary(netSalary); + binding.setTotalCompanyCost(totalCompanyCost); + baseMapper.updateById(binding); + } + return true; + } + + + @Override + public Boolean finalizeSalary(List bindingIds) { + for (Long id : bindingIds) { + OaEmployeeTemplateBinding binding = baseMapper.selectById(id); + if (binding != null && !"已发".equals(binding.getStatus())) { + binding.setStatus("已发"); + baseMapper.updateById(binding); + } + } + return true; + } + + @Override + public List querySalaryHistory(Long employeeId) { + List list = baseMapper.selectList( + new LambdaQueryWrapper().eq(OaEmployeeTemplateBinding::getEmployeeId, employeeId) + .orderByDesc(OaEmployeeTemplateBinding::getPayYear, OaEmployeeTemplateBinding::getPayMonth) + ); + return list.stream().map(this::toVo).collect(Collectors.toList()); + } + + // 工具方法:主表转VO并查明细 + private EmployeeSalaryRecordVo toVo(OaEmployeeTemplateBinding binding) { + if (binding == null) return null; + EmployeeSalaryRecordVo vo = new EmployeeSalaryRecordVo(); + BeanUtils.copyProperties(binding, vo); + OaEmployee emp = employeeMapper.selectById(binding.getEmployeeId()); + if (emp != null) { + vo.setEmployeeName(emp.getEmployeeName()); + vo.setCompany(emp.getCompany()); + } + List allDetails = bindingItemDetailMapper.selectList( + new LambdaQueryWrapper().eq(OaBindingItemDetail::getBindingId, binding.getBindingId()) + ); + vo.setSalaryDetails(allDetails.stream().filter(d -> "salary".equals(d.getTemplateType())) + .map(this::toDetailVo).collect(Collectors.toList())); + vo.setInsuranceDetails(allDetails.stream().filter(d -> "insurance".equals(d.getTemplateType())) + .map(this::toDetailVo).collect(Collectors.toList())); + return vo; + } + + private OaBindingItemDetailVo toDetailVo(OaBindingItemDetail detail) { + OaBindingItemDetailVo vo = new OaBindingItemDetailVo(); + BeanUtils.copyProperties(detail, vo); + // 可补充itemName等 + return vo; + } +} + diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateDetailServiceImpl.java new file mode 100644 index 0000000..4e6c712 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateDetailServiceImpl.java @@ -0,0 +1,111 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaInsuranceTemplateDetailBo; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateDetailVo; +import com.ruoyi.oa.domain.OaInsuranceTemplateDetail; +import com.ruoyi.oa.mapper.OaInsuranceTemplateDetailMapper; +import com.ruoyi.oa.service.IOaInsuranceTemplateDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 社保/公积金模板明细Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaInsuranceTemplateDetailServiceImpl implements IOaInsuranceTemplateDetailService { + + private final OaInsuranceTemplateDetailMapper baseMapper; + + /** + * 查询社保/公积金模板明细 + */ + @Override + public OaInsuranceTemplateDetailVo queryById(Long insuranceDetailId){ + return baseMapper.selectVoById(insuranceDetailId); + } + + /** + * 查询社保/公积金模板明细列表 + */ + @Override + public TableDataInfo queryPageList(OaInsuranceTemplateDetailBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询社保/公积金模板明细列表 + */ + @Override + public List queryList(OaInsuranceTemplateDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaInsuranceTemplateDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getInsuranceTemplateId() != null, OaInsuranceTemplateDetail::getInsuranceTemplateId, bo.getInsuranceTemplateId()); + lqw.eq(StringUtils.isNotBlank(bo.getInsuranceType()), OaInsuranceTemplateDetail::getInsuranceType, bo.getInsuranceType()); + lqw.eq(bo.getAmount() != null, OaInsuranceTemplateDetail::getAmount, bo.getAmount()); + return lqw; + } + + /** + * 新增社保/公积金模板明细 + */ + @Override + public Boolean insertByBo(OaInsuranceTemplateDetailBo bo) { + OaInsuranceTemplateDetail add = BeanUtil.toBean(bo, OaInsuranceTemplateDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setInsuranceDetailId(add.getInsuranceDetailId()); + } + return flag; + } + + /** + * 修改社保/公积金模板明细 + */ + @Override + public Boolean updateByBo(OaInsuranceTemplateDetailBo bo) { + OaInsuranceTemplateDetail update = BeanUtil.toBean(bo, OaInsuranceTemplateDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaInsuranceTemplateDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除社保/公积金模板明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateServiceImpl.java new file mode 100644 index 0000000..3662762 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaInsuranceTemplateServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaInsuranceTemplateBo; +import com.ruoyi.oa.domain.vo.OaInsuranceTemplateVo; +import com.ruoyi.oa.domain.OaInsuranceTemplate; +import com.ruoyi.oa.mapper.OaInsuranceTemplateMapper; +import com.ruoyi.oa.service.IOaInsuranceTemplateService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 社保/公积金模板主Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaInsuranceTemplateServiceImpl implements IOaInsuranceTemplateService { + + private final OaInsuranceTemplateMapper baseMapper; + + /** + * 查询社保/公积金模板主 + */ + @Override + public OaInsuranceTemplateVo queryById(Long insuranceTemplateId){ + return baseMapper.selectVoById(insuranceTemplateId); + } + + /** + * 查询社保/公积金模板主列表 + */ + @Override + public TableDataInfo queryPageList(OaInsuranceTemplateBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询社保/公积金模板主列表 + */ + @Override + public List queryList(OaInsuranceTemplateBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaInsuranceTemplateBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getTemplateName()), OaInsuranceTemplate::getTemplateName, bo.getTemplateName()); + return lqw; + } + + /** + * 新增社保/公积金模板主 + */ + @Override + public Boolean insertByBo(OaInsuranceTemplateBo bo) { + OaInsuranceTemplate add = BeanUtil.toBean(bo, OaInsuranceTemplate.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setInsuranceTemplateId(add.getInsuranceTemplateId()); + } + return flag; + } + + /** + * 修改社保/公积金模板主 + */ + @Override + public Boolean updateByBo(OaInsuranceTemplateBo bo) { + OaInsuranceTemplate update = BeanUtil.toBean(bo, OaInsuranceTemplate.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaInsuranceTemplate entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除社保/公积金模板主 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateDetailServiceImpl.java new file mode 100644 index 0000000..c650420 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateDetailServiceImpl.java @@ -0,0 +1,112 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaSalaryTemplateDetailBo; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateDetailVo; +import com.ruoyi.oa.domain.OaSalaryTemplateDetail; +import com.ruoyi.oa.mapper.OaSalaryTemplateDetailMapper; +import com.ruoyi.oa.service.IOaSalaryTemplateDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 薪资模板明细Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaSalaryTemplateDetailServiceImpl implements IOaSalaryTemplateDetailService { + + private final OaSalaryTemplateDetailMapper baseMapper; + + /** + * 查询薪资模板明细 + */ + @Override + public OaSalaryTemplateDetailVo queryById(Long salaryDetailId){ + return baseMapper.selectVoById(salaryDetailId); + } + + /** + * 查询薪资模板明细列表 + */ + @Override + public TableDataInfo queryPageList(OaSalaryTemplateDetailBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询薪资模板明细列表 + */ + @Override + public List queryList(OaSalaryTemplateDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaSalaryTemplateDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSalaryTemplateId() != null, OaSalaryTemplateDetail::getSalaryTemplateId, bo.getSalaryTemplateId()); + lqw.eq(StringUtils.isNotBlank(bo.getSalaryItem()), OaSalaryTemplateDetail::getSalaryItem, bo.getSalaryItem()); + lqw.eq(bo.getAmount() != null, OaSalaryTemplateDetail::getAmount, bo.getAmount()); + lqw.eq(bo.getRate() != null, OaSalaryTemplateDetail::getRate, bo.getRate()); + return lqw; + } + + /** + * 新增薪资模板明细 + */ + @Override + public Boolean insertByBo(OaSalaryTemplateDetailBo bo) { + OaSalaryTemplateDetail add = BeanUtil.toBean(bo, OaSalaryTemplateDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSalaryDetailId(add.getSalaryDetailId()); + } + return flag; + } + + /** + * 修改薪资模板明细 + */ + @Override + public Boolean updateByBo(OaSalaryTemplateDetailBo bo) { + OaSalaryTemplateDetail update = BeanUtil.toBean(bo, OaSalaryTemplateDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaSalaryTemplateDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除薪资模板明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateServiceImpl.java new file mode 100644 index 0000000..e655f82 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryTemplateServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.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.ruoyi.oa.domain.bo.OaSalaryTemplateBo; +import com.ruoyi.oa.domain.vo.OaSalaryTemplateVo; +import com.ruoyi.oa.domain.OaSalaryTemplate; +import com.ruoyi.oa.mapper.OaSalaryTemplateMapper; +import com.ruoyi.oa.service.IOaSalaryTemplateService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 薪资模板主Service业务层处理 + * + * @author ruoyi + * @date 2025-06-23 + */ +@RequiredArgsConstructor +@Service +public class OaSalaryTemplateServiceImpl implements IOaSalaryTemplateService { + + private final OaSalaryTemplateMapper baseMapper; + + /** + * 查询薪资模板主 + */ + @Override + public OaSalaryTemplateVo queryById(Long salaryTemplateId){ + return baseMapper.selectVoById(salaryTemplateId); + } + + /** + * 查询薪资模板主列表 + */ + @Override + public TableDataInfo queryPageList(OaSalaryTemplateBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询薪资模板主列表 + */ + @Override + public List queryList(OaSalaryTemplateBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaSalaryTemplateBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getTemplateName()), OaSalaryTemplate::getTemplateName, bo.getTemplateName()); + return lqw; + } + + /** + * 新增薪资模板主 + */ + @Override + public Boolean insertByBo(OaSalaryTemplateBo bo) { + OaSalaryTemplate add = BeanUtil.toBean(bo, OaSalaryTemplate.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSalaryTemplateId(add.getSalaryTemplateId()); + } + return flag; + } + + /** + * 修改薪资模板主 + */ + @Override + public Boolean updateByBo(OaSalaryTemplateBo bo) { + OaSalaryTemplate update = BeanUtil.toBean(bo, OaSalaryTemplate.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaSalaryTemplate entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除薪资模板主 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java index 1e2e1cf..b63cd09 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java @@ -102,7 +102,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { " - COALESCE(finance_details.total_expenditure, 0)" + ")"; -// 不用 wrapper.having(...) + // 不用 wrapper.having(...) if ("profit".equals(profitType)) { wrapper.apply(profitLossExpr + " > 0"); } else if ("loss".equals(profitType)) { diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaBindingItemDetailMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaBindingItemDetailMapper.xml new file mode 100644 index 0000000..0f287d6 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaBindingItemDetailMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeMapper.xml new file mode 100644 index 0000000..898223a --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeTemplateBindingMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeTemplateBindingMapper.xml new file mode 100644 index 0000000..9d342f7 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaEmployeeTemplateBindingMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateDetailMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateDetailMapper.xml new file mode 100644 index 0000000..ae4e8c2 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateDetailMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateMapper.xml new file mode 100644 index 0000000..ee04641 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaInsuranceTemplateMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateDetailMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateDetailMapper.xml new file mode 100644 index 0000000..1a0524a --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateDetailMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateMapper.xml new file mode 100644 index 0000000..858e511 --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryTemplateMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + +