|
|
@@ -77,6 +77,8 @@ public class GovProjectCollectionManage { |
|
|
|
|
|
|
|
private final IGovBizProjectBaseinfoService baseinfoService; |
|
|
|
|
|
|
|
private final IGovOperationProjectBaseinfoService operationProjectBaseinfoService; |
|
|
|
|
|
|
|
private final IGovBizProjectApproveService approveService; |
|
|
|
|
|
|
|
private final IGovBizProjectCimplementService cimplementService; |
|
|
@@ -187,6 +189,62 @@ public class GovProjectCollectionManage { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 运维项目归集列表 |
|
|
|
* @param req |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public PageVo<GovBizProjectListVO> operationList(ProjectListReq req) { |
|
|
|
Page<GovOperationProjectBaseinfo> page = req.page(); |
|
|
|
LambdaQueryWrapper<GovOperationProjectBaseinfo> wrapper = Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) |
|
|
|
.like(StringUtils.isNotBlank(req.getProjectName()),GovOperationProjectBaseinfo::getBaseProjName,req.getProjectName()) |
|
|
|
.like(StringUtils.isNotBlank(req.getBuildOrg()),GovOperationProjectBaseinfo::getBaseBuildDeprt,req.getBuildOrg()) |
|
|
|
.eq(StringUtils.isNotBlank(req.getAreaCode()),GovOperationProjectBaseinfo::getBaseAreaCode,req.getAreaCode() + BizConst.NINE_AREA_CODE_LAST) |
|
|
|
.eq(StringUtils.isNotBlank(req.getRegionCode()),GovOperationProjectBaseinfo::getBaseAreaCode,req.getRegionCode() + BizConst.NINE_AREA_CODE_LAST) |
|
|
|
.gt(Objects.nonNull(req.getCreateOnMin()),GovOperationProjectBaseinfo::getTongTime,req.getCreateOnMin()) |
|
|
|
.le(Objects.nonNull(req.getCreateOnMax()),GovOperationProjectBaseinfo::getTongTime,req.getCreateOnMax()) |
|
|
|
.eq(StringUtils.isNotBlank(req.getProjectType()),GovOperationProjectBaseinfo::getBaseProjType,req.getProjectType()) |
|
|
|
.eq(GovOperationProjectBaseinfo::getDeleted,Boolean.FALSE) |
|
|
|
.orderByDesc(GovOperationProjectBaseinfo::getBizTime); |
|
|
|
operationProjectBaseinfoService.page(page,wrapper); |
|
|
|
|
|
|
|
if(CollUtil.isEmpty(page.getRecords())){ |
|
|
|
return PageVo.empty(); |
|
|
|
} |
|
|
|
|
|
|
|
List<String> projIds = page.getRecords().stream() |
|
|
|
.filter(p -> Objects.nonNull(p) && StringUtils.isNotBlank(p.getBaseProjId())) |
|
|
|
.map(GovOperationProjectBaseinfo::getBaseProjId).collect(Collectors.toList()); |
|
|
|
|
|
|
|
Map<String,GovBizProjectApply> applyMap = Maps.newHashMap(); |
|
|
|
if(CollUtil.isNotEmpty(projIds)){ |
|
|
|
List<GovBizProjectApply> applys = projectApplyService.list(Wrappers.lambdaQuery(GovBizProjectApply.class) |
|
|
|
.in(GovBizProjectApply::getBaseProjId,projIds) |
|
|
|
.eq(GovBizProjectApply::getDeleted,Boolean.FALSE)); |
|
|
|
applyMap = applys.stream().collect(Collectors.toMap(GovBizProjectApply::getBaseProjId,a -> a)); |
|
|
|
} |
|
|
|
|
|
|
|
Map<String, GovBizProjectApply> finalApplyMap = applyMap; |
|
|
|
List<GovBizProjectListVO> res = page.getRecords().stream().map(p -> { |
|
|
|
GovBizProjectListVO vo = new GovBizProjectListVO(); |
|
|
|
vo.setBaseAreaCode(p.getBaseAreaCode()); |
|
|
|
vo.setBaseAreaName(p.getBaseAreaName()); |
|
|
|
vo.setBaseBuildDeprt(p.getBaseBuildDeprt()); |
|
|
|
vo.setBaseBuildDeprtDing(p.getBaseBuildDeprtDing()); |
|
|
|
vo.setBaseProjId(p.getBaseProjId()); |
|
|
|
vo.setBaseProjName(p.getBaseProjName()); |
|
|
|
if(finalApplyMap.containsKey(p.getBaseProjId())){ |
|
|
|
GovBizProjectApply apply = finalApplyMap.get(p.getBaseProjId()); |
|
|
|
vo.setBaseProjDeclAmount(apply.getBaseProjDeclAmount()); |
|
|
|
vo.setBaseProjTotalAmount(apply.getBaseProjTotalAmount()); |
|
|
|
vo.setBaseProjSetYear(apply.getBaseProjSetYear()); |
|
|
|
} |
|
|
|
return vo; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
|
|
|
return PageVo.of(res,page.getTotal()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 草稿箱列表 |
|
|
|
* @param req |
|
|
|
* @return |
|
|
@@ -330,6 +388,68 @@ public class GovProjectCollectionManage { |
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
public GovBizProjectDetailVO operationDetail(String projId) { |
|
|
|
GovBizProjectDetailVO res = new GovBizProjectDetailVO(); |
|
|
|
//1.先查 基本信息 |
|
|
|
GovOperationProjectBaseinfo baseinfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) |
|
|
|
.eq(GovOperationProjectBaseinfo::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovOperationProjectBaseinfo::getBizTime) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
if(Objects.isNull(baseinfo)){ |
|
|
|
return res; |
|
|
|
} |
|
|
|
res.setBaseProjId(baseinfo.getBaseProjId()); |
|
|
|
res.setBaseProjName(baseinfo.getBaseProjName()); |
|
|
|
res.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfoVO.class)); |
|
|
|
|
|
|
|
//2.再查 申报信息 |
|
|
|
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) |
|
|
|
.eq(GovBizProjectApply::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovBizProjectApply::getBizTime) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
if(Objects.nonNull(apply)){ |
|
|
|
res.setApply(BeanUtil.copyProperties(apply, GovBizProjectApplyVO.class)); |
|
|
|
} |
|
|
|
|
|
|
|
//3.再查 审批信息 |
|
|
|
GovBizProjectApprove approve = approveService.getOne(Wrappers.lambdaQuery(GovBizProjectApprove.class) |
|
|
|
.eq(GovBizProjectApprove::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovBizProjectApprove::getBizTime) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
if(Objects.nonNull(approve)){ |
|
|
|
res.setApprove(BeanUtil.copyProperties(approve, GovBizProjectApproveVO.class)); |
|
|
|
} |
|
|
|
|
|
|
|
//4 对应查询 实施项目还是运维项目 |
|
|
|
GovBizProjectCimplement cimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class) |
|
|
|
.eq(GovBizProjectCimplement::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovBizProjectCimplement::getBizTime) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
if(Objects.nonNull(cimplement)){ |
|
|
|
res.setCimplement(BeanUtil.copyProperties(cimplement, GovBizProjectCimplementVO.class)); |
|
|
|
} |
|
|
|
GovBizProjectMimplement mimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class) |
|
|
|
.eq(GovBizProjectMimplement::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovBizProjectMimplement::getBizTime) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
if(Objects.nonNull(mimplement)){ |
|
|
|
res.setMimplement(BeanUtil.copyProperties(mimplement, GovBizProjectMimplementVO.class)); |
|
|
|
} |
|
|
|
|
|
|
|
//5.最后查询采购信息 |
|
|
|
List<GovBizProjectProcure> procures = procureService.list(Wrappers.lambdaQuery(GovBizProjectProcure.class) |
|
|
|
.eq(GovBizProjectProcure::getBaseProjId, projId) |
|
|
|
.orderByDesc(GovBizProjectProcure::getBizTime)); |
|
|
|
if(CollUtil.isNotEmpty(procures)){ |
|
|
|
res.setProcures(procures.stream() |
|
|
|
.map(p -> BeanUtil.copyProperties(p, GovBizProjectProcureVO.class)) |
|
|
|
.collect(Collectors.toList())); |
|
|
|
} |
|
|
|
|
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 草稿箱详情 |
|
|
|
* @param draftId |
|
|
@@ -603,6 +723,214 @@ public class GovProjectCollectionManage { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 运维项目保存 |
|
|
|
* @param saveDTO |
|
|
|
* @param user |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public String operationSave(GovBizProjectSaveDTO saveDTO, UserInfoDetails user) { |
|
|
|
if(Objects.isNull(user)){ |
|
|
|
user = LoginUserUtil.loginUserDetail(); |
|
|
|
} |
|
|
|
|
|
|
|
GovBizProjectBaseinfoDTO base = saveDTO.getBaseinfo(); |
|
|
|
String baseProjId = saveDTO.getBaseProjId(); |
|
|
|
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST; |
|
|
|
String baseProjName = base.getBaseProjName(); |
|
|
|
|
|
|
|
//1.保存基本信息 |
|
|
|
GovBizProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo(); |
|
|
|
baseinfo.setBaseProjId(baseProjId); |
|
|
|
baseinfo.setBaseProjName(baseProjName); |
|
|
|
baseinfo.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE); |
|
|
|
GovOperationProjectBaseinfo oldBaseInfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) |
|
|
|
.eq(GovOperationProjectBaseinfo::getBaseProjId, baseProjId) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
//项目名去重 |
|
|
|
checkNameOperation(baseProjName,baseProjId); |
|
|
|
GovOperationProjectBaseinfo saveBase = BeanUtil.copyProperties(baseinfo,GovOperationProjectBaseinfo.class); |
|
|
|
saveBase.setBaseProjName(baseProjName); |
|
|
|
saveBase.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE); |
|
|
|
if(Objects.nonNull(oldBaseInfo)){ |
|
|
|
saveBase.setId(oldBaseInfo.getId()); |
|
|
|
saveBase.setBaseAreaCode(null); |
|
|
|
}else{ |
|
|
|
saveBase.setTongTime(LocalDateTime.now()); |
|
|
|
saveBase.setBaseAreaCode(baseAreaCode); |
|
|
|
saveBase.setBaseAreaName(regionCacheHelper.getRegionName(user.getRegionCode(),RegionConst.RL_COUNTY)); |
|
|
|
} |
|
|
|
saveBase.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveBase.setBizTime(LocalDateTime.now()); |
|
|
|
saveBase.setUpdateBy(user.getUsername()); |
|
|
|
saveBase.setUpdateOn(LocalDateTime.now()); |
|
|
|
|
|
|
|
//如果是新增的话 要生成 项目编号 |
|
|
|
if(StringUtils.isBlank(baseProjId) || BizProjectContant.ProjectCollection.DRAFT.equals(baseProjId)){ |
|
|
|
baseProjId = generateProjectCodeUtil.generateProjectCode(saveDTO); |
|
|
|
saveBase.setBaseProjId(baseProjId); |
|
|
|
} |
|
|
|
|
|
|
|
operationProjectBaseinfoService.saveOrUpdate(saveBase); |
|
|
|
|
|
|
|
// 2.保存 申报信息 |
|
|
|
GovBizProjectApplyDTO apply = saveDTO.getApply(); |
|
|
|
if(Objects.nonNull(apply)){ |
|
|
|
apply.setBaseProjId(baseProjId); |
|
|
|
apply.setBaseProjName(baseProjName); |
|
|
|
GovBizProjectApply oldApply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) |
|
|
|
.eq(GovBizProjectApply::getBaseProjId, baseProjId) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
GovBizProjectApply saveApply = BeanUtil.copyProperties(apply,GovBizProjectApply.class); |
|
|
|
saveApply.setBaseProjId(baseProjId); |
|
|
|
if(Objects.nonNull(oldApply)){ |
|
|
|
saveApply.setId(oldApply.getId()); |
|
|
|
}else{ |
|
|
|
saveApply.setTongTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
if(Objects.nonNull(saveApply.getBaseProjStartTime()) && |
|
|
|
Objects.nonNull(saveApply.getBaseProjEndTime())){ |
|
|
|
saveApply.setBaseProjDuration(convertMonth(saveApply.getBaseProjStartTime(), |
|
|
|
saveApply.getBaseProjEndTime())); |
|
|
|
} |
|
|
|
saveApply.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveApply.setBizTime(LocalDateTime.now()); |
|
|
|
saveApply.setUpdateBy(user.getUsername()); |
|
|
|
saveApply.setUpdateOn(LocalDateTime.now()); |
|
|
|
if(projectApplyService.saveOrUpdate(saveApply)){ |
|
|
|
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssApply(apply,oldApply,saveApply)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 3.保存 审批信息 |
|
|
|
GovBizProjectApproveDTO approve = saveDTO.getApprove(); |
|
|
|
if(Objects.nonNull(approve)){ |
|
|
|
approve.setBaseProjId(baseProjId); |
|
|
|
approve.setBaseProjName(baseProjName); |
|
|
|
GovBizProjectApprove oldApprove = approveService.getOne(Wrappers.lambdaQuery(GovBizProjectApprove.class) |
|
|
|
.eq(GovBizProjectApprove::getBaseProjId, baseProjId) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
GovBizProjectApprove saveApprove = BeanUtil.copyProperties(approve,GovBizProjectApprove.class); |
|
|
|
saveApprove.setBaseProjId(baseProjId); |
|
|
|
if(Objects.nonNull(oldApprove)){ |
|
|
|
saveApprove.setId(oldApprove.getId()); |
|
|
|
}else{ |
|
|
|
saveApprove.setTongTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
saveApprove.setBizTime(LocalDateTime.now()); |
|
|
|
saveApprove.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveApprove.setUpdateBy(user.getUsername()); |
|
|
|
saveApprove.setUpdateOn(LocalDateTime.now()); |
|
|
|
if(approveService.saveOrUpdate(saveApprove)){ |
|
|
|
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssApprove(approve,oldApprove,saveApprove)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 4.保存 建设项目 实施信息 |
|
|
|
GovBizProjectCimplementDTO cimplement = saveDTO.getCimplement(); |
|
|
|
if(Objects.nonNull(cimplement)){ |
|
|
|
cimplement.setBaseProjId(baseProjId); |
|
|
|
cimplement.setBaseProjName(baseProjName); |
|
|
|
cimplement.setBaseBidCode(baseProjId); |
|
|
|
cimplement.setBaseBidName(baseProjName); |
|
|
|
GovBizProjectCimplement oldCimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class) |
|
|
|
.eq(GovBizProjectCimplement::getBaseProjId, baseProjId) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
GovBizProjectCimplement saveCimplement = BeanUtil.copyProperties(cimplement,GovBizProjectCimplement.class); |
|
|
|
saveCimplement.setBaseProjId(baseProjId); |
|
|
|
saveCimplement.setBaseBidCode(baseProjId); |
|
|
|
saveCimplement.setBaseBidName(baseProjName); |
|
|
|
if(Objects.nonNull(oldCimplement)){ |
|
|
|
saveCimplement.setId(oldCimplement.getId()); |
|
|
|
}else{ |
|
|
|
saveCimplement.setTongTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
saveCimplement.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveCimplement.setBizTime(LocalDateTime.now()); |
|
|
|
saveCimplement.setUpdateBy(user.getUsername()); |
|
|
|
saveCimplement.setUpdateOn(LocalDateTime.now()); |
|
|
|
if(cimplementService.saveOrUpdate(saveCimplement)){ |
|
|
|
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssCimplement(cimplement,oldCimplement,saveCimplement)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 5.保存 运维项目 实施信息 |
|
|
|
GovBizProjectMimplementDTO mimplement = saveDTO.getMimplement(); |
|
|
|
if(Objects.nonNull(mimplement)){ |
|
|
|
mimplement.setBaseProjId(baseProjId); |
|
|
|
mimplement.setBaseProjName(baseProjName); |
|
|
|
mimplement.setBaseBidCode(baseProjId); |
|
|
|
mimplement.setBaseBidName(baseProjName); |
|
|
|
GovBizProjectMimplement oldMimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class) |
|
|
|
.eq(GovBizProjectMimplement::getBaseProjId, baseProjId) |
|
|
|
.last(BizConst.LIMIT_1)); |
|
|
|
|
|
|
|
GovBizProjectMimplement saveMimplement = BeanUtil.copyProperties(mimplement,GovBizProjectMimplement.class); |
|
|
|
saveMimplement.setBaseProjId(baseProjId); |
|
|
|
saveMimplement.setBaseBidCode(baseProjId); |
|
|
|
saveMimplement.setBaseBidName(baseProjName); |
|
|
|
if(Objects.nonNull(oldMimplement)){ |
|
|
|
saveMimplement.setId(oldMimplement.getId()); |
|
|
|
}else{ |
|
|
|
saveMimplement.setTongTime(LocalDateTime.now()); |
|
|
|
} |
|
|
|
if(Objects.nonNull(saveBase.getAreaCode())){ |
|
|
|
saveMimplement.setAreaCode(saveBase.getAreaCode()); |
|
|
|
} |
|
|
|
saveMimplement.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveMimplement.setBizTime(LocalDateTime.now()); |
|
|
|
saveMimplement.setUpdateBy(user.getUsername()); |
|
|
|
saveMimplement.setUpdateOn(LocalDateTime.now()); |
|
|
|
if(mimplementService.saveOrUpdate(saveMimplement)){ |
|
|
|
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssMimplement(mimplement,oldMimplement,saveMimplement)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 6.保存 采购信息 |
|
|
|
List<GovBizProjectProcureDTO> procures = saveDTO.getProcures(); |
|
|
|
|
|
|
|
if(Objects.nonNull(procures)){ |
|
|
|
procureService.remove(Wrappers.lambdaQuery(GovBizProjectProcure.class) |
|
|
|
.eq(GovBizProjectProcure::getBaseProjId,baseProjId)); |
|
|
|
|
|
|
|
String finalBaseProjId = baseProjId; |
|
|
|
UserInfoDetails finalUser = user; |
|
|
|
|
|
|
|
Integer index = 1; |
|
|
|
for(GovBizProjectProcureDTO procure : procures){ |
|
|
|
procure.setBaseProjId(finalBaseProjId); |
|
|
|
procure.setBaseProjName(baseProjName); |
|
|
|
procure.setBaseBidCode(finalBaseProjId + StrPool.DASH + String.format(StrPool.FORMAT_DATE_SINGLE_DIGITS,index)); |
|
|
|
GovBizProjectProcure saveProcure = BeanUtil.copyProperties(procure,GovBizProjectProcure.class); |
|
|
|
saveProcure.setBaseProjId(finalBaseProjId); |
|
|
|
saveProcure.setId(null); |
|
|
|
saveProcure.setAreaCode(RegionConst.RC_LS); |
|
|
|
saveProcure.setTongTime(LocalDateTime.now()); |
|
|
|
saveProcure.setBizTime(LocalDateTime.now()); |
|
|
|
saveProcure.setUpdateBy(finalUser.getUsername()); |
|
|
|
saveProcure.setUpdateOn(LocalDateTime.now()); |
|
|
|
if(procureService.save(saveProcure)){ |
|
|
|
threadPoolTaskScheduler.execute(() -> uploadFileToProvincialOssProcure(procure,null,saveProcure)); |
|
|
|
} |
|
|
|
index++; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//7. 推送数据(改为定时推送了) |
|
|
|
// pushProject(saveDTO); |
|
|
|
//如果是草稿箱来的 就要删除 |
|
|
|
if(Objects.nonNull(saveDTO.getDraftId())){ |
|
|
|
draftService.removeById(saveDTO.getDraftId()); |
|
|
|
} |
|
|
|
|
|
|
|
return BizConst.SAVE_SUCCESS; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算2个时间的月份 |
|
|
|
* @param baseProjStartTime |
|
|
|
* @param baseProjEndTime |
|
|
@@ -789,6 +1117,14 @@ public class GovProjectCollectionManage { |
|
|
|
.throwMessage("项目名重复"); |
|
|
|
} |
|
|
|
|
|
|
|
private void checkNameOperation(String baseProjName, String baseProjId) { |
|
|
|
VUtils.isTrue(operationProjectBaseinfoService.count(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) |
|
|
|
.eq(GovOperationProjectBaseinfo::getBaseProjName,baseProjName) |
|
|
|
.eq(GovOperationProjectBaseinfo::getDeleted,Boolean.FALSE) |
|
|
|
.ne(GovOperationProjectBaseinfo::getBaseProjId,baseProjId)) > 0L) |
|
|
|
.throwMessage("项目名重复"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 推送项目 |
|
|
|
* @param saveDTO |
|
|
|