PmDemandServiceImpl.java 68 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373
  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.domain.BaseSupplier;
  10. import com.ozs.base.domain.BaseUnitInformation;
  11. import com.ozs.base.service.BaseExpertService;
  12. import com.ozs.base.service.BaseSupplierService;
  13. import com.ozs.common.enums.*;
  14. import com.ozs.common.utils.DateUtils;
  15. import com.ozs.common.utils.RandomUtil;
  16. import com.ozs.common.utils.StringUtils;
  17. import com.ozs.common.utils.bean.BeanUtils;
  18. import com.ozs.pm.doman.*;
  19. import com.ozs.pm.doman.vo.PmBaseSupplierVo;
  20. import com.ozs.pm.doman.vo.PmBaseUnitInformationVo;
  21. import com.ozs.pm.doman.vo.requestVo.*;
  22. import com.ozs.pm.doman.vo.responseVo.*;
  23. import com.ozs.pm.mapper.PmDemandMapper;
  24. import com.ozs.pm.service.*;
  25. import com.ozs.system.domain.SysFileInfo;
  26. import com.ozs.system.domain.SysFileRef;
  27. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  28. import com.ozs.system.service.ISysDeptService;
  29. import com.ozs.system.service.ISysDictDataService;
  30. import com.ozs.system.service.SysFileRefService;
  31. import com.ozs.system.service.SysFileService;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import org.springframework.util.CollectionUtils;
  36. import org.springframework.util.ObjectUtils;
  37. /**
  38. * 采购需求Service业务层处理
  39. *
  40. * @author ruoyi
  41. * @date 2023-01-16
  42. */
  43. @Service
  44. public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> implements IPmDemandService {
  45. @Autowired
  46. private IPmDemandEquipService iPmDemandEquipService;
  47. @Autowired
  48. private IPmDemandMaterialsService iPmDemandMaterialsService;
  49. @Autowired
  50. private IPmDemandServeService iPmDemandServeService;
  51. @Autowired
  52. private IPmDemandEngineeringService iPmDemandEngineeringService;
  53. @Autowired
  54. private ISysDeptService deptService;
  55. @Autowired
  56. private ISysDictDataService dictDataService;
  57. @Autowired
  58. private SysFileService fileService;
  59. @Autowired
  60. private SysFileRefService sysFileRefService;
  61. @Autowired
  62. private IPmFlowChartService iPmFlowChartService;
  63. @Autowired
  64. private PmReleaseAnnouncementService pmReleaseAnnouncementService;
  65. @Autowired
  66. private BaseExpertService baseExpertService;
  67. @Autowired
  68. private PmDemandExpertRefService pmDemandExpertRefService;
  69. @Autowired
  70. private PmBidOpeningService pmBidOpeningService;
  71. @Autowired
  72. private PmBidWinningService pmBidWinningService;
  73. @Autowired
  74. private PmBidFailureService pmBidFailureService;
  75. @Autowired
  76. private PmBidWinningOpeningRefService pmBidWinningOpeningRefService;
  77. @Autowired
  78. private PmContractInfoService pmContractInfoService;
  79. @Autowired
  80. private BaseSupplierService baseSupplierService;
  81. @Autowired
  82. private PmContractUnitRefService pmContractUnitRefService;
  83. @Autowired
  84. private PmProjectConstructionService pmProjectConstructionService;
  85. /**
  86. * 查询采购需求
  87. *
  88. * @param demandId 采购需求主键
  89. * @return 采购需求
  90. */
  91. @Override
  92. public PmDemandResVo selectPmDemandByDemandId(Long demandId,String detailType) {
  93. PmDemand pmDemand = this.getById(demandId);
  94. if(pmDemand != null){
  95. PmDemandResVo vo = new PmDemandResVo();
  96. vo.setDemandId(demandId);
  97. if("1".equals(detailType)) { //项目计划
  98. BeanUtils.copyProperties(pmDemand, vo);
  99. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(vo.getPurchaseDeptId()).get("sysDept");
  100. if(sysDeptResponseVo != null){
  101. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  102. }
  103. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
  104. if(StringUtils.isNotEmpty(purchaseServicesName)){
  105. vo.setPurchaseServicesName(purchaseServicesName);
  106. }
  107. //采购需求附件
  108. HashMap<String, String> demandFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND.getType());
  109. if(demandFileMap != null){
  110. vo.setDemandFileMap(demandFileMap);
  111. }
  112. //项目类型
  113. for (ProjectTypes value : ProjectTypes.values()) {
  114. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  115. vo.setProjectTypeName(value.getInfo());
  116. break;
  117. }
  118. }
  119. //是否为超限额计划
  120. for (IsExcess value : IsExcess.values()) {
  121. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  122. vo.setIsExcessName(value.getInfo());
  123. break;
  124. }
  125. }
  126. //采购方式
  127. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  128. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  129. vo.setPurchaseModeName(value.getInfo());
  130. break;
  131. }
  132. }
  133. //项目属性
  134. for (ProjectAttribute value : ProjectAttribute.values()) {
  135. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  136. vo.setProjectAttrName(value.getInfo());
  137. break;
  138. }
  139. }
  140. //预警状态
  141. for (WarnStatus value : WarnStatus.values()) {
  142. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  143. vo.setWarnStatusName(value.getInfo());
  144. break;
  145. }
  146. }
  147. //项目状态
  148. for (PmProjectStatus value : PmProjectStatus.values()) {
  149. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  150. vo.setProjectStatusName(value.getInfo());
  151. break;
  152. }
  153. }
  154. } else if("2".equals(detailType)) { //需求建档
  155. //采购需求审核文件
  156. HashMap<String, String> auditFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  157. if(auditFileMap != null){
  158. vo.setAuditFileMap(auditFileMap);
  159. }
  160. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(pmDemand.getProjectType())){//装备类
  161. LambdaQueryWrapper<PmDemandEquip> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  162. lambdaQueryWrapper.eq(PmDemandEquip::getDemandId,demandId);
  163. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(lambdaQueryWrapper);
  164. if(pmDemandEquip != null){
  165. PmDemandEquipResVo responseVo = new PmDemandEquipResVo();
  166. BeanUtils.copyProperties(pmDemandEquip,responseVo);
  167. //采购方式建议
  168. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  169. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  170. responseVo.setProcurementMethodSuggestName(value.getInfo());
  171. break;
  172. }
  173. }
  174. HashMap<String, String> fileMap1 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_EQUIP.getType());
  175. if(fileMap1 != null){
  176. responseVo.setFileMap(fileMap1);
  177. }
  178. vo.setPmDemandEquipResVo(responseVo);
  179. }
  180. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(pmDemand.getProjectType())){ //物资类
  181. LambdaQueryWrapper<PmDemandMaterials> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  182. lambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,demandId);
  183. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(lambdaQueryWrapper);
  184. if(pmDemandMaterials != null){
  185. PmDemandMaterialsResVo responseVo = new PmDemandMaterialsResVo();
  186. BeanUtils.copyProperties(pmDemandMaterials,responseVo);
  187. //采购方式建议
  188. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  189. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  190. responseVo.setProcurementMethodSuggestName(value.getInfo());
  191. break;
  192. }
  193. }
  194. HashMap<String, String> fileMap2 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_MATERIALS.getType());
  195. if(fileMap2 != null){
  196. responseVo.setFileMap(fileMap2);
  197. }
  198. vo.setPmDemandMaterialsResVo(responseVo);
  199. }
  200. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(pmDemand.getProjectType())){//服务类
  201. LambdaQueryWrapper<PmDemandServe> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  202. lambdaQueryWrapper.eq(PmDemandServe::getDemandId,demandId);
  203. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(lambdaQueryWrapper);
  204. if(pmDemandServe != null){
  205. PmDemandServeResVo responseVo = new PmDemandServeResVo();
  206. BeanUtils.copyProperties(pmDemandServe,responseVo);
  207. //采购方式建议
  208. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  209. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  210. responseVo.setProcurementMethodSuggestName(value.getInfo());
  211. break;
  212. }
  213. }
  214. HashMap<String, String> fileMap3 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_SERVE.getType());
  215. if(fileMap3 != null){
  216. responseVo.setFileMap(fileMap3);
  217. }
  218. vo.setPmDemandServeResVo(responseVo);
  219. }
  220. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(pmDemand.getProjectType())){//工程类
  221. LambdaQueryWrapper<PmDemandEngineering> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  222. lambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,demandId);
  223. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(lambdaQueryWrapper);
  224. if(pmDemandEngineering != null){
  225. PmDemandEngineeringResVo responseVo = new PmDemandEngineeringResVo();
  226. BeanUtils.copyProperties(pmDemandEngineering,responseVo);
  227. //采购方式建议
  228. for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
  229. if (responseVo.getProcurementMethodSuggest() != null && responseVo.getProcurementMethodSuggest().equals(value.getCode())) {
  230. responseVo.setProcurementMethodSuggestName(value.getInfo());
  231. break;
  232. }
  233. }
  234. //项目类别
  235. for (EngineeringProjectCategory value : EngineeringProjectCategory.values()) {
  236. if (responseVo.getProjectCategory() != null && responseVo.getProjectCategory().equals(value.getCode())) {
  237. responseVo.setProjectCategoryName(value.getInfo());
  238. break;
  239. }
  240. }
  241. //承包方式
  242. for (EngineeringContractingMode value : EngineeringContractingMode.values()) {
  243. if (responseVo.getContractingMode() != null && responseVo.getContractingMode().equals(value.getCode())) {
  244. responseVo.setContractingModeName(value.getInfo());
  245. break;
  246. }
  247. }
  248. //施工图是否完成
  249. for (ConstructionDrawing value : ConstructionDrawing.values()) {
  250. if (responseVo.getConstructionDrawing() != null && responseVo.getConstructionDrawing().equals(value.getCode())) {
  251. responseVo.setConstructionDrawingName(value.getInfo());
  252. break;
  253. }
  254. }
  255. HashMap<String, String> fileMap4 = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_ENGINEERING.getType());
  256. if(fileMap4 != null){
  257. responseVo.setFileMap(fileMap4);
  258. }
  259. vo.setPmDemandEngineeringResVo(responseVo);
  260. }
  261. }
  262. } else if("3".equals(detailType)) { //任务下达
  263. //任务下达文件
  264. HashMap<String, String> taskReleaseFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_TAST_RELEASE.getType());
  265. if(taskReleaseFileMap != null){
  266. vo.setTaskReleaseFileMap(taskReleaseFileMap);
  267. }
  268. } else if("4".equals(detailType)) { //中标信息
  269. } else if("5".equals(detailType)) { //合同信息
  270. LambdaQueryWrapper<PmContractInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  271. lambdaQueryWrapper.eq(PmContractInfo::getDemandId,demandId);
  272. PmContractInfo pmContractInfo = pmContractInfoService.getOne(lambdaQueryWrapper);
  273. if(pmContractInfo != null){
  274. PmContractInfoResVo pmContractInfoResVo = new PmContractInfoResVo();
  275. BeanUtils.copyProperties(pmContractInfo,pmContractInfoResVo);
  276. // todo
  277. BaseUnitInformation baseUnitInformation = null;
  278. PmBaseUnitInformationVo pmBaseUnitInformationVo = new PmBaseUnitInformationVo();
  279. BeanUtils.copyProperties(baseUnitInformation, pmBaseUnitInformationVo);
  280. LambdaQueryWrapper<PmContractUnitRef> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
  281. lambdaQueryWrapper1.eq(PmContractUnitRef::getDemandId,demandId)
  282. .eq(PmContractUnitRef::getContractInfoId,pmContractInfo.getId())
  283. .eq(PmContractUnitRef::getUnitId,baseUnitInformation.getId())
  284. .eq(PmContractUnitRef::getUnitType,"A");
  285. PmContractUnitRef pmContractUnitRef = this.pmContractUnitRefService.getOne(lambdaQueryWrapper1);
  286. if(pmContractUnitRef != null){
  287. pmBaseUnitInformationVo.setContractSignPlace(pmContractUnitRef.getContractSignPlace());
  288. pmBaseUnitInformationVo.setContractSignDate(pmContractUnitRef.getContractSignDate());
  289. }
  290. pmContractInfoResVo.setPmBaseUnitInformationVo(pmBaseUnitInformationVo);
  291. LambdaQueryWrapper<PmContractUnitRef> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
  292. lambdaQueryWrapper2.eq(PmContractUnitRef::getDemandId,demandId)
  293. .eq(PmContractUnitRef::getContractInfoId,pmContractInfo.getId())
  294. .eq(PmContractUnitRef::getUnitType,"B");
  295. List<PmContractUnitRef> pmContractUnitRefList = this.pmContractUnitRefService.list(lambdaQueryWrapper2);
  296. if(!ObjectUtils.isEmpty(pmContractUnitRefList)){
  297. List<PmBaseSupplierVo> pmBaseSupplierList = new ArrayList<>();
  298. for(PmContractUnitRef pmContractUnitRef1 :pmContractUnitRefList ){
  299. BaseSupplier baseSupplier = this.baseSupplierService.getById(pmContractUnitRef1.getUnitId());
  300. PmBaseSupplierVo pmBaseSupplierVo = new PmBaseSupplierVo();
  301. BeanUtils.copyProperties(baseSupplier,pmBaseSupplierVo);
  302. pmBaseSupplierVo.setContractSignPlace(pmContractUnitRef.getContractSignPlace());
  303. pmBaseSupplierVo.setContractSignDate(pmContractUnitRef.getContractSignDate());
  304. pmBaseSupplierList.add(pmBaseSupplierVo);
  305. }
  306. pmContractInfoResVo.setBaseSupplierList(pmBaseSupplierList);
  307. }
  308. //合同信息文件
  309. HashMap<String, String> pmContractInfoFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
  310. if(pmContractInfoFileMap != null){
  311. pmContractInfoResVo.setFileMap(pmContractInfoFileMap);
  312. }
  313. vo.setPmContractInfoResVo(pmContractInfoResVo);
  314. }
  315. } else if("6".equals(detailType)) { //建设情况
  316. LambdaQueryWrapper<PmProjectConstruction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  317. lambdaQueryWrapper.eq(PmProjectConstruction::getDemandId,demandId);
  318. PmProjectConstruction pmProjectConstruction = pmProjectConstructionService.getOne(lambdaQueryWrapper);
  319. if(pmProjectConstruction != null){
  320. PmProjectConstructionResVo pmProjectConstructionResVo = new PmProjectConstructionResVo();
  321. BeanUtils.copyProperties(pmProjectConstruction,pmProjectConstructionResVo);
  322. //建设情况文件
  323. HashMap<String, String> projectConstructionFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
  324. if(projectConstructionFileMap != null){
  325. pmProjectConstructionResVo.setFileMap(projectConstructionFileMap);
  326. }
  327. vo.setPmProjectConstructionResVo(pmProjectConstructionResVo);
  328. }
  329. }
  330. return vo;
  331. } else {
  332. return null;
  333. }
  334. }
  335. /**
  336. * 查询采购需求列表
  337. *
  338. * @param pmDemandReqVo
  339. * @return 采购需求
  340. */
  341. @Override
  342. public IPage<PmDemandResVo> selectPmDemandList(PmDemandReqVo pmDemandReqVo, int reqType) {
  343. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<>();
  344. if (!StringUtils.isBlank(pmDemandReqVo.getProjectName())) {
  345. lw.like(PmDemand::getProjectName, "%" + pmDemandReqVo.getProjectName() + "%");
  346. }
  347. if (!StringUtils.isBlank(pmDemandReqVo.getPurchaseServices())) {
  348. lw.eq(PmDemand::getPurchaseServices, pmDemandReqVo.getPurchaseServices());
  349. }
  350. if (pmDemandReqVo.getProjectStatus() != null) {
  351. lw.eq(PmDemand::getProjectStatus, pmDemandReqVo.getProjectStatus());
  352. }
  353. if (pmDemandReqVo.getIsExcess() != null) {
  354. lw.eq(PmDemand::getIsExcess, pmDemandReqVo.getIsExcess());
  355. }
  356. if (!StringUtils.isBlank(pmDemandReqVo.getBeginDate())) {
  357. lw.apply("(plan_demand_sub_time >= '" + pmDemandReqVo.getBeginDate() +"' or plan_purchase_finish_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_deliver_time >= '" + pmDemandReqVo.getBeginDate() +"' )");
  358. }
  359. if (!StringUtils.isBlank(pmDemandReqVo.getEndDate())) {
  360. lw.apply("(plan_demand_sub_time <= '" + pmDemandReqVo.getEndDate() +"' or plan_purchase_finish_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_deliver_time <= '" + pmDemandReqVo.getEndDate() +"' )");
  361. }
  362. if(reqType== 1) { //需求审核单位列表
  363. lw.eq(PmDemand::getProjectStatus, PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  364. } else if(reqType== 2) { //任务下达列表
  365. lw.apply("(project_status = 8 or project_status = 9 )");
  366. } else if(reqType== 3) { //采购执行列表
  367. lw.apply("(project_status = 9 or project_status = 10 )");
  368. } else if(reqType== 4) { //合同信息列表
  369. lw.apply("(project_status = 10 or project_status = 11 )");
  370. } else if(reqType== 5) { //项目建设列表
  371. lw.apply("(project_status = 11 or project_status = 12 )");
  372. }
  373. IPage<PmDemand> pageRes = this.page(new Page<>(pmDemandReqVo.getPageNum(), pmDemandReqVo.getPageSize()), lw);
  374. IPage<PmDemandResVo> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  375. if(pageRes.getRecords() != null && pageRes.getRecords().size() > 0){
  376. List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
  377. for(PmDemand pmDemand1 : pageRes.getRecords()){
  378. PmDemandResVo vo = new PmDemandResVo();
  379. BeanUtils.copyProperties(pmDemand1,vo);
  380. if(vo.getPurchaseDeptId() != null){
  381. Map<String, Object> deptMap = deptService.selectDeptById(vo.getPurchaseDeptId());
  382. if(deptMap!= null){
  383. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo)deptMap.get("sysDept");
  384. if(sysDeptResponseVo != null){
  385. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  386. }
  387. }
  388. }
  389. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services",vo.getPurchaseServices());
  390. if(StringUtils.isNotEmpty(purchaseServicesName)){
  391. vo.setPurchaseServicesName(purchaseServicesName);
  392. }
  393. //项目类型
  394. for (ProjectTypes value : ProjectTypes.values()) {
  395. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  396. vo.setProjectTypeName(value.getInfo());
  397. break;
  398. }
  399. }
  400. //是否为超限额计划
  401. for (IsExcess value : IsExcess.values()) {
  402. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  403. vo.setIsExcessName(value.getInfo());
  404. break;
  405. }
  406. }
  407. //采购方式
  408. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  409. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  410. vo.setPurchaseModeName(value.getInfo());
  411. break;
  412. }
  413. }
  414. //项目属性
  415. for (ProjectAttribute value : ProjectAttribute.values()) {
  416. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  417. vo.setProjectAttrName(value.getInfo());
  418. break;
  419. }
  420. }
  421. //预警状态
  422. for (WarnStatus value : WarnStatus.values()) {
  423. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  424. vo.setWarnStatusName(value.getInfo());
  425. break;
  426. }
  427. }
  428. //项目状态
  429. for (PmProjectStatus value : PmProjectStatus.values()) {
  430. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  431. vo.setProjectStatusName(value.getInfo());
  432. break;
  433. }
  434. }
  435. pmDemandResponseVoList.add(vo);
  436. }
  437. results.setRecords(pmDemandResponseVoList);
  438. }
  439. return results;
  440. }
  441. /**
  442. * 需求建档
  443. *
  444. * @param vo 采购需求
  445. * @return 结果
  446. */
  447. @Override
  448. @Transactional(rollbackFor = Exception.class)
  449. public boolean bookBuilding(PmBookBuildingReqVo vo) {
  450. PmDemand pmDemand = this.getById(vo.getDemandId());
  451. String projectType = pmDemand.getProjectType();
  452. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(projectType)){ //装备类
  453. PmDemandEquipReqVo pmDemandEquipReqVo = vo.getPmDemandEquipReqVo();
  454. LambdaQueryWrapper<PmDemandEquip> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  455. lambdaQueryWrapper.eq(PmDemandEquip::getDemandId,vo.getDemandId());
  456. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(lambdaQueryWrapper);
  457. if(pmDemandEquip != null){
  458. pmDemandEquipReqVo.setDemandEquipId(pmDemandEquip.getDemandEquipId());
  459. BeanUtils.copyProperties(pmDemandEquipReqVo,pmDemandEquip);
  460. pmDemandEquip.setUpdateBy(vo.getUpdateBy());
  461. pmDemandEquip.setUpdateTime(new Date());
  462. iPmDemandEquipService.updateById(pmDemandEquip);
  463. } else {
  464. pmDemandEquip = new PmDemandEquip();
  465. BeanUtils.copyProperties(pmDemandEquipReqVo,pmDemandEquip);
  466. pmDemandEquip.setCreateBy(vo.getUpdateBy());
  467. pmDemandEquip.setCreateTime(new Date());
  468. pmDemandEquip.setUpdateBy(vo.getUpdateBy());
  469. pmDemandEquip.setUpdateTime(pmDemandEquip.getCreateTime());
  470. iPmDemandEquipService.save(pmDemandEquip);
  471. }
  472. List<SysFileRef> sysFileRefs = pmDemandEquipReqVo.getSysFileRefs();
  473. uploadFile(pmDemandEquip.getDemandEquipId(),SysFileRefEnum.PM_DEMAND_EQUIP.getType(),sysFileRefs,vo.getUpdateBy());
  474. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(projectType)) { //物资类
  475. PmDemandMaterialsReqVo pmDemandMaterialsReqVo = vo.getPmDemandMaterialsReqVo();
  476. LambdaQueryWrapper<PmDemandMaterials> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  477. lambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,vo.getDemandId());
  478. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(lambdaQueryWrapper);
  479. if(pmDemandMaterials != null){
  480. pmDemandMaterialsReqVo.setDemandMaterialsId(pmDemandMaterials.getDemandMaterialsId());
  481. BeanUtils.copyProperties(pmDemandMaterialsReqVo,pmDemandMaterials);
  482. pmDemandMaterials.setUpdateBy(vo.getUpdateBy());
  483. pmDemandMaterials.setUpdateTime(new Date());
  484. iPmDemandMaterialsService.updateById(pmDemandMaterials);
  485. } else {
  486. pmDemandMaterials = new PmDemandMaterials();
  487. BeanUtils.copyProperties(pmDemandMaterialsReqVo,pmDemandMaterials);
  488. pmDemandMaterials.setCreateBy(vo.getUpdateBy());
  489. pmDemandMaterials.setCreateTime(new Date());
  490. pmDemandMaterials.setUpdateBy(vo.getUpdateBy());
  491. pmDemandMaterials.setUpdateTime(pmDemandMaterials.getCreateTime());
  492. iPmDemandMaterialsService.save(pmDemandMaterials);
  493. }
  494. List<SysFileRef> sysFileRefs = pmDemandMaterialsReqVo.getSysFileRefs();
  495. uploadFile(pmDemandMaterials.getDemandMaterialsId(),SysFileRefEnum.PM_DEMAND_MATERIALS.getType(),sysFileRefs,vo.getUpdateBy());
  496. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(projectType)) { //服务类
  497. PmDemandServeReqVo pmDemandServeReqVo = vo.getPmDemandServeReqVo();
  498. LambdaQueryWrapper<PmDemandServe> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  499. lambdaQueryWrapper.eq(PmDemandServe::getDemandId,vo.getDemandId());
  500. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(lambdaQueryWrapper);
  501. if(pmDemandServe != null){
  502. pmDemandServeReqVo.setDemandServeId(pmDemandServe.getDemandServeId());
  503. BeanUtils.copyProperties(pmDemandServeReqVo,pmDemandServe);
  504. pmDemandServe.setUpdateBy(vo.getUpdateBy());
  505. pmDemandServe.setUpdateTime(new Date());
  506. iPmDemandServeService.updateById(pmDemandServe);
  507. } else {
  508. pmDemandServe = new PmDemandServe();
  509. BeanUtils.copyProperties(pmDemandServeReqVo,pmDemandServe);
  510. pmDemandServe.setCreateBy(vo.getUpdateBy());
  511. pmDemandServe.setCreateTime(new Date());
  512. pmDemandServe.setUpdateBy(vo.getUpdateBy());
  513. pmDemandServe.setUpdateTime(pmDemandServe.getCreateTime());
  514. iPmDemandServeService.save(pmDemandServe);
  515. }
  516. List<SysFileRef> sysFileRefs = pmDemandServeReqVo.getSysFileRefs();
  517. uploadFile(pmDemandServe.getDemandServeId(),SysFileRefEnum.PM_DEMAND_SERVE.getType(),sysFileRefs,vo.getUpdateBy());
  518. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(projectType)) { //工程类
  519. PmDemandEngineeringReqVo pmDemandEngineeringReqVo = vo.getPmDemandEngineeringReqVo();
  520. LambdaQueryWrapper<PmDemandEngineering> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  521. lambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,vo.getDemandId());
  522. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(lambdaQueryWrapper);
  523. if(pmDemandEngineering != null){
  524. pmDemandEngineeringReqVo.setDemandEngineeringId(pmDemandEngineering.getDemandEngineeringId());
  525. BeanUtils.copyProperties(pmDemandEngineeringReqVo,pmDemandEngineering);
  526. pmDemandEngineering.setUpdateBy(vo.getUpdateBy());
  527. pmDemandEngineering.setUpdateTime(new Date());
  528. iPmDemandEngineeringService.updateById(pmDemandEngineering);
  529. } else {
  530. pmDemandEngineering = new PmDemandEngineering();
  531. BeanUtils.copyProperties(pmDemandEngineeringReqVo,pmDemandEngineering);
  532. pmDemandEngineering.setCreateBy(vo.getUpdateBy());
  533. pmDemandEngineering.setCreateTime(new Date());
  534. pmDemandEngineering.setUpdateBy(vo.getUpdateBy());
  535. pmDemandEngineering.setUpdateTime(pmDemandEngineering.getCreateTime());
  536. iPmDemandEngineeringService.save(pmDemandEngineering);
  537. }
  538. List<SysFileRef> sysFileRefs = pmDemandEngineeringReqVo.getSysFileRefs();
  539. uploadFile(pmDemandEngineering.getDemandEngineeringId(),SysFileRefEnum.PM_DEMAND_ENGINEERING.getType(),sysFileRefs,vo.getUpdateBy());
  540. }
  541. pmDemand.setUpdateBy(vo.getUpdateBy());
  542. pmDemand.setUpdateTime(DateUtils.getNowDate());
  543. return this.updateById(pmDemand);
  544. }
  545. private HashMap<String, String> getFileMap(Long redId,Integer type){
  546. HashMap<String, Object> map = new HashMap<>();
  547. map.put("red_id", redId);
  548. map.put("type", type);
  549. List<SysFileRef> fileRefs = sysFileRefService.listByMap(map);
  550. if (!ObjectUtils.isEmpty(fileRefs)) {
  551. HashMap<String, String> fileMap = new HashMap<>();
  552. for (SysFileRef ref : fileRefs) {
  553. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  554. fileMap.put(fileInfo.getFileUrl(), fileInfo.getFileName());
  555. }
  556. return fileMap;
  557. } else {
  558. return null;
  559. }
  560. }
  561. /**
  562. * 查看流程图
  563. *
  564. * @param demandId 采购需求主键
  565. * @return 采购需求
  566. */
  567. @Override
  568. public Object viewFlowChart(Long demandId) {
  569. PmDemand pmDemand = this.getById(demandId);
  570. String projectStatus = String.valueOf(pmDemand.getProjectStatus());
  571. String moduleName = null;
  572. if (PmProjectStatus.DEMAND_WAIT_FILL.getCode().equals(projectStatus) || PmProjectStatus.DEMAND_AUDIT_RETURN.getCode().equals(projectStatus)) {
  573. moduleName = "需求填制";
  574. } else if(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode().equals(projectStatus)) {
  575. moduleName = "需求提交";
  576. } else if(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode().equals(projectStatus)) {
  577. moduleName = "需求审核";
  578. } else if(PmProjectStatus.TASK_WAIT_RELEASE.getCode().equals(projectStatus)) {
  579. moduleName = "任务下达";
  580. } else if(PmProjectStatus.WAIT_SELECT_AGENT.getCode().equals(projectStatus)) {
  581. moduleName = "选取代理";
  582. } else if(PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode().equals(projectStatus)) {
  583. moduleName = "上传招标文件";
  584. } else if(PmProjectStatus.WAIT_ANNOUNCEMENT.getCode().equals(projectStatus)) {
  585. moduleName = "发布公告";
  586. } else if(PmProjectStatus.WAIT_OPEN_BID.getCode().equals(projectStatus)) {
  587. moduleName = "填写专家信息,填写开标信息";
  588. } else if(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode().equals(projectStatus)) {
  589. moduleName = "填写中标信息";
  590. } else if(PmProjectStatus.BIDDING_PUBLICITY.getCode().equals(projectStatus)) {
  591. moduleName = "质疑处理,上传中标通知书";
  592. } else if(PmProjectStatus.CONTRACT_WAIT_FILL.getCode().equals(projectStatus)) {
  593. moduleName = "合同填制";
  594. } else if(PmProjectStatus.UNDER_CONSTRUCTION.getCode().equals(projectStatus)) {
  595. moduleName = "建设文档填制";
  596. } else if(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode().equals(projectStatus)) {
  597. moduleName = "项目归档";
  598. }
  599. return moduleName;
  600. }
  601. @Override
  602. public PmFlowChartResVo getModuleInfo(Long demandId,String moduleName){
  603. PmDemand pmDemand = this.getById(demandId);
  604. String projectType = pmDemand.getProjectType();
  605. LambdaQueryWrapper<PmFlowChart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  606. lambdaQueryWrapper.eq(PmFlowChart::getModuleName,moduleName);
  607. PmFlowChart pmFlowChart = iPmFlowChartService.getOne(lambdaQueryWrapper);
  608. if(pmFlowChart == null){
  609. return null;
  610. }
  611. PmFlowChartResVo vo = new PmFlowChartResVo();
  612. BeanUtils.copyProperties(pmFlowChart, vo);
  613. if("需求填制".equals(moduleName)) {
  614. HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND.getType());
  615. if(fileMap != null){
  616. vo.setFileMap(fileMap);
  617. }
  618. } else if("需求提交".equals(moduleName)) {
  619. if(ProjectTypes.EQUIPMENTTYPE.getCode().equals(projectType)){ //装备类
  620. LambdaQueryWrapper<PmDemandEquip> pmDemandEquipLambdaQueryWrapper = new LambdaQueryWrapper<>();
  621. pmDemandEquipLambdaQueryWrapper.eq(PmDemandEquip::getDemandId,demandId);
  622. PmDemandEquip pmDemandEquip = iPmDemandEquipService.getOne(pmDemandEquipLambdaQueryWrapper);
  623. if(pmDemandEquip != null){
  624. HashMap<String, String> fileMap = getFileMap(pmDemandEquip.getDemandEquipId(),SysFileRefEnum.PM_DEMAND_EQUIP.getType());
  625. if(fileMap != null){
  626. vo.setFileMap(fileMap);
  627. }
  628. }
  629. } else if(ProjectTypes.MATERIALTYPE.getCode().equals(projectType)) { //物资类
  630. LambdaQueryWrapper<PmDemandMaterials> pmDemandMaterialsLambdaQueryWrapper = new LambdaQueryWrapper<>();
  631. pmDemandMaterialsLambdaQueryWrapper.eq(PmDemandMaterials::getDemandId,demandId);
  632. PmDemandMaterials pmDemandMaterials = iPmDemandMaterialsService.getOne(pmDemandMaterialsLambdaQueryWrapper);
  633. if(pmDemandMaterials != null){
  634. HashMap<String, String> fileMap = getFileMap(pmDemandMaterials.getDemandMaterialsId(),SysFileRefEnum.PM_DEMAND_MATERIALS.getType());
  635. if(fileMap != null){
  636. vo.setFileMap(fileMap);
  637. }
  638. }
  639. } else if(ProjectTypes.SERVICESTYPE.getCode().equals(projectType)) { //服务类
  640. LambdaQueryWrapper<PmDemandServe> pmDemandServeLambdaQueryWrapper = new LambdaQueryWrapper<>();
  641. pmDemandServeLambdaQueryWrapper.eq(PmDemandServe::getDemandId,demandId);
  642. PmDemandServe pmDemandServe = iPmDemandServeService.getOne(pmDemandServeLambdaQueryWrapper);
  643. if(pmDemandServe != null){
  644. HashMap<String, String> fileMap = getFileMap(pmDemandServe.getDemandServeId(),SysFileRefEnum.PM_DEMAND_SERVE.getType());
  645. if(fileMap != null){
  646. vo.setFileMap(fileMap);
  647. }
  648. }
  649. } else if(ProjectTypes.PLANTOEXAMINETYPE.getCode().equals(projectType)) { //工程类
  650. LambdaQueryWrapper<PmDemandEngineering> pmDemandEngineeringLambdaQueryWrapper = new LambdaQueryWrapper<>();
  651. pmDemandEngineeringLambdaQueryWrapper.eq(PmDemandEngineering::getDemandId,demandId);
  652. PmDemandEngineering pmDemandEngineering = iPmDemandEngineeringService.getOne(pmDemandEngineeringLambdaQueryWrapper);
  653. if(pmDemandEngineering != null){
  654. HashMap<String, String> fileMap = getFileMap(pmDemandEngineering.getDemandEngineeringId(),SysFileRefEnum.PM_DEMAND_ENGINEERING.getType());
  655. if(fileMap != null){
  656. vo.setFileMap(fileMap);
  657. }
  658. }
  659. }
  660. } else if("需求审核".equals(moduleName)) {
  661. HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  662. if(fileMap != null){
  663. vo.setFileMap(fileMap);
  664. }
  665. } else if("任务下达".equals(moduleName)) {
  666. //todo
  667. }
  668. return vo;
  669. }
  670. /**
  671. * 提交采购需求
  672. *
  673. * @param pmDemandReqVo
  674. * @return 结果
  675. */
  676. @Override
  677. @Transactional(rollbackFor = Exception.class)
  678. public boolean commit(PmDemandReqVo pmDemandReqVo) {
  679. PmDemand pmDemand = new PmDemand();
  680. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  681. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode()));
  682. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  683. pmDemand.setUpdateTime(DateUtils.getNowDate());
  684. return this.updateById(pmDemand);
  685. }
  686. /**
  687. * 审核采购需求通过
  688. *
  689. * @param pmDemandReqVo
  690. * @return 结果
  691. */
  692. @Override
  693. @Transactional(rollbackFor = Exception.class)
  694. public boolean reviewTo(PmDemandReqVo pmDemandReqVo) {
  695. PmDemand pmDemand = new PmDemand();
  696. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  697. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  698. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  699. uploadFile(pmDemandReqVo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType(),sysFileRefs,pmDemandReqVo.getUpdateBy());
  700. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  701. pmDemand.setUpdateTime(DateUtils.getNowDate());
  702. pmDemand.setAuditTime(DateUtils.getNowDate());
  703. return this.updateById(pmDemand);
  704. }
  705. /**
  706. * 审核采购需求退回
  707. *
  708. * @param pmDemandReqVo
  709. * @return 结果
  710. */
  711. @Override
  712. @Transactional(rollbackFor = Exception.class)
  713. public boolean reviewReturn(PmDemandReqVo pmDemandReqVo) {
  714. PmDemand pmDemand = new PmDemand();
  715. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  716. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  717. pmDemand.setAdjustReason(pmDemandReqVo.getRefuseReason());
  718. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  719. pmDemand.setUpdateTime(DateUtils.getNowDate());
  720. pmDemand.setAuditTime(DateUtils.getNowDate());
  721. return this.updateById(pmDemand);
  722. }
  723. /**
  724. * 下达任务
  725. *
  726. * @param pmDemandReqVo
  727. * @return 结果
  728. */
  729. @Override
  730. @Transactional(rollbackFor = Exception.class)
  731. public boolean releaseTask(PmDemandReqVo pmDemandReqVo) {
  732. PmDemand pmDemand = new PmDemand();
  733. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  734. pmDemand.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_SELECT_AGENT.getCode()));
  735. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  736. uploadFile(pmDemandReqVo.getDemandId(),SysFileRefEnum.PM_TAST_RELEASE.getType(),sysFileRefs,pmDemandReqVo.getUpdateBy());
  737. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  738. pmDemand.setUpdateTime(DateUtils.getNowDate());
  739. pmDemand.setAuditTime(DateUtils.getNowDate());
  740. return this.updateById(pmDemand);
  741. }
  742. @Override
  743. @Transactional(rollbackFor = Exception.class)
  744. public boolean uploadFile(Long redId,Integer fileType, List<SysFileRef> sysFileRefs,String upateBy){
  745. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  746. for (SysFileRef ref : sysFileRefs) {
  747. if(ref.getFileId() == null){
  748. continue;
  749. }
  750. QueryWrapper<SysFileRef> queryWrapper = new QueryWrapper<>();
  751. queryWrapper.lambda().eq(SysFileRef::getFileId,ref.getFileId())
  752. .eq(SysFileRef::getRedId,redId)
  753. .eq(SysFileRef::getType,fileType);
  754. List<SysFileRef> sysFileRefList = sysFileRefService.list(queryWrapper);
  755. if(!CollectionUtils.isEmpty(sysFileRefList)){
  756. sysFileRefService.remove(queryWrapper);
  757. }
  758. ref.setRedId(redId);
  759. ref.setType(fileType);
  760. ref.setCreated(upateBy);
  761. ref.setCreateTime(new Date());
  762. ref.setUpdated(upateBy);
  763. ref.setUpdateTime(ref.getCreateTime());
  764. sysFileRefService.save(ref);
  765. }
  766. return true;
  767. } else {
  768. return false;
  769. }
  770. }
  771. @Override
  772. @Transactional(rollbackFor = Exception.class)
  773. public boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo) throws Exception {
  774. PmReleaseAnnouncement pmReleaseAnnouncement = new PmReleaseAnnouncement();
  775. BeanUtils.copyProperties(pmReleaseAnnouncementReqVo,pmReleaseAnnouncement);
  776. if(pmReleaseAnnouncementService.save(pmReleaseAnnouncement)){
  777. if (uploadFile(pmReleaseAnnouncement.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType(),pmReleaseAnnouncementReqVo.getSysFileRefs(),pmReleaseAnnouncementReqVo.getUpdateBy())) {
  778. PmDemand pmDemandUpdate = new PmDemand();
  779. pmDemandUpdate.setDemandId(pmReleaseAnnouncementReqVo.getDemandId());
  780. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_OPEN_BID.getCode()));
  781. pmDemandUpdate.setUpdateTime(pmReleaseAnnouncementReqVo.getUpdateTime());
  782. pmDemandUpdate.setUpdateBy(pmReleaseAnnouncementReqVo.getUpdateBy());
  783. return this.updateById(pmDemandUpdate);
  784. //TODO 发布公告生成后,会默认将该数据同步到公告管理和首页中
  785. } else {
  786. return false;
  787. }
  788. } else {
  789. return false;
  790. }
  791. }
  792. @Override
  793. @Transactional(rollbackFor = Exception.class)
  794. public boolean insertExpertBatch(PmBaseExpertFillReqVo pmBaseExpertFillReqVo) throws Exception {
  795. PmDemand pmDemand = this.getById(pmBaseExpertFillReqVo.getDemandId());
  796. if(ObjectUtils.isEmpty(pmDemand)){
  797. throw new Exception("参数错误");
  798. }
  799. List<BaseExpert> baseExpertList = pmBaseExpertFillReqVo.getBaseExpertList();
  800. List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
  801. Date now = new Date();
  802. for (BaseExpert baseExpert : baseExpertList) {
  803. if(NameListType.BLACK.getCode().equals(baseExpert.getStatus())){
  804. throw new Exception("该专家(身份证号:" +baseExpert.getIdNumber() + ")属于黑名单");
  805. } else {
  806. if(ObjectUtils.isEmpty(baseExpert.getStatus())){
  807. baseExpert.setStatus(NameListType.WHITE.getCode());
  808. }
  809. }
  810. if(pmDemand.getProjectType().equals(baseExpert.getVarietyPurchase())){
  811. throw new Exception("该专家(身份证号:" +baseExpert.getIdNumber() + ")所属采购品种和项目类型不匹配");
  812. }
  813. if(ObjectUtils.isEmpty(baseExpert.getCreated())){
  814. baseExpert.setCreated(pmBaseExpertFillReqVo.getCreateBy());
  815. baseExpert.setCreateTime(now);
  816. }
  817. if(ObjectUtils.isEmpty(baseExpert.getUpdated())){
  818. baseExpert.setUpdated(pmBaseExpertFillReqVo.getUpdateBy());
  819. baseExpert.setUpdateTime(now);
  820. }
  821. PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
  822. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  823. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  824. pmDemandExpertRef.setCreateBy(pmBaseExpertFillReqVo.getCreateBy());
  825. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertFillReqVo.getAccessTime()));
  826. pmDemandExpertRef.setCreateTime(now);
  827. pmDemandExpertRef.setUpdateBy(pmBaseExpertFillReqVo.getCreateBy());
  828. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  829. pmDemandExpertRefList.add(pmDemandExpertRef);
  830. }
  831. if (baseExpertService.saveOrUpdateBatch(baseExpertList)){
  832. return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
  833. } else {
  834. return false;
  835. }
  836. }
  837. @Override
  838. @Transactional(rollbackFor = Exception.class)
  839. public boolean extractExpertBatch(PmBaseExpertExtractReqVo pmBaseExpertExtractReqVo) throws Exception {
  840. Integer technicalExpertNumber = pmBaseExpertExtractReqVo.getTechnicalExpertNumber();
  841. if(technicalExpertNumber== null){
  842. technicalExpertNumber = 0;
  843. }
  844. Integer economicExpertNumber = pmBaseExpertExtractReqVo.getEconomicExpertNumber();
  845. if(economicExpertNumber == null){
  846. economicExpertNumber = 0;
  847. }
  848. Integer legalAffairsExpertNumber = pmBaseExpertExtractReqVo.getLegalAffairsExpertNumber();
  849. if(legalAffairsExpertNumber == null){
  850. legalAffairsExpertNumber = 0;
  851. }
  852. Integer spareExpertNumber = pmBaseExpertExtractReqVo.getSpareExpertNumber();
  853. if(spareExpertNumber == null){
  854. spareExpertNumber = 0;
  855. }
  856. String professional = pmBaseExpertExtractReqVo.getProfessional();
  857. if(spareExpertNumber > 0 && ObjectUtils.isEmpty(professional)){
  858. throw new Exception("抽取备用专家必须选择专家专业");
  859. }
  860. String localArea = pmBaseExpertExtractReqVo.getLocalArea();
  861. if(spareExpertNumber > 0 && ObjectUtils.isEmpty(localArea)){
  862. throw new Exception("抽取备用专家必须选择所在区域");
  863. }
  864. PmDemand pmDemand = this.getById(pmBaseExpertExtractReqVo.getDemandId());
  865. if(ObjectUtils.isEmpty(pmDemand)){
  866. throw new Exception("参数错误");
  867. }
  868. //从专家库中查询符合项目类型的以及是白名单的全部列表
  869. LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<BaseExpert>();
  870. lw.eq(BaseExpert::getVarietyPurchase,pmDemand.getProjectType())
  871. .eq(BaseExpert::getStatus,NameListType.WHITE.getCode());
  872. List<BaseExpert> baseExpertList = baseExpertService.list(lw);
  873. if(ObjectUtils.isEmpty(baseExpertList)){
  874. throw new Exception("没抽取到符合条件的专家");
  875. }
  876. //从列表中挑出来各个类型的子列表
  877. List<BaseExpert> technicalExpertList = new ArrayList<>();
  878. List<BaseExpert> economicExpertList = new ArrayList<>();
  879. List<BaseExpert> legalAffairsExpertList = new ArrayList<>();
  880. List<BaseExpert> spareExpertList = new ArrayList<>();
  881. //TODO 所在区域判读
  882. for(BaseExpert baseExpert : baseExpertList){
  883. if(technicalExpertNumber > 0) {
  884. if(baseExpert.getExpertType().contains(ExpertType.TECHNICAL_EXPERT.getCode())){
  885. technicalExpertList.add(baseExpert);
  886. }
  887. }
  888. if(economicExpertNumber > 0) {
  889. if(baseExpert.getExpertType().contains(ExpertType.ECONOMIC_EXPERT.getCode())){
  890. economicExpertList.add(baseExpert);
  891. }
  892. }
  893. if (legalAffairsExpertNumber > 0) {
  894. if(baseExpert.getExpertType().contains(ExpertType.LEGALAFFAIRS_EXPERT.getCode())){
  895. legalAffairsExpertList.add(baseExpert);
  896. }
  897. }
  898. if (spareExpertNumber > 0) {
  899. String[] arr = professional.split(",");
  900. List<String> professionalList = Arrays.asList(arr);
  901. String majorType = baseExpert.getMajorType();
  902. if(!ObjectUtils.isEmpty(majorType)){
  903. String[] arr2 = majorType.split(",");
  904. List<String> majorTypeList = Arrays.asList(arr2);
  905. if(hasIntersection(professionalList,majorTypeList)){
  906. spareExpertList.add(baseExpert);
  907. }
  908. }
  909. }
  910. }
  911. //从子列表中随机抽取符合数据量的
  912. List<BaseExpert> alltExpertList = new ArrayList<>();
  913. if(!ObjectUtils.isEmpty(technicalExpertList)){
  914. alltExpertList.addAll(RandomUtil.getRandomList(technicalExpertList,technicalExpertNumber));
  915. }
  916. if(!ObjectUtils.isEmpty(economicExpertList)){
  917. alltExpertList.addAll(RandomUtil.getRandomList(economicExpertList,economicExpertNumber));
  918. }
  919. if(!ObjectUtils.isEmpty(legalAffairsExpertList)){
  920. alltExpertList.addAll(RandomUtil.getRandomList(legalAffairsExpertList,legalAffairsExpertNumber));
  921. }
  922. if(!ObjectUtils.isEmpty(spareExpertList)){
  923. alltExpertList.addAll(RandomUtil.getRandomList(spareExpertList,spareExpertNumber));
  924. }
  925. if(ObjectUtils.isEmpty(alltExpertList)){
  926. throw new Exception("没抽取到符合条件的专家");
  927. } else {
  928. List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
  929. for(BaseExpert baseExpert :alltExpertList ) {
  930. PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
  931. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  932. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  933. pmDemandExpertRef.setCreateBy(pmBaseExpertExtractReqVo.getCreateBy());
  934. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertExtractReqVo.getAccessTime()));
  935. pmDemandExpertRef.setCreateTime(new Date());
  936. pmDemandExpertRef.setUpdateBy(pmBaseExpertExtractReqVo.getCreateBy());
  937. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  938. pmDemandExpertRefList.add(pmDemandExpertRef);
  939. }
  940. return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
  941. }
  942. }
  943. //二个列表是否有交集
  944. private boolean hasIntersection(List<String> professionalList, List<String> majorTypeList) {
  945. for (String professiona : professionalList) {
  946. for(String majorType : majorTypeList) {
  947. if(professiona.equals(majorType)){
  948. return true;
  949. }
  950. }
  951. }
  952. return false;
  953. }
  954. @Override
  955. @Transactional(rollbackFor = Exception.class)
  956. public boolean insertBidOpeningBatch(PmBidOpeningFillReqVo pmBidOpeningFillReqVo) throws Exception {
  957. PmDemand pmDemand = this.getById(pmBidOpeningFillReqVo.getDemandId());
  958. if(ObjectUtils.isEmpty(pmDemand)){
  959. throw new Exception("参数错误");
  960. }
  961. //从发布公告里获取开标时间
  962. LambdaQueryWrapper<PmReleaseAnnouncement> lw = new LambdaQueryWrapper<>();
  963. lw.eq(PmReleaseAnnouncement::getDemandId,pmDemand.getDemandId()).orderByDesc(PmReleaseAnnouncement::getReleaseTime)
  964. .last(" limit 1 ");
  965. PmReleaseAnnouncement pmReleaseAnnouncement = this.pmReleaseAnnouncementService.getOne(lw);
  966. if(pmReleaseAnnouncement == null){
  967. throw new Exception("发布公告不存在");
  968. }
  969. Date tenderOpenTime = pmReleaseAnnouncement.getTenderOpenTime();
  970. Date now = new Date();
  971. List<PmBidOpening> pmBidOpeningList = pmBidOpeningFillReqVo.getPmBidOpeningList();
  972. for (PmBidOpening pmBidOpening : pmBidOpeningList) {
  973. if(ObjectUtils.isEmpty(pmBidOpening.getBidderName())){
  974. throw new Exception("投标人名称不能为空");
  975. }
  976. if(ObjectUtils.isEmpty(pmBidOpening.getScore())){
  977. throw new Exception("分数不能为空");
  978. }
  979. pmBidOpening.setOpenBidTime(tenderOpenTime);
  980. pmBidOpening.setDemandId(pmBidOpeningFillReqVo.getDemandId());
  981. pmBidOpening.setCreateBy(pmBidOpeningFillReqVo.getCreateBy());
  982. pmBidOpening.setCreateTime(now);
  983. pmBidOpening.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  984. pmBidOpening.setUpdateTime(now);
  985. }
  986. if(pmBidOpeningService.saveBatch(pmBidOpeningList)) {
  987. PmDemand pmDemandUpdate = new PmDemand();
  988. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  989. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode()));
  990. pmDemandUpdate.setUpdateTime(now);
  991. pmDemandUpdate.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  992. return this.updateById(pmDemandUpdate);
  993. } else {
  994. return false;
  995. }
  996. }
  997. @Override
  998. @Transactional(rollbackFor = Exception.class)
  999. public boolean insertPmBidWinning(PmBidWinningReqVo pmBidWinningReqVo) throws Exception {
  1000. List<Long> pmBidOpeningIdList = pmBidWinningReqVo.getPmBidOpeningIdList();
  1001. if(ObjectUtils.isEmpty(pmBidOpeningIdList)) {
  1002. throw new Exception("中标单位信息列表不能为空");
  1003. }
  1004. if(ObjectUtils.isEmpty(pmBidWinningReqVo.getSysFileRefs())){
  1005. throw new Exception("上传附件不能为空");
  1006. }
  1007. if(ObjectUtils.isEmpty(pmBidWinningReqVo.getBidWinningAmount())){
  1008. throw new Exception("中标金额不能为空");
  1009. }
  1010. PmBidWinning pmBidWinning = new PmBidWinning();
  1011. BeanUtils.copyProperties(pmBidWinningReqVo,pmBidWinning);
  1012. if(pmBidWinningService.save(pmBidWinning)){
  1013. List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = new ArrayList<>();
  1014. for(Long pmBidOpeningId : pmBidOpeningIdList){
  1015. PmBidWinningOpeningRef pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
  1016. pmBidWinningOpeningRef.setOpeningId(pmBidOpeningId);
  1017. pmBidWinningOpeningRef.setWinningId(pmBidWinning.getId());
  1018. pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
  1019. pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
  1020. pmBidWinningOpeningRef.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1021. pmBidWinningOpeningRef.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1022. pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
  1023. }
  1024. if (pmBidWinningOpeningRefService.saveBatch(pmBidWinningOpeningRefList)) {
  1025. if(uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(),pmBidWinningReqVo.getSysFileRefs(),pmBidWinningReqVo.getUpdateBy())) {
  1026. PmDemand pmDemandUpdate = new PmDemand();
  1027. pmDemandUpdate.setDemandId(pmBidWinningReqVo.getDemandId());
  1028. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.BIDDING_PUBLICITY.getCode()));
  1029. pmDemandUpdate.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1030. pmDemandUpdate.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1031. return this.updateById(pmDemandUpdate);
  1032. } else {
  1033. return false;
  1034. }
  1035. } else {
  1036. return false;
  1037. }
  1038. } else {
  1039. return false;
  1040. }
  1041. }
  1042. @Override
  1043. @Transactional(rollbackFor = Exception.class)
  1044. public boolean updatePmBidWinning(PmBidWinningReqVo pmBidWinningReqVo) throws Exception {
  1045. List<Long> pmBidOpeningIdList = pmBidWinningReqVo.getPmBidOpeningIdList();
  1046. if(ObjectUtils.isEmpty(pmBidOpeningIdList)) {
  1047. throw new Exception("中标单位信息列表不能为空");
  1048. }
  1049. if(ObjectUtils.isEmpty(pmBidWinningReqVo.getSysFileRefs())){
  1050. throw new Exception("上传附件不能为空");
  1051. }
  1052. if(ObjectUtils.isEmpty(pmBidWinningReqVo.getBidWinningAmount())){
  1053. throw new Exception("中标金额不能为空");
  1054. }
  1055. LambdaQueryWrapper<PmBidWinning> lw = new LambdaQueryWrapper<>();
  1056. lw.eq(PmBidWinning::getDemandId,pmBidWinningReqVo.getDemandId());
  1057. PmBidWinning pmBidWinning = pmBidWinningService.getOne(lw);
  1058. if(pmBidWinning == null){
  1059. throw new Exception("原中标信息不存在");
  1060. }
  1061. pmBidWinning.setBidWinningAmount(pmBidWinningReqVo.getBidWinningAmount());
  1062. pmBidWinning.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1063. pmBidWinning.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1064. if(pmBidWinningService.updateById(pmBidWinning)){
  1065. //删除老的:
  1066. QueryWrapper<PmBidWinningOpeningRef> queryWrapper = new QueryWrapper<>();
  1067. queryWrapper.lambda().eq(PmBidWinningOpeningRef::getWinningId,pmBidWinning.getId());
  1068. pmBidWinningOpeningRefService.remove(queryWrapper);
  1069. //添加新的
  1070. List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = new ArrayList<>();
  1071. for(Long pmBidOpeningId : pmBidOpeningIdList){
  1072. PmBidWinningOpeningRef pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
  1073. pmBidWinningOpeningRef.setOpeningId(pmBidOpeningId);
  1074. pmBidWinningOpeningRef.setWinningId(pmBidWinning.getId());
  1075. pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
  1076. pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
  1077. pmBidWinningOpeningRef.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1078. pmBidWinningOpeningRef.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1079. pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
  1080. }
  1081. return pmBidWinningOpeningRefService.saveBatch(pmBidWinningOpeningRefList);
  1082. } else {
  1083. return false;
  1084. }
  1085. }
  1086. @Override
  1087. @Transactional(rollbackFor = Exception.class)
  1088. public boolean insertPmBidFailure(PmBidFailureReqVo pmBidFailureReqVo) throws Exception {
  1089. PmBidFailure pmBidFailure = new PmBidFailure();
  1090. BeanUtils.copyProperties(pmBidFailureReqVo,pmBidFailure);
  1091. if(pmBidFailureService.save(pmBidFailure)){
  1092. return uploadFile(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType(),pmBidFailureReqVo.getSysFileRefs(),pmBidFailureReqVo.getUpdateBy());
  1093. } else {
  1094. return false;
  1095. }
  1096. }
  1097. @Override
  1098. @Transactional(rollbackFor = Exception.class)
  1099. public boolean insertContractInfo(PmContractInfoReqVo pmContractInfoReqVo) throws Exception {
  1100. Long demandId = pmContractInfoReqVo.getDemandId();
  1101. if(ObjectUtils.isEmpty(demandId)){
  1102. throw new Exception("采购需求ID不能为空");
  1103. }
  1104. String contractSignPlaceA = pmContractInfoReqVo.getPmBaseUnitInformationVo().getContractSignPlace();
  1105. if(ObjectUtils.isEmpty(contractSignPlaceA)) {
  1106. throw new Exception("甲方合同签订地点不能为空");
  1107. }
  1108. Date contractSignDateA = pmContractInfoReqVo.getPmBaseUnitInformationVo().getContractSignDate();
  1109. if(ObjectUtils.isEmpty(contractSignDateA)) {
  1110. throw new Exception("甲方合同签订日期不能为空");
  1111. }
  1112. PmDemand pmDemand = this.getById(demandId);
  1113. if(ObjectUtils.isEmpty(pmDemand)){
  1114. throw new Exception("采购需求ID错误");
  1115. }
  1116. List<PmBaseSupplierVo> baseSupplierList = pmContractInfoReqVo.getBaseSupplierList();
  1117. if(ObjectUtils.isEmpty(baseSupplierList)){
  1118. throw new Exception("乙方信息列表不能为空");
  1119. }
  1120. for(PmBaseSupplierVo baseSupplierVo : baseSupplierList) {
  1121. String contractSignPlaceB = baseSupplierVo.getContractSignPlace();
  1122. if(ObjectUtils.isEmpty(contractSignPlaceB)) {
  1123. throw new Exception("乙方合同签订地点不能为空");
  1124. }
  1125. Date contractSignDateB = baseSupplierVo.getContractSignDate();
  1126. if(ObjectUtils.isEmpty(contractSignDateB)) {
  1127. throw new Exception("乙方合同签订日期不能为空");
  1128. }
  1129. }
  1130. List<SysFileRef> sysFileRefs = pmContractInfoReqVo.getSysFileRefs();
  1131. if(ObjectUtils.isEmpty(sysFileRefs)){
  1132. throw new Exception("上传附件不能为空");
  1133. }
  1134. PmContractInfo pmContractInfo = new PmContractInfo();
  1135. org.springframework.beans.BeanUtils.copyProperties(pmContractInfoReqVo,pmContractInfo);
  1136. if(pmContractInfoService.save(pmContractInfo)){
  1137. if (this.uploadFile(pmContractInfo.getId(), SysFileRefEnum.PM_CONTRACT_INFO.getType(),sysFileRefs,pmContractInfoReqVo.getUpdateBy())) {
  1138. PmContractUnitRef pmContractUnitRefA = new PmContractUnitRef();
  1139. pmContractUnitRefA.setContractInfoId(pmContractInfo.getId());
  1140. pmContractUnitRefA.setDemandId(demandId);
  1141. pmContractUnitRefA.setUnitId(pmDemand.getPurchaseDeptId());
  1142. pmContractUnitRefA.setContractSignPlace(contractSignPlaceA);
  1143. pmContractUnitRefA.setContractSignDate(contractSignDateA);
  1144. pmContractUnitRefA.setUnitType("A");
  1145. pmContractUnitRefA.setCreateBy(pmContractInfoReqVo.getCreateBy());
  1146. pmContractUnitRefA.setCreateTime(pmContractInfoReqVo.getCreateTime());
  1147. pmContractUnitRefA.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1148. pmContractUnitRefA.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1149. if(pmContractUnitRefService.save(pmContractUnitRefA)){
  1150. for(PmBaseSupplierVo baseSupplierReqVo : baseSupplierList) {
  1151. BaseSupplier baseSupplier = new BaseSupplier();
  1152. BeanUtils.copyProperties(baseSupplierReqVo,baseSupplier);
  1153. if(ObjectUtils.isEmpty(baseSupplier.getSupplierAdvancePurchase())){
  1154. baseSupplier.setSupplierAdvancePurchase("0"); //关闭
  1155. }
  1156. if(ObjectUtils.isEmpty(baseSupplier.getSupplierType())){
  1157. baseSupplier.setSupplierType(pmDemand.getProjectType());
  1158. }
  1159. if(ObjectUtils.isEmpty(baseSupplier.getSupplierState())){
  1160. baseSupplier.setSupplierState(NameListType.WHITE.getCode());
  1161. }
  1162. if(ObjectUtils.isEmpty(baseSupplier.getCreated())){
  1163. baseSupplier.setCreated(pmContractInfoReqVo.getCreateBy());
  1164. baseSupplier.setCreateTime(pmContractInfoReqVo.getCreateTime());
  1165. }
  1166. if(ObjectUtils.isEmpty(baseSupplier.getUpdated())){
  1167. baseSupplier.setUpdated(pmContractInfoReqVo.getUpdateBy());
  1168. baseSupplier.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1169. }
  1170. if(baseSupplierService.saveOrUpdate(baseSupplier)) {
  1171. String contractSignPlaceB = baseSupplierReqVo.getContractSignPlace();
  1172. Date contractSignDateB = baseSupplierReqVo.getContractSignDate();
  1173. PmContractUnitRef pmContractUnitRefB = new PmContractUnitRef();
  1174. pmContractUnitRefB.setContractInfoId(pmContractInfo.getId());
  1175. pmContractUnitRefB.setDemandId(demandId);
  1176. pmContractUnitRefA.setUnitId(baseSupplier.getId().longValue());
  1177. pmContractUnitRefB.setContractSignPlace(contractSignPlaceB);
  1178. pmContractUnitRefB.setContractSignDate(contractSignDateB);
  1179. pmContractUnitRefB.setUnitType("B");
  1180. pmContractUnitRefB.setCreateBy(pmContractInfoReqVo.getCreateBy());
  1181. pmContractUnitRefB.setCreateTime(pmContractInfoReqVo.getCreateTime());
  1182. pmContractUnitRefB.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1183. pmContractUnitRefB.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1184. if(!this.pmContractUnitRefService.save(pmContractUnitRefB)){
  1185. throw new Exception("保存合同单位关系失败");
  1186. }
  1187. } else {
  1188. throw new Exception("保存或更新供应商失败");
  1189. }
  1190. }
  1191. } else {
  1192. throw new Exception("保存合同单位关系失败");
  1193. }
  1194. PmDemand pmDemandUpdate = new PmDemand();
  1195. pmDemandUpdate.setDemandId(demandId);
  1196. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.UNDER_CONSTRUCTION.getCode()));
  1197. pmDemandUpdate.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1198. pmDemandUpdate.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1199. return this.updateById(pmDemandUpdate);
  1200. } else {
  1201. throw new Exception("保存附件失败");
  1202. }
  1203. } else {
  1204. return false;
  1205. }
  1206. }
  1207. @Override
  1208. @Transactional(rollbackFor = Exception.class)
  1209. public boolean insertProjectConstruction(PmProjectConstructionReqVo pmProjectConstructionReqVo) throws Exception {
  1210. Long demandId = pmProjectConstructionReqVo.getDemandId();
  1211. if(ObjectUtils.isEmpty(demandId)){
  1212. throw new Exception("采购需求ID不能为空");
  1213. }
  1214. PmDemand pmDemand = this.getById(demandId);
  1215. if(ObjectUtils.isEmpty(pmDemand)){
  1216. throw new Exception("采购需求ID错误");
  1217. }
  1218. List<SysFileRef> sysFileRefs = pmProjectConstructionReqVo.getSysFileRefs();
  1219. if(ObjectUtils.isEmpty(sysFileRefs)){
  1220. throw new Exception("上传附件不能为空");
  1221. }
  1222. PmProjectConstruction pmProjectConstruction = new PmProjectConstruction();
  1223. org.springframework.beans.BeanUtils.copyProperties(pmProjectConstructionReqVo,pmProjectConstruction);
  1224. if(pmProjectConstructionService.save(pmProjectConstruction)){
  1225. if (this.uploadFile(pmProjectConstruction.getId(), SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType(),sysFileRefs,pmProjectConstructionReqVo.getUpdateBy())) {
  1226. PmDemand pmDemandUpdate = new PmDemand();
  1227. pmDemandUpdate.setDemandId(demandId);
  1228. pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode()));
  1229. pmDemandUpdate.setUpdateTime(pmProjectConstructionReqVo.getUpdateTime());
  1230. pmDemandUpdate.setUpdateBy(pmProjectConstructionReqVo.getUpdateBy());
  1231. return this.updateById(pmDemandUpdate);
  1232. } else {
  1233. return false;
  1234. }
  1235. } else {
  1236. return false;
  1237. }
  1238. }
  1239. }