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 ed3d88c0613bccf4ce0163346bbf07a56542e1c8..850b5392f7054efba386d0baf324b664db82319c 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); } }