瀏覽代碼

首页预警项目和
统计分析--采购管理部门“执行率”、“规划执行率”、“完成率”、“滞后率”、“偏差率”、“流废标率”

buzhanyi 1 年之前
父節點
當前提交
c183766ecb

+ 21 - 0
purchase-admin/src/main/java/com/ozs/web/controller/home/SystemHomepageController.java

@@ -99,6 +99,13 @@ public class SystemHomepageController extends BaseController {
         return planYearsService.demandUnitWillManipulateTotal();
     }
 
+    @ApiOperation(value = "需求单位首页查看预警项目")
+    @GetMapping("/demandUnit/will/alertProject")
+    @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)
+    public AjaxResult demandUnitWillAlertProject() {
+        return planYearsService.demandUnitWillAlertProject();
+    }
+
     @ApiOperation(value = "需求单位首页待办事项(数量)")
     @GetMapping("/demandUnit/will/totalNum")
     @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)
@@ -143,6 +150,13 @@ public class SystemHomepageController extends BaseController {
         return planYearsService.purchasingManagementWillManipulateTotal();
     }
 
+    @ApiOperation(value = "采购管理部门首页查看预警项目")
+    @GetMapping("/purchasingManagement/will/alertProject")
+    @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)
+    public AjaxResult purchasingManagementWillAlertProject() {
+        return planYearsService.purchasingManagementWillAlertProject();
+    }
+
     @ApiOperation(value = "采购管理部门首页待办事项(数量)")
     @GetMapping("/purchasingManagement/will/totalNum")
     @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)
@@ -181,6 +195,13 @@ public class SystemHomepageController extends BaseController {
         return pmDemandService.procurementOfficeWillManipulateTotal();
     }
 
+    @ApiOperation(value = "采购办首页查看预警项目")
+    @GetMapping("/procurementOffice/will/alertProject")
+    @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)
+    public AjaxResult procurementOfficeWillAlertProject() {
+        return pmDemandService.procurementOfficeWillAlertProject();
+    }
+
     @ApiOperation(value = "采购办首页待办事项(数量)")
     @GetMapping("/procurementOffice/will/totalNum")
     @Log(title = ModularConstans.systemHome, businessType = BusinessType.QUERY)

+ 12 - 1
purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/AnalysisController.java

@@ -32,6 +32,17 @@ public class AnalysisController extends BaseController {
     @Resource
     private IPmDemandService pmDemandService;
 
+    @ApiOperation(value = "采购管理部门“执行率”、“规划执行率”、“完成率”、“滞后率”、“偏差率”、“流废标率”统计")
+    @PostMapping("/demandZGWZPL")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult demandZGWZPL(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        Map<String, String> maps = pmDemandService.demandZGWZPL(pmDemandReqVo);
+        return success(maps);
+    }
+
     @ApiOperation(value = "需求提报情况")
     @PostMapping("/demandSubCount")
     //@PreAuthorize("@ss.hasPermi('statistical:demandSubCount')")
@@ -233,7 +244,7 @@ public class AnalysisController extends BaseController {
         if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
             return error("登录账号的单位 不能为空!");
         }
-        return pmDemandService.countEveryStatusNum(pmDemandReqVo);
+        return pmDemandService.countEveryStatusNumThisYear(pmDemandReqVo);
     }
 
     @ApiOperation(value = "滞后直接原因")

+ 1 - 1
purchase-system/src/main/java/com/ozs/base/domain/BaseAgency.java

