PmDemandServiceImpl.java 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  1. package com.ozs.pm.service.impl;
  2. import java.util.*;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.ozs.base.domain.BaseExpert;
  9. import com.ozs.base.service.BaseExpertService;
  10. import com.ozs.common.enums.*;
  11. import com.ozs.common.utils.DateUtils;
  12. import com.ozs.common.utils.RandomUtil;
  13. import com.ozs.common.utils.StringUtils;
  14. import com.ozs.common.utils.bean.BeanUtils;
  15. import com.ozs.pm.doman.*;
  16. import com.ozs.pm.doman.vo.requestVo.*;
  17. import com.ozs.pm.doman.vo.responseVo.*;
  18. import com.ozs.pm.mapper.PmDemandMapper;
  19. import com.ozs.pm.service.*;
  20. import com.ozs.system.domain.SysFileInfo;
  21. import com.ozs.system.domain.SysFileRef;
  22. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  23. import com.ozs.system.service.ISysDeptService;
  24. import com.ozs.system.service.ISysDictDataService;
  25. import com.ozs.system.service.SysFileRefService;
  26. import com.ozs.system.service.SysFileService;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.util.CollectionUtils;
  31. import org.springframework.util.ObjectUtils;
  32. /**
  33. * 采购需求Service业务层处理
  34. *
  35. * @author ruoyi
  36. * @date 2023-01-16
  37. */
  38. @Service
  39. public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> implements IPmDemandService {
  40. @Autowired
  41. private IPmDemandEquipService iPmDemandEquipService;
  42. @Autowired
  43. private IPmDemandMaterialsService iPmDemandMaterialsService;
  44. @Autowired
  45. private IPmDemandServeService iPmDemandServeService;
  46. @Autowired
  47. private IPmDemandEngineeringService iPmDemandEngineeringService;
  48. @Autowired
  49. private ISysDeptService deptService;
  50. @Autowired
  51. private ISysDictDataService dictDataService;
  52. @Autowired
  53. private SysFileService fileService;
  54. @Autowired
  55. private SysFileRefService sysFileRefService;
  56. @Autowired
  57. private IPmFlowChartService iPmFlowChartService;
  58. @Autowired
  59. private PmReleaseAnnouncementService pmReleaseAnnouncementService;
  60. @Autowired
  61. private BaseExpertService baseExpertService;
  62. @Autowired
  63. private PmDemandExpertRefService pmDemandExpertRefService;
  64. @Autowired
  65. private PmBidOpeningService pmBidOpeningService;
  66. @Autowired
  67. private PmBidWinningService pmBidWinningService;
  68. @Autowired
  69. private PmBidFailureService pmBidFailureService;
  70. /**
  71. * 查询采购需求
  72. *
  73. * @param demandId 采购需求主键
  74. * @return 采购需求
  75. */
  76. @Override
  77. public PmDemandResVo selectPmDemandByDemandId(Long demandId,String detailType) {
  78. PmDemand pmDemand = this.getById(demandId);
  79. if(pmDemand != null){
  80. PmDemandResVo vo = new PmDemandResVo();
  81. vo.setDemandId(demandId);
  82. if("1".equals(detailType)) { //项目计划
  83. BeanUtils.copyProperties(pmDemand, vo);
  84. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(vo.getPurchaseDeptId()).get("sysDept");
  85. if(sysDeptResponseVo != null){
  86. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  87. }
  88. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
  89. if(StringUtils.isNotEmpty(purchaseServicesName)){
  90. vo.setPurchaseServicesName(purchaseServicesName);
  91. }
  92. //采购需求附件
  93. HashMap<String, String> demandFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND.getType());
  94. if(demandFileMap != null){
  95. vo.setDemandFileMap(demandFileMap);
  96. }
  97. //项目类型
  98. for (ProjectTypes value : ProjectTypes.values()) {
  99. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  100. vo.setProjectTypeName(value.getInfo());
  101. break;
  102. }
  103. }
  104. //是否为超限额计划
  105. for (IsExcess value : IsExcess.values()) {
  106. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  107. vo.setIsExcessName(value.getInfo());
  108. break;
  109. }
  110. }
  111. //采购方式
  112. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  113. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  114. vo.setPurchaseModeName(value.getInfo());
  115. break;
  116. }
  117. }
  118. //项目属性
  119. for (ProjectAttribute value : ProjectAttribute.values()) {
  120. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  121. vo.setProjectAttrName(value.getInfo());
  122. break;
  123. }
  124. }
  125. //预警状态
  126. for (WarnStatus value : WarnStatus.values()) {
  127. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  128. vo.setWarnStatusName(value.getInfo());
  129. break;
  130. }
  131. }
  132. //项目状态
  133. for (PmProjectStatus value : PmProjectStatus.values()) {
  134. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  135. vo.setProjectStatusName(value.getInfo());
  136. break;
  137. }
  138. }
  139. } else if("2".equals(detailType)) { //需求建档
  140. //采购需求审核文件
  141. HashMap<String, String> auditFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  142. if(auditFileMap != null){
  143. vo.setAuditFileMap(auditFileMap);
  144. }
  145. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(pmDemand.getProjectType())){//装备类
  146. LambdaQueryWrapper<PmDemandEquip> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  147. lambdaQueryWrapper.eq(PmDemandEquip::getDemandId,demandId);
  148. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(lambdaQueryWrapper);
  149. if(pmDemandEquip != null){
  150. PmDemandEquipResVo responseVo = new PmDemandEquipResVo();
  151. BeanUtils.copyProperties(pmDemandEquip,responseVo);
  152. //采购方式建议
  153. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  154. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  155. responseVo.setProcurementMethodSuggestName(value.getInfo());
  156. break;
  157. }
  158. }
  159. HashMap<String, String> fileMap1 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_EQUIP.getType());
  160. if(fileMap1 != null){
  161. responseVo.setFileMap(fileMap1);
  162. }
  163. vo.setPmDemandEquipResVo(responseVo);
  164. }
  165. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(pmDemand.getProjectType())){ //物资类
  166. LambdaQueryWrapper<PmDemandMaterials> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  167. lambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,demandId);
  168. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(lambdaQueryWrapper);
  169. if(pmDemandMaterials != null){
  170. PmDemandMaterialsResVo responseVo = new PmDemandMaterialsResVo();
  171. BeanUtils.copyProperties(pmDemandMaterials,responseVo);
  172. //采购方式建议
  173. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  174. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  175. responseVo.setProcurementMethodSuggestName(value.getInfo());
  176. break;
  177. }
  178. }
  179. HashMap<String, String> fileMap2 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_MATERIALS.getType());
  180. if(fileMap2 != null){
  181. responseVo.setFileMap(fileMap2);
  182. }
  183. vo.setPmDemandMaterialsResVo(responseVo);
  184. }
  185. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(pmDemand.getProjectType())){//服务类
  186. LambdaQueryWrapper<PmDemandServe> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  187. lambdaQueryWrapper.eq(PmDemandServe::getDemandId,demandId);
  188. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(lambdaQueryWrapper);
  189. if(pmDemandServe != null){
  190. PmDemandServeResVo responseVo = new PmDemandServeResVo();
  191. BeanUtils.copyProperties(pmDemandServe,responseVo);
  192. //采购方式建议
  193. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  194. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  195. responseVo.setProcurementMethodSuggestName(value.getInfo());
  196. break;
  197. }
  198. }
  199. HashMap<String, String> fileMap3 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_SERVE.getType());
  200. if(fileMap3 != null){
  201. responseVo.setFileMap(fileMap3);
  202. }
  203. vo.setPmDemandServeResVo(responseVo);
  204. }
  205. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(pmDemand.getProjectType())){//工程类
  206. LambdaQueryWrapper<PmDemandEngineering> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  207. lambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,demandId);
  208. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(lambdaQueryWrapper);
  209. if(pmDemandEngineering != null){
  210. PmDemandEngineeringResVo responseVo = new PmDemandEngineeringResVo();
  211. BeanUtils.copyProperties(pmDemandEngineering,responseVo);
  212. //采购方式建议
  213. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  214. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  215. responseVo.setProcurementMethodSuggestName(value.getInfo());
  216. break;
  217. }
  218. }
  219. //项目类别
  220. for (EngineeringProjectCategory value : EngineeringProjectCategory.values()) {
  221. if (responseVo.getProjectCategory() != null && responseVo.getProjectCategory().equals(value.getCode())) {
  222. responseVo.setProjectCategoryName(value.getInfo());
  223. break;
  224. }
  225. }
  226. //承包方式
  227. for (EngineeringContractingMode value : EngineeringContractingMode.values()) {
  228. if (responseVo.getContractingMode() != null && responseVo.getContractingMode().equals(value.getCode())) {
  229. responseVo.setContractingModeName(value.getInfo());
  230. break;
  231. }
  232. }
  233. //施工图是否完成
  234. for (ConstructionDrawing value : ConstructionDrawing.values()) {
  235. if (responseVo.getConstructionDrawing() != null && responseVo.getConstructionDrawing().equals(value.getCode())) {
  236. responseVo.setConstructionDrawingName(value.getInfo());
  237. break;
  238. }
  239. }
  240. HashMap<String, String> fileMap4 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_ENGINEERING.getType());
  241. if(fileMap4 != null){
  242. responseVo.setFileMap(fileMap4);
  243. }
  244. vo.setPmDemandEngineeringResVo(responseVo);
  245. }
  246. }
  247. } else if("3".equals(detailType)) { //任务下达
  248. //任务下达文件
  249. HashMap<String, String> taskReleaseFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_TAST_RELEASE.getType());
  250. if(taskReleaseFileMap != null){
  251. vo.setTaskReleaseFileMap(taskReleaseFileMap);
  252. }
  253. } else if("4".equals(detailType)) { //中标信息
  254. } else if("5".equals(detailType)) { //合同信息
  255. } else if("6".equals(detailType)) { //建设情况
  256. }
  257. return vo;
  258. } else {
  259. return null;
  260. }
  261. }
  262. /**
  263. * 查询采购需求列表
  264. *
  265. * @param pmDemandReqVo
  266. * @return 采购需求
  267. */
  268. @Override
  269. public IPage<PmDemandResVo> selectPmDemandList(PmDemandReqVo pmDemandReqVo, int reqType) {
  270. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<>();
  271. if (!StringUtils.isBlank(pmDemandReqVo.getProjectName())) {
  272. lw.like(PmDemand::getProjectName, "%" + pmDemandReqVo.getProjectName() + "%");
  273. }
  274. if (!StringUtils.isBlank(pmDemandReqVo.getPurchaseServices())) {
  275. lw.eq(PmDemand::getPurchaseServices, pmDemandReqVo.getPurchaseServices());
  276. }
  277. if (pmDemandReqVo.getProjectStatus() != null) {
  278. lw.eq(PmDemand::getProjectStatus, pmDemandReqVo.getProjectStatus());
  279. }
  280. if (pmDemandReqVo.getIsExcess() != null) {
  281. lw.eq(PmDemand::getIsExcess, pmDemandReqVo.getIsExcess());
  282. }
  283. if (!StringUtils.isBlank(pmDemandReqVo.getBeginDate())) {
  284. lw.apply("(plan_demand_sub_time >= '" + pmDemandReqVo.getBeginDate() +"' or plan_purchase_finish_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_deliver_time >= '" + pmDemandReqVo.getBeginDate() +"' )");
  285. }
  286. if (!StringUtils.isBlank(pmDemandReqVo.getEndDate())) {
  287. lw.apply("(plan_demand_sub_time <= '" + pmDemandReqVo.getEndDate() +"' or plan_purchase_finish_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_deliver_time <= '" + pmDemandReqVo.getEndDate() +"' )");
  288. }
  289. if(reqType== 1) { //需求审核单位列表
  290. lw.eq(PmDemand::getProjectStatus, PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  291. } else if(reqType== 2) { //任务下达列表
  292. lw.apply("(project_status = 8 or project_status = 9 )");
  293. } else if(reqType== 3) { //采购执行列表
  294. lw.apply("(project_status = 9 or project_status = 10 )");
  295. } else if(reqType== 4) { //合同信息列表
  296. lw.apply("(project_status = 10 or project_status = 11 )");
  297. } else if(reqType== 5) { //项目建设列表
  298. lw.apply("(project_status = 11 or project_status = 12 )");
  299. }
  300. IPage<PmDemand> pageRes = this.page(new Page<>(pmDemandReqVo.getPageNum(), pmDemandReqVo.getPageSize()), lw);
  301. IPage<PmDemandResVo> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  302. if(pageRes.getRecords() != null && pageRes.getRecords().size() > 0){
  303. List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
  304. for(PmDemand pmDemand1 : pageRes.getRecords()){
  305. PmDemandResVo vo = new PmDemandResVo();
  306. BeanUtils.copyProperties(pmDemand1,vo);
  307. if(vo.getPurchaseDeptId() != null){
  308. Map<String, Object> deptMap = deptService.selectDeptById(vo.getPurchaseDeptId());
  309. if(deptMap!= null){
  310. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo)deptMap.get("sysDept");
  311. if(sysDeptResponseVo != null){
  312. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  313. }
  314. }
  315. }
  316. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services",vo.getPurchaseServices());
  317. if(StringUtils.isNotEmpty(purchaseServicesName)){
  318. vo.setPurchaseServicesName(purchaseServicesName);
  319. }
  320. //项目类型
  321. for (ProjectTypes value : ProjectTypes.values()) {
  322. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  323. vo.setProjectTypeName(value.getInfo());
  324. break;
  325. }
  326. }
  327. //是否为超限额计划
  328. for (IsExcess value : IsExcess.values()) {
  329. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  330. vo.setIsExcessName(value.getInfo());
  331. break;
  332. }
  333. }
  334. //采购方式
  335. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  336. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  337. vo.setPurchaseModeName(value.getInfo());
  338. break;
  339. }
  340. }
  341. //项目属性
  342. for (ProjectAttribute value : ProjectAttribute.values()) {
  343. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  344. vo.setProjectAttrName(value.getInfo());
  345. break;
  346. }
  347. }
  348. //预警状态
  349. for (WarnStatus value : WarnStatus.values()) {
  350. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  351. vo.setWarnStatusName(value.getInfo());
  352. break;
  353. }
  354. }
  355. //项目状态
  356. for (PmProjectStatus value : PmProjectStatus.values()) {
  357. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  358. vo.setProjectStatusName(value.getInfo());
  359. break;
  360. }
  361. }
  362. pmDemandResponseVoList.add(vo);
  363. }
  364. results.setRecords(pmDemandResponseVoList);
  365. }
  366. return results;
  367. }
  368. /**
  369. * 需求建档
  370. *
  371. * @param vo 采购需求
  372. * @return 结果
  373. */
  374. @Override
  375. public boolean bookBuilding(PmBookBuildingReqVo vo) {
  376. PmDemand pmDemand = this.getById(vo.getDemandId());
  377. String projectType = pmDemand.getProjectType();
  378. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(projectType)){ //装备类
  379. PmDemandEquipReqVo pmDemandEquipReqVo = vo.getPmDemandEquipReqVo();
  380. LambdaQueryWrapper<PmDemandEquip> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  381. lambdaQueryWrapper.eq(PmDemandEquip::getDemandId,vo.getDemandId());
  382. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(lambdaQueryWrapper);
  383. if(pmDemandEquip != null){
  384. pmDemandEquipReqVo.setDemandEquipId(pmDemandEquip.getDemandEquipId());
  385. BeanUtils.copyProperties(pmDemandEquipReqVo,pmDemandEquip);
  386. pmDemandEquip.setUpdateBy(vo.getUpdateBy());
  387. pmDemandEquip.setUpdateTime(new Date());
  388. iPmDemandEquipService.updateById(pmDemandEquip);
  389. } else {
  390. pmDemandEquip = new PmDemandEquip();
  391. BeanUtils.copyProperties(pmDemandEquipReqVo,pmDemandEquip);
  392. pmDemandEquip.setCreateBy(vo.getUpdateBy());
  393. pmDemandEquip.setCreateTime(new Date());
  394. pmDemandEquip.setUpdateBy(vo.getUpdateBy());
  395. pmDemandEquip.setUpdateTime(pmDemandEquip.getCreateTime());
  396. iPmDemandEquipService.save(pmDemandEquip);
  397. }
  398. List<SysFileRef> sysFileRefs = pmDemandEquipReqVo.getSysFileRefs();
  399. uploadFile(pmDemandEquip.getDemandEquipId(),SysFileRefEnum.PM_DEMAND_EQUIP.getType(),sysFileRefs,vo.getUpdateBy());
  400. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(projectType)) { //物资类
  401. PmDemandMaterialsReqVo pmDemandMaterialsReqVo = vo.getPmDemandMaterialsReqVo();
  402. LambdaQueryWrapper<PmDemandMaterials> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  403. lambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,vo.getDemandId());
  404. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(lambdaQueryWrapper);
  405. if(pmDemandMaterials != null){
  406. pmDemandMaterialsReqVo.setDemandMaterialsId(pmDemandMaterials.getDemandMaterialsId());
  407. BeanUtils.copyProperties(pmDemandMaterialsReqVo,pmDemandMaterials);
  408. pmDemandMaterials.setUpdateBy(vo.getUpdateBy());
  409. pmDemandMaterials.setUpdateTime(new Date());
  410. iPmDemandMaterialsService.updateById(pmDemandMaterials);
  411. } else {
  412. pmDemandMaterials = new PmDemandMaterials();
  413. BeanUtils.copyProperties(pmDemandMaterialsReqVo,pmDemandMaterials);
  414. pmDemandMaterials.setCreateBy(vo.getUpdateBy());
  415. pmDemandMaterials.setCreateTime(new Date());
  416. pmDemandMaterials.setUpdateBy(vo.getUpdateBy());
  417. pmDemandMaterials.setUpdateTime(pmDemandMaterials.getCreateTime());
  418. iPmDemandMaterialsService.save(pmDemandMaterials);
  419. }
  420. List<SysFileRef> sysFileRefs = pmDemandMaterialsReqVo.getSysFileRefs();
  421. uploadFile(pmDemandMaterials.getDemandMaterialsId(),SysFileRefEnum.PM_DEMAND_MATERIALS.getType(),sysFileRefs,vo.getUpdateBy());
  422. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(projectType)) { //服务类
  423. PmDemandServeReqVo pmDemandServeReqVo = vo.getPmDemandServeReqVo();
  424. LambdaQueryWrapper<PmDemandServe> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  425. lambdaQueryWrapper.eq(PmDemandServe::getDemandId,vo.getDemandId());
  426. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(lambdaQueryWrapper);
  427. if(pmDemandServe != null){
  428. pmDemandServeReqVo.setDemandServeId(pmDemandServe.getDemandServeId());
  429. BeanUtils.copyProperties(pmDemandServeReqVo,pmDemandServe);
  430. pmDemandServe.setUpdateBy(vo.getUpdateBy());
  431. pmDemandServe.setUpdateTime(new Date());
  432. iPmDemandServeService.updateById(pmDemandServe);
  433. } else {
  434. pmDemandServe = new PmDemandServe();
  435. BeanUtils.copyProperties(pmDemandServeReqVo,pmDemandServe);
  436. pmDemandServe.setCreateBy(vo.getUpdateBy());
  437. pmDemandServe.setCreateTime(new Date());
  438. pmDemandServe.setUpdateBy(vo.getUpdateBy());
  439. pmDemandServe.setUpdateTime(pmDemandServe.getCreateTime());
  440. iPmDemandServeService.save(pmDemandServe);
  441. }
  442. List<SysFileRef> sysFileRefs = pmDemandServeReqVo.getSysFileRefs();
  443. uploadFile(pmDemandServe.getDemandServeId(),SysFileRefEnum.PM_DEMAND_SERVE.getType(),sysFileRefs,vo.getUpdateBy());
  444. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(projectType)) { //工程类
  445. PmDemandEngineeringReqVo pmDemandEngineeringReqVo = vo.getPmDemandEngineeringReqVo();
  446. LambdaQueryWrapper<PmDemandEngineering> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  447. lambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,vo.getDemandId());
  448. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(lambdaQueryWrapper);
  449. if(pmDemandEngineering != null){
  450. pmDemandEngineeringReqVo.setDemandEngineeringId(pmDemandEngineering.getDemandEngineeringId());
  451. BeanUtils.copyProperties(pmDemandEngineeringReqVo,pmDemandEngineering);
  452. pmDemandEngineering.setUpdateBy(vo.getUpdateBy());
  453. pmDemandEngineering.setUpdateTime(new Date());
  454. iPmDemandEngineeringService.updateById(pmDemandEngineering);
  455. } else {
  456. pmDemandEngineering = new PmDemandEngineering();
  457. BeanUtils.copyProperties(pmDemandEngineeringReqVo,pmDemandEngineering);
  458. pmDemandEngineering.setCreateBy(vo.getUpdateBy());
  459. pmDemandEngineering.setCreateTime(new Date());
  460. pmDemandEngineering.setUpdateBy(vo.getUpdateBy());
  461. pmDemandEngineering.setUpdateTime(pmDemandEngineering.getCreateTime());
  462. iPmDemandEngineeringService.save(pmDemandEngineering);
  463. }
  464. List<SysFileRef> sysFileRefs = pmDemandEngineeringReqVo.getSysFileRefs();
  465. uploadFile(pmDemandEngineering.getDemandEngineeringId(),SysFileRefEnum.PM_DEMAND_ENGINEERING.getType(),sysFileRefs,vo.getUpdateBy());
  466. }
  467. pmDemand.setUpdateBy(vo.getUpdateBy());
  468. pmDemand.setUpdateTime(DateUtils.getNowDate());
  469. return this.updateById(pmDemand);
  470. }
  471. private HashMap<String, String> getFileMap(Long redId,Integer type){
  472. HashMap<String, Object> map = new HashMap<>();
  473. map.put("red_id", redId);
  474. map.put("type", type);
  475. List<SysFileRef> fileRefs = sysFileRefService.listByMap(map);
  476. if (!ObjectUtils.isEmpty(fileRefs)) {
  477. HashMap<String, String> fileMap = new HashMap<>();
  478. for (SysFileRef ref : fileRefs) {
  479. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  480. fileMap.put(fileInfo.getFileUrl(), fileInfo.getFileName());
  481. }
  482. return fileMap;
  483. } else {
  484. return null;
  485. }
  486. }
  487. /**
  488. * 查看流程图
  489. *
  490. * @param demandId 采购需求主键
  491. * @return 采购需求
  492. */
  493. @Override
  494. public Object viewFlowChart(Long demandId) {
  495. PmDemand pmDemand = this.getById(demandId);
  496. String projectStatus = String.valueOf(pmDemand.getProjectStatus());
  497. String moduleName = null;
  498. if (PmProjectStatus.DEMAND_WAIT_FILL.getCode().equals(projectStatus) || PmProjectStatus.DEMAND_AUDIT_RETURN.getCode().equals(projectStatus)) {
  499. moduleName = "需求填制";
  500. } else if(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode().equals(projectStatus)) {
  501. moduleName = "需求提交";
  502. } else if(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode().equals(projectStatus)) {
  503. moduleName = "需求审核";
  504. } else if(PmProjectStatus.TASK_WAIT_RELEASE.getCode().equals(projectStatus)) {
  505. moduleName = "任务下达";
  506. } else if(PmProjectStatus.WAIT_SELECT_AGENT.getCode().equals(projectStatus)) {
  507. moduleName = "选取代理";
  508. } else if(PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode().equals(projectStatus)) {
  509. moduleName = "上传招标文件";
  510. } else if(PmProjectStatus.WAIT_ANNOUNCEMENT.getCode().equals(projectStatus)) {
  511. moduleName = "发布公告";
  512. } else if(PmProjectStatus.WAIT_OPEN_BID.getCode().equals(projectStatus)) {
  513. moduleName = "填写专家信息,填写开标信息";
  514. } else if(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode().equals(projectStatus)) {
  515. moduleName = "填写中标信息";
  516. } else if(PmProjectStatus.BIDDING_PUBLICITY.getCode().equals(projectStatus)) {
  517. moduleName = "质疑处理,上传中标通知书";
  518. } else if(PmProjectStatus.CONTRACT_WAIT_FILL.getCode().equals(projectStatus)) {
  519. moduleName = "合同填制";
  520. } else if(PmProjectStatus.UNDER_CONSTRUCTION.getCode().equals(projectStatus)) {
  521. moduleName = "建设文档填制";
  522. } else if(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode().equals(projectStatus)) {
  523. moduleName = "项目归档";
  524. }
  525. return moduleName;
  526. }
  527. public PmFlowChartResVo getModuleInfo(Long demandId,String moduleName){
  528. PmDemand pmDemand = this.getById(demandId);
  529. String projectType = pmDemand.getProjectType();
  530. LambdaQueryWrapper<PmFlowChart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  531. lambdaQueryWrapper.eq(PmFlowChart::getModuleName,moduleName);
  532. PmFlowChart pmFlowChart = iPmFlowChartService.getOne(lambdaQueryWrapper);
  533. if(pmFlowChart == null){
  534. return null;
  535. }
  536. PmFlowChartResVo vo = new PmFlowChartResVo();
  537. BeanUtils.copyProperties(pmFlowChart, vo);
  538. if("需求填制".equals(moduleName)) {
  539. HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND.getType());
  540. if(fileMap != null){
  541. vo.setFileMap(fileMap);
  542. }
  543. } else if("需求提交".equals(moduleName)) {
  544. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(projectType)){ //装备类
  545. LambdaQueryWrapper<PmDemandEquip> pmDemandEquipLambdaQueryWrapper = new LambdaQueryWrapper<>();
  546. pmDemandEquipLambdaQueryWrapper.eq(PmDemandEquip::getDemandId,demandId);
  547. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(pmDemandEquipLambdaQueryWrapper);
  548. if(pmDemandEquip != null){
  549. HashMap<String, String> fileMap = getFileMap(pmDemandEquip.getDemandEquipId(),SysFileRefEnum.PM_DEMAND_EQUIP.getType());
  550. if(fileMap != null){
  551. vo.setFileMap(fileMap);
  552. }
  553. }
  554. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(projectType)) { //物资类
  555. LambdaQueryWrapper<PmDemandMaterials> pmDemandMaterialsLambdaQueryWrapper = new LambdaQueryWrapper<>();
  556. pmDemandMaterialsLambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,demandId);
  557. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(pmDemandMaterialsLambdaQueryWrapper);
  558. if(pmDemandMaterials != null){
  559. HashMap<String, String> fileMap = getFileMap(pmDemandMaterials.getDemandMaterialsId(),SysFileRefEnum.PM_DEMAND_MATERIALS.getType());
  560. if(fileMap != null){
  561. vo.setFileMap(fileMap);
  562. }
  563. }
  564. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(projectType)) { //服务类
  565. LambdaQueryWrapper<PmDemandServe> pmDemandServeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  566. pmDemandServeLambdaQueryWrapper.eq(PmDemandServe::getDemandId,demandId);
  567. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(pmDemandServeLambdaQueryWrapper);
  568. if(pmDemandServe != null){
  569. HashMap<String, String> fileMap = getFileMap(pmDemandServe.getDemandServeId(),SysFileRefEnum.PM_DEMAND_SERVE.getType());
  570. if(fileMap != null){
  571. vo.setFileMap(fileMap);
  572. }
  573. }
  574. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(projectType)) { //工程类
  575. LambdaQueryWrapper<PmDemandEngineering> pmDemandEngineeringLambdaQueryWrapper = new LambdaQueryWrapper<>();
  576. pmDemandEngineeringLambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,demandId);
  577. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(pmDemandEngineeringLambdaQueryWrapper);
  578. if(pmDemandEngineering != null){
  579. HashMap<String, String> fileMap = getFileMap(pmDemandEngineering.getDemandEngineeringId(),SysFileRefEnum.PM_DEMAND_ENGINEERING.getType());
  580. if(fileMap != null){
  581. vo.setFileMap(fileMap);
  582. }
  583. }
  584. }
  585. } else if("需求审核".equals(moduleName)) {
  586. HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  587. if(fileMap != null){
  588. vo.setFileMap(fileMap);
  589. }
  590. } else if("任务下达".equals(moduleName)) {
  591. //todo
  592. }
  593. return vo;
  594. }
  595. /**
  596. * 提交采购需求
  597. *
  598. * @param pmDemandReqVo
  599. * @return 结果
  600. */
  601. @Override
  602. public boolean commit(PmDemandReqVo pmDemandReqVo) {
  603. PmDemand pmDemand = new PmDemand();
  604. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  605. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode()));
  606. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  607. pmDemand.setUpdateTime(DateUtils.getNowDate());
  608. return this.updateById(pmDemand);
  609. }
  610. /**
  611. * 审核采购需求通过
  612. *
  613. * @param pmDemandReqVo
  614. * @return 结果
  615. */
  616. @Override
  617. public boolean reviewTo(PmDemandReqVo pmDemandReqVo) {
  618. PmDemand pmDemand = new PmDemand();
  619. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  620. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  621. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  622. uploadFile(pmDemandReqVo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType(),sysFileRefs,pmDemandReqVo.getUpdateBy());
  623. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  624. pmDemand.setUpdateTime(DateUtils.getNowDate());
  625. pmDemand.setAuditTime(DateUtils.getNowDate());
  626. return this.updateById(pmDemand);
  627. }
  628. /**
  629. * 审核采购需求退回
  630. *
  631. * @param pmDemandReqVo
  632. * @return 结果
  633. */
  634. @Override
  635. public boolean reviewReturn(PmDemandReqVo pmDemandReqVo) {
  636. PmDemand pmDemand = new PmDemand();
  637. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  638. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  639. pmDemand.setAdjustReason(pmDemandReqVo.getRefuseReason());
  640. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  641. pmDemand.setUpdateTime(DateUtils.getNowDate());
  642. pmDemand.setAuditTime(DateUtils.getNowDate());
  643. return this.updateById(pmDemand);
  644. }
  645. /**
  646. * 下达任务
  647. *
  648. * @param pmDemandReqVo
  649. * @return 结果
  650. */
  651. @Override
  652. public boolean releaseTask(PmDemandReqVo pmDemandReqVo) {
  653. PmDemand pmDemand = new PmDemand();
  654. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  655. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_SELECT_AGENT.getCode()));
  656. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  657. uploadFile(pmDemandReqVo.getDemandId(), SysFileRefEnum.PM_TAST_RELEASE.getType(), sysFileRefs, pmDemandReqVo.getUpdateBy());
  658. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  659. pmDemand.setUpdateTime(DateUtils.getNowDate());
  660. pmDemand.setAuditTime(DateUtils.getNowDate());
  661. return this.updateById(pmDemand);
  662. }
  663. @Override
  664. public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy) {
  665. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  666. for (SysFileRef ref : sysFileRefs) {
  667. if (ref.getFileId() == null) {
  668. continue;
  669. }
  670. QueryWrapper<SysFileRef> queryWrapper = new QueryWrapper<>();
  671. queryWrapper.lambda().eq(SysFileRef::getFileId, ref.getFileId())
  672. .eq(SysFileRef::getRedId, redId)
  673. .eq(SysFileRef::getType, fileType);
  674. List<SysFileRef> sysFileRefList = sysFileRefService.list(queryWrapper);
  675. if(!CollectionUtils.isEmpty(sysFileRefList)){
  676. sysFileRefService.remove(queryWrapper);
  677. }
  678. ref.setRedId(redId);
  679. ref.setType(fileType);
  680. ref.setCreated(upateBy);
  681. ref.setCreateTime(new Date());
  682. ref.setUpdated(upateBy);
  683. ref.setUpdateTime(ref.getCreateTime());
  684. sysFileRefService.save(ref);
  685. }
  686. return true;
  687. } else {
  688. return false;
  689. }
  690. }
  691. @Override
  692. public boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo) throws Exception {
  693. PmReleaseAnnouncement pmReleaseAnnouncement = new PmReleaseAnnouncement();
  694. BeanUtils.copyProperties(pmReleaseAnnouncementReqVo,pmReleaseAnnouncement);
  695. if(pmReleaseAnnouncementService.save(pmReleaseAnnouncement)){
  696. if (uploadFile(pmReleaseAnnouncement.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType(),pmReleaseAnnouncementReqVo.getSysFileRefs(),pmReleaseAnnouncementReqVo.getUpdateBy())) {
  697. PmDemand pmDemandUpdate = new PmDemand();
  698. pmDemandUpdate.setDemandId(pmReleaseAnnouncementReqVo.getDemandId());
  699. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_OPEN_BID.getCode()));
  700. pmDemandUpdate.setUpdateTime(pmReleaseAnnouncementReqVo.getUpdateTime());
  701. pmDemandUpdate.setUpdateBy(pmReleaseAnnouncementReqVo.getUpdateBy());
  702. return this.updateById(pmDemandUpdate);
  703. //TODO 发布公告生成后,会默认将该数据同步到公告管理和首页中
  704. } else {
  705. return false;
  706. }
  707. } else {
  708. return false;
  709. }
  710. }
  711. @Override
  712. @Transactional(rollbackFor = Exception.class)
  713. public boolean insertExpertBatch(PmBaseExpertFillReqVo pmBaseExpertFillReqVo) throws Exception {
  714. PmDemand pmDemand = this.getById(pmBaseExpertFillReqVo.getDemandId());
  715. if(ObjectUtils.isEmpty(pmDemand)){
  716. throw new Exception("参数错误");
  717. }
  718. List<BaseExpert> baseExpertList = pmBaseExpertFillReqVo.getBaseExpertList();
  719. List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
  720. Date now = new Date();
  721. for (BaseExpert baseExpert : baseExpertList) {
  722. if(baseExpert.getStatus().equals(NameListType.WHITE.getCode())){
  723. throw new Exception("该专家(身份证号:" +baseExpert.getIdNumber() + ")属于黑名单");
  724. }
  725. if(pmDemand.getProjectType().equals(baseExpert.getVarietyPurchase())){
  726. throw new Exception("该专家(身份证号:" +baseExpert.getIdNumber() + ")所属采购品种和项目类型不匹配");
  727. }
  728. if(ObjectUtils.isEmpty(baseExpert.getCreated())){
  729. baseExpert.setCreated(pmBaseExpertFillReqVo.getCreateBy());
  730. baseExpert.setCreateTime(now);
  731. }
  732. if(ObjectUtils.isEmpty(baseExpert.getUpdated())){
  733. baseExpert.setUpdated(pmBaseExpertFillReqVo.getUpdateBy());
  734. baseExpert.setUpdateTime(now);
  735. }
  736. PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
  737. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  738. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  739. pmDemandExpertRef.setCreateBy(pmBaseExpertFillReqVo.getCreateBy());
  740. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertFillReqVo.getAccessTime()));
  741. pmDemandExpertRef.setCreateTime(now);
  742. pmDemandExpertRef.setUpdateBy(pmBaseExpertFillReqVo.getCreateBy());
  743. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  744. pmDemandExpertRefList.add(pmDemandExpertRef);
  745. }
  746. if (baseExpertService.saveOrUpdateBatch(baseExpertList)){
  747. return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
  748. } else {
  749. return false;
  750. }
  751. }
  752. @Override
  753. public boolean extractExpertBatch(PmBaseExpertExtractReqVo pmBaseExpertExtractReqVo) throws Exception {
  754. Integer technicalExpertNumber = pmBaseExpertExtractReqVo.getTechnicalExpertNumber();
  755. if(technicalExpertNumber== null){
  756. technicalExpertNumber = 0;
  757. }
  758. Integer economicExpertNumber = pmBaseExpertExtractReqVo.getEconomicExpertNumber();
  759. if(economicExpertNumber == null){
  760. economicExpertNumber = 0;
  761. }
  762. Integer legalAffairsExpertNumber = pmBaseExpertExtractReqVo.getLegalAffairsExpertNumber();
  763. if(legalAffairsExpertNumber == null){
  764. legalAffairsExpertNumber = 0;
  765. }
  766. Integer spareExpertNumber = pmBaseExpertExtractReqVo.getSpareExpertNumber();
  767. if(spareExpertNumber == null){
  768. spareExpertNumber = 0;
  769. }
  770. String professional = pmBaseExpertExtractReqVo.getProfessional();
  771. if(spareExpertNumber > 0 && ObjectUtils.isEmpty(professional)){
  772. throw new Exception("抽取备用专家必须选择专家专业");
  773. }
  774. String localArea = pmBaseExpertExtractReqVo.getLocalArea();
  775. if(spareExpertNumber > 0 && ObjectUtils.isEmpty(localArea)){
  776. throw new Exception("抽取备用专家必须选择所在区域");
  777. }
  778. PmDemand pmDemand = this.getById(pmBaseExpertExtractReqVo.getDemandId());
  779. if(ObjectUtils.isEmpty(pmDemand)){
  780. throw new Exception("参数错误");
  781. }
  782. LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<BaseExpert>();
  783. lw.eq(BaseExpert::getVarietyPurchase,pmDemand.getProjectType())
  784. .eq(BaseExpert::getStatus,NameListType.WHITE.getCode());
  785. List<BaseExpert> baseExpertList = baseExpertService.list(lw);
  786. if(ObjectUtils.isEmpty(baseExpertList)){
  787. throw new Exception("没抽取到符合条件的专家");
  788. }
  789. List<BaseExpert> technicalExpertList = new ArrayList<>();
  790. List<BaseExpert> economicExpertList = new ArrayList<>();
  791. List<BaseExpert> legalAffairsExpertList = new ArrayList<>();
  792. List<BaseExpert> spareExpertList = new ArrayList<>();
  793. for(BaseExpert baseExpert : baseExpertList){
  794. if(technicalExpertNumber > 0) {
  795. if(ExpertType.TECHNICAL_EXPERT.getCode().equals(baseExpert.getExpertType())){
  796. technicalExpertList.add(baseExpert);
  797. }
  798. }
  799. if(economicExpertNumber > 0) {
  800. if(ExpertType.ECONOMIC_EXPERT.getCode().equals(baseExpert.getExpertType())){
  801. economicExpertList.add(baseExpert);
  802. }
  803. }
  804. if (legalAffairsExpertNumber > 0) {
  805. if(ExpertType.LEGALAFFAIRS_EXPERT.getCode().equals(baseExpert.getExpertType())){
  806. legalAffairsExpertList.add(baseExpert);
  807. }
  808. }
  809. if (spareExpertNumber > 0) {
  810. String[] arr = professional.split(",");
  811. List<String> professionalList = Arrays.asList(arr);
  812. String majorType = baseExpert.getMajorType();
  813. //TODO 所在区域判读
  814. if(!ObjectUtils.isEmpty(majorType)){
  815. if(professionalList.contains(majorType)){
  816. spareExpertList.add(baseExpert);
  817. }
  818. }
  819. }
  820. }
  821. List<BaseExpert> alltExpertList = new ArrayList<>();
  822. if(!ObjectUtils.isEmpty(technicalExpertList)){
  823. alltExpertList.addAll(RandomUtil.getRandomList(technicalExpertList,technicalExpertNumber));
  824. }
  825. if(!ObjectUtils.isEmpty(economicExpertList)){
  826. alltExpertList.addAll(RandomUtil.getRandomList(economicExpertList,economicExpertNumber));
  827. }
  828. if(!ObjectUtils.isEmpty(legalAffairsExpertList)){
  829. alltExpertList.addAll(RandomUtil.getRandomList(legalAffairsExpertList,legalAffairsExpertNumber));
  830. }
  831. if(!ObjectUtils.isEmpty(spareExpertList)){
  832. alltExpertList.addAll(RandomUtil.getRandomList(spareExpertList,spareExpertNumber));
  833. }
  834. if(ObjectUtils.isEmpty(alltExpertList)){
  835. throw new Exception("没抽取到符合条件的专家");
  836. } else {
  837. List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
  838. for(BaseExpert baseExpert :alltExpertList ) {
  839. PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
  840. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  841. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  842. pmDemandExpertRef.setCreateBy(pmBaseExpertExtractReqVo.getCreateBy());
  843. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertExtractReqVo.getAccessTime()));
  844. pmDemandExpertRef.setCreateTime(new Date());
  845. pmDemandExpertRef.setUpdateBy(pmBaseExpertExtractReqVo.getCreateBy());
  846. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  847. pmDemandExpertRefList.add(pmDemandExpertRef);
  848. }
  849. return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
  850. }
  851. }
  852. @Override
  853. @Transactional(rollbackFor = Exception.class)
  854. public boolean insertBidOpeningBatch(PmBidOpeningFillReqVo pmBidOpeningFillReqVo) throws Exception {
  855. PmDemand pmDemand = this.getById(pmBidOpeningFillReqVo.getDemandId());
  856. if(ObjectUtils.isEmpty(pmDemand)){
  857. throw new Exception("参数错误");
  858. }
  859. Date now = new Date();
  860. List<PmBidOpening> pmBidOpeningList = pmBidOpeningFillReqVo.getPmBidOpeningList();
  861. for (PmBidOpening pmBidOpening : pmBidOpeningList) {
  862. if(ObjectUtils.isEmpty(pmBidOpening.getBidderName())){
  863. throw new Exception("投标人名称不能为空");
  864. }
  865. if(ObjectUtils.isEmpty(pmBidOpening.getScore())){
  866. throw new Exception("分数不能为空");
  867. }
  868. pmBidOpening.setDemandId(pmBidOpeningFillReqVo.getDemandId());
  869. pmBidOpening.setOpenBidTime(now); //TODO
  870. pmBidOpening.setCreateBy(pmBidOpeningFillReqVo.getCreateBy());
  871. pmBidOpening.setCreateTime(now);
  872. pmBidOpening.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  873. pmBidOpening.setUpdateTime(now);
  874. }
  875. if(pmBidOpeningService.saveBatch(pmBidOpeningList)) {
  876. PmDemand pmDemandUpdate = new PmDemand();
  877. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  878. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode()));
  879. pmDemandUpdate.setUpdateTime(now);
  880. pmDemandUpdate.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  881. return this.updateById(pmDemandUpdate);
  882. } else {
  883. return false;
  884. }
  885. }
  886. @Override
  887. public boolean insertPmBidWinning(PmBidWinningReqVo pmBidWinningReqVo) throws Exception {
  888. uploadFile(pmBidWinningReqVo.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(),pmBidWinningReqVo.getSysFileRefs(),pmBidWinningReqVo.getUpdateBy());
  889. PmBidWinning pmBidWinning = new PmBidWinning();
  890. BeanUtils.copyProperties(pmBidWinningReqVo,pmBidWinning);
  891. if(pmBidWinningService.save(pmBidWinning)){
  892. if(uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(),pmBidWinningReqVo.getSysFileRefs(),pmBidWinningReqVo.getUpdateBy())) {
  893. PmDemand pmDemandUpdate = new PmDemand();
  894. pmDemandUpdate.setDemandId(pmBidWinningReqVo.getDemandId());
  895. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.BIDDING_PUBLICITY.getCode()));
  896. pmDemandUpdate.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  897. pmDemandUpdate.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  898. return this.updateById(pmDemandUpdate);
  899. } else {
  900. return false;
  901. }
  902. } else {
  903. return false;
  904. }
  905. }
  906. @Override
  907. public boolean insertPmBidFailure(PmBidFailureReqVo pmBidFailureReqVo) throws Exception {
  908. PmBidFailure pmBidFailure = new PmBidFailure();
  909. BeanUtils.copyProperties(pmBidFailureReqVo,pmBidFailure);
  910. if(pmBidFailureService.save(pmBidFailure)){
  911. return uploadFile(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType(),pmBidFailureReqVo.getSysFileRefs(),pmBidFailureReqVo.getUpdateBy());
  912. } else {
  913. return false;
  914. }
  915. }
  916. }