sunhh hace 2 años
padre
commit
a0be3235e8
Se han modificado 23 ficheros con 492 adiciones y 227 borrados
  1. 0 1
      purchase-admin/src/main/java/com/ozs/web/controller/pm/PmDemandController.java
  2. 22 17
      purchase-admin/src/main/java/com/ozs/web/controller/pm/PmPurchaseExecutionController.java
  3. 4 0
      purchase-system/src/main/java/com/ozs/home/domain/vo/HomeToDoQueryResVo.java
  4. 1 0
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java
  5. 9 28
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java
  6. 24 1
      purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBaseExpertExtractReqVo.java
  7. 23 1
      purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBaseExpertFillReqVo.java
  8. 23 1
      purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBidOpeningFillReqVo.java
  9. 2 2
      purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBidWinningReqVo.java
  10. 5 4
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidFailureResVo.java
  11. 6 7
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidWinningResVo.java
  12. 4 5
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBookBuildingResVo.java
  13. 5 5
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmContractInfoResVo.java
  14. 19 10
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmDemandResVo.java
  15. 5 6
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmFlowChartResVo.java
  16. 5 5
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmProjectConstructionResVo.java
  17. 10 8
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmPurchaseExecutionResVo.java
  18. 5 5
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmReleaseAnnouncementResVo.java
  19. 28 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/StatisticalChartsResVo.java
  20. 30 3
      purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java
  21. 18 0
      purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java
  22. 213 115
      purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java
  23. 31 3
      purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

+ 0 - 1
purchase-admin/src/main/java/com/ozs/web/controller/pm/PmDemandController.java

@@ -12,7 +12,6 @@ import com.ozs.pm.doman.vo.responseVo.PmDemandResVo;
 import com.ozs.pm.service.IPmDemandService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.poi.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.PostMapping;

+ 22 - 17
purchase-admin/src/main/java/com/ozs/web/controller/pm/PmPurchaseExecutionController.java

@@ -37,10 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotEmpty;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * 采购执行Controller
@@ -85,7 +82,7 @@ public class PmPurchaseExecutionController extends BaseController {
         }
         LambdaQueryWrapper<BaseAgency> lw = new LambdaQueryWrapper<>();
         lw.eq(BaseAgency::getCompanyType,pmDemand.getProjectType());
-        lw.eq(BaseAgency::getStatus,0);
+        lw.eq(BaseAgency::getStatus,0);//白名单
         List<BaseAgency> agencyList = baseAgencyService.list(lw);
         return success(agencyList);
     }
@@ -132,7 +129,7 @@ public class PmPurchaseExecutionController extends BaseController {
         }
         LambdaQueryWrapper<BaseAgency> lw = new LambdaQueryWrapper<>();
         lw.eq(BaseAgency::getCompanyType,pmDemand.getProjectType());
-        lw.eq(BaseAgency::getStatus,0);
+        lw.eq(BaseAgency::getStatus,0); //白名单
         List<BaseAgency> baseAgencyList = baseAgencyService.list(lw);
         if (ObjectUtils.isEmpty(baseAgencyList)){
             return error("没有符合的招标代理机构,抽取失败!");
@@ -269,6 +266,20 @@ public class PmPurchaseExecutionController extends BaseController {
         }
     }
 
+    @ApiOperation(value = "获取回避单位下拉列表")
+    @GetMapping("/getExpertUnitList")
+    public AjaxResult getExpertUnitList() {
+        List<BaseExpert> baseExperts = baseExpertService.list();
+        if(ObjectUtils.isEmpty(baseExperts)){
+            return error("专家列表是空的");
+        }
+        Set<String> set = new HashSet<>();
+        for(BaseExpert baseExpert : baseExperts) {
+            set.add(baseExpert.getUnitInformation());
+        }
+        return success(set);
+    }
+
     /**
      * 抽取专家
      */
@@ -392,17 +403,11 @@ public class PmPurchaseExecutionController extends BaseController {
                 return error("参数错误");
             }
             List<SysFileRef> sysFileRefs = pmCallQuestionReqVo.getSysFileRefs();
-            if(ObjectUtils.isEmpty(sysFileRefs)){
-                return error("参数错误");
-            }
-            if(pmDemandService.uploadFile(demandId, SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType(),sysFileRefs,getUserId().toString())){
-                pmDemand.setCallQuestion(pmCallQuestionReqVo.getCallQuestion());
-                pmDemand.setUpdateBy(getUserId().toString());
-                pmDemand.setUpdateTime(new Date());
-                return toAjax(pmDemandService.updateById(pmDemand));
-            } else {
-                return error("保存上传附件失败");
-            }
+            pmDemandService.uploadFile(demandId, SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType(),sysFileRefs,getUserId().toString());
+            pmDemand.setCallQuestion(pmCallQuestionReqVo.getCallQuestion());
+            pmDemand.setUpdateBy(getUserId().toString());
+            pmDemand.setUpdateTime(new Date());
+            return toAjax(pmDemandService.updateById(pmDemand));
 
         }  catch (Exception e) {
             return error(e.getMessage());

+ 4 - 0
purchase-system/src/main/java/com/ozs/home/domain/vo/HomeToDoQueryResVo.java

@@ -126,4 +126,8 @@ public class HomeToDoQueryResVo implements Serializable {
      */
     @ApiModelProperty("项目状态名称")
     private String projectStatusName;
+    /**
+     * 项目是否滞后
+     */
+    private String isExceedProject;
 }

+ 1 - 0
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java

@@ -638,6 +638,7 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
                 break;
             }
         }
+        thresholdTime.setYear(date.getYear());
         double surplus = thresholdTime.getTime() - date.getTime();
         //少于一周便提醒
         if (surplus < remindTine && surplus > 0) {

+ 9 - 28
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -841,14 +841,13 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         //计划待提交,需求待提交,合同待填制,项目建设待完成
         List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
         List<PmDemandResVo> demandRes = demandService.demandWaitCommit();
-        List<PmDemandResVo> demandRes1 = demandService.contractWaitFilled();
-        List<PmDemandResVo> demandRes2 = demandService.projectWaitFinish();
+        demandRes.addAll(demandService.contractWaitFilled());
+        demandRes.addAll(demandService.projectWaitFinish());
         //转为首页table展示数据
         if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
             for (PlanQuarterResponseVo planVo : planRes) {
                 HomeToDoQueryResVo home = new HomeToDoQueryResVo();
                 BeanUtils.copyProperties(planVo, home);
-
                 homeRes.add(home);
             }
         }
@@ -859,20 +858,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 homeRes.add(home);
             }
         }
