|
|
|
|
@ -19,6 +19,7 @@ import org.dromara.oa.erp.domain.ErpTimesheetSummaryDetail;
|
|
|
|
|
import org.dromara.oa.erp.domain.bo.ErpTimesheetPreAllocBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.bo.PreAllocStaffAllocBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.bo.PreAllocTargetBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpTimesheetPreAllocVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.PreAllocDetailVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.PreAllocStaffAllocVo;
|
|
|
|
|
@ -214,6 +215,45 @@ public class ErpTimesheetPreAllocServiceImpl implements IErpTimesheetPreAllocSer
|
|
|
|
|
return detailVo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询当前部门指定月份已填报工时的来源预投项目
|
|
|
|
|
*
|
|
|
|
|
* @param monthCode 月份编码(YYYYMM)
|
|
|
|
|
* @return 来源预投项目列表
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<ErpProjectInfoVo> listAvailableSourceProjects(String monthCode) {
|
|
|
|
|
validateMonthCode(monthCode);
|
|
|
|
|
Long deptId = LoginHelper.getDeptId();
|
|
|
|
|
ErpTimesheetSummary summary = getSingleSummaryOrNull(monthCode, deptId);
|
|
|
|
|
if (summary == null) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<ErpTimesheetSummaryDetail> detailList = summaryDetailMapper.selectList(Wrappers.<ErpTimesheetSummaryDetail>lambdaQuery()
|
|
|
|
|
.select(ErpTimesheetSummaryDetail::getOriginalProjectId)
|
|
|
|
|
.eq(ErpTimesheetSummaryDetail::getSummaryId, summary.getSummaryId())
|
|
|
|
|
.eq(ErpTimesheetSummaryDetail::getIsProject, PROJECT_WORK)
|
|
|
|
|
.eq(ErpTimesheetSummaryDetail::getDelFlag, DEL_FLAG_NORMAL)
|
|
|
|
|
.isNotNull(ErpTimesheetSummaryDetail::getOriginalProjectId)
|
|
|
|
|
.gt(ErpTimesheetSummaryDetail::getOriginalHours, BigDecimal.ZERO));
|
|
|
|
|
List<Long> projectIds = detailList.stream()
|
|
|
|
|
.map(ErpTimesheetSummaryDetail::getOriginalProjectId)
|
|
|
|
|
.filter(Objects::nonNull)
|
|
|
|
|
.distinct()
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if (projectIds.isEmpty()) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return projectInfoMapper.selectVoList(Wrappers.<ErpProjectInfo>lambdaQuery()
|
|
|
|
|
.in(ErpProjectInfo::getProjectId, projectIds)
|
|
|
|
|
.eq(ErpProjectInfo::getProjectCategory, PRE_PROJECT_CATEGORY)
|
|
|
|
|
.eq(ErpProjectInfo::getDelFlag, DEL_FLAG_NORMAL)
|
|
|
|
|
.orderByAsc(ErpProjectInfo::getProjectCode)
|
|
|
|
|
.orderByAsc(ErpProjectInfo::getProjectName));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 新增预投工时分配
|
|
|
|
|
*
|
|
|
|
|
@ -349,6 +389,23 @@ public class ErpTimesheetPreAllocServiceImpl implements IErpTimesheetPreAllocSer
|
|
|
|
|
return summaries.get(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ErpTimesheetSummary getSingleSummaryOrNull(String monthCode, Long deptId) {
|
|
|
|
|
if (deptId == null) {
|
|
|
|
|
throw new ServiceException("当前登录用户未绑定部门,无法进行预投工时分配");
|
|
|
|
|
}
|
|
|
|
|
List<ErpTimesheetSummary> summaries = summaryMapper.selectList(Wrappers.<ErpTimesheetSummary>lambdaQuery()
|
|
|
|
|
.eq(ErpTimesheetSummary::getMonthCode, monthCode)
|
|
|
|
|
.eq(ErpTimesheetSummary::getDeptId, deptId)
|
|
|
|
|
.eq(ErpTimesheetSummary::getDelFlag, DEL_FLAG_NORMAL));
|
|
|
|
|
if (summaries.isEmpty()) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
if (summaries.size() > 1) {
|
|
|
|
|
throw new ServiceException("当前部门该月份存在多个月汇总工时,请先修正月汇总数据");
|
|
|
|
|
}
|
|
|
|
|
return summaries.get(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ErpTimesheetSummary lockSummary(Long summaryId) {
|
|
|
|
|
ErpTimesheetSummary summary = summaryMapper.selectOne(Wrappers.<ErpTimesheetSummary>lambdaQuery()
|
|
|
|
|
.eq(ErpTimesheetSummary::getSummaryId, summaryId)
|
|
|
|
|
|