StatisticalAnalysisController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package com.ozs.web.controller.statisticalAnalysis;
  2. import com.ozs.base.domain.BaseSupplier;
  3. import com.ozs.common.annotation.Log;
  4. import com.ozs.common.constant.ModularConstans;
  5. import com.ozs.common.core.controller.BaseController;
  6. import com.ozs.common.core.domain.AjaxResult;
  7. import com.ozs.common.enums.BusinessType;
  8. import com.ozs.common.utils.StringUtils;
  9. import com.ozs.plan.service.PlanYearsService;
  10. import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
  11. import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
  12. import com.ozs.pm.service.IPmDemandService;
  13. import com.ozs.system.domain.SysFileInfo;
  14. import io.swagger.annotations.ApiOperation;
  15. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  16. import org.apache.poi.util.Units;
  17. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  18. import org.apache.poi.xwpf.usermodel.XWPFParagraph;
  19. import org.apache.poi.xwpf.usermodel.XWPFRun;
  20. import org.springframework.security.access.prepost.PreAuthorize;
  21. import org.springframework.web.bind.annotation.*;
  22. import org.springframework.web.multipart.MultipartFile;
  23. import javax.annotation.Resource;
  24. import java.io.File;
  25. import java.io.FileInputStream;
  26. import java.io.FileOutputStream;
  27. import java.io.IOException;
  28. import java.io.OutputStream;
  29. import java.util.List;
  30. import java.util.Map;
  31. /**
  32. * @author buzhanyi
  33. */
  34. @RestController
  35. @RequestMapping("/statistical")
  36. public class StatisticalAnalysisController extends BaseController {
  37. @Resource
  38. private IPmDemandService pmDemandService;
  39. @ApiOperation(value = "项目属性分布")
  40. @PostMapping("/countByProjectAttr")
  41. @PreAuthorize("@ss.hasPermi('statistical:countByProjectAttr')")
  42. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  43. public AjaxResult countByProjectAttr(@RequestBody PmDemandReqVo pmDemandReqVo) {
  44. //按照项目属性统计所有的项目
  45. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  46. return error("登录账号的单位 不能为空!");
  47. }
  48. List<StatisticalChartsResVo> resVos = pmDemandService.countByProjectAttr();
  49. return AjaxResult.success(resVos);
  50. }
  51. @ApiOperation(value = "项目金额分布")
  52. @PostMapping("/countByEvaluation")
  53. @PreAuthorize("@ss.hasPermi('statistical:countByEvaluation')")
  54. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  55. public AjaxResult countByEvaluation(@RequestBody PmDemandReqVo pmDemandReqVo) {
  56. //按照概算金额统计所有的项目
  57. //概算金额包括:100万以下采购任务、100至500万元采购任务、500至1000万元采购任务、1000至5000万元采购任务、5000至1亿元采购任务、1亿元及以上采购任务
  58. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  59. return error("登录账号的单位 不能为空!");
  60. }
  61. List<StatisticalChartsResVo> resVos = pmDemandService.countByEvaluation(pmDemandReqVo);
  62. return AjaxResult.success(resVos);
  63. }
  64. @ApiOperation(value = "执行滞后采购项目情况")
  65. @PostMapping("/countProjectExceed")
  66. @PreAuthorize("@ss.hasPermi('statistical:countProjectExceed')")
  67. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  68. public AjaxResult countProjectExceed(@RequestBody PmDemandReqVo pmDemandReqVo) {
  69. //执行滞后采购项目:本年度所有的逾期项目数
  70. //预算金额:本年度所有逾期项目累加的预算金额
  71. //滞后项目数量占比:指本年度逾期项目数量/本年度所有项目数量
  72. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  73. return error("登录账号的单位 不能为空!");
  74. }
  75. return pmDemandService.countProjectExceed(pmDemandReqVo);
  76. }
  77. @ApiOperation(value = "滞后项目数量分析")
  78. @PostMapping("/exceedAnalysis")
  79. @PreAuthorize("@ss.hasPermi('statistical:exceedAnalysis')")
  80. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  81. public AjaxResult exceedAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) {
  82. //统计不同时间维度的逾期项目
  83. // 需求单位可查看本单位及其下属单位的统计数据
  84. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  85. return error("登录账号的单位 不能为空!");
  86. }
  87. if (StringUtils.isNull(pmDemandReqVo.getTimeType())) {
  88. return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!");
  89. }
  90. return pmDemandService.exceedAnalysis(pmDemandReqVo);
  91. }
  92. @ApiOperation(value = "滞后项目时长分析")
  93. @PostMapping("/exceedMarketAnalysis")
  94. @PreAuthorize("@ss.hasPermi('statistical:exceedMarketAnalysis')")
  95. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  96. public AjaxResult exceedMarketAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) {
  97. //按照滞后时长统计项目数量
  98. //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务
  99. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  100. return error("登录账号的单位 不能为空!");
  101. }
  102. return pmDemandService.exceedMarketAnalysis(pmDemandReqVo);
  103. }
  104. @ApiOperation(value = "采购项目信息统计")
  105. @PostMapping("/purchaseProjectStatistical")
  106. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectStatistical')")
  107. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  108. public AjaxResult purchaseProjectStatistical(@RequestBody PmDemandReqVo pmDemandReqVo) {
  109. // 需求单位可查看本单位及其下属单位的统计数据
  110. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  111. return error("登录账号的单位 不能为空!");
  112. }
  113. Map<String, Integer> map = pmDemandService.purchaseProjectStatistical(pmDemandReqVo);
  114. return success(map);
  115. }
  116. @ApiOperation(value = "重大规划采购任务专项计划管理情况")
  117. @PostMapping("/countMajorProject")
  118. @PreAuthorize("@ss.hasPermi('statistical:countMajorProject')")
  119. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  120. public AjaxResult countMajorProject(@RequestBody PmDemandReqVo pmDemandReqVo) {
  121. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  122. return error("登录账号的单位 不能为空!");
  123. }
  124. return pmDemandService.countMajorProject(pmDemandReqVo);
  125. }
  126. @ApiOperation(value = "任务数量趋势分析")
  127. @PostMapping("/taskQuantityAnalysis")
  128. @PreAuthorize("@ss.hasPermi('statistical:taskQuantityAnalysis')")
  129. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  130. public AjaxResult taskQuantityAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) {
  131. //任务数量趋势分析:按照月、季度、年统计“项目属性”字段中“重大规划”属性的项目
  132. // 需求单位可查看本单位及其下属单位的统计数据
  133. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  134. return error("登录账号的单位 不能为空!");
  135. }
  136. if (StringUtils.isNull(pmDemandReqVo.getTimeType())) {
  137. return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!");
  138. }
  139. return pmDemandService.taskQuantityAnalysis(pmDemandReqVo);
  140. }
  141. //@ApiOperation(value = "新完成采购任务数量")--------接口作废
  142. // @PostMapping("/newFinishPro")
  143. //public AjaxResult newFinishPro(@RequestBody PmDemandReqVo pmDemandReqVo) {
  144. // // 新完成采购任务数量:本年度状态为“合同待填制”、“项目建设中”、“项目建设完成”的项目
  145. // // 预算金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的预算金额
  146. // //合同金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的合同金额
  147. // return pmDemandService.newFinishPro();
  148. //}
  149. @ApiOperation(value = "各阶段采购任务数量分布")
  150. @PostMapping("/countEveryStatusNum")
  151. @PreAuthorize("@ss.hasPermi('statistical:countEveryStatusNum')")
  152. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  153. public AjaxResult countEveryStatusNum(@RequestBody PmDemandReqVo pmDemandReqVo) {
  154. //指项目进行到各个阶段的数量
  155. //阶段包括:待选取代理、待上传招标文件、待发布公告、待开标、待发布中标公告、中标公式中
  156. //展示信息包括:鼠标上到图表时,展示项目数量和平均消耗时长(平均消耗时长,指所有项目在该阶段完成的平均时间)
  157. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  158. return error("登录账号的单位 不能为空!");
  159. }
  160. return pmDemandService.countEveryStatusNum(pmDemandReqVo);
  161. }
  162. @ApiOperation(value = "采购项目--项目数量分析")
  163. @PostMapping("/purchaseProjectNumber")
  164. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectNumber')")
  165. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  166. public AjaxResult purchaseProjectNumber(@RequestBody PmDemandReqVo pmDemandReqVo) {
  167. // 需求单位可查看本单位及其下属单位的统计数据
  168. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  169. return error("登录账号的单位 不能为空!");
  170. }
  171. Map<String, Integer> map = pmDemandService.purchaseProjectNumber(pmDemandReqVo);
  172. return success(map);
  173. }
  174. @ApiOperation(value = "项目执行进度统计")
  175. @PostMapping("/purchaseProjectExecute")
  176. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectExecute')")
  177. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  178. public AjaxResult purchaseProjectExecute(@RequestBody PmDemandReqVo pmDemandReqVo) {
  179. // 需求单位可查看本单位及其下属单位的统计数据
  180. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  181. return error("登录账号的单位 不能为空!");
  182. }
  183. Map<String, Integer> map = pmDemandService.purchaseProjectExecute(pmDemandReqVo);
  184. return success(map);
  185. }
  186. @ApiOperation(value = "已完成项目数量统计")
  187. @PostMapping("/purchaseProjectCompleteNumber")
  188. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectCompleteNumber')")
  189. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  190. public AjaxResult purchaseProjectCompleteNumber(@RequestBody PmDemandReqVo pmDemandReqVo) {
  191. // 需求单位可查看本单位及其下属单位的统计数据
  192. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  193. return error("登录账号的单位 不能为空!");
  194. }
  195. if (StringUtils.isNull(pmDemandReqVo.getTimeType())) {
  196. return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!");
  197. }
  198. List<Map<String, Integer>> map = pmDemandService.purchaseProjectCompleteNumber(pmDemandReqVo);
  199. return success(map);
  200. }
  201. @ApiOperation(value = "各阶段项目数量分布")
  202. @PostMapping("/purchaseProjectDistribution")
  203. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectDistribution')")
  204. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  205. public AjaxResult purchaseProjectDistribution(@RequestBody PmDemandReqVo pmDemandReqVo) {
  206. // 需求单位可查看本单位及其下属单位的统计数据
  207. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  208. return error("登录账号的单位 不能为空!");
  209. }
  210. List<Map<String, String>> map = pmDemandService.purchaseProjectDistribution(pmDemandReqVo);
  211. return success(map);
  212. }
  213. @ApiOperation(value = "项目数量分析")
  214. @PostMapping("/purchaseProjectNumberAnalysis")
  215. @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectNumberAnalysis')")
  216. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  217. public AjaxResult purchaseProjectNumberAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) {
  218. // 需求单位可查看本单位及其下属单位的统计数据
  219. if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
  220. return error("登录账号的单位 不能为空!");
  221. }
  222. if (StringUtils.isNull(pmDemandReqVo.getTimeType())) {
  223. return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!");
  224. }
  225. List<Map<String, String>> map = pmDemandService.purchaseProjectNumberAnalysis(pmDemandReqVo);
  226. return success(map);
  227. }
  228. @ApiOperation(value = "生成分析报告")
  229. @PostMapping("/generateAnalysisReport")
  230. @PreAuthorize("@ss.hasPermi('statistical:generateAnalysisReport')")
  231. @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
  232. public AjaxResult generateAnalysisReport(@RequestBody SysFileInfo file) {
  233. // 创建一个document对象,相当于新建一个word文档(后缀名为.docx)。
  234. XWPFDocument document = new XWPFDocument();
  235. // 创建一个段落对象。
  236. XWPFParagraph paragraph = document.createParagraph();
  237. // 创建一个run。run具体是什么,我也不知道。但是run是这里面的最小单元了。
  238. XWPFRun run = paragraph.createRun();
  239. // 插入图片
  240. // 创建一个输出流 即是该文档的保存位置
  241. try {
  242. //文件路径位置和文件名称
  243. run.addPicture(new FileInputStream(file.getFileUrl()),
  244. XWPFDocument.PICTURE_TYPE_PNG,
  245. file.getFileName(),
  246. Units.toEMU(400),
  247. Units.toEMU(200));
  248. //文件保存地址
  249. OutputStream outputStream = new FileOutputStream(file.getFileMappingPath());
  250. document.write(outputStream);
  251. outputStream.close();
  252. return AjaxResult.success("分析文档已生成");
  253. } catch (IOException e) {
  254. e.printStackTrace();
  255. } catch (InvalidFormatException e) {
  256. e.printStackTrace();
  257. }
  258. return AjaxResult.success("分析文档已生成");
  259. }
  260. }