diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetSummaryDetailBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetSummaryDetailBo.java index 83185caf..9d0f5d24 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetSummaryDetailBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetSummaryDetailBo.java @@ -33,6 +33,11 @@ public class ErpTimesheetSummaryDetailBo extends BaseEntity { @NotNull(message = "关联汇总主表ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long summaryId; + /** + * 关联汇总主表编号 + */ + private String summaryCode; + /** * 排序号 */ @@ -110,5 +115,10 @@ public class ErpTimesheetSummaryDetailBo extends BaseEntity { */ private String remark; + /** + * 汇总明细ID列表(逗号分隔) + */ + private String summaryDetailIds; + } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpTimesheetSummaryDetailVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpTimesheetSummaryDetailVo.java index 3f25de23..c3d92589 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpTimesheetSummaryDetailVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpTimesheetSummaryDetailVo.java @@ -32,25 +32,27 @@ public class ErpTimesheetSummaryDetailVo implements Serializable { /** * 汇总明细ID */ - @ExcelProperty(value = "汇总明细ID") private Long summaryDetailId; /** * 关联汇总主表ID */ - @ExcelProperty(value = "关联汇总主表ID") private Long summaryId; + /** + * 关联汇总主表编号 + */ + @ExcelProperty(value = "关联汇总主表编号") + private String summaryCode; + /** * 排序号 */ - @ExcelProperty(value = "排序号") private Integer sortOrder; /** * 员工用户ID */ - @ExcelProperty(value = "员工用户ID") private Long staffUserId; /** @@ -69,49 +71,47 @@ public class ErpTimesheetSummaryDetailVo implements Serializable { /** * 原项目ID(填报时的项目) */ - @ExcelProperty(value = "原项目ID(填报时的项目)") private Long originalProjectId; /** * 原项目编码(冗余) */ - @ExcelProperty(value = "原项目编码(冗余)") + @ExcelProperty(value = "原项目编码") private String originalProjectCode; /** * 原项目名称(冗余) */ - @ExcelProperty(value = "原项目名称(冗余)") + @ExcelProperty(value = "原项目名称") private String originalProjectName; /** * 原项目工时(天) */ - @ExcelProperty(value = "原项目工时(天)") + @ExcelProperty(value = "原项目工时") private BigDecimal originalHours; /** * 修改后项目ID */ - @ExcelProperty(value = "修改后项目ID") private Long adjustedProjectId; /** * 修改后项目编码(冗余) */ - @ExcelProperty(value = "修改后项目编码(冗余)") + @ExcelProperty(value = "修改后项目编码") private String adjustedProjectCode; /** * 修改后项目名称(冗余) */ - @ExcelProperty(value = "修改后项目名称(冗余)") + @ExcelProperty(value = "修改后项目名称") private String adjustedProjectName; /** * 修改后工时(天) */ - @ExcelProperty(value = "修改后工时(天)") + @ExcelProperty(value = "修改后工时") private BigDecimal adjustedHours; /** diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpTimesheetSummaryDetailMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpTimesheetSummaryDetailMapper.java index 00de5a60..ddfd1c7c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpTimesheetSummaryDetailMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpTimesheetSummaryDetailMapper.java @@ -17,21 +17,6 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface ErpTimesheetSummaryDetailMapper extends BaseMapperPlus { - /** - * 查询月汇总工时明细列表 - * - * @param page 分页 - * @param queryWrapper 条件 - * @return 月汇总工时明细集合 - */ - public Page selectCustomErpTimesheetSummaryDetailVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); - /** - * 查询月汇总工时明细列表 - * - * @param queryWrapper 条件 - * @return 月汇总工时明细集合 - */ - public List selectCustomErpTimesheetSummaryDetailVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryDetailServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryDetailServiceImpl.java index cd7af43a..055ef810 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryDetailServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryDetailServiceImpl.java @@ -12,6 +12,7 @@ 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.ErpTimesheetSummary; import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail; import org.dromara.oa.erp.mapper.ErpTimesheetSummaryDetailMapper; import org.dromara.oa.erp.service.IErpTimesheetSummaryDetailService; @@ -50,12 +51,11 @@ public class ErpTimesheetSummaryDetailServiceImpl implements IErpTimesheetSummar * @param pageQuery 分页参数 * @return 月汇总工时明细分页列表 */ - @Override - public TableDataInfo queryPageList(ErpTimesheetSummaryDetailBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } + @Override + public TableDataInfo queryPageList(ErpTimesheetSummaryDetailBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return TableDataInfo.build(baseMapper.selectJoinPage(pageQuery.build(), ErpTimesheetSummaryDetailVo.class, lqw)); + } /** * 查询符合条件的月汇总工时明细列表 @@ -66,15 +66,18 @@ public class ErpTimesheetSummaryDetailServiceImpl implements IErpTimesheetSummar @Override public List queryList(ErpTimesheetSummaryDetailBo bo) { MPJLambdaWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + return baseMapper.selectJoinList(ErpTimesheetSummaryDetailVo.class, lqw); } private MPJLambdaWrapper buildQueryWrapper(ErpTimesheetSummaryDetailBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpTimesheetSummaryDetail.class) .selectAll(ErpTimesheetSummaryDetail.class) + .selectAs(ErpTimesheetSummary::getSummaryCode, ErpTimesheetSummaryDetailVo::getSummaryCode) + .leftJoin(ErpTimesheetSummary.class, ErpTimesheetSummary::getSummaryId, ErpTimesheetSummaryDetail::getSummaryId) .eq(ErpTimesheetSummaryDetail::getDelFlag, "0") .eq(bo.getSummaryId() != null, ErpTimesheetSummaryDetail::getSummaryId, bo.getSummaryId()) + .eq(StringUtils.isNotBlank(bo.getSummaryCode()), ErpTimesheetSummary::getSummaryCode, bo.getSummaryCode()) .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()) @@ -89,7 +92,8 @@ public class ErpTimesheetSummaryDetailServiceImpl implements IErpTimesheetSummar .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()) -; + .in(StringUtils.isNotBlank(bo.getSummaryDetailIds()), ErpTimesheetSummaryDetail::getSummaryDetailId, + StringUtils.isNotBlank(bo.getSummaryDetailIds()) ? List.of(bo.getSummaryDetailIds().split(",")) : null); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryServiceImpl.java index 9e44d225..dfb7bea9 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetSummaryServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.oa.erp.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.core.utils.MapstructUtils; @@ -118,8 +119,23 @@ public class ErpTimesheetSummaryServiceImpl implements IErpTimesheetSummaryServi @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(ErpTimesheetSummaryBo bo) { if (StringUtils.isBlank(bo.getSummaryCode())) { - // 生成规则:TS-月份-4位随机数 - bo.setSummaryCode("TS" + bo.getMonthCode() + (int) ((Math.random() * 9 + 1) * 1000)); + // 生成规则:TS + 月份代码(yyyyMM) + 4位递增序列(0001) + String prefix = "TS" + bo.getMonthCode(); + ErpTimesheetSummary lastOne = baseMapper.selectOne(new LambdaQueryWrapper() + .likeRight(ErpTimesheetSummary::getSummaryCode, prefix) + .orderByDesc(ErpTimesheetSummary::getSummaryCode) + .last("limit 1")); + int nextNum = 1; + if (lastOne != null) { + String lastCode = lastOne.getSummaryCode(); + if (lastCode.length() >= 4) { + try { + nextNum = Integer.parseInt(lastCode.substring(lastCode.length() - 4)) + 1; + } catch (NumberFormatException ignored) { + } + } + } + bo.setSummaryCode(prefix + String.format("%04d", nextNum)); } if (bo.getUserId() == null) { bo.setUserId(LoginHelper.getUserId()); diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryDetailMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryDetailMapper.xml index ce7c2fa8..7dd50311 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryDetailMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryDetailMapper.xml @@ -6,9 +6,6 @@ - + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryMapper.xml index d303db20..68cfab38 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpTimesheetSummaryMapper.xml @@ -39,6 +39,7 @@ i.user_id AS staffUserId, u.nick_name AS staffName, '0' AS isProject, + GROUP_CONCAT(DISTINCT d.work_description SEPARATOR '; ') AS workDescription, SUM(d.hours) AS originalHours FROM erp_timesheet_info i JOIN erp_timesheet_dept d ON i.timesheet_id = d.timesheet_id