@@ -38,7 +38,7 @@ public class BaseAgency extends BaseDto {
     // 类型
     @ApiModelProperty("类型")
     @NotEmpty(message = "类型不能为空")
-    private Integer companyType;
+    private String companyType;
     /**
      * 采购类型转义
      */

+ 14 - 0
purchase-system/src/main/java/com/ozs/plan/service/PlanYearsService.java

@@ -227,6 +227,13 @@ public interface PlanYearsService extends IService<PlanYears> {
      */
     AjaxResult demandUnitWillManipulateTotal();
 
+    /**
+     * 需求单位首页预警项目(全部)
+     *
+     * @return
+     */
+    AjaxResult demandUnitWillAlertProject();
+
     /**
      * 需求单位首页待办事项(数量)
      *
@@ -255,6 +262,13 @@ public interface PlanYearsService extends IService<PlanYears> {
      */
     AjaxResult purchasingManagementWillManipulateTotal();
 
+    /**
+     * 采购管理部门首页查看预警项目
+     *
+     * @return
+     */
+    AjaxResult purchasingManagementWillAlertProject();
+
     /**
      * 采购管理部门首页待办事项(数量
      *

+ 50 - 0
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -881,6 +881,33 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         return AjaxResult.success(planAndProjectToHome(planRes, resVos));
     }
 
+    /**
+     * 需求单位首页预警项目(全部)
+     */
+    @Override
+    public AjaxResult demandUnitWillAlertProject() {
+        //计划待提交,需求待提交,合同待填制,项目建设待完成
+        String isAd = "false";
+        List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode(), isAd);
+        List<PlanQuarterResponseVo> planRes2 = new ArrayList<>();
+        List<PmDemand> demandRes = demandService.demandWaitCommit();
+        demandRes.addAll(demandService.contractWaitFilled());
+        demandRes.addAll(demandService.projectWaitFinish());
+        List<PmDemandResVo> resVos = demandService.listToVoList(demandRes);
+        for (PlanQuarterResponseVo planRe : planRes) {
+            if (!planRe.getTipsMessage().equals("") && planRe.getTipsMessage().length() > 0) {
+                planRes2.add(planRe);
+            }
+        }
+        List<PmDemandResVo> resVos2 = new ArrayList<>();
+        for (PmDemandResVo resVo : resVos) {
+            if (!resVo.getTipsMessage().equals("") && resVo.getTipsMessage().length() > 0) {
+                resVos2.add(resVo);
+            }
+        }
+        return AjaxResult.success(planAndProjectToHome(planRes2, resVos2));
+    }
+
     /**
      * 需求单位待办事项
      */
@@ -933,6 +960,29 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         return AjaxResult.success(planAndProjectToHome(planRes, resVos));
     }
 
+    @Override
+    public AjaxResult purchasingManagementWillAlertProject() {
+        //计划待审核,需求待审核,任务待下达
+        String isAd = "true";
+        List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAIEXAMINE.getCode(), isAd);
+        List<PlanQuarterResponseVo> planRes2 = new ArrayList<>();
+        List<PmDemand> demandRes = demandService.demandWaitExamine();
+        demandRes.addAll(demandService.taskWaitRelease());
+        List<PmDemandResVo> resVos = demandService.listToVoList(demandRes);
+        List<PmDemandResVo> resVos2 = new ArrayList<>();
+        for (PlanQuarterResponseVo planRe : planRes) {
+            if (!planRe.getTipsMessage().equals("") && planRe.getTipsMessage().length() > 0) {
+                planRes2.add(planRe);
+            }
+        }
+        for (PmDemandResVo resVo : resVos) {
+            if (!resVo.getTipsMessage().equals("") && resVo.getTipsMessage().length() > 0) {
+                resVos2.add(resVo);
+            }
+        }
+        return AjaxResult.success(planAndProjectToHome(planRes2, resVos2));
+    }
+
     /**
      * 计划数据和项目数据一起返回给 首页--待办事项
      *

+ 34 - 1
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java

@@ -321,7 +321,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
     /**
      * @return
      */
