feat(erp): 添加月标准工时功能及月汇总工时功能基础CRUD

dev
Yangk 2 months ago
parent 510905b210
commit e41128cfe3

@ -0,0 +1,116 @@
package org.dromara.oa.erp.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.oa.erp.domain.vo.ErpTimesheetStandardMonthVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetStandardMonthBo;
import org.dromara.oa.erp.service.IErpTimesheetStandardMonthService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/oa/erp/timesheetStandardMonth
*
* @author Yangk
* @date 2026-04-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/erp/timesheetStandardMonth")
public class ErpTimesheetStandardMonthController extends BaseController {
private final IErpTimesheetStandardMonthService erpTimesheetStandardMonthService;
/**
*
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:list")
@GetMapping("/list")
public TableDataInfo<ErpTimesheetStandardMonthVo> list(ErpTimesheetStandardMonthBo bo, PageQuery pageQuery) {
return erpTimesheetStandardMonthService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:export")
@Log(title = "月标准工时信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ErpTimesheetStandardMonthBo bo, HttpServletResponse response) {
List<ErpTimesheetStandardMonthVo> list = erpTimesheetStandardMonthService.queryList(bo);
ExcelUtil.exportExcel(list, "月标准工时信息", ErpTimesheetStandardMonthVo.class, response);
}
/**
*
*
* @param standardMonthId
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:query")
@GetMapping("/{standardMonthId}")
public R<ErpTimesheetStandardMonthVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("standardMonthId") Long standardMonthId) {
return R.ok(erpTimesheetStandardMonthService.queryById(standardMonthId));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:add")
@Log(title = "月标准工时信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpTimesheetStandardMonthBo bo) {
return toAjax(erpTimesheetStandardMonthService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:edit")
@Log(title = "月标准工时信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpTimesheetStandardMonthBo bo) {
return toAjax(erpTimesheetStandardMonthService.updateByBo(bo));
}
/**
*
*
* @param standardMonthIds
*/
@SaCheckPermission("oa/erp:timesheetStandardMonth:remove")
@Log(title = "月标准工时信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{standardMonthIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("standardMonthIds") Long[] standardMonthIds) {
return toAjax(erpTimesheetStandardMonthService.deleteWithValidByIds(List.of(standardMonthIds), true));
}
/**
*
*/
@GetMapping("/getErpTimesheetStandardMonthList")
public R<List<ErpTimesheetStandardMonthVo>> getErpTimesheetStandardMonthList(ErpTimesheetStandardMonthBo bo) {
List<ErpTimesheetStandardMonthVo> list = erpTimesheetStandardMonthService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,116 @@
package org.dromara.oa.erp.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryBo;
import org.dromara.oa.erp.service.IErpTimesheetSummaryService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/oa/erp/timesheetSummary
*
* @author Yangk
* @date 2026-04-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/erp/timesheetSummary")
public class ErpTimesheetSummaryController extends BaseController {
private final IErpTimesheetSummaryService erpTimesheetSummaryService;
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummary:list")
@GetMapping("/list")
public TableDataInfo<ErpTimesheetSummaryVo> list(ErpTimesheetSummaryBo bo, PageQuery pageQuery) {
return erpTimesheetSummaryService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummary:export")
@Log(title = "月汇总工时信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ErpTimesheetSummaryBo bo, HttpServletResponse response) {
List<ErpTimesheetSummaryVo> list = erpTimesheetSummaryService.queryList(bo);
ExcelUtil.exportExcel(list, "月汇总工时信息", ErpTimesheetSummaryVo.class, response);
}
/**
*
*
* @param summaryId
*/
@SaCheckPermission("oa/erp:timesheetSummary:query")
@GetMapping("/{summaryId}")
public R<ErpTimesheetSummaryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("summaryId") Long summaryId) {
return R.ok(erpTimesheetSummaryService.queryById(summaryId));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummary:add")
@Log(title = "月汇总工时信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpTimesheetSummaryBo bo) {
return toAjax(erpTimesheetSummaryService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummary:edit")
@Log(title = "月汇总工时信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpTimesheetSummaryBo bo) {
return toAjax(erpTimesheetSummaryService.updateByBo(bo));
}
/**
*
*
* @param summaryIds
*/
@SaCheckPermission("oa/erp:timesheetSummary:remove")
@Log(title = "月汇总工时信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{summaryIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("summaryIds") Long[] summaryIds) {
return toAjax(erpTimesheetSummaryService.deleteWithValidByIds(List.of(summaryIds), true));
}
/**
*
*/
@GetMapping("/getErpTimesheetSummaryList")
public R<List<ErpTimesheetSummaryVo>> getErpTimesheetSummaryList(ErpTimesheetSummaryBo bo) {
List<ErpTimesheetSummaryVo> list = erpTimesheetSummaryService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,116 @@
package org.dromara.oa.erp.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryDetailVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryDetailBo;
import org.dromara.oa.erp.service.IErpTimesheetSummaryDetailService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/oa/erp/timesheetSummaryDetail
*
* @author Yangk
* @date 2026-04-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/erp/timesheetSummaryDetail")
public class ErpTimesheetSummaryDetailController extends BaseController {
private final IErpTimesheetSummaryDetailService erpTimesheetSummaryDetailService;
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:list")
@GetMapping("/list")
public TableDataInfo<ErpTimesheetSummaryDetailVo> list(ErpTimesheetSummaryDetailBo bo, PageQuery pageQuery) {
return erpTimesheetSummaryDetailService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:export")
@Log(title = "月汇总工时明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ErpTimesheetSummaryDetailBo bo, HttpServletResponse response) {
List<ErpTimesheetSummaryDetailVo> list = erpTimesheetSummaryDetailService.queryList(bo);
ExcelUtil.exportExcel(list, "月汇总工时明细", ErpTimesheetSummaryDetailVo.class, response);
}
/**
*
*
* @param summaryDetailId
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:query")
@GetMapping("/{summaryDetailId}")
public R<ErpTimesheetSummaryDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("summaryDetailId") Long summaryDetailId) {
return R.ok(erpTimesheetSummaryDetailService.queryById(summaryDetailId));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:add")
@Log(title = "月汇总工时明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpTimesheetSummaryDetailBo bo) {
return toAjax(erpTimesheetSummaryDetailService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:edit")
@Log(title = "月汇总工时明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpTimesheetSummaryDetailBo bo) {
return toAjax(erpTimesheetSummaryDetailService.updateByBo(bo));
}
/**
*
*
* @param summaryDetailIds
*/
@SaCheckPermission("oa/erp:timesheetSummaryDetail:remove")
@Log(title = "月汇总工时明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{summaryDetailIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("summaryDetailIds") Long[] summaryDetailIds) {
return toAjax(erpTimesheetSummaryDetailService.deleteWithValidByIds(List.of(summaryDetailIds), true));
}
/**
*
*/
@GetMapping("/getErpTimesheetSummaryDetailList")
public R<List<ErpTimesheetSummaryDetailVo>> getErpTimesheetSummaryDetailList(ErpTimesheetSummaryDetailBo bo) {
List<ErpTimesheetSummaryDetailVo> list = erpTimesheetSummaryDetailService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,69 @@
package org.dromara.oa.erp.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* erp_timesheet_standard_month
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_timesheet_standard_month")
public class ErpTimesheetStandardMonth extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "standard_month_id", type = IdType.AUTO)
private Long standardMonthId;
/**
* (YYYYMM202604)
*/
private String monthCode;
/**
* (20264)
*/
private String monthLabel;
/**
*
*/
private Date startDate;
/**
*
*/
private Date endDate;
/**
* (21.021.5)
*/
private Long standardDays;
/**
*
*/
private String remark;
/**
* (0 1)
*/
@TableLogic
private String delFlag;
}

@ -0,0 +1,92 @@
package org.dromara.oa.erp.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* erp_timesheet_summary
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_timesheet_summary")
public class ErpTimesheetSummary extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "summary_id", type = IdType.AUTO)
private Long summaryId;
/**
*
*/
private String summaryCode;
/**
* (YYYYMM)
*/
private String monthCode;
/**
* ID
*/
private Long deptId;
/**
* ()ID
*/
private Long userId;
/**
* ID
*/
private Long standardMonthId;
/**
* ()
*/
private Long standardDays;
/**
* ()
*/
private Long totalProjectHours;
/**
* ()
*/
private Long totalDeptHours;
/**
* ()
*/
private Long totalHours;
/**
*
*/
private Long staffCount;
/**
*
*/
private String remark;
/**
* (0 1)
*/
@TableLogic
private String delFlag;
}

@ -0,0 +1,117 @@
package org.dromara.oa.erp.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* erp_timesheet_summary_detail
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_timesheet_summary_detail")
public class ErpTimesheetSummaryDetail extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "summary_detail_id", type = IdType.AUTO)
private Long summaryDetailId;
/**
* ID
*/
private Long summaryId;
/**
*
*/
private Long sortOrder;
/**
* ID
*/
private Long staffUserId;
/**
* ()
*/
private String staffName;
/**
* 1 0
*/
private String isProject;
/**
* ID()
*/
private Long originalProjectId;
/**
* ()
*/
private String originalProjectCode;
/**
* ()
*/
private String originalProjectName;
/**
* ()
*/
private Long originalHours;
/**
* ID
*/
private Long adjustedProjectId;
/**
* ()
*/
private String adjustedProjectCode;
/**
* ()
*/
private String adjustedProjectName;
/**
* ()
*/
private Long adjustedHours;
/**
* 1 0
*/
private String isGenerated;
/**
*
*/
private String workDescription;
/**
*
*/
private String remark;
/**
* 0 1
*/
@TableLogic
private String delFlag;
}

@ -0,0 +1,65 @@
package org.dromara.oa.erp.domain.bo;
import org.dromara.oa.erp.domain.ErpTimesheetStandardMonth;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* erp_timesheet_standard_month
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ErpTimesheetStandardMonth.class, reverseConvertGenerate = false)
public class ErpTimesheetStandardMonthBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "月标准工时ID不能为空", groups = { EditGroup.class })
private Long standardMonthId;
/**
* (YYYYMM202604)
*/
@NotBlank(message = "月份编码(YYYYMM如202604)不能为空", groups = { AddGroup.class, EditGroup.class })
private String monthCode;
/**
* (20264)
*/
private String monthLabel;
/**
*
*/
@NotNull(message = "起始日期不能为空", groups = { AddGroup.class, EditGroup.class })
private Date startDate;
/**
*
*/
@NotNull(message = "截止日期不能为空", groups = { AddGroup.class, EditGroup.class })
private Date endDate;
/**
* (21.021.5)
*/
private Long standardDays;
/**
*
*/
private String remark;
}

@ -0,0 +1,89 @@
package org.dromara.oa.erp.domain.bo;
import org.dromara.oa.erp.domain.ErpTimesheetSummary;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* erp_timesheet_summary
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ErpTimesheetSummary.class, reverseConvertGenerate = false)
public class ErpTimesheetSummaryBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "汇总工时ID不能为空", groups = { EditGroup.class })
private Long summaryId;
/**
*
*/
@NotBlank(message = "汇总编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String summaryCode;
/**
* (YYYYMM)
*/
@NotBlank(message = "月份编码(YYYYMM)不能为空", groups = { AddGroup.class, EditGroup.class })
private String monthCode;
/**
* ID
*/
@NotNull(message = "部门ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long deptId;
/**
* ()ID
*/
@NotNull(message = "汇总人(部门负责人)用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* ID
*/
private Long standardMonthId;
/**
* ()
*/
private Long standardDays;
/**
* ()
*/
private Long totalProjectHours;
/**
* ()
*/
private Long totalDeptHours;
/**
* ()
*/
private Long totalHours;
/**
*
*/
private Long staffCount;
/**
*
*/
private String remark;
}

@ -0,0 +1,113 @@
package org.dromara.oa.erp.domain.bo;
import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* erp_timesheet_summary_detail
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ErpTimesheetSummaryDetail.class, reverseConvertGenerate = false)
public class ErpTimesheetSummaryDetailBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "汇总明细ID不能为空", groups = { EditGroup.class })
private Long summaryDetailId;
/**
* ID
*/
@NotNull(message = "关联汇总主表ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long summaryId;
/**
*
*/
private Long sortOrder;
/**
* ID
*/
@NotNull(message = "员工用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long staffUserId;
/**
* ()
*/
private String staffName;
/**
* 1 0
*/
@NotBlank(message = "工时类型1项目工时 0部门工时不能为空", groups = { AddGroup.class, EditGroup.class })
private String isProject;
/**
* ID()
*/
private Long originalProjectId;
/**
* ()
*/
private String originalProjectCode;
/**
* ()
*/
private String originalProjectName;
/**
* ()
*/
private Long originalHours;
/**
* ID
*/
private Long adjustedProjectId;
/**
* ()
*/
private String adjustedProjectCode;
/**
* ()
*/
private String adjustedProjectName;
/**
* ()
*/
private Long adjustedHours;
/**
* 1 0
*/
private String isGenerated;
/**
*
*/
private String workDescription;
/**
*
*/
private String remark;
}

@ -0,0 +1,76 @@
package org.dromara.oa.erp.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.oa.erp.domain.ErpTimesheetStandardMonth;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* erp_timesheet_standard_month
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpTimesheetStandardMonth.class)
public class ErpTimesheetStandardMonthVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "月标准工时ID")
private Long standardMonthId;
/**
* (YYYYMM202604)
*/
@ExcelProperty(value = "月份编码(YYYYMM如202604)")
private String monthCode;
/**
* (20264)
*/
@ExcelProperty(value = "月份显示名(如2026年4月)")
private String monthLabel;
/**
*
*/
@ExcelProperty(value = "起始日期")
private Date startDate;
/**
*
*/
@ExcelProperty(value = "截止日期")
private Date endDate;
/**
* (21.021.5)
*/
@ExcelProperty(value = "月标准工时天数(如21.0、21.5)")
private Long standardDays;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
}