-        if (!ObjectUtils.isEmpty(demandRes1) && demandRes1.size() > 0) {
-            for (PmDemandResVo demandResVo : demandRes1) {
-                HomeToDoQueryResVo home = new HomeToDoQueryResVo();
-                BeanUtils.copyProperties(demandResVo, home);
-                homeRes.add(home);
-            }
-        }
-        if (!ObjectUtils.isEmpty(demandRes2) && demandRes2.size() > 0) {
-            for (PmDemandResVo demandResVo : demandRes2) {
-                HomeToDoQueryResVo home = new HomeToDoQueryResVo();
-                BeanUtils.copyProperties(demandResVo, home);
-                homeRes.add(home);
-            }
-        }
+
         return AjaxResult.success(homeRes);
     }
 
@@ -882,7 +868,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         //计划待审核,需求待审核,任务待下达
         List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAIEXAMINE.getCode());
         List<PmDemandResVo> demandRes = demandService.demandWaitExamine();
-        List<PmDemandResVo> demandRes1 = demandService.taskWaitRelease();
+        demandRes.addAll(demandService.taskWaitRelease());
         //转为首页table展示数据
         if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
             for (PlanQuarterResponseVo planVo : planRes) {
@@ -898,13 +884,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 homeRes.add(home);
             }
         }
-        if (!ObjectUtils.isEmpty(demandRes1) && demandRes1.size() > 0) {
-            for (PmDemandResVo demandResVo : demandRes1) {
-                HomeToDoQueryResVo home = new HomeToDoQueryResVo();
-                BeanUtils.copyProperties(demandResVo, home);
-                homeRes.add(home);
-            }
-        }
+
         return AjaxResult.success(homeRes);
     }
 
@@ -1087,9 +1067,10 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         //提报时间的结束时间阈值
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
         Date thresholdTime = dateFormat.parse(thresholdMap.get("起止时间结束"));
-
-        double surplus = thresholdTime.getTime() - System.currentTimeMillis();
-        //少于设定阈值便提醒
+        Date date = new Date();
+        thresholdTime.setYear(date.getYear());
+        double surplus = thresholdTime.getTime() - date.getTime();
+        //少于设定天数便提醒
         if (surplus < remindTime && surplus > 0) {
             //剩余天数(向上取整)
             int i = new Double(Math.ceil(surplus / 1000 / 60 / 60 / 24)).intValue();

+ 24 - 1
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBaseExpertExtractReqVo.java

@@ -1,12 +1,15 @@
 package com.ozs.pm.doman.vo.requestVo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
-public class PmBaseExpertExtractReqVo extends BaseEntity {
+public class PmBaseExpertExtractReqVo {
 
     @ApiModelProperty("需求ID")
     private Long demandId;
@@ -34,4 +37,24 @@ public class PmBaseExpertExtractReqVo extends BaseEntity {
 
     @ApiModelProperty("需要回避单位,多个用逗号分隔")
     private String needAvoidUnit;
+
+
+    /** 创建者 */
+    @ApiModelProperty("创建者")
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    /** 更新者 */
+    @ApiModelProperty("更新者")
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
 }

+ 23 - 1
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBaseExpertFillReqVo.java

@@ -1,14 +1,16 @@
 package com.ozs.pm.doman.vo.requestVo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.base.domain.BaseExpert;
 import com.ozs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
-public class PmBaseExpertFillReqVo extends BaseEntity {
+public class PmBaseExpertFillReqVo {
 
     @ApiModelProperty("需求ID")
     private Long demandId;
@@ -18,4 +20,24 @@ public class PmBaseExpertFillReqVo extends BaseEntity {
 
     @ApiModelProperty("选取时间 yyy-MM-dd")
     private String accessTime;
+
+
+    /** 创建者 */
+    @ApiModelProperty("创建者")
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    /** 更新者 */
+    @ApiModelProperty("更新者")
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
 }

+ 23 - 1
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBidOpeningFillReqVo.java

@@ -1,15 +1,17 @@
 package com.ozs.pm.doman.vo.requestVo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.core.domain.BaseEntity;
 import com.ozs.pm.doman.PmBidOpening;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
-public class PmBidOpeningFillReqVo extends BaseEntity {
+public class PmBidOpeningFillReqVo {
 
     @ApiModelProperty("需求ID")
     private Long demandId;
@@ -17,4 +19,24 @@ public class PmBidOpeningFillReqVo extends BaseEntity {
     @ApiModelProperty("开标信息列表")
     private List<PmBidOpening> pmBidOpeningList;
 
+
+    /** 创建者 */
+    @ApiModelProperty("创建者")
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    /** 更新者 */
+    @ApiModelProperty("更新者")
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
+
 }

+ 2 - 2
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBidWinningReqVo.java

@@ -59,9 +59,9 @@ public class PmBidWinningReqVo implements Serializable {
     private Date updateTime;
 
     /**
-     * 中标单位信息ID列表
+     * 中标信息ID列表
      */
-    @ApiModelProperty("中标单位信息ID列表")
+    @ApiModelProperty("中标信息ID列表")
     private List<Long> pmBidOpeningIdList;
 
     /**

+ 5 - 4
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidFailureResVo.java

@@ -3,12 +3,13 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
+import java.util.List;
 
 /**
  * 流标基本情况表(PmBidFailure)实体类
@@ -52,8 +53,8 @@ public class PmBidFailureResVo implements Serializable {
     private Date updateTime;
 
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 6 - 7
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidWinningResVo.java

@@ -2,14 +2,13 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -59,14 +58,14 @@ public class PmBidWinningResVo implements Serializable {
     private Date updateTime;
 
     /**
-     * 中标单位信息列表
+     * 中标信息列表
      */
-    @ApiModelProperty("中标单位信息列表")
+    @ApiModelProperty("中标信息列表")
     private List<Long> pmBidOpeningIdList;
 
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 4 - 5
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBookBuildingResVo.java

@@ -2,13 +2,12 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 
@@ -44,10 +43,10 @@ public class PmBookBuildingResVo
 
 
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 
 
     @ApiModelProperty("创建者")

+ 5 - 5
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmContractInfoResVo.java

@@ -2,13 +2,14 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
+import java.util.List;
 
 
 /**
@@ -65,10 +66,9 @@ public class PmContractInfoResVo implements Serializable {
     @ApiModelProperty("更新时间")
     private Date updateTime;
 
-
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 19 - 10
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmDemandResVo.java

@@ -3,6 +3,7 @@ package com.ozs.pm.doman.vo.responseVo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.annotation.Excel;
 import com.ozs.common.core.domain.BaseEntity;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -12,7 +13,7 @@ import lombok.NoArgsConstructor;
 
 
 import java.util.Date;
-import java.util.HashMap;
+import java.util.List;
 
 /**
  * 采购需求对象 pm_demand
@@ -218,25 +219,33 @@ public class PmDemandResVo extends BaseEntity
     @ApiModelProperty("项目建设对象")
     private  PmProjectConstructionResVo pmProjectConstructionResVo;
 
+
     /**
-     * 采购需求附件
+     * 采购需求的已上传的关联附件信息
      */
-    @ApiModelProperty("采购需求附件")
-    HashMap<String, String> demandFileMap;
+    @ApiModelProperty("采购需求的已上传的关联附件信息")
+    private List<SysFileInfo>demandFileInfos;
+
 
     /**
-     * 采购需求审核文件
+     * 采购需求审核的已上传的关联附件信息
      */
-    @ApiModelProperty("采购需求审核文件")
-    HashMap<String, String> auditFileMap;
+    @ApiModelProperty("采购需求审核的已上传的关联附件信息")
+    private List<SysFileInfo> auditFileInfos;
 
     /**
-     * 任务下达文件
+     * 任务下达的已上传的关联附件信息
      */
-    @ApiModelProperty("任务下达文件")
-    HashMap<String, String> taskReleaseFileMap;
+    @ApiModelProperty("任务下达的已上传的关联附件信息")
+    private List<SysFileInfo> taskReleaseFileInfos;
+
     /**
      * 待办事项提示信息
      */
     private String tipsMessage;
+    /**
+     * 项目是否滞后 1为滞后
+     */
+    private String isExceedProject;
+
 }

+ 5 - 6
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmFlowChartResVo.java

@@ -1,7 +1,7 @@
 package com.ozs.pm.doman.vo.responseVo;
 
 import com.ozs.common.annotation.Excel;
-import com.ozs.common.core.domain.BaseEntity;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -9,7 +9,6 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -46,10 +45,10 @@ public class PmFlowChartResVo
     @ApiModelProperty("提示文案")
     private String promptWords;
 
+
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
-
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 5 - 5
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmProjectConstructionResVo.java

@@ -2,13 +2,12 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -61,9 +60,10 @@ public class PmProjectConstructionResVo implements Serializable {
     @ApiModelProperty("更新时间")
     private Date updateTime;
 
+
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 10 - 8
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmPurchaseExecutionResVo.java

@@ -2,7 +2,7 @@ package com.ozs.pm.doman.vo.responseVo;
 
 
 import com.ozs.base.domain.BaseAgency;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -44,23 +44,25 @@ public class PmPurchaseExecutionResVo {
 
     @ApiModelProperty("中标信息列表")
     private List<PmBidWinningResVo> pmBidWinningResVoList;
+
     /**
-     *
      * 质疑情况附件
      */
     @ApiModelProperty("质疑情况附件")
-    HashMap<String, String> callRequestFileMap;
+    private List<SysFileInfo> callRequestFileInfos;
 
     @ApiModelProperty("流标信息列表")
     private List<PmBidFailureResVo> pmBidFailureResVoList;
 
+    /**
+     * 中标通知书
+     */
     @ApiModelProperty("中标通知书")
-    HashMap<String, String> pmBidWinningNotificationFileMap;
+    private List<SysFileInfo> pmBidWinningNotificationFileInfos;
 
     /**
-     *
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

+ 5 - 5
purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmReleaseAnnouncementResVo.java

@@ -3,14 +3,13 @@ package com.ozs.pm.doman.vo.responseVo;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 
@@ -75,9 +74,10 @@ public class PmReleaseAnnouncementResVo implements Serializable {
     @ApiModelProperty("更新时间")
     private Date updateTime;
 
+
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    @ApiModelProperty("上传附件的URL")
-    HashMap<String, String> fileMap;
+    @ApiModelProperty("已上传的关联附件信息")
+    private List<SysFileInfo> fileInfos;
 }

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

@@ -0,0 +1,28 @@
+package com.ozs.pm.doman.vo.responseVo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author buzhanyi
+ * 统计图数据
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class StatisticalChartsResVo {
+
+    /**
+     * 字段名称
+     */
+    private String columnName;
+    /**
+     * 对应的数量
+     */
+    private String num;
+    /**
+     * 总金额
+     */
+    private String evaluationTotal;
+}

+ 30 - 3
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ozs.base.domain.vo.BaseExpertVo;
 import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
+import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -13,15 +14,15 @@ import java.util.Map;
 
 /**
  * 采购需求Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2023-01-16
  */
-public interface PmDemandMapper extends BaseMapper<PmDemand>
-{
+public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 通过需求ID列表,查询采购执行列表 sunhh
+     *
      * @param demandIdList
      * @return
      */
@@ -29,6 +30,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand>
 
     /**
      * 专家库--查询抽取专家列表 非必传条件:专家名称,开始结束时间 sunhh
+     *
      * @param baseExpertVo
      * @return
      */
@@ -36,26 +38,51 @@ public interface PmDemandMapper extends BaseMapper<PmDemand>
 
     /**
      * 统计分析-采购项目信息统计-查询项目总数量
+     *
      * @param pmDemandReqVo
      * @return
      */
     Map<String, Integer> purchaseProjectStatistical(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 统计分析-采购项目信息统计-查询已完成项目数量,预算金额数量
+     *
      * @param pmDemandReqVo
      * @return
      */
     Map<String, Integer> purchaseProjectStatisticalYWC(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 统计分析-采购项目信息统计-查询新创建项目数量,预算金额数量
+     *
      * @param pmDemandReqVo
      * @return
      */
     Map<String, Integer> purchaseProjectStatisticalXCJ(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 统计分析-采购项目信息统计-查询去年完成项目数量,预算金额数量
+     *
      * @param pmDemandReqVo
      * @return
      */
     Map<String, Integer> purchaseProjectStatisticalQNWC(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 按照项目属性统计所有的项目
+     *
+     * @return
+     */
+    List<StatisticalChartsResVo> countByProjectAttr();
+
+    /**
+     * 按照概算金额统计所有的项目
+     *
+     * @return
+     */
+    StatisticalChartsResVo countByEvaluationLt(Integer evaluation);
+
+    StatisticalChartsResVo countByEvaluationBet(@Param("evaluation") Integer evaluation, @Param("evaluationEnd") Integer evaluationEnd);
+
+    StatisticalChartsResVo countByEvaluationGt(Integer evaluation);
 }

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

@@ -9,6 +9,7 @@ import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.doman.vo.requestVo.*;
 import com.ozs.pm.doman.vo.responseVo.PmDemandResVo;
 import com.ozs.pm.doman.vo.responseVo.PmFlowChartResVo;
+import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
 import com.ozs.system.domain.SysFileRef;
 
 import java.util.List;
@@ -217,8 +218,25 @@ public interface IPmDemandService extends IService<PmDemand> {
 
     /**
      * 统计分析-采购项目信息统计
+     *
      * @param pmDemandReqVo
      * @return
      */
     Map<String, Integer> purchaseProjectStatistical(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 统计分析-按照项目属性统计所有的项目
+     *
+     * @param
+     * @return
+     */
+    List<StatisticalChartsResVo> countByProjectAttr();
+
+    /**
+     * 统计分析-按照概算金额统计所有的项目
+     *
+     * @param
+     * @return
+     */
+    List<StatisticalChartsResVo> countByEvaluation();
 }

+ 213 - 115
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -128,9 +128,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
 
                 //采购需求附件
-                HashMap<String, String> demandFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND.getType());
-                if(demandFileMap != null){
-                    vo.setDemandFileMap(demandFileMap);
+                List<SysFileInfo> demandFileInfos = getSysFileInfoList(vo.getDemandId(),SysFileRefEnum.PM_DEMAND.getType());
+                if(!ObjectUtils.isEmpty(demandFileInfos)){
+                    vo.setDemandFileInfos(demandFileInfos);
                 }
 
                 //项目类型
@@ -181,9 +181,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             } else if("2".equals(detailType)) { //需求建档
 
                 //采购需求审核文件
-                HashMap<String, String> auditFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
-                if(auditFileMap != null){
-                    vo.setAuditFileMap(auditFileMap);
+                List<SysFileInfo> auditFileInfos = getSysFileInfoList(vo.getDemandId(),SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
+                if(!ObjectUtils.isEmpty(auditFileInfos)){
+                    vo.setAuditFileInfos(auditFileInfos);
                 }
 
                 LambdaQueryWrapper<PmBookBuilding> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -193,18 +193,17 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     PmBookBuildingResVo responseVo = new PmBookBuildingResVo();
                     BeanUtils.copyProperties(pmBookBuilding,responseVo);
 
-                    HashMap<String, String> fileMap1 = getFileMap(demandId,SysFileRefEnum.PM_BOOK_BUILDING.getType());
-                    if(fileMap1 != null){
-                        responseVo.setFileMap(fileMap1);
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmBookBuilding.getId(),SysFileRefEnum.PM_BOOK_BUILDING.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        responseVo.setFileInfos(fileInfos);
                     }
-
                     vo.setPmBookBuildingResVo(responseVo);
                 }
             } else if("3".equals(detailType)) { //任务下达
                 //任务下达文件
-                HashMap<String, String> taskReleaseFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_TAST_RELEASE.getType());
-                if(taskReleaseFileMap != null){
-                    vo.setTaskReleaseFileMap(taskReleaseFileMap);
+                List<SysFileInfo> taskReleaseFileInfos = getSysFileInfoList(vo.getDemandId(),SysFileRefEnum.PM_TAST_RELEASE.getType());
+                if(!ObjectUtils.isEmpty(taskReleaseFileInfos)){
+                    vo.setTaskReleaseFileInfos(taskReleaseFileInfos);
                 }
             } else if("4".equals(detailType)) { //中标信息
                 PmPurchaseExecutionResVo pmPurchaseExecutionResVo = new PmPurchaseExecutionResVo();
@@ -222,9 +221,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     for (PmReleaseAnnouncement pmReleaseAnnouncement : pmReleaseAnnouncementList) {
                         PmReleaseAnnouncementResVo pmReleaseAnnouncementResVo = new PmReleaseAnnouncementResVo();
                         BeanUtils.copyProperties(pmReleaseAnnouncement,pmReleaseAnnouncementResVo);
-                        HashMap<String, String> fileMap = getFileMap(pmReleaseAnnouncement.getId(),SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
-                        if(fileMap != null){
-                            pmReleaseAnnouncementResVo.setFileMap(fileMap);
+
+                        List<SysFileInfo> fileInfos = getSysFileInfoList(pmReleaseAnnouncement.getId(),SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
+                        if(!ObjectUtils.isEmpty(fileInfos)){
+                            pmReleaseAnnouncementResVo.setFileInfos(fileInfos);
                         }
                         pmReleaseAnnouncementResVoList.add(pmReleaseAnnouncementResVo);
                     }
@@ -248,9 +248,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     for(PmBidWinning pmBidWinning : pmBidWinningList) {
                         PmBidWinningResVo pmBidWinningResVo = new PmBidWinningResVo();
                         BeanUtils.copyProperties(pmBidWinning, pmBidWinningResVo);
-                        HashMap<String, String> fileMap = getFileMap(pmBidWinning.getId(),SysFileRefEnum.PM_BID_WINNING_FILE.getType());
-                        if(fileMap != null){
-                            pmBidWinningResVo.setFileMap(fileMap);
+                        List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidWinning.getId(),SysFileRefEnum.PM_BID_WINNING_FILE.getType());
+                        if(!ObjectUtils.isEmpty(fileInfos)){
+                            pmBidWinningResVo.setFileInfos(fileInfos);
                         }
                         pmBidWinningResVoList.add(pmBidWinningResVo);
                     }
@@ -258,11 +258,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
 
                 //质疑情况
-                HashMap<String, String> callRequestFileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
-                if(callRequestFileMap != null){
-                    pmPurchaseExecutionResVo.setCallRequestFileMap(callRequestFileMap);
+                List<SysFileInfo> callRequestFileInfos = getSysFileInfoList(vo.getDemandId(),SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
+                if(!ObjectUtils.isEmpty(callRequestFileInfos)){
+                    pmPurchaseExecutionResVo.setCallRequestFileInfos(callRequestFileInfos);
                 }
-
                 //流标情况
                 LambdaQueryWrapper<PmBidFailure> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
                 lambdaQueryWrapper2.eq(PmBidFailure::getDemandId,demandId).orderByDesc(PmBidFailure::getBidFailureTime);
@@ -272,9 +271,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     for(PmBidFailure pmBidFailure : pmBidFailureList) {
                         PmBidFailureResVo pmBidFailureResVo = new PmBidFailureResVo();
                         BeanUtils.copyProperties(pmBidFailure, pmBidFailureResVo);
-                        HashMap<String, String> fileMap = getFileMap(pmBidFailure.getId(),SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
-                        if(fileMap != null){
-                            pmBidFailureResVo.setFileMap(fileMap);
+                        List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidFailure.getId(),SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
+                        if(!ObjectUtils.isEmpty(fileInfos)){
+                            pmPurchaseExecutionResVo.setFileInfos(fileInfos);
                         }
                         pmBidFailureResVoList.add(pmBidFailureResVo);
                     }
@@ -282,9 +281,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
 
                 //中标通知书
-                HashMap<String, String> pmBidWinningNotificationFileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
-                if(pmBidWinningNotificationFileMap != null){
-                    pmPurchaseExecutionResVo.setPmBidWinningNotificationFileMap(pmBidWinningNotificationFileMap);
+                List<SysFileInfo> pmBidWinningNotificationFileInfos = getSysFileInfoList(vo.getDemandId(),SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
+                if(!ObjectUtils.isEmpty(pmBidWinningNotificationFileInfos)){
+                    pmPurchaseExecutionResVo.setPmBidWinningNotificationFileInfos(pmBidWinningNotificationFileInfos);
                 }
 
                 vo.setPmPurchaseExecutionResVo(pmPurchaseExecutionResVo);
@@ -298,9 +297,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     BeanUtils.copyProperties(pmContractInfo,pmContractInfoResVo);
 
                      //合同信息文件
-                    HashMap<String, String> pmContractInfoFileMap = getFileMap(pmContractInfo.getId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
-                    if(pmContractInfoFileMap != null){
-                        pmContractInfoResVo.setFileMap(pmContractInfoFileMap);
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmContractInfo.getId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        pmContractInfoResVo.setFileInfos(fileInfos);
                     }
                     vo.setPmContractInfoResVo(pmContractInfoResVo);
                 }
@@ -313,9 +312,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     BeanUtils.copyProperties(pmProjectConstruction,pmProjectConstructionResVo);
 
                     //建设情况文件
-                    HashMap<String, String> projectConstructionFileMap = getFileMap(pmProjectConstruction.getId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
-                    if(projectConstructionFileMap != null){
-                        pmProjectConstructionResVo.setFileMap(projectConstructionFileMap);
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmProjectConstruction.getId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        pmProjectConstructionResVo.setFileInfos(fileInfos);
                     }
                     vo.setPmProjectConstructionResVo(pmProjectConstructionResVo);
                 }
@@ -408,7 +407,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             pmBookBuilding.setUpdateBy(vo.getUpdateBy());
             pmBookBuilding.setUpdateTime(pmBookBuilding.getCreateTime());
         }
-        if(pmBookBuildingService.save(pmBookBuilding)){
+        if(pmBookBuildingService.saveOrUpdate(pmBookBuilding)){
             List<SysFileRef> sysFileRefs = vo.getSysFileRefs();
             uploadFile(pmBookBuilding.getId(),SysFileRefEnum.PM_BOOK_BUILDING.getType(),sysFileRefs,vo.getUpdateBy());
 
@@ -422,18 +421,19 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     }
 
-    private HashMap<String, String> getFileMap(Long redId,Integer type){
+    private List<SysFileInfo> getSysFileInfoList(Long redId,Integer type){
         HashMap<String, Object> map = new HashMap<>();
         map.put("red_id", redId);
         map.put("type", type);
         List<SysFileRef> fileRefs = sysFileRefService.listByMap(map);
         if (!ObjectUtils.isEmpty(fileRefs)) {
-            HashMap<String, String> fileMap = new HashMap<>();
+            List<SysFileInfo> fileInfos = new ArrayList<>();
             for (SysFileRef ref : fileRefs) {
                 SysFileInfo fileInfo = fileService.getById(ref.getFileId());
-                fileMap.put(fileInfo.getFileUrl(), fileInfo.getFileName());
+                fileInfos.add(fileInfo);
             }
-            return fileMap;
+
+            return fileInfos;
         } else {
             return null;
         }
@@ -495,52 +495,53 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         BeanUtils.copyProperties(pmFlowChart, vo);
 
         if("需求填制".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_DEMAND.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("需求提交".equals(moduleName)) {
             LambdaQueryWrapper<PmBookBuilding> pmBookBuildingLambdaQueryWrapper = new LambdaQueryWrapper<>();
             pmBookBuildingLambdaQueryWrapper.eq(PmBookBuilding::getDemandId,demandId);
             PmBookBuilding pmBookBuilding = pmBookBuildingService.getOne(pmBookBuildingLambdaQueryWrapper);
             if(pmBookBuilding != null){
-                HashMap<String, String> fileMap = getFileMap(pmBookBuilding.getId(),SysFileRefEnum.PM_BOOK_BUILDING.getType());
-                if(fileMap != null){
-                    vo.setFileMap(fileMap);
+                List<SysFileInfo> fileInfos = getSysFileInfoList(pmBookBuilding.getId(),SysFileRefEnum.PM_BOOK_BUILDING.getType());
+                if(!ObjectUtils.isEmpty(fileInfos)){
+                    vo.setFileInfos(fileInfos);
                 }
             }
 
         } else if("需求审核".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("任务下达".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_TAST_RELEASE.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_TAST_RELEASE.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("选取代理".equals(moduleName)) {
            //do nothing
         } else if("上传招标文件".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_FILE.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_BID_FILE.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("发布公告".equals(moduleName)) {
             LambdaQueryWrapper<PmReleaseAnnouncement> pmReleaseAnnouncementLambdaQueryWrapper = new LambdaQueryWrapper<>();
             pmReleaseAnnouncementLambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId,demandId);
             List<PmReleaseAnnouncement> pmReleaseAnnouncementList = pmReleaseAnnouncementService.list(pmReleaseAnnouncementLambdaQueryWrapper);
             if(!ObjectUtils.isEmpty(pmReleaseAnnouncementList)) {
-                HashMap<String, String> fileMapAll = new HashMap<>();
+                List<SysFileInfo> listAll = new ArrayList<>();
                 for(PmReleaseAnnouncement pmReleaseAnnouncement :pmReleaseAnnouncementList ){
-                    HashMap<String, String> fileMap = getFileMap(pmReleaseAnnouncement.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
-                    if(!ObjectUtils.isEmpty(fileMap)){
-                        fileMap.forEach((k, v) -> fileMapAll.merge(k, v, (v1, v2) -> v2));
+
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmReleaseAnnouncement.getId(),SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        listAll.addAll(fileInfos);
                     }
                 }
-                if (fileMapAll != null) {
-                    vo.setFileMap(fileMapAll);
+                if (!ObjectUtils.isEmpty(listAll)) {
+                    vo.setFileInfos(listAll);
                 }
             }
         } else if("填写专家信息".equals(moduleName)) {
@@ -548,16 +549,16 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         } else if("填写开标信息".equals(moduleName)) {
             //do nothing
         } else if("填写中标信息".equals(moduleName)) {
-            HashMap<String, String> fileMapAll = new HashMap<>();
+            List<SysFileInfo> listAll = new ArrayList<>();
 
             LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
             pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId,demandId);
             List<PmBidWinning> pmBidWinningList = pmBidWinningService.list(pmBidWinningLambdaQueryWrapper);
             if(!ObjectUtils.isEmpty(pmBidWinningList)) {
                 for(PmBidWinning pmBidWinning : pmBidWinningList) {
-                    HashMap<String, String> fileMap = getFileMap(pmBidWinning.getId(),SysFileRefEnum.PM_BID_WINNING_FILE.getType());
-                    if(!ObjectUtils.isEmpty(fileMap)){
-                        fileMap.forEach((k, v) -> fileMapAll.merge(k, v, (v1, v2) -> v2));
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidWinning.getId(),SysFileRefEnum.PM_BID_WINNING_FILE.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        listAll.addAll(fileInfos);
                     }
                 }
             }
@@ -567,35 +568,35 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             List<PmBidFailure> pmBidFailureList = pmBidFailureService.list(pmBidFailureLambdaQueryWrapper);
             if(!ObjectUtils.isEmpty(pmBidFailureService)) {
                 for(PmBidFailure pmBidFailure : pmBidFailureList) {
-                    HashMap<String, String> fileMap = getFileMap(pmBidFailure.getId(),SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
-                    if(!ObjectUtils.isEmpty(fileMap)){
-                        fileMap.forEach((k, v) -> fileMapAll.merge(k, v, (v1, v2) -> v2));
+                    List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidFailure.getId(),SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
+                    if(!ObjectUtils.isEmpty(fileInfos)){
+                        listAll.addAll(fileInfos);
                     }
                 }
             }
 
-            if(!ObjectUtils.isEmpty(fileMapAll)){
-                vo.setFileMap(fileMapAll);
+            if(!ObjectUtils.isEmpty(listAll)){
+                vo.setFileInfos(listAll);
             }
 
         } else if("质疑处理".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("上传中标通知书".equals(moduleName)) {
-            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
-            if(fileMap != null){
-                vo.setFileMap(fileMap);
+            List<SysFileInfo> fileInfos = getSysFileInfoList(demandId,SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
+            if(!ObjectUtils.isEmpty(fileInfos)){
+                vo.setFileInfos(fileInfos);
             }
         } else if("合同填制".equals(moduleName)) {
             LambdaQueryWrapper<PmContractInfo> pmContractInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
             pmContractInfoLambdaQueryWrapper.eq(PmContractInfo::getDemandId,demandId);
             PmContractInfo pmContractInfo = pmContractInfoService.getOne(pmContractInfoLambdaQueryWrapper);
             if(pmContractInfo != null){
-                HashMap<String, String> fileMap = getFileMap(pmContractInfo.getId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
-                if(fileMap != null){
-                    vo.setFileMap(fileMap);
+                List<SysFileInfo> fileInfos = getSysFileInfoList(pmContractInfo.getId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
+                if(!ObjectUtils.isEmpty(fileInfos)){
+                    vo.setFileInfos(fileInfos);
                 }
             }
 
@@ -604,9 +605,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             pmProjectConstructionLambdaQueryWrapper.eq(PmProjectConstruction::getDemandId,demandId);
             PmProjectConstruction pmProjectConstruction = pmProjectConstructionService.getOne(pmProjectConstructionLambdaQueryWrapper);
             if(pmProjectConstruction != null){
-                HashMap<String, String> fileMap = getFileMap(pmProjectConstruction.getId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
-                if(fileMap != null){
-                    vo.setFileMap(fileMap);
+                List<SysFileInfo> fileInfos = getSysFileInfoList(pmProjectConstruction.getId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
+                if(!ObjectUtils.isEmpty(fileInfos)){
+                    vo.setFileInfos(fileInfos);
                 }
             }
 
@@ -756,7 +757,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
                 baseNotice.setType(baseNoticeType.getId());
                 baseNotice.setReleaseTime(pmReleaseAnnouncement.getReleaseTime());
-                return this.baseNoticeService.save(baseNotice);
+                return this.baseNoticeService.saveOrUpdate(baseNotice);
             } else {
                 return false;
             }
@@ -775,7 +776,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             throw new Exception("参数错误");
         }
         List<BaseExpert> baseExpertList = pmBaseExpertFillReqVo.getBaseExpertList();
-        List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
+        if(ObjectUtils.isEmpty(baseExpertList)){
+            throw new Exception("参数错误");
+        }
+
         Date now = new Date();
         for (BaseExpert baseExpert : baseExpertList) {
             if(NameListType.BLACK.getCode().equals(baseExpert.getStatus())){
@@ -797,23 +801,28 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 baseExpert.setUpdated(pmBaseExpertFillReqVo.getUpdateBy());
                 baseExpert.setUpdateTime(now);
             }
+            if(baseExpertService.saveOrUpdate(baseExpert)){
+                LambdaQueryWrapper<PmDemandExpertRef> pmDemandExpertRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                pmDemandExpertRefLambdaQueryWrapper.eq(PmDemandExpertRef::getDemandId,pmDemand.getDemandId())
+                        .eq(PmDemandExpertRef::getExpertId,baseExpert.getId().longValue())
+                        .eq(PmDemandExpertRef::getAccessTime,pmBaseExpertFillReqVo.getAccessTime());
+                PmDemandExpertRef pmDemandExpertRef =  pmDemandExpertRefService.getOne(pmDemandExpertRefLambdaQueryWrapper);
+                if(pmDemandExpertRef == null){
+                    pmDemandExpertRef = new PmDemandExpertRef();
+                    pmDemandExpertRef.setCreateBy(pmBaseExpertFillReqVo.getCreateBy());
+                    pmDemandExpertRef.setCreateTime(now);
+                }
+                pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
+                pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
+                pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertFillReqVo.getAccessTime()));
+                pmDemandExpertRef.setUpdateBy(pmBaseExpertFillReqVo.getCreateBy());
+                pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
+                pmDemandExpertRefService.saveOrUpdate(pmDemandExpertRef);
+            }
 
-            PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
-            pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
-            pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
-            pmDemandExpertRef.setCreateBy(pmBaseExpertFillReqVo.getCreateBy());
-            pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertFillReqVo.getAccessTime()));
-            pmDemandExpertRef.setCreateTime(now);
-            pmDemandExpertRef.setUpdateBy(pmBaseExpertFillReqVo.getCreateBy());
-            pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
-            pmDemandExpertRefList.add(pmDemandExpertRef);
         }
 
-          if (baseExpertService.saveOrUpdateBatch(baseExpertList)){
-              return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
-          } else {
-              return false;
-          }
+         return true;
     }
 
     @Override
@@ -846,13 +855,20 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
            throw new Exception("参数错误");
        }
 
+        String needAvoidUnit = pmBaseExpertExtractReqVo.getNeedAvoidUnit();
+        List<String> needAvoidUnitList = null;
+       if(!ObjectUtils.isEmpty(needAvoidUnit)){
+           String[] arr = needAvoidUnit.split(",");
+           needAvoidUnitList = Arrays.asList(arr);
+       }
+
 
         String localArea = pmBaseExpertExtractReqVo.getLocalArea();
-        if(!StringUtils.isNumeric(localArea)){
-            throw new Exception("地域必须传数字代码");
-        }
-       List<String> sysRegionCodeList = new ArrayList<>();
+        List<String> sysRegionCodeList = new ArrayList<>();
        if(!ObjectUtils.isEmpty(localArea)) {
+           if(!StringUtils.isNumeric(localArea)){
+               throw new Exception("地域必须传数字代码");
+           }
            sysRegionCodeList.add(localArea);
            //找到该地域code对应的子列表
            List<SysRegionVO> sysRegionVOList = iSysRegionService.findChildDivisions(localArea);
@@ -867,6 +883,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
        LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<>();
        lw.eq(BaseExpert::getVarietyPurchase,pmDemand.getProjectType())
                .eq(BaseExpert::getStatus,NameListType.WHITE.getCode())
+                .notIn(!ObjectUtils.isEmpty(needAvoidUnitList),BaseExpert::getUnitInformation,needAvoidUnitList)
                .in(!ObjectUtils.isEmpty(sysRegionCodeList), BaseExpert::getLocalArea,sysRegionCodeList);
 
        List<BaseExpert> baseExpertList = baseExpertService.list(lw);
@@ -935,17 +952,25 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
       } else {
           List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
           for(BaseExpert baseExpert :alltExpertList ) {
-              PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
+
+              LambdaQueryWrapper<PmDemandExpertRef> baseExpertLambdaQueryWrapper = new LambdaQueryWrapper<>();
+              baseExpertLambdaQueryWrapper.eq(PmDemandExpertRef::getExpertId, baseExpert.getId().longValue())
+                      .eq(PmDemandExpertRef::getDemandId,pmDemand.getDemandId())
+                      .eq(PmDemandExpertRef::getAccessTime,pmBaseExpertExtractReqVo.getAccessTime());
+              PmDemandExpertRef pmDemandExpertRef  = pmDemandExpertRefService.getOne(baseExpertLambdaQueryWrapper);
+              if(pmDemandExpertRef == null){
+                  pmDemandExpertRef = new PmDemandExpertRef();
+                  pmDemandExpertRef.setCreateBy(pmBaseExpertExtractReqVo.getCreateBy());
+                  pmDemandExpertRef.setCreateTime(new Date());
+              }
               pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
               pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
-              pmDemandExpertRef.setCreateBy(pmBaseExpertExtractReqVo.getCreateBy());
               pmDemandExpertRef.setAccessTime(DateUtils.parseDate(pmBaseExpertExtractReqVo.getAccessTime()));
-              pmDemandExpertRef.setCreateTime(new Date());
               pmDemandExpertRef.setUpdateBy(pmBaseExpertExtractReqVo.getCreateBy());
               pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
               pmDemandExpertRefList.add(pmDemandExpertRef);
           }
-          return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
+          return pmDemandExpertRefService.saveOrUpdateBatch(pmDemandExpertRefList);
       }
     }
 
@@ -1025,16 +1050,22 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
        if(pmBidWinningService.saveOrUpdate(pmBidWinning)){
            List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = new ArrayList<>();
            for(Long pmBidOpeningId : pmBidOpeningIdList){
-               PmBidWinningOpeningRef pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
+               LambdaQueryWrapper<PmBidWinningOpeningRef> pmBidWinningOpeningRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
+               pmBidWinningOpeningRefLambdaQueryWrapper.eq(PmBidWinningOpeningRef::getOpeningId,pmBidOpeningId)
+                       .eq(PmBidWinningOpeningRef::getWinningId,pmBidWinning.getId());
+               PmBidWinningOpeningRef pmBidWinningOpeningRef = pmBidWinningOpeningRefService.getOne(pmBidWinningOpeningRefLambdaQueryWrapper);
+               if(pmBidWinningOpeningRef == null){
+                   pmBidWinningOpeningRef = new PmBidWinningOpeningRef();
+                   pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
+                   pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
+               }
                pmBidWinningOpeningRef.setOpeningId(pmBidOpeningId);
                pmBidWinningOpeningRef.setWinningId(pmBidWinning.getId());
-               pmBidWinningOpeningRef.setCreateBy(pmBidWinningReqVo.getCreateBy());
-               pmBidWinningOpeningRef.setCreateTime(pmBidWinningReqVo.getCreateTime());
                pmBidWinningOpeningRef.setUpdateBy(pmBidWinningReqVo.getUpdateBy());
                pmBidWinningOpeningRef.setUpdateTime(pmBidWinningReqVo.getUpdateTime());
                pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
            }
-          if (pmBidWinningOpeningRefService.saveBatch(pmBidWinningOpeningRefList)) {
+          if (pmBidWinningOpeningRefService.saveOrUpdateBatch(pmBidWinningOpeningRefList)) {
               uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(),pmBidWinningReqVo.getSysFileRefs(),pmBidWinningReqVo.getUpdateBy());
               PmDemand pmDemandUpdate = new PmDemand();
               pmDemandUpdate.setDemandId(pmBidWinningReqVo.getDemandId());
@@ -1106,8 +1137,13 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         PmBidFailure pmBidFailure = new PmBidFailure();
         BeanUtils.copyProperties(pmBidFailureReqVo,pmBidFailure);
         if(pmBidFailureService.saveOrUpdate(pmBidFailure)){
-             uploadFile(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType(),pmBidFailureReqVo.getSysFileRefs(),pmBidFailureReqVo.getUpdateBy());
-             return true;
+            uploadFile(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType(),pmBidFailureReqVo.getSysFileRefs(),pmBidFailureReqVo.getUpdateBy());
+            PmDemand pmDemandUpdate = new PmDemand();
+            pmDemandUpdate.setDemandId(pmBidFailureReqVo.getDemandId());
+            pmDemandUpdate.setProjectStatus(PmProjectStatus.WAIT_ANNOUNCEMENT.getCode());
+            pmDemandUpdate.setUpdateTime(pmBidFailureReqVo.getUpdateTime());
+            pmDemandUpdate.setUpdateBy(pmBidFailureReqVo.getUpdateBy());
+            return this.updateById(pmDemandUpdate);
         } else {
             return false;
         }
@@ -1302,9 +1338,17 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         demandRes.addAll(getListByStatus(PmProjectStatus.WAIT_OPEN_BID.getCode()));
         demandRes.addAll(getListByStatus(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode()));
         demandRes.addAll(getListByStatus(PmProjectStatus.BIDDING_PUBLICITY.getCode()));
+
         //计划数据--发函催告
         List<PlanQuarterResponseVo> planRes = planYearsService.willSendLetter();
         //转为首页table展示数据
+        if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
+            for (PmDemandResVo demandResVoVo : demandRes) {
+                HomeToDoQueryResVo home = new HomeToDoQueryResVo();
+                BeanUtils.copyProperties(demandResVoVo, home);
+                homeRes.add(home);
+            }
+        }
         if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
             for (PlanQuarterResponseVo planVo : planRes) {
                 HomeToDoQueryResVo home = new HomeToDoQueryResVo();
@@ -1322,10 +1366,62 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
      */
     @Override
     public Map<String, Integer> purchaseProjectStatistical(PmDemandReqVo pmDemandReqVo) {
-        Map<String, Integer> map = pmDemandMapper.purchaseProjectStatistical(pmDemandReqVo);
-        return map;
+        Map<String, Integer> mapReturn = new HashMap<>();
+        // 查询项目总数量
+        Map<String, Integer> mapCount = pmDemandMapper.purchaseProjectStatistical(pmDemandReqVo);
+        // 查询已完成项目数量,预算金额数量
+        Map<String, Integer> mapYWC = pmDemandMapper.purchaseProjectStatisticalYWC(pmDemandReqVo);
+        // 查询新创建项目数量,预算金额数量
+        Map<String, Integer> mapXCJ = pmDemandMapper.purchaseProjectStatisticalXCJ(pmDemandReqVo);
+        // 查询去年完成项目数量,预算金额数量
+        Map<String, Integer> mapQNWC = pmDemandMapper.purchaseProjectStatisticalQNWC(pmDemandReqVo);
+        mapReturn.putAll(mapCount);
+        mapReturn.putAll(mapYWC);
+        mapReturn.putAll(mapXCJ);
+        mapReturn.putAll(mapQNWC);
+        return mapReturn;
+    }
+
+    @Override
+    public List<StatisticalChartsResVo> countByProjectAttr() {
+        List<StatisticalChartsResVo> resVos = pmDemandMapper.countByProjectAttr();
+        for (StatisticalChartsResVo chartsResVo : resVos) {
+            for (PmProjectStatus value : PmProjectStatus.values()) {
+                if (value.getCode().equals(chartsResVo.getColumnName())) {
+                    chartsResVo.setColumnName(value.getInfo());
+                    break;
+                }
+            }
+        }
+        return resVos;
+    }
+
+    @Override
+    public List<StatisticalChartsResVo> countByEvaluation() {
+        List<StatisticalChartsResVo> resVos = new ArrayList<>();
+        //概算金额包括:100万以下采购任务、100至500万元采购任务、500至1000万元采购任务、1000至5000万元采购任务、5000至1亿元采购任务、1亿元及以上采购任务
+        StatisticalChartsResVo resVo = pmDemandMapper.countByEvaluationLt(100);
+        resVo.setColumnName("100万以下采购任务");
+        resVos.add(resVo);
+        StatisticalChartsResVo resVo1 = pmDemandMapper.countByEvaluationBet(100, 500);
+        resVo1.setColumnName("100至500万元采购任务");
+        resVos.add(resVo1);
+        StatisticalChartsResVo resVo2 = pmDemandMapper.countByEvaluationBet(500, 1000);
+        resVo2.setColumnName("500至1000万元采购任务");
+        resVos.add(resVo2);
+        StatisticalChartsResVo resVo3 = pmDemandMapper.countByEvaluationBet(1000, 5000);
+        resVo3.setColumnName("1000至5000万元采购任务");
+        resVos.add(resVo3);
+        StatisticalChartsResVo resVo4 = pmDemandMapper.countByEvaluationBet(5000, 10000);
+        resVo4.setColumnName("5000至1亿元采购任务");
+        resVos.add(resVo4);
+        StatisticalChartsResVo resVo5 = pmDemandMapper.countByEvaluationGt(10000);
+        resVo5.setColumnName("1亿元及以上采购任务");
+        resVos.add(resVo5);
+        return resVos;
     }
 
+
     //查询不同状态下的项目数据
     public List<PmDemandResVo> getListByStatus(String projectStatus) {
         LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
@@ -1404,9 +1500,11 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     break;
                 }
             }
-
             try {
                 vo.setTipsMessage(pmDemandGetTips(vo.getPlanDeliverTime()));
+                if (vo.getTipsMessage().contains("超过")) {
+                    vo.setIsExceedProject("1");
+                }
             } catch (ParseException e) {
                 e.printStackTrace();
             }

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

@@ -42,13 +42,41 @@
             resultType="java.util.Map">
         -- DATE_FORMAT(plan_demand_sub_time,'%Y')
         select count(demand_id) countXCJ, ifnull(sum(evaluation), 0) evaluationXCJ
-        from pm_demand where project_status != '17' and year(plan_demand_sub_time) = year(NOW())
+        from pm_demand
+        where 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(demand_id) countQNWC, ifnull(sum(evaluation), 0) evaluationQNWC
-        from pm_demand where project_status != '17' and year(plan_demand_sub_time) = year(NOW())-1
+        from pm_demand
+        where project_status != '17' and year(plan_demand_sub_time) = year(NOW())-1
+    </select>
+
+    <select id="countByProjectAttr" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT project_status columnName, COUNT(demand_id) num, SUM(evaluation) evaluationTotal
+        FROM `pm_demand`
+        GROUP BY project_status
+    </select>
+
+    <select id="countByEvaluationLt" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, SUM(evaluation) evaluationTotal
+        FROM `pm_demand`
+        WHERE evaluation &lt; #{evaluation}
     </select>
-</mapper>
+
+    <select id="countByEvaluationBet" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, SUM(evaluation) evaluationTotal
+        FROM `pm_demand`
+        WHERE evaluation BETWEEN #{evaluation} and #{evaluationEnd}
+    </select>
+    <select id="countByEvaluationGt" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="java.lang.Integer">
+        SELECT COUNT(demand_id) num, SUM(evaluation) evaluationTotal
+        FROM `pm_demand`
+        WHERE evaluation &gt; #{evaluation}
+    </select>
+
+
+</mapper>