PmDemandServiceImpl.java 258 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837
  1. package com.ozs.pm.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.ozs.base.domain.BaseAgency;
  8. import com.ozs.base.domain.BaseExpert;
  9. import com.ozs.base.domain.BaseNotice;
  10. import com.ozs.base.domain.BaseNoticeType;
  11. import com.ozs.base.domain.BaseUnitInformation;
  12. import com.ozs.base.domain.vo.BaseExpertVo;
  13. import com.ozs.base.mapper.BaseExpertMapper;
  14. import com.ozs.base.service.BaseAgencyService;
  15. import com.ozs.base.service.BaseExpertService;
  16. import com.ozs.base.service.BaseNoticeService;
  17. import com.ozs.base.service.BaseNoticeTypeService;
  18. import com.ozs.common.constant.Constants;
  19. import com.ozs.common.core.domain.AjaxResult;
  20. import com.ozs.common.core.domain.entity.SysDept;
  21. import com.ozs.common.core.domain.entity.SysDictData;
  22. import com.ozs.common.core.domain.entity.SysRole;
  23. import com.ozs.common.core.domain.entity.SysUser;
  24. import com.ozs.common.core.domain.model.LoginUser;
  25. import com.ozs.common.enums.BidWinningStatus;
  26. import com.ozs.common.enums.DataIsDelete;
  27. import com.ozs.common.enums.ExpertType;
  28. import com.ozs.common.enums.IsExcess;
  29. import com.ozs.common.enums.NameListType;
  30. import com.ozs.common.enums.PlanPurchaseMode;
  31. import com.ozs.common.enums.PmProjectStatus;
  32. import com.ozs.common.enums.ProcurementMethodSuggest;
  33. import com.ozs.common.enums.ProjectAttribute;
  34. import com.ozs.common.enums.ProjectStatus;
  35. import com.ozs.common.enums.ProjectTypes;
  36. import com.ozs.common.enums.SysFileRefEnum;
  37. import com.ozs.common.enums.WarnStatus;
  38. import com.ozs.common.utils.DateUtils;
  39. import com.ozs.common.utils.RandomUtil;
  40. import com.ozs.common.utils.SecurityUtils;
  41. import com.ozs.common.utils.StringUtils;
  42. import com.ozs.common.utils.bean.BeanUtils;
  43. import com.ozs.home.domain.vo.HomeToDoQueryResVo;
  44. import com.ozs.plan.doman.PlanQuarter;
  45. import com.ozs.plan.doman.PlanYears;
  46. import com.ozs.plan.doman.ProvisionalPlan;
  47. import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
  48. import com.ozs.plan.mapper.ProvisionalPlanMapper;
  49. import com.ozs.plan.service.PlanQuarterService;
  50. import com.ozs.plan.service.PlanYearsService;
  51. import com.ozs.pm.doman.PmAuditDeptRef;
  52. import com.ozs.pm.doman.PmBidFailure;
  53. import com.ozs.pm.doman.PmBidFailureHis;
  54. import com.ozs.pm.doman.PmBidOpening;
  55. import com.ozs.pm.doman.PmBidWinning;
  56. import com.ozs.pm.doman.PmBidWinningOpeningRef;
  57. import com.ozs.pm.doman.PmBookBuilding;
  58. import com.ozs.pm.doman.PmCallQuestion;
  59. import com.ozs.pm.doman.PmContractInfo;
  60. import com.ozs.pm.doman.PmDemand;
  61. import com.ozs.pm.doman.PmDemandExpertRef;
  62. import com.ozs.pm.doman.PmExpertFeedback;
  63. import com.ozs.pm.doman.PmProcurementDocumentsReview;
  64. import com.ozs.pm.doman.PmProjectConstruction;
  65. import com.ozs.pm.doman.PmReleaseAnnouncement;
  66. import com.ozs.pm.doman.vo.requestVo.PmBaseExpertExtractReqVo;
  67. import com.ozs.pm.doman.vo.requestVo.PmBaseExpertFillReqVo;
  68. import com.ozs.pm.doman.vo.requestVo.PmBidFailureReqVo;
  69. import com.ozs.pm.doman.vo.requestVo.PmBidOpeningFillReqVo;
  70. import com.ozs.pm.doman.vo.requestVo.PmBidWinningReqVo;
  71. import com.ozs.pm.doman.vo.requestVo.PmBookBuildingReqVo;
  72. import com.ozs.pm.doman.vo.requestVo.PmContractInfoReqVo;
  73. import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
  74. import com.ozs.pm.doman.vo.requestVo.PmProjectConstructionReqVo;
  75. import com.ozs.pm.doman.vo.requestVo.PmReleaseAnnouncementReqVo;
  76. import com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo;
  77. import com.ozs.pm.doman.vo.responseVo.PmBidFailureResVo;
  78. import com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo;
  79. import com.ozs.pm.doman.vo.responseVo.PmBidWinningResVo;
  80. import com.ozs.pm.doman.vo.responseVo.PmBookBuildingResVo;
  81. import com.ozs.pm.doman.vo.responseVo.PmCallQuestionResVo;
  82. import com.ozs.pm.doman.vo.responseVo.PmContractInfoResVo;
  83. import com.ozs.pm.doman.vo.responseVo.PmDemandResVo;
  84. import com.ozs.pm.doman.vo.responseVo.PmExpertFeedbackResVo;
  85. import com.ozs.pm.doman.vo.responseVo.PmProcurementDocumentsReviewResVo;
  86. import com.ozs.pm.doman.vo.responseVo.PmProjectConstructionResVo;
  87. import com.ozs.pm.doman.vo.responseVo.PmPurchaseExecutionResVo;
  88. import com.ozs.pm.doman.vo.responseVo.PmReleaseAnnouncementResVo;
  89. import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
  90. import com.ozs.pm.mapper.PmDemandMapper;
  91. import com.ozs.pm.service.IPmDemandService;
  92. import com.ozs.pm.service.PmAuditDeptRefService;
  93. import com.ozs.pm.service.PmBidFailureHisService;
  94. import com.ozs.pm.service.PmBidFailureService;
  95. import com.ozs.pm.service.PmBidOpeningHisService;
  96. import com.ozs.pm.service.PmBidOpeningService;
  97. import com.ozs.pm.service.PmBidWinningOpeningRefService;
  98. import com.ozs.pm.service.PmBidWinningService;
  99. import com.ozs.pm.service.PmBookBuildingService;
  100. import com.ozs.pm.service.PmCallQuestionHisService;
  101. import com.ozs.pm.service.PmCallQuestionService;
  102. import com.ozs.pm.service.PmContractInfoService;
  103. import com.ozs.pm.service.PmDemandExpertRefService;
  104. import com.ozs.pm.service.PmExpertFeedbackService;
  105. import com.ozs.pm.service.PmProcurementDocumentsReviewService;
  106. import com.ozs.pm.service.PmProjectConstructionService;
  107. import com.ozs.pm.service.PmReleaseAnnouncementService;
  108. import com.ozs.system.domain.SysFileInfo;
  109. import com.ozs.system.domain.SysFileRef;
  110. import com.ozs.system.domain.vo.SysRegionVO;
  111. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  112. import com.ozs.system.mapper.SysDeptMapper;
  113. import com.ozs.system.mapper.SysFileRefMapper;
  114. import com.ozs.system.mapper.SysRoleMapper;
  115. import com.ozs.system.service.ISysDeptService;
  116. import com.ozs.system.service.ISysDictDataService;
  117. import com.ozs.system.service.ISysDictTypeService;
  118. import com.ozs.system.service.ISysRegionService;
  119. import com.ozs.system.service.ISysUserService;
  120. import com.ozs.system.service.SysFileRefService;
  121. import com.ozs.system.service.SysFileService;
  122. import lombok.extern.slf4j.Slf4j;
  123. import org.springframework.beans.factory.annotation.Autowired;
  124. import org.springframework.stereotype.Service;
  125. import org.springframework.transaction.annotation.Transactional;
  126. import org.springframework.util.ObjectUtils;
  127. import java.math.BigDecimal;
  128. import java.text.DecimalFormat;
  129. import java.text.ParseException;
  130. import java.text.SimpleDateFormat;
  131. import java.util.ArrayList;
  132. import java.util.Arrays;
  133. import java.util.Calendar;
  134. import java.util.Date;
  135. import java.util.HashMap;
  136. import java.util.HashSet;
  137. import java.util.LinkedHashMap;
  138. import java.util.LinkedList;
  139. import java.util.List;
  140. import java.util.Map;
  141. import java.util.Set;
  142. import java.util.stream.Collectors;
  143. /**
  144. * 采购需求Service业务层处理
  145. *
  146. * @author ruoyi
  147. * @date 2023-01-16
  148. */
  149. @Service
  150. @Slf4j
  151. public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> implements IPmDemandService {
  152. @Autowired
  153. private PmDemandMapper pmDemandMapper;
  154. @Autowired
  155. private ISysDeptService deptService;
  156. @Autowired
  157. private SysRoleMapper sysRoleMapper;
  158. @Autowired
  159. private ISysDictDataService dictDataService;
  160. @Autowired
  161. private ISysDictTypeService dictTypeService;
  162. @Autowired
  163. private SysFileService fileService;
  164. @Autowired
  165. private SysFileRefService sysFileRefService;
  166. @Autowired
  167. private PmBidFailureHisService pmBidFailureHisService;
  168. @Autowired
  169. private PmReleaseAnnouncementService pmReleaseAnnouncementService;
  170. @Autowired
  171. private BaseExpertService baseExpertService;
  172. @Autowired
  173. private PmDemandExpertRefService pmDemandExpertRefService;
  174. @Autowired
  175. private PmBidOpeningService pmBidOpeningService;
  176. @Autowired
  177. private SysFileRefMapper sysFileRefMapper;
  178. @Autowired
  179. private PmBookBuildingService pmBookBuildingService;
  180. @Autowired
  181. private PmCallQuestionService pmCallQuestionService;
  182. @Autowired
  183. private PmBidWinningService pmBidWinningService;
  184. @Autowired
  185. private ISysDictTypeService iSysDictTypeService;
  186. @Autowired
  187. private PmBidFailureService pmBidFailureService;
  188. @Autowired
  189. private PmBidWinningOpeningRefService pmBidWinningOpeningRefService;
  190. @Autowired
  191. private PmContractInfoService pmContractInfoService;
  192. @Autowired
  193. private BaseAgencyService baseAgencyService;
  194. @Autowired
  195. private PmProjectConstructionService pmProjectConstructionService;
  196. @Autowired
  197. private BaseNoticeTypeService baseNoticeTypeService;
  198. @Autowired
  199. private BaseNoticeService baseNoticeService;
  200. @Autowired
  201. private PlanYearsService planYearsService;
  202. @Autowired
  203. private PlanQuarterService planQuarterService;
  204. @Autowired
  205. private ISysRegionService iSysRegionService;
  206. @Autowired
  207. private ISysUserService userService;
  208. @Autowired
  209. private SysDeptMapper deptMapper;
  210. @Autowired
  211. private BaseExpertMapper baseExpertMapper;
  212. @Autowired
  213. private PmAuditDeptRefService pmAuditDeptRefService;
  214. @Autowired
  215. private ProvisionalPlanMapper provisionalPlanMapper;
  216. @Autowired
  217. private PmExpertFeedbackService pmExpertFeedbackService;
  218. @Autowired
  219. private PmProcurementDocumentsReviewService pmProcurementDocumentsReviewService;
  220. @Autowired
  221. private PmCallQuestionHisService questionHisService;
  222. /**
  223. * 查询采购需求
  224. *
  225. * @param demandId 采购需求主键
  226. * @return 采购需求
  227. */
  228. @Override
  229. public PmDemandResVo selectPmDemandByDemandId(Long demandId, String detailType) {
  230. PmDemand pmDemand = this.getById(demandId);
  231. if (pmDemand != null) {
  232. PmDemandResVo vo = new PmDemandResVo();
  233. vo.setProjectName(pmDemand.getProjectName());
  234. vo.setDemandId(demandId);
  235. BeanUtils.copyProperties(pmDemand, vo);
  236. if ("1".equals(detailType)) { //项目计划
  237. //project_type,evaluation 从原来计划里取
  238. ProvisionalPlan provisionalPlan = provisionalPlanMapper.seletById(pmDemand.getPlanId());
  239. if (provisionalPlan != null) {
  240. vo.setProjectType(provisionalPlan.getProjectType());
  241. vo.setEvaluation(provisionalPlan.getEvaluation().doubleValue());
  242. }
  243. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(vo.getPurchaseDeptId()).get("sysDept");
  244. if (sysDeptResponseVo != null) {
  245. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  246. }
  247. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
  248. if (StringUtils.isNotEmpty(purchaseServicesName)) {
  249. vo.setPurchaseServicesName(purchaseServicesName);
  250. }
  251. //采购需求附件
  252. List<SysFileInfo> demandFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_DEMAND.getType());
  253. if (!ObjectUtils.isEmpty(demandFileInfos)) {
  254. vo.setDemandFileInfos(demandFileInfos);
  255. }
  256. //项目类型
  257. String projectTypeName = dictDataService.selectDictLabel("sys_project_type", vo.getProjectType());
  258. if (StringUtils.isNotEmpty(projectTypeName)) {
  259. vo.setProjectTypeName(projectTypeName);
  260. }
  261. //是否为超限额计划
  262. for (IsExcess value : IsExcess.values()) {
  263. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  264. vo.setIsExcessName(value.getInfo());
  265. break;
  266. }
  267. }
  268. //采购方式
  269. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  270. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  271. vo.setPurchaseModeName(value.getInfo());
  272. break;
  273. }
  274. }
  275. //项目属性
  276. for (ProjectAttribute value : ProjectAttribute.values()) {
  277. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  278. vo.setProjectAttrName(value.getInfo());
  279. break;
  280. }
  281. }
  282. //预警状态
  283. for (WarnStatus value : WarnStatus.values()) {
  284. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  285. vo.setWarnStatusName(value.getInfo());
  286. break;
  287. }
  288. }
  289. } else if ("2".equals(detailType)) { //需求建档
  290. //采购需求审核文件
  291. List<SysFileInfo> auditFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  292. if (!ObjectUtils.isEmpty(auditFileInfos)) {
  293. vo.setAuditFileInfos(auditFileInfos);
  294. }
  295. LambdaQueryWrapper<PmBookBuilding> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  296. lambdaQueryWrapper.eq(PmBookBuilding::getDemandId, demandId);
  297. PmBookBuilding pmBookBuilding = pmBookBuildingService.getOne(lambdaQueryWrapper);
  298. if (pmBookBuilding != null) {
  299. PmBookBuildingResVo responseVo = new PmBookBuildingResVo();
  300. BeanUtils.copyProperties(pmBookBuilding, responseVo);
  301. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBookBuilding.getId(), SysFileRefEnum.PM_BOOK_BUILDING.getType());
  302. if (!ObjectUtils.isEmpty(fileInfos)) {
  303. if (!ObjectUtils.isEmpty(auditFileInfos)) {
  304. fileInfos.addAll(auditFileInfos);
  305. }
  306. responseVo.setFileInfos(fileInfos);
  307. }
  308. vo.setPmBookBuildingResVo(responseVo);
  309. }
  310. } else if ("3".equals(detailType)) { //任务下达
  311. vo.setTaskReleaseTime(pmDemand.getTaskReleaseTime());
  312. //任务下达文件
  313. List<SysFileInfo> taskReleaseFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_TAST_RELEASE.getType());
  314. if (!ObjectUtils.isEmpty(taskReleaseFileInfos)) {
  315. vo.setTaskReleaseFileInfos(taskReleaseFileInfos);
  316. }
  317. } else if ("4".equals(detailType)) { //中标信息
  318. setPmPurchaseExecutionResVo(vo, pmDemand);
  319. } else if ("5".equals(detailType)) { //合同信息
  320. setPmPurchaseExecutionResVo(vo, pmDemand);
  321. LambdaQueryWrapper<PmContractInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  322. lambdaQueryWrapper.eq(PmContractInfo::getDemandId, demandId);
  323. PmContractInfo pmContractInfo = pmContractInfoService.getOne(lambdaQueryWrapper);
  324. if (pmContractInfo != null) {
  325. PmContractInfoResVo pmContractInfoResVo = new PmContractInfoResVo();
  326. BeanUtils.copyProperties(pmContractInfo, pmContractInfoResVo);
  327. //合同信息文件
  328. List<SysFileInfo> fileInfos = getSysFileInfoList(pmContractInfo.getId(), SysFileRefEnum.PM_CONTRACT_INFO.getType());
  329. if (!ObjectUtils.isEmpty(fileInfos)) {
  330. pmContractInfoResVo.setFileInfos(fileInfos);
  331. }
  332. vo.setPmContractInfoResVo(pmContractInfoResVo);
  333. }
  334. } else if ("6".equals(detailType)) { //建设情况
  335. LambdaQueryWrapper<PmProjectConstruction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  336. lambdaQueryWrapper.eq(PmProjectConstruction::getDemandId, demandId);
  337. PmProjectConstruction pmProjectConstruction = pmProjectConstructionService.getOne(lambdaQueryWrapper);
  338. if (pmProjectConstruction != null) {
  339. PmProjectConstructionResVo pmProjectConstructionResVo = new PmProjectConstructionResVo();
  340. BeanUtils.copyProperties(pmProjectConstruction, pmProjectConstructionResVo);
  341. //建设情况文件
  342. List<SysFileInfo> fileInfos = getSysFileInfoList(pmProjectConstruction.getId(), SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
  343. if (!ObjectUtils.isEmpty(fileInfos)) {
  344. pmProjectConstructionResVo.setFileInfos(fileInfos);
  345. }
  346. vo.setPmProjectConstructionResVo(pmProjectConstructionResVo);
  347. }
  348. }
  349. //项目状态
  350. for (PmProjectStatus value : PmProjectStatus.values()) {
  351. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  352. vo.setProjectStatusName(value.getInfo());
  353. break;
  354. }
  355. }
  356. return vo;
  357. } else {
  358. return null;
  359. }
  360. }
  361. private void setPmPurchaseExecutionResVo(PmDemandResVo vo, PmDemand pmDemand) {
  362. Long demandId = pmDemand.getDemandId();
  363. PmPurchaseExecutionResVo pmPurchaseExecutionResVo = new PmPurchaseExecutionResVo();
  364. //代理商信息
  365. BaseAgency baseAgency = this.baseAgencyService.getById(pmDemand.getAgencyId());
  366. List<SysDictData> dictData = dictTypeService.selectDictDataByType(Constants.SYS_COMPANY_NATURE);
  367. for (SysDictData data : dictData) {
  368. if (data.getDictValue().equals(baseAgency.getCompanyNature())) {
  369. baseAgency.setCompanyNatureName(data.getDictLabel());
  370. break;
  371. }
  372. }
  373. List<SysDictData> dictDataT = dictTypeService.selectDictDataByType(Constants.SYS_PROJECT_TYPE);
  374. if (baseAgency.getCompanyType().length() == 1) {
  375. for (SysDictData data : dictDataT) {
  376. if (data.getDictValue().equals(baseAgency.getCompanyType() + "")) {
  377. baseAgency.setCompanyTypeName(data.getDictLabel());
  378. break;
  379. }
  380. }
  381. } else if (baseAgency.getCompanyType().split(",").length > 1) {
  382. String[] split = baseAgency.getCompanyType().split(",");
  383. for (String s : split) {
  384. for (SysDictData data : dictDataT) {
  385. if (data.getDictValue().equals(s)) {
  386. baseAgency.setCompanyTypeName(data.getDictLabel());
  387. break;
  388. }
  389. }
  390. }
  391. }
  392. pmPurchaseExecutionResVo.setBaseAgency(baseAgency);
  393. vo.setPurchaseTaskDocumentNumber(pmDemand.getPurchaseTaskDocumentNumber());
  394. //专家意见反馈
  395. LambdaQueryWrapper<PmExpertFeedback> pmExpertFeedbackLambdaQueryWrapper = new LambdaQueryWrapper<>();
  396. pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId, demandId);
  397. PmExpertFeedback pmExpertFeedback = pmExpertFeedbackService.getOne(pmExpertFeedbackLambdaQueryWrapper);
  398. if (!ObjectUtils.isEmpty(pmExpertFeedback)) {
  399. PmExpertFeedbackResVo pmExpertFeedbackResVo = new PmExpertFeedbackResVo();
  400. BeanUtils.copyProperties(pmExpertFeedback, pmExpertFeedbackResVo);
  401. List<SysFileInfo> fileInfos = getSysFileInfoList(pmExpertFeedbackResVo.getId(), SysFileRefEnum.PM_EXPERT_FEEDBACK.getType());
  402. if (!ObjectUtils.isEmpty(fileInfos)) {
  403. pmExpertFeedbackResVo.setFileInfos(fileInfos);
  404. }
  405. pmPurchaseExecutionResVo.setPmExpertFeedbackResVo(pmExpertFeedbackResVo);
  406. }
  407. //采购文件编制审核
  408. LambdaQueryWrapper<PmProcurementDocumentsReview> pmProcurementDocumentsReviewLambdaQueryWrapper = new LambdaQueryWrapper<>();
  409. pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId, demandId);
  410. PmProcurementDocumentsReview pmProcurementDocumentsReview = pmProcurementDocumentsReviewService.getOne(pmProcurementDocumentsReviewLambdaQueryWrapper);
  411. if (!ObjectUtils.isEmpty(pmProcurementDocumentsReview)) {
  412. PmProcurementDocumentsReviewResVo pmProcurementDocumentsReviewResVo = new PmProcurementDocumentsReviewResVo();
  413. BeanUtils.copyProperties(pmProcurementDocumentsReview, pmProcurementDocumentsReviewResVo);
  414. List<SysFileInfo> fileInfos = getSysFileInfoList(pmProcurementDocumentsReviewResVo.getId(), SysFileRefEnum.PM_BID_FILE.getType());
  415. if (!ObjectUtils.isEmpty(fileInfos)) {
  416. pmProcurementDocumentsReviewResVo.setFileInfos(fileInfos);
  417. }
  418. pmPurchaseExecutionResVo.setPmProcurementDocumentsReviewResVo(pmProcurementDocumentsReviewResVo);
  419. }
  420. //采购公告列表
  421. LambdaQueryWrapper<PmReleaseAnnouncement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  422. lambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId, demandId).orderByDesc(PmReleaseAnnouncement::getReleaseTime);
  423. List<PmReleaseAnnouncement> pmReleaseAnnouncementList = this.pmReleaseAnnouncementService.list(lambdaQueryWrapper);
  424. if (!ObjectUtils.isEmpty(pmReleaseAnnouncementList)) {
  425. List<PmReleaseAnnouncementResVo> pmReleaseAnnouncementResVoList = new ArrayList<>();
  426. List<SysFileInfo> fileInfosAll = new ArrayList<>();
  427. for (PmReleaseAnnouncement pmReleaseAnnouncement : pmReleaseAnnouncementList) {
  428. PmReleaseAnnouncementResVo pmReleaseAnnouncementResVo = new PmReleaseAnnouncementResVo();
  429. BeanUtils.copyProperties(pmReleaseAnnouncement, pmReleaseAnnouncementResVo);
  430. List<SysFileInfo> fileInfos = getSysFileInfoList(pmReleaseAnnouncementResVo.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
  431. if (!ObjectUtils.isEmpty(fileInfos)) {
  432. fileInfosAll.addAll(fileInfos);
  433. }
  434. pmReleaseAnnouncementResVoList.add(pmReleaseAnnouncementResVo);
  435. }
  436. pmPurchaseExecutionResVo.setPmReleaseAnnouncementFileInfos(fileInfosAll);
  437. pmPurchaseExecutionResVo.setPmReleaseAnnouncementResVoList(pmReleaseAnnouncementResVoList);
  438. }
  439. //标前质疑投诉
  440. LambdaQueryWrapper<PmCallQuestion> pmCallQuestionLambdaQueryWrapper = new LambdaQueryWrapper<>();
  441. pmCallQuestionLambdaQueryWrapper.eq(PmCallQuestion::getDemandId, demandId)
  442. .eq(PmCallQuestion::getType, '0').orderByDesc(PmCallQuestion::getCallQuestionTime);
  443. List<PmCallQuestion> pmCallQuestionList = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper);
  444. if (!ObjectUtils.isEmpty(pmCallQuestionList)) {
  445. List<PmCallQuestionResVo> pmCallQuestionResVoList = new ArrayList<>();
  446. List<SysFileInfo> fileInfosAll = new ArrayList<>();
  447. for (PmCallQuestion pmCallQuestion : pmCallQuestionList) {
  448. PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
  449. BeanUtils.copyProperties(pmCallQuestion, pmCallQuestionResVo);
  450. List<SysFileInfo> fileInfos = getSysFileInfoList(pmCallQuestionResVo.getId(), SysFileRefEnum.PM_PRE_BID_CALL_QUESTION.getType());
  451. if (!ObjectUtils.isEmpty(fileInfos)) {
  452. fileInfosAll.addAll(fileInfos);
  453. }
  454. pmCallQuestionResVoList.add(pmCallQuestionResVo);
  455. }
  456. pmPurchaseExecutionResVo.setPmCallQuestionPreResVoList(pmCallQuestionResVoList);
  457. pmPurchaseExecutionResVo.setPmCallQuestionPreFileInfos(fileInfosAll);
  458. }
  459. //专家信息列表
  460. List<PmBaseExpertResVo> pmBaseExpertResVoList = this.pmDemandExpertRefService.getPmBaseExpertResVoList(demandId);
  461. pmPurchaseExecutionResVo.setPmBaseExpertResVoList(pmBaseExpertResVoList);
  462. //开标信息列表
  463. List<PmBidOpeningResVo> pmBidOpeningResVoList = this.pmBidOpeningService.getPmBidOpeningResVoList(demandId);
  464. pmPurchaseExecutionResVo.setPmBidOpeningResVoList(pmBidOpeningResVoList);
  465. //评标结果公告列表
  466. LambdaQueryWrapper<PmBidWinning> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
  467. lambdaQueryWrapper1.eq(PmBidWinning::getDemandId, demandId)
  468. .ne(PmBidWinning::getStatus, BidWinningStatus.BE_REPLACED.getCode()).orderByDesc(PmBidWinning::getBidAnnouncementTime);
  469. List<PmBidWinning> pmBidWinningList = this.pmBidWinningService.list(lambdaQueryWrapper1);
  470. if (!ObjectUtils.isEmpty(pmBidWinningList)) {
  471. List<PmBidWinningResVo> pmBidWinningResVoList = new ArrayList<>();
  472. List<SysFileInfo> fileInfosAll = new ArrayList<>();
  473. for (PmBidWinning pmBidWinning : pmBidWinningList) {
  474. PmBidWinningResVo pmBidWinningResVo = new PmBidWinningResVo();
  475. BeanUtils.copyProperties(pmBidWinning, pmBidWinningResVo);
  476. pmBidWinningResVoList.add(pmBidWinningResVo);
  477. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidWinningResVo.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType());
  478. if (!ObjectUtils.isEmpty(fileInfos)) {
  479. fileInfosAll.addAll(fileInfos);
  480. }
  481. }
  482. pmPurchaseExecutionResVo.setPmBidWinningResVoList(pmBidWinningResVoList);
  483. pmPurchaseExecutionResVo.setPmBidWinningFileInfos(fileInfosAll);
  484. }
  485. //标后质疑
  486. LambdaQueryWrapper<PmCallQuestion> pmCallQuestionLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
  487. pmCallQuestionLambdaQueryWrapper2.eq(PmCallQuestion::getDemandId, demandId)
  488. .eq(PmCallQuestion::getType, '1').orderByDesc(PmCallQuestion::getCallQuestionTime);
  489. List<PmCallQuestion> pmCallQuestionList2 = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper2);
  490. if (!ObjectUtils.isEmpty(pmCallQuestionList2)) {
  491. List<PmCallQuestionResVo> pmCallQuestionResVoList = new ArrayList<>();
  492. List<SysFileInfo> fileInfosAll = new ArrayList<>();
  493. for (PmCallQuestion pmCallQuestion : pmCallQuestionList2) {
  494. PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
  495. BeanUtils.copyProperties(pmCallQuestion, pmCallQuestionResVo);
  496. List<SysFileInfo> fileInfos = getSysFileInfoList(pmCallQuestionResVo.getId(), SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
  497. if (!ObjectUtils.isEmpty(fileInfos)) {
  498. fileInfosAll.addAll(fileInfos);
  499. }
  500. pmCallQuestionResVoList.add(pmCallQuestionResVo);
  501. }
  502. pmPurchaseExecutionResVo.setPmCallQuestionPostResVoList(pmCallQuestionResVoList);
  503. pmPurchaseExecutionResVo.setPmCallRequestPostFileInfos(fileInfosAll);
  504. }
  505. //流标情况
  506. LambdaQueryWrapper<PmBidFailure> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
  507. lambdaQueryWrapper2.eq(PmBidFailure::getDemandId, demandId).orderByDesc(PmBidFailure::getBidFailureTime);
  508. List<PmBidFailure> pmBidFailureList = this.pmBidFailureService.list(lambdaQueryWrapper2);
  509. if (!ObjectUtils.isEmpty(pmBidFailureList)) {
  510. List<PmBidFailureResVo> pmBidFailureResVoList = new ArrayList<>();
  511. List<PmCallQuestionResVo> pmCallQuestionBidFailureResVoList = new ArrayList<>();
  512. List<SysFileInfo> pmBidFailureFileInfos = new ArrayList<>();
  513. List<SysFileInfo> pmCallRequestBidFailureFileInfos = new ArrayList<>();
  514. for (PmBidFailure pmBidFailure : pmBidFailureList) {
  515. PmBidFailureResVo pmBidFailureResVo = new PmBidFailureResVo();
  516. BeanUtils.copyProperties(pmBidFailure, pmBidFailureResVo);
  517. pmBidFailureResVoList.add(pmBidFailureResVo);
  518. //流标文件
  519. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
  520. if (!ObjectUtils.isEmpty(fileInfos)) {
  521. pmBidFailureFileInfos.addAll(fileInfos);
  522. }
  523. if ("1".equals(pmBidFailure.getCallQuestion())) { //有质疑
  524. PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
  525. pmCallQuestionResVo.setCallQuestion(pmBidFailure.getCallQuestion());
  526. pmCallQuestionResVo.setCallQuestionTime(pmBidFailure.getCallQuestionTime());
  527. pmCallQuestionBidFailureResVoList.add(pmCallQuestionResVo);
  528. //流废标质疑文件
  529. List<SysFileInfo> fileInfos2 = getSysFileInfoList(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_CALL_QUESTION.getType());
  530. if (!ObjectUtils.isEmpty(fileInfos2)) {
  531. pmCallRequestBidFailureFileInfos.addAll(fileInfos2);
  532. }
  533. }
  534. }
  535. pmPurchaseExecutionResVo.setPmBidFailureResVoList(pmBidFailureResVoList);
  536. pmPurchaseExecutionResVo.setPmBidFailureFileInfos(pmBidFailureFileInfos);
  537. //流废标处置
  538. pmPurchaseExecutionResVo.setPmCallQuestionBidFailureResVoList(pmCallQuestionBidFailureResVoList);
  539. pmPurchaseExecutionResVo.setPmCallRequestBidFailureFileInfos(pmCallRequestBidFailureFileInfos);
  540. }
  541. //中标通知书
  542. List<SysFileInfo> pmBidWinningNotificationFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
  543. pmPurchaseExecutionResVo.setFileInfos(pmBidWinningNotificationFileInfos);
  544. vo.setUpAcceptanceTime(pmDemand.getUpAcceptanceTime());
  545. vo.setPmPurchaseExecutionResVo(pmPurchaseExecutionResVo);
  546. }
  547. /**
  548. * 查询采购需求列表
  549. *
  550. * @param pmDemandReqVo
  551. * @return 采购需求
  552. */
  553. @Override
  554. public IPage<PmDemandResVo> selectPmDemandList(PmDemandReqVo pmDemandReqVo, int reqType) {
  555. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<>();
  556. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  557. List<PmAuditDeptRef> list = new ArrayList<>();
  558. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  559. l.eq(PmAuditDeptRef::getDeptId, SecurityUtils.getDeptId());
  560. l.eq(PmAuditDeptRef::getRefType, "2");
  561. list = pmAuditDeptRefService.list(l);
  562. if (!pmDemandReqVo.getIsAdmin()) {
  563. if (2 == reqType) {
  564. lw.in(PmDemand::getDemandId, list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toSet()));
  565. lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  566. } else if (3 == reqType) {
  567. //采购执行管理中,本单位超额项目交给上级处理,本单位不处理。
  568. if (!ObjectUtils.isEmpty(list)) {
  569. // 如果有上级单位存在,本单位不处理
  570. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  571. //本单位所有参与审核的项目id
  572. Set<Long> refList = new HashSet<>();
  573. for (PmAuditDeptRef deptRef : list) {
  574. refList.add(deptRef.getRefId());
  575. }
  576. //上级参与审核的项目
  577. List<Long> refListf = new ArrayList<>();
  578. List<PmAuditDeptRef> listf = new ArrayList<>();
  579. if (sysDept.getParentId() != 0) {
  580. LambdaQueryWrapper<PmAuditDeptRef> lf = new LambdaQueryWrapper<>();
  581. lf.eq(PmAuditDeptRef::getDeptId, sysDept.getParentId());
  582. lf.eq(PmAuditDeptRef::getRefType, "2");
  583. listf = pmAuditDeptRefService.list(lf);
  584. //上级参与审核的项目id
  585. refListf = listf.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  586. }
  587. //取集合差集,只处理差集中的数据
  588. if (!ObjectUtils.isEmpty(refListf)) {
  589. refList.removeAll(refListf);
  590. }
  591. //为空就返回空
  592. if (ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  593. lw.in(PmDemand::getDemandId, -1);
  594. } else if (!ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  595. lw.in(PmDemand::getDemandId, refList);
  596. }
  597. }
  598. } else {
  599. lw.eq(PmDemand::getCreateBy, SecurityUtils.getUserId());
  600. //lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  601. }
  602. }
  603. if (!StringUtils.isBlank(pmDemandReqVo.getProjectName())) {
  604. lw.like(PmDemand::getProjectName, "%" + pmDemandReqVo.getProjectName() + "%");
  605. }
  606. if (!StringUtils.isBlank(pmDemandReqVo.getPurchaseServices())) {
  607. lw.eq(PmDemand::getPurchaseServices, pmDemandReqVo.getPurchaseServices());
  608. }
  609. if (!ObjectUtils.isEmpty(pmDemandReqVo.getProjectStatus())) {
  610. lw.eq(PmDemand::getProjectStatus, pmDemandReqVo.getProjectStatus());
  611. }
  612. if (!ObjectUtils.isEmpty(pmDemandReqVo.getWarnStatus())) {
  613. lw.eq(PmDemand::getWarnStatus, pmDemandReqVo.getWarnStatus());
  614. }
  615. if (!ObjectUtils.isEmpty(pmDemandReqVo.getIsExcess())) {
  616. lw.eq(PmDemand::getIsExcess, pmDemandReqVo.getIsExcess());
  617. }
  618. if (!StringUtils.isBlank(pmDemandReqVo.getBeginDate())) {
  619. lw.apply("(plan_demand_sub_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_purchase_finish_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_deliver_time >= '" + pmDemandReqVo.getBeginDate() + "' )");
  620. }
  621. if (!StringUtils.isBlank(pmDemandReqVo.getEndDate())) {
  622. lw.apply("(plan_demand_sub_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_purchase_finish_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_deliver_time <= '" + pmDemandReqVo.getEndDate() + "' )");
  623. }
  624. if (reqType == 2) { //任务下达列表
  625. lw.apply("(project_status >=8 )");
  626. } else if (reqType == 3) { //采购执行列表
  627. lw.apply("(project_status >=9 )");
  628. } else if (reqType == 4) { //合同信息列表
  629. lw.apply("(project_status >=19 )");
  630. } else if (reqType == 5) { //项目建设列表
  631. lw.apply("(project_status >=20 )");
  632. }
  633. lw.last(" order by project_status, plan_demand_sub_time");
  634. IPage<PmDemand> pageRes = this.page(new Page<>(pmDemandReqVo.getPageNum(), pmDemandReqVo.getPageSize()), lw);
  635. IPage<PmDemandResVo> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
  636. if (pageRes.getRecords() != null && pageRes.getRecords().size() > 0) {
  637. List<PmDemandResVo> pmDemandResVos = demandChangeTo(pageRes.getRecords());
  638. for (PmDemandResVo vo : pmDemandResVos) {
  639. if (2 == reqType) {
  640. // 根据项目id 和 部门id 和 参数类型 获取 部门级别
  641. List<PmAuditDeptRef> collect = list.stream()
  642. .filter(o -> o.getRefId().equals(vo.getDemandId()))
  643. .collect(Collectors.toList());
  644. if (!ObjectUtils.isEmpty(collect)) {
  645. String deptLevel = collect.get(0).getDeptLevel();
  646. // 根据项目id 和 参数类型 获取 所有审核数据
  647. LambdaQueryWrapper<PmAuditDeptRef> ll = new LambdaQueryWrapper<>();
  648. ll.eq(PmAuditDeptRef::getRefId, vo.getDemandId());
  649. ll.eq(PmAuditDeptRef::getRefType, "2");
  650. List<PmAuditDeptRef> listl = pmAuditDeptRefService.list(l);
  651. // 判断当前用户是否有审核权限
  652. boolean flay = true;
  653. List<PmAuditDeptRef> collect1 = listl.stream()
  654. .filter(pmAuditDeptRef -> pmAuditDeptRef.getRefId().equals(vo.getDemandId()))
  655. .collect(Collectors.toList());
  656. for (PmAuditDeptRef pmAuditDeptRef : collect1) {
  657. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) > 0
  658. && pmAuditDeptRef.getStatus().equals(Integer.parseInt("0"))) {
  659. flay = false;
  660. } else if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == 0
  661. && pmAuditDeptRef.getStatus().equals(Integer.parseInt("1"))) {
  662. flay = false;
  663. }
  664. }
  665. vo.setFlay(flay);
  666. }
  667. }
  668. LambdaQueryWrapper<PmExpertFeedback> pmExpertFeedbackLambdaQueryWrapper = new LambdaQueryWrapper<>();
  669. pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId, vo.getDemandId());
  670. PmExpertFeedback pmExpertFeedback = this.pmExpertFeedbackService.getOne(pmExpertFeedbackLambdaQueryWrapper);
  671. if (pmExpertFeedback != null) {
  672. vo.setProjectNumber(pmExpertFeedback.getProjectNumber());
  673. vo.setDocumentReviewTime(pmExpertFeedback.getDocumentReviewTime());
  674. }
  675. LambdaQueryWrapper<PmProcurementDocumentsReview> pmProcurementDocumentsReviewLambdaQueryWrapper = new LambdaQueryWrapper<>();
  676. pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId, vo.getDemandId());
  677. PmProcurementDocumentsReview pmProcurementDocumentsReview = this.pmProcurementDocumentsReviewService.getOne(pmProcurementDocumentsReviewLambdaQueryWrapper);
  678. if (pmProcurementDocumentsReview != null) {
  679. vo.setProcurementOfficeApprovalTime(pmProcurementDocumentsReview.getProcurementOfficeApprovalTime());
  680. }
  681. if (Integer.parseInt(vo.getProjectStatus()) > 12 && Integer.parseInt(vo.getProjectStatus()) != 18) {
  682. LambdaQueryWrapper<PmReleaseAnnouncement> pmReleaseAnnouncementLambdaQueryWrapper = new LambdaQueryWrapper<>();
  683. pmReleaseAnnouncementLambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId, vo.getDemandId())
  684. .orderByDesc(PmReleaseAnnouncement::getReleaseTime)
  685. .last(" limit 1");
  686. PmReleaseAnnouncement pmReleaseAnnouncement = this.pmReleaseAnnouncementService.getOne(pmReleaseAnnouncementLambdaQueryWrapper);
  687. if (pmReleaseAnnouncement != null) {
  688. vo.setAnnouncementReleaseTime(pmReleaseAnnouncement.getReleaseTime());
  689. vo.setTenderOpenTime(pmReleaseAnnouncement.getTenderOpenTime());
  690. }
  691. }
  692. if (Integer.parseInt(vo.getProjectStatus()) > 15 && Integer.parseInt(vo.getProjectStatus()) != 16 && Integer.parseInt(vo.getProjectStatus()) != 18) {
  693. LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
  694. pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId, vo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode())
  695. .orderByDesc(PmBidWinning::getBidAnnouncementTime)
  696. .last(" limit 1");
  697. PmBidWinning pmBidWinning = this.pmBidWinningService.getOne(pmBidWinningLambdaQueryWrapper);
  698. if (pmBidWinning != null) {
  699. vo.setBidAnnouncementTime(pmBidWinning.getBidAnnouncementTime());
  700. }
  701. }
  702. }
  703. results.setRecords(pmDemandResVos);
  704. }
  705. return results;
  706. }
  707. /**
  708. * 查询采购需求列表
  709. *
  710. * @param pmDemandReqVo
  711. * @return 采购需求
  712. */
  713. @Override
  714. public List<PmDemandResVo> selectPmDemandListDe(PmDemandReqVo pmDemandReqVo) {
  715. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<>();
  716. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  717. List<PmAuditDeptRef> list = new ArrayList<>();
  718. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  719. l.eq(PmAuditDeptRef::getDeptId, SecurityUtils.getDeptId());
  720. l.eq(PmAuditDeptRef::getRefType, "2");
  721. list = pmAuditDeptRefService.list(l);
  722. if (!pmDemandReqVo.getIsAdmin()) {
  723. if (!ObjectUtils.isEmpty(list)) {
  724. //lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  725. lw.in(PmDemand::getDemandId, list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toSet()));
  726. }
  727. }
  728. if (!StringUtils.isBlank(pmDemandReqVo.getProjectName())) {
  729. lw.like(PmDemand::getProjectName, "%" + pmDemandReqVo.getProjectName() + "%");
  730. }
  731. if (!StringUtils.isBlank(pmDemandReqVo.getPurchaseServices())) {
  732. lw.eq(PmDemand::getPurchaseServices, pmDemandReqVo.getPurchaseServices());
  733. }
  734. if (!ObjectUtils.isEmpty(pmDemandReqVo.getProjectStatus())) {
  735. lw.eq(PmDemand::getProjectStatus, pmDemandReqVo.getProjectStatus());
  736. }
  737. if (!ObjectUtils.isEmpty(pmDemandReqVo.getWarnStatus())) {
  738. lw.eq(PmDemand::getWarnStatus, pmDemandReqVo.getWarnStatus());
  739. }
  740. if (!ObjectUtils.isEmpty(pmDemandReqVo.getIsExcess())) {
  741. lw.eq(PmDemand::getIsExcess, pmDemandReqVo.getIsExcess());
  742. }
  743. if (!StringUtils.isBlank(pmDemandReqVo.getBeginDate())) {
  744. lw.apply("(plan_demand_sub_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_purchase_finish_time >= '" + pmDemandReqVo.getBeginDate() + "' or plan_deliver_time >= '" + pmDemandReqVo.getBeginDate() + "' )");
  745. }
  746. if (!StringUtils.isBlank(pmDemandReqVo.getEndDate())) {
  747. lw.apply("(plan_demand_sub_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_purchase_finish_time <= '" + pmDemandReqVo.getEndDate() + "' or plan_deliver_time <= '" + pmDemandReqVo.getEndDate() + "' )");
  748. }
  749. lw.apply("(project_status >=6 )");
  750. lw.last(" order by project_status, plan_demand_sub_time");
  751. List<PmDemand> demandList = pmDemandMapper.selectList(lw);
  752. List<PmDemandResVo> pmDemandResVosTwo = new LinkedList<>();
  753. if (!ObjectUtils.isEmpty(demandList)) {
  754. List<PmDemandResVo> pmDemandResVos = demandChangeTo(demandList);
  755. for (PmDemandResVo vo : pmDemandResVos) {
  756. // 根据项目id 和 部门id 和 参数类型 获取 部门级别
  757. //list是该部门参与审核的项目
  758. List<PmAuditDeptRef> collect = list.stream()
  759. .filter(o -> o.getRefId().equals(vo.getDemandId()))
  760. .collect(Collectors.toList());
  761. if (!ObjectUtils.isEmpty(collect)) {
  762. //部门在这个项目的审核等级**
  763. String deptLevel = collect.get(0).getDeptLevel();
  764. // 根据项目id 和 参数类型 获取 该项目的所有审核数据
  765. LambdaQueryWrapper<PmAuditDeptRef> ll = new LambdaQueryWrapper<>();
  766. ll.eq(PmAuditDeptRef::getRefId, vo.getDemandId());
  767. ll.eq(PmAuditDeptRef::getRefType, "2");
  768. List<PmAuditDeptRef> listl = pmAuditDeptRefService.list(ll);
  769. // 判断当前用户是否可以进行审核
  770. boolean flay = true;
  771. //是否为本单位已审核过的数据
  772. boolean fg = false;
  773. for (PmAuditDeptRef pmAuditDeptRef : listl) {
  774. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) < 0 && pmAuditDeptRef.getStatus().equals(Integer.parseInt("1"))) {
  775. //下级单位已审核,轮到本单位审核
  776. fg = true;
  777. } else if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == 0 && pmAuditDeptRef.getStatus().equals(Integer.parseInt("1"))) {
  778. //本单位已审核
  779. flay = false;
  780. fg = true;
  781. } else if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == 0 && pmAuditDeptRef.getStatus().equals(Integer.parseInt("0"))) {
  782. //本单位未进行审核
  783. fg = true;
  784. }
  785. }
  786. vo.setFlay(flay);
  787. if (flay == true || vo.getPurchaseDeptId().equals(SecurityUtils.getDeptId()) || fg == true) {
  788. LambdaQueryWrapper<PmExpertFeedback> pmExpertFeedbackLambdaQueryWrapper = new LambdaQueryWrapper<>();
  789. pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId, vo.getDemandId());
  790. PmExpertFeedback pmExpertFeedback = this.pmExpertFeedbackService.getOne(pmExpertFeedbackLambdaQueryWrapper);
  791. if (pmExpertFeedback != null) {
  792. vo.setProjectNumber(pmExpertFeedback.getProjectNumber());
  793. vo.setDocumentReviewTime(pmExpertFeedback.getDocumentReviewTime());
  794. }
  795. LambdaQueryWrapper<PmProcurementDocumentsReview> pmProcurementDocumentsReviewLambdaQueryWrapper = new LambdaQueryWrapper<>();
  796. pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId, vo.getDemandId());
  797. PmProcurementDocumentsReview pmProcurementDocumentsReview = this.pmProcurementDocumentsReviewService.getOne(pmProcurementDocumentsReviewLambdaQueryWrapper);
  798. if (pmProcurementDocumentsReview != null) {
  799. vo.setProcurementOfficeApprovalTime(pmProcurementDocumentsReview.getProcurementOfficeApprovalTime());
  800. }
  801. if (Integer.parseInt(vo.getProjectStatus()) > 12 && Integer.parseInt(vo.getProjectStatus()) != 18) {
  802. LambdaQueryWrapper<PmReleaseAnnouncement> pmReleaseAnnouncementLambdaQueryWrapper = new LambdaQueryWrapper<>();
  803. pmReleaseAnnouncementLambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId, vo.getDemandId())
  804. .orderByDesc(PmReleaseAnnouncement::getReleaseTime)
  805. .last(" limit 1");
  806. PmReleaseAnnouncement pmReleaseAnnouncement = this.pmReleaseAnnouncementService.getOne(pmReleaseAnnouncementLambdaQueryWrapper);
  807. if (pmReleaseAnnouncement != null) {
  808. vo.setAnnouncementReleaseTime(pmReleaseAnnouncement.getReleaseTime());
  809. vo.setTenderOpenTime(pmReleaseAnnouncement.getTenderOpenTime());
  810. }
  811. }
  812. if (Integer.parseInt(vo.getProjectStatus()) > 15 && Integer.parseInt(vo.getProjectStatus()) != 16 && Integer.parseInt(vo.getProjectStatus()) != 18) {
  813. LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
  814. pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId, vo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode())
  815. .orderByDesc(PmBidWinning::getBidAnnouncementTime)
  816. .last(" limit 1");
  817. PmBidWinning pmBidWinning = this.pmBidWinningService.getOne(pmBidWinningLambdaQueryWrapper);
  818. if (pmBidWinning != null) {
  819. vo.setBidAnnouncementTime(pmBidWinning.getBidAnnouncementTime());
  820. }
  821. }
  822. pmDemandResVosTwo.add(vo);
  823. }
  824. }
  825. }
  826. }
  827. return pmDemandResVosTwo;
  828. }
  829. /**
  830. * 需求建档
  831. *
  832. * @param vo 采购需求
  833. * @return 结果
  834. */
  835. @Override
  836. @Transactional(rollbackFor = Exception.class)
  837. public boolean bookBuilding(PmBookBuildingReqVo vo) throws Exception {
  838. PmDemand pmDemand = this.getById(vo.getDemandId());
  839. LambdaQueryWrapper<PmBookBuilding> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  840. lambdaQueryWrapper.eq(PmBookBuilding::getDemandId, vo.getDemandId());
  841. PmBookBuilding pmBookBuilding = pmBookBuildingService.getOne(lambdaQueryWrapper);
  842. if (pmBookBuilding != null) {
  843. vo.setId(pmBookBuilding.getId());
  844. BeanUtils.copyProperties(vo, pmBookBuilding);
  845. pmBookBuilding.setUpdateBy(vo.getUpdateBy());
  846. pmBookBuilding.setUpdateTime(new Date());
  847. } else {
  848. pmBookBuilding = new PmBookBuilding();
  849. BeanUtils.copyProperties(vo, pmBookBuilding);
  850. pmBookBuilding.setCreateBy(vo.getUpdateBy());
  851. pmBookBuilding.setCreateTime(new Date());
  852. pmBookBuilding.setUpdateBy(vo.getUpdateBy());
  853. pmBookBuilding.setUpdateTime(pmBookBuilding.getCreateTime());
  854. }
  855. if (pmBookBuildingService.saveOrUpdate(pmBookBuilding)) {
  856. List<SysFileRef> sysFileRefs = vo.getSysFileRefs();
  857. uploadFile(pmBookBuilding.getId(), SysFileRefEnum.PM_BOOK_BUILDING.getType(), sysFileRefs, vo.getUpdateBy());
  858. PmDemand pmDemandUpdate = new PmDemand();
  859. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  860. pmDemandUpdate.setProjectStatus(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode());
  861. pmDemandUpdate.setEvaluation(vo.getBudgetAmount());
  862. pmDemandUpdate.setProjectType(vo.getProjectType());
  863. pmDemandUpdate.setPurchaseMode(vo.getPurchaseMode());
  864. pmDemandUpdate.setUpdateBy(vo.getUpdateBy());
  865. pmDemandUpdate.setUpdateTime(DateUtils.getNowDate());
  866. return this.updateById(pmDemandUpdate);
  867. } else {
  868. return false;
  869. }
  870. }
  871. private List<SysFileInfo> getSysFileInfoList(Long redId, Integer type) {
  872. HashMap<String, Object> map = new HashMap<>();
  873. map.put("red_id", redId);
  874. map.put("type", type);
  875. List<SysFileRef> fileRefs = sysFileRefService.listByMap(map);
  876. if (!ObjectUtils.isEmpty(fileRefs)) {
  877. List<SysFileInfo> fileInfos = new ArrayList<>();
  878. for (SysFileRef ref : fileRefs) {
  879. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  880. fileInfos.add(fileInfo);
  881. }
  882. return fileInfos;
  883. } else {
  884. return null;
  885. }
  886. }
  887. /**
  888. * 提交采购需求
  889. *
  890. * @param pmDemandReqVo
  891. * @return 结果
  892. */
  893. @Override
  894. @Transactional(rollbackFor = Exception.class)
  895. public boolean commit(PmDemandReqVo pmDemandReqVo) {
  896. PmDemand pmDemand = this.getById(pmDemandReqVo.getDemandId());
  897. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  898. Long deptId = sysUser.getDeptId();
  899. pmAuditDeptRefService.insertPmAuditDeptRefs(pmDemandReqVo.getDemandId()
  900. , "2"
  901. , deptId
  902. , BigDecimal.valueOf(pmDemand.getEvaluation())
  903. , sysUser.getUserId()
  904. , pmDemand.getProjectType());
  905. PmDemand pmDemandUpdate = new PmDemand();
  906. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  907. pmDemandUpdate.setProjectStatus(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  908. pmDemandUpdate.setRealDemandCommitTime(DateUtils.getNowDate());
  909. pmDemandUpdate.setUpdateBy(pmDemandReqVo.getUpdateBy());
  910. pmDemandUpdate.setUpdateTime(DateUtils.getNowDate());
  911. List<SysDictData> data = iSysDictTypeService.selectDictDataByType("alert_time_setting");
  912. int setting2 = Integer.parseInt(data.stream().filter(item -> item.getDictLabel().equals("计划完成时间")).collect(Collectors.toList()).get(0).getDictValue());
  913. log.info("******** setting2 == " + setting2);
  914. //采购完成时间:根据数据阈值中设置的采购完成时间进行判断,进行预警
  915. int diff2 = DateUtils.differentDaysByMillisecond(pmDemand.getPlanPurchaseFinishTime(), DateUtils.parseDate(DateUtils.getDate()));
  916. if (ObjectUtils.isEmpty(pmDemand.getRealPurchaseFinishTime()) && diff2 > 0 && diff2 <= setting2) {
  917. log.info("******** 采购完成预警: " + pmDemand.getProjectName());
  918. pmDemandUpdate.setWarnStatus(WarnStatus.PURCHASE_FINISH_WARNING.getCode());
  919. } else if (ObjectUtils.isEmpty(pmDemand.getRealPurchaseFinishTime()) && pmDemand.getPlanPurchaseFinishTime().getTime() < System.currentTimeMillis()) {
  920. log.info("******** 采购完成逾期: " + pmDemand.getProjectName());
  921. pmDemandUpdate.setWarnStatus(WarnStatus.PURCHASE_FINISH_EX.getCode());
  922. this.updateById(pmDemandUpdate);
  923. } else {
  924. pmDemandUpdate.setWarnStatus(WarnStatus.NORMAL.getCode());
  925. }
  926. return this.updateById(pmDemandUpdate);
  927. }
  928. /**
  929. * 查看流程图
  930. *
  931. * @param demandId 采购需求主键
  932. * @return 采购需求
  933. */
  934. @Override
  935. public Object viewFlowChart(Long demandId) {
  936. PmDemand pmDemand = this.getById(demandId);
  937. String projectStatus = String.valueOf(pmDemand.getProjectStatus());
  938. String moduleName = null;
  939. if (PmProjectStatus.DEMAND_WAIT_FILL.getCode().equals(projectStatus)
  940. || PmProjectStatus.DEMAND_AUDIT_RETURN.getCode().equals(projectStatus)
  941. || PmProjectStatus.WASTE_BID_RETURN.getCode().equals(projectStatus)) {
  942. moduleName = "需求填制";
  943. } else if (PmProjectStatus.DEMAND_WAIT_COMMIT.getCode().equals(projectStatus)) {
  944. moduleName = "需求提交";
  945. } else if (PmProjectStatus.DEMAND_WAIT_AUDIT.getCode().equals(projectStatus)) {
  946. moduleName = "需求审核";
  947. } else if (PmProjectStatus.TASK_WAIT_RELEASE.getCode().equals(projectStatus)) {
  948. moduleName = "任务下达";
  949. } else if (PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode().equals(projectStatus)) {
  950. moduleName = "选取代理";
  951. } else if (PmProjectStatus.EXPERT_FEEDBACK.getCode().equals(projectStatus)) {
  952. moduleName = "上传意见反馈单";
  953. } else if (PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode().equals(projectStatus)) {
  954. moduleName = "上传招标文件审批表";
  955. } else if (PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode().equals(projectStatus)) {
  956. moduleName = "采购公告发布";
  957. } else if (PmProjectStatus.PRE_BID_QUERY.getCode().equals(projectStatus)) {
  958. moduleName = "标前质疑投诉";
  959. } else if (PmProjectStatus.WAIT_OPEN_BID.getCode().equals(projectStatus)) {
  960. moduleName = "填写专家信息,开评标";
  961. } else if (PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode().equals(projectStatus) || PmProjectStatus.WASTE_BID_HANDLE.getCode().equals(projectStatus)) {
  962. moduleName = "评标结果公告";
  963. } else if (PmProjectStatus.POST_BID_QUERY.getCode().equals(projectStatus)) {
  964. moduleName = "质疑处理,上传中标通知书";
  965. } else if (PmProjectStatus.CONTRACT_WAIT_FILL.getCode().equals(projectStatus)) {
  966. moduleName = "合同填制";
  967. } else if (PmProjectStatus.UNDER_CONSTRUCTION.getCode().equals(projectStatus)) {
  968. moduleName = "建设文档填制";
  969. } else if (PmProjectStatus.COMPLETION_CONSTRUCTION.getCode().equals(projectStatus)) {
  970. moduleName = "项目归档";
  971. }
  972. return moduleName;
  973. }
  974. /**
  975. * 审核采购需求通过
  976. *
  977. * @param pmDemandReqVo
  978. * @return 结果
  979. */
  980. @Override
  981. @Transactional(rollbackFor = Exception.class)
  982. public boolean reviewTo(PmDemandReqVo pmDemandReqVo) {
  983. PmDemand pmDemand = this.getById(pmDemandReqVo.getDemandId());
  984. PmDemand pmDemandUpdate = new PmDemand();
  985. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  986. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  987. Long deptId = sysUser.getDeptId();
  988. SysDept sysDept = deptMapper.selectDeptById(deptId);
  989. String[] ancestors = sysDept.getAncestors().split(",");
  990. String deptLevel = null;
  991. if (ancestors.length == 2) { //C级
  992. deptLevel = "C";
  993. } else if (ancestors.length == 3) { //B级
  994. deptLevel = "B";
  995. } else if (ancestors.length == 4) { //A级
  996. deptLevel = "A";
  997. }
  998. LambdaQueryWrapper<PmAuditDeptRef> lw = new LambdaQueryWrapper();
  999. lw.eq(PmAuditDeptRef::getRefId, pmDemandReqVo.getDemandId());
  1000. lw.eq(PmAuditDeptRef::getRefType, "2");
  1001. List<PmAuditDeptRef> list = pmAuditDeptRefService.list(lw);
  1002. boolean flay = true;
  1003. if (!ObjectUtils.isEmpty(list)) {
  1004. for (PmAuditDeptRef pmAuditDeptRef : list) {
  1005. // 判断 deptLevel 是否还有更高的 且是 待审核的数据
  1006. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) > 0
  1007. && pmAuditDeptRef.getStatus().equals(Integer.parseInt("0"))) {
  1008. flay = false;
  1009. }
  1010. // 更新当前 deptLevel 级别的审核状态
  1011. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == 0) {
  1012. pmAuditDeptRef.setStatus(1);
  1013. pmAuditDeptRefService.updateById(pmAuditDeptRef);
  1014. }
  1015. }
  1016. }
  1017. if (flay) {
  1018. pmDemandUpdate.setProjectStatus(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  1019. }
  1020. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  1021. uploadFile(pmDemandReqVo.getDemandId(), SysFileRefEnum.PM_DEMAND_EXAMINE.getType(), sysFileRefs, pmDemandReqVo.getUpdateBy());
  1022. pmDemandUpdate.setUpdateBy(pmDemandReqVo.getUpdateBy());
  1023. pmDemandUpdate.setUpdateTime(DateUtils.getNowDate());
  1024. pmDemandUpdate.setAuditTime(DateUtils.getNowDate());
  1025. return this.updateById(pmDemandUpdate);
  1026. }
  1027. /**
  1028. * 审核采购需求退回
  1029. *
  1030. * @param pmDemandReqVo
  1031. * @return 结果
  1032. */
  1033. @Override
  1034. @Transactional(rollbackFor = Exception.class)
  1035. public boolean reviewReturn(PmDemandReqVo pmDemandReqVo) {
  1036. UpdateWrapper<PmDemand> updateWrapper = new UpdateWrapper<>();
  1037. updateWrapper.lambda().eq(PmDemand::getDemandId, pmDemandReqVo.getDemandId())
  1038. .set(PmDemand::getProjectStatus, PmProjectStatus.DEMAND_AUDIT_RETURN.getCode())
  1039. .set(PmDemand::getAdjustReason, pmDemandReqVo.getRefuseReason())
  1040. .set(PmDemand::getRealDemandCommitTime, null)
  1041. .set(PmDemand::getUpdateBy, pmDemandReqVo.getUpdateBy())
  1042. .set(PmDemand::getUpdateTime, DateUtils.getNowDate())
  1043. .set(PmDemand::getAuditTime, DateUtils.getNowDate());
  1044. LambdaQueryWrapper<PmAuditDeptRef> lw = new LambdaQueryWrapper();
  1045. lw.eq(PmAuditDeptRef::getRefId, pmDemandReqVo.getDemandId());
  1046. lw.eq(PmAuditDeptRef::getRefType, "2");
  1047. pmAuditDeptRefService.remove(lw);
  1048. return this.update(updateWrapper);
  1049. }
  1050. /**
  1051. * 下达任务
  1052. *
  1053. * @param pmDemandReqVo
  1054. * @return 结果
  1055. */
  1056. @Override
  1057. @Transactional(rollbackFor = Exception.class)
  1058. public boolean releaseTask(PmDemandReqVo pmDemandReqVo) {
  1059. PmDemand pmDemand = new PmDemand();
  1060. pmDemand.setDemandId(pmDemandReqVo.getDemandId());
  1061. pmDemand.setTaskReleaseTime(pmDemandReqVo.getTaskReleaseTime());
  1062. pmDemand.setProjectStatus(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  1063. List<SysFileRef> sysFileRefs = pmDemandReqVo.getSysFileRefs();
  1064. uploadFile(pmDemandReqVo.getDemandId(), SysFileRefEnum.PM_TAST_RELEASE.getType(), sysFileRefs, pmDemandReqVo.getUpdateBy());
  1065. pmDemand.setUpdateBy(pmDemandReqVo.getUpdateBy());
  1066. pmDemand.setUpdateTime(DateUtils.getNowDate());
  1067. pmDemand.setAuditTime(DateUtils.getNowDate());
  1068. return this.updateById(pmDemand);
  1069. }
  1070. @Override
  1071. @Transactional(rollbackFor = Exception.class)
  1072. public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy, boolean delOld) {
  1073. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  1074. // 删关联
  1075. LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
  1076. lw.eq(SysFileRef::getRedId, redId);
  1077. lw.eq(SysFileRef::getType, fileType);
  1078. sysFileRefMapper.delete(lw);
  1079. //添加新的
  1080. for (SysFileRef ref : sysFileRefs) {
  1081. if (ref.getFileId() == null) {
  1082. continue;
  1083. }
  1084. ref.setRedId(redId);
  1085. ref.setType(fileType);
  1086. ref.setCreated(upateBy);
  1087. ref.setCreateTime(new Date());
  1088. ref.setUpdated(upateBy);
  1089. ref.setUpdateTime(ref.getCreateTime());
  1090. sysFileRefService.save(ref);
  1091. }
  1092. return true;
  1093. } else {
  1094. return false;
  1095. }
  1096. }
  1097. @Override
  1098. @Transactional(rollbackFor = Exception.class)
  1099. public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy) {
  1100. return uploadFile(redId, fileType, sysFileRefs, upateBy, false);
  1101. }
  1102. @Override
  1103. @Transactional(rollbackFor = Exception.class)
  1104. public boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo) throws Exception {
  1105. PmDemand pmDemand = this.getById(pmReleaseAnnouncementReqVo.getDemandId());
  1106. if (ObjectUtils.isEmpty(pmDemand)) {
  1107. throw new Exception("参数错误");
  1108. }
  1109. if (ObjectUtils.isEmpty(pmReleaseAnnouncementReqVo.getSysFileRefs())) {
  1110. throw new Exception("上传附件不能为空");
  1111. }
  1112. PmReleaseAnnouncement pmReleaseAnnouncement = new PmReleaseAnnouncement();
  1113. BeanUtils.copyProperties(pmReleaseAnnouncementReqVo, pmReleaseAnnouncement);
  1114. if (pmReleaseAnnouncementService.saveOrUpdate(pmReleaseAnnouncement)) {
  1115. uploadFile(pmReleaseAnnouncement.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType(), pmReleaseAnnouncementReqVo.getSysFileRefs(), pmReleaseAnnouncementReqVo.getUpdateBy());
  1116. PmDemand pmDemandUpdate = new PmDemand();
  1117. pmDemandUpdate.setDemandId(pmReleaseAnnouncementReqVo.getDemandId());
  1118. pmDemandUpdate.setProjectStatus(PmProjectStatus.PRE_BID_QUERY.getCode());
  1119. pmDemandUpdate.setUpdateTime(pmReleaseAnnouncementReqVo.getUpdateTime());
  1120. pmDemandUpdate.setUpdateBy(pmReleaseAnnouncementReqVo.getUpdateBy());
  1121. if (this.updateById(pmDemandUpdate)) {
  1122. //发布公告生成后,会默认将该数据同步到公告管理和首页中
  1123. BaseNotice baseNotice = new BaseNotice();
  1124. baseNotice.setName(pmDemand.getProjectName());
  1125. baseNotice.setTitle(pmDemand.getProjectName() + "招标公告");
  1126. LambdaQueryWrapper<BaseNoticeType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1127. lambdaQueryWrapper.eq(BaseNoticeType::getName, "招标公告");
  1128. BaseNoticeType baseNoticeType = baseNoticeTypeService.getOne(lambdaQueryWrapper);
  1129. if (baseNoticeType == null) {
  1130. throw new Exception("招标公告 公告类型不存在");
  1131. }
  1132. baseNotice.setDemandId(pmDemand.getDemandId());
  1133. baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
  1134. baseNotice.setIsExcess(pmDemand.getIsExcess());
  1135. baseNotice.setType(baseNoticeType.getId());
  1136. baseNotice.setReleaseTime(pmReleaseAnnouncement.getReleaseTime());
  1137. baseNotice.setCreated(pmReleaseAnnouncementReqVo.getCreateBy());
  1138. baseNotice.setCreateTime(pmReleaseAnnouncementReqVo.getCreateTime());
  1139. baseNotice.setUpdated(pmReleaseAnnouncementReqVo.getUpdateBy());
  1140. baseNotice.setUpdateTime(pmReleaseAnnouncementReqVo.getUpdateTime());
  1141. return this.baseNoticeService.saveOrUpdate(baseNotice);
  1142. } else {
  1143. return false;
  1144. }
  1145. } else {
  1146. return false;
  1147. }
  1148. }
  1149. @Override
  1150. @Transactional(rollbackFor = Exception.class)
  1151. public boolean insertExpertBatch(PmBaseExpertFillReqVo pmBaseExpertFillReqVo) throws Exception {
  1152. PmDemand pmDemand = this.getById(pmBaseExpertFillReqVo.getDemandId());
  1153. if (ObjectUtils.isEmpty(pmDemand)) {
  1154. throw new Exception("参数错误");
  1155. }
  1156. List<BaseExpert> baseExpertList = pmBaseExpertFillReqVo.getBaseExpertList();
  1157. if (ObjectUtils.isEmpty(baseExpertList)) {
  1158. throw new Exception("参数错误");
  1159. }
  1160. Date now = new Date();
  1161. for (BaseExpert baseExpert : baseExpertList) {
  1162. if (NameListType.BLACK.getCode().equals(baseExpert.getStatus())) {
  1163. throw new Exception("该专家(身份证号:" + baseExpert.getIdNumber() + ")属于黑名单");
  1164. } else {
  1165. if (ObjectUtils.isEmpty(baseExpert.getStatus())) {
  1166. baseExpert.setStatus(NameListType.WHITE.getCode());
  1167. }
  1168. }
  1169. if (ObjectUtils.isEmpty(baseExpert.getCreated())) {
  1170. baseExpert.setCreated(pmBaseExpertFillReqVo.getCreateBy());
  1171. baseExpert.setCreateTime(now);
  1172. }
  1173. if (ObjectUtils.isEmpty(baseExpert.getUpdated())) {
  1174. baseExpert.setUpdated(pmBaseExpertFillReqVo.getUpdateBy());
  1175. baseExpert.setUpdateTime(now);
  1176. }
  1177. if (ObjectUtils.isEmpty(baseExpert.getId())) {
  1178. LambdaQueryWrapper<BaseExpert> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1179. lambdaQueryWrapper.eq(BaseExpert::getIdNumber, baseExpert.getIdNumber());
  1180. BaseExpert baseExpert1 = baseExpertService.getOne(lambdaQueryWrapper);
  1181. if (!ObjectUtils.isEmpty(baseExpert1)) {
  1182. baseExpert.setId(baseExpert1.getId());
  1183. }
  1184. }
  1185. if (baseExpertService.saveOrUpdate(baseExpert)) {
  1186. LambdaQueryWrapper<PmDemandExpertRef> pmDemandExpertRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1187. pmDemandExpertRefLambdaQueryWrapper.eq(PmDemandExpertRef::getDemandId, pmDemand.getDemandId())
  1188. .eq(PmDemandExpertRef::getExpertId, baseExpert.getId().longValue())
  1189. .eq(PmDemandExpertRef::getAccessTime, pmBaseExpertFillReqVo.getAccessTime());
  1190. PmDemandExpertRef pmDemandExpertRef = pmDemandExpertRefService.getOne(pmDemandExpertRefLambdaQueryWrapper);
  1191. if (pmDemandExpertRef == null) {
  1192. pmDemandExpertRef = new PmDemandExpertRef();
  1193. pmDemandExpertRef.setCreateBy(pmBaseExpertFillReqVo.getCreateBy());
  1194. pmDemandExpertRef.setCreateTime(now);
  1195. }
  1196. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  1197. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  1198. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertFillReqVo.getAccessTime()));
  1199. pmDemandExpertRef.setUpdateBy(pmBaseExpertFillReqVo.getCreateBy());
  1200. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  1201. pmDemandExpertRefService.saveOrUpdate(pmDemandExpertRef);
  1202. //专家单位
  1203. if (StringUtils.isNotNull(baseExpert.getUnitInformation())) {
  1204. List<BaseUnitInformation> baseUnitInformationList = baseExpertMapper.selectByUnitInformation(baseExpert.getUnitInformation());
  1205. if (baseUnitInformationList.size() <= 0) {
  1206. BaseUnitInformation baseUnitInformation = new BaseUnitInformation();
  1207. baseUnitInformation.setUnitName(baseExpert.getUnitInformation());
  1208. baseUnitInformation.setCreated(baseExpert.getExpertName());
  1209. baseUnitInformation.setCreateTime(new Date());
  1210. Integer i = baseExpertMapper.insertBaseUnitInformation(baseUnitInformation);
  1211. }
  1212. }
  1213. }
  1214. }
  1215. PmDemand pmDemandUpdate = new PmDemand();
  1216. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  1217. pmDemandUpdate.setHasExpert("1");
  1218. this.updateById(pmDemandUpdate);
  1219. return true;
  1220. }
  1221. @Override
  1222. @Transactional(rollbackFor = Exception.class)
  1223. public boolean extractExpertBatch(PmBaseExpertExtractReqVo pmBaseExpertExtractReqVo) throws Exception {
  1224. PmDemand pmDemand = this.getById(pmBaseExpertExtractReqVo.getDemandId());
  1225. if (ObjectUtils.isEmpty(pmDemand)) {
  1226. throw new Exception("参数错误");
  1227. }
  1228. String professional = pmBaseExpertExtractReqVo.getProfessional();
  1229. if (ObjectUtils.isEmpty(professional)) {
  1230. throw new Exception("必须选择专家专业");
  1231. }
  1232. String localArea = pmBaseExpertExtractReqVo.getLocalArea();
  1233. if (ObjectUtils.isEmpty(localArea)) {
  1234. throw new Exception("必须选择地域");
  1235. }
  1236. if (!StringUtils.isNumeric(localArea)) {
  1237. throw new Exception("地域必须传数字代码");
  1238. }
  1239. Integer technicalExpertNumber = pmBaseExpertExtractReqVo.getTechnicalExpertNumber();
  1240. if (technicalExpertNumber == null) {
  1241. technicalExpertNumber = 0;
  1242. }
  1243. Integer economicExpertNumber = pmBaseExpertExtractReqVo.getEconomicExpertNumber();
  1244. if (economicExpertNumber == null) {
  1245. economicExpertNumber = 0;
  1246. }
  1247. Integer legalAffairsExpertNumber = pmBaseExpertExtractReqVo.getLegalAffairsExpertNumber();
  1248. if (legalAffairsExpertNumber == null) {
  1249. legalAffairsExpertNumber = 0;
  1250. }
  1251. Integer spareExpertNumber = pmBaseExpertExtractReqVo.getSpareExpertNumber();
  1252. if (spareExpertNumber == null) {
  1253. spareExpertNumber = 0;
  1254. }
  1255. if (technicalExpertNumber + economicExpertNumber + legalAffairsExpertNumber + spareExpertNumber == 0) {
  1256. throw new Exception("必须至少填写一个数量");
  1257. }
  1258. String needAvoidUnit = pmBaseExpertExtractReqVo.getNeedAvoidUnit();
  1259. List<String> needAvoidUnitList = null;
  1260. if (!ObjectUtils.isEmpty(needAvoidUnit)) {
  1261. String[] arr = needAvoidUnit.split(",");
  1262. needAvoidUnitList = Arrays.asList(arr);
  1263. }
  1264. List<String> sysRegionCodeList = new ArrayList<>();
  1265. if (!ObjectUtils.isEmpty(localArea)) {
  1266. sysRegionCodeList.add(localArea);
  1267. //找到该地域code对应的子列表
  1268. List<SysRegionVO> sysRegionVOList = iSysRegionService.findChildDivisions(localArea);
  1269. if (!ObjectUtils.isEmpty(sysRegionVOList)) {
  1270. for (SysRegionVO vo : sysRegionVOList) {
  1271. sysRegionCodeList.add(vo.getCode());
  1272. }
  1273. }
  1274. }
  1275. //从专家库中查询符合项目类型的以及是白名单的全部列表
  1276. LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<>();
  1277. lw.eq(BaseExpert::getStatus, NameListType.WHITE.getCode())
  1278. .notIn(!ObjectUtils.isEmpty(needAvoidUnitList), BaseExpert::getUnitInformation, needAvoidUnitList)
  1279. .in(!ObjectUtils.isEmpty(sysRegionCodeList), BaseExpert::getLocalArea, sysRegionCodeList); //地域
  1280. List<BaseExpert> baseExpertList = baseExpertService.list(lw);
  1281. if (ObjectUtils.isEmpty(baseExpertList)) {
  1282. throw new Exception("没抽取到符合条件的专家");
  1283. }
  1284. //从列表中挑出来各个类型的子列表
  1285. List<BaseExpert> technicalExpertList = new ArrayList<>();
  1286. List<BaseExpert> economicExpertList = new ArrayList<>();
  1287. List<BaseExpert> legalAffairsExpertList = new ArrayList<>();
  1288. List<BaseExpert> spareExpertList = new ArrayList<>();
  1289. String[] arr = professional.split(",");
  1290. List<String> professionalList = Arrays.asList(arr);
  1291. for (BaseExpert baseExpert : baseExpertList) {
  1292. //专业类型判断
  1293. String majorType = baseExpert.getMajorType();
  1294. if (!ObjectUtils.isEmpty(majorType)) {
  1295. String[] arr2 = majorType.split(",");
  1296. List<String> majorTypeList = Arrays.asList(arr2);
  1297. if (!hasIntersection(professionalList, majorTypeList)) { //不符合专业类型
  1298. continue;
  1299. }
  1300. }
  1301. //备用专家
  1302. if (spareExpertNumber > 0) { //都加进去
  1303. spareExpertList.add(baseExpert);
  1304. }
  1305. if (technicalExpertNumber > 0) {
  1306. if (baseExpert.getExpertType().contains(ExpertType.TECHNICAL_EXPERT.getCode())) {
  1307. technicalExpertList.add(baseExpert);
  1308. continue;
  1309. }
  1310. }
  1311. if (economicExpertNumber > 0) {
  1312. if (baseExpert.getExpertType().contains(ExpertType.ECONOMIC_EXPERT.getCode())) {
  1313. economicExpertList.add(baseExpert);
  1314. continue;
  1315. }
  1316. }
  1317. if (legalAffairsExpertNumber > 0) {
  1318. if (baseExpert.getExpertType().contains(ExpertType.LEGALAFFAIRS_EXPERT.getCode())) {
  1319. legalAffairsExpertList.add(baseExpert);
  1320. continue;
  1321. }
  1322. }
  1323. }
  1324. //从子列表中随机抽取符合数据量的
  1325. List<BaseExpert> alltExpertList = new ArrayList<>();
  1326. if (technicalExpertNumber > 0 && technicalExpertList.size() < technicalExpertNumber) {
  1327. throw new Exception("抽取到符合条件的技术专家数量不够");
  1328. }
  1329. if (!ObjectUtils.isEmpty(technicalExpertList)) {
  1330. alltExpertList.addAll(RandomUtil.getRandomList(technicalExpertList, technicalExpertNumber));
  1331. }
  1332. if (economicExpertNumber > 0 && economicExpertList.size() < economicExpertNumber) {
  1333. throw new Exception("抽取到符合条件的经济专家数量不够");
  1334. }
  1335. if (!ObjectUtils.isEmpty(economicExpertList)) {
  1336. alltExpertList.addAll(RandomUtil.getRandomList(economicExpertList, economicExpertNumber));
  1337. }
  1338. if (legalAffairsExpertNumber > 0 && legalAffairsExpertList.size() < legalAffairsExpertNumber) {
  1339. throw new Exception("抽取到符合条件的法务专家数量不够");
  1340. }
  1341. if (!ObjectUtils.isEmpty(legalAffairsExpertList)) {
  1342. alltExpertList.addAll(RandomUtil.getRandomList(legalAffairsExpertList, legalAffairsExpertNumber));
  1343. }
  1344. List<BaseExpert> spareExpertListNew = new ArrayList<>();
  1345. if (!ObjectUtils.isEmpty(spareExpertList)) {
  1346. //获取全部IDlist
  1347. List<Integer> allExpertIdList = new ArrayList<>();
  1348. if (!ObjectUtils.isEmpty(alltExpertList)) {
  1349. for (BaseExpert baseExpert : alltExpertList) {
  1350. allExpertIdList.add(baseExpert.getId());
  1351. }
  1352. }
  1353. //遍历全部IDlist
  1354. if (!ObjectUtils.isEmpty(allExpertIdList)) { //去重
  1355. for (BaseExpert baseExpert : spareExpertList) {
  1356. if (!allExpertIdList.contains(baseExpert.getId())) {
  1357. spareExpertListNew.add(baseExpert);
  1358. }
  1359. }
  1360. } else {
  1361. spareExpertListNew = spareExpertList;
  1362. }
  1363. if (!ObjectUtils.isEmpty(spareExpertListNew)) {
  1364. alltExpertList.addAll(RandomUtil.getRandomList(spareExpertListNew, spareExpertNumber));
  1365. }
  1366. }
  1367. if (spareExpertNumber > 0 && spareExpertListNew.size() < spareExpertNumber) {
  1368. throw new Exception("抽取到符合条件的备用专家数量不够");
  1369. }
  1370. if (ObjectUtils.isEmpty(alltExpertList)) {
  1371. throw new Exception("没抽取到符合条件的专家");
  1372. } else {
  1373. List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
  1374. for (BaseExpert baseExpert : alltExpertList) {
  1375. LambdaQueryWrapper<PmDemandExpertRef> baseExpertLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1376. baseExpertLambdaQueryWrapper.eq(PmDemandExpertRef::getExpertId, baseExpert.getId().longValue())
  1377. .eq(PmDemandExpertRef::getDemandId, pmDemand.getDemandId())
  1378. .eq(PmDemandExpertRef::getAccessTime, pmBaseExpertExtractReqVo.getAccessTime());
  1379. PmDemandExpertRef pmDemandExpertRef = pmDemandExpertRefService.getOne(baseExpertLambdaQueryWrapper);
  1380. if (pmDemandExpertRef == null) {
  1381. pmDemandExpertRef = new PmDemandExpertRef();
  1382. pmDemandExpertRef.setCreateBy(pmBaseExpertExtractReqVo.getCreateBy());
  1383. pmDemandExpertRef.setCreateTime(new Date());
  1384. }
  1385. pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
  1386. pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
  1387. pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertExtractReqVo.getAccessTime()));
  1388. pmDemandExpertRef.setUpdateBy(pmBaseExpertExtractReqVo.getCreateBy());
  1389. pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
  1390. pmDemandExpertRefList.add(pmDemandExpertRef);
  1391. }
  1392. PmDemand pmDemandUpdate = new PmDemand();
  1393. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  1394. pmDemandUpdate.setHasExpert("1");
  1395. this.updateById(pmDemandUpdate);
  1396. return pmDemandExpertRefService.saveOrUpdateBatch(pmDemandExpertRefList);
  1397. }
  1398. }
  1399. //二个列表是否有交集
  1400. private boolean hasIntersection(List<String> professionalList, List<String> majorTypeList) {
  1401. for (String professiona : professionalList) {
  1402. for (String majorType : majorTypeList) {
  1403. if (professiona.equals(majorType)) {
  1404. return true;
  1405. }
  1406. }
  1407. }
  1408. return false;
  1409. }
  1410. @Override
  1411. @Transactional(rollbackFor = Exception.class)
  1412. public boolean insertBidOpeningBatch(PmBidOpeningFillReqVo pmBidOpeningFillReqVo) throws Exception {
  1413. PmDemand pmDemand = this.getById(pmBidOpeningFillReqVo.getDemandId());
  1414. if (ObjectUtils.isEmpty(pmDemand)) {
  1415. throw new Exception("参数错误");
  1416. }
  1417. //从发布公告里获取开标时间
  1418. LambdaQueryWrapper<PmReleaseAnnouncement> lw = new LambdaQueryWrapper<>();
  1419. lw.eq(PmReleaseAnnouncement::getDemandId, pmDemand.getDemandId()).orderByDesc(PmReleaseAnnouncement::getReleaseTime)
  1420. .last(" limit 1 ");
  1421. PmReleaseAnnouncement pmReleaseAnnouncement = this.pmReleaseAnnouncementService.getOne(lw);
  1422. if (pmReleaseAnnouncement == null) {
  1423. throw new Exception("发布公告不存在");
  1424. }
  1425. Date tenderOpenTime = pmReleaseAnnouncement.getTenderOpenTime();
  1426. Date now = new Date();
  1427. List<PmBidOpening> pmBidOpeningList = pmBidOpeningFillReqVo.getPmBidOpeningList();
  1428. for (PmBidOpening pmBidOpening : pmBidOpeningList) {
  1429. if (ObjectUtils.isEmpty(pmBidOpening.getBidderName())) {
  1430. throw new Exception("投标人名称不能为空");
  1431. }
  1432. if (ObjectUtils.isEmpty(pmBidOpening.getScore())) {
  1433. throw new Exception("分数不能为空");
  1434. }
  1435. pmBidOpening.setOpenBidTime(tenderOpenTime);
  1436. pmBidOpening.setDemandId(pmBidOpeningFillReqVo.getDemandId());
  1437. pmBidOpening.setCreateBy(pmBidOpeningFillReqVo.getCreateBy());
  1438. pmBidOpening.setCreateTime(now);
  1439. pmBidOpening.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  1440. pmBidOpening.setUpdateTime(now);
  1441. }
  1442. if (pmBidOpeningService.saveOrUpdateBatch(pmBidOpeningList)) {
  1443. PmDemand pmDemandUpdate = new PmDemand();
  1444. pmDemandUpdate.setDemandId(pmDemand.getDemandId());
  1445. pmDemandUpdate.setProjectStatus(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  1446. pmDemandUpdate.setUpdateTime(now);
  1447. pmDemandUpdate.setUpdateBy(pmBidOpeningFillReqVo.getUpdateBy());
  1448. return this.updateById(pmDemandUpdate);
  1449. } else {
  1450. return false;
  1451. }
  1452. }
  1453. /**
  1454. * 预中标
  1455. *
  1456. * @param pmBidWinningReqVo
  1457. * @return
  1458. * @throws Exception
  1459. */
  1460. @Override
  1461. @Transactional(rollbackFor = Exception.class)
  1462. public boolean insertPmBidWinning(PmBidWinningReqVo pmBidWinningReqVo) throws Exception {
  1463. List<Long> pmBidOpeningIdList = pmBidWinningReqVo.getPmBidOpeningIdList();
  1464. if (ObjectUtils.isEmpty(pmBidWinningReqVo.getBidWinningAmount()) && ObjectUtils.isEmpty(pmBidWinningReqVo.getRemarks())) {
  1465. throw new Exception("中标金额或备注必须填写一个");
  1466. }
  1467. if (ObjectUtils.isEmpty(pmBidOpeningIdList)) {
  1468. throw new Exception("中标单位信息列表不能为空");
  1469. }
  1470. if (ObjectUtils.isEmpty(pmBidWinningReqVo.getSysFileRefs())) {
  1471. throw new Exception("上传附件不能为空");
  1472. }
  1473. PmBidWinning pmBidWinning = new PmBidWinning();
  1474. BeanUtils.copyProperties(pmBidWinningReqVo, pmBidWinning);
  1475. //修改老的中标信息状态
  1476. if (ObjectUtils.isEmpty(pmBidWinningReqVo.getId())) { //属于新增
  1477. LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1478. pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId, pmBidWinningReqVo.getDemandId())
  1479. .eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
  1480. List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(pmBidWinningLambdaQueryWrapper);
  1481. if (!ObjectUtils.isEmpty(pmBidWinninglist)) {
  1482. for (PmBidWinning item : pmBidWinninglist) {
  1483. UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
  1484. updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_REPLACED.getCode())
  1485. .eq(PmBidWinning::getId, item.getId());
  1486. pmBidWinningService.update(updateWrapper1);
  1487. UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
  1488. updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_REPLACED.getCode())
  1489. .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
  1490. .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
  1491. pmBidWinningOpeningRefService.update(updateWrapper2);
  1492. }
  1493. }
  1494. }
  1495. if (pmBidWinningService.saveOrUpdate(pmBidWinning)) {
  1496. List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = new ArrayList<>();
  1497. for (Long pmBidOpeningId : pmBidOpeningIdList) {
  1498. LambdaQueryWrapper<PmBidWinningOpeningRef> pmBidWinningOpeningRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1499. pmBidWinningOpeningRefLambdaQueryWrapper.eq(PmBidWinningOpeningRef::getOpeningId, pmBidOpeningId)
  1500. .eq(PmBidWinningOpeningRef::getWinningId, pmBidWinning.getId());
  1501. PmBidWinningOpeningRef pmBidWinningOpeningRef = pmBidWinningOpeningRefService.getOne(pmBidWinningOpeningRefLambdaQueryWrapper);
  1502. if (pmBidWinningOpeningRef == null) {
  1503. pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
  1504. pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
  1505. pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
  1506. }
  1507. pmBidWinningOpeningRef.setDemandId(pmBidWinning.getDemandId());
  1508. pmBidWinningOpeningRef.setOpeningId(pmBidOpeningId);
  1509. pmBidWinningOpeningRef.setWinningId(pmBidWinning.getId());
  1510. pmBidWinningOpeningRef.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1511. pmBidWinningOpeningRef.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1512. pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
  1513. }
  1514. if (pmBidWinningOpeningRefService.saveOrUpdateBatch(pmBidWinningOpeningRefList)) {
  1515. uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(), pmBidWinningReqVo.getSysFileRefs(), pmBidWinningReqVo.getUpdateBy());
  1516. //发布公告生成后,会默认将该数据同步到公告管理和首页中
  1517. PmDemand pmDemand = this.getById(pmBidWinningReqVo.getDemandId());
  1518. BaseNotice baseNotice = new BaseNotice();
  1519. baseNotice.setName(pmDemand.getProjectName());
  1520. baseNotice.setTitle(pmDemand.getProjectName() + "预中标公告");
  1521. LambdaQueryWrapper<BaseNoticeType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1522. lambdaQueryWrapper.eq(BaseNoticeType::getName, "预中标公告");
  1523. BaseNoticeType baseNoticeType = baseNoticeTypeService.getOne(lambdaQueryWrapper);
  1524. if (baseNoticeType == null) {
  1525. throw new Exception("预中标公告 公告类型不存在");
  1526. }
  1527. baseNotice.setDemandId(pmDemand.getDemandId());
  1528. baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
  1529. baseNotice.setIsExcess(pmDemand.getIsExcess());
  1530. baseNotice.setType(baseNoticeType.getId());
  1531. baseNotice.setReleaseTime(pmBidWinningReqVo.getBidAnnouncementTime());
  1532. baseNotice.setCreated(pmBidWinningReqVo.getCreateBy());
  1533. baseNotice.setCreateTime(pmBidWinningReqVo.getCreateTime());
  1534. baseNotice.setUpdated(pmBidWinningReqVo.getUpdateBy());
  1535. baseNotice.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1536. this.baseNoticeService.saveOrUpdate(baseNotice);
  1537. PmDemand pmDemandUpdate = new PmDemand();
  1538. pmDemandUpdate.setDemandId(pmBidWinningReqVo.getDemandId());
  1539. pmDemandUpdate.setProjectStatus(PmProjectStatus.POST_BID_QUERY.getCode());
  1540. pmDemandUpdate.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1541. pmDemandUpdate.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1542. return this.updateById(pmDemandUpdate);
  1543. } else {
  1544. return false;
  1545. }
  1546. } else {
  1547. return false;
  1548. }
  1549. }
  1550. @Override
  1551. @Transactional(rollbackFor = Exception.class)
  1552. public boolean updatePmBidWinning(PmBidWinningReqVo pmBidWinningReqVo) throws Exception {
  1553. List<Long> pmBidOpeningIdList = pmBidWinningReqVo.getPmBidOpeningIdList();
  1554. if (ObjectUtils.isEmpty(pmBidOpeningIdList)) {
  1555. throw new Exception("中标单位信息列表不能为空");
  1556. }
  1557. if (ObjectUtils.isEmpty(pmBidWinningReqVo.getBidWinningAmount())) {
  1558. throw new Exception("中标金额不能为空");
  1559. }
  1560. if (ObjectUtils.isEmpty(pmBidWinningReqVo.getSysFileRefs())) {
  1561. throw new Exception("上传附件不能为空");
  1562. }
  1563. LambdaQueryWrapper<PmBidWinning> lw = new LambdaQueryWrapper<>();
  1564. lw.eq(PmBidWinning::getDemandId, pmBidWinningReqVo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
  1565. List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(lw);
  1566. if (ObjectUtils.isEmpty(pmBidWinninglist)) {
  1567. throw new Exception("原中标信息不存在");
  1568. }
  1569. //修改老的状态
  1570. for (PmBidWinning item : pmBidWinninglist) {
  1571. UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
  1572. updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_REPLACED.getCode())
  1573. .eq(PmBidWinning::getId, item.getId());
  1574. pmBidWinningService.update(updateWrapper1);
  1575. UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
  1576. updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_REPLACED.getCode())
  1577. .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
  1578. .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
  1579. pmBidWinningOpeningRefService.update(updateWrapper2);
  1580. }
  1581. //新增
  1582. PmBidWinning pmBidWinning = new PmBidWinning();
  1583. BeanUtils.copyProperties(pmBidWinninglist.get(0), pmBidWinning);
  1584. pmBidWinning.setId(null);
  1585. pmBidWinning.setBidWinningAmount(pmBidWinningReqVo.getBidWinningAmount());
  1586. pmBidWinning.setStatus(BidWinningStatus.NORMAL.getCode());
  1587. pmBidWinning.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1588. pmBidWinning.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1589. if (pmBidWinningService.save(pmBidWinning)) {
  1590. List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = new ArrayList<>();
  1591. for (Long pmBidOpeningId : pmBidOpeningIdList) {
  1592. PmBidWinningOpeningRef pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
  1593. pmBidWinningOpeningRef.setDemandId(pmBidWinning.getDemandId());
  1594. pmBidWinningOpeningRef.setOpeningId(pmBidOpeningId);
  1595. pmBidWinningOpeningRef.setWinningId(pmBidWinning.getId());
  1596. pmBidWinningOpeningRef.setStatus(BidWinningStatus.NORMAL.getCode());
  1597. pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
  1598. pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
  1599. pmBidWinningOpeningRef.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
  1600. pmBidWinningOpeningRef.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
  1601. pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
  1602. }
  1603. LambdaQueryWrapper<SysFileRef> sysFileRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1604. sysFileRefLambdaQueryWrapper.eq(SysFileRef::getType, SysFileRefEnum.PM_BID_WINNING_FILE.getType())
  1605. .eq(SysFileRef::getRedId, pmBidWinninglist.get(0));
  1606. List<SysFileRef> sysFileRefs = sysFileRefService.list(sysFileRefLambdaQueryWrapper);
  1607. uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(), sysFileRefs, pmBidWinningReqVo.getUpdateBy());
  1608. return pmBidWinningOpeningRefService.saveBatch(pmBidWinningOpeningRefList);
  1609. } else {
  1610. return false;
  1611. }
  1612. }
  1613. /**
  1614. * 流标
  1615. *
  1616. * @param pmBidFailureReqVo
  1617. * @return
  1618. * @throws Exception
  1619. */
  1620. @Override
  1621. @Transactional(rollbackFor = Exception.class)
  1622. public boolean insertPmBidFailure(PmBidFailureReqVo pmBidFailureReqVo) throws Exception {
  1623. PmBidFailure pmBidFailure = new PmBidFailure();
  1624. BeanUtils.copyProperties(pmBidFailureReqVo, pmBidFailure);
  1625. if (pmBidFailureService.saveOrUpdate(pmBidFailure)) {
  1626. //把中标信息修改状态
  1627. LambdaQueryWrapper<PmBidWinning> lw = new LambdaQueryWrapper<>();
  1628. lw.eq(PmBidWinning::getDemandId, pmBidFailureReqVo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
  1629. List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(lw);
  1630. if (!ObjectUtils.isEmpty(pmBidWinninglist)) {
  1631. for (PmBidWinning item : pmBidWinninglist) {
  1632. UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
  1633. updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_BID_FAILURE.getCode())
  1634. .eq(PmBidWinning::getId, item.getId());
  1635. pmBidWinningService.update(updateWrapper1);
  1636. UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
  1637. updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_BID_FAILURE.getCode())
  1638. .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
  1639. .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
  1640. pmBidWinningOpeningRefService.update(updateWrapper2);
  1641. }
  1642. }
  1643. uploadFile(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType(), pmBidFailureReqVo.getSysFileRefs(), pmBidFailureReqVo.getUpdateBy());
  1644. //发布公告生成后,会默认将该数据同步到公告管理和首页中
  1645. PmDemand pmDemand = this.getById(pmBidFailureReqVo.getDemandId());
  1646. BaseNotice baseNotice = new BaseNotice();
  1647. baseNotice.setName(pmDemand.getProjectName());
  1648. baseNotice.setTitle(pmDemand.getProjectName() + "流废标公告");
  1649. LambdaQueryWrapper<BaseNoticeType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1650. lambdaQueryWrapper.eq(BaseNoticeType::getName, "流废标公告");
  1651. BaseNoticeType baseNoticeType = baseNoticeTypeService.getOne(lambdaQueryWrapper);
  1652. if (baseNoticeType == null) {
  1653. throw new Exception("流废标公告 公告类型不存在");
  1654. }
  1655. baseNotice.setDemandId(pmDemand.getDemandId());
  1656. baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
  1657. baseNotice.setIsExcess(pmDemand.getIsExcess());
  1658. baseNotice.setType(baseNoticeType.getId());
  1659. baseNotice.setReleaseTime(pmBidFailureReqVo.getBidFailureTime());
  1660. baseNotice.setCreated(pmBidFailureReqVo.getCreateBy());
  1661. baseNotice.setCreateTime(pmBidFailureReqVo.getCreateTime());
  1662. baseNotice.setUpdated(pmBidFailureReqVo.getUpdateBy());
  1663. baseNotice.setUpdateTime(pmBidFailureReqVo.getUpdateTime());
  1664. this.baseNoticeService.saveOrUpdate(baseNotice);
  1665. PmDemand pmDemandUpdate = new PmDemand();
  1666. pmDemandUpdate.setDemandId(pmBidFailureReqVo.getDemandId());
  1667. pmDemandUpdate.setProjectStatus(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  1668. pmDemandUpdate.setHasExpert("0");
  1669. pmDemandUpdate.setUpdateTime(pmBidFailureReqVo.getUpdateTime());
  1670. pmDemandUpdate.setUpdateBy(pmBidFailureReqVo.getUpdateBy());
  1671. return this.updateById(pmDemandUpdate);
  1672. } else {
  1673. return false;
  1674. }
  1675. }
  1676. @Override
  1677. @Transactional(rollbackFor = Exception.class)
  1678. public boolean insertContractInfo(PmContractInfoReqVo pmContractInfoReqVo) throws Exception {
  1679. Long demandId = pmContractInfoReqVo.getDemandId();
  1680. if (ObjectUtils.isEmpty(demandId)) {
  1681. throw new Exception("采购需求ID不能为空");
  1682. }
  1683. PmDemand pmDemand = this.getById(demandId);
  1684. if (ObjectUtils.isEmpty(pmDemand)) {
  1685. throw new Exception("采购需求ID错误");
  1686. }
  1687. List<SysFileRef> sysFileRefs = pmContractInfoReqVo.getSysFileRefs();
  1688. if (ObjectUtils.isEmpty(sysFileRefs)) {
  1689. throw new Exception("上传附件不能为空");
  1690. }
  1691. LambdaQueryWrapper<PmContractInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1692. lambdaQueryWrapper.eq(PmContractInfo::getDemandId, demandId);
  1693. PmContractInfo pmContractInfo = pmContractInfoService.getOne(lambdaQueryWrapper);
  1694. if (pmContractInfo != null) {
  1695. pmContractInfoReqVo.setId(pmContractInfo.getId());
  1696. BeanUtils.copyProperties(pmContractInfoReqVo, pmContractInfo);
  1697. pmContractInfo.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1698. pmContractInfo.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1699. } else {
  1700. pmContractInfo = new PmContractInfo();
  1701. BeanUtils.copyProperties(pmContractInfoReqVo, pmContractInfo);
  1702. pmContractInfo.setCreateBy(pmContractInfoReqVo.getCreateBy());
  1703. pmContractInfo.setCreateTime(pmContractInfoReqVo.getCreateTime());
  1704. pmContractInfo.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1705. pmContractInfo.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1706. }
  1707. if (pmContractInfoService.saveOrUpdate(pmContractInfo)) {
  1708. this.uploadFile(pmContractInfo.getId(), SysFileRefEnum.PM_CONTRACT_INFO.getType(), sysFileRefs, pmContractInfoReqVo.getUpdateBy());
  1709. PmDemand pmDemandUpdate = new PmDemand();
  1710. pmDemandUpdate.setDemandId(demandId);
  1711. pmDemandUpdate.setProjectStatus(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  1712. pmDemandUpdate.setUpdateTime(pmContractInfoReqVo.getUpdateTime());
  1713. pmDemandUpdate.setUpdateBy(pmContractInfoReqVo.getUpdateBy());
  1714. return this.updateById(pmDemandUpdate);
  1715. } else {
  1716. return false;
  1717. }
  1718. }
  1719. @Override
  1720. @Transactional(rollbackFor = Exception.class)
  1721. public boolean insertProjectConstruction(PmProjectConstructionReqVo pmProjectConstructionReqVo) throws Exception {
  1722. Long demandId = pmProjectConstructionReqVo.getDemandId();
  1723. if (ObjectUtils.isEmpty(demandId)) {
  1724. throw new Exception("采购需求ID不能为空");
  1725. }
  1726. PmDemand pmDemand = this.getById(demandId);
  1727. if (ObjectUtils.isEmpty(pmDemand)) {
  1728. throw new Exception("采购需求ID错误");
  1729. }
  1730. List<SysFileRef> sysFileRefs = pmProjectConstructionReqVo.getSysFileRefs();
  1731. if (ObjectUtils.isEmpty(sysFileRefs)) {
  1732. throw new Exception("上传附件不能为空");
  1733. }
  1734. LambdaQueryWrapper<PmProjectConstruction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1735. lambdaQueryWrapper.eq(PmProjectConstruction::getDemandId, demandId);
  1736. PmProjectConstruction pmProjectConstruction = pmProjectConstructionService.getOne(lambdaQueryWrapper);
  1737. if (pmProjectConstruction != null) {
  1738. pmProjectConstructionReqVo.setId(pmProjectConstruction.getId());
  1739. BeanUtils.copyProperties(pmProjectConstructionReqVo, pmProjectConstruction);
  1740. pmProjectConstruction.setUpdateBy(pmProjectConstructionReqVo.getUpdateBy());
  1741. pmProjectConstruction.setUpdateTime(pmProjectConstructionReqVo.getUpdateTime());
  1742. } else {
  1743. pmProjectConstruction = new PmProjectConstruction();
  1744. BeanUtils.copyProperties(pmProjectConstructionReqVo, pmProjectConstruction);
  1745. pmProjectConstruction.setCreateBy(pmProjectConstructionReqVo.getCreateBy());
  1746. pmProjectConstruction.setCreateTime(pmProjectConstructionReqVo.getCreateTime());
  1747. pmProjectConstruction.setUpdateBy(pmProjectConstructionReqVo.getUpdateBy());
  1748. pmProjectConstruction.setUpdateTime(pmProjectConstructionReqVo.getUpdateTime());
  1749. }
  1750. if (pmProjectConstructionService.saveOrUpdate(pmProjectConstruction)) {
  1751. this.uploadFile(pmProjectConstruction.getId(), SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType(), sysFileRefs, pmProjectConstructionReqVo.getUpdateBy());
  1752. PmDemand pmDemandUpdate = new PmDemand();
  1753. pmDemandUpdate.setDemandId(demandId);
  1754. pmDemandUpdate.setProjectStatus(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
  1755. pmDemandUpdate.setRealDeliverTime(pmProjectConstructionReqVo.getUpdateTime());
  1756. pmDemandUpdate.setWarnStatus(WarnStatus.NORMAL.getCode());
  1757. pmDemandUpdate.setUpdateTime(pmProjectConstructionReqVo.getUpdateTime());
  1758. pmDemandUpdate.setUpdateBy(pmProjectConstructionReqVo.getUpdateBy());
  1759. return this.updateById(pmDemandUpdate);
  1760. } else {
  1761. return false;
  1762. }
  1763. }
  1764. /**
  1765. * 更新需求预警状态
  1766. *
  1767. * @param demnadId
  1768. * @return
  1769. */
  1770. @Override
  1771. @Transactional(rollbackFor = Exception.class)
  1772. public void updateDemandWarnStatus(Long demnadId) {
  1773. PmDemand pmDemand = this.getById(demnadId);
  1774. List<SysDictData> data = iSysDictTypeService.selectDictDataByType("alert_time_setting");
  1775. int setting1 = Integer.parseInt(data.stream().filter(item -> item.getDictLabel().equals("计划提报时间")).collect(Collectors.toList()).get(0).getDictValue());
  1776. log.info("******** setting1 == " + setting1);
  1777. //需求提报时间:根据数据阈值中设置的提报时间进行判断,进行预警
  1778. int diff1 = DateUtils.differentDaysByMillisecond(pmDemand.getPlanDemandSubTime(), DateUtils.parseDate(DateUtils.getDate()));
  1779. if (ObjectUtils.isEmpty(pmDemand.getRealDemandCommitTime()) && diff1 > 0 && diff1 <= setting1) {
  1780. PmDemand pmDemandUpdate = new PmDemand();
  1781. pmDemandUpdate.setDemandId(demnadId);
  1782. pmDemandUpdate.setWarnStatus(WarnStatus.DEMAND_COMMT_WARNING.getCode());
  1783. this.updateById(pmDemandUpdate);
  1784. } else if (ObjectUtils.isEmpty(pmDemand.getRealDemandCommitTime()) && pmDemand.getPlanDemandSubTime().getTime() < System.currentTimeMillis()) {
  1785. PmDemand pmDemandUpdate = new PmDemand();
  1786. pmDemandUpdate.setDemandId(demnadId);
  1787. pmDemandUpdate.setWarnStatus(WarnStatus.DEMAND_COMMT_EX.getCode());
  1788. this.updateById(pmDemandUpdate);
  1789. }
  1790. }
  1791. /**
  1792. * 通过需求ID列表 查询采购执行列表 sunhh
  1793. *
  1794. * @param demandIdList
  1795. * @return
  1796. */
  1797. @Override
  1798. public List<PmDemand> selectByDemandIdList(List<Integer> demandIdList) {
  1799. return this.baseMapper.selectByDemandIdList(demandIdList);
  1800. }
  1801. /**
  1802. * 专家库--查询抽取专家列表 非必传条件:专家名称,开始结束时间 sunhh
  1803. *
  1804. * @param baseExpertVo
  1805. * @return
  1806. */
  1807. @Override
  1808. public List<PmDemand> selectExtractionExpert(BaseExpertVo baseExpertVo) {
  1809. return pmDemandMapper.selectExtractionExpert(baseExpertVo);
  1810. }
  1811. @Override
  1812. public List<PmDemand> demandWaitCommit() {
  1813. List<PmDemand> byStatus = getListByStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
  1814. byStatus.addAll(getListByStatus(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  1815. return (byStatus);
  1816. }
  1817. @Override
  1818. public List<PmDemand> contractWaitFilled() {
  1819. List<PmDemand> byStatus = getListByStatus(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  1820. return (byStatus);
  1821. }
  1822. @Override
  1823. public List<PmDemand> projectWaitFinish() {
  1824. List<PmDemand> byStatus = getListByStatus(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  1825. return (byStatus);
  1826. }
  1827. @Override
  1828. public List<PmDemand> demandWaitExamine() {
  1829. return getListByStatus(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  1830. }
  1831. @Override
  1832. public List<PmDemand> taskWaitRelease() {
  1833. return getListByStatus(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  1834. }
  1835. @Override
  1836. public List<PmDemandResVo> purchaseDemandDocking() {
  1837. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  1838. return listToVoList(byStatus);
  1839. }
  1840. @Override
  1841. public List<PmDemandResVo> expertFeedback() {
  1842. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  1843. return listToVoList(byStatus);
  1844. }
  1845. @Override
  1846. public List<PmDemandResVo> procurementDocumentsReview() {
  1847. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  1848. return listToVoList(byStatus);
  1849. }
  1850. @Override
  1851. public List<PmDemandResVo> procurementAnnouncement() {
  1852. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  1853. return listToVoList(byStatus);
  1854. }
  1855. @Override
  1856. public List<PmDemandResVo> preBidQuery() {
  1857. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.PRE_BID_QUERY.getCode());
  1858. return listToVoList(byStatus);
  1859. }
  1860. @Override
  1861. public List<PmDemandResVo> waitOpenBid() {
  1862. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.WAIT_OPEN_BID.getCode());
  1863. return listToVoList(byStatus);
  1864. }
  1865. @Override
  1866. public List<PmDemandResVo> bidResultAnnouncement() {
  1867. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  1868. return listToVoList(byStatus);
  1869. }
  1870. @Override
  1871. public List<PmDemandResVo> wasteBidHandle() {
  1872. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  1873. return listToVoList(byStatus);
  1874. }
  1875. @Override
  1876. public List<PmDemandResVo> postBidQuery() {
  1877. List<PmDemand> byStatus = getListByStatusCGB(PmProjectStatus.POST_BID_QUERY.getCode());
  1878. return listToVoList(byStatus);
  1879. }
  1880. @Override
  1881. public AjaxResult procurementOfficeWillManipulateTotal() {
  1882. List<HomeToDoQueryResVo> homeRes = new ArrayList<>();
  1883. // 采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
  1884. List<PmDemandResVo> demandRes = new ArrayList<>();
  1885. List<String> projectStatus = new ArrayList<>();
  1886. projectStatus.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  1887. projectStatus.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  1888. projectStatus.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  1889. projectStatus.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  1890. projectStatus.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  1891. projectStatus.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  1892. projectStatus.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  1893. projectStatus.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  1894. projectStatus.add(PmProjectStatus.POST_BID_QUERY.getCode());
  1895. demandRes = listToVoList(getListByStatusTotalCGB(projectStatus));
  1896. //计划数据--发函催告
  1897. List<PlanQuarterResponseVo> planRes = planYearsService.willSendLetter();
  1898. //转为首页table展示数据
  1899. if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
  1900. for (PmDemandResVo demandResVo : demandRes) {
  1901. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  1902. home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
  1903. BeanUtils.copyProperties(demandResVo, home);
  1904. homeRes.add(home);
  1905. }
  1906. }
  1907. if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
  1908. for (PlanQuarterResponseVo planVo : planRes) {
  1909. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  1910. BeanUtils.copyProperties(planVo, home);
  1911. homeRes.add(home);
  1912. }
  1913. }
  1914. return AjaxResult.success(homeRes);
  1915. }
  1916. @Override
  1917. public AjaxResult procurementOfficeWillAlertProject() {
  1918. List<HomeToDoQueryResVo> homeRes = new ArrayList<>();
  1919. // 采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
  1920. List<PmDemandResVo> demandRes = new ArrayList<>();
  1921. List<String> projectStatus = new ArrayList<>();
  1922. projectStatus.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  1923. projectStatus.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  1924. projectStatus.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  1925. projectStatus.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  1926. projectStatus.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  1927. projectStatus.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  1928. projectStatus.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  1929. projectStatus.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  1930. projectStatus.add(PmProjectStatus.POST_BID_QUERY.getCode());
  1931. demandRes = listToVoList(getListByStatusTotalCGB(projectStatus));
  1932. //计划数据--发函催告
  1933. List<PlanQuarterResponseVo> planRes = planYearsService.willSendLetter();
  1934. //转为首页table展示数据
  1935. if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
  1936. for (PmDemandResVo demandResVo : demandRes) {
  1937. if (!demandResVo.getTipsMessage().equals("") && demandResVo.getTipsMessage().length() > 0) {
  1938. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  1939. home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
  1940. BeanUtils.copyProperties(demandResVo, home);
  1941. homeRes.add(home);
  1942. }
  1943. }
  1944. }
  1945. if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
  1946. for (PlanQuarterResponseVo planVo : planRes) {
  1947. if (!planVo.getTipsMessage().equals("") && planVo.getTipsMessage().length() > 0) {
  1948. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  1949. BeanUtils.copyProperties(planVo, home);
  1950. homeRes.add(home);
  1951. }
  1952. }
  1953. }
  1954. return AjaxResult.success(homeRes);
  1955. }
  1956. @Override
  1957. public AjaxResult procurementOfficeWillManipulateTotalNum() {
  1958. List<StatisticalChartsResVo> result = new ArrayList<>();
  1959. // 采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
  1960. Integer numByStatus = getNumByStatusCGB(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  1961. StatisticalChartsResVo chartsResVo = new StatisticalChartsResVo();
  1962. chartsResVo.setNum(numByStatus);
  1963. chartsResVo.setColumnName("采购需求对接");
  1964. result.add(chartsResVo);
  1965. Integer numByStatus1 = getNumByStatusCGB(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  1966. StatisticalChartsResVo chartsResVo1 = new StatisticalChartsResVo();
  1967. chartsResVo1.setColumnName("专家意见反馈");
  1968. chartsResVo1.setNum(numByStatus1);
  1969. result.add(chartsResVo1);
  1970. Integer numByStatus2 = getNumByStatusCGB(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  1971. StatisticalChartsResVo chartsResVo2 = new StatisticalChartsResVo();
  1972. chartsResVo2.setColumnName("采购文件编制审核");
  1973. chartsResVo2.setNum(numByStatus2);
  1974. result.add(chartsResVo2);
  1975. Integer numByStatus3 = getNumByStatusCGB(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  1976. StatisticalChartsResVo chartsResVo3 = new StatisticalChartsResVo();
  1977. chartsResVo3.setColumnName("采购公告发布");
  1978. chartsResVo3.setNum(numByStatus3);
  1979. result.add(chartsResVo3);
  1980. Integer numByStatus4 = getNumByStatusCGB(PmProjectStatus.PRE_BID_QUERY.getCode());
  1981. StatisticalChartsResVo chartsResVo4 = new StatisticalChartsResVo();
  1982. chartsResVo4.setColumnName("标前质疑投诉");
  1983. chartsResVo4.setNum(numByStatus4);
  1984. result.add(chartsResVo4);
  1985. Integer numByStatus5 = getNumByStatusCGB(PmProjectStatus.WAIT_OPEN_BID.getCode());
  1986. StatisticalChartsResVo chartsResVo5 = new StatisticalChartsResVo();
  1987. chartsResVo5.setColumnName("待开标");
  1988. chartsResVo5.setNum(numByStatus5);
  1989. result.add(chartsResVo5);
  1990. Integer numByStatus6 = getNumByStatusCGB(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  1991. StatisticalChartsResVo chartsResVo6 = new StatisticalChartsResVo();
  1992. chartsResVo6.setColumnName("评标结果公告");
  1993. chartsResVo6.setNum(numByStatus6);
  1994. result.add(chartsResVo6);
  1995. Integer numByStatus7 = getNumByStatusCGB(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  1996. StatisticalChartsResVo chartsResVo7 = new StatisticalChartsResVo();
  1997. chartsResVo7.setColumnName("流废标处置");
  1998. chartsResVo7.setNum(numByStatus7);
  1999. result.add(chartsResVo7);
  2000. Integer numByStatus8 = getNumByStatusCGB(PmProjectStatus.POST_BID_QUERY.getCode());
  2001. StatisticalChartsResVo chartsResVo8 = new StatisticalChartsResVo();
  2002. chartsResVo8.setColumnName("标后质疑");
  2003. chartsResVo8.setNum(numByStatus8);
  2004. result.add(chartsResVo8);
  2005. //计划数据--发函催告
  2006. Integer letterNum = planYearsService.willSendLetterNum();
  2007. StatisticalChartsResVo chartsResVo9 = new StatisticalChartsResVo();
  2008. chartsResVo9.setColumnName("发函催告");
  2009. chartsResVo9.setNum(letterNum);
  2010. result.add(chartsResVo9);
  2011. StatisticalChartsResVo chartsResVoT = new StatisticalChartsResVo();
  2012. chartsResVoT.setColumnName("全部");
  2013. chartsResVoT.setNum(willTotal(result));
  2014. result.add(chartsResVoT);
  2015. return AjaxResult.success(result);
  2016. }
  2017. public Integer willTotal(List<StatisticalChartsResVo> result) {
  2018. Integer re = 0;
  2019. if (!ObjectUtils.isEmpty(result)) {
  2020. for (StatisticalChartsResVo resVo : result) {
  2021. re += resVo.getNum();
  2022. }
  2023. }
  2024. return re;
  2025. }
  2026. /**
  2027. * 统计分析-采购项目信息统计
  2028. *
  2029. * @param pmDemandReqVo
  2030. * @return
  2031. */
  2032. @Override
  2033. public Map<String, Integer> purchaseProjectStatistical(PmDemandReqVo pmDemandReqVo) {
  2034. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2035. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2036. Map<String, Integer> mapReturn = new HashMap<>();
  2037. // 查询项目总数量
  2038. Map<String, Integer> mapCount = pmDemandMapper.purchaseProjectStatistical(pmDemandReqVo);
  2039. // 查询已完成项目数量,预算(合同)金额数量
  2040. Map<String, Integer> mapYWC = pmDemandMapper.purchaseProjectStatisticalYWC(pmDemandReqVo);
  2041. // 查询新创建项目数量,预算金额数量
  2042. Map<String, Integer> mapXCJ = pmDemandMapper.purchaseProjectStatisticalXCJ(pmDemandReqVo);
  2043. // 查询去年完成项目数量,预算(合同)金额数量
  2044. Map<String, Integer> mapQNWC = pmDemandMapper.purchaseProjectStatisticalQNWC(pmDemandReqVo);
  2045. mapReturn.putAll(mapCount);
  2046. mapReturn.putAll(mapYWC);
  2047. mapReturn.putAll(mapXCJ);
  2048. mapReturn.putAll(mapQNWC);
  2049. return mapReturn;
  2050. }
  2051. @Override
  2052. public List<StatisticalChartsResVo> countByProjectAttr(PmDemandReqVo pmDemandReqVo) {
  2053. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2054. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2055. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2056. } else {
  2057. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2058. }
  2059. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2060. //直接获取每个属性的数量
  2061. //重点采购项目
  2062. pmDemandReqVo.setProjectAttr(ProjectAttribute.emergency.getCode());
  2063. StatisticalChartsResVo vo1 = pmDemandMapper.countByProjectAttr(pmDemandReqVo);
  2064. vo1.setColumnName("重点采购项目");
  2065. resVos.add(vo1);
  2066. //重大规划任务项目
  2067. pmDemandReqVo.setProjectAttr(ProjectAttribute.majorPlan.getCode());
  2068. StatisticalChartsResVo vo2 = pmDemandMapper.countByProjectAttr(pmDemandReqVo);
  2069. vo2.setColumnName("重大规划任务项目");
  2070. resVos.add(vo2);
  2071. //规划任务项目
  2072. pmDemandReqVo.setProjectAttr(ProjectAttribute.plan.getCode());
  2073. StatisticalChartsResVo vo3 = pmDemandMapper.countByProjectAttr(pmDemandReqVo);
  2074. vo3.setColumnName("规划任务项目");
  2075. resVos.add(vo3);
  2076. //一般采购项目
  2077. pmDemandReqVo.setProjectAttr(ProjectAttribute.commonly.getCode());
  2078. StatisticalChartsResVo vo4 = pmDemandMapper.countByProjectAttr(pmDemandReqVo);
  2079. vo4.setColumnName("一般采购项目");
  2080. resVos.add(vo4);
  2081. return resVos;
  2082. }
  2083. @Override
  2084. public List<StatisticalChartsResVo> countByTaskAttr(PmDemandReqVo pmDemandReqVo) {
  2085. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2086. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2087. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2088. } else {
  2089. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2090. }
  2091. //状态为“任务待下达”以后的数据
  2092. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2093. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2094. //重点采购项目
  2095. pmDemandReqVo.setProjectAttr(ProjectAttribute.emergency.getCode());
  2096. StatisticalChartsResVo vo1 = pmDemandMapper.countByTaskAttr(pmDemandReqVo);
  2097. vo1.setColumnName("重点采购项目");
  2098. resVos.add(vo1);
  2099. //重大规划任务项目
  2100. pmDemandReqVo.setProjectAttr(ProjectAttribute.majorPlan.getCode());
  2101. StatisticalChartsResVo vo2 = pmDemandMapper.countByTaskAttr(pmDemandReqVo);
  2102. vo2.setColumnName("重大规划任务项目");
  2103. resVos.add(vo2);
  2104. //规划任务项目
  2105. pmDemandReqVo.setProjectAttr(ProjectAttribute.plan.getCode());
  2106. StatisticalChartsResVo vo3 = pmDemandMapper.countByTaskAttr(pmDemandReqVo);
  2107. vo3.setColumnName("规划任务项目");
  2108. resVos.add(vo3);
  2109. //一般采购项目
  2110. pmDemandReqVo.setProjectAttr(ProjectAttribute.commonly.getCode());
  2111. StatisticalChartsResVo vo4 = pmDemandMapper.countByTaskAttr(pmDemandReqVo);
  2112. vo4.setColumnName("一般采购项目");
  2113. resVos.add(vo4);
  2114. return resVos;
  2115. }
  2116. @Override
  2117. public List<StatisticalChartsResVo> countByPurchaseMode(PmDemandReqVo pmDemandReqVo) {
  2118. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2119. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2120. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2121. } else {
  2122. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2123. }
  2124. //状态为“任务待下达”以后的数据
  2125. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2126. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2127. //公开招标
  2128. pmDemandReqVo.setPurchaseMode(ProcurementMethodSuggest.OPEN_BIDDING.getCode());
  2129. StatisticalChartsResVo chartsR = pmDemandMapper.countByPurchaseMode(pmDemandReqVo);
  2130. chartsR.setColumnName("公开招标");
  2131. resVos.add(chartsR);
  2132. //邀请招标
  2133. pmDemandReqVo.setPurchaseMode(ProcurementMethodSuggest.SELECTED_BIDDING.getCode());
  2134. StatisticalChartsResVo chartsR1 = pmDemandMapper.countByPurchaseMode(pmDemandReqVo);
  2135. chartsR1.setColumnName("邀请招标");
  2136. resVos.add(chartsR1);
  2137. //竞争性谈判
  2138. pmDemandReqVo.setPurchaseMode(ProcurementMethodSuggest.COMPETITIVE_NEGOTIATION.getCode());
  2139. StatisticalChartsResVo chartsR2 = pmDemandMapper.countByPurchaseMode(pmDemandReqVo);
  2140. chartsR2.setColumnName("竞争性谈判");
  2141. resVos.add(chartsR2);
  2142. //询价
  2143. pmDemandReqVo.setPurchaseMode(ProcurementMethodSuggest.ENQUIRY.getCode());
  2144. StatisticalChartsResVo chartsR3 = pmDemandMapper.countByPurchaseMode(pmDemandReqVo);
  2145. chartsR3.setColumnName("询价");
  2146. resVos.add(chartsR3);
  2147. //单一来源
  2148. pmDemandReqVo.setPurchaseMode(ProcurementMethodSuggest.SINGLE_SOURCE.getCode());
  2149. StatisticalChartsResVo chartsR4 = pmDemandMapper.countByPurchaseMode(pmDemandReqVo);
  2150. chartsR4.setColumnName("单一来源");
  2151. resVos.add(chartsR4);
  2152. return resVos;
  2153. }
  2154. @Override
  2155. public List<StatisticalChartsResVo> countByEvaluation(PmDemandReqVo pmDemandReqVo) {
  2156. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2157. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2158. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2159. } else {
  2160. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2161. }
  2162. //状态为“任务待下达”以后的数据
  2163. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2164. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2165. //概算金额包括:100万以下采购任务、100至500万元采购任务、500至1000万元采购任务、1000至5000万元采购任务、5000至1亿元采购任务、1亿元及以上采购任务
  2166. pmDemandReqVo.setEvaluation(100);
  2167. StatisticalChartsResVo resVo = pmDemandMapper.countByEvaluationLt(pmDemandReqVo);
  2168. resVo.setColumnName("100万以下采购任务");
  2169. resVos.add(resVo);
  2170. pmDemandReqVo.setEvaluation(100);
  2171. pmDemandReqVo.setEvaluationEnd(500);
  2172. StatisticalChartsResVo resVo1 = pmDemandMapper.countByEvaluationBet(pmDemandReqVo);
  2173. resVo1.setColumnName("100至500万元采购任务");
  2174. resVos.add(resVo1);
  2175. pmDemandReqVo.setEvaluation(500);
  2176. pmDemandReqVo.setEvaluationEnd(1000);
  2177. StatisticalChartsResVo resVo2 = pmDemandMapper.countByEvaluationBet(pmDemandReqVo);
  2178. resVo2.setColumnName("500至1000万元采购任务");
  2179. resVos.add(resVo2);
  2180. pmDemandReqVo.setEvaluation(1000);
  2181. pmDemandReqVo.setEvaluationEnd(5000);
  2182. StatisticalChartsResVo resVo3 = pmDemandMapper.countByEvaluationBet(pmDemandReqVo);
  2183. resVo3.setColumnName("1000至5000万元采购任务");
  2184. resVos.add(resVo3);
  2185. pmDemandReqVo.setEvaluation(5000);
  2186. pmDemandReqVo.setEvaluationEnd(10000);
  2187. StatisticalChartsResVo resVo4 = pmDemandMapper.countByEvaluationBet(pmDemandReqVo);
  2188. resVo4.setColumnName("5000至1亿元采购任务");
  2189. resVos.add(resVo4);
  2190. pmDemandReqVo.setEvaluation(10000);
  2191. StatisticalChartsResVo resVo5 = pmDemandMapper.countByEvaluationGt(pmDemandReqVo);
  2192. resVo5.setColumnName("1亿元及以上采购任务");
  2193. resVos.add(resVo5);
  2194. return resVos;
  2195. }
  2196. @Override
  2197. public AjaxResult countProjectExceed(PmDemandReqVo pmDemandReqVo) {
  2198. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2199. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2200. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2201. } else {
  2202. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2203. }
  2204. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2205. //执行滞后采购项目:本年度所有的逾期项目数
  2206. //预算金额:本年度所有逾期项目累加的预算金额
  2207. StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedThisYear(pmDemandReqVo);
  2208. resVo.setColumnName("本年度执行滞后任务");
  2209. resVo.setColumnNamePlus("任务新增数量");
  2210. resVos.add(resVo);
  2211. StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedThisQua(pmDemandReqVo);
  2212. resVo2.setColumnName("本季度执行滞后任务");
  2213. resVo2.setColumnNamePlus("任务新增数量");
  2214. resVos.add(resVo2);
  2215. StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedThisMonth(pmDemandReqVo);
  2216. resVo3.setColumnName("本月执行滞后任务");
  2217. resVo3.setColumnNamePlus("任务新增数量");
  2218. resVos.add(resVo3);
  2219. StatisticalChartsResVo resVo4 = pmDemandMapper.countProjectExceedAllNum(pmDemandReqVo);
  2220. resVo4.setColumnName("累计执行滞后采购任务");
  2221. resVo4.setColumnNamePlus("采购任务数量");
  2222. resVos.add(resVo4);
  2223. //执行停滞采购任务数量--退回的采购任务数量
  2224. List<String> tzrw = new ArrayList<>();
  2225. tzrw.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
  2226. pmDemandReqVo.setProjectStatusList(tzrw);
  2227. Map<String, Object> map = pmDemandMapper.purchaseProjectDistribution(pmDemandReqVo);
  2228. StatisticalChartsResVo resVo5 = new StatisticalChartsResVo();
  2229. resVo5.setColumnName("执行停滞");
  2230. resVo5.setColumnNamePlus("采购任务数量");
  2231. resVo5.setNum(Math.toIntExact((Long) map.get("countNumber")));
  2232. resVo5.setEvaluationTotal((BigDecimal) map.get("evaluationTotal"));
  2233. resVos.add(resVo5);
  2234. return AjaxResult.success(resVos);
  2235. }
  2236. /**
  2237. * 统计不同时间维度的逾期项目
  2238. *
  2239. * @return
  2240. */
  2241. @Override
  2242. public AjaxResult exceedAnalysis(PmDemandReqVo pmDemandReqVo) {
  2243. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2244. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2245. HashMap<String, List<StatisticalChartsResVo>> resMap = new HashMap<>();
  2246. List<StatisticalChartsResVo> byYear = pmDemandMapper.countProjectExceedYear(pmDemandReqVo);
  2247. if (pmDemandReqVo.getTimeType().equals("1")) {
  2248. resMap.put("年", byYear);
  2249. } else if (pmDemandReqVo.getTimeType().equals("2")) {
  2250. List<StatisticalChartsResVo> byQuarter = new LinkedList<>();
  2251. for (StatisticalChartsResVo chartsResVo : byYear) {
  2252. pmDemandReqVo.setYear(Integer.parseInt(chartsResVo.getColumnName()));
  2253. for (int i = 1; i <= 4; i++) {
  2254. pmDemandReqVo.setQuarter(i);
  2255. StatisticalChartsResVo quarter = pmDemandMapper.countProjectExceedQuarter(pmDemandReqVo);
  2256. if (ObjectUtils.isEmpty(quarter)) {
  2257. StatisticalChartsResVo vo = new StatisticalChartsResVo("", "", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
  2258. quarter = vo;
  2259. quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
  2260. }
  2261. quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
  2262. byQuarter.add(quarter);
  2263. }
  2264. }
  2265. resMap.put("季度", byQuarter);
  2266. } else if (pmDemandReqVo.getTimeType().equals("3")) {
  2267. List<StatisticalChartsResVo> byMonth = new LinkedList<>();
  2268. for (StatisticalChartsResVo chartsResVo : byYear) {
  2269. pmDemandReqVo.setYear(Integer.parseInt(chartsResVo.getColumnName()));
  2270. for (int i = 1; i <= 12; i++) {
  2271. pmDemandReqVo.setMonth(i);
  2272. StatisticalChartsResVo month = pmDemandMapper.countProjectExceedMonth(pmDemandReqVo);
  2273. if (ObjectUtils.isEmpty(month)) {
  2274. StatisticalChartsResVo vo = new StatisticalChartsResVo("", "", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
  2275. month = vo;
  2276. month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
  2277. }
  2278. month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
  2279. byMonth.add(month);
  2280. }
  2281. }
  2282. resMap.put("月", byMonth);
  2283. }
  2284. return AjaxResult.success(resMap);
  2285. }
  2286. @Override
  2287. public AjaxResult taskQuantityAnalysis(PmDemandReqVo pmDemandReqVo) {
  2288. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2289. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2290. HashMap<String, List<StatisticalChartsResVo>> resMap = new HashMap<>();
  2291. //任务数量趋势分析:按照月、季度、年统计“项目属性”字段中“重大规划”属性的项目
  2292. List<StatisticalChartsResVo> byYear = pmDemandMapper.countProjectMajorByYear(pmDemandReqVo);
  2293. if (pmDemandReqVo.getTimeType().equals("1")) {
  2294. resMap.put("年", byYear);
  2295. } else if (pmDemandReqVo.getTimeType().equals("2")) {
  2296. List<StatisticalChartsResVo> byQuarter = new LinkedList<>();
  2297. for (StatisticalChartsResVo chartsResVo : byYear) {
  2298. pmDemandReqVo.setYear(Integer.parseInt(chartsResVo.getColumnName()));
  2299. for (int i = 1; i <= 4; i++) {
  2300. pmDemandReqVo.setQuarter(i);
  2301. StatisticalChartsResVo quarter = pmDemandMapper.countProjectMajorByQuarter(pmDemandReqVo);
  2302. quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
  2303. byQuarter.add(quarter);
  2304. }
  2305. }
  2306. resMap.put("季度", byQuarter);
  2307. } else if (pmDemandReqVo.getTimeType().equals("3")) {
  2308. List<StatisticalChartsResVo> byMonth = pmDemandMapper.countProjectMajorByMonth(pmDemandReqVo);
  2309. resMap.put("月", byMonth);
  2310. }
  2311. return AjaxResult.success(resMap);
  2312. }
  2313. @Override
  2314. public AjaxResult countEveryStatusNumThisYear(PmDemandReqVo pmDemandReqVo) {
  2315. //阶段包括:采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
  2316. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2317. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2318. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2319. } else {
  2320. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2321. }
  2322. List<StatisticalChartsResVo> everyStatusNum = new ArrayList<>();
  2323. //项目进行到各个阶段的数量
  2324. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode()));
  2325. StatisticalChartsResVo everyStatusNum9 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2326. everyStatusNum9.setColumnName(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getInfo());
  2327. everyStatusNum.add(everyStatusNum9);
  2328. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.EXPERT_FEEDBACK.getCode()));
  2329. StatisticalChartsResVo everyStatusNum10 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2330. everyStatusNum10.setColumnName(PmProjectStatus.EXPERT_FEEDBACK.getInfo());
  2331. everyStatusNum.add(everyStatusNum10);
  2332. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode()));
  2333. StatisticalChartsResVo everyStatusNum11 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2334. everyStatusNum11.setColumnName(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getInfo());
  2335. everyStatusNum.add(everyStatusNum11);
  2336. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode()));
  2337. StatisticalChartsResVo everyStatusNum12 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2338. everyStatusNum12.setColumnName(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getInfo());
  2339. everyStatusNum.add(everyStatusNum12);
  2340. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PRE_BID_QUERY.getCode()));
  2341. StatisticalChartsResVo everyStatusNum13 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2342. everyStatusNum13.setColumnName(PmProjectStatus.PRE_BID_QUERY.getInfo());
  2343. everyStatusNum.add(everyStatusNum13);
  2344. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.WAIT_OPEN_BID.getCode()));
  2345. StatisticalChartsResVo everyStatusNum14 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2346. everyStatusNum14.setColumnName(PmProjectStatus.WAIT_OPEN_BID.getInfo());
  2347. everyStatusNum.add(everyStatusNum14);
  2348. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode()));
  2349. StatisticalChartsResVo everyStatusNum15 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2350. everyStatusNum15.setColumnName(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getInfo());
  2351. everyStatusNum.add(everyStatusNum15);
  2352. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.WASTE_BID_HANDLE.getCode()));
  2353. StatisticalChartsResVo everyStatusNum16 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2354. everyStatusNum16.setColumnName(PmProjectStatus.WASTE_BID_HANDLE.getInfo());
  2355. everyStatusNum.add(everyStatusNum16);
  2356. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.POST_BID_QUERY.getCode()));
  2357. StatisticalChartsResVo everyStatusNum17 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
  2358. everyStatusNum17.setColumnName(PmProjectStatus.POST_BID_QUERY.getInfo());
  2359. everyStatusNum.add(everyStatusNum17);
  2360. return AjaxResult.success(everyStatusNum);
  2361. }
  2362. @Override
  2363. public AjaxResult exceedMarketAnalysis(PmDemandReqVo pmDemandReqVo) {
  2364. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2365. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2366. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2367. } else {
  2368. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2369. }
  2370. //所有滞后
  2371. List<PmDemand> demandList = pmDemandMapper.countProjectExceedAll(pmDemandReqVo);
  2372. Date now = new Date();
  2373. //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务
  2374. HashMap<String, Integer> map = new LinkedHashMap<>();
  2375. map.put("滞后1个月以内的采购任务", 0);
  2376. map.put("滞后1至3个月采购任务", 0);
  2377. map.put("滞后3至6个月采购任务", 0);
  2378. map.put("滞后6个月至1年采购任务", 0);
  2379. map.put("滞后1年以上采购任务", 0);
  2380. if (!ObjectUtils.isEmpty(demandList) && demandList.size() > 0) {
  2381. for (PmDemand demand : demandList) {
  2382. //滞后时间
  2383. Long exTime = 0L;
  2384. if (!ObjectUtils.isEmpty(demand.getRealPurchaseFinishTime()) && demand.getRealPurchaseFinishTime().getTime() - demand.getPlanPurchaseFinishTime().getTime() > 0) {
  2385. exTime = demand.getRealPurchaseFinishTime().getTime() - demand.getPlanPurchaseFinishTime().getTime();
  2386. } else {
  2387. exTime = now.getTime() - demand.getPlanPurchaseFinishTime().getTime();
  2388. }
  2389. if (exTime < Long.valueOf("2592000000")) {
  2390. map.put("滞后1个月以内的采购任务", map.get("滞后1个月以内的采购任务") + 1);
  2391. }
  2392. if (exTime >= Long.valueOf("2592000000") && exTime < Long.valueOf("7776000000")) {
  2393. map.put("滞后1至3个月采购任务", map.get("滞后1至3个月采购任务") + 1);
  2394. }
  2395. if (exTime >= Long.valueOf("7776000000") && exTime < Long.valueOf("15552000000")) {
  2396. map.put("滞后3至6个月采购任务", map.get("滞后3至6个月采购任务") + 1);
  2397. }
  2398. if (exTime >= Long.valueOf("15552000000") && exTime < Long.valueOf("31104000000")) {
  2399. map.put("滞后6个月至1年采购任务", map.get("滞后6个月至1年采购任务") + 1);
  2400. }
  2401. if (exTime > Long.valueOf("31104000000")) {
  2402. map.put("滞后1年以上采购任务", map.get("滞后1年以上采购任务") + 1);
  2403. }
  2404. }
  2405. }
  2406. return AjaxResult.success(map);
  2407. }
  2408. @Override
  2409. public AjaxResult countMajorProject(PmDemandReqVo pmDemandReqVo) {
  2410. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2411. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2412. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2413. } else {
  2414. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2415. }
  2416. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2417. //本月度新提报重大规划采购任务数量
  2418. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2419. StatisticalChartsResVo resVo = pmDemandMapper.majorProjectByStatusThisMonthSub(pmDemandReqVo);
  2420. resVo.setColumnName("本月度新提报");
  2421. resVo.setColumnNamePlus("重大规划采购任务数量");
  2422. resVos.add(resVo);
  2423. //本季度新提报重大规划采购任务数量
  2424. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2425. StatisticalChartsResVo resVo2 = pmDemandMapper.majorProjectByStatusThisQuaSub(pmDemandReqVo);
  2426. resVo2.setColumnName("本季度新提报");
  2427. resVo2.setColumnNamePlus("重大规划采购任务数量");
  2428. resVos.add(resVo2);
  2429. //本年度新提报重大规划采购任务数量
  2430. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2431. StatisticalChartsResVo resVo3 = pmDemandMapper.majorProjectByStatusThisYearSub(pmDemandReqVo);
  2432. resVo3.setColumnName("本年度新提报");
  2433. resVo3.setColumnNamePlus("重大规划采购任务数量");
  2434. resVos.add(resVo3);
  2435. //本月度完成重大规划采购任务数量
  2436. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2437. StatisticalChartsResVo resVo4 = pmDemandMapper.majorProjectByStatusThisMonthFi(pmDemandReqVo);
  2438. resVo4.setColumnName("本月度完成");
  2439. resVo4.setColumnNamePlus("重大规划采购任务数量");
  2440. resVos.add(resVo4);
  2441. //本季度完成重大规划采购任务数量
  2442. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2443. StatisticalChartsResVo resVo5 = pmDemandMapper.majorProjectByStatusThisQuaFi(pmDemandReqVo);
  2444. resVo5.setColumnName("本季度完成");
  2445. resVo5.setColumnNamePlus("重大规划采购任务数量");
  2446. resVos.add(resVo5);
  2447. //本年度完成重大规划采购任务数量
  2448. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2449. StatisticalChartsResVo resVo6 = pmDemandMapper.majorProjectByStatusThisYearFi(pmDemandReqVo);
  2450. resVo6.setColumnName("本年度完成");
  2451. resVo6.setColumnNamePlus("重大规划采购任务数量");
  2452. resVos.add(resVo6);
  2453. //上年度结转和本年度新提报重大规划采购任务累计项目数量
  2454. List<String> yearLastZ = new ArrayList<>();
  2455. yearLastZ.add(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  2456. yearLastZ.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
  2457. yearLastZ.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  2458. yearLastZ.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  2459. yearLastZ.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  2460. yearLastZ.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  2461. yearLastZ.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  2462. yearLastZ.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  2463. yearLastZ.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  2464. yearLastZ.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  2465. yearLastZ.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  2466. yearLastZ.add(PmProjectStatus.POST_BID_QUERY.getCode());
  2467. yearLastZ.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
  2468. pmDemandReqVo.setProjectStatusList(yearLastZ);
  2469. StatisticalChartsResVo resVo7 = pmDemandMapper.majorProjectByStatusLastYear(pmDemandReqVo);
  2470. if (ObjectUtils.isEmpty(resVo7)) {
  2471. resVo7 = new StatisticalChartsResVo();
  2472. resVo7.setNum(0);
  2473. resVo7.setEvaluationTotal(BigDecimal.ZERO);
  2474. resVo7.setEvaluationContractTotal(BigDecimal.ZERO);
  2475. }
  2476. resVo7.setNum(resVo7.getNum() + resVo3.getNum());
  2477. resVo7.setEvaluationTotal(resVo7.getEvaluationTotal().add(resVo3.getEvaluationTotal()));
  2478. resVo7.setColumnName("上年度结转和本年度新提报");
  2479. resVo7.setColumnNamePlus("重大规划采购任务累计数量");
  2480. resVos.add(resVo7);
  2481. //今年以来累计完成数量
  2482. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2483. StatisticalChartsResVo resVo8 = pmDemandMapper.majorProjectByStatusToThisYear(pmDemandReqVo);
  2484. resVo8.setColumnName("今年以来累计");
  2485. resVo8.setColumnNamePlus("累计完成数量");
  2486. resVos.add(resVo8);
  2487. //正常推进周期内的重大规划采购任务数量
  2488. StatisticalChartsResVo resVo9 = pmDemandMapper.majorProjectByStatusWei(pmDemandReqVo);
  2489. resVo9.setColumnName("正常推进周期内");
  2490. resVo9.setColumnNamePlus("重大规划采购任务数量");
  2491. resVos.add(resVo9);
  2492. //执行滞后的重大规划采购任务数量
  2493. StatisticalChartsResVo resVo10 = pmDemandMapper.majorProjectByStatusChao(pmDemandReqVo);
  2494. resVo10.setColumnName("执行滞后");
  2495. resVo10.setColumnNamePlus("重大规划采购任务数量");
  2496. resVos.add(resVo10);
  2497. return AjaxResult.success(resVos);
  2498. }
  2499. @Override
  2500. public AjaxResult countMajorProjectCGB(PmDemandReqVo pmDemandReqVo) {
  2501. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2502. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2503. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2504. } else {
  2505. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2506. }
  2507. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2508. //本月度新受领重大规划采购任务数量
  2509. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2510. StatisticalChartsResVo resVo = pmDemandMapper.majorProjectByStatusThisMonthNew(pmDemandReqVo);
  2511. resVo.setColumnName("本月度新受领");
  2512. resVo.setColumnNamePlus("重大规划采购任务数量");
  2513. resVos.add(resVo);
  2514. //本季度新受领重大规划采购任务数量
  2515. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2516. StatisticalChartsResVo resVo2 = pmDemandMapper.majorProjectByStatusThisQuaNew(pmDemandReqVo);
  2517. resVo2.setColumnName("本季度新受领");
  2518. resVo2.setColumnNamePlus("重大规划采购任务数量");
  2519. resVos.add(resVo2);
  2520. //本年度新受领重大规划采购任务数量
  2521. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.TASK_WAIT_RELEASE.getCode()));
  2522. StatisticalChartsResVo resVo3 = pmDemandMapper.majorProjectByStatusThisYearNew(pmDemandReqVo);
  2523. resVo3.setColumnName("本年度新受领");
  2524. resVo3.setColumnNamePlus("重大规划采购任务数量");
  2525. resVos.add(resVo3);
  2526. //上年度结转重大规划采购任务累计项目数量
  2527. List<String> yearLastZ = new ArrayList<>();
  2528. yearLastZ.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  2529. yearLastZ.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  2530. yearLastZ.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  2531. yearLastZ.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  2532. yearLastZ.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  2533. yearLastZ.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  2534. yearLastZ.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  2535. yearLastZ.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  2536. yearLastZ.add(PmProjectStatus.POST_BID_QUERY.getCode());
  2537. yearLastZ.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
  2538. pmDemandReqVo.setProjectStatusList(yearLastZ);
  2539. StatisticalChartsResVo resVo7 = pmDemandMapper.majorProjectByStatusLastYear(pmDemandReqVo);
  2540. if (ObjectUtils.isEmpty(resVo7)) {
  2541. resVo7 = new StatisticalChartsResVo();
  2542. resVo7.setNum(0);
  2543. resVo7.setEvaluationTotal(BigDecimal.ZERO);
  2544. resVo7.setEvaluationContractTotal(BigDecimal.ZERO);
  2545. }
  2546. resVo7.setColumnName("上年度结转和本年度新提报");
  2547. resVo7.setColumnNamePlus("累计项目数量");
  2548. //上年度结转和本月度新受领重大规划采购任务累计项目数量预算金额
  2549. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2550. StatisticalChartsResVo resVo4 = pmDemandMapper.majorProjectByStatusThisMonthFiCGB(pmDemandReqVo);
  2551. if (ObjectUtils.isEmpty(resVo4)) {
  2552. resVo4 = new StatisticalChartsResVo();
  2553. resVo4.setNum(0);
  2554. resVo4.setEvaluationTotal(BigDecimal.ZERO);
  2555. resVo4.setEvaluationContractTotal(BigDecimal.ZERO);
  2556. }
  2557. resVo4.setNum(resVo4.getNum() + resVo7.getNum());
  2558. resVo4.setEvaluationTotal(resVo4.getEvaluationTotal().add(resVo7.getEvaluationTotal()));
  2559. resVo4.setColumnName("上年度结转和本月度新受领");
  2560. resVo4.setColumnNamePlus("累计项目数量");
  2561. resVos.add(resVo4);
  2562. //上年度结转和本季度新受领重大规划采购任务累计项目数量预算金额
  2563. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2564. StatisticalChartsResVo resVo5 = pmDemandMapper.majorProjectByStatusThisQuaFiCGB(pmDemandReqVo);
  2565. if (ObjectUtils.isEmpty(resVo5)) {
  2566. resVo5 = new StatisticalChartsResVo();
  2567. resVo5.setNum(0);
  2568. resVo5.setEvaluationTotal(BigDecimal.ZERO);
  2569. resVo5.setEvaluationContractTotal(BigDecimal.ZERO);
  2570. }
  2571. resVo5.setNum(resVo5.getNum() + resVo7.getNum());
  2572. resVo5.setEvaluationTotal(resVo5.getEvaluationTotal().add(resVo7.getEvaluationTotal()));
  2573. resVo5.setColumnName("上年度结转和本季度新受领");
  2574. resVo5.setColumnNamePlus("累计项目数量");
  2575. resVos.add(resVo5);
  2576. //上年度结转和本年度新受领重大规划采购任务累计项目数量预算金额
  2577. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
  2578. StatisticalChartsResVo resVo6 = pmDemandMapper.majorProjectByStatusThisYearFiCGB(pmDemandReqVo);
  2579. if (ObjectUtils.isEmpty(resVo6)) {
  2580. resVo6 = new StatisticalChartsResVo();
  2581. resVo6.setNum(0);
  2582. resVo6.setEvaluationTotal(BigDecimal.ZERO);
  2583. resVo6.setEvaluationContractTotal(BigDecimal.ZERO);
  2584. }
  2585. resVo6.setNum(resVo6.getNum() + resVo7.getNum());
  2586. resVo6.setEvaluationTotal(resVo6.getEvaluationTotal().add(resVo7.getEvaluationTotal()));
  2587. resVo6.setColumnName("上年度结转和本年度新受领");
  2588. resVo6.setColumnNamePlus("累计项目数量");
  2589. resVos.add(resVo6);
  2590. //本月度完成重大规划采购任务数量
  2591. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2592. StatisticalChartsResVo resVoA = pmDemandMapper.majorProjectByStatusThisMonthFi(pmDemandReqVo);
  2593. resVoA.setColumnName("本月度完成");
  2594. resVoA.setColumnNamePlus("重大规划采购任务数量");
  2595. resVos.add(resVoA);
  2596. //本季度完成重大规划采购任务数量
  2597. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2598. StatisticalChartsResVo resVoB = pmDemandMapper.majorProjectByStatusThisQuaFi(pmDemandReqVo);
  2599. resVoB.setColumnName("本季度完成");
  2600. resVoB.setColumnNamePlus("重大规划采购任务数量");
  2601. resVos.add(resVoB);
  2602. //本年度完成重大规划采购任务数量
  2603. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2604. StatisticalChartsResVo resVoC = pmDemandMapper.majorProjectByStatusThisYearFi(pmDemandReqVo);
  2605. resVoC.setColumnName("本年度完成");
  2606. resVoC.setColumnNamePlus("重大规划采购任务数量");
  2607. resVos.add(resVoC);
  2608. //今年以来累计完成数量
  2609. pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
  2610. StatisticalChartsResVo resVo8 = pmDemandMapper.majorProjectByStatusToThisYear(pmDemandReqVo);
  2611. resVo8.setColumnName("今年以来累计");
  2612. resVo8.setColumnNamePlus("累计完成数量");
  2613. resVos.add(resVo8);
  2614. //正常推进周期内的重大规划采购任务数量
  2615. StatisticalChartsResVo resVo9 = pmDemandMapper.majorProjectByStatusWei(pmDemandReqVo);
  2616. resVo9.setColumnName("正常推进周期内");
  2617. resVo9.setColumnNamePlus("重大规划采购任务数量");
  2618. resVos.add(resVo9);
  2619. //执行滞后的重大规划采购任务数量
  2620. StatisticalChartsResVo resVo10 = pmDemandMapper.majorProjectByStatusChao(pmDemandReqVo);
  2621. resVo10.setColumnName("执行滞后");
  2622. resVo10.setColumnNamePlus("重大规划采购任务数量");
  2623. resVos.add(resVo10);
  2624. return AjaxResult.success(resVos);
  2625. }
  2626. /**
  2627. * 通过计划ID查询项目数据
  2628. *
  2629. * @param planId
  2630. * @return
  2631. */
  2632. @Override
  2633. public PmDemand selectByPlanId(Long planId) {
  2634. return pmDemandMapper.selectByPlanId(planId);
  2635. }
  2636. /**
  2637. * 项目执行进度统计
  2638. * 1、正常推进项目数量:指未完成并且没有逾期的项目
  2639. * 预算金额:指未完成并且没有逾期的项目累加的预算金额
  2640. * 2、未完成采购任务:“合同待填制”状态之前的项目
  2641. * 预算金额:“合同待填制”状态之前的项目累加的预算金额
  2642. *
  2643. * @param pmDemandReqVo
  2644. * @return
  2645. */
  2646. @Override
  2647. public List<StatisticalChartsResVo> purchaseProjectExecute(PmDemandReqVo pmDemandReqVo) {
  2648. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  2649. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2650. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2651. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2652. } else {
  2653. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2654. }
  2655. //今年以来累计完成采购任务数量 预算金额(万元) 合同金额(万元)
  2656. StatisticalChartsResVo tThisYear = pmDemandMapper.selectFInishAll(pmDemandReqVo);
  2657. tThisYear.setColumnName("累计完成采购任务数量");
  2658. resVos.add(tThisYear);
  2659. // 正常推进项目数量、预算金额
  2660. StatisticalChartsResVo mapNormalPropulsion = pmDemandMapper.purchaseProjectExecuteNormalPropulsion(pmDemandReqVo);
  2661. mapNormalPropulsion.setColumnName("正常推进项目数量");
  2662. resVos.add(mapNormalPropulsion);
  2663. // 未完成采购任务,预算金额
  2664. StatisticalChartsResVo mapIncomplete = pmDemandMapper.purchaseProjectExecuteIncomplete(pmDemandReqVo);
  2665. mapIncomplete.setColumnName("未完成采购任务");
  2666. resVos.add(mapIncomplete);
  2667. return resVos;
  2668. }
  2669. /**
  2670. * 已完成项目数量统计
  2671. *
  2672. * @param pmDemandReqVo
  2673. * @return
  2674. */
  2675. @Override
  2676. public List<Map<String, Integer>> purchaseProjectCompleteNumber(PmDemandReqVo pmDemandReqVo) {
  2677. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2678. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2679. List<Map<String, Integer>> mapReturn = new ArrayList<>();
  2680. // 统计时间类型 1:年度,2:季度,3:月份
  2681. if ("1".equals(pmDemandReqVo.getTimeType())) {
  2682. // 查询数据库中最小的年份
  2683. int minYear = pmDemandMapper.selectMinYear();
  2684. // 获取当前年份
  2685. Calendar calendar = Calendar.getInstance();
  2686. int year = calendar.get(Calendar.YEAR);
  2687. // 获取统计数据
  2688. List<Map<String, Integer>> listMap = pmDemandMapper.selectpurchaseProjectCompleteNumberYear(pmDemandReqVo);
  2689. mapReturn.addAll(listMap);
  2690. for (int i = minYear; i <= year; i++) {
  2691. boolean isYear = false;
  2692. for (Map<String, Integer> map : listMap) {
  2693. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2694. isYear = true;
  2695. }
  2696. }
  2697. if (!isYear) {
  2698. Map<String, Integer> map1 = new HashMap<>();
  2699. map1.put("yy", i);
  2700. map1.put("evaluation", 0);
  2701. map1.put("contractAmount", 0);
  2702. map1.put("countNum", 0);
  2703. mapReturn.add(map1);
  2704. }
  2705. }
  2706. } else if ("2".equals(pmDemandReqVo.getTimeType())) {
  2707. // 当前年份季度统计
  2708. // 获取统计数据
  2709. List<Map<String, Integer>> listMap = pmDemandMapper.selectpurchaseProjectCompleteNumberQuarter(pmDemandReqVo);
  2710. mapReturn.addAll(listMap);
  2711. for (int i = 1; i <= 4; i++) {
  2712. boolean isYear = false;
  2713. for (Map<String, Integer> map : listMap) {
  2714. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2715. isYear = true;
  2716. }
  2717. }
  2718. if (!isYear) {
  2719. Map<String, Integer> map1 = new HashMap<>();
  2720. map1.put("yy", i);
  2721. map1.put("evaluation", 0);
  2722. map1.put("contractAmount", 0);
  2723. map1.put("countNum", 0);
  2724. mapReturn.add(map1);
  2725. }
  2726. }
  2727. } else if ("3".equals(pmDemandReqVo.getTimeType())) {
  2728. // 当前年份月份统计
  2729. // 获取统计数据
  2730. List<Map<String, Integer>> listMap = pmDemandMapper.selectpurchaseProjectCompleteNumberMonth(pmDemandReqVo);
  2731. mapReturn.addAll(listMap);
  2732. for (int i = 1; i <= 12; i++) {
  2733. boolean isYear = false;
  2734. for (Map<String, Integer> map : listMap) {
  2735. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2736. isYear = true;
  2737. }
  2738. }
  2739. if (!isYear) {
  2740. Map<String, Integer> map1 = new HashMap<>();
  2741. map1.put("yy", i);
  2742. map1.put("evaluation", 0);
  2743. map1.put("contractAmount", 0);
  2744. map1.put("countNum", 0);
  2745. mapReturn.add(map1);
  2746. }
  2747. }
  2748. }
  2749. return mapReturn;
  2750. }
  2751. /**
  2752. * 已完成采购任务数量统计
  2753. *
  2754. * @param pmDemandReqVo
  2755. * @return
  2756. */
  2757. @Override
  2758. public List<Map<String, Integer>> purchaseTaskFinish(PmDemandReqVo pmDemandReqVo) {
  2759. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2760. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2761. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2762. } else {
  2763. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2764. }
  2765. List<Map<String, Integer>> mapReturn = new ArrayList<>();
  2766. // 统计时间类型 1:年度,2:季度,3:月份
  2767. if ("1".equals(pmDemandReqVo.getTimeType())) {
  2768. // 查询数据库中最小的年份
  2769. int minYear = pmDemandMapper.selectMinYear();
  2770. // 获取当前年份
  2771. Calendar calendar = Calendar.getInstance();
  2772. int year = calendar.get(Calendar.YEAR);
  2773. // 获取统计数据
  2774. List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishYear(pmDemandReqVo);
  2775. //mapReturn.addAll(listMap);
  2776. for (int i = minYear; i <= year; i++) {
  2777. boolean isYear = false;
  2778. for (Map<String, Integer> map : listMap) {
  2779. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2780. isYear = true;
  2781. map.put("yy", i);
  2782. mapReturn.add(map);
  2783. }
  2784. }
  2785. if (!isYear) {
  2786. Map<String, Integer> map1 = new HashMap<>();
  2787. map1.put("yy", i);
  2788. map1.put("evaluation", 0);
  2789. map1.put("contractAmount", 0);
  2790. map1.put("countNum", 0);
  2791. mapReturn.add(map1);
  2792. }
  2793. }
  2794. } else if ("2".equals(pmDemandReqVo.getTimeType())) {
  2795. // 当前年份季度统计
  2796. // 获取统计数据
  2797. List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishQuarter(pmDemandReqVo);
  2798. //mapReturn.addAll(listMap);
  2799. for (int i = 1; i <= 4; i++) {
  2800. boolean isYear = false;
  2801. for (Map<String, Integer> map : listMap) {
  2802. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2803. isYear = true;
  2804. map.put("yy", i);
  2805. mapReturn.add(map);
  2806. }
  2807. }
  2808. if (!isYear) {
  2809. Map<String, Integer> map1 = new HashMap<>();
  2810. map1.put("yy", i);
  2811. map1.put("evaluation", 0);
  2812. map1.put("contractAmount", 0);
  2813. map1.put("countNum", 0);
  2814. mapReturn.add(map1);
  2815. }
  2816. }
  2817. } else if ("3".equals(pmDemandReqVo.getTimeType())) {
  2818. // 当前年份月份统计
  2819. // 获取统计数据
  2820. List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishMonth(pmDemandReqVo);
  2821. //mapReturn.addAll(listMap);
  2822. for (int i = 1; i <= 12; i++) {
  2823. boolean isYear = false;
  2824. for (Map<String, Integer> map : listMap) {
  2825. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2826. isYear = true;
  2827. map.put("yy", i);
  2828. map.put("countNum", 0);
  2829. mapReturn.add(map);
  2830. }
  2831. }
  2832. if (!isYear) {
  2833. Map<String, Integer> map1 = new HashMap<>();
  2834. map1.put("yy", i);
  2835. map1.put("evaluation", 0);
  2836. map1.put("contractAmount", 0);
  2837. map1.put("countNum", 0);
  2838. mapReturn.add(map1);
  2839. }
  2840. }
  2841. }
  2842. return mapReturn;
  2843. }
  2844. /**
  2845. * 项目数量分析---------年度的同比和环比不展示-----------
  2846. *
  2847. * @param pmDemandReqVo
  2848. * @return
  2849. */
  2850. @Override
  2851. public List<Map<String, String>> purchaseProjectNumberAnalysis(PmDemandReqVo pmDemandReqVo) {
  2852. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  2853. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  2854. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  2855. } else {
  2856. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  2857. }
  2858. List<Map<String, String>> mapReturn = new ArrayList<>();
  2859. // 统计时间类型 1:年度,2:季度,3:月份
  2860. if ("1".equals(pmDemandReqVo.getTimeType())) {
  2861. // 查询数据库中最小的年份
  2862. int minYear = pmDemandMapper.selectMinYear();
  2863. // 获取当前年份
  2864. Calendar calendar = Calendar.getInstance();
  2865. int year = calendar.get(Calendar.YEAR);
  2866. // 获取统计数据
  2867. // 获取项目统计
  2868. List<Map<String, String>> listMap = pmDemandMapper.purchaseProjectNumberAnalysisYear(pmDemandReqVo);
  2869. mapReturn.addAll(listMap);
  2870. for (int i = minYear; i <= year; i++) {
  2871. boolean isYear = false;
  2872. for (Map<String, String> map : listMap) {
  2873. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2874. isYear = true;
  2875. }
  2876. }
  2877. if (!isYear) {
  2878. Map<String, String> map1 = new HashMap<>();
  2879. map1.put("yy", i + "");
  2880. map1.put("countNum", 0 + "");
  2881. map1.put("evaluationSum", 0 + "");
  2882. mapReturn.add(map1);
  2883. }
  2884. }
  2885. } else if ("2".equals(pmDemandReqVo.getTimeType())) {
  2886. // 当前年份季度统计
  2887. // 获取统计数据
  2888. List<Map<String, String>> listMap = pmDemandMapper.purchaseProjectNumberAnalysisQuarter(pmDemandReqVo);
  2889. List<Map<String, String>> mapList = new ArrayList<>();
  2890. mapList.addAll(listMap);
  2891. for (int i = 1; i <= 4; i++) {
  2892. boolean isYear = false;
  2893. for (Map<String, String> map : listMap) {
  2894. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2895. isYear = true;
  2896. }
  2897. }
  2898. if (!isYear) {
  2899. Map<String, String> map1 = new HashMap<>();
  2900. map1.put("yy", i + "");
  2901. map1.put("countNum", 0 + "");
  2902. map1.put("evaluationSum", 0 + "");
  2903. mapList.add(map1);
  2904. }
  2905. }
  2906. Map<String, String> map1 = new HashMap<>();
  2907. Map<String, String> map2 = new HashMap<>();
  2908. Map<String, String> map3 = new HashMap<>();
  2909. Map<String, String> map4 = new HashMap<>();
  2910. for (Map<String, String> map : mapList) {
  2911. String yy = String.valueOf(map.get("yy"));
  2912. if ("1".equals(yy)) {
  2913. map1.putAll(map);
  2914. } else if ("2".equals(yy)) {
  2915. map2.putAll(map);
  2916. } else if ("3".equals(yy)) {
  2917. map3.putAll(map);
  2918. } else if ("4".equals(yy)) {
  2919. map4.putAll(map);
  2920. }
  2921. }
  2922. String countNum1 = String.valueOf(map1.get("countNum"));
  2923. String countNum2 = String.valueOf(map2.get("countNum"));
  2924. String countNum3 = String.valueOf(map3.get("countNum"));
  2925. String countNum4 = String.valueOf(map4.get("countNum"));
  2926. String evaluationSum1 = String.valueOf(map1.get("evaluationSum"));
  2927. String evaluationSum2 = String.valueOf(map2.get("evaluationSum"));
  2928. String evaluationSum3 = String.valueOf(map3.get("evaluationSum"));
  2929. String evaluationSum4 = String.valueOf(map4.get("evaluationSum"));
  2930. // 查询上一年四季度数据
  2931. List<Map<String, String>> listMapOldYear = pmDemandMapper.purchaseProjectNumberAnalysisOldYearQuarter(pmDemandReqVo);
  2932. List<Map<String, String>> mapListOld = new ArrayList<>();
  2933. mapListOld.addAll(listMapOldYear);
  2934. for (int i = 1; i <= 4; i++) {
  2935. boolean isYear = false;
  2936. for (Map<String, String> map : listMapOldYear) {
  2937. if (i == Integer.parseInt(String.valueOf(map.get("yy")))) {
  2938. isYear = true;
  2939. }
  2940. }
  2941. if (!isYear) {
  2942. Map<String, String> map11 = new HashMap<>();
  2943. map11.put("yy", i + "");
  2944. map11.put("countNum", 0 + "");
  2945. map11.put("evaluationSum", 0 + "");
  2946. mapListOld.add(map11);
  2947. }
  2948. }
  2949. Map<String, String> mapOld1 = new HashMap<>();
  2950. Map<String, String> mapOld2 = new HashMap<>();
  2951. Map<String, String> mapOld3 = new HashMap<>();
  2952. Map<String, String> mapOld4 = new HashMap<>();
  2953. for (Map<String, String> mapOld : mapListOld) {
  2954. String yy = String.valueOf(mapOld.get("yy"));
  2955. if ("1".equals(yy)) {
  2956. mapOld1.putAll(mapOld);
  2957. } else if ("2".equals(yy)) {
  2958. mapOld2.putAll(mapOld);
  2959. } else if ("3".equals(yy)) {
  2960. mapOld3.putAll(mapOld);
  2961. } else if ("4".equals(yy)) {
  2962. mapOld4.putAll(mapOld);
  2963. }
  2964. }
  2965. String countNumOld1 = String.valueOf(mapOld1.get("countNum"));
  2966. String countNumOld2 = String.valueOf(mapOld2.get("countNum"));
  2967. String countNumOld3 = String.valueOf(mapOld3.get("countNum"));
  2968. String countNumOld4 = String.valueOf(mapOld4.get("countNum"));
  2969. String evaluationSumOld1 = String.valueOf(mapOld1.get("evaluationSum"));
  2970. String evaluationSumOld2 = String.valueOf(mapOld2.get("evaluationSum"));
  2971. String evaluationSumOld3 = String.valueOf(mapOld3.get("evaluationSum"));
  2972. String evaluationSumOld4 = String.valueOf(mapOld4.get("evaluationSum"));
  2973. BigDecimal countNum11 = new BigDecimal(countNum1);
  2974. BigDecimal countNum22 = new BigDecimal(countNum2);
  2975. BigDecimal countNum33 = new BigDecimal(countNum3);
  2976. BigDecimal countNum44 = new BigDecimal(countNum4);
  2977. BigDecimal countNumOld11 = new BigDecimal(countNumOld1);
  2978. BigDecimal countNumOld22 = new BigDecimal(countNumOld2);
  2979. BigDecimal countNumOld33 = new BigDecimal(countNumOld3);
  2980. BigDecimal countNumOld44 = new BigDecimal(countNumOld4);
  2981. BigDecimal evaluationSum11 = new BigDecimal(evaluationSum1);
  2982. BigDecimal evaluationSum22 = new BigDecimal(evaluationSum2);
  2983. BigDecimal evaluationSum33 = new BigDecimal(evaluationSum3);
  2984. BigDecimal evaluationSum44 = new BigDecimal(evaluationSum4);
  2985. BigDecimal evaluationSumOld11 = new BigDecimal(evaluationSumOld1);
  2986. BigDecimal evaluationSumOld22 = new BigDecimal(evaluationSumOld2);
  2987. BigDecimal evaluationSumOld33 = new BigDecimal(evaluationSumOld3);
  2988. BigDecimal evaluationSumOld44 = new BigDecimal(evaluationSumOld4);
  2989. // 项目数量环比 对比
  2990. BigDecimal monthonmonthNum1 = new BigDecimal(0.00);
  2991. BigDecimal monthonmonthNum2 = new BigDecimal(0.00);
  2992. BigDecimal monthonmonthNum3 = new BigDecimal(0.00);
  2993. BigDecimal monthonmonthNum4 = new BigDecimal(0.00);
  2994. if (!"0".equals(countNumOld4)) {
  2995. monthonmonthNum1 = (countNum11.subtract(countNumOld44)).divide(countNumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  2996. }
  2997. if (!"0".equals(countNum1)) {
  2998. monthonmonthNum2 = (countNum22.subtract(countNum11)).divide(countNum11, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  2999. }
  3000. if (!"0".equals(countNum2)) {
  3001. monthonmonthNum3 = (countNum33.subtract(countNum22)).divide(countNum22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3002. }
  3003. if (!"0".equals(countNum3)) {
  3004. monthonmonthNum4 = (countNum44.subtract(countNum33)).divide(countNum33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3005. }
  3006. map1.put("monthonmonthNum", monthonmonthNum1.toString());
  3007. map2.put("monthonmonthNum", monthonmonthNum2.toString());
  3008. map3.put("monthonmonthNum", monthonmonthNum3.toString());
  3009. map4.put("monthonmonthNum", monthonmonthNum4.toString());
  3010. // 项目数量同比 对比
  3011. BigDecimal yearonyearNum1 = new BigDecimal(0.00);
  3012. BigDecimal yearonyearNum2 = new BigDecimal(0.00);
  3013. BigDecimal yearonyearNum3 = new BigDecimal(0.00);
  3014. BigDecimal yearonyearNum4 = new BigDecimal(0.00);
  3015. if (!"0".equals(countNumOld1)) {
  3016. yearonyearNum1 = (countNum11.subtract(countNumOld11)).divide(countNumOld11, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3017. }
  3018. if (!"0".equals(countNumOld2)) {
  3019. yearonyearNum2 = (countNum22.subtract(countNumOld22)).divide(countNumOld22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3020. }
  3021. if (!"0".equals(countNumOld3)) {
  3022. yearonyearNum3 = (countNum33.subtract(countNumOld33)).divide(countNumOld33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3023. }
  3024. if (!"0".equals(countNumOld4)) {
  3025. yearonyearNum4 = (countNum44.subtract(countNumOld44)).divide(countNumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3026. }
  3027. map1.put("yearonyearNum", yearonyearNum1.toString());
  3028. map2.put("yearonyearNum", yearonyearNum2.toString());
  3029. map3.put("yearonyearNum", yearonyearNum3.toString());
  3030. map4.put("yearonyearNum", yearonyearNum4.toString());
  3031. // 预算金额环比 对比
  3032. BigDecimal monthonmonthAmount1 = new BigDecimal(0.00);
  3033. BigDecimal monthonmonthAmount2 = new BigDecimal(0.00);
  3034. BigDecimal monthonmonthAmount3 = new BigDecimal(0.00);
  3035. BigDecimal monthonmonthAmount4 = new BigDecimal(0.00);
  3036. if (!"0".equals(evaluationSumOld4)) {
  3037. monthonmonthAmount1 = (evaluationSum11.subtract(evaluationSumOld44)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3038. }
  3039. if (!"0".equals(evaluationSum1)) {
  3040. monthonmonthAmount2 = (evaluationSum22.subtract(evaluationSum11)).divide(evaluationSum11, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3041. }
  3042. if (!"0".equals(evaluationSum2)) {
  3043. monthonmonthAmount3 = (evaluationSum33.subtract(evaluationSum22)).divide(evaluationSum22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3044. }
  3045. if (!"0".equals(evaluationSum3)) {
  3046. monthonmonthAmount4 = (evaluationSum44.subtract(evaluationSum33)).divide(evaluationSum33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3047. }
  3048. map1.put("monthonmonthAmount", monthonmonthAmount1.toString());
  3049. map2.put("monthonmonthAmount", monthonmonthAmount2.toString());
  3050. map3.put("monthonmonthAmount", monthonmonthAmount3.toString());
  3051. map4.put("monthonmonthAmount", monthonmonthAmount4.toString());
  3052. // 预算金额同比比 对比
  3053. BigDecimal yearonyearAmount1 = new BigDecimal(0.00);
  3054. BigDecimal yearonyearAmount2 = new BigDecimal(0.00);
  3055. BigDecimal yearonyearAmount3 = new BigDecimal(0.00);
  3056. BigDecimal yearonyearAmount4 = new BigDecimal(0.00);
  3057. if (!"0".equals(evaluationSumOld1)) {
  3058. yearonyearAmount1 = (evaluationSum11.subtract(evaluationSumOld11)).divide(evaluationSumOld11, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3059. }
  3060. if (!"0".equals(evaluationSumOld2)) {
  3061. yearonyearAmount2 = (evaluationSum22.subtract(evaluationSumOld22)).divide(evaluationSumOld22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3062. }
  3063. if (!"0".equals(evaluationSumOld3)) {
  3064. yearonyearAmount3 = (evaluationSum33.subtract(evaluationSumOld33)).divide(evaluationSumOld33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3065. }
  3066. if (!"0".equals(evaluationSumOld4)) {
  3067. yearonyearAmount4 = (evaluationSum44.subtract(evaluationSumOld44)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3068. }
  3069. map1.put("yearonyearAmount", yearonyearAmount1.toString());
  3070. map2.put("yearonyearAmount", yearonyearAmount2.toString());
  3071. map3.put("yearonyearAmount", yearonyearAmount3.toString());
  3072. map4.put("yearonyearAmount", yearonyearAmount4.toString());
  3073. // 存入集合
  3074. mapReturn.add(map1);
  3075. mapReturn.add(map2);
  3076. mapReturn.add(map3);
  3077. mapReturn.add(map4);
  3078. } else if ("3".equals(pmDemandReqVo.getTimeType())) {
  3079. // 当前年份月份统计
  3080. // 获取统计数据
  3081. List<Map<String, String>> listMap = pmDemandMapper.purchaseProjectNumberAnalysisMonth(pmDemandReqVo);
  3082. List<Map<String, String>> mapList = new ArrayList<>();
  3083. mapList.addAll(listMap);
  3084. for (int i = 1; i <= 12; i++) {
  3085. boolean isYear = false;
  3086. for (Map<String, String> map : listMap) {
  3087. String yy = String.valueOf(map.get("yy"));
  3088. String yyNew = yy.replaceAll("^0*", "");
  3089. if (i == Integer.valueOf(yyNew)) {
  3090. isYear = true;
  3091. }
  3092. }
  3093. if (!isYear) {
  3094. Map<String, String> map1 = new HashMap<>();
  3095. String yy = String.format("%02d", i);
  3096. map1.put("yy", yy);
  3097. map1.put("countNum", 0 + "");
  3098. map1.put("evaluationSum", 0 + "");
  3099. mapList.add(map1);
  3100. }
  3101. }
  3102. Map<String, String> map1 = new HashMap<>();
  3103. Map<String, String> map2 = new HashMap<>();
  3104. Map<String, String> map3 = new HashMap<>();
  3105. Map<String, String> map4 = new HashMap<>();
  3106. Map<String, String> map5 = new HashMap<>();
  3107. Map<String, String> map6 = new HashMap<>();
  3108. Map<String, String> map7 = new HashMap<>();
  3109. Map<String, String> map8 = new HashMap<>();
  3110. Map<String, String> map9 = new HashMap<>();
  3111. Map<String, String> map10 = new HashMap<>();
  3112. Map<String, String> map11 = new HashMap<>();
  3113. Map<String, String> map12 = new HashMap<>();
  3114. for (Map<String, String> map : mapList) {
  3115. String yy = String.valueOf(map.get("yy"));
  3116. if ("01".equals(yy)) {
  3117. map1.putAll(map);
  3118. } else if ("02".equals(yy)) {
  3119. map2.putAll(map);
  3120. } else if ("03".equals(yy)) {
  3121. map3.putAll(map);
  3122. } else if ("04".equals(yy)) {
  3123. map4.putAll(map);
  3124. } else if ("05".equals(yy)) {
  3125. map5.putAll(map);
  3126. } else if ("06".equals(yy)) {
  3127. map6.putAll(map);
  3128. } else if ("07".equals(yy)) {
  3129. map7.putAll(map);
  3130. } else if ("08".equals(yy)) {
  3131. map8.putAll(map);
  3132. } else if ("09".equals(yy)) {
  3133. map9.putAll(map);
  3134. } else if ("10".equals(yy)) {
  3135. map10.putAll(map);
  3136. } else if ("11".equals(yy)) {
  3137. map11.putAll(map);
  3138. } else if ("12".equals(yy)) {
  3139. map12.putAll(map);
  3140. }
  3141. }
  3142. String countNum1 = String.valueOf(map1.get("countNum"));
  3143. String countNum2 = String.valueOf(map2.get("countNum"));
  3144. String countNum3 = String.valueOf(map3.get("countNum"));
  3145. String countNum4 = String.valueOf(map4.get("countNum"));
  3146. String countNum5 = String.valueOf(map5.get("countNum"));
  3147. String countNum6 = String.valueOf(map6.get("countNum"));
  3148. String countNum7 = String.valueOf(map7.get("countNum"));
  3149. String countNum8 = String.valueOf(map8.get("countNum"));
  3150. String countNum9 = String.valueOf(map9.get("countNum"));
  3151. String countNum10 = String.valueOf(map10.get("countNum"));
  3152. String countNum11 = String.valueOf(map11.get("countNum"));
  3153. String countNum12 = String.valueOf(map12.get("countNum"));
  3154. String evaluationSum1 = String.valueOf(map1.get("evaluationSum"));
  3155. String evaluationSum2 = String.valueOf(map2.get("evaluationSum"));
  3156. String evaluationSum3 = String.valueOf(map3.get("evaluationSum"));
  3157. String evaluationSum4 = String.valueOf(map4.get("evaluationSum"));
  3158. String evaluationSum5 = String.valueOf(map5.get("evaluationSum"));
  3159. String evaluationSum6 = String.valueOf(map6.get("evaluationSum"));
  3160. String evaluationSum7 = String.valueOf(map7.get("evaluationSum"));
  3161. String evaluationSum8 = String.valueOf(map8.get("evaluationSum"));
  3162. String evaluationSum9 = String.valueOf(map9.get("evaluationSum"));
  3163. String evaluationSum10 = String.valueOf(map10.get("evaluationSum"));
  3164. String evaluationSum11 = String.valueOf(map11.get("evaluationSum"));
  3165. String evaluationSum12 = String.valueOf(map12.get("evaluationSum"));
  3166. // 查询上一年月份数据
  3167. List<Map<String, String>> listMapOldMonth = pmDemandMapper.purchaseProjectNumberAnalysisOldYearMonth(pmDemandReqVo);
  3168. List<Map<String, String>> mapListOld = new ArrayList<>();
  3169. mapListOld.addAll(listMapOldMonth);
  3170. for (int i = 1; i <= 12; i++) {
  3171. boolean isYear = false;
  3172. for (Map<String, String> map : listMapOldMonth) {
  3173. String yy = String.valueOf(map.get("yy"));
  3174. String yyNew = yy.replaceAll("^0*", "");
  3175. if (i == Integer.valueOf(yyNew)) {
  3176. isYear = true;
  3177. }
  3178. }
  3179. if (!isYear) {
  3180. Map<String, String> map111 = new HashMap<>();
  3181. String yy = String.format("%02d", i);
  3182. map111.put("yy", yy);
  3183. map111.put("countNum", 0 + "");
  3184. map111.put("evaluationSum", 0 + "");
  3185. mapListOld.add(map111);
  3186. }
  3187. }
  3188. Map<String, String> mapOld1 = new HashMap<>();
  3189. Map<String, String> mapOld2 = new HashMap<>();
  3190. Map<String, String> mapOld3 = new HashMap<>();
  3191. Map<String, String> mapOld4 = new HashMap<>();
  3192. Map<String, String> mapOld5 = new HashMap<>();
  3193. Map<String, String> mapOld6 = new HashMap<>();
  3194. Map<String, String> mapOld7 = new HashMap<>();
  3195. Map<String, String> mapOld8 = new HashMap<>();
  3196. Map<String, String> mapOld9 = new HashMap<>();
  3197. Map<String, String> mapOld10 = new HashMap<>();
  3198. Map<String, String> mapOld11 = new HashMap<>();
  3199. Map<String, String> mapOld12 = new HashMap<>();
  3200. for (Map<String, String> mapOld : mapListOld) {
  3201. String yy = String.valueOf(mapOld.get("yy"));
  3202. if ("01".equals(yy)) {
  3203. mapOld1.putAll(mapOld);
  3204. } else if ("02".equals(yy)) {
  3205. mapOld2.putAll(mapOld);
  3206. } else if ("03".equals(yy)) {
  3207. mapOld3.putAll(mapOld);
  3208. } else if ("04".equals(yy)) {
  3209. mapOld4.putAll(mapOld);
  3210. } else if ("05".equals(yy)) {
  3211. mapOld5.putAll(mapOld);
  3212. } else if ("06".equals(yy)) {
  3213. mapOld6.putAll(mapOld);
  3214. } else if ("07".equals(yy)) {
  3215. mapOld7.putAll(mapOld);
  3216. } else if ("08".equals(yy)) {
  3217. mapOld8.putAll(mapOld);
  3218. } else if ("09".equals(yy)) {
  3219. mapOld9.putAll(mapOld);
  3220. } else if ("10".equals(yy)) {
  3221. mapOld10.putAll(mapOld);
  3222. } else if ("11".equals(yy)) {
  3223. mapOld11.putAll(mapOld);
  3224. } else if ("12".equals(yy)) {
  3225. mapOld12.putAll(mapOld);
  3226. }
  3227. }
  3228. String countNumOld1 = String.valueOf(mapOld1.get("countNum"));
  3229. String countNumOld2 = String.valueOf(mapOld2.get("countNum"));
  3230. String countNumOld3 = String.valueOf(mapOld3.get("countNum"));
  3231. String countNumOld4 = String.valueOf(mapOld4.get("countNum"));
  3232. String countNumOld5 = String.valueOf(mapOld5.get("countNum"));
  3233. String countNumOld6 = String.valueOf(mapOld6.get("countNum"));
  3234. String countNumOld7 = String.valueOf(mapOld7.get("countNum"));
  3235. String countNumOld8 = String.valueOf(mapOld8.get("countNum"));
  3236. String countNumOld9 = String.valueOf(mapOld9.get("countNum"));
  3237. String countNumOld10 = String.valueOf(mapOld10.get("countNum"));
  3238. String countNumOld11 = String.valueOf(mapOld11.get("countNum"));
  3239. String countNumOld12 = String.valueOf(mapOld12.get("countNum"));
  3240. String evaluationSumOld1 = String.valueOf(mapOld1.get("evaluationSum"));
  3241. String evaluationSumOld2 = String.valueOf(mapOld2.get("evaluationSum"));
  3242. String evaluationSumOld3 = String.valueOf(mapOld3.get("evaluationSum"));
  3243. String evaluationSumOld4 = String.valueOf(mapOld4.get("evaluationSum"));
  3244. String evaluationSumOld5 = String.valueOf(mapOld5.get("evaluationSum"));
  3245. String evaluationSumOld6 = String.valueOf(mapOld6.get("evaluationSum"));
  3246. String evaluationSumOld7 = String.valueOf(mapOld7.get("evaluationSum"));
  3247. String evaluationSumOld8 = String.valueOf(mapOld8.get("evaluationSum"));
  3248. String evaluationSumOld9 = String.valueOf(mapOld9.get("evaluationSum"));
  3249. String evaluationSumOld10 = String.valueOf(mapOld10.get("evaluationSum"));
  3250. String evaluationSumOld11 = String.valueOf(mapOld11.get("evaluationSum"));
  3251. String evaluationSumOld12 = String.valueOf(mapOld12.get("evaluationSum"));
  3252. BigDecimal countNum111 = new BigDecimal(countNum1);
  3253. BigDecimal countNum22 = new BigDecimal(countNum2);
  3254. BigDecimal countNum33 = new BigDecimal(countNum3);
  3255. BigDecimal countNum44 = new BigDecimal(countNum4);
  3256. BigDecimal countNum55 = new BigDecimal(countNum5);
  3257. BigDecimal countNum66 = new BigDecimal(countNum6);
  3258. BigDecimal countNum77 = new BigDecimal(countNum7);
  3259. BigDecimal countNum88 = new BigDecimal(countNum8);
  3260. BigDecimal countNum99 = new BigDecimal(countNum9);
  3261. BigDecimal countNum1010 = new BigDecimal(countNum10);
  3262. BigDecimal countNum1111 = new BigDecimal(countNum11);
  3263. BigDecimal countNum1212 = new BigDecimal(countNum12);
  3264. BigDecimal countNumOld111 = new BigDecimal(countNumOld1);
  3265. BigDecimal countNumOld22 = new BigDecimal(countNumOld2);
  3266. BigDecimal countNumOld33 = new BigDecimal(countNumOld3);
  3267. BigDecimal countNumOld44 = new BigDecimal(countNumOld4);
  3268. BigDecimal countNumOld55 = new BigDecimal(countNumOld5);
  3269. BigDecimal countNumOld66 = new BigDecimal(countNumOld6);
  3270. BigDecimal countNumOld77 = new BigDecimal(countNumOld7);
  3271. BigDecimal countNumOld88 = new BigDecimal(countNumOld8);
  3272. BigDecimal countNumOld99 = new BigDecimal(countNumOld9);
  3273. BigDecimal countNumOld1010 = new BigDecimal(countNumOld10);
  3274. BigDecimal countNumOld1111 = new BigDecimal(countNumOld11);
  3275. BigDecimal countNumOld1212 = new BigDecimal(countNumOld12);
  3276. BigDecimal evaluationSum111 = new BigDecimal(evaluationSum1);
  3277. BigDecimal evaluationSum22 = new BigDecimal(evaluationSum2);
  3278. BigDecimal evaluationSum33 = new BigDecimal(evaluationSum3);
  3279. BigDecimal evaluationSum44 = new BigDecimal(evaluationSum4);
  3280. BigDecimal evaluationSum55 = new BigDecimal(evaluationSum5);
  3281. BigDecimal evaluationSum66 = new BigDecimal(evaluationSum6);
  3282. BigDecimal evaluationSum77 = new BigDecimal(evaluationSum7);
  3283. BigDecimal evaluationSum88 = new BigDecimal(evaluationSum8);
  3284. BigDecimal evaluationSum99 = new BigDecimal(evaluationSum9);
  3285. BigDecimal evaluationSum1010 = new BigDecimal(evaluationSum10);
  3286. BigDecimal evaluationSum1111 = new BigDecimal(evaluationSum11);
  3287. BigDecimal evaluationSum1212 = new BigDecimal(evaluationSum12);
  3288. BigDecimal evaluationSumOld111 = new BigDecimal(evaluationSumOld1);
  3289. BigDecimal evaluationSumOld22 = new BigDecimal(evaluationSumOld2);
  3290. BigDecimal evaluationSumOld33 = new BigDecimal(evaluationSumOld3);
  3291. BigDecimal evaluationSumOld44 = new BigDecimal(evaluationSumOld4);
  3292. BigDecimal evaluationSumOld55 = new BigDecimal(evaluationSumOld5);
  3293. BigDecimal evaluationSumOld66 = new BigDecimal(evaluationSumOld6);
  3294. BigDecimal evaluationSumOld77 = new BigDecimal(evaluationSumOld7);
  3295. BigDecimal evaluationSumOld88 = new BigDecimal(evaluationSumOld8);
  3296. BigDecimal evaluationSumOld99 = new BigDecimal(evaluationSumOld9);
  3297. BigDecimal evaluationSumOld1010 = new BigDecimal(evaluationSumOld10);
  3298. BigDecimal evaluationSumOld1111 = new BigDecimal(evaluationSumOld11);
  3299. BigDecimal evaluationSumOld1212 = new BigDecimal(evaluationSumOld12);
  3300. // 项目数量环比 对比
  3301. BigDecimal monthonmonthNum1 = new BigDecimal(0.00);
  3302. BigDecimal monthonmonthNum2 = new BigDecimal(0.00);
  3303. BigDecimal monthonmonthNum3 = new BigDecimal(0.00);
  3304. BigDecimal monthonmonthNum4 = new BigDecimal(0.00);
  3305. BigDecimal monthonmonthNum5 = new BigDecimal(0.00);
  3306. BigDecimal monthonmonthNum6 = new BigDecimal(0.00);
  3307. BigDecimal monthonmonthNum7 = new BigDecimal(0.00);
  3308. BigDecimal monthonmonthNum8 = new BigDecimal(0.00);
  3309. BigDecimal monthonmonthNum9 = new BigDecimal(0.00);
  3310. BigDecimal monthonmonthNum10 = new BigDecimal(0.00);
  3311. BigDecimal monthonmonthNum11 = new BigDecimal(0.00);
  3312. BigDecimal monthonmonthNum12 = new BigDecimal(0.00);
  3313. if (!"0".equals(countNumOld12)) {
  3314. monthonmonthNum1 = (countNum111.subtract(countNumOld1212)).divide(countNumOld1212, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3315. }
  3316. if (!"0".equals(countNum1)) {
  3317. monthonmonthNum2 = (countNum22.subtract(countNum111)).divide(countNum111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3318. }
  3319. if (!"0".equals(countNum2)) {
  3320. monthonmonthNum3 = (countNum33.subtract(countNum22)).divide(countNum22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3321. }
  3322. if (!"0".equals(countNum3)) {
  3323. monthonmonthNum4 = (countNum44.subtract(countNum33)).divide(countNum33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3324. }
  3325. if (!"0".equals(countNum4)) {
  3326. monthonmonthNum5 = (countNum55.subtract(countNum44)).divide(countNum44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3327. }
  3328. if (!"0".equals(countNum5)) {
  3329. monthonmonthNum6 = (countNum66.subtract(countNum55)).divide(countNum55, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3330. }
  3331. if (!"0".equals(countNum6)) {
  3332. monthonmonthNum7 = (countNum77.subtract(countNum66)).divide(countNum66, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3333. }
  3334. if (!"0".equals(countNum7)) {
  3335. monthonmonthNum8 = (countNum88.subtract(countNum77)).divide(countNum77, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3336. }
  3337. if (!"0".equals(countNum8)) {
  3338. monthonmonthNum9 = (countNum99.subtract(countNum88)).divide(countNum88, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3339. }
  3340. if (!"0".equals(countNum9)) {
  3341. monthonmonthNum10 = (countNum1010.subtract(countNum99)).divide(countNum99, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3342. }
  3343. if (!"0".equals(countNum10)) {
  3344. monthonmonthNum11 = (countNum1111.subtract(countNum1010)).divide(countNum1010, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3345. }
  3346. if (!"0".equals(countNum11)) {
  3347. monthonmonthNum12 = (countNum1212.subtract(countNum1111)).divide(countNum1111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3348. }
  3349. map1.put("monthonmonthNum", monthonmonthNum1.toString());
  3350. map2.put("monthonmonthNum", monthonmonthNum2.toString());
  3351. map3.put("monthonmonthNum", monthonmonthNum3.toString());
  3352. map4.put("monthonmonthNum", monthonmonthNum4.toString());
  3353. map5.put("monthonmonthNum", monthonmonthNum5.toString());
  3354. map6.put("monthonmonthNum", monthonmonthNum6.toString());
  3355. map7.put("monthonmonthNum", monthonmonthNum7.toString());
  3356. map8.put("monthonmonthNum", monthonmonthNum8.toString());
  3357. map9.put("monthonmonthNum", monthonmonthNum9.toString());
  3358. map10.put("monthonmonthNum", monthonmonthNum10.toString());
  3359. map11.put("monthonmonthNum", monthonmonthNum11.toString());
  3360. map12.put("monthonmonthNum", monthonmonthNum12.toString());
  3361. // 项目数量同比 对比
  3362. BigDecimal yearonyearNum1 = new BigDecimal(0.00);
  3363. BigDecimal yearonyearNum2 = new BigDecimal(0.00);
  3364. BigDecimal yearonyearNum3 = new BigDecimal(0.00);
  3365. BigDecimal yearonyearNum4 = new BigDecimal(0.00);
  3366. BigDecimal yearonyearNum5 = new BigDecimal(0.00);
  3367. BigDecimal yearonyearNum6 = new BigDecimal(0.00);
  3368. BigDecimal yearonyearNum7 = new BigDecimal(0.00);
  3369. BigDecimal yearonyearNum8 = new BigDecimal(0.00);
  3370. BigDecimal yearonyearNum9 = new BigDecimal(0.00);
  3371. BigDecimal yearonyearNum10 = new BigDecimal(0.00);
  3372. BigDecimal yearonyearNum11 = new BigDecimal(0.00);
  3373. BigDecimal yearonyearNum12 = new BigDecimal(0.00);
  3374. if (!"0".equals(countNumOld1)) {
  3375. yearonyearNum1 = (countNum111.subtract(countNumOld111)).divide(countNumOld111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3376. }
  3377. if (!"0".equals(countNumOld2)) {
  3378. yearonyearNum2 = (countNum22.subtract(countNumOld22)).divide(countNumOld22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3379. }
  3380. if (!"0".equals(countNumOld3)) {
  3381. yearonyearNum3 = (countNum33.subtract(countNumOld33)).divide(countNumOld33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3382. }
  3383. if (!"0".equals(countNumOld4)) {
  3384. yearonyearNum4 = (countNum44.subtract(countNumOld44)).divide(countNumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3385. }
  3386. if (!"0".equals(countNumOld5)) {
  3387. yearonyearNum5 = (countNum55.subtract(countNumOld55)).divide(countNumOld55, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3388. }
  3389. if (!"0".equals(countNumOld6)) {
  3390. yearonyearNum6 = (countNum66.subtract(countNumOld66)).divide(countNumOld66, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3391. }
  3392. if (!"0".equals(countNumOld7)) {
  3393. yearonyearNum7 = (countNum77.subtract(countNumOld77)).divide(countNumOld77, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3394. }
  3395. if (!"0".equals(countNumOld8)) {
  3396. yearonyearNum8 = (countNum88.subtract(countNumOld88)).divide(countNumOld88, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3397. }
  3398. if (!"0".equals(countNumOld9)) {
  3399. yearonyearNum9 = (countNum99.subtract(countNumOld99)).divide(countNumOld99, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3400. }
  3401. if (!"0".equals(countNumOld10)) {
  3402. yearonyearNum10 = (countNum1010.subtract(countNumOld1010)).divide(countNumOld1010, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3403. }
  3404. if (!"0".equals(countNumOld11)) {
  3405. yearonyearNum11 = (countNum1111.subtract(countNumOld1111)).divide(countNumOld1111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3406. }
  3407. if (!"0".equals(countNumOld12)) {
  3408. yearonyearNum12 = (countNum1212.subtract(countNumOld1212)).divide(countNumOld1212, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3409. }
  3410. map1.put("yearonyearNum", yearonyearNum1.toString());
  3411. map2.put("yearonyearNum", yearonyearNum2.toString());
  3412. map3.put("yearonyearNum", yearonyearNum3.toString());
  3413. map4.put("yearonyearNum", yearonyearNum4.toString());
  3414. map5.put("yearonyearNum", yearonyearNum5.toString());
  3415. map6.put("yearonyearNum", yearonyearNum6.toString());
  3416. map7.put("yearonyearNum", yearonyearNum7.toString());
  3417. map8.put("yearonyearNum", yearonyearNum8.toString());
  3418. map9.put("yearonyearNum", yearonyearNum9.toString());
  3419. map10.put("yearonyearNum", yearonyearNum10.toString());
  3420. map11.put("yearonyearNum", yearonyearNum11.toString());
  3421. map12.put("yearonyearNum", yearonyearNum12.toString());
  3422. // 预算金额环比 对比
  3423. BigDecimal monthonmonthAmount1 = new BigDecimal(0.00);
  3424. BigDecimal monthonmonthAmount2 = new BigDecimal(0.00);
  3425. BigDecimal monthonmonthAmount3 = new BigDecimal(0.00);
  3426. BigDecimal monthonmonthAmount4 = new BigDecimal(0.00);
  3427. BigDecimal monthonmonthAmount5 = new BigDecimal(0.00);
  3428. BigDecimal monthonmonthAmount6 = new BigDecimal(0.00);
  3429. BigDecimal monthonmonthAmount7 = new BigDecimal(0.00);
  3430. BigDecimal monthonmonthAmount8 = new BigDecimal(0.00);
  3431. BigDecimal monthonmonthAmount9 = new BigDecimal(0.00);
  3432. BigDecimal monthonmonthAmount10 = new BigDecimal(0.00);
  3433. BigDecimal monthonmonthAmount11 = new BigDecimal(0.00);
  3434. BigDecimal monthonmonthAmount12 = new BigDecimal(0.00);
  3435. if (!"0".equals(evaluationSumOld12)) {
  3436. monthonmonthAmount1 = (evaluationSum111.subtract(evaluationSumOld1212)).divide(evaluationSumOld1212, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3437. }
  3438. if (!"0".equals(evaluationSum1)) {
  3439. monthonmonthAmount2 = (evaluationSum22.subtract(evaluationSum111)).divide(evaluationSum111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3440. }
  3441. if (!"0".equals(evaluationSum2)) {
  3442. monthonmonthAmount3 = (evaluationSum33.subtract(evaluationSum22)).divide(evaluationSum22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3443. }
  3444. if (!"0".equals(evaluationSum3)) {
  3445. monthonmonthAmount4 = (evaluationSum44.subtract(evaluationSum33)).divide(evaluationSum33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3446. }
  3447. if (!"0".equals(evaluationSum4)) {
  3448. monthonmonthAmount5 = (evaluationSum55.subtract(evaluationSum44)).divide(evaluationSum44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3449. }
  3450. if (!"0".equals(evaluationSum5)) {
  3451. monthonmonthAmount6 = (evaluationSum66.subtract(evaluationSum55)).divide(evaluationSum55, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3452. }
  3453. if (!"0".equals(evaluationSum6)) {
  3454. monthonmonthAmount7 = (evaluationSum77.subtract(evaluationSum66)).divide(evaluationSum66, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3455. }
  3456. if (!"0".equals(evaluationSum7)) {
  3457. monthonmonthAmount8 = (evaluationSum88.subtract(evaluationSum77)).divide(evaluationSum77, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3458. }
  3459. if (!"0".equals(evaluationSum8)) {
  3460. monthonmonthAmount9 = (evaluationSum99.subtract(evaluationSum88)).divide(evaluationSum88, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3461. }
  3462. if (!"0".equals(evaluationSum9)) {
  3463. monthonmonthAmount10 = (evaluationSum1010.subtract(evaluationSum99)).divide(evaluationSum99, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3464. }
  3465. if (!"0".equals(evaluationSum10)) {
  3466. monthonmonthAmount11 = (evaluationSum1111.subtract(evaluationSum1010)).divide(evaluationSum1010, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3467. }
  3468. if (!"0".equals(evaluationSum11)) {
  3469. monthonmonthAmount12 = (evaluationSum1212.subtract(evaluationSum1111)).divide(evaluationSum1111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3470. }
  3471. map1.put("monthonmonthAmount", monthonmonthAmount1.toString());
  3472. map2.put("monthonmonthAmount", monthonmonthAmount2.toString());
  3473. map3.put("monthonmonthAmount", monthonmonthAmount3.toString());
  3474. map4.put("monthonmonthAmount", monthonmonthAmount4.toString());
  3475. map5.put("monthonmonthAmount", monthonmonthAmount5.toString());
  3476. map6.put("monthonmonthAmount", monthonmonthAmount6.toString());
  3477. map7.put("monthonmonthAmount", monthonmonthAmount7.toString());
  3478. map8.put("monthonmonthAmount", monthonmonthAmount8.toString());
  3479. map9.put("monthonmonthAmount", monthonmonthAmount9.toString());
  3480. map10.put("monthonmonthAmount", monthonmonthAmount10.toString());
  3481. map11.put("monthonmonthAmount", monthonmonthAmount11.toString());
  3482. map12.put("monthonmonthAmount", monthonmonthAmount12.toString());
  3483. // 预算金额同比比 对比
  3484. BigDecimal yearonyearAmount1 = new BigDecimal(0.00);
  3485. BigDecimal yearonyearAmount2 = new BigDecimal(0.00);
  3486. BigDecimal yearonyearAmount3 = new BigDecimal(0.00);
  3487. BigDecimal yearonyearAmount4 = new BigDecimal(0.00);
  3488. BigDecimal yearonyearAmount5 = new BigDecimal(0.00);
  3489. BigDecimal yearonyearAmount6 = new BigDecimal(0.00);
  3490. BigDecimal yearonyearAmount7 = new BigDecimal(0.00);
  3491. BigDecimal yearonyearAmount8 = new BigDecimal(0.00);
  3492. BigDecimal yearonyearAmount9 = new BigDecimal(0.00);
  3493. BigDecimal yearonyearAmount10 = new BigDecimal(0.00);
  3494. BigDecimal yearonyearAmount11 = new BigDecimal(0.00);
  3495. BigDecimal yearonyearAmount12 = new BigDecimal(0.00);
  3496. if (!"0".equals(evaluationSumOld1)) {
  3497. yearonyearAmount1 = (evaluationSum111.subtract(evaluationSumOld111)).divide(evaluationSumOld1111, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3498. }
  3499. if (!"0".equals(evaluationSumOld2)) {
  3500. yearonyearAmount2 = (evaluationSum22.subtract(evaluationSumOld22)).divide(evaluationSumOld22, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3501. }
  3502. if (!"0".equals(evaluationSumOld3)) {
  3503. yearonyearAmount3 = (evaluationSum33.subtract(evaluationSumOld33)).divide(evaluationSumOld33, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3504. }
  3505. if (!"0".equals(evaluationSumOld4)) {
  3506. yearonyearAmount4 = (evaluationSum44.subtract(evaluationSumOld44)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3507. }
  3508. if (!"0".equals(evaluationSumOld5)) {
  3509. yearonyearAmount5 = (evaluationSum55.subtract(evaluationSumOld55)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3510. }
  3511. if (!"0".equals(evaluationSumOld6)) {
  3512. yearonyearAmount6 = (evaluationSum66.subtract(evaluationSumOld66)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3513. }
  3514. if (!"0".equals(evaluationSumOld7)) {
  3515. yearonyearAmount7 = (evaluationSum77.subtract(evaluationSumOld77)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3516. }
  3517. if (!"0".equals(evaluationSumOld8)) {
  3518. yearonyearAmount8 = (evaluationSum88.subtract(evaluationSumOld88)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3519. }
  3520. if (!"0".equals(evaluationSumOld9)) {
  3521. yearonyearAmount9 = (evaluationSum99.subtract(evaluationSumOld99)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3522. }
  3523. if (!"0".equals(evaluationSumOld10)) {
  3524. yearonyearAmount10 = (evaluationSum1010.subtract(evaluationSumOld1010)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3525. }
  3526. if (!"0".equals(evaluationSumOld11)) {
  3527. yearonyearAmount11 = (evaluationSum1111.subtract(evaluationSumOld1111)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3528. }
  3529. if (!"0".equals(evaluationSumOld12)) {
  3530. yearonyearAmount12 = (evaluationSum1212.subtract(evaluationSumOld1212)).divide(evaluationSumOld44, 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
  3531. }
  3532. map1.put("yearonyearAmount", yearonyearAmount1.toString());
  3533. map2.put("yearonyearAmount", yearonyearAmount2.toString());
  3534. map3.put("yearonyearAmount", yearonyearAmount3.toString());
  3535. map4.put("yearonyearAmount", yearonyearAmount4.toString());
  3536. map5.put("yearonyearAmount", yearonyearAmount5.toString());
  3537. map6.put("yearonyearAmount", yearonyearAmount6.toString());
  3538. map7.put("yearonyearAmount", yearonyearAmount7.toString());
  3539. map8.put("yearonyearAmount", yearonyearAmount8.toString());
  3540. map9.put("yearonyearAmount", yearonyearAmount9.toString());
  3541. map10.put("yearonyearAmount", yearonyearAmount10.toString());
  3542. map11.put("yearonyearAmount", yearonyearAmount11.toString());
  3543. map12.put("yearonyearAmount", yearonyearAmount12.toString());
  3544. // 存入集合
  3545. mapReturn.add(map1);
  3546. mapReturn.add(map2);
  3547. mapReturn.add(map3);
  3548. mapReturn.add(map4);
  3549. mapReturn.add(map5);
  3550. mapReturn.add(map6);
  3551. mapReturn.add(map7);
  3552. mapReturn.add(map8);
  3553. mapReturn.add(map9);
  3554. mapReturn.add(map10);
  3555. mapReturn.add(map11);
  3556. mapReturn.add(map12);
  3557. }
  3558. return mapReturn;
  3559. }
  3560. @Override
  3561. public List<StatisticalChartsResVo> demandSubCount(PmDemandReqVo pmDemandReqVo) {
  3562. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3563. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3564. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3565. } else {
  3566. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3567. }
  3568. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  3569. //本级和所属采购单位新提报采购需求数量--本年度中本级及下级审核的“需求待提交”之后状态的数据
  3570. StatisticalChartsResVo selectSTS = pmDemandMapper.selectSTS(pmDemandReqVo);
  3571. selectSTS.setColumnName("本级和所属采购单位新提报");
  3572. selectSTS.setColumnNamePlus("采购需求数量");
  3573. resVos.add(selectSTS);
  3574. //上年度结转和本年度提报的采购需求累计数量
  3575. //1.上年度结转:上年度“需求待提交”之后,“合同待填制”之前状态的数据
  3576. //2.本年度提报:指本年度“需求待提交”之后状态的数据
  3577. StatisticalChartsResVo lastYear = pmDemandMapper.selectSTSLastYear(pmDemandReqVo);
  3578. StatisticalChartsResVo thisYear = pmDemandMapper.selectSTSThisYear(pmDemandReqVo);
  3579. if (ObjectUtils.isEmpty(lastYear.getNum())) {
  3580. lastYear = new StatisticalChartsResVo();
  3581. lastYear.setNum(0);
  3582. lastYear.setEvaluationTotal(BigDecimal.ZERO);
  3583. lastYear.setEvaluationContractTotal(BigDecimal.ZERO);
  3584. }
  3585. if (ObjectUtils.isEmpty(thisYear.getNum())) {
  3586. thisYear = new StatisticalChartsResVo();
  3587. thisYear.setNum(0);
  3588. thisYear.setEvaluationTotal(BigDecimal.ZERO);
  3589. thisYear.setEvaluationContractTotal(BigDecimal.ZERO);
  3590. }
  3591. lastYear.setNum(lastYear.getNum() + thisYear.getNum());
  3592. lastYear.setEvaluationTotal(lastYear.getEvaluationTotal().add(thisYear.getEvaluationTotal()));
  3593. lastYear.setColumnName("上年度结转和本年度提报");
  3594. lastYear.setColumnNamePlus("采购需求累计数量");
  3595. resVos.add(lastYear);
  3596. //未按季度采购明细计划提报或调整延迟的数量--超过计划需求提报时间的项目
  3597. StatisticalChartsResVo meiJiDu = pmDemandMapper.selectmeiJiDu(pmDemandReqVo);
  3598. meiJiDu.setColumnName("未按季度采购明细计划提报或调整延迟");
  3599. meiJiDu.setColumnNamePlus("采购需求数量");
  3600. resVos.add(meiJiDu);
  3601. return resVos;
  3602. }
  3603. @Override
  3604. public List<StatisticalChartsResVo> countByProjectType(PmDemandReqVo pmDemandReqVo) {
  3605. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3606. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3607. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3608. } else {
  3609. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3610. }
  3611. List<StatisticalChartsResVo> resultList = new ArrayList<>();
  3612. //项目类型情况统计--根据项目类型:物资类、服务类、工程类、装备类统计项目数量及预算金额
  3613. pmDemandReqVo.setProjectType(ProjectTypes.EQUIPMENTTYPE.getCode());
  3614. StatisticalChartsResVo res1 = pmDemandMapper.selectByProjectType(pmDemandReqVo);
  3615. res1.setColumnName(ProjectTypes.EQUIPMENTTYPE.getInfo());
  3616. resultList.add(res1);
  3617. pmDemandReqVo.setProjectType(ProjectTypes.MATERIALTYPE.getCode());
  3618. StatisticalChartsResVo res2 = pmDemandMapper.selectByProjectType(pmDemandReqVo);
  3619. res2.setColumnName(ProjectTypes.MATERIALTYPE.getInfo());
  3620. resultList.add(res2);
  3621. pmDemandReqVo.setProjectType(ProjectTypes.SERVICESTYPE.getCode());
  3622. StatisticalChartsResVo res3 = pmDemandMapper.selectByProjectType(pmDemandReqVo);
  3623. res3.setColumnName(ProjectTypes.SERVICESTYPE.getInfo());
  3624. resultList.add(res3);
  3625. pmDemandReqVo.setProjectType(ProjectTypes.PLANTOEXAMINETYPE.getCode());
  3626. StatisticalChartsResVo res4 = pmDemandMapper.selectByProjectType(pmDemandReqVo);
  3627. res4.setColumnName(ProjectTypes.PLANTOEXAMINETYPE.getInfo());
  3628. resultList.add(res4);
  3629. return resultList;
  3630. }
  3631. @Override
  3632. public List<StatisticalChartsResVo> countByPurchaseChange(PmDemandReqVo pmDemandReqVo) {
  3633. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3634. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3635. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3636. } else {
  3637. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3638. }
  3639. List<StatisticalChartsResVo> byChange = new ArrayList<>();
  3640. //本月相关采购机构完成采购任务--状态为“标后质疑”后的数据
  3641. StatisticalChartsResVo thisMonth = pmDemandMapper.selectCGThisMonth(pmDemandReqVo);
  3642. thisMonth.setColumnName("本月相关采购机构");
  3643. thisMonth.setColumnNamePlus("完成采购任务数量");
  3644. byChange.add(thisMonth);
  3645. //本季度相关采购机构完成采购任务--状态为“标后质疑”后的数据
  3646. StatisticalChartsResVo thisQua = pmDemandMapper.selectCGThisQua(pmDemandReqVo);
  3647. thisQua.setColumnName("本季度相关采购机构");
  3648. thisQua.setColumnNamePlus("完成采购任务数量");
  3649. byChange.add(thisQua);
  3650. //上年度结转和本年度提报的采购需求中累计已完成的采购任务
  3651. //上年度结转:上年度“标后质疑”之后,“合同待填制”之前状态的数据
  3652. //本年度提报:状态为“标后质疑”后的数据
  3653. StatisticalChartsResVo zLastYear = pmDemandMapper.selectZJLastYear(pmDemandReqVo);
  3654. StatisticalChartsResVo tThisYear = pmDemandMapper.selectTBThisYear(pmDemandReqVo);
  3655. if (ObjectUtils.isEmpty(zLastYear.getNum())) {
  3656. zLastYear = new StatisticalChartsResVo();
  3657. zLastYear.setNum(0);
  3658. zLastYear.setEvaluationTotal(BigDecimal.ZERO);
  3659. zLastYear.setEvaluationContractTotal(BigDecimal.ZERO);
  3660. }
  3661. if (ObjectUtils.isEmpty(tThisYear.getNum())) {
  3662. tThisYear = new StatisticalChartsResVo();
  3663. tThisYear.setNum(0);
  3664. tThisYear.setEvaluationTotal(BigDecimal.ZERO);
  3665. tThisYear.setEvaluationContractTotal(BigDecimal.ZERO);
  3666. }
  3667. //tThisYear.setNum(ObjectUtils.isEmpty(tThisYear.getNum()) ? 0 : tThisYear.getNum() + (ObjectUtils.isEmpty(zLastYear.getNum()) ? 0 : zLastYear.getNum()));
  3668. //tThisYear.setEvaluationTotal((ObjectUtils.isEmpty(tThisYear.getEvaluationTotal()) ? BigDecimal.ZERO : tThisYear.getEvaluationTotal()).add((ObjectUtils.isEmpty(zLastYear.getEvaluationTotal()) ? BigDecimal.ZERO : zLastYear.getEvaluationTotal())));
  3669. //tThisYear.setEvaluationContractTotal((ObjectUtils.isEmpty(tThisYear.getEvaluationContractTotal()) ? BigDecimal.ZERO : tThisYear.getEvaluationContractTotal()).add(ObjectUtils.isEmpty(zLastYear.getEvaluationContractTotal()) ? BigDecimal.ZERO : zLastYear.getEvaluationContractTotal()));
  3670. tThisYear.setColumnName("上年度结转和本年度提报的采购需求");
  3671. tThisYear.setColumnNamePlus("累计完成采购任务数量");
  3672. byChange.add(tThisYear);
  3673. //正常推进周期内的采购任务--本年度项目未超过计划完成采购时间的数据
  3674. StatisticalChartsResVo cThisYear = pmDemandMapper.selectCCThisYear(pmDemandReqVo);
  3675. cThisYear.setColumnName("正常推进周期内");
  3676. cThisYear.setColumnNamePlus("采购任务数量");
  3677. byChange.add(cThisYear);
  3678. return byChange;
  3679. }
  3680. @Override
  3681. public AjaxResult exceedReason(PmDemandReqVo pmDemandReqVo) {
  3682. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  3683. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3684. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3685. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3686. } else {
  3687. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3688. }
  3689. //统计超过计划完成采购时间的项目中,处在各阶段的数据包括以下内容:
  3690. //1、需求编制对接数量/涉及金额:状态为“采购需求对接”的数量及预算金额
  3691. List<String> xqdj = new ArrayList<>();
  3692. xqdj.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  3693. pmDemandReqVo.setProjectStatusList(xqdj);
  3694. StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3695. resVo.setColumnName("需求编制对接数量");
  3696. resVos.add(resVo);
  3697. //2、采购文件编制审核数量/涉及金额:状态为“采购文件编制审核“的数量及预算金额
  3698. List<String> wjsh = new ArrayList<>();
  3699. wjsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  3700. pmDemandReqVo.setProjectStatusList(wjsh);
  3701. StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3702. resVo2.setColumnName("采购文件编制审核数量");
  3703. resVos.add(resVo2);
  3704. //3、质疑、投诉、复议、信访举报数量/涉及金额:按钮”质疑投诉”进行质疑过的项目及预算金额
  3705. List<Long> demandIdAll = questionHisService.selectDemandIdAll();
  3706. pmDemandReqVo.setDemandIdAll(demandIdAll);
  3707. StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3708. resVo3.setColumnName("质疑、投诉、复议、信访举报数量");
  3709. resVos.add(resVo3);
  3710. //4、流标废标数量/涉及金额:状态为“流废标处置”的项目及预算金额
  3711. List<String> fblb = new ArrayList<>();
  3712. fblb.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  3713. pmDemandReqVo.setProjectStatusList(fblb);
  3714. StatisticalChartsResVo resVo4 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3715. resVo4.setColumnName("流标废标数量");
  3716. resVos.add(resVo4);
  3717. //5、其他原因项目数量/涉及金额:统计“专家意见反馈”、“采购公告发布”、”待开标“、”评标结果公告“、“标后质疑”状态的数据
  3718. List<String> qtyy = new ArrayList<>();
  3719. qtyy.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  3720. qtyy.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  3721. qtyy.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  3722. qtyy.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  3723. qtyy.add(PmProjectStatus.POST_BID_QUERY.getCode());
  3724. pmDemandReqVo.setProjectStatusList(qtyy);
  3725. StatisticalChartsResVo resVo5 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3726. resVo5.setColumnName("其他原因项目数量");
  3727. resVos.add(resVo5);
  3728. return AjaxResult.success(resVos);
  3729. }
  3730. @Override
  3731. public AjaxResult exceedReasonZj(PmDemandReqVo pmDemandReqVo) {
  3732. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  3733. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3734. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3735. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3736. } else {
  3737. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3738. }
  3739. //统计超过计划完成采购时间的项目中,处在各阶段的数据包括以下内容:
  3740. //1、需求编制对接数量/涉及金额:状态为“采购需求对接”的数量及预算金额
  3741. List<String> xqdj = new ArrayList<>();
  3742. xqdj.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  3743. pmDemandReqVo.setProjectStatusList(xqdj);
  3744. StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3745. resVo.setColumnName("需求编制对接数量");
  3746. resVos.add(resVo);
  3747. //2、采购文件编制审核数量/涉及金额:状态为“采购文件编制审核“的数量及预算金额
  3748. List<String> wjsh = new ArrayList<>();
  3749. wjsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  3750. pmDemandReqVo.setProjectStatusList(wjsh);
  3751. StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3752. resVo2.setColumnName("采购文件编制审核数量");
  3753. resVos.add(resVo2);
  3754. //3、质疑、投诉、复议、信访举报数量/涉及金额:按钮”质疑投诉”进行质疑过的项目及预算金额
  3755. List<Long> demandIdAll = questionHisService.selectDemandIdAll();
  3756. pmDemandReqVo.setDemandIdAll(demandIdAll);
  3757. StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3758. resVo3.setColumnName("质疑、投诉、复议、信访举报数量");
  3759. resVos.add(resVo3);
  3760. //5、其他原因项目数量/涉及金额:统计“专家意见反馈”、“采购公告发布”、”待开标“、”评标结果公告“、“标后质疑”状态的数据
  3761. List<String> qtyy = new ArrayList<>();
  3762. qtyy.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  3763. qtyy.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  3764. qtyy.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  3765. qtyy.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  3766. qtyy.add(PmProjectStatus.POST_BID_QUERY.getCode());
  3767. pmDemandReqVo.setProjectStatusList(qtyy);
  3768. StatisticalChartsResVo resVo5 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3769. resVo5.setColumnName("其他原因项目数量");
  3770. resVos.add(resVo5);
  3771. return AjaxResult.success(resVos);
  3772. }
  3773. @Override
  3774. public AjaxResult exceedLink(PmDemandReqVo pmDemandReqVo) {
  3775. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  3776. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3777. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3778. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3779. } else {
  3780. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3781. }
  3782. //滞留环节
  3783. //超过计划完成采购时间的各状态数量及占比统计,包括:采购需求对接、采购文件编制审核、标签质疑投诉、待开标、流废标处置、标后质疑
  3784. //1、 状态为“采购需求对接”的数量及预算金额
  3785. List<String> xqdj = new ArrayList<>();
  3786. xqdj.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  3787. pmDemandReqVo.setProjectStatusList(xqdj);
  3788. StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3789. resVo.setColumnName("采购需求对接");
  3790. resVos.add(resVo);
  3791. //2、 状态为“采购文件编制审核“的数量及预算金额
  3792. List<String> wjsh = new ArrayList<>();
  3793. wjsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  3794. pmDemandReqVo.setProjectStatusList(wjsh);
  3795. StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3796. resVo2.setColumnName("采购文件编制审核");
  3797. resVos.add(resVo2);
  3798. //3.标前质疑
  3799. List<String> bqzy = new ArrayList<>();
  3800. bqzy.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  3801. pmDemandReqVo.setProjectStatusList(bqzy);
  3802. StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3803. resVo3.setColumnName("标前质疑投诉");
  3804. resVos.add(resVo3);
  3805. //4、 待开标
  3806. List<String> dkb = new ArrayList<>();
  3807. dkb.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  3808. pmDemandReqVo.setProjectStatusList(dkb);
  3809. StatisticalChartsResVo resVo4 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3810. resVo4.setColumnName("待开标");
  3811. resVos.add(resVo4);
  3812. //5、 流废标处置
  3813. List<String> lfb = new ArrayList<>();
  3814. lfb.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  3815. pmDemandReqVo.setProjectStatusList(lfb);
  3816. StatisticalChartsResVo resVo5 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3817. resVo5.setColumnName("流废标处置");
  3818. resVos.add(resVo5);
  3819. //6、 标后质疑
  3820. List<String> bhzy = new ArrayList<>();
  3821. bhzy.add(PmProjectStatus.POST_BID_QUERY.getCode());
  3822. pmDemandReqVo.setProjectStatusList(bhzy);
  3823. StatisticalChartsResVo resVo6 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
  3824. resVo6.setColumnName("标后质疑");
  3825. resVos.add(resVo6);
  3826. return AjaxResult.success(resVos);
  3827. }
  3828. @Override
  3829. public AjaxResult countPurTask(PmDemandReqVo pmDemandReqVo) {
  3830. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  3831. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3832. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3833. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3834. } else {
  3835. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3836. }
  3837. //1、所属采购服务站数量
  3838. //查询现有的采购服务站
  3839. SysDictData dictData = new SysDictData();
  3840. dictData.setDictType("purchase_services");
  3841. List<SysDictData> servicesData = dictDataService.selectDictDataList(dictData);
  3842. StatisticalChartsResVo resVo = new StatisticalChartsResVo();
  3843. resVo.setColumnName("所属采购服务站数量");
  3844. resVo.setNum(servicesData.size());
  3845. resVos.add(resVo);
  3846. //2、所属采购机构--根据招标代理机构管理中的白名单数据显示
  3847. StatisticalChartsResVo resVo2 = pmDemandMapper.countBaseAgencyWithWhite();
  3848. resVo2.setColumnName("所属采购机构");
  3849. resVos.add(resVo2);
  3850. //3、新受领集中采购数量--状态为“任务待下达”之后的数据
  3851. StatisticalChartsResVo resVo3 = pmDemandMapper.JZCGnum(pmDemandReqVo);
  3852. resVo3.setColumnName("新受领集中采购数量");
  3853. resVos.add(resVo3);
  3854. //4、上年度结转任务数量 上年度“任务待下达”之后,“合同待填制”之前的状态的数据
  3855. List<String> snzj = new ArrayList<>();
  3856. snzj.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  3857. snzj.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  3858. snzj.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  3859. snzj.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  3860. snzj.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  3861. snzj.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  3862. snzj.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  3863. snzj.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  3864. snzj.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  3865. pmDemandReqVo.setProjectStatusList(snzj);
  3866. StatisticalChartsResVo resVo4 = pmDemandMapper.countProjecReaAndStatus(pmDemandReqVo);
  3867. resVo4.setColumnName("上年度结转任务数量");
  3868. resVos.add(resVo4);
  3869. return AjaxResult.success(resVos);
  3870. }
  3871. @Override
  3872. public AjaxResult countMajorProjectNumCGB(PmDemandReqVo pmDemandReqVo) {
  3873. //新增执行滞后采购任务数量分析 所有的超过计划完成采购时间的数据
  3874. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  3875. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  3876. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  3877. } else {
  3878. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  3879. }
  3880. HashMap<String, List<StatisticalChartsResVo>> resMap = new HashMap<>();
  3881. // 查询数据库中最小的年份
  3882. int minYear = pmDemandMapper.selectMinYear();
  3883. // 获取当前年份
  3884. Calendar calendar = Calendar.getInstance();
  3885. int thisYear = calendar.get(Calendar.YEAR);
  3886. List<StatisticalChartsResVo> resVos = new LinkedList<>();
  3887. for (int i = minYear; i <= thisYear; i++) {
  3888. pmDemandReqVo.setYear(i);
  3889. StatisticalChartsResVo byYear = pmDemandMapper.countProjectACT_Year(pmDemandReqVo);
  3890. resVos.add(byYear);
  3891. }
  3892. if (pmDemandReqVo.getTimeType().equals("1")) {
  3893. resMap.put("年", resVos);
  3894. } else if (pmDemandReqVo.getTimeType().equals("2")) {
  3895. List<StatisticalChartsResVo> byQuarter = new LinkedList<>();
  3896. for (StatisticalChartsResVo chartsResVo : resVos) {
  3897. pmDemandReqVo.setYear(Integer.parseInt(chartsResVo.getColumnName()));
  3898. for (int i = 1; i <= 4; i++) {
  3899. pmDemandReqVo.setQuarter(i);
  3900. StatisticalChartsResVo quarter = pmDemandMapper.countProjectACT_Qua(pmDemandReqVo);
  3901. if (ObjectUtils.isEmpty(quarter)) {
  3902. StatisticalChartsResVo vo = new StatisticalChartsResVo("", "", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
  3903. quarter = vo;
  3904. quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
  3905. }
  3906. quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
  3907. byQuarter.add(quarter);
  3908. }
  3909. }
  3910. resMap.put("季度", byQuarter);
  3911. } else if (pmDemandReqVo.getTimeType().equals("3")) {
  3912. List<StatisticalChartsResVo> byMonth = new LinkedList<>();
  3913. for (StatisticalChartsResVo chartsResVo : resVos) {
  3914. pmDemandReqVo.setYear(Integer.parseInt(chartsResVo.getColumnName()));
  3915. for (int i = 1; i <= 12; i++) {
  3916. pmDemandReqVo.setMonth(i);
  3917. StatisticalChartsResVo month = pmDemandMapper.countProjectACT_Mon(pmDemandReqVo);
  3918. if (ObjectUtils.isEmpty(month)) {
  3919. StatisticalChartsResVo vo = new StatisticalChartsResVo("", "", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
  3920. month = vo;
  3921. month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
  3922. }
  3923. month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
  3924. byMonth.add(month);
  3925. }
  3926. }
  3927. resMap.put("月", byMonth);
  3928. }
  3929. return AjaxResult.success(resMap);
  3930. }
  3931. //查询不同状态下的项目数据
  3932. public List<PmDemand> getListByStatus(String projectStatus) {
  3933. LoginUser user = SecurityUtils.getLoginUser();
  3934. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  3935. // 通过用户ID查询角色
  3936. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(user.getUserId());
  3937. //需求单位只能查看和操作个人数据
  3938. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  3939. if (!ObjectUtils.isEmpty(sysRoleList)) {
  3940. lw.eq(PmDemand::getCreateBy, user.getUserId());
  3941. } else if (!projectStatus.equals("5") && !projectStatus.equals("4")) {
  3942. //需求待提交时不用查审核
  3943. List<PmAuditDeptRef> list = new ArrayList<>();
  3944. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  3945. l.eq(PmAuditDeptRef::getDeptId, SecurityUtils.getDeptId());
  3946. l.eq(PmAuditDeptRef::getRefType, "2");
  3947. list = pmAuditDeptRefService.list(l);
  3948. if (!ObjectUtils.isEmpty(list) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  3949. lw.in(PmDemand::getDemandId, list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList()));
  3950. }
  3951. }
  3952. lw.in(PmDemand::getProjectStatus, projectStatus);
  3953. lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  3954. lw.last(" order by project_status, plan_demand_sub_time");
  3955. return this.baseMapper.selectList(lw);
  3956. }
  3957. /**
  3958. * 查询不同状态下的项目数据(采购办)
  3959. * 采购执行管理中,本单位超额项目交给上级处理,本单位不处理。
  3960. *
  3961. * @param projectStatus
  3962. * @return
  3963. */
  3964. public List<PmDemand> getListByStatusCGB(String projectStatus) {
  3965. //登录用户的部门
  3966. Long deptId = SecurityUtils.getDeptId();
  3967. SysDept sysDept = deptMapper.selectDeptById(deptId);
  3968. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  3969. List<PmAuditDeptRef> list = new ArrayList<>();
  3970. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  3971. l.eq(PmAuditDeptRef::getDeptId, deptId);
  3972. l.eq(PmAuditDeptRef::getRefType, "2");
  3973. list = pmAuditDeptRefService.list(l);
  3974. //本单位所有参与审核的项目id
  3975. List<Long> refList = list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  3976. //上级参与审核的项目
  3977. List<Long> refListf = new ArrayList<>();
  3978. List<PmAuditDeptRef> listf = new ArrayList<>();
  3979. if (sysDept.getParentId() != 0) {
  3980. LambdaQueryWrapper<PmAuditDeptRef> lf = new LambdaQueryWrapper<>();
  3981. lf.eq(PmAuditDeptRef::getDeptId, sysDept.getParentId());
  3982. lf.eq(PmAuditDeptRef::getRefType, "2");
  3983. listf = pmAuditDeptRefService.list(lf);
  3984. //上级参与审核的项目id
  3985. refListf = listf.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  3986. }
  3987. //取集合差集,只处理差集中的数据
  3988. if (!ObjectUtils.isEmpty(refListf)) {
  3989. refList.removeAll(refListf);
  3990. }
  3991. lw.in(PmDemand::getProjectStatus, projectStatus);
  3992. lw.last(" order by project_status, plan_demand_sub_time");
  3993. return this.baseMapper.selectList(lw);
  3994. }
  3995. /**
  3996. * 查询不同状态下的项目数据
  3997. * 待办事项--全部
  3998. *
  3999. * @param projectStatus
  4000. * @return
  4001. */
  4002. public List<PmDemand> getListByStatusTotal(List<String> projectStatus) {
  4003. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  4004. List<PmAuditDeptRef> list = new ArrayList<>();
  4005. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  4006. l.eq(PmAuditDeptRef::getDeptId, SecurityUtils.getDeptId());
  4007. l.eq(PmAuditDeptRef::getRefType, "2");
  4008. list = pmAuditDeptRefService.list(l);
  4009. if (!ObjectUtils.isEmpty(list) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4010. lw.in(PmDemand::getDemandId, list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList()));
  4011. }
  4012. lw.in(PmDemand::getProjectStatus, projectStatus);
  4013. lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  4014. lw.last(" order by project_status, plan_demand_sub_time");
  4015. return this.baseMapper.selectList(lw);
  4016. }
  4017. /**
  4018. * 查询不同状态下的项目数据(采购办)
  4019. * 采购执行管理中,本单位超额项目交给上级处理,本单位不处理。
  4020. * 待办事项--全部
  4021. *
  4022. * @param projectStatus
  4023. * @return
  4024. */
  4025. public List<PmDemand> getListByStatusTotalCGB(List<String> projectStatus) {
  4026. //登录用户的部门
  4027. Long deptId = SecurityUtils.getDeptId();
  4028. SysDept sysDept = deptMapper.selectDeptById(deptId);
  4029. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  4030. List<PmAuditDeptRef> list = new ArrayList<>();
  4031. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  4032. l.eq(PmAuditDeptRef::getDeptId, deptId);
  4033. l.eq(PmAuditDeptRef::getRefType, "2");
  4034. list = pmAuditDeptRefService.list(l);
  4035. //本单位所有参与审核的项目id
  4036. List<Long> refList = list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  4037. //上级参与审核的项目
  4038. List<Long> refListf = new ArrayList<>();
  4039. List<PmAuditDeptRef> listf = new ArrayList<>();
  4040. if (sysDept.getParentId() != 0) {
  4041. LambdaQueryWrapper<PmAuditDeptRef> lf = new LambdaQueryWrapper<>();
  4042. lf.eq(PmAuditDeptRef::getDeptId, sysDept.getParentId());
  4043. lf.eq(PmAuditDeptRef::getRefType, "2");
  4044. listf = pmAuditDeptRefService.list(lf);
  4045. //上级参与审核的项目id
  4046. refListf = listf.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  4047. }
  4048. //取集合差集,只处理差集中的数据
  4049. if (!ObjectUtils.isEmpty(refListf)) {
  4050. refList.removeAll(refListf);
  4051. }
  4052. //为空就返回空
  4053. if (ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4054. lw.in(PmDemand::getDemandId, -1);
  4055. } else if (!ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4056. lw.in(PmDemand::getDemandId, refList);
  4057. }
  4058. lw.in(PmDemand::getProjectStatus, projectStatus);
  4059. lw.last(" order by project_status, plan_demand_sub_time");
  4060. return this.baseMapper.selectList(lw);
  4061. }
  4062. //数据转换
  4063. @Override
  4064. public List<PmDemandResVo> listToVoList(List<PmDemand> demandList) {
  4065. List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
  4066. if (!ObjectUtils.isEmpty(demandList) && demandList.size() > 0) {
  4067. pmDemandResponseVoList = demandChangeTo(demandList);
  4068. }
  4069. return pmDemandResponseVoList;
  4070. }
  4071. //查询不同状态下的项目数据的数量
  4072. @Override
  4073. public Integer getNumByStatus(String projectStatus) {
  4074. LoginUser user = SecurityUtils.getLoginUser();
  4075. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  4076. // 通过用户ID查询角色
  4077. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(user.getUserId());
  4078. //需求单位只能查看和操作个人数据
  4079. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  4080. if (!ObjectUtils.isEmpty(sysRoleList)) {
  4081. lw.eq(PmDemand::getCreateBy, user.getUserId());
  4082. } else if (!projectStatus.equals("5") && !projectStatus.equals("4")) {
  4083. ///需求待提交时不用查审核
  4084. List<PmAuditDeptRef> list = new ArrayList<>();
  4085. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  4086. l.eq(PmAuditDeptRef::getDeptId, SecurityUtils.getDeptId());
  4087. l.eq(PmAuditDeptRef::getRefType, "2");
  4088. list = pmAuditDeptRefService.list(l);
  4089. if (!ObjectUtils.isEmpty(list) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4090. lw.in(PmDemand::getDemandId, list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList()));
  4091. }
  4092. }
  4093. lw.eq(PmDemand::getProjectStatus, projectStatus);
  4094. lw.eq(PmDemand::getPurchaseDeptId, SecurityUtils.getDeptId());
  4095. lw.last(" order by project_status, plan_demand_sub_time");
  4096. Long count = this.baseMapper.selectCount(lw);
  4097. return Math.toIntExact(count);
  4098. }
  4099. /**
  4100. * 查询不同状态下的项目数据的数量(采购办首页)
  4101. * 采购执行管理中,本单位超额项目交给上级处理,本单位不处理。
  4102. */
  4103. @Override
  4104. public Integer getNumByStatusCGB(String projectStatus) {
  4105. //登录用户的部门
  4106. Long deptId = SecurityUtils.getDeptId();
  4107. SysDept sysDept = deptMapper.selectDeptById(deptId);
  4108. LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
  4109. List<PmAuditDeptRef> list = new ArrayList<>();
  4110. LambdaQueryWrapper<PmAuditDeptRef> l = new LambdaQueryWrapper<>();
  4111. l.eq(PmAuditDeptRef::getDeptId, deptId);
  4112. l.eq(PmAuditDeptRef::getRefType, "2");
  4113. list = pmAuditDeptRefService.list(l);
  4114. //本单位所有参与审核的项目id
  4115. List<Long> refList = list.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  4116. //上级参与审核的项目
  4117. List<Long> refListf = new ArrayList<>();
  4118. List<PmAuditDeptRef> listf = new ArrayList<>();
  4119. if (sysDept.getParentId() != 0) {
  4120. LambdaQueryWrapper<PmAuditDeptRef> lf = new LambdaQueryWrapper<>();
  4121. lf.eq(PmAuditDeptRef::getDeptId, sysDept.getParentId());
  4122. lf.eq(PmAuditDeptRef::getRefType, "2");
  4123. listf = pmAuditDeptRefService.list(lf);
  4124. //上级参与审核的项目id
  4125. refListf = listf.stream().map(PmAuditDeptRef::getRefId).collect(Collectors.toList());
  4126. }
  4127. //取集合差集,只处理差集中的数据
  4128. if (!ObjectUtils.isEmpty(refListf)) {
  4129. refList.removeAll(refListf);
  4130. }
  4131. //为空就返回空
  4132. if (ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4133. lw.in(PmDemand::getDemandId, -1);
  4134. } else if (!ObjectUtils.isEmpty(refList) && !SysUser.isAdmin(SecurityUtils.getUserId())) {
  4135. lw.in(PmDemand::getDemandId, refList);
  4136. }
  4137. lw.eq(PmDemand::getProjectStatus, projectStatus);
  4138. lw.last(" order by project_status, plan_demand_sub_time");
  4139. Long count = this.baseMapper.selectCount(lw);
  4140. return Math.toIntExact(count);
  4141. }
  4142. //字段转换and赋值
  4143. public List<PmDemandResVo> demandChangeTo(List<PmDemand> pmDemandList) {
  4144. List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
  4145. //获取字典数据
  4146. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  4147. //项目属性
  4148. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  4149. //提前或延后*天进行提醒
  4150. List<SysDictData> alertTime = dictTypeService.selectDictDataByType("alert_time_setting");
  4151. HashMap<String, String> alertTimeMap = new LinkedHashMap<>();
  4152. //根据时间类别设定的提醒时间
  4153. for (SysDictData dictData : alertTime) {
  4154. // 字段名称----阈值
  4155. alertTimeMap.put(dictData.getDictLabel(), dictData.getDictValue());
  4156. }
  4157. for (PmDemand pmDemand1 : pmDemandList) {
  4158. PmDemandResVo vo = new PmDemandResVo();
  4159. BeanUtils.copyProperties(pmDemand1, vo);
  4160. if (vo.getPurchaseDeptId() != null) {
  4161. Map<String, Object> deptMap = deptService.selectDeptById(vo.getPurchaseDeptId());
  4162. if (deptMap != null) {
  4163. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptMap.get("sysDept");
  4164. if (sysDeptResponseVo != null) {
  4165. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  4166. }
  4167. }
  4168. }
  4169. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
  4170. if (StringUtils.isNotEmpty(purchaseServicesName)) {
  4171. vo.setPurchaseServicesName(purchaseServicesName);
  4172. }
  4173. //项目类型
  4174. for (ProjectTypes value : ProjectTypes.values()) {
  4175. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  4176. vo.setProjectTypeName(value.getInfo());
  4177. break;
  4178. }
  4179. }
  4180. //是否为超限额计划
  4181. for (IsExcess value : IsExcess.values()) {
  4182. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  4183. vo.setIsExcessName(value.getInfo());
  4184. break;
  4185. }
  4186. }
  4187. //采购方式
  4188. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  4189. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  4190. vo.setPurchaseModeName(value.getInfo());
  4191. break;
  4192. }
  4193. }
  4194. //项目属性为value拼接
  4195. if (!ObjectUtils.isEmpty(vo.getProjectAttr())) {
  4196. if (vo.getProjectAttr().length() > 1) {
  4197. StringBuilder builder = new StringBuilder();
  4198. String[] split = vo.getProjectAttr().split(",");
  4199. for (String s : split) {
  4200. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  4201. if (s.equals(entry.getValue())) {
  4202. if (!vo.getProjectAttr().endsWith(s)) {
  4203. builder.append(entry.getKey() + ",");
  4204. } else {
  4205. builder.append(entry.getKey());
  4206. }
  4207. break;
  4208. }
  4209. }
  4210. }
  4211. vo.setProjectAttrName(builder.toString());
  4212. } else {
  4213. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  4214. if (vo.getProjectAttr().equals(entry.getValue())) {
  4215. vo.setProjectAttrName(entry.getKey());
  4216. break;
  4217. }
  4218. }
  4219. }
  4220. }
  4221. //预警状态
  4222. for (WarnStatus value : WarnStatus.values()) {
  4223. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  4224. vo.setWarnStatusName(value.getInfo());
  4225. break;
  4226. }
  4227. }
  4228. //项目状态
  4229. for (PmProjectStatus value : PmProjectStatus.values()) {
  4230. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  4231. vo.setProjectStatusName(value.getInfo());
  4232. break;
  4233. }
  4234. }
  4235. try {
  4236. vo.setTipsMessage(pmDemandGetTips(vo, alertTimeMap));
  4237. if (vo.getTipsMessage().contains("超过")) {
  4238. vo.setIsExceedProject("1");
  4239. if (ObjectUtils.isEmpty(pmDemand1.getDelayReason())) {
  4240. //没有原因就可以填写滞后原因
  4241. vo.setIsWriteExceed("1");
  4242. }
  4243. }
  4244. } catch (ParseException e) {
  4245. e.printStackTrace();
  4246. }
  4247. pmDemandResponseVoList.add(vo);
  4248. }
  4249. return pmDemandResponseVoList;
  4250. }
  4251. /**
  4252. * 根据年度计划提报时间的阈值进行提示
  4253. *
  4254. * @return
  4255. */
  4256. public String pmDemandGetTips(PmDemandResVo vo, HashMap<String, String> alertTimeMap) throws ParseException {
  4257. //首页待办事项--计划完成采购时间提醒
  4258. if (ObjectUtils.isEmpty(vo.getRealDemandCommitTime())) {
  4259. int alertDay2 = Integer.parseInt(alertTimeMap.get("计划提报时间"));
  4260. Integer alertTime = 1000 * 60 * 60 * 24 * alertDay2;
  4261. double surplusTwo = vo.getPlanDemandSubTime().getTime() - System.currentTimeMillis();
  4262. //少于设定阈值便提醒
  4263. if (surplusTwo < alertTime) {
  4264. //剩余天数(向上取整)
  4265. int i = (int) Math.ceil(surplusTwo / 1000 / 60 / 60 / 24);
  4266. if (i > 0) {
  4267. return "距离计划提报时间不足" + i + "天";
  4268. } else {
  4269. return "已超过计划提报时间" + Math.abs(i) + "天";
  4270. }
  4271. }
  4272. }
  4273. //首页待办事项--计划完成采购时间提醒
  4274. if (ObjectUtils.isEmpty(vo.getRealPurchaseFinishTime())) {
  4275. int alertDay2 = Integer.parseInt(alertTimeMap.get("计划完成时间"));
  4276. Integer alertTime = 1000 * 60 * 60 * 24 * alertDay2;
  4277. double surplusTwo = vo.getPlanPurchaseFinishTime().getTime() - System.currentTimeMillis();
  4278. //少于设定阈值便提醒
  4279. if (surplusTwo < alertTime) {
  4280. //剩余天数(向上取整)
  4281. int i = (int) Math.ceil(surplusTwo / 1000 / 60 / 60 / 24);
  4282. if (i > 0) {
  4283. return "距离计划完成采购时间不足" + i + "天";
  4284. } else {
  4285. return "已超过计划完成采购时间" + Math.abs(i) + "天";
  4286. }
  4287. }
  4288. }
  4289. //首页待办事项--计划交付时间提醒
  4290. if (ObjectUtils.isEmpty(vo.getRealDeliverTime())) {
  4291. Date deliverTime = vo.getPlanDeliverTime();
  4292. int alertDay = Integer.parseInt(alertTimeMap.get("计划交付(实施)时间"));
  4293. Integer remindTine = 1000 * 60 * 60 * 24 * alertDay;
  4294. double surplus = deliverTime.getTime() - System.currentTimeMillis();
  4295. if (surplus < remindTine) {
  4296. //剩余天数(向上取整)
  4297. int i = (int) Math.ceil(surplus / 1000 / 60 / 60 / 24);
  4298. if (i > 0) {
  4299. return "距离计划交付时间不足" + i + "天";
  4300. } else {
  4301. return "已超过计划交付时间" + Math.abs(i) + "天";
  4302. }
  4303. }
  4304. }
  4305. return "";
  4306. }
  4307. /**
  4308. * 计算百分比:使用java.text.DecimalFormat实现
  4309. *
  4310. * @param x
  4311. * @param y
  4312. * @return
  4313. */
  4314. public static String getPercent(int x, int y) {
  4315. double d1 = x * 1.0;
  4316. double d2 = y * 1.0;
  4317. // 设置保留几位小数, “.”后面几个零就保留几位小数,这里设置保留2位小数
  4318. DecimalFormat decimalFormat = new DecimalFormat("##.00%");
  4319. if (d1 == 0) {
  4320. return "0.00%";
  4321. }
  4322. return decimalFormat.format(d1 / d2);
  4323. }
  4324. //查询本单位及本级一下全部
  4325. public List<Long> isQueryAll(Integer queryAll) {
  4326. List<Long> deptList = new ArrayList<>();
  4327. Long deptId = SecurityUtils.getDeptId();
  4328. //查询全部
  4329. if (queryAll.equals(-1)) {
  4330. //获取到子孙级部门id
  4331. if (deptService.hasChildByDeptId(SecurityUtils.getDeptId())) {
  4332. List<Long> children = deptService.getDeptChildren(deptId);
  4333. System.err.println(children.size());
  4334. deptList.addAll(children);
  4335. }
  4336. deptList.add(deptId);
  4337. }
  4338. return deptList;
  4339. }
  4340. //查询本单位还是本单位及子孙级----要查询子单位的超额数据
  4341. @Override
  4342. public List<Long> isQueryZD(Integer queryZd) {
  4343. //指定部门--以及子单位的超额数据
  4344. List<Long> demandId = new ArrayList<>();
  4345. //先获取本部门的项目
  4346. LambdaQueryWrapper<PmDemand> ld = new LambdaQueryWrapper<>();
  4347. ld.eq(PmDemand::getPurchaseDeptId, queryZd);
  4348. //本部门的项目
  4349. List<PmDemand> deList = pmDemandMapper.selectList(ld);
  4350. for (PmDemand demand : deList) {
  4351. demandId.add(demand.getDemandId());
  4352. }
  4353. if (deptService.hasChildByDeptId(Long.valueOf(queryZd))) {
  4354. //获取子级部门d
  4355. List<Long> childByDeptId = deptService.getChildIdByDeptId(Long.valueOf(queryZd));
  4356. //取出所有可以进行统计的项目id
  4357. for (Long cid : childByDeptId) {
  4358. LambdaQueryWrapper<PmAuditDeptRef> ll = new LambdaQueryWrapper<>();
  4359. ll.eq(PmAuditDeptRef::getDeptId, cid);
  4360. ll.eq(PmAuditDeptRef::getRefType, "2");
  4361. //子部门参加审核的项目
  4362. List<PmAuditDeptRef> refList = pmAuditDeptRefService.list(ll);
  4363. //同一个数据有上级参与说明是超额
  4364. for (PmAuditDeptRef ref : refList) {
  4365. //获取上级并查询是否参与审核
  4366. SysDept dept = deptService.selectByCid(ref.getDeptId());
  4367. //是否参与审核
  4368. LambdaQueryWrapper<PmAuditDeptRef> pp = new LambdaQueryWrapper<>();
  4369. ll.eq(PmAuditDeptRef::getDeptId, dept.getDeptId());
  4370. ll.eq(PmAuditDeptRef::getRefId, ref.getRefId());
  4371. //取出父级部门参加审核的项目(超额项目)
  4372. List<PmAuditDeptRef> refListP = pmAuditDeptRefService.list(pp);
  4373. if (!ObjectUtils.isEmpty(refListP)) {
  4374. demandId.add(ref.getRefId());
  4375. }
  4376. }
  4377. }
  4378. }
  4379. return demandId;
  4380. }
  4381. @Override
  4382. public Map<String, String> demandZGWZPL(PmDemandReqVo pmDemandReqVo) {
  4383. List<StatisticalChartsResVo> resVos = new ArrayList<>();
  4384. Long userId = SecurityUtils.getUserId();
  4385. //是-1就是查询自己及子孙级以下,否则只查询指定部门
  4386. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  4387. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  4388. } else {
  4389. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  4390. }
  4391. //"采购管理部门“执行率”、“规划执行率”、“完成率”、“滞后率”、“偏差率”、“流废标率”
  4392. //(1)执行率:年度计划中已提报需求项目占比
  4393. //项目状态为“需求待审核”及以后的所有项目状态的项目数/年度计划中所有的项目数*100%
  4394. LambdaQueryWrapper<PlanYears> lw = new LambdaQueryWrapper<PlanYears>();
  4395. if (!userId.equals(Long.valueOf("1"))) {
  4396. lw.eq(PlanYears::getCreated, userId);
  4397. }
  4398. lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  4399. lw.orderBy(true, false, PlanYears::getCreateTime);
  4400. //年度计划中所有的项目数
  4401. long countPlanYear = planYearsService.count(lw);
  4402. //状态为“需求待审核”以后的数据
  4403. List<String> afsh = new ArrayList<>();
  4404. afsh.add(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
  4405. afsh.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
  4406. afsh.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  4407. afsh.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  4408. afsh.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  4409. afsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  4410. afsh.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  4411. afsh.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  4412. afsh.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  4413. afsh.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  4414. afsh.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  4415. afsh.add(PmProjectStatus.POST_BID_QUERY.getCode());
  4416. afsh.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
  4417. afsh.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  4418. afsh.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  4419. afsh.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
  4420. pmDemandReqVo.setProjectStatusList(afsh);
  4421. Map<String, Object> num1 = pmDemandMapper.purchaseProjectDistributionBND(pmDemandReqVo);
  4422. int countAfsh = Integer.parseInt(num1.get("countNumber").toString());
  4423. //执行率
  4424. String zxl = getPercent(countAfsh, Math.toIntExact(countPlanYear));
  4425. //(2)规划执行率:年度“规划任务项目”和“重大规划项目”计划中已提报需求项目占比
  4426. //项目属性为“规划任务项目”和“重大规划项目”,
  4427. // 并且项目状态为“需求待审核”及以后的所有项目状态的项目数/年度计划中所有的项目数*100%
  4428. StatisticalChartsResVo resVo1 = pmDemandMapper.ghrwAndZdghProjectByStatus(pmDemandReqVo);
  4429. //规划执行率
  4430. String ghzxl = getPercent(resVo1.getNum(), Math.toIntExact(countPlanYear));
  4431. //(3)完成率:已提报需求项目中完成采购项目占比
  4432. //项目状态为“合同待填制”及以后的所有项目状态的项目数/项目状态为“需求待审核”及以后的所有项目状态的项目数*100%
  4433. List<String> afhttz = new ArrayList<>();
  4434. afhttz.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  4435. afhttz.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  4436. afhttz.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
  4437. pmDemandReqVo.setProjectStatusList(afhttz);
  4438. //“合同待填制”及以后的所有项目状态的项目数
  4439. Map<String, Object> num2 = pmDemandMapper.purchaseProjectDistributionBND(pmDemandReqVo);
  4440. int countAfhttz = Integer.parseInt(num2.get("countNumber").toString());
  4441. //完成率
  4442. String wcl = getPercent(countAfhttz, countAfsh);
  4443. //(4)滞后率:以需求审核通过项目为基数,实施周期超过 90日的项目占比
  4444. //进行“任务下达”后,开始计算时间,统计该项目超过90日项目状态没有到“合同待填制”的项目数/任务下达后的总项目数
  4445. List<String> afRwxd = new ArrayList<>();
  4446. afRwxd.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
  4447. afRwxd.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  4448. afRwxd.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  4449. afRwxd.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  4450. afRwxd.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  4451. afRwxd.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  4452. afRwxd.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  4453. afRwxd.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  4454. afRwxd.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  4455. afRwxd.add(PmProjectStatus.POST_BID_QUERY.getCode());
  4456. afRwxd.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
  4457. afRwxd.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  4458. afRwxd.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  4459. afRwxd.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
  4460. pmDemandReqVo.setProjectStatusList(afRwxd);
  4461. //“任务下达”后
  4462. Map<String, Object> num3 = pmDemandMapper.purchaseProjectDistributionBND(pmDemandReqVo);
  4463. int countAfRwxd = Integer.parseInt(num3.get("countNumber").toString());
  4464. //该项目超过90日
  4465. Map<String, Object> num4 = pmDemandMapper.purchaseProjectConducted90Days(pmDemandReqVo);
  4466. int countAf90xm = Integer.parseInt(num4.get("countNumber").toString());
  4467. //滞后率
  4468. String zhhl = getPercent(countAf90xm, countAfRwxd);
  4469. //(5)偏差率,计划偏差率=(未按计划时间受领数量+临时受理需求数量)/季度计划数量
  4470. //未按计划时间受领数量:季度计划模块审核通过但没有进行需求提报并超过计划需求提报时间的计划数
  4471. LambdaQueryWrapper<PlanQuarter> planQuarterLw = new LambdaQueryWrapper<>();
  4472. if (!userId.equals(Long.valueOf("1"))) {
  4473. planQuarterLw.eq(PlanQuarter::getCreated, userId);
  4474. }
  4475. planQuarterLw.eq(PlanQuarter::getPlanType, "0");
  4476. planQuarterLw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  4477. //季度计划数量
  4478. long planQuarter = planQuarterService.count(planQuarterLw);
  4479. //通过审核的季度计划:季度计划审核通过的所有数量
  4480. planQuarterLw.eq(PlanQuarter::getProjectStatus, ProjectStatus.PLANTOEXAMINE.getCode());
  4481. List<PlanQuarter> planQuarterList = planQuarterService.list(planQuarterLw);
  4482. List<Long> planQuarterIds = planQuarterList.stream().map(PlanQuarter::getPlanPracticalId).collect(Collectors.toList());
  4483. //没有进行需求提报并超过计划需求提报时间的计划数
  4484. List<String> xqWtj = new ArrayList<>();
  4485. xqWtj.add(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
  4486. xqWtj.add(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode());
  4487. pmDemandReqVo.setProjectStatusList(xqWtj);
  4488. pmDemandReqVo.setDemandIdAll(planQuarterIds);
  4489. Map<String, Object> num5 = pmDemandMapper.purchaseProjectWTB(pmDemandReqVo);
  4490. int countXmWtj = Integer.parseInt(num5.get("countNumber").toString());
  4491. //临时受理需求数量:临时计划模块的计划进行需求提报后的计划数量
  4492. LambdaQueryWrapper<PlanQuarter> planLinshiLw = new LambdaQueryWrapper<>();
  4493. if (!userId.equals(Long.valueOf("1"))) {
  4494. planLinshiLw.eq(PlanQuarter::getCreated, userId);
  4495. }
  4496. planLinshiLw.eq(PlanQuarter::getPlanType, "1");
  4497. planLinshiLw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  4498. //通过审核的临时计划:临时计划审核通过的所有数量
  4499. planLinshiLw.eq(PlanQuarter::getProjectStatus, ProjectStatus.PLANTOEXAMINE.getCode());
  4500. List<PlanQuarter> planLinshiList = planQuarterService.list(planLinshiLw);
  4501. List<Long> planLinshiIds = planLinshiList.stream().map(PlanQuarter::getPlanPracticalId).collect(Collectors.toList());
  4502. //进行需求提报的计划
  4503. pmDemandReqVo.setProjectStatusList(null);
  4504. pmDemandReqVo.setDemandIdAll(planLinshiIds);
  4505. Map<String, Object> num6 = pmDemandMapper.purchaseProjectYTB(pmDemandReqVo);
  4506. int countXmYtj = Integer.parseInt(num6.get("countNumber").toString());
  4507. String pcl = getPercent((countXmWtj + countXmYtj), Math.toIntExact(planQuarter));
  4508. //(6)流废标率,出现流废标情况的项目/审核下达采购机构实施的采购项目
  4509. //项目状态存在过“流废标处置”的项目数/项目状态为“任务已下达”以后的状态的所有项目*100%
  4510. if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
  4511. pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
  4512. } else {
  4513. pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
  4514. }
  4515. //本年度的项目
  4516. SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
  4517. LambdaQueryWrapper<PmDemand> dmLp = new LambdaQueryWrapper<>();
  4518. dmLp.in(PmDemand::getDemandId, pmDemandReqVo.getDemandIdAll());
  4519. dmLp.gt(PmDemand::getPlanDemandSubTime, sdf.format(new Date()) + "-01-01 00:00:00");
  4520. List<PmDemand> demandList = pmDemandMapper.selectList(dmLp);
  4521. List<Long> deIds = demandList.stream().map(PmDemand::getDemandId).collect(Collectors.toList());
  4522. //出现流废标情况的项目
  4523. List<PmBidFailureHis> failureHis = pmBidFailureHisService.listByIds(deIds);
  4524. String lfbl = getPercent(failureHis.size(), countAfRwxd);
  4525. Map<String, String> result = new HashMap<>();
  4526. result.put("执行率", zxl);
  4527. result.put("规划执行率", ghzxl);
  4528. result.put("完成率", wcl);
  4529. result.put("滞后率", zhhl);
  4530. result.put("偏差率", pcl);
  4531. result.put("流废标率", lfbl);
  4532. return result;
  4533. }
  4534. }