From 96f1a1b4d7b4ffbc985f4f10b5c5b547ae865681 Mon Sep 17 00:00:00 2001 From: yinq Date: Thu, 9 Apr 2026 17:45:09 +0800 Subject: [PATCH] =?UTF-8?q?1.1.15=20=E9=A1=B9=E7=9B=AE=E5=B7=A5=E6=97=B6?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E6=A0=A1=E9=AA=8C=E7=A0=94=E5=8F=91=E5=AD=90?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ErpTimesheetInfoServiceImpl.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java index 7a9fe3c3..7f9f05e7 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java @@ -35,7 +35,9 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.dromara.oa.erp.domain.bo.ErpTimesheetInfoBo; import org.dromara.oa.erp.domain.vo.ErpTimesheetInfoVo; +import org.dromara.oa.erp.domain.ErpProjectInfo; import org.dromara.oa.erp.domain.ErpTimesheetInfo; +import org.dromara.oa.erp.mapper.ErpProjectInfoMapper; import org.dromara.oa.erp.mapper.ErpTimesheetInfoMapper; import org.dromara.oa.erp.service.IErpTimesheetInfoService; import org.springframework.transaction.annotation.Transactional; @@ -56,6 +58,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { private final ErpTimesheetInfoMapper baseMapper; + private final ErpProjectInfoMapper projectInfoMapper; + @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; @@ -158,7 +162,7 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(ErpTimesheetInfoBo bo) { ErpTimesheetInfo add = MapstructUtils.convert(bo, ErpTimesheetInfo.class); - validEntityBeforeSave(add); + validEntityBeforeSave(add, bo); // 自动生成工时单号 if (StringUtils.isBlank(add.getTimesheetCode())) { String timesheetCode = remoteCodeRuleService.selectCodeRuleCode("1015"); @@ -201,7 +205,7 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(ErpTimesheetInfoBo bo) { ErpTimesheetInfo update = MapstructUtils.convert(bo, ErpTimesheetInfo.class); - validEntityBeforeSave(update); + validEntityBeforeSave(update, bo); int row = baseMapper.updateById(update); if (row > 0) { @@ -241,8 +245,24 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(ErpTimesheetInfo entity) { - // TODO 做一些数据校验,如唯一约束 + private void validEntityBeforeSave(ErpTimesheetInfo entity, ErpTimesheetInfoBo bo) { + if (bo == null || CollUtil.isEmpty(bo.getTimesheetProjectList())) { + return; + } + for (ErpTimesheetProjectBo line : bo.getTimesheetProjectList()) { + Long projectId = line.getProjectId(); + if (projectId == null) { + continue; + } + ErpProjectInfo project = projectInfoMapper.selectById(projectId); + if (project == null) { + throw new ServiceException("项目工时所选项目不存在或已删除"); + } + // sub_project_flag=1:主项目标记「含有子项目」,工时须报在研发子项目上 + if ("1".equals(project.getSubProjectFlag())) { + throw new ServiceException("项目工时必须填报在研发子项目上,不能选择研发主项目"); + } + } } /**