@ -0,0 +1,136 @@
package org.dromara.oa.erp.domain.vo;
import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* erp_timesheet_summary_detail
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpTimesheetSummaryDetail.class)
public class ErpTimesheetSummaryDetailVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "汇总明细ID")
private Long summaryDetailId;
/**
* ID
*/
@ExcelProperty(value = "关联汇总主表ID")
private Long summaryId;
/**
*
*/
@ExcelProperty(value = "排序号")
private Long sortOrder;
/**
* ID
*/
@ExcelProperty(value = "员工用户ID")
private Long staffUserId;
/**
* ()
*/
@ExcelProperty(value = "员工姓名(冗余字段)")
private String staffName;
/**
* 1 0
*/
@ExcelProperty(value = "工时类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_project")
private String isProject;
/**
* ID()
*/
@ExcelProperty(value = "原项目ID(填报时的项目)")
private Long originalProjectId;
/**
* ()
*/
@ExcelProperty(value = "原项目编码(冗余)")
private String originalProjectCode;
/**
* ()
*/
@ExcelProperty(value = "原项目名称(冗余)")
private String originalProjectName;
/**
* ()
*/
@ExcelProperty(value = "原项目工时(天)")
private Long originalHours;
/**
* ID
*/
@ExcelProperty(value = "修改后项目ID")
private Long adjustedProjectId;
/**
* ()
*/
@ExcelProperty(value = "修改后项目编码(冗余)")
private String adjustedProjectCode;
/**
* ()
*/
@ExcelProperty(value = "修改后项目名称(冗余)")
private String adjustedProjectName;
/**
* ()
*/
@ExcelProperty(value = "修改后工时(天)")
private Long adjustedHours;
/**
* 1 0
*/
@ExcelProperty(value = "生成行标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "is_generated")
private String isGenerated;
/**
*
*/
@ExcelProperty(value = "部门工作描述")
private String workDescription;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
}

