StatisticalAnalysisController.java 15 KB

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