From 1c7963182f68edca27baff6c5f612263ff280c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=98=8A=E9=A3=9E?= Date: Fri, 12 Sep 2025 14:17:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E4=BF=AE=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pRepairFormProjectDispatchServiceImpl.java | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/maintain-business/src/main/java/com/maintain/business/service/impl/ErpRepairFormProjectDispatchServiceImpl.java b/maintain-business/src/main/java/com/maintain/business/service/impl/ErpRepairFormProjectDispatchServiceImpl.java index ed3d88c..850b539 100644 --- a/maintain-business/src/main/java/com/maintain/business/service/impl/ErpRepairFormProjectDispatchServiceImpl.java +++ b/maintain-business/src/main/java/com/maintain/business/service/impl/ErpRepairFormProjectDispatchServiceImpl.java @@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Collection; @@ -124,6 +125,12 @@ public class ErpRepairFormProjectDispatchServiceImpl implements IErpRepairFormPr baseMapper.delete(lqw); // 汇总原总工时 + //总工时均分 + BigDecimal hour = formProject.getStandardManHour().divide( + BigDecimal.valueOf(bo.getDispatchIdList().size()), 1, RoundingMode.HALF_DOWN + ); + BigDecimal totalHour = hour.multiply(BigDecimal.valueOf(bo.getDispatchIdList().size())); + BigDecimal lostHour = formProject.getStandardManHour().subtract(totalHour); // 批量新增派工人员列表 List collect = bo.getDispatchIdList().stream().map(item -> { ErpRepairFormProjectDispatch projectDispatch = new ErpRepairFormProjectDispatch(); @@ -140,17 +147,20 @@ public class ErpRepairFormProjectDispatchServiceImpl implements IErpRepairFormPr projectDispatch.setMaintainUserName(userVo.getName()); projectDispatch.setMaintainJobNumber(userVo.getJobNumber()); projectDispatch.setMaintainUserState(userVo.getState()); - BigDecimal hour = formProject.getStandardManHour().divide( - BigDecimal.valueOf(bo.getDispatchIdList().size()), 2, RoundingMode.HALF_UP - ); projectDispatch.setDispatchManHour(hour); projectDispatch.setActualManHour(hour); // projectDispatch.setDeductManHour(hour); - // 汇总实际总工时 - formProject.setActualTime(hour); return projectDispatch; }).collect(Collectors.toList()); + //处理最后一个 + if (bo.getDispatchIdList().size() > 1) { + ErpRepairFormProjectDispatch projectDispatch = collect.get(collect.size() - 1); + projectDispatch.setDispatchManHour(projectDispatch.getDispatchManHour().add(lostHour)); + projectDispatch.setActualManHour(hour); + } + formProject.setIsDispatch(IsEnableStatus.YES.getCode()); + formProject.setActualTime(formProject.getStandardManHour()); projectMapper.updateById(formProject); return baseMapper.insertBatch(collect); } @@ -167,14 +177,7 @@ public class ErpRepairFormProjectDispatchServiceImpl implements IErpRepairFormPr projectDispatch.setDeductManHour(bo.getDeductManHour()); boolean flag = baseMapper.updateById(projectDispatch) > 0; - List formProjectDispatches = baseMapper.selectList(Wrappers.lambdaQuery() - .eq(ErpRepairFormProjectDispatch::getRepairFormProjectId, projectDispatch.getRepairFormProjectId())); - //计算总工时 - BigDecimal reduce = formProjectDispatches.stream().map(ErpRepairFormProjectDispatch::getActualManHour).reduce(BigDecimal.ZERO, BigDecimal::add); - ErpRepairFormProject project = new ErpRepairFormProject(); - project.setId(projectDispatch.getRepairFormProjectId()); - project.setActualTime(reduce); - projectMapper.updateById(project); + updateFormProject(projectDispatch.getRepairFormProjectId()); return flag; } @@ -216,10 +219,34 @@ public class ErpRepairFormProjectDispatchServiceImpl implements IErpRepairFormPr * 批量删除报修单-报修项目-派工 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } - return baseMapper.deleteBatchIds(ids) > 0; + Iterator iterator = ids.iterator(); + Long id = iterator.hasNext() ? iterator.next() : null; + ErpRepairFormProjectDispatch projectDispatch = baseMapper.selectById(id); + + boolean flag = baseMapper.deleteBatchIds(ids) > 0; + + updateFormProject(projectDispatch.getRepairFormProjectId()); + + return flag; + } + + /** + * 更新报修单-报修项目实际时间 + * @param projectId + */ + private void updateFormProject(Long projectId){ + List formProjectDispatches = baseMapper.selectList(Wrappers.lambdaQuery() + .eq(ErpRepairFormProjectDispatch::getRepairFormProjectId, projectId)); + //计算总工时 + BigDecimal reduce = formProjectDispatches.stream().map(ErpRepairFormProjectDispatch::getActualManHour).reduce(BigDecimal.ZERO, BigDecimal::add); + ErpRepairFormProject project = new ErpRepairFormProject(); + project.setId(projectId); + project.setActualTime(reduce); + projectMapper.updateById(project); } } -- 2.22.0