@ -0,0 +1,104 @@
package org.dromara.oa.erp.domain.vo;
import org.dromara.oa.erp.domain.ErpTimesheetSummary;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* erp_timesheet_summary
*
* @author Yangk
* @date 2026-04-30
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpTimesheetSummary.class)
public class ErpTimesheetSummaryVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "汇总工时ID")
private Long summaryId;
/**
*
*/
@ExcelProperty(value = "汇总编号")
private String summaryCode;
/**
* (YYYYMM)
*/
@ExcelProperty(value = "月份编码(YYYYMM)")
private String monthCode;
/**
* ID
*/
@ExcelProperty(value = "部门ID")
private Long deptId;
/**
* ()ID
*/
@ExcelProperty(value = "汇总人(部门负责人)用户ID")
private Long userId;
/**
* ID
*/
@ExcelProperty(value = "关联月标准工时ID")
private Long standardMonthId;
/**
* ()
*/
@ExcelProperty(value = "月标准工时天数(冗余,取自标准月表)")
private Long standardDays;
/**
* ()
*/
@ExcelProperty(value = "项目工时合计(天)")
private Long totalProjectHours;
/**
* ()
*/
@ExcelProperty(value = "部门工时合计(天)")
private Long totalDeptHours;
/**
* ()
*/
@ExcelProperty(value = "总工时合计(天)")
private Long totalHours;
/**
*
*/
@ExcelProperty(value = "汇总人数")
private Long staffCount;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
}

@ -0,0 +1,37 @@
package org.dromara.oa.erp.mapper;
import java.util.List;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.oa.erp.domain.ErpTimesheetStandardMonth;
import org.dromara.oa.erp.domain.vo.ErpTimesheetStandardMonthVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author Yangk
* @date 2026-04-30
*/
public interface ErpTimesheetStandardMonthMapper extends BaseMapperPlus<ErpTimesheetStandardMonth, ErpTimesheetStandardMonthVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpTimesheetStandardMonthVo> selectCustomErpTimesheetStandardMonthVoList(@Param("page") Page<ErpTimesheetStandardMonthVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetStandardMonth> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpTimesheetStandardMonthVo> selectCustomErpTimesheetStandardMonthVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetStandardMonth> queryWrapper);
}

@ -0,0 +1,37 @@
package org.dromara.oa.erp.mapper;
import java.util.List;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryDetailVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author Yangk
* @date 2026-04-30
*/
public interface ErpTimesheetSummaryDetailMapper extends BaseMapperPlus<ErpTimesheetSummaryDetail, ErpTimesheetSummaryDetailVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpTimesheetSummaryDetailVo> selectCustomErpTimesheetSummaryDetailVoList(@Param("page") Page<ErpTimesheetSummaryDetailVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetSummaryDetail> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpTimesheetSummaryDetailVo> selectCustomErpTimesheetSummaryDetailVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetSummaryDetail> queryWrapper);
}

@ -0,0 +1,37 @@
package org.dromara.oa.erp.mapper;
import java.util.List;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.oa.erp.domain.ErpTimesheetSummary;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author Yangk
* @date 2026-04-30
*/
public interface ErpTimesheetSummaryMapper extends BaseMapperPlus<ErpTimesheetSummary, ErpTimesheetSummaryVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpTimesheetSummaryVo> selectCustomErpTimesheetSummaryVoList(@Param("page") Page<ErpTimesheetSummaryVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetSummary> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpTimesheetSummaryVo> selectCustomErpTimesheetSummaryVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpTimesheetSummary> queryWrapper);
}

@ -0,0 +1,69 @@
package org.dromara.oa.erp.service;
import org.dromara.oa.erp.domain.ErpTimesheetStandardMonth;
import org.dromara.oa.erp.domain.vo.ErpTimesheetStandardMonthVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetStandardMonthBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
public interface IErpTimesheetStandardMonthService {
/**
*
*
* @param standardMonthId
* @return
*/
ErpTimesheetStandardMonthVo queryById(Long standardMonthId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<ErpTimesheetStandardMonthVo> queryPageList(ErpTimesheetStandardMonthBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpTimesheetStandardMonthVo> queryList(ErpTimesheetStandardMonthBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(ErpTimesheetStandardMonthBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(ErpTimesheetStandardMonthBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,69 @@
package org.dromara.oa.erp.service;
import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryDetailVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryDetailBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
public interface IErpTimesheetSummaryDetailService {
/**
*
*
* @param summaryDetailId
* @return
*/
ErpTimesheetSummaryDetailVo queryById(Long summaryDetailId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<ErpTimesheetSummaryDetailVo> queryPageList(ErpTimesheetSummaryDetailBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpTimesheetSummaryDetailVo> queryList(ErpTimesheetSummaryDetailBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(ErpTimesheetSummaryDetailBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(ErpTimesheetSummaryDetailBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,69 @@
package org.dromara.oa.erp.service;
import org.dromara.oa.erp.domain.ErpTimesheetSummary;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryVo;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
public interface IErpTimesheetSummaryService {
/**
*
*
* @param summaryId
* @return
*/
ErpTimesheetSummaryVo queryById(Long summaryId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<ErpTimesheetSummaryVo> queryPageList(ErpTimesheetSummaryBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpTimesheetSummaryVo> queryList(ErpTimesheetSummaryBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(ErpTimesheetSummaryBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(ErpTimesheetSummaryBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,137 @@
package org.dromara.oa.erp.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.oa.erp.domain.bo.ErpTimesheetStandardMonthBo;
import org.dromara.oa.erp.domain.vo.ErpTimesheetStandardMonthVo;
import org.dromara.oa.erp.domain.ErpTimesheetStandardMonth;
import org.dromara.oa.erp.mapper.ErpTimesheetStandardMonthMapper;
import org.dromara.oa.erp.service.IErpTimesheetStandardMonthService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
@RequiredArgsConstructor
@Service
public class ErpTimesheetStandardMonthServiceImpl implements IErpTimesheetStandardMonthService {
private final ErpTimesheetStandardMonthMapper baseMapper;
/**
*
*
* @param standardMonthId
* @return
*/
@Override
public ErpTimesheetStandardMonthVo queryById(Long standardMonthId){
return baseMapper.selectVoById(standardMonthId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpTimesheetStandardMonthVo> queryPageList(ErpTimesheetStandardMonthBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpTimesheetStandardMonth> lqw = buildQueryWrapper(bo);
Page<ErpTimesheetStandardMonthVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpTimesheetStandardMonthVo> queryList(ErpTimesheetStandardMonthBo bo) {
MPJLambdaWrapper<ErpTimesheetStandardMonth> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpTimesheetStandardMonth> buildQueryWrapper(ErpTimesheetStandardMonthBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpTimesheetStandardMonth> lqw = JoinWrappers.lambda(ErpTimesheetStandardMonth.class)
.selectAll(ErpTimesheetStandardMonth.class)
.eq(ErpTimesheetStandardMonth::getDelFlag, "0")
.eq(StringUtils.isNotBlank(bo.getMonthCode()), ErpTimesheetStandardMonth::getMonthCode, bo.getMonthCode())
.eq(StringUtils.isNotBlank(bo.getMonthLabel()), ErpTimesheetStandardMonth::getMonthLabel, bo.getMonthLabel())
.eq(bo.getStartDate() != null, ErpTimesheetStandardMonth::getStartDate, bo.getStartDate())
.eq(bo.getEndDate() != null, ErpTimesheetStandardMonth::getEndDate, bo.getEndDate())
.eq(bo.getStandardDays() != null, ErpTimesheetStandardMonth::getStandardDays, bo.getStandardDays())
;
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(ErpTimesheetStandardMonthBo bo) {
ErpTimesheetStandardMonth add = MapstructUtils.convert(bo, ErpTimesheetStandardMonth.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setStandardMonthId(add.getStandardMonthId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(ErpTimesheetStandardMonthBo bo) {
ErpTimesheetStandardMonth update = MapstructUtils.convert(bo, ErpTimesheetStandardMonth.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(ErpTimesheetStandardMonth entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -0,0 +1,147 @@
package org.dromara.oa.erp.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryDetailBo;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryDetailVo;
import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
import org.dromara.oa.erp.mapper.ErpTimesheetSummaryDetailMapper;
import org.dromara.oa.erp.service.IErpTimesheetSummaryDetailService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
@RequiredArgsConstructor
@Service
public class ErpTimesheetSummaryDetailServiceImpl implements IErpTimesheetSummaryDetailService {
private final ErpTimesheetSummaryDetailMapper baseMapper;
/**
*
*
* @param summaryDetailId
* @return
*/
@Override
public ErpTimesheetSummaryDetailVo queryById(Long summaryDetailId){
return baseMapper.selectVoById(summaryDetailId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpTimesheetSummaryDetailVo> queryPageList(ErpTimesheetSummaryDetailBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpTimesheetSummaryDetail> lqw = buildQueryWrapper(bo);
Page<ErpTimesheetSummaryDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpTimesheetSummaryDetailVo> queryList(ErpTimesheetSummaryDetailBo bo) {
MPJLambdaWrapper<ErpTimesheetSummaryDetail> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpTimesheetSummaryDetail> buildQueryWrapper(ErpTimesheetSummaryDetailBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpTimesheetSummaryDetail> lqw = JoinWrappers.lambda(ErpTimesheetSummaryDetail.class)
.selectAll(ErpTimesheetSummaryDetail.class)
.eq(ErpTimesheetSummaryDetail::getDelFlag, "0")
.eq(bo.getSummaryId() != null, ErpTimesheetSummaryDetail::getSummaryId, bo.getSummaryId())
.eq(bo.getSortOrder() != null, ErpTimesheetSummaryDetail::getSortOrder, bo.getSortOrder())
.eq(bo.getStaffUserId() != null, ErpTimesheetSummaryDetail::getStaffUserId, bo.getStaffUserId())
.like(StringUtils.isNotBlank(bo.getStaffName()), ErpTimesheetSummaryDetail::getStaffName, bo.getStaffName())
.eq(StringUtils.isNotBlank(bo.getIsProject()), ErpTimesheetSummaryDetail::getIsProject, bo.getIsProject())
.eq(bo.getOriginalProjectId() != null, ErpTimesheetSummaryDetail::getOriginalProjectId, bo.getOriginalProjectId())
.eq(StringUtils.isNotBlank(bo.getOriginalProjectCode()), ErpTimesheetSummaryDetail::getOriginalProjectCode, bo.getOriginalProjectCode())
.like(StringUtils.isNotBlank(bo.getOriginalProjectName()), ErpTimesheetSummaryDetail::getOriginalProjectName, bo.getOriginalProjectName())
.eq(bo.getOriginalHours() != null, ErpTimesheetSummaryDetail::getOriginalHours, bo.getOriginalHours())
.eq(bo.getAdjustedProjectId() != null, ErpTimesheetSummaryDetail::getAdjustedProjectId, bo.getAdjustedProjectId())
.eq(StringUtils.isNotBlank(bo.getAdjustedProjectCode()), ErpTimesheetSummaryDetail::getAdjustedProjectCode, bo.getAdjustedProjectCode())
.like(StringUtils.isNotBlank(bo.getAdjustedProjectName()), ErpTimesheetSummaryDetail::getAdjustedProjectName, bo.getAdjustedProjectName())
.eq(bo.getAdjustedHours() != null, ErpTimesheetSummaryDetail::getAdjustedHours, bo.getAdjustedHours())
.eq(StringUtils.isNotBlank(bo.getIsGenerated()), ErpTimesheetSummaryDetail::getIsGenerated, bo.getIsGenerated())
.eq(StringUtils.isNotBlank(bo.getWorkDescription()), ErpTimesheetSummaryDetail::getWorkDescription, bo.getWorkDescription())
;
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(ErpTimesheetSummaryDetailBo bo) {
ErpTimesheetSummaryDetail add = MapstructUtils.convert(bo, ErpTimesheetSummaryDetail.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setSummaryDetailId(add.getSummaryDetailId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(ErpTimesheetSummaryDetailBo bo) {
ErpTimesheetSummaryDetail update = MapstructUtils.convert(bo, ErpTimesheetSummaryDetail.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(ErpTimesheetSummaryDetail entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -0,0 +1,142 @@
package org.dromara.oa.erp.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.oa.erp.domain.bo.ErpTimesheetSummaryBo;
import org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryVo;
import org.dromara.oa.erp.domain.ErpTimesheetSummary;
import org.dromara.oa.erp.mapper.ErpTimesheetSummaryMapper;
import org.dromara.oa.erp.service.IErpTimesheetSummaryService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author Yangk
* @date 2026-04-30
*/
@RequiredArgsConstructor
@Service
public class ErpTimesheetSummaryServiceImpl implements IErpTimesheetSummaryService {
private final ErpTimesheetSummaryMapper baseMapper;
/**
*
*
* @param summaryId
* @return
*/
@Override
public ErpTimesheetSummaryVo queryById(Long summaryId){
return baseMapper.selectVoById(summaryId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpTimesheetSummaryVo> queryPageList(ErpTimesheetSummaryBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpTimesheetSummary> lqw = buildQueryWrapper(bo);
Page<ErpTimesheetSummaryVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpTimesheetSummaryVo> queryList(ErpTimesheetSummaryBo bo) {
MPJLambdaWrapper<ErpTimesheetSummary> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpTimesheetSummary> buildQueryWrapper(ErpTimesheetSummaryBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpTimesheetSummary> lqw = JoinWrappers.lambda(ErpTimesheetSummary.class)
.selectAll(ErpTimesheetSummary.class)
.eq(ErpTimesheetSummary::getDelFlag, "0")
.eq(StringUtils.isNotBlank(bo.getSummaryCode()), ErpTimesheetSummary::getSummaryCode, bo.getSummaryCode())
.eq(StringUtils.isNotBlank(bo.getMonthCode()), ErpTimesheetSummary::getMonthCode, bo.getMonthCode())
.eq(bo.getDeptId() != null, ErpTimesheetSummary::getDeptId, bo.getDeptId())
.eq(bo.getUserId() != null, ErpTimesheetSummary::getUserId, bo.getUserId())
.eq(bo.getStandardMonthId() != null, ErpTimesheetSummary::getStandardMonthId, bo.getStandardMonthId())
.eq(bo.getStandardDays() != null, ErpTimesheetSummary::getStandardDays, bo.getStandardDays())
.eq(bo.getTotalProjectHours() != null, ErpTimesheetSummary::getTotalProjectHours, bo.getTotalProjectHours())
.eq(bo.getTotalDeptHours() != null, ErpTimesheetSummary::getTotalDeptHours, bo.getTotalDeptHours())
.eq(bo.getTotalHours() != null, ErpTimesheetSummary::getTotalHours, bo.getTotalHours())
.eq(bo.getStaffCount() != null, ErpTimesheetSummary::getStaffCount, bo.getStaffCount())
;
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(ErpTimesheetSummaryBo bo) {
ErpTimesheetSummary add = MapstructUtils.convert(bo, ErpTimesheetSummary.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setSummaryId(add.getSummaryId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(ErpTimesheetSummaryBo bo) {
ErpTimesheetSummary update = MapstructUtils.convert(bo, ErpTimesheetSummary.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(ErpTimesheetSummary entity){
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpTimesheetStandardMonthMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpTimesheetStandardMonthVo" id="ErpTimesheetStandardMonthResult">
</resultMap>
<select id="selectCustomErpTimesheetStandardMonthVoList" resultMap="ErpTimesheetStandardMonthResult">
select standard_month_id, tenant_id, month_code, month_label, start_date, end_date, standard_days, remark, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_timesheet_standard_month t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpTimesheetSummaryDetailMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryDetailVo" id="ErpTimesheetSummaryDetailResult">
</resultMap>
<select id="selectCustomErpTimesheetSummaryDetailVoList" resultMap="ErpTimesheetSummaryDetailResult">
select summary_detail_id, tenant_id, summary_id, sort_order, staff_user_id, staff_name, is_project, original_project_id, original_project_code, original_project_name, original_hours, adjusted_project_id, adjusted_project_code, adjusted_project_name, adjusted_hours, is_generated, work_description, remark, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_timesheet_summary_detail t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpTimesheetSummaryMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpTimesheetSummaryVo" id="ErpTimesheetSummaryResult">
</resultMap>
<select id="selectCustomErpTimesheetSummaryVoList" resultMap="ErpTimesheetSummaryResult">
select summary_id, tenant_id, summary_code, month_code, dept_id, user_id, standard_month_id, standard_days, total_project_hours, total_dept_hours, total_hours, staff_count, remark, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_timesheet_summary t
${ew.getCustomSqlSegment}
</select>
</mapper>
Loading…
Cancel
Save