buzhanyi 2 år sedan
förälder
incheckning
0ac3d1145f

+ 31 - 6
purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/StatisticalAnalysisController.java

@@ -40,7 +40,7 @@ public class StatisticalAnalysisController extends BaseController {
     private IPmDemandService pmDemandService;
 
 
-    @ApiOperation(value = "项目属性分布")
+    @ApiOperation(value = "项目属性情况统计")
     @PostMapping("/countByProjectAttr")
     //@PreAuthorize("@ss.hasPermi('statistical:countByProjectAttr')")
     @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
@@ -53,19 +53,45 @@ public class StatisticalAnalysisController extends BaseController {
         return AjaxResult.success(resVos);
     }
 
-    @ApiOperation(value = "采购方式分布")
-    @PostMapping("/countByPurchaseMouth")
-    //@PreAuthorize("@ss.hasPermi('statistical:countByPurchaseMouth')")
+    @ApiOperation(value = "项目类型情况统计")
+    @PostMapping("/countByProjectType")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByProjectType')")
     @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
-    public AjaxResult countByPurchaseMouth(@RequestBody PmDemandReqVo pmDemandReqVo) {
+    public AjaxResult countByProjectType(@RequestBody PmDemandReqVo pmDemandReqVo) {
         //按照项目属性统计所有的项目
         if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
             return error("登录账号的单位 不能为空!");
         }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByProjectType(pmDemandReqVo);
+        return AjaxResult.success(resVos);
+    }
+
+    @ApiOperation(value = "采购方式分布")
+    @PostMapping("/countByPurchaseMode")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByPurchaseMode')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByPurchaseMode(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照采购方式统计所有的项目
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
         List<StatisticalChartsResVo> resVos = pmDemandService.countByPurchaseMode(pmDemandReqVo);
         return AjaxResult.success(resVos);
     }
 
+    @ApiOperation(value = "需采转化情况统计")
+    @PostMapping("/countByPurchaseChange")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByPurchaseChange')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByPurchaseChange(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照采购方式统计所有的项目
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByPurchaseChange(pmDemandReqVo);
+        return AjaxResult.success(resVos);
+    }
+
     @ApiOperation(value = "项目金额分布")
     @PostMapping("/countByEvaluation")
     //@PreAuthorize("@ss.hasPermi('statistical:countByEvaluation')")
@@ -171,7 +197,6 @@ public class StatisticalAnalysisController extends BaseController {
     public AjaxResult countEveryStatusNum(@RequestBody PmDemandReqVo pmDemandReqVo) {
         //指项目进行到各个阶段的数量
         //阶段包括:待选取代理、待上传招标文件、待发布公告、待开标、待发布中标公告、中标公式中
-        //展示信息包括:鼠标上到图表时,展示项目数量和平均消耗时长(平均消耗时长,指所有项目在该阶段完成的平均时间)
         if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
             return error("登录账号的单位 不能为空!");
         }

+ 9 - 3
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/StatisticalChartsResVo.java

@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
+
 /**
  * @author buzhanyi
  * 统计图数据
@@ -20,9 +22,13 @@ public class StatisticalChartsResVo {
     /**
      * 对应的数量
      */
-    private String num;
+    private Integer num;
+    /**
+     * 累计总金额
+     */
+    private BigDecimal evaluationTotal;
     /**
-     * 总金额
+     * 关联合同总金额
      */
-    private String evaluationTotal;
+    private BigDecimal evaluationContractTotal;
 }

+ 78 - 2
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java

@@ -253,8 +253,6 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     List<StatisticalChartsResVo> countProjectMajorByMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
-    List<StatisticalChartsResVo> countEveryStatusNumTwo();
-
     StatisticalChartsResVo countMajorProjectExceed(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
     StatisticalChartsResVo countMajorProjectLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
@@ -306,4 +304,82 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      * @return
      */
     List<Map<String, String>> purchaseProjectNumberAnalysisOldYearMonth(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本级和所属采购单位新提报采购需求数量
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectSTS(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 上年度“需求待提交”之后,“合同待填制”之前状态的数据
+     *
+     * @return
+     */
+    StatisticalChartsResVo selectSTSLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 指本年度“需求待提交”之后状态的数据
+     *
+     * @return
+     */
+    StatisticalChartsResVo selectSTSThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 超过计划需求提报时间的项目
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectmeiJiDu(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 项目类型情况统计
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<StatisticalChartsResVo> selectByProjectType(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本月相关采购机构完成采购任务
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectCGThisMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本季度相关采购机构完成采购任务
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectCGThisQua(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 上年度结转
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectZJLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本年度提报
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectTBThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 正常推进周期内的采购任务
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo selectCCThisYear(PmDemandReqVo pmDemandReqVo);
 }

+ 24 - 0
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -308,4 +308,28 @@ public interface IPmDemandService extends IService<PmDemand> {
      * @return
      */
     List<Map<String, String>> purchaseProjectNumberAnalysis(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 需求提报情况
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<StatisticalChartsResVo> demandSubCount(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 项目类型情况统计
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<StatisticalChartsResVo> countByProjectType(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 需采转化情况统计
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<StatisticalChartsResVo> countByPurchaseChange(PmDemandReqVo pmDemandReqVo);
 }

+ 179 - 26
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -1,24 +1,37 @@
 package com.ozs.pm.service.impl;
 
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.text.ParseException;
-import java.util.*;
-import java.util.stream.Collectors;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ozs.base.domain.*;
+import com.ozs.base.domain.BaseAgency;
+import com.ozs.base.domain.BaseExpert;
+import com.ozs.base.domain.BaseNotice;
+import com.ozs.base.domain.BaseNoticeType;
+import com.ozs.base.domain.BaseUnitInformation;
 import com.ozs.base.domain.vo.BaseExpertVo;
 import com.ozs.base.mapper.BaseExpertMapper;
-import com.ozs.base.service.*;
+import com.ozs.base.service.BaseAgencyService;
+import com.ozs.base.service.BaseExpertService;
+import com.ozs.base.service.BaseNoticeService;
+import com.ozs.base.service.BaseNoticeTypeService;
 import com.ozs.common.core.domain.AjaxResult;
-import com.ozs.common.core.domain.entity.*;
-import com.ozs.common.enums.*;
+import com.ozs.common.core.domain.entity.SysDept;
+import com.ozs.common.core.domain.entity.SysDictData;
+import com.ozs.common.core.domain.entity.SysUser;
+import com.ozs.common.enums.BidWinningStatus;
+import com.ozs.common.enums.ExpertType;
+import com.ozs.common.enums.IsExcess;
+import com.ozs.common.enums.NameListType;
+import com.ozs.common.enums.PlanPurchaseMode;
+import com.ozs.common.enums.PmProjectStatus;
+import com.ozs.common.enums.ProcurementMethodSuggest;
+import com.ozs.common.enums.ProjectAttribute;
+import com.ozs.common.enums.ProjectTypes;
+import com.ozs.common.enums.SysFileRefEnum;
+import com.ozs.common.enums.WarnStatus;
 import com.ozs.common.utils.DateUtils;
 import com.ozs.common.utils.RandomUtil;
 import com.ozs.common.utils.SecurityUtils;
@@ -29,24 +42,94 @@ import com.ozs.plan.doman.ProvisionalPlan;
 import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
 import com.ozs.plan.mapper.ProvisionalPlanMapper;
 import com.ozs.plan.service.PlanYearsService;
-import com.ozs.pm.doman.*;
-
-import com.ozs.pm.doman.vo.requestVo.*;
-import com.ozs.pm.doman.vo.responseVo.*;
+import com.ozs.pm.doman.PmAuditDeptRef;
+import com.ozs.pm.doman.PmBidFailure;
+import com.ozs.pm.doman.PmBidOpening;
+import com.ozs.pm.doman.PmBidWinning;
+import com.ozs.pm.doman.PmBidWinningOpeningRef;
+import com.ozs.pm.doman.PmBookBuilding;
+import com.ozs.pm.doman.PmCallQuestion;
+import com.ozs.pm.doman.PmContractInfo;
+import com.ozs.pm.doman.PmDemand;
+import com.ozs.pm.doman.PmDemandExpertRef;
+import com.ozs.pm.doman.PmExpertFeedback;
+import com.ozs.pm.doman.PmProcurementDocumentsReview;
+import com.ozs.pm.doman.PmProjectConstruction;
+import com.ozs.pm.doman.PmReleaseAnnouncement;
+import com.ozs.pm.doman.vo.requestVo.PmBaseExpertExtractReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmBaseExpertFillReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmBidFailureReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmBidOpeningFillReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmBidWinningReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmBookBuildingReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmContractInfoReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmProjectConstructionReqVo;
+import com.ozs.pm.doman.vo.requestVo.PmReleaseAnnouncementReqVo;
+import com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo;
+import com.ozs.pm.doman.vo.responseVo.PmBidFailureResVo;
+import com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo;
+import com.ozs.pm.doman.vo.responseVo.PmBidWinningResVo;
+import com.ozs.pm.doman.vo.responseVo.PmBookBuildingResVo;
+import com.ozs.pm.doman.vo.responseVo.PmCallQuestionResVo;
+import com.ozs.pm.doman.vo.responseVo.PmContractInfoResVo;
+import com.ozs.pm.doman.vo.responseVo.PmDemandResVo;
+import com.ozs.pm.doman.vo.responseVo.PmExpertFeedbackResVo;
+import com.ozs.pm.doman.vo.responseVo.PmProcurementDocumentsReviewResVo;
+import com.ozs.pm.doman.vo.responseVo.PmProjectConstructionResVo;
+import com.ozs.pm.doman.vo.responseVo.PmPurchaseExecutionResVo;
+import com.ozs.pm.doman.vo.responseVo.PmReleaseAnnouncementResVo;
+import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
 import com.ozs.pm.mapper.PmDemandMapper;
-import com.ozs.pm.service.*;
+import com.ozs.pm.service.IPmDemandService;
+import com.ozs.pm.service.IPmFlowChartService;
+import com.ozs.pm.service.PmAuditDeptRefService;
+import com.ozs.pm.service.PmBidFailureService;
+import com.ozs.pm.service.PmBidOpeningService;
+import com.ozs.pm.service.PmBidWinningOpeningRefService;
+import com.ozs.pm.service.PmBidWinningService;
+import com.ozs.pm.service.PmBookBuildingService;
+import com.ozs.pm.service.PmCallQuestionService;
+import com.ozs.pm.service.PmContractInfoService;
+import com.ozs.pm.service.PmDemandExpertRefService;
+import com.ozs.pm.service.PmExpertFeedbackService;
+import com.ozs.pm.service.PmProcurementDocumentsReviewService;
+import com.ozs.pm.service.PmProjectConstructionService;
+import com.ozs.pm.service.PmReleaseAnnouncementService;
 import com.ozs.system.domain.SysFileInfo;
 import com.ozs.system.domain.SysFileRef;
 import com.ozs.system.domain.vo.SysRegionVO;
 import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
 import com.ozs.system.mapper.SysDeptMapper;
 import com.ozs.system.service.*;
+import com.ozs.system.mapper.SysRoleMapper;
+import com.ozs.system.service.ISysDeptService;
+import com.ozs.system.service.ISysDictDataService;
+import com.ozs.system.service.ISysDictTypeService;
+import com.ozs.system.service.ISysRegionService;
+import com.ozs.system.service.ISysUserService;
+import com.ozs.system.service.SysFileRefService;
+import com.ozs.system.service.SysFileService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 
 /**
  * 采购需求Service业务层处理
@@ -1847,11 +1930,11 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         //执行滞后采购项目:本年度所有的逾期项目数
         //预算金额:本年度所有逾期项目累加的预算金额
         StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceed(pmDemandReqVo);
-        resMap.put("执行滞后采购项目", resVo.getNum());
-        resMap.put("预算金额", resVo.getEvaluationTotal());
+        resMap.put("执行滞后采购项目", resVo.getNum() + "");
+        resMap.put("预算金额", resVo.getEvaluationTotal() + "");
         //滞后项目数量占比:指本年度逾期项目数量/本年度所有项目数量
         Integer thisYear = pmDemandMapper.countThisYear(pmDemandReqVo);
-        resMap.put("滞后项目数量占比", getPercent(Integer.parseInt(resVo.getNum()), thisYear));
+        resMap.put("滞后项目数量占比", getPercent(resVo.getNum(), thisYear));
         return AjaxResult.success(resMap);
     }
 
@@ -1876,7 +1959,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     pmDemandReqVo.setQuarter(i);
                     StatisticalChartsResVo quarter = pmDemandMapper.countProjectExceedQuarter(pmDemandReqVo);
                     if (ObjectUtils.isEmpty(quarter)) {
-                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", "0", "0");
+                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
                         quarter = vo;
                         quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
                     }
@@ -1893,7 +1976,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     pmDemandReqVo.setMonth(i);
                     StatisticalChartsResVo month = pmDemandMapper.countProjectExceedMonth(pmDemandReqVo);
                     if (ObjectUtils.isEmpty(month)) {
-                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", "0", "0");
+                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", 0, BigDecimal.valueOf(0), BigDecimal.valueOf(0));
                         month = vo;
                         month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
                     }
@@ -1937,14 +2020,13 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Override
     public AjaxResult countEveryStatusNum(PmDemandReqVo pmDemandReqVo) {
         //指项目进行到各个阶段的数量
-        //阶段包括:待选取代理、待上传招标文件、待发布公告、待开标、待发布中标公告、中标公式中
+        //阶段包括:采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
         //是-1就是查询自己及子孙级以下,否则只查询指定部门
         pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
         List<StatisticalChartsResVo> everyStatusNum = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
         if (!ObjectUtils.isEmpty(everyStatusNum) && everyStatusNum.size() > 0) {
             for (StatisticalChartsResVo vo : everyStatusNum) {
                 switch (vo.getColumnName()) {
-
                     case "9":
                         vo.setColumnName(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getInfo());
                         break;
@@ -1971,10 +2053,6 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                         break;
                     case "17":
                         vo.setColumnName(PmProjectStatus.POST_BID_QUERY.getInfo());
-                    case "18":
-                        vo.setColumnName(PmProjectStatus.WASTE_BID_RETURN.getInfo());
-                    case "19":
-                        vo.setColumnName(PmProjectStatus.CONTRACT_WAIT_FILL.getInfo());
                         break;
                     default: {
                     }
@@ -3059,6 +3137,81 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return mapReturn;
     }
 
+    @Override
+    public List<StatisticalChartsResVo> demandSubCount(PmDemandReqVo pmDemandReqVo) {
+        //是-1就是查询自己及子孙级以下,否则只查询指定部门
+        pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
+        List<StatisticalChartsResVo> resVos = new ArrayList<>();
+        //本级和所属采购单位新提报采购需求数量--本年度中本级及下级审核的“需求待提交”之后状态的数据
+        StatisticalChartsResVo selectSTS = pmDemandMapper.selectSTS(pmDemandReqVo);
+        resVos.add(selectSTS);
+        //上年度结转和本年度提报的采购需求累计数量
+        //1.上年度结转:上年度“需求待提交”之后,“合同待填制”之前状态的数据
+        //2.本年度提报:指本年度“需求待提交”之后状态的数据
+        StatisticalChartsResVo lastYear = pmDemandMapper.selectSTSLastYear(pmDemandReqVo);
+        StatisticalChartsResVo thisYear = pmDemandMapper.selectSTSThisYear(pmDemandReqVo);
+        lastYear.setColumnName("上年度结转和本年度提报的采购需求累计数量");
+        lastYear.setNum(lastYear.getNum() + thisYear.getNum());
+        resVos.add(lastYear);
+        //未按季度采购明细计划提报或调整延迟的数量--超过计划需求提报时间的项目
+        StatisticalChartsResVo meiJiDu = pmDemandMapper.selectmeiJiDu(pmDemandReqVo);
+        meiJiDu.setColumnName("未按季度采购明细计划提报或调整延迟的数量");
+        resVos.add(meiJiDu);
+        return resVos;
+    }
+
+    @Override
+    public List<StatisticalChartsResVo> countByProjectType(PmDemandReqVo pmDemandReqVo) {
+        //是-1就是查询自己及子孙级以下,否则只查询指定部门
+        pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));  //项目类型情况统计--根据项目类型:物资类、服务类、工程类、装备类统计项目数量及预算金额
+        List<StatisticalChartsResVo> byProjectType = pmDemandMapper.selectByProjectType(pmDemandReqVo);
+        for (StatisticalChartsResVo vo : byProjectType) {
+            switch (vo.getColumnName()) {
+                case "0":
+                    vo.setColumnName(ProjectTypes.EQUIPMENTTYPE.getInfo());
+                    break;
+                case "1":
+                    vo.setColumnName(ProjectTypes.MATERIALTYPE.getInfo());
+                    break;
+                case "2":
+                    vo.setColumnName(ProjectTypes.SERVICESTYPE.getInfo());
+                    break;
+                case "3":
+                    vo.setColumnName(ProjectTypes.PLANTOEXAMINETYPE.getInfo());
+                    break;
+                default:
+            }
+        }
+        return byProjectType;
+    }
+
+    @Override
+    public List<StatisticalChartsResVo> countByPurchaseChange(PmDemandReqVo pmDemandReqVo) {
+        //是-1就是查询自己及子孙级以下,否则只查询指定部门
+        pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
+        List<StatisticalChartsResVo> byChange = new ArrayList<>();
+        //本月相关采购机构完成采购任务--状态为“标后质疑”后的数据
+        StatisticalChartsResVo thisMonth = pmDemandMapper.selectCGThisMonth(pmDemandReqVo);
+        byChange.add(thisMonth);
+        //本季度相关采购机构完成采购任务--状态为“标后质疑”后的数据
+        StatisticalChartsResVo thisQua = pmDemandMapper.selectCGThisQua(pmDemandReqVo);
+        byChange.add(thisQua);
+        //上年度结转和本年度提报的采购需求中累计已完成的采购任务
+        //上年度结转:上年度“标后质疑”之后,“合同待填制”之前状态的数据
+        //本年度提报:状态为“标后质疑”后的数据
+        StatisticalChartsResVo zLastYear = pmDemandMapper.selectZJLastYear(pmDemandReqVo);
+        StatisticalChartsResVo tThisYear = pmDemandMapper.selectTBThisYear(pmDemandReqVo);
+        tThisYear.setNum(tThisYear.getNum() + zLastYear.getNum());
+        tThisYear.setEvaluationTotal(tThisYear.getEvaluationTotal().add(zLastYear.getEvaluationTotal()));
+        tThisYear.setEvaluationContractTotal(tThisYear.getEvaluationContractTotal().add(zLastYear.getEvaluationContractTotal()));
+        tThisYear.setColumnName("上年度结转和本年度提报的采购需求中累计已完成的采购任务");
+        byChange.add(tThisYear);
+        //正常推进周期内的采购任务--本年度项目未超过计划完成采购时间的数据
+        StatisticalChartsResVo cThisYear = pmDemandMapper.selectCCThisYear(pmDemandReqVo);
+        byChange.add(cThisYear);
+        return byChange;
+    }
+
     //查询不同状态下的项目数据
     public List<PmDemandResVo> getListByStatus(String projectStatus) {
         LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();

+ 200 - 31
purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

@@ -39,15 +39,21 @@
     <select id="purchaseProjectStatisticalYWC" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="java.util.Map">
         select count(d.demand_id) countYWC, ifnull(sum(c.contract_amount), 0) evaluationYWC
-        from pm_demand d
-        LEFT JOIN pm_contract_info c
-        ON d.demand_id = c.demand_id
+        from pm_demand d, pm_contract_info c,
+        (SELECT COUNT(demand_id) countYWC ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE
+        purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status =21 ) de
+        where d.demand_id = c.demand_id
         AND d.purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND d.project_status = '17'
+        AND d.project_status =21
     </select>
 
     <select id="purchaseProjectStatisticalXCJ" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -60,35 +66,41 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status != '17'
+        AND project_status !=17
         and year(plan_demand_sub_time) = year(NOW())
     </select>
 
     <select id="purchaseProjectStatisticalQNWC" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="java.util.Map">
         -- DATE_FORMAT(plan_demand_sub_time,'%Y')
-        select count(d.demand_id) countYWC, ifnull(sum(c.contract_amount), 0) evaluationQNWC
-        from pm_demand d
-        LEFT JOIN pm_contract_info c
-        ON d.demand_id = c.demand_id
+        select de.countYWC, ifnull(sum(c.contract_amount), 0) evaluationQNWC
+        from pm_demand d, pm_contract_info c,
+        (SELECT COUNT(demand_id) countYWC ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE
+        purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status =21 and year(create_time) = year(NOW())-1) de
+        WHERE d.demand_id = c.demand_id
         AND d.purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND d.project_status = '17'
+        AND d.project_status =21 and year(d.create_time) = year(NOW())-1
     </select>
 
     <select id="countByProjectAttr" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
-        SELECT project_status columnName, COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        SELECT project_attr columnName, COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
         FROM `pm_demand`
         WHERE purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        GROUP BY project_status
+        GROUP BY project_attr
     </select>
 
     <select id="countByPurchaseMode" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -291,18 +303,11 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND `project_status` IN (9, 10, 11, 12, 13, 14)
+        AND `project_status` IN (9, 10, 11, 12, 13, 14,15,16,17)
         and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
         GROUP BY project_status
     </select>
 
-    <select id="countEveryStatusNumTwo" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
-        SELECT project_status columnName, COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
-        FROM `pm_demand`
-        WHERE `project_status` IN (15, 16, 17)
-          and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
-        GROUP BY project_status
-    </select>
 
     <select id="selectByPlanId" parameterType="java.lang.Long" resultType="com.ozs.pm.doman.PmDemand">
         select *
@@ -313,10 +318,16 @@
     <select id="countMajorProjectLastYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
         # AND find_in_set('1', project_attr)
-        SELECT YEAR(NOW()) - 1 columnName, COUNT(d.demand_id) num, ifnull(sum(c.contract_amount), 0) evaluationTotal
-        FROM pm_demand d
-        LEFT JOIN pm_contract_info c
-        ON d.demand_id = c.demand_id
+        SELECT YEAR(NOW()) - 1 columnName, de.num, ifnull(sum(c.contract_amount), 0) evaluationContractTotal
+        FROM pm_demand d, pm_contract_info c,
+        (SELECT COUNT(demand_id) num ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE purchase_dept_id
+        in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND find_in_set('1', project_attr) AND DATE_FORMAT(create_time, '%Y') =YEAR(NOW()) - 1 ) de
+        WHERE d.demand_id = c.demand_id
         AND find_in_set('1', d.project_attr)
         AND d.purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
@@ -364,7 +375,7 @@
         AND DATE_FORMAT(create_time, '%Y') = #{year}
     </select>
 
-    <!-- 正常推项目 -->
+    <!-- 正常推项目 -->
     <select id="purchaseProjectExecuteNormalPropulsion" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="java.util.Map">
         select count(demand_id) countNormalPropulsion, ifnull(sum(evaluation), 0) evaluationNormalPropulsion
@@ -374,7 +385,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status != '17'
+        AND project_status !=21
         and (real_demand_commit_time > plan_demand_sub_time
         or real_purchase_finish_time > plan_purchase_finish_time
         or real_deliver_time > plan_deliver_time)
@@ -389,7 +400,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status in (4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
+        AND project_status !=21
     </select>
 
     <select id="selectMinYear" resultType="java.lang.Integer">
@@ -411,7 +422,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status = '17'
+        AND project_status = '21'
         ) a
         left join (
         select contract_amount, demand_id
@@ -434,7 +445,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status = '17'
+        AND project_status = '21'
         and year(plan_demand_sub_time) = year(NOW())
         ) a
         left join (
@@ -457,7 +468,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status = '17'
+        AND project_status = '21'
         and year(plan_demand_sub_time) = year(NOW())
         ) a
         left join (
@@ -620,7 +631,165 @@
                date_format(plan_demand_sub_time, '%m') yy
         from pm_demand
         where purchase_dept_id = #{purchaseDeptId}
-          AND year(plan_demand_sub_time) = year(NOW() - 1)
+          AND year(plan_demand_sub_time) = YEAR(NOW()) - 1
         group by date_format(plan_demand_sub_time, '%y%m')
     </select>
+
+    <select id="selectSTSLastYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT ifnull(COUNT(demand_id),0)num, ifnull(sum(evaluation),0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND `project_status` IN (6,7,8,9,10,11,12,13,14,15, 16, 17)
+        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())-1
+    </select>
+
+    <select id="selectSTSThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT ifnull(COUNT(demand_id),0)num, ifnull(sum(evaluation),0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND `project_status` &gt; 4
+        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+    </select>
+
+    <select id="selectmeiJiDu" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND (real_demand_commit_time &gt; plan_demand_sub_time)
+    </select>
+
+    <select id="selectByProjectType" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT project_type columnName, COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        GROUP BY project_type
+    </select>
+
+    <select id="selectSTS" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT ifnull(COUNT(demand_id),0)num, ifnull(sum(evaluation),0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND `project_status` &gt; 4
+        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+    </select>
+
+    <select id="selectCGThisMonth" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT MONTH(NOW()) columnName, de.num, de.evaluationTotal,ifnull(sum(c.contract_amount), 0)
+        evaluationContractTotal
+        FROM pm_demand d,pm_contract_info c,
+        (SELECT COUNT(demand_id) num ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE purchase_dept_id
+        in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status &gt; 16 AND DATE_FORMAT(create_time, '%Y') =MONTH(NOW()) ) de
+        where d.demand_id = c.demand_id and purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND d.project_status &gt; 16
+        AND DATE_FORMAT(d.create_time, '%Y') = MONTH(NOW())
+    </select>
+
+    <select id="selectCGThisQua" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT QUARTER(NOW()) columnName, de.num, de.evaluationTotal,ifnull(sum(c.contract_amount), 0)
+        evaluationContractTotal
+        FROM pm_demand d,pm_contract_info c,
+        (SELECT COUNT(demand_id) num ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE purchase_dept_id
+        in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status &gt; 17 AND DATE_FORMAT(create_time, '%Y') =QUARTER(NOW()) ) de
+        WHERE d.demand_id = c.demand_id and purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND d.project_status &gt; 17
+        AND DATE_FORMAT(d.create_time, '%Y') = QUARTER(NOW())
+    </select>
+
+    <select id="selectZJLastYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT YEAR(NOW())-1 columnName, de.num,de.evaluationTotal,ifnull(sum(c.contract_amount), 0)
+        evaluationContractTotal
+        FROM pm_demand d, pm_contract_info c,
+        (SELECT COUNT(demand_id) num ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE purchase_dept_id
+        in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status IN (17,18) AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW())-1 ) de
+        WHERE d.demand_id = c.demand_id and purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND d.project_status IN (17,18)
+        AND DATE_FORMAT(d.create_time, '%Y') = YEAR(NOW())-1
+    </select>
+
+    <select id="selectTBThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT YEAR(NOW()) columnName, de.num,de.evaluationTotal,ifnull(sum(c.contract_amount), 0)
+        evaluationContractTotal
+        FROM pm_demand d, pm_contract_info c,
+        (SELECT COUNT(demand_id) num ,ifnull(sum(evaluation), 0) evaluationTotal FROM pm_demand WHERE purchase_dept_id
+        in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status &gt; 17 AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW()) ) de
+        WHERE d.demand_id = c.demand_id and purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND d.project_status &gt; 17
+        AND DATE_FORMAT(d.create_time, '%Y') = YEAR(NOW())
+    </select>
+
+    <select id="selectCCThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        SELECT YEAR(NOW()) columnName,ifnull(demand_id, 0) num,ifnull(sum(evaluation), 0) evaluationTotal
+        FROM pm_demand
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND real_purchase_finish_time &lt;=plan_purchase_finish_time
+        AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+    </select>
 </mapper>