-    StatisticalChartsResVo countEveryStatusNum(@Param("vo") PmDemandReqVo pmDemandReqVo);
+    StatisticalChartsResVo countEveryStatusNumThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
     /**
      * 通过计划ID查询项目
@@ -615,4 +615,37 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      * @return
      */
     StatisticalChartsResVo countProjectACT_Mon(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 目属性为“规划任务项目”和“重大规划项目”,并且项目状态为“需求待审核”及以后的所有项目状态的项目数
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo ghrwAndZdghProjectByStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 项目实施周期超过 90日
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    Map<String, Object> purchaseProjectConducted90Days(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 没有进行需求提报并超过计划需求提报时间的计划数
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    Map<String, Object> purchaseProjectWTB(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 计划进行需求提报后的计划数量
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    Map<String, Object> purchaseProjectYTB(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
 }

+ 16 - 1
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -200,6 +200,13 @@ public interface IPmDemandService extends IService<PmDemand> {
      */
     AjaxResult procurementOfficeWillManipulateTotal();
 
+    /**
+     * 采购办首页待办事项(全部)
+     *
+     * @return
+     */
+    AjaxResult procurementOfficeWillAlertProject();
+
     /**
      * 采购办首页待办事项(数量)
      *
@@ -294,7 +301,7 @@ public interface IPmDemandService extends IService<PmDemand> {
      *
      * @return
      */
-    AjaxResult countEveryStatusNum(PmDemandReqVo pmDemandReqVo);
+    AjaxResult countEveryStatusNumThisYear(PmDemandReqVo pmDemandReqVo);
 
     /**
      * 通过计划ID查询项目
@@ -428,4 +435,12 @@ public interface IPmDemandService extends IService<PmDemand> {
      * @return
      */
     public List<Long> isQueryZD(Integer queryZd);
+
+    /**
+     * "采购管理部门“执行率”、“规划执行率”、“完成率”、“滞后率”、“偏差率”、“流废标率”统计"
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    Map<String, String> demandZGWZPL(PmDemandReqVo pmDemandReqVo);
 }

+ 219 - 15
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ozs.pm.service.impl;
 
 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;
@@ -25,6 +24,7 @@ import com.ozs.common.core.domain.entity.SysRole;
 import com.ozs.common.core.domain.entity.SysUser;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.enums.BidWinningStatus;
+import com.ozs.common.enums.DataIsDelete;
 import com.ozs.common.enums.ExpertType;
 import com.ozs.common.enums.IsExcess;
 import com.ozs.common.enums.NameListType;
@@ -32,6 +32,7 @@ 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.ProjectStatus;
 import com.ozs.common.enums.ProjectTypes;
 import com.ozs.common.enums.SysFileRefEnum;
 import com.ozs.common.enums.WarnStatus;
@@ -41,10 +42,12 @@ import com.ozs.common.utils.SecurityUtils;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.bean.BeanUtils;
 import com.ozs.home.domain.vo.HomeToDoQueryResVo;
+import com.ozs.plan.doman.PlanQuarter;
 import com.ozs.plan.doman.PlanYears;
 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.PlanQuarterService;
 import com.ozs.plan.service.PlanYearsService;
 import com.ozs.pm.doman.PmAuditDeptRef;
 import com.ozs.pm.doman.PmBidFailure;
@@ -123,6 +126,7 @@ import org.springframework.util.ObjectUtils;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -202,6 +206,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Autowired
     private PlanYearsService planYearsService;
 
+    @Autowired
+    private PlanQuarterService planQuarterService;
+
     @Autowired
     private ISysRegionService iSysRegionService;
 
@@ -397,10 +404,22 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             }
         }
         List<SysDictData> dictDataT = dictTypeService.selectDictDataByType(Constants.SYS_PROJECT_TYPE);
-        for (SysDictData data : dictDataT) {
-            if (data.getDictValue().equals(baseAgency.getCompanyType() + "")) {
-                baseAgency.setCompanyTypeName(data.getDictLabel());
-                break;
+        if (baseAgency.getCompanyType().length() == 1) {
+            for (SysDictData data : dictDataT) {
+                if (data.getDictValue().equals(baseAgency.getCompanyType() + "")) {
+                    baseAgency.setCompanyTypeName(data.getDictLabel());
+                    break;
+                }
+            }
+        } else if (baseAgency.getCompanyType().split(",").length > 1) {
+            String[] split = baseAgency.getCompanyType().split(",");
+            for (String s : split) {
+                for (SysDictData data : dictDataT) {
+                    if (data.getDictValue().equals(s)) {
+                        baseAgency.setCompanyTypeName(data.getDictLabel());
+                        break;
+                    }
+                }
             }
         }
         pmPurchaseExecutionResVo.setBaseAgency(baseAgency);
@@ -2109,6 +2128,47 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return AjaxResult.success(homeRes);
     }
 
+    @Override
+    public AjaxResult procurementOfficeWillAlertProject() {
+        List<HomeToDoQueryResVo> homeRes = new ArrayList<>();
+        // 采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
+        List<PmDemandResVo> demandRes = new ArrayList<>();
+        List<String> projectStatus = new ArrayList<>();
+        projectStatus.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
+        projectStatus.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
+        projectStatus.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
+        projectStatus.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
+        projectStatus.add(PmProjectStatus.PRE_BID_QUERY.getCode());
+        projectStatus.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
+        projectStatus.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
+        projectStatus.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
+        projectStatus.add(PmProjectStatus.POST_BID_QUERY.getCode());
+        demandRes = listToVoList(getListByStatusTotalCGB(projectStatus));
+        //计划数据--发函催告
+        List<PlanQuarterResponseVo> planRes = planYearsService.willSendLetter();
+        //转为首页table展示数据
+        if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
+            for (PmDemandResVo demandResVo : demandRes) {
+                if (!demandResVo.getTipsMessage().equals("") && demandResVo.getTipsMessage().length() > 0) {
+                    HomeToDoQueryResVo home = new HomeToDoQueryResVo();
+                    home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
+                    BeanUtils.copyProperties(demandResVo, home);
+                    homeRes.add(home);
+                }
+            }
+        }
+        if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
+            for (PlanQuarterResponseVo planVo : planRes) {
+                if (!planVo.getTipsMessage().equals("") && planVo.getTipsMessage().length() > 0) {
+                    HomeToDoQueryResVo home = new HomeToDoQueryResVo();
+                    BeanUtils.copyProperties(planVo, home);
+                    homeRes.add(home);
+                }
+            }
+        }
+        return AjaxResult.success(homeRes);
+    }
+
     @Override
     public AjaxResult procurementOfficeWillManipulateTotalNum() {
         List<StatisticalChartsResVo> result = new ArrayList<>();
@@ -2491,7 +2551,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     }
 
     @Override
-    public AjaxResult countEveryStatusNum(PmDemandReqVo pmDemandReqVo) {
+    public AjaxResult countEveryStatusNumThisYear(PmDemandReqVo pmDemandReqVo) {
         //阶段包括:采购需求对接,专家意见反馈,采购文件编制审核,采购公告发布,标前质疑投诉,待开标,评标结果公告,流废标处置,标后质疑
         //是-1就是查询自己及子孙级以下,否则只查询指定部门
         if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
@@ -2503,47 +2563,47 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
         //项目进行到各个阶段的数量
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode()));
-        StatisticalChartsResVo everyStatusNum9 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum9 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum9.setColumnName(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getInfo());
         everyStatusNum.add(everyStatusNum9);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.EXPERT_FEEDBACK.getCode()));
-        StatisticalChartsResVo everyStatusNum10 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum10 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum10.setColumnName(PmProjectStatus.EXPERT_FEEDBACK.getInfo());
         everyStatusNum.add(everyStatusNum10);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode()));
-        StatisticalChartsResVo everyStatusNum11 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum11 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum11.setColumnName(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getInfo());
         everyStatusNum.add(everyStatusNum11);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode()));
-        StatisticalChartsResVo everyStatusNum12 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum12 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum12.setColumnName(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getInfo());
         everyStatusNum.add(everyStatusNum12);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.PRE_BID_QUERY.getCode()));
-        StatisticalChartsResVo everyStatusNum13 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum13 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum13.setColumnName(PmProjectStatus.PRE_BID_QUERY.getInfo());
         everyStatusNum.add(everyStatusNum13);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.WAIT_OPEN_BID.getCode()));
-        StatisticalChartsResVo everyStatusNum14 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum14 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum14.setColumnName(PmProjectStatus.WAIT_OPEN_BID.getInfo());
         everyStatusNum.add(everyStatusNum14);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode()));
-        StatisticalChartsResVo everyStatusNum15 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum15 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum15.setColumnName(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getInfo());
         everyStatusNum.add(everyStatusNum15);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.WASTE_BID_HANDLE.getCode()));
-        StatisticalChartsResVo everyStatusNum16 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum16 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum16.setColumnName(PmProjectStatus.WASTE_BID_HANDLE.getInfo());
         everyStatusNum.add(everyStatusNum16);
 
         pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.POST_BID_QUERY.getCode()));
-        StatisticalChartsResVo everyStatusNum17 = pmDemandMapper.countEveryStatusNum(pmDemandReqVo);
+        StatisticalChartsResVo everyStatusNum17 = pmDemandMapper.countEveryStatusNumThisYear(pmDemandReqVo);
         everyStatusNum17.setColumnName(PmProjectStatus.POST_BID_QUERY.getInfo());
         everyStatusNum.add(everyStatusNum17);
 
@@ -4615,5 +4675,149 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return demandId;
     }
 
+    @Override
+    public Map<String, String> demandZGWZPL(PmDemandReqVo pmDemandReqVo) {
+        List<StatisticalChartsResVo> resVos = new ArrayList<>();
+        Long userId = SecurityUtils.getUserId();
+        //是-1就是查询自己及子孙级以下,否则只查询指定部门
+        if (pmDemandReqVo.getPurchaseDeptId().equals(-1)) {
+            pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
+        } else {
+            pmDemandReqVo.setDemandIdAll(isQueryZD(pmDemandReqVo.getPurchaseDeptId()));
+        }
+        //"采购管理部门“执行率”、“规划执行率”、“完成率”、“滞后率”、“偏差率”、“流废标率”
+        //(1)执行率:年度计划中已提报需求项目占比
+        //项目状态为“需求待审核”及以后的所有项目状态的项目数/年度计划中所有的项目数*100%
+        LambdaQueryWrapper<PlanYears> lw = new LambdaQueryWrapper<PlanYears>();
+        if (!userId.equals(Long.valueOf("1"))) {
+            lw.eq(PlanYears::getCreated, userId);
+        }
+        lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+        lw.orderBy(true, false, PlanYears::getCreateTime);
+        //年度计划中所有的项目数
+        long countPlanYear = planYearsService.count(lw);
+        //状态为“需求待审核”以后的数据
+        List<String> afsh = new ArrayList<>();
+        afsh.add(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
+        afsh.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
+        afsh.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
+        afsh.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
+        afsh.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
+        afsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
+        afsh.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
+        afsh.add(PmProjectStatus.PRE_BID_QUERY.getCode());
+        afsh.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
+        afsh.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
+        afsh.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
+        afsh.add(PmProjectStatus.POST_BID_QUERY.getCode());
+        afsh.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
+        afsh.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+        afsh.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
+        afsh.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
+        pmDemandReqVo.setProjectStatusList(afsh);
+        Map<String, Object> num1 = pmDemandMapper.purchaseProjectDistribution(pmDemandReqVo);
+        int countAfsh = Integer.parseInt(num1.get("countNumber").toString());
+        //执行率
+        String zxl = getPercent(countAfsh, Math.toIntExact(countPlanYear));
+        //(2)规划执行率:年度“规划任务项目”和“重大规划项目”计划中已提报需求项目占比
+        //项目属性为“规划任务项目”和“重大规划项目”,
+        // 并且项目状态为“需求待审核”及以后的所有项目状态的项目数/年度计划中所有的项目数*100%
+        StatisticalChartsResVo resVo1 = pmDemandMapper.ghrwAndZdghProjectByStatus(pmDemandReqVo);
+        //规划执行率
+        String ghzxl = getPercent(resVo1.getNum(), Math.toIntExact(countPlanYear));
+        //(3)完成率:已提报需求项目中完成采购项目占比
+        //项目状态为“合同待填制”及以后的所有项目状态的项目数/项目状态为“需求待审核”及以后的所有项目状态的项目数*100%
+        List<String> afhttz = new ArrayList<>();
+        afhttz.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+        afhttz.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
+        afhttz.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
+        pmDemandReqVo.setProjectStatusList(afhttz);
+        //“合同待填制”及以后的所有项目状态的项目数
+        Map<String, Object> num2 = pmDemandMapper.purchaseProjectDistribution(pmDemandReqVo);
+        int countAfhttz = Integer.parseInt(num2.get("countNumber").toString());
+        //完成率
+        String wcl = getPercent(countAfhttz, countAfsh);
+        //(4)滞后率:以需求审核通过项目为基数,实施周期超过 90日的项目占比
+        //进行“任务下达”后,开始计算时间,统计该项目超过90日项目状态没有到“合同待填制”的项目数/任务下达后的总项目数
+        List<String> afRwxd = new ArrayList<>();
+        afRwxd.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
+        afRwxd.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
+        afRwxd.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
+        afRwxd.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
+        afRwxd.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
+        afRwxd.add(PmProjectStatus.PRE_BID_QUERY.getCode());
+        afRwxd.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
+        afRwxd.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
+        afRwxd.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
+        afRwxd.add(PmProjectStatus.POST_BID_QUERY.getCode());
+        afRwxd.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
+        afRwxd.add(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+        afRwxd.add(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
+        afRwxd.add(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
+        pmDemandReqVo.setProjectStatusList(afRwxd);
+        //“任务下达”后
+        Map<String, Object> num3 = pmDemandMapper.purchaseProjectDistribution(pmDemandReqVo);
+        int countAfRwxd = Integer.parseInt(num3.get("countNumber").toString());
+        //该项目超过90日
+        Map<String, Object> num4 = pmDemandMapper.purchaseProjectConducted90Days(pmDemandReqVo);
+        int countAf90xm = Integer.parseInt(num4.get("countNumber").toString());
+        //滞后率
+        String zhhl = getPercent(countAf90xm, countAfRwxd);
+        //(5)偏差率,计划偏差率=(未按计划时间受领数量+临时受理需求数量)/季度计划数量
+        //未按计划时间受领数量:季度计划模块审核通过但没有进行需求提报并超过计划需求提报时间的计划数
+        LambdaQueryWrapper<PlanQuarter> planQuarterLw = new LambdaQueryWrapper<>();
+        if (!userId.equals(Long.valueOf("1"))) {
+            planQuarterLw.eq(PlanQuarter::getCreated, userId);
+        }
+        planQuarterLw.eq(PlanQuarter::getPlanType, "0");
+        planQuarterLw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+        //季度计划数量
+        long planQuarter = planQuarterService.count(planQuarterLw);
+        //通过审核的季度计划:季度计划审核通过的所有数量
+        planQuarterLw.eq(PlanQuarter::getProjectStatus, ProjectStatus.PLANTOEXAMINE.getCode());
+        List<PlanQuarter> planQuarterList = planQuarterService.list(planQuarterLw);
+        List<Long> planQuarterIds = planQuarterList.stream().map(PlanQuarter::getPlanPracticalId).collect(Collectors.toList());
+        //没有进行需求提报并超过计划需求提报时间的计划数
+        List<String> xqWtj = new ArrayList<>();
+        xqWtj.add(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
+        xqWtj.add(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode());
+        pmDemandReqVo.setProjectStatusList(xqWtj);
+        pmDemandReqVo.setDemandIdAll(planQuarterIds);
+        Map<String, Object> num5 = pmDemandMapper.purchaseProjectWTB(pmDemandReqVo);
+        int countXmWtj = Integer.parseInt(num5.get("countNumber").toString());
+        //临时受理需求数量:临时计划模块的计划进行需求提报后的计划数量
+        LambdaQueryWrapper<PlanQuarter> planLinshiLw = new LambdaQueryWrapper<>();
+        if (!userId.equals(Long.valueOf("1"))) {
+            planLinshiLw.eq(PlanQuarter::getCreated, userId);
+        }
+        planLinshiLw.eq(PlanQuarter::getPlanType, "1");
+        planLinshiLw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+        //通过审核的临时计划:临时计划审核通过的所有数量
+        planLinshiLw.eq(PlanQuarter::getProjectStatus, ProjectStatus.PLANTOEXAMINE.getCode());
+        List<PlanQuarter> planLinshiList = planQuarterService.list(planLinshiLw);
+        List<Long> planLinshiIds = planLinshiList.stream().map(PlanQuarter::getPlanPracticalId).collect(Collectors.toList());
+        //进行需求提报的计划
+        pmDemandReqVo.setProjectStatusList(null);
+        pmDemandReqVo.setDemandIdAll(planLinshiIds);
+        Map<String, Object> num6 = pmDemandMapper.purchaseProjectYTB(pmDemandReqVo);
+        int countXmYtj = Integer.parseInt(num6.get("countNumber").toString());
+        String pcl = getPercent((countXmWtj + countXmYtj), Math.toIntExact(planQuarter));
+        //(6)流废标率,出现流废标情况的项目/审核下达采购机构实施的采购项目
+        //项目状态存在过“流废标处置”的项目数/项目状态为“任务已下达”以后的状态的所有项目*100%
+        List<String> lfb = new ArrayList<>();
+        lfb.add(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
+        lfb.add(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode());
+        pmDemandReqVo.setProjectStatusList(xqWtj);
+
+
+        Map<String, String> result = new HashMap<>();
+        result.put("zxl", zxl);
+        result.put("ghzxl", ghzxl);
+        result.put("wcl", wcl);
+        result.put("zhhl", zhhl);
+        result.put("pcl", pcl);
+        return result;
+    }
+
 
 }

+ 52 - 1
purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

@@ -410,7 +410,7 @@
           and YEAR(create_time) = YEAR(NOW()) - 1
     </select>
 
-    <select id="countEveryStatusNum" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+    <select id="countEveryStatusNumThisYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
         SELECT project_status columnName, ifnull(COUNT(demand_id), 0) num, ifnull(sum(evaluation), 0) evaluationTotal
         FROM `pm_demand`
@@ -958,6 +958,57 @@
         YEAR(d.create_time)=#{vo.year} AND month(d.create_time)=#{vo.month}
     </select>
 
+    <select id="ghrwAndZdghProjectByStatus" 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`
+        <include refid="deptListOrDemandIdAll"/>
+        project_attr in ('1','2')
+        and
+        <if test="vo.projectStatusList!=null and vo.projectStatusList.size != 0">
+            project_status in
+            <foreach collection="vo.projectStatusList" item="item" index="index"
+                     separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="purchaseProjectConducted90Days" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="java.util.Map">
+        select ifnull(count(demand_id), 0) countNumber
+        from pm_demand
+        <include refid="deptListOrDemandIdAllNoAnd"/>
+        AND project_status > 19
+        AND DATE_ADD(task_release_time, INTERVAL 90 DAY) > NOW()
+    </select>
+
+    <select id="purchaseProjectWTB" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="java.util.Map">
+        select ifnull(count(demand_id), 0) countNumber
+        from pm_demand
+        <include refid="deptListOrDemandIdAllNoAnd"/>
+        <if test="(vo.deptList != null and vo.deptList.size != 0) or (vo.demandIdAll != null and vo.demandIdAll.size != 0)">
+            AND
+        </if>
+        <if test="vo.projectStatusList!=null and vo.projectStatusList.size != 0">
+            project_status in
+            <foreach collection="vo.projectStatusList" item="item" index="index"
+                     separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND plan_demand_sub_time &lt; now()
+    </select>
+
+    <select id="purchaseProjectYTB" resultType="java.util.Map"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        select ifnull(count(demand_id), 0) countNumber
+        from pm_demand
+        <include refid="deptListOrDemandIdAll"/>
+        real_demand_commit_time is not null
+    </select>
+
     <!--   统计里查询全部or查询指定部门及下级超额项目-->
     <sql id="deptListOrDemandIdAll">
         WHERE