diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.java new file mode 100644 index 0000000..e3e0e7e --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryController.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.OaSalaryVo; +import com.ruoyi.oa.domain.bo.OaSalaryBo; +import com.ruoyi.oa.service.IOaSalaryService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 薪资管理 + * + * @author hdka + * @date 2025-03-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/salary") +public class OaSalaryController extends BaseController { + + private final IOaSalaryService iOaSalaryService; + + /** + * 查询薪资管理列表 + */ + @SaCheckPermission("oa:salary:list") + @GetMapping("/list-staff") + public TableDataInfo list(OaSalaryBo bo, PageQuery pageQuery) { + return iOaSalaryService.queryPageList(bo, pageQuery); + } + + /** + * 导出薪资管理列表 + */ + @SaCheckPermission("oa:salary:export") + @Log(title = "薪资管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaSalaryBo bo, HttpServletResponse response) { + List list = iOaSalaryService.queryList(bo); + ExcelUtil.exportExcel(list, "薪资管理", OaSalaryVo.class, response); + } + + /** + * 获取薪资管理详细信息 + * + * @param salaryId 主键 + */ + @SaCheckPermission("oa:salary:query") + @GetMapping("/{salaryId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long salaryId) { + return R.ok(iOaSalaryService.queryById(salaryId)); + } + + /** + * 新增薪资管理 + */ + @SaCheckPermission("oa:salary:add") + @Log(title = "薪资管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaSalaryBo bo) { + return toAjax(iOaSalaryService.insertByBo(bo)); + } + + /** + * 修改薪资管理 + */ + @SaCheckPermission("oa:salary:edit") + @Log(title = "薪资管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaSalaryBo bo) { + return toAjax(iOaSalaryService.updateByBo(bo)); + } + + /** + * 删除薪资管理 + * + * @param salaryIds 主键串 + */ + @SaCheckPermission("oa:salary:remove") + @Log(title = "薪资管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{salaryIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] salaryIds) { + return toAjax(iOaSalaryService.deleteWithValidByIds(Arrays.asList(salaryIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.java new file mode 100644 index 0000000..f60a8cf --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaSalaryItemController.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.OaSalaryItemVo; +import com.ruoyi.oa.domain.bo.OaSalaryItemBo; +import com.ruoyi.oa.service.IOaSalaryItemService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 薪水详情 + * + * @author hdka + * @date 2025-03-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/salaryItem") +public class OaSalaryItemController extends BaseController { + + private final IOaSalaryItemService iOaSalaryItemService; + + /** + * 查询薪水详情列表 + */ + @SaCheckPermission("oa:salaryItem:list") + @GetMapping("/list") + public TableDataInfo list(OaSalaryItemBo bo, PageQuery pageQuery) { + return iOaSalaryItemService.queryPageList(bo, pageQuery); + } + + /** + * 导出薪水详情列表 + */ + @SaCheckPermission("oa:salaryItem:export") + @Log(title = "薪水详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaSalaryItemBo bo, HttpServletResponse response) { + List list = iOaSalaryItemService.queryList(bo); + ExcelUtil.exportExcel(list, "薪水详情", OaSalaryItemVo.class, response); + } + + /** + * 获取薪水详情详细信息 + * + * @param salaryItemId 主键 + */ + @SaCheckPermission("oa:salaryItem:query") + @GetMapping("/{salaryItemId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long salaryItemId) { + return R.ok(iOaSalaryItemService.queryById(salaryItemId)); + } + + /** + * 新增薪水详情 + */ + @SaCheckPermission("oa:salaryItem:add") + @Log(title = "薪水详情", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaSalaryItemBo bo) { + return toAjax(iOaSalaryItemService.insertByBo(bo)); + } + + /** + * 修改薪水详情 + */ + @SaCheckPermission("oa:salaryItem:edit") + @Log(title = "薪水详情", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaSalaryItemBo bo) { + return toAjax(iOaSalaryItemService.updateByBo(bo)); + } + + /** + * 删除薪水详情 + * + * @param salaryItemIds 主键串 + */ + @SaCheckPermission("oa:salaryItem:remove") + @Log(title = "薪水详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{salaryItemIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] salaryItemIds) { + return toAjax(iOaSalaryItemService.deleteWithValidByIds(Arrays.asList(salaryItemIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalary.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalary.java new file mode 100644 index 0000000..766cb83 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalary.java @@ -0,0 +1,58 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪资管理对象 oa_salary + * + * @author hdka + * @date 2025-03-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_salary") +public class OaSalary extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键id + */ + @TableId(value = "salary_id") + private Long salaryId; + /** + * 用户id + */ + private Long userId; + /** + * 实际工资 + */ + private Double realSalary; + /** + * 涉及时间 + */ + private Date payTime; + /** + * 基础日薪 + */ + private Double baseSalary; + /** + * 删除标志 + */ + @TableLogic + private Long delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryItem.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryItem.java new file mode 100644 index 0000000..80013ca --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaSalaryItem.java @@ -0,0 +1,66 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 薪水详情对象 oa_salary_item + * + * @author hdka + * @date 2025-03-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_salary_item") +public class OaSalaryItem extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键id + */ + @TableId(value = "salary_item_id") + private Long salaryItemId; + /** + * 奖惩类型 + */ + private Long type; + /** + * 加/减理由 + */ + private String reason; + /** + * 涉及金额 + */ + private Double price; + /** + * 奖罚记号1奖0罚 + */ + private Long flag; + /** + * 外键id + */ + private Long salaryId; + /** + * 设计日期 + */ + private Date signTime; + /** + * 删除标志 + */ + @TableLogic + private Long delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryBo.java new file mode 100644 index 0000000..2ae1d09 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryBo.java @@ -0,0 +1,60 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 薪资管理业务对象 oa_salary + * + * @author hdka + * @date 2025-03-06 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaSalaryBo extends BaseEntity { + + /** + * 主键id + */ + private Long salaryId; + + /** + * 用户id + */ + private Long userId; + + /** + * 实际工资 + */ + private Double realSalary; + + /** + * 涉及时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date payTime; + + /** + * 基础日薪 + */ + private Double baseSalary; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java new file mode 100644 index 0000000..487b3bd --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaSalaryItemBo.java @@ -0,0 +1,74 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 薪水详情业务对象 oa_salary_item + * + * @author hdka + * @date 2025-03-06 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaSalaryItemBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long salaryItemId; + + /** + * 奖惩类型 + */ + @NotNull(message = "奖惩类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long type; + + /** + * 理由 + */ + private String reason; + + /** + * 涉及金额 + */ + @NotNull(message = "涉及金额不能为空", groups = { AddGroup.class, EditGroup.class }) + private Double price; + + /** + * 奖罚记号1奖0罚 + */ + @NotNull(message = "奖罚记号不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long flag; + + /** + * 外键id + */ + private Long salaryId; + + /** + * 涉及日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date signTime; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryItemVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryItemVo.java new file mode 100644 index 0000000..25e16e6 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryItemVo.java @@ -0,0 +1,76 @@ +package com.ruoyi.oa.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +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_item + * + * @author hdka + * @date 2025-03-06 + */ +@Data +@ExcelIgnoreUnannotated +public class OaSalaryItemVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long salaryItemId; + + /** + * 奖惩类型 + */ + @ExcelProperty(value = "奖惩类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "oa_salary_type") + private Long type; + + /** + * 加/减理由 + */ + @ExcelProperty(value = "加/减理由") + private String reason; + + /** + * 涉及金额 + */ + @ExcelProperty(value = "涉及金额") + private Double price; + + /** + * 奖罚记号1奖0罚 + */ + @ExcelProperty(value = "奖罚记号1奖0罚") + private Long flag; + + /** + * 外键id + */ + @ExcelProperty(value = "外键id") + private Long salaryId; + + /** + * 设计日期 + */ + @ExcelProperty(value = "设计日期") + private Date signTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java new file mode 100644 index 0000000..d8c528f --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaSalaryVo.java @@ -0,0 +1,72 @@ +package com.ruoyi.oa.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +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 com.ruoyi.oa.domain.OaSalary; +import com.ruoyi.oa.domain.bo.OaSalaryBo; +import lombok.Data; +import java.util.Date; + + + +/** + * 薪资管理视图对象 oa_salary + * + * @author hdka + * @date 2025-03-06 + */ +@Data +@ExcelIgnoreUnannotated +public class OaSalaryVo extends OaSalary { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long salaryId; + + + /** + * 人名 + */ + @ExcelProperty(value = "姓名") + private String nickName; + + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 实际工资 + */ + @ExcelProperty(value = "实际工资") + private Double realSalary; + + /** + * 涉及时间 + */ + @ExcelProperty(value = "涉及时间") + private Date payTime; + + /** + * 基础日薪 + */ + @ExcelProperty(value = "基础日薪") + private Double baseSalary; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java index 7a7df66..0993f33 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaCostAllVo.java @@ -29,15 +29,15 @@ public class SysOaCostAllVo { private Long materialId; - private Object materialVo; + private Object materialCost; private Long userId; - private Object userVo; + private Object userCost; private Long claimId; - private Object claimVo; + private Object claimCost; private Long financeId; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryItemMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryItemMapper.java new file mode 100644 index 0000000..5f151a1 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryItemMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaSalaryItem; +import com.ruoyi.oa.domain.vo.OaSalaryItemVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 薪水详情Mapper接口 + * + * @author hdka + * @date 2025-03-06 + */ +public interface OaSalaryItemMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java new file mode 100644 index 0000000..3557d9f --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaSalaryMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.oa.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.oa.domain.OaSalary; +import com.ruoyi.oa.domain.vo.OaSalaryVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +/** + * 薪资管理Mapper接口 + * + * @author hdka + * @date 2025-03-06 + */ +public interface OaSalaryMapper extends BaseMapperPlus { + + Page selectStaffVoPage(Page build,@Param(Constants.WRAPPER) Wrapper lqw); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java index 42c60fc..0b4a893 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaAttendanceMapper.java @@ -32,4 +32,10 @@ public interface SysOaAttendanceMapper extends BaseMapperPlus selectPageVo(Page build, @Param(Constants.WRAPPER) Wrapper lqw); SysOaClaimVo selectSysOaClaimVoByProcInsId(String procInsId); + + Double getClaimCost(Long claimId); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryItemService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryItemService.java new file mode 100644 index 0000000..5aea3de --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryItemService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaSalaryItem; +import com.ruoyi.oa.domain.vo.OaSalaryItemVo; +import com.ruoyi.oa.domain.bo.OaSalaryItemBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 薪水详情Service接口 + * + * @author hdka + * @date 2025-03-06 + */ +public interface IOaSalaryItemService { + + /** + * 查询薪水详情 + */ + OaSalaryItemVo queryById(Long salaryItemId); + + /** + * 查询薪水详情列表 + */ + TableDataInfo queryPageList(OaSalaryItemBo bo, PageQuery pageQuery); + + /** + * 查询薪水详情列表 + */ + List queryList(OaSalaryItemBo bo); + + /** + * 新增薪水详情 + */ + Boolean insertByBo(OaSalaryItemBo bo); + + /** + * 修改薪水详情 + */ + Boolean updateByBo(OaSalaryItemBo bo); + + /** + * 校验并批量删除薪水详情信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java new file mode 100644 index 0000000..e21932e --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaSalaryService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaSalary; +import com.ruoyi.oa.domain.vo.OaSalaryVo; +import com.ruoyi.oa.domain.bo.OaSalaryBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资管理Service接口 + * + * @author hdka + * @date 2025-03-06 + */ +public interface IOaSalaryService { + + /** + * 查询薪资管理 + */ + OaSalaryVo queryById(Long salaryId); + + /** + * 查询薪资管理列表 + */ + TableDataInfo queryPageList(OaSalaryBo bo, PageQuery pageQuery); + + /** + * 查询薪资管理列表 + */ + List queryList(OaSalaryBo bo); + + /** + * 新增薪资管理 + */ + Boolean insertByBo(OaSalaryBo bo); + + /** + * 修改薪资管理 + */ + Boolean updateByBo(OaSalaryBo bo); + + /** + * 校验并批量删除薪资管理信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java new file mode 100644 index 0000000..53da809 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryItemServiceImpl.java @@ -0,0 +1,114 @@ +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.OaSalaryItemBo; +import com.ruoyi.oa.domain.vo.OaSalaryItemVo; +import com.ruoyi.oa.domain.OaSalaryItem; +import com.ruoyi.oa.mapper.OaSalaryItemMapper; +import com.ruoyi.oa.service.IOaSalaryItemService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 薪水详情Service业务层处理 + * + * @author hdka + * @date 2025-03-06 + */ +@RequiredArgsConstructor +@Service +public class OaSalaryItemServiceImpl implements IOaSalaryItemService { + + private final OaSalaryItemMapper baseMapper; + + /** + * 查询薪水详情 + */ + @Override + public OaSalaryItemVo queryById(Long salaryItemId){ + return baseMapper.selectVoById(salaryItemId); + } + + /** + * 查询薪水详情列表 + */ + @Override + public TableDataInfo queryPageList(OaSalaryItemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询薪水详情列表 + */ + @Override + public List queryList(OaSalaryItemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaSalaryItemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getType() != null, OaSalaryItem::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getReason()), OaSalaryItem::getReason, bo.getReason()); + lqw.eq(bo.getPrice() != null, OaSalaryItem::getPrice, bo.getPrice()); + lqw.eq(bo.getFlag() != null, OaSalaryItem::getFlag, bo.getFlag()); + lqw.eq(bo.getSalaryId() != null, OaSalaryItem::getSalaryId, bo.getSalaryId()); + lqw.eq(bo.getSignTime() != null, OaSalaryItem::getSignTime, bo.getSignTime()); + return lqw; + } + + /** + * 新增薪水详情 + */ + @Override + public Boolean insertByBo(OaSalaryItemBo bo) { + OaSalaryItem add = BeanUtil.toBean(bo, OaSalaryItem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSalaryItemId(add.getSalaryItemId()); + } + return flag; + } + + /** + * 修改薪水详情 + */ + @Override + public Boolean updateByBo(OaSalaryItemBo bo) { + OaSalaryItem update = BeanUtil.toBean(bo, OaSalaryItem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaSalaryItem 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/OaSalaryServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.java new file mode 100644 index 0000000..685ccef --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaSalaryServiceImpl.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.OaSalaryBo; +import com.ruoyi.oa.domain.vo.OaSalaryVo; +import com.ruoyi.oa.domain.OaSalary; +import com.ruoyi.oa.mapper.OaSalaryMapper; +import com.ruoyi.oa.service.IOaSalaryService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 薪资管理Service业务层处理 + * + * @author hdka + * @date 2025-03-06 + */ +@RequiredArgsConstructor +@Service +public class OaSalaryServiceImpl implements IOaSalaryService { + + private final OaSalaryMapper baseMapper; + + /** + * 查询薪资管理 + */ + @Override + public OaSalaryVo queryById(Long salaryId){ + return baseMapper.selectVoById(salaryId); + } + + /** + * 查询薪资管理列表 + */ + @Override + public TableDataInfo queryPageList(OaSalaryBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectStaffVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询薪资管理列表 + */ + @Override + public List queryList(OaSalaryBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaSalaryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, OaSalary::getUserId, bo.getUserId()); + lqw.eq(bo.getRealSalary() != null, OaSalary::getRealSalary, bo.getRealSalary()); + lqw.eq(bo.getPayTime() != null, OaSalary::getPayTime, bo.getPayTime()); + lqw.eq(bo.getBaseSalary() != null, OaSalary::getBaseSalary, bo.getBaseSalary()); + return lqw; + } + + /** + * 新增薪资管理 + */ + @Override + public Boolean insertByBo(OaSalaryBo bo) { + OaSalary add = BeanUtil.toBean(bo, OaSalary.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSalaryId(add.getSalaryId()); + } + return flag; + } + + /** + * 修改薪资管理 + */ + @Override + public Boolean updateByBo(OaSalaryBo bo) { + OaSalary update = BeanUtil.toBean(bo, OaSalary.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaSalary 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/SysOaCostServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java index 72285d8..09d9168 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaCostServiceImpl.java @@ -9,6 +9,7 @@ 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.SysOaAttendance; import com.ruoyi.oa.domain.SysOaProject; import com.ruoyi.oa.domain.vo.*; import com.ruoyi.oa.mapper.*; @@ -22,6 +23,7 @@ import com.ruoyi.oa.domain.SysOaCost; import com.ruoyi.oa.service.ISysOaCostService; import java.util.*; +import java.util.stream.Collectors; /** * 项目成本分析Service业务层处理 @@ -42,6 +44,8 @@ public class SysOaCostServiceImpl implements ISysOaCostService { private final SysOaWarehouseMapper warehouseMapper; + private final SysOaAttendanceMapper attendanceMapper; + /** * 查询项目成本分析 @@ -134,32 +138,73 @@ public class SysOaCostServiceImpl implements ISysOaCostService { */ @Override - public TableDataInfo AllList(String projectName, String createTime) { + public TableDataInfo AllList(String projectName, String createTime) { // 包括每个项目的成本分析,每个都有这几种类型,即每个项目返回几列数据 + List alls = baseMapper.AllList(projectName,createTime); + log.info("alls:{}",alls); List allVos = new java.util.ArrayList<>(Collections.emptyList()); if (alls.isEmpty()) return TableDataInfo.build(allVos); for (SysOaCostAll all : alls) { SysOaCostAllVo allVo = BeanUtil.toBean(all, SysOaCostAllVo.class); + log.info("allVo:{}", allVo); - // 车间用工 - if (allVo.getCostType() == 1) { - allVo.setUserVo(userMapper.selectUserById(allVo.getUserId())); - } else if (allVo.getCostType() == 2) { // 差旅花费 - allVo.setClaimVo(claimMapper.selectSysOaClaimVoById(allVo.getClaimId())); + if (allVo.getCostType() == null) allVo.setCost(0.0); + // 车间用工 + else {if (allVo.getCostType() == 1) { //根据出勤,计算人天数 + Double days = attendanceMapper.getAttendanceDay(allVo.getUserId(), allVo.getProjectId()); + Long laborCost = userMapper.selectUserById(allVo.getUserId()).getLaborCost(); + if (days == null || laborCost == null) allVo.setUserCost(0.0); + else allVo.setUserCost(days * laborCost); + } else if (allVo.getCostType() == 2) { // 差旅花费 差旅花费 = 该项目下的所有差旅费用 + allVo.setClaimCost(claimMapper.getClaimCost(allVo.getClaimId())); - } else if (allVo.getCostType() == 3) { // 库房物料 - allVo.setMaterialVo(warehouseMapper.selectVoById(allVo.getMaterialId())); + } else if (allVo.getCostType() == 3) { // 库房物料 物料花费 =物料价格*数量 + SysOaWarehouseVo warehouseVo = warehouseMapper.selectVoById(allVo.getMaterialId()); + if (warehouseVo == null) allVo.setMaterialCost(0.0); + else allVo.setMaterialCost(warehouseVo.getInventory() * warehouseVo.getPrice()); } else if (allVo.getCostType() == 4) { // 其他 } else if (allVo.getCostType() == 5) { // 接待 - } + }} allVos.add(allVo); + } - return TableDataInfo.build(allVos); + +// 假设原始数据列表为 allVos + List resVos = allVos.stream() + .collect(Collectors.groupingBy(SysOaCostAllVo::getProjectId)) + .values().stream() + .map(group -> { + Double userCostSum = group.stream().mapToDouble(x -> Optional.ofNullable((Double)x.getUserCost()).orElse(0.0)).sum(); + + Double claimCostSum = group.stream().mapToDouble(x -> Optional.ofNullable((Double)x.getUserCost()).orElse(0.0)).sum(); + Double materialCostSum = group.stream().mapToDouble(x -> Optional.ofNullable((Double)x.getUserCost()).orElse(0.0)).sum(); + Double totalCost = userCostSum + claimCostSum + materialCostSum; + + return new SysOaCostAllVo( + group.get(0).getProjectId(), + group.get(0).getProjectName(), + totalCost, + null, + "汇总数据", // 备注 + null, + null, // materialId + materialCostSum, + null, // userId + userCostSum, + null, // claimId + claimCostSum, + null// financeId + ); + }) + .collect(Collectors.toList()); + + + return TableDataInfo.build(resVos); } /** @@ -167,12 +212,12 @@ public class SysOaCostServiceImpl implements ISysOaCostService { */ @Override public TableDataInfo getDetail(Long projectId) { - log.info("查询projectId = {}", projectId); +// log.info("查询projectId = {}", projectId); // LambdaQueryWrapper lqw = Wrappers.lambdaQuery(SysOaCost.class); // lqw.eq(SysOaCost::getProjectId,projectId); // List costs = baseMapper.selectList(lqw); List costs = baseMapper.getListByProjectId(projectId); - log.info("查询costs = {}", costs); +// log.info("查询costs = {}", costs); if (costs.isEmpty()) { return TableDataInfo.build(); @@ -188,15 +233,15 @@ public class SysOaCostServiceImpl implements ISysOaCostService { log.info("sysOaCostList = {}", sysOaCostList); if(cost.getCostType() == 1) { - log.info("查询useVo = {}", userMapper.selectUserById(cost.getUserId())); +// log.info("查询useVo = {}", userMapper.selectUserById(cost.getUserId())); sysOaCostList.setUserVo(userMapper.selectUserById(cost.getUserId())); sysOaCostRow.getUserCostList().add(sysOaCostList); } else if(cost.getCostType() == 2) { - log.info("查询claimMapperVo = {}", claimMapper.selectSysOaClaimVoById(cost.getClaimId())); +// log.info("查询claimMapperVo = {}", claimMapper.selectSysOaClaimVoById(cost.getClaimId())); sysOaCostList.setClaimVo(claimMapper.selectSysOaClaimVoById(cost.getClaimId())); sysOaCostRow.getClaimList().add(sysOaCostList); } else if(cost.getCostType() == 3) { - log.info("查询warehouseMapperVo = {}",warehouseMapper.selectVoById(cost.getMaterialId())); +// log.info("查询warehouseMapperVo = {}",warehouseMapper.selectVoById(cost.getMaterialId())); sysOaCostList.setMaterialVo(warehouseMapper.selectVoById(cost.getMaterialId())); sysOaCostRow.getMaterialList().add(sysOaCostList); } else{ @@ -204,7 +249,7 @@ public class SysOaCostServiceImpl implements ISysOaCostService { } } - log.info("sysOaCostRow = {}", sysOaCostRow); +// log.info("sysOaCostRow = {}", sysOaCostRow); List rows = new java.util.ArrayList<>(Collections.singletonList(sysOaCostRow)); return TableDataInfo.build(rows); diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryItemMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryItemMapper.xml new file mode 100644 index 0000000..31da68e --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryItemMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml new file mode 100644 index 0000000..e76765d --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaSalaryMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml index eecbeed..0933cb9 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml @@ -151,6 +151,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND attendance_day = #{attendanceDay} + delete from sys_oa_attendance where attendance_day = #{day} @@ -158,4 +159,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and create_time > #{firstDay} + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml index 336df36..90ace48 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml @@ -168,6 +168,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sys_oa_project sop on soc.project_id = sop.project_id where soc.proc_ins_id = #{procInsId} + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml index 1c41e41..e52c9c0 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaCostMapper.xml @@ -22,8 +22,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"