package com.ozs.web.controller.statisticalAnalysis; import com.ozs.base.domain.BaseSupplier; import com.ozs.common.annotation.Log; import com.ozs.common.constant.ModularConstans; import com.ozs.common.core.controller.BaseController; import com.ozs.common.core.domain.AjaxResult; import com.ozs.common.enums.BusinessType; import com.ozs.common.utils.StringUtils; import com.ozs.plan.service.PlanYearsService; import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo; import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo; import com.ozs.pm.service.IPmDemandService; import com.ozs.system.domain.SysFileInfo; import io.swagger.annotations.ApiOperation; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; import java.util.Map; /** * @author buzhanyi */ @RestController @RequestMapping("/statistical") public class StatisticalAnalysisController extends BaseController { @Resource private IPmDemandService pmDemandService; @ApiOperation(value = "项目属性分布") @PostMapping("/countByProjectAttr") @PreAuthorize("@ss.hasPermi('statistical:countByProjectAttr')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult countByProjectAttr(@RequestBody PmDemandReqVo pmDemandReqVo) { //按照项目属性统计所有的项目 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } List resVos = pmDemandService.countByProjectAttr(); return AjaxResult.success(resVos); } @ApiOperation(value = "项目金额分布") @PostMapping("/countByEvaluation") @PreAuthorize("@ss.hasPermi('statistical:countByEvaluation')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult countByEvaluation(@RequestBody PmDemandReqVo pmDemandReqVo) { //按照概算金额统计所有的项目 //概算金额包括:100万以下采购任务、100至500万元采购任务、500至1000万元采购任务、1000至5000万元采购任务、5000至1亿元采购任务、1亿元及以上采购任务 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } List resVos = pmDemandService.countByEvaluation(pmDemandReqVo); return AjaxResult.success(resVos); } @ApiOperation(value = "执行滞后采购项目情况") @PostMapping("/countProjectExceed") @PreAuthorize("@ss.hasPermi('statistical:countProjectExceed')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult countProjectExceed(@RequestBody PmDemandReqVo pmDemandReqVo) { //执行滞后采购项目:本年度所有的逾期项目数 //预算金额:本年度所有逾期项目累加的预算金额 //滞后项目数量占比:指本年度逾期项目数量/本年度所有项目数量 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } return pmDemandService.countProjectExceed(pmDemandReqVo); } @ApiOperation(value = "滞后项目数量分析") @PostMapping("/exceedAnalysis") @PreAuthorize("@ss.hasPermi('statistical:exceedAnalysis')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult exceedAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) { //统计不同时间维度的逾期项目 // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } if (StringUtils.isNull(pmDemandReqVo.getTimeType())) { return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!"); } return pmDemandService.exceedAnalysis(pmDemandReqVo); } @ApiOperation(value = "滞后项目时长分析") @PostMapping("/exceedMarketAnalysis") @PreAuthorize("@ss.hasPermi('statistical:exceedMarketAnalysis')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult exceedMarketAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) { //按照滞后时长统计项目数量 //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } return pmDemandService.exceedMarketAnalysis(pmDemandReqVo); } @ApiOperation(value = "采购项目信息统计") @PostMapping("/purchaseProjectStatistical") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectStatistical')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectStatistical(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } Map map = pmDemandService.purchaseProjectStatistical(pmDemandReqVo); return success(map); } @ApiOperation(value = "重大规划采购任务专项计划管理情况") @PostMapping("/countMajorProject") @PreAuthorize("@ss.hasPermi('statistical:countMajorProject')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult countMajorProject(@RequestBody PmDemandReqVo pmDemandReqVo) { if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } return pmDemandService.countMajorProject(pmDemandReqVo); } @ApiOperation(value = "任务数量趋势分析") @PostMapping("/taskQuantityAnalysis") @PreAuthorize("@ss.hasPermi('statistical:taskQuantityAnalysis')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult taskQuantityAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) { //任务数量趋势分析:按照月、季度、年统计“项目属性”字段中“重大规划”属性的项目 // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } if (StringUtils.isNull(pmDemandReqVo.getTimeType())) { return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!"); } return pmDemandService.taskQuantityAnalysis(pmDemandReqVo); } //@ApiOperation(value = "新完成采购任务数量")--------接口作废 // @PostMapping("/newFinishPro") //public AjaxResult newFinishPro(@RequestBody PmDemandReqVo pmDemandReqVo) { // // 新完成采购任务数量:本年度状态为“合同待填制”、“项目建设中”、“项目建设完成”的项目 // // 预算金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的预算金额 // //合同金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的合同金额 // return pmDemandService.newFinishPro(); //} @ApiOperation(value = "各阶段采购任务数量分布") @PostMapping("/countEveryStatusNum") @PreAuthorize("@ss.hasPermi('statistical:countEveryStatusNum')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult countEveryStatusNum(@RequestBody PmDemandReqVo pmDemandReqVo) { //指项目进行到各个阶段的数量 //阶段包括:待选取代理、待上传招标文件、待发布公告、待开标、待发布中标公告、中标公式中 //展示信息包括:鼠标上到图表时,展示项目数量和平均消耗时长(平均消耗时长,指所有项目在该阶段完成的平均时间) if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } return pmDemandService.countEveryStatusNum(pmDemandReqVo); } @ApiOperation(value = "采购项目--项目数量分析") @PostMapping("/purchaseProjectNumber") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectNumber')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectNumber(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } Map map = pmDemandService.purchaseProjectNumber(pmDemandReqVo); return success(map); } @ApiOperation(value = "项目执行进度统计") @PostMapping("/purchaseProjectExecute") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectExecute')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectExecute(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } Map map = pmDemandService.purchaseProjectExecute(pmDemandReqVo); return success(map); } @ApiOperation(value = "已完成项目数量统计") @PostMapping("/purchaseProjectCompleteNumber") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectCompleteNumber')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectCompleteNumber(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } if (StringUtils.isNull(pmDemandReqVo.getTimeType())) { return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!"); } List> map = pmDemandService.purchaseProjectCompleteNumber(pmDemandReqVo); return success(map); } @ApiOperation(value = "各阶段项目数量分布") @PostMapping("/purchaseProjectDistribution") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectDistribution')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectDistribution(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } List> map = pmDemandService.purchaseProjectDistribution(pmDemandReqVo); return success(map); } @ApiOperation(value = "项目数量分析") @PostMapping("/purchaseProjectNumberAnalysis") @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectNumberAnalysis')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult purchaseProjectNumberAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) { // 需求单位可查看本单位及其下属单位的统计数据 if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) { return error("登录账号的单位 不能为空!"); } if (StringUtils.isNull(pmDemandReqVo.getTimeType())) { return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!"); } List> map = pmDemandService.purchaseProjectNumberAnalysis(pmDemandReqVo); return success(map); } @ApiOperation(value = "生成分析报告") @PostMapping("/generateAnalysisReport") @PreAuthorize("@ss.hasPermi('statistical:generateAnalysisReport')") @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY) public AjaxResult generateAnalysisReport(@RequestBody SysFileInfo file) { // 创建一个document对象,相当于新建一个word文档(后缀名为.docx)。 XWPFDocument document = new XWPFDocument(); // 创建一个段落对象。 XWPFParagraph paragraph = document.createParagraph(); // 创建一个run。run具体是什么,我也不知道。但是run是这里面的最小单元了。 XWPFRun run = paragraph.createRun(); // 插入图片 // 创建一个输出流 即是该文档的保存位置 try { //文件路径位置和文件名称 run.addPicture(new FileInputStream(file.getFileUrl()), XWPFDocument.PICTURE_TYPE_PNG, file.getFileName(), Units.toEMU(400), Units.toEMU(200)); //文件保存地址 OutputStream outputStream = new FileOutputStream(file.getFileMappingPath()); document.write(outputStream); outputStream.close(); return AjaxResult.success("分析文档已生成"); } catch (IOException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } return AjaxResult.success("分析文档已生成"); } }