浏览代码

Merge branch 'master' of http://124.70.58.209:3000/ytrd-project-management/purchase

hexiao 2 年之前
父节点
当前提交
a3032f4cfe
共有 37 个文件被更改,包括 811 次插入236 次删除
  1. 35 1
      purchase-admin/src/main/java/com/ozs/web/controller/home/SystemHomepageController.java
  2. 7 5
      purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanQuarterController.java
  3. 7 4
      purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanYearsController.java
  4. 6 0
      purchase-admin/src/main/java/com/ozs/web/controller/pm/PmDemandController.java
  5. 4 16
      purchase-system/src/main/java/com/ozs/plan/doman/PlanQuarter.java
  6. 4 15
      purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java
  7. 4 6
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanQuarterStandardVo.java
  8. 5 7
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanYearsStandardVo.java
  9. 24 12
      purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanQuarterResponseVo.java
  10. 27 18
      purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanYearsResponseVo.java
  11. 1 1
      purchase-system/src/main/java/com/ozs/plan/mapper/PlanYearsMapper.java
  12. 3 2
      purchase-system/src/main/java/com/ozs/plan/service/PlanQuarterService.java
  13. 17 2
      purchase-system/src/main/java/com/ozs/plan/service/PlanYearsService.java
  14. 27 25
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java
  15. 48 13
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java
  16. 20 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBaseExpertResVo.java
  17. 59 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidFailureResVo.java
  18. 20 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidOpeningResVo.java
  19. 72 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmBidWinningResVo.java
  20. 21 0
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmPurchaseExecutionResVo.java
  21. 5 1
      purchase-system/src/main/java/com/ozs/pm/mapper/PmBidOpeningMapper.java
  22. 2 0
      purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandExpertRefMapper.java
  23. 27 4
      purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java
  24. 4 1
      purchase-system/src/main/java/com/ozs/pm/service/PmBidOpeningService.java
  25. 2 0
      purchase-system/src/main/java/com/ozs/pm/service/PmDemandExpertRefService.java
  26. 6 1
      purchase-system/src/main/java/com/ozs/pm/service/impl/PmBidOpeningServiceImpl.java
  27. 5 5
      purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandExpertRefServiceImpl.java
  28. 314 88
      purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java
  29. 5 1
      purchase-system/src/main/resources/mapper/plan/PlanQuarterMapper.xml
  30. 6 2
      purchase-system/src/main/resources/mapper/plan/PlanYearsMapper.xml
  31. 10 1
      purchase-system/src/main/resources/mapper/pm/PmBidOpeningMapper.xml
  32. 1 1
      purchase-system/src/main/resources/mapper/pm/PmBidWinningMapper.xml
  33. 1 1
      purchase-system/src/main/resources/mapper/pm/PmContractInfoMapper.xml
  34. 1 1
      purchase-system/src/main/resources/mapper/pm/PmContractUnitRefMapper.xml
  35. 9 0
      purchase-system/src/main/resources/mapper/pm/PmDemandExpertRefMapper.xml
  36. 1 1
      purchase-system/src/main/resources/mapper/pm/PmProjectConstructionMapper.xml
  37. 1 1
      purchase-system/src/main/resources/mapper/pm/PmReleaseAnnouncementMapper.xml

+ 35 - 1
purchase-admin/src/main/java/com/ozs/web/controller/home/SystemHomepageController.java

@@ -3,7 +3,9 @@ package com.ozs.web.controller.home;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.plan.service.PlanYearsService;
+import com.ozs.pm.service.IPmDemandService;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -21,6 +23,8 @@ import javax.annotation.Resource;
 public class SystemHomepageController extends BaseController {
     @Resource
     private PlanYearsService planYearsService;
+    @Resource
+    private IPmDemandService pmDemandService;
 
     @ApiOperation(value = "需求单位首页计划管理总数")
     @GetMapping("/demandUnit/planManagement/total")
@@ -81,5 +85,35 @@ public class SystemHomepageController extends BaseController {
     public AjaxResult procurementOfficeFailureToWinTheBidTotal() {
         return planYearsService.procurementOfficeFailureToWinTheBidTotal();
     }
-    
+
+    @ApiOperation(value = "需求单位首页待办事项(全部)")
+    @GetMapping("/demandUnit/will/total")
+    public AjaxResult demandUnitWillManipulateTotal() {
+        return planYearsService.demandUnitWillManipulateTotal();
+    }
+
+    @ApiOperation(value = "需求单位首页待办事项(计划待提交)")
+    @GetMapping("/demandUnit/will/planWaitCommit")
+    public AjaxResult planWaitCommit() {
+        return planYearsService.planWaitCommit();
+    }
+
+    @ApiOperation(value = "需求单位首页待办事项(需求待提交)")
+    @GetMapping("/demandUnit/will/demandWaitCommit")
+    public AjaxResult demandUnit() {
+        return pmDemandService.demandWaitCommit();
+    }
+
+    @ApiOperation(value = "需求单位首页待办事项(合同待填制)")
+    @GetMapping("/demandUnit/will/contractWaitFilled")
+    public AjaxResult contractWaitContract() {
+        return pmDemandService.contractWaitFilled();
+    }
+
+    @ApiOperation(value = "需求单位首页待办事项(项目建设待完成)")
+    @GetMapping("/demandUnit/will/projectWaitFinish")
+    public AjaxResult projectWaitFinish() {
+        return pmDemandService.projectWaitFinish();
+    }
+
 }

+ 7 - 5
purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanQuarterController.java

@@ -1,7 +1,6 @@
 package com.ozs.web.controller.plan;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.pagehelper.PageInfo;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.model.LoginUser;
@@ -9,7 +8,9 @@ import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.framework.web.service.TokenService;
 import com.ozs.plan.doman.PlanQuarter;
 import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
+import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
 import com.ozs.plan.service.PlanQuarterService;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,6 +28,7 @@ import java.util.List;
  *
  * @author buzhanyi
  */
+@Api(tags = "季度计划")
 @RestController
 @RequestMapping("/plan/quarter")
 public class PlanQuarterController extends BaseController {
@@ -52,16 +54,16 @@ public class PlanQuarterController extends BaseController {
     @ApiOperation(value = "导出季度计划数据")
     @PostMapping("/exportPlan")
     public void exportPlan(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo) throws Exception {
-        List<PlanQuarter> list = quarterService.selectPlanQuarterListEXP(quarterStandardVo);
-        ExcelUtil<PlanQuarter> util = new ExcelUtil<>(PlanQuarter.class);
+        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterListEXP(quarterStandardVo);
+        ExcelUtil<PlanQuarterResponseVo> util = new ExcelUtil<>(PlanQuarterResponseVo.class);
         util.exportExcel(response, list, "季度计划数据");
     }
 
     @ApiOperation(value = "导出季度计划数据(审核单位)")
     @PostMapping("/exportPlanExamine")
     public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo) throws Exception {
-        List<PlanQuarter> list = quarterService.selectPlanQuarterExamineListEXP(quarterStandardVo);
-        ExcelUtil<PlanQuarter> util = new ExcelUtil<>(PlanQuarter.class);
+        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterExamineListEXP(quarterStandardVo);
+        ExcelUtil<PlanQuarterResponseVo> util = new ExcelUtil<>(PlanQuarterResponseVo.class);
         util.exportExcel(response, list, "季度计划数据(审核单位)");
     }
 

+ 7 - 4
purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanYearsController.java

@@ -8,7 +8,9 @@ import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.framework.web.service.TokenService;
 import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
+import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
 import com.ozs.plan.service.PlanYearsService;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -27,6 +29,7 @@ import java.util.List;
  *
  * @author buzhanyi
  */
+@Api(tags = "年度计划")
 @RestController
 @RequestMapping("/plan/planYears")
 public class PlanYearsController extends BaseController {
@@ -53,16 +56,16 @@ public class PlanYearsController extends BaseController {
     @ApiOperation(value = "导出年度计划数据")
     @PostMapping("/exportPlan")
     public void exportPlan(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo) throws Exception {
-        List<PlanYears> list = planYearsService.selectPlanYearsListEXP(yearsStandardVo);
-        ExcelUtil<PlanYears> util = new ExcelUtil<>(PlanYears.class);
+        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsListEXP(yearsStandardVo);
+        ExcelUtil<PlanYearsResponseVo> util = new ExcelUtil<>(PlanYearsResponseVo.class);
         util.exportExcel(response, list, "年度计划数据");
     }
 
     @ApiOperation(value = "导出年度计划数据(审核单位)")
     @PostMapping("/exportPlanExamine")
     public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo) throws Exception {
-        List<PlanYears> list = planYearsService.selectPlanYearsExamineListEXP(yearsStandardVo);
-        ExcelUtil<PlanYears> util = new ExcelUtil<>(PlanYears.class);
+        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsExamineListEXP(yearsStandardVo);
+        ExcelUtil<PlanYearsResponseVo> util = new ExcelUtil<>(PlanYearsResponseVo.class);
         util.exportExcel(response, list, "年度计划数据(审核单位)");
     }
 

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.framework.web.service.TokenService;
+import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.doman.vo.requestVo.PmBookBuildingReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
 import com.ozs.pm.doman.vo.responseVo.PmDemandResVo;
@@ -13,6 +14,7 @@ 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;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -72,6 +74,10 @@ public class PmDemandController extends BaseController {
         if(pmBookBuildingReqVo.getDemandId() == null){
             return AjaxResult.error("demandId不能为空");
         }
+        PmDemand pmDemand = pmDemandService.getById(pmBookBuildingReqVo.getDemandId());
+        if(ObjectUtils.isEmpty(pmDemand)){
+            return error("demandId参数错误");
+        }
         LoginUser loginUser = tokenService.getLoginUser(request);
         pmBookBuildingReqVo.setUpdateBy(String.valueOf(loginUser.getUserId()));
         return toAjax(pmDemandService.bookBuilding(pmBookBuildingReqVo));

+ 4 - 16
purchase-system/src/main/java/com/ozs/plan/doman/PlanQuarter.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.common.annotation.Excel;
 import lombok.Data;
 import nonapi.io.github.classgraph.json.Id;
 
@@ -39,13 +38,11 @@ public class PlanQuarter {
     @NotNull(message = "采购单位不能为空")
     private String purchaseDeptId;
 
-    @Excel(name = "采购单位")
     @TableField(exist = false)
     private String purchaseDeptName;
     /**
      * 项目名称
      */
-    @Excel(name = "项目名称")
     @NotNull(message = "项目名称不能为空")
     private String projectName;
     /**
@@ -53,19 +50,16 @@ public class PlanQuarter {
      */
     @NotNull(message = "项目类型不能为空")
     private String projectType;
-    @Excel(name = "项目类型")
     @TableField(exist = false)
     private String projectTypeStr;
     /**
      * 需求概况
      */
-    @Excel(name = "需求概况")
     @NotNull(message = "需求概况不能为空")
     private String demandOverview;
     /**
      * 概算金额(万元(保留小数点后两位)
      */
-    @Excel(name = "概算金额(万元)")
     @NotNull(message = "概算金额不能为空")
     private BigDecimal evaluation;
     /**
@@ -78,7 +72,6 @@ public class PlanQuarter {
      */
     @NotNull(message = "采购服务站不能为空")
     private String purchaseServices;
-    @Excel(name = "采购服务站")
     @TableField(exist = false)
     private String purchaseServicesStr;
     /**
@@ -86,27 +79,23 @@ public class PlanQuarter {
      */
     @NotNull(message = "采购方式不能为空")
     private String purchaseMode;
-    @Excel(name = "采购方式")
     @TableField(exist = false)
     private String purchaseModeStr;
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划提报需求时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划完成采购时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划交付时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;
@@ -116,24 +105,20 @@ public class PlanQuarter {
     @NotNull(message = "项目属性不能为空")
     private String projectAttr;
 
-    @Excel(name = "项目属性")
     @TableField(exist = false)
     private String projectAttrStr;
     /**
      * 退回原因--->审核不通过就是退回
      */
-    @Excel(name = "退回原因")
     private String refuseReason;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */
-    @Excel(name = "计划调整情况及理由")
     @NotNull(message = "计划调整情况及理由不能为空")
     private String adjustReason;
     /**
      * 备注
      */
-    @Excel(name = "备注")
     private String remarks;
 
     /**
@@ -145,7 +130,10 @@ public class PlanQuarter {
      * 发函状态(0:未发函或已处理,1:确认发函)
      */
     private String sendLetter;
-
+    /**
+     * 发函内容
+     */
+    private String letterStr;
     /**
      * 创建者
      */

+ 4 - 15
purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ozs.common.annotation.Excel;
 import lombok.Data;
 import nonapi.io.github.classgraph.json.Id;
 
@@ -31,13 +30,11 @@ public class PlanYears {
     @NotNull(message = "采购单位不能为空")
     private String purchaseDeptId;
 
-    @Excel(name = "采购单位")
     @TableField(exist = false)
     private String purchaseDeptName;
     /**
      * 项目名称
      */
-    @Excel(name = "项目名称")
     @NotNull(message = "项目名称不能为空")
     private String projectName;
     /**
@@ -45,19 +42,16 @@ public class PlanYears {
      */
     @NotNull(message = "项目类型不能为空")
     private String projectType;
-    @Excel(name = "项目类型")
     @TableField(exist = false)
     private String projectTypeStr;
     /**
      * 需求概况
      */
-    @Excel(name = "需求概况")
     @NotNull(message = "需求概况不能为空")
     private String demandOverview;
     /**
      * 概算金额(万元(保留小数点后两位)
      */
-    @Excel(name = "概算金额(万元)")
     @NotNull(message = "概算金额不能为空")
     private BigDecimal evaluation;
     /**
@@ -70,7 +64,6 @@ public class PlanYears {
      */
     @NotNull(message = "采购服务站不能为空")
     private String purchaseServices;
-    @Excel(name = "采购服务站")
     @TableField(exist = false)
     private String purchaseServicesStr;
     /**
@@ -78,27 +71,23 @@ public class PlanYears {
      */
     @NotNull(message = "采购方式不能为空")
     private String purchaseMode;
-    @Excel(name = "采购方式")
     @TableField(exist = false)
     private String purchaseModeStr;
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划提报需求时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划完成采购时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划交付时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;
@@ -108,24 +97,20 @@ public class PlanYears {
     @NotNull(message = "项目属性不能为空")
     private String projectAttr;
 
-    @Excel(name = "项目属性")
     @TableField(exist = false)
     private String projectAttrStr;
     /**
      * 退回原因--->审核不通过就是退回
      */
-    @Excel(name = "退回原因")
     private String refuseReason;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */
-    @Excel(name = "计划调整情况及理由")
     @NotNull(message = "计划调整情况及理由不能为空")
     private String adjustReason;
     /**
      * 备注
      */
-    @Excel(name = "备注")
     private String remarks;
 
     /**
@@ -137,6 +122,10 @@ public class PlanYears {
      * 发函状态(0:未发函或已处理,1:确认发函)
      */
     private String sendLetter;
+    /**
+     * 发函内容
+     */
+    private String letterStr;
 
 
     /**

+ 4 - 6
purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanQuarterStandardVo.java

@@ -120,7 +120,10 @@ public class PlanQuarterStandardVo extends PageVo {
      */
     @ApiModelProperty(value = "项目状态(0:计划待提交,1:计划待审核,2:计划已退回,3:计划已审核)")
     private String projectStatus;
-
+    /**
+     * 发函内容
+     */
+    private String letterStr;
     /**
      * 退回原因--->审核不通过就是退回
      */
@@ -133,11 +136,6 @@ public class PlanQuarterStandardVo extends PageVo {
     @ApiModelProperty(value = "备注")
     private String remarks;
 
-    /**
-     * 退回原因--->审核不通过就是退回
-     */
-    @ApiModelProperty(value = "退回原因")
-    private String reasonOfReturn;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */

+ 5 - 7
purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanYearsStandardVo.java

@@ -116,10 +116,14 @@ public class PlanYearsStandardVo extends PageVo {
      */
     @ApiModelProperty(value = "项目状态(0:计划待提交,1:计划待审核,2:计划已退回,3:计划已审核)")
     private String projectStatus;
-
+    /**
+     * 发函内容
+     */
+    private String letterStr;
     /**
      * 退回原因--->审核不通过就是退回
      */
+    @ApiModelProperty(value = "退回原因")
     private String refuseReason;
 
     /**
@@ -129,12 +133,6 @@ public class PlanYearsStandardVo extends PageVo {
     @ApiModelProperty(value = "备注")
     private String remarks;
 
-    /**
-     * 退回原因--->审核不通过就是退回
-     */
-    @ApiModelProperty(value = "退回原因")
-    private String reasonOfReturn;
-
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */

+ 24 - 12
purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanQuarterResponseVo.java

@@ -28,18 +28,20 @@ public class PlanQuarterResponseVo implements Serializable {
     /**
      * 采购单位(登录账号的单位)
      */
+    private String purchaseDeptId;
     @Excel(name = "采购单位")
-    private Long purchaseDeptId;
+    private String purchaseDeptName;
     /**
      * 项目名称
      */
     @Excel(name = "项目名称")
     private String projectName;
     /**
-     * 项目名称
+     * 项目类型
      */
-    @Excel(name = "项目类型")
     private String projectType;
+    @Excel(name = "项目类型")
+    private String projectTypeStr;
     /**
      * 需求概况
      */
@@ -48,46 +50,49 @@ public class PlanQuarterResponseVo implements Serializable {
     /**
      * 概算金额(万元(保留小数点后两位)
      */
-    @Excel(name = "概算金额")
+    @Excel(name = "概算金额(万元)")
     private BigDecimal evaluation;
     /**
      * 是否为超限额计划(0:未超额,1:超额)
      */
-    @Excel(name = "是否为超限额计划")
     private String isExcess;
     /**
      * 采购服务站
      */
-    @Excel(name = "采购服务站")
     private String purchaseServices;
+    @Excel(name = "采购服务站")
+    private String purchaseServicesStr;
     /**
      * 采购方式 (0:公开招标, 1:单一来源,2:邀请招标,3:竞争式谈判,4:询价)
      */
-    @Excel(name = "采购方式")
     private String purchaseMode;
+    @Excel(name = "采购方式")
+    private String purchaseModeStr;
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "计划提报需求时间")
+    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "计划完成采购时间")
+    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "计划交付时间")
+    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;
     /**
      * 项目属性--->应急应战项目、重大规划任务项目、规划任务项目或一般项目
      */
-    @Excel(name = "项目属性")
     private String projectAttr;
+    @Excel(name = "项目属性")
+    private String projectAttrStr;
+
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */
@@ -102,13 +107,20 @@ public class PlanQuarterResponseVo implements Serializable {
      * 项目状态--->包括计划待提交、计划待审核、计划已退回、计划已审核
      * (0:计划待提交,1:计划待审核,2:计划已退回,3:计划已审核)
      */
-    @Excel(name = "项目状态")
     private String projectStatus;
 
     /**
      * 发函状态(0:未发函或已处理,1:确认发函)
      */
     private String sendLetter;
+    /**
+     * 发函内容
+     */
+    private String letterStr;
+    /**
+     * 逻辑删除字段--->(0:正常,1:已删除)
+     */
+    private Integer delFlay;
     /**
      * 计划类型(0:季度计划,1:临时计划)
      */

+ 27 - 18
purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanYearsResponseVo.java

@@ -9,7 +9,6 @@ import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -25,8 +24,12 @@ public class PlanYearsResponseVo implements Serializable {
     /**
      * 采购单位(登录账号的单位)
      */
+    private String purchaseDeptId;
+    /**
+     * 采购单位名称
+     */
     @Excel(name = "采购单位")
-    private Long purchaseDeptId;
+    private String purchaseDeptName;
     /**
      * 项目名称
      */
@@ -35,8 +38,9 @@ public class PlanYearsResponseVo implements Serializable {
     /**
      * 项目名称
      */
-    @Excel(name = "项目类型")
     private String projectType;
+    @Excel(name = "项目类型")
+    private String projectTypeStr;
     /**
      * 需求概况
      */
@@ -45,50 +49,54 @@ public class PlanYearsResponseVo implements Serializable {
     /**
      * 概算金额(万元(保留小数点后两位)
      */
-    @Excel(name = "概算金额")
+    @Excel(name = "概算金额(万元)")
     private BigDecimal evaluation;
     /**
      * 是否为超限额计划(0:未超额,1:超额)
      */
-    @Excel(name = "是否为超限额计划")
     private String isExcess;
     /**
      * 采购服务站
      */
-    @Excel(name = "采购服务站")
     private String purchaseServices;
+    @Excel(name = "采购服务站")
+    private String purchaseServicesStr;
     /**
      * 采购方式 (0:公开招标, 1:单一来源,2:邀请招标,3:竞争式谈判,4:询价)
      */
-    @Excel(name = "采购方式")
     private String purchaseMode;
+    @Excel(name = "采购方式")
+    private String purchaseModeStr;
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "计划提报需求时间")
+    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "计划完成采购时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "计划交付时间")
+    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;
     /**
      * 项目属性--->应急应战项目、重大规划任务项目、规划任务项目或一般项目
      */
-    @Excel(name = "项目属性")
     private String projectAttr;
+    @Excel(name = "项目属性")
+    private String projectAttrStr;
+    /**
+     * 退回原因--->审核不通过就是退回
+     */
+    private String refuseReason;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */
-    @Excel(name = "计划调整情况及理由")
     private String adjustReason;
     /**
      * 备注
@@ -99,22 +107,23 @@ public class PlanYearsResponseVo implements Serializable {
      * 项目状态--->包括计划待提交、计划待审核、计划已退回、计划已审核
      * (0:计划待提交,1:计划待审核,2:计划已退回,3:计划已审核)
      */
-    @Excel(name = "项目状态")
     private String projectStatus;
 
     /**
      * 发函状态(0:未发函或已处理,1:确认发函)
      */
     private String sendLetter;
-
     /**
-     * 退回原因--->审核不通过就是退回
+     * 发函内容
      */
-    private String refuseReason;
-
+    private String letterStr;
     /**
      * 已上传的关联附件信息
      */
     List<SysFileInfo> fileInfos;
+    /**
+     * 逻辑删除字段--->(0:正常,1:已删除)
+     */
+    private Integer delFlay;
 
 }

+ 1 - 1
purchase-system/src/main/java/com/ozs/plan/mapper/PlanYearsMapper.java

@@ -86,5 +86,5 @@ public interface PlanYearsMapper extends BaseMapper<PlanYears> {
 
     public Integer review(PlanYearsStandardVo vo);
 
-    Integer sendLetter(Long planYearId);
+    public Integer sendLetter(PlanYearsStandardVo yearsStandardVo);
 }

+ 3 - 2
purchase-system/src/main/java/com/ozs/plan/service/PlanQuarterService.java

@@ -7,6 +7,7 @@ import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.plan.doman.PlanQuarter;
 import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
 import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
+import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
 
 import java.util.List;
 
@@ -31,7 +32,7 @@ public interface PlanQuarterService {
      * @param vo 季度计划请求对象
      * @return 季度计划记录集合
      */
-    public List<PlanQuarter> selectPlanQuarterListEXP(PlanQuarterStandardVo vo);
+    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo);
 
     /**
      * 查询季度计划记录集合(审核单位)
@@ -47,7 +48,7 @@ public interface PlanQuarterService {
      * @param vo 季度计划请求对象
      * @return 季度计划记录集合
      */
-    public List<PlanQuarter> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo);
+    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo);
 
     /**
      * 创建季度计划

+ 17 - 2
purchase-system/src/main/java/com/ozs/plan/service/PlanYearsService.java

@@ -7,6 +7,7 @@ import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
+import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
 import com.ozs.system.domain.SysOperLog;
 
 import java.util.List;
@@ -32,7 +33,7 @@ public interface PlanYearsService extends IService<PlanYears> {
      * @param vo 年度计划请求对象
      * @return 年度计划记录集合
      */
-    public List<PlanYears> selectPlanYearsListEXP(PlanYearsStandardVo vo);
+    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo);
 
     /**
      * 查询年度计划记录集合(审核单位)
@@ -48,7 +49,7 @@ public interface PlanYearsService extends IService<PlanYears> {
      * @param vo 年度计划请求对象
      * @return 年度计划记录集合
      */
-    public List<PlanYears> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo);
+    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo);
 
     /**
      * 创建年度计划
@@ -211,4 +212,18 @@ public interface PlanYearsService extends IService<PlanYears> {
      * @return
      */
     AjaxResult procurementOfficeFailureToWinTheBidTotal();
+
+    /**
+     * 查询需求单位待办事项(全部)
+     *
+     * @return
+     */
+    AjaxResult demandUnitWillManipulateTotal();
+
+    /**
+     * 查询需求单位待办事项(计划待提交)
+     *
+     * @return
+     */
+    AjaxResult planWaitCommit();
 }

+ 27 - 25
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java

@@ -21,6 +21,7 @@ import com.ozs.plan.doman.PlanQuarter;
 import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
 import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
+import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
 import com.ozs.plan.mapper.PlanQuarterMapper;
 import com.ozs.plan.mapper.PlanYearsMapper;
 import com.ozs.plan.service.PlanQuarterService;
@@ -79,7 +80,7 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
     public Page selectPlanQuarterList(PlanQuarterStandardVo vo) {
         PlanQuarter quarters = new PlanQuarter();
         List<PlanQuarter> planQuarter;
-        List<PlanQuarter> planQuarterList = new ArrayList<>();
+        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
             BeanUtils.copyProperties(vo, quarters);
             planQuarter = planQuarterMapper.selectPlanQuarterList(quarters);
@@ -92,9 +93,9 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
     }
 
     @Override
-    public List<PlanQuarter> selectPlanQuarterListEXP(PlanQuarterStandardVo vo) {
+    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo) {
         List<PlanQuarter> list = new ArrayList<>();
-        List<PlanQuarter> planQuarterList = new ArrayList<>();
+        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
             int num = 1;
             int size = 200;
@@ -135,7 +136,7 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
     public Page selectPlanQuarterExamineList(PlanQuarterStandardVo vo) {
         PlanQuarter quarters = new PlanQuarter();
         List<PlanQuarter> planQuarter;
-        List<PlanQuarter> planQuarterList = new ArrayList<>();
+        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
             BeanUtils.copyProperties(vo, quarters);
             planQuarter = planQuarterMapper.selectPlanQuarterExamineList(quarters);
@@ -148,9 +149,9 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
     }
 
     @Override
-    public List<PlanQuarter> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo) {
+    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo) {
         List<PlanQuarter> list = new ArrayList<>();
-        List<PlanQuarter> planQuarterList = new ArrayList<>();
+        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
             int num = 1;
             int size = 200;
@@ -547,35 +548,36 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
     }
 
     //字段赋值对应的名称
-    public List<PlanQuarter> changeTo(List<PlanQuarter> planQuarter) {
+    public List<PlanQuarterResponseVo> changeTo(List<PlanQuarter> planQuarters) {
 
         HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
         HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
         HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
         HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
         HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
-        List<PlanQuarter> list = new ArrayList<PlanQuarter>();
-        for (PlanQuarter planYear : planQuarter) {
-            SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planYear.getPurchaseDeptId())).get("sysDept");
-            planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
+        List<PlanQuarterResponseVo> list = new ArrayList<PlanQuarterResponseVo>();
+        for (PlanQuarter planQuarter : planQuarters) {
+            PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo();
+            SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planQuarter.getPurchaseDeptId())).get("sysDept");
+            planQuarter.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
 
             for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
-                if (planYear.getProjectType().equals(entry.getValue())) {
-                    planYear.setProjectTypeStr(entry.getKey());
+                if (planQuarter.getProjectType().equals(entry.getValue())) {
+                    planQuarter.setProjectTypeStr(entry.getKey());
                     break;
                 }
             }
             for (Map.Entry<String, String> entry : planPurchaseModesMap.entrySet()) {
-                if (planYear.getPurchaseMode().equals(entry.getValue())) {
-                    planYear.setPurchaseModeStr(entry.getKey());
+                if (planQuarter.getPurchaseMode().equals(entry.getValue())) {
+                    planQuarter.setPurchaseModeStr(entry.getKey());
                     break;
                 }
             }
             //项目属性是拼接的
-            if (!ObjectUtils.isEmpty(planYear.getProjectAttr())) {
-                if (planYear.getProjectAttr().length() > 1) {
+            if (!ObjectUtils.isEmpty(planQuarter.getProjectAttr())) {
+                if (planQuarter.getProjectAttr().length() > 1) {
                     StringBuilder builder = new StringBuilder();
-                    String[] split = planYear.getProjectAttr().split(",");
+                    String[] split = planQuarter.getProjectAttr().split(",");
                     for (String s : split) {
                         for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
                             if (s.equals(entry.getValue())) {
@@ -584,24 +586,24 @@ public class PlanQuarterServiceImpl implements PlanQuarterService {
                             }
                         }
                     }
-                    planYear.setProjectAttrStr(builder.toString());
+                    planQuarter.setProjectAttrStr(builder.toString());
                 } else {
                     for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
-                        if (planYear.getProjectAttr().equals(entry.getValue())) {
-                            planYear.setProjectAttrStr(entry.getKey());
+                        if (planQuarter.getProjectAttr().equals(entry.getValue())) {
+                            planQuarter.setProjectAttrStr(entry.getKey());
                             break;
                         }
                     }
                 }
             }
             for (Map.Entry<String, String> entry : purchaseServices.entrySet()) {
-                if (planYear.getPurchaseServices().equals(entry.getValue())) {
-                    planYear.setPurchaseServicesStr(entry.getKey());
+                if (planQuarter.getPurchaseServices().equals(entry.getValue())) {
+                    planQuarter.setPurchaseServicesStr(entry.getKey());
                     break;
                 }
             }
-
-            list.add(planYear);
+            BeanUtils.copyProperties(planQuarter, responseVo);
+            list.add(responseVo);
         }
         return list;
     }

+ 48 - 13
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -24,6 +24,7 @@ import com.ozs.common.utils.bean.BeanUtils;
 import com.ozs.plan.doman.PlanQuarter;
 import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
+import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
 import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
 import com.ozs.plan.mapper.PlanQuarterMapper;
 import com.ozs.plan.mapper.PlanYearsMapper;
@@ -41,7 +42,6 @@ import com.ozs.system.service.ISysDictTypeService;
 import com.ozs.system.service.ISysUserService;
 import com.ozs.system.service.SysFileService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -86,12 +86,14 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     private ISysUserService userService;
     @Autowired
     private PmDemandMapper pmDemandMapper;
+    @Autowired
+    private PlanQuarterServiceImpl quartzServiceImpl;
 
     @Override
     public Page selectPlanYearsList(PlanYearsStandardVo vo) {
         PlanYears ofYears = new PlanYears();
         List<PlanYears> planYears;
-        List<PlanYears> planYearsList = new ArrayList<>();
+        List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
             BeanUtils.copyProperties(vo, ofYears);
             planYears = planYearsMapper.selectPlanYearsList(ofYears);
@@ -104,9 +106,9 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     }
 
     @Override
-    public List<PlanYears> selectPlanYearsListEXP(PlanYearsStandardVo vo) {
+    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo) {
         List<PlanYears> list = new ArrayList<>();
-        List<PlanYears> planYearsList = new ArrayList<>();
+        List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
             int num = 1;
             int size = 200;
@@ -147,7 +149,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     public Page selectPlanYearsExamineList(PlanYearsStandardVo vo) {
         PlanYears ofYears = new PlanYears();
         List<PlanYears> planYears;
-        List<PlanYears> planYearsList = new ArrayList<>();
+        List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
             BeanUtils.copyProperties(vo, ofYears);
             planYears = planYearsMapper.selectPlanYearsExamineList(ofYears);
@@ -160,9 +162,9 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     }
 
     @Override
-    public List<PlanYears> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo) {
+    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo) {
         List<PlanYears> list = new ArrayList<>();
-        List<PlanYears> planYearsList = new ArrayList<>();
+        List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
             int num = 1;
             int size = 200;
@@ -507,7 +509,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
 
     @Override
     public AjaxResult sendLetter(PlanYearsStandardVo yearsStandardVo) {
-        int review = planYearsMapper.sendLetter(yearsStandardVo.getPlanYearId());
+        int review = planYearsMapper.sendLetter(yearsStandardVo);
         if (review != 1) {
             return AjaxResult.error("项目状态数据异常");
         }
@@ -799,6 +801,38 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         return AjaxResult.success(pmDemands.size());
     }
 
+    @Override
+    public AjaxResult demandUnitWillManipulateTotal() {
+        return null;
+    }
+
+    /**
+     * 查询需求单位待办事项(计划待提交)
+     *
+     * @return
+     */
+    @Override
+    public AjaxResult planWaitCommit() {
+        LambdaQueryWrapper<PlanYears> yearsLp = new LambdaQueryWrapper<PlanYears>();
+        yearsLp.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete);
+        yearsLp.eq(PlanYears::getProjectStatus, ProjectStatus.PLANWAITCOMMIT.getCode());
+        List<PlanYears> planYears = planYearsMapper.selectList(yearsLp);
+
+        LambdaQueryWrapper<PlanQuarter> quarterLp = new LambdaQueryWrapper<PlanQuarter>();
+        quarterLp.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete);
+        quarterLp.eq(PlanQuarter::getProjectStatus, ProjectStatus.PLANWAITCOMMIT.getCode());
+        List<PlanQuarter> planQuarters = planQuarterMapper.selectList(quarterLp);
+
+        List<PlanYearsResponseVo> yearsRes = changeTo(planYears);
+        List<PlanQuarterResponseVo> quarterRes = quartzServiceImpl.changeTo(planQuarters);
+        for (PlanYearsResponseVo yearsRe : yearsRes) {
+            PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo();
+            BeanUtils.copyProperties(yearsRe, responseVo);
+            quarterRes.add(responseVo);
+        }
+        return AjaxResult.success(quarterRes);
+    }
+
     //判断是否为超额计划
     public String isExcessOrNo(String projectType, BigDecimal evaluation) {
         BigDecimal threshold = new BigDecimal(0);
@@ -826,15 +860,16 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     }
 
     //字段赋值对应的名称
-    public List<PlanYears> changeTo(List<PlanYears> planYears) {
-
+    public List<PlanYearsResponseVo> changeTo(List<PlanYears> planYears) {
+        //获取字典数据
         HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
         HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
         HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
         HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
         HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
-        List<PlanYears> list = new ArrayList<PlanYears>();
+        List<PlanYearsResponseVo> list = new ArrayList<PlanYearsResponseVo>();
         for (PlanYears planYear : planYears) {
+            PlanYearsResponseVo responseVo = new PlanYearsResponseVo();
             SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planYear.getPurchaseDeptId())).get("sysDept");
             planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
 
@@ -879,8 +914,8 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     break;
                 }
             }
-
-            list.add(planYear);
+            BeanUtils.copyProperties(planYear, responseVo);
+            list.add(responseVo);
         }
         return list;
     }

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

@@ -0,0 +1,20 @@
+package com.ozs.pm.doman.vo.responseVo;
+
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+public class PmBaseExpertResVo{
+
+    @ApiModelProperty("需求ID")
+    private Long demandId;
+
+    @ApiModelProperty("专家数量")
+    private Integer expertCount;
+
+    @ApiModelProperty("选取时间 yyy-MM-dd")
+    private String accessTime;
+}

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

@@ -0,0 +1,59 @@
+package com.ozs.pm.doman.vo.responseVo;
+
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+
+/**
+ * 流标基本情况表(PmBidFailure)实体类
+ *
+ * @author makejava
+ * @since 2023-02-02 00:47:21
+ */
+
+@Data
+public class PmBidFailureResVo implements Serializable {
+    private static final long serialVersionUID = 491684278331772388L;
+
+    private Long id;
+
+
+    @ApiModelProperty("需求ID")
+    private Long demandId;
+
+
+    @ApiModelProperty("流标原因")
+    private String bidFailureReason;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("流标时间")
+    private Date bidFailureTime;
+
+
+    @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;
+
+    /**
+     * 上传附件的URL
+     */
+    @ApiModelProperty("上传附件的URL")
+    HashMap<String, String> fileMap;
+}

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

@@ -0,0 +1,20 @@
+package com.ozs.pm.doman.vo.responseVo;
+
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+public class PmBidOpeningResVo {
+
+    @ApiModelProperty("需求ID")
+    private Long demandId;
+
+    @ApiModelProperty("参与数量")
+    private Integer partakeCount;
+
+    @ApiModelProperty("开标时间 yyy-MM-dd")
+    private String openBidTime;
+}

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

@@ -0,0 +1,72 @@
+package com.ozs.pm.doman.vo.responseVo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.system.domain.SysFileRef;
+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;
+
+/**
+ * 中标基本情况表(PmBidWinning)实体类
+ *
+ * @author makejava
+ * @since 2023-02-02 00:47:22
+ */
+
+@Data
+@ApiModel(value = "中标基本情况表", description = "")
+public class PmBidWinningResVo implements Serializable {
+    private static final long serialVersionUID = -23785941414293726L;
+
+    private Long id;
+
+
+    @ApiModelProperty("需求ID")
+    private Long demandId;
+
+
+    @ApiModelProperty("中标金额(万元)")
+    private Double bidWinningAmount;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("中标公告时间")
+    private Date bidAnnouncementTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("中标公告截止时间")
+    private Date bidAnnouncementCloseTime;
+
+
+    @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;
+
+    /**
+     * 中标单位信息列表
+     */
+    @ApiModelProperty("中标单位信息列表")
+    private List<Long> pmBidOpeningIdList;
+
+    /**
+     * 上传附件的URL
+     */
+    @ApiModelProperty("上传附件的URL")
+    HashMap<String, String> fileMap;
+}

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

@@ -36,6 +36,27 @@ public class PmPurchaseExecutionResVo {
     @ApiModelProperty("发布公告列表")
     private List<PmReleaseAnnouncementResVo> pmReleaseAnnouncementResVoList;
 
+    @ApiModelProperty("专家列表")
+    private List<PmBaseExpertResVo> pmBaseExpertResVoList;
+
+    @ApiModelProperty("开标信息列表")
+    private List<PmBidOpeningResVo> pmBidOpeningResVoList;
+
+    @ApiModelProperty("中标信息列表")
+    private List<PmBidWinningResVo> pmBidWinningResVoList;
+    /**
+     *
+     * 质疑情况附件
+     */
+    @ApiModelProperty("质疑情况附件")
+    HashMap<String, String> callRequestFileMap;
+
+    @ApiModelProperty("流标信息列表")
+    private List<PmBidFailureResVo> pmBidFailureResVoList;
+
+    @ApiModelProperty("中标通知书")
+    HashMap<String, String> pmBidWinningNotificationFileMap;
+
     /**
      *
      * 上传附件的URL

+ 5 - 1
purchase-system/src/main/java/com/ozs/pm/mapper/PmBidOpeningMapper.java

@@ -2,6 +2,10 @@ package com.ozs.pm.mapper;
 
 import com.ozs.pm.doman.PmBidOpening;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
@@ -11,5 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-02-02 00:47:22
  */
 public interface PmBidOpeningMapper extends BaseMapper<PmBidOpening> {
-
+    List<PmBidOpeningResVo> getPmBidOpeningResVoList(@Param("projectName") Long demnadId);
 }

+ 2 - 0
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandExpertRefMapper.java

@@ -2,6 +2,7 @@ package com.ozs.pm.mapper;
 
 import com.ozs.pm.doman.PmDemandExpertRef;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -16,4 +17,5 @@ import java.util.List;
 public interface PmDemandExpertRefMapper extends BaseMapper<PmDemandExpertRef> {
 
     List<Integer> selectByExpertId(@Param("expertId") Integer expertId);
+    List<PmBaseExpertResVo> getPmBaseExpertResVoList(@Param("projectName") Long demnadId);
 }

+ 27 - 4
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -3,6 +3,7 @@ package com.ozs.pm.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.base.domain.vo.BaseExpertVo;
 import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.doman.vo.requestVo.*;
@@ -15,7 +16,7 @@ import java.util.List;
 
 /**
  * 采购需求Service接口
- * 
+ *
  * @author ruoyi
  * @date 2023-01-16
  */
@@ -23,7 +24,7 @@ public interface IPmDemandService extends IService<PmDemand>
 {
     /**
      * 查询采购需求
-     * 
+     *
      * @param demandId 采购需求主键
      * @return 采购需求
      */
@@ -31,7 +32,7 @@ public interface IPmDemandService extends IService<PmDemand>
 
     /**
      * 查询采购需求列表
-     * 
+     *
      * @param pmDemandReqVo 采购需求
      * @return 采购需求集合
      */
@@ -40,7 +41,7 @@ public interface IPmDemandService extends IService<PmDemand>
 
     /**
      * 需求建档
-     * 
+     *
      * @param pmBookBuildingReqVo 需求建档
      * @return 结果
      */
@@ -123,8 +124,30 @@ public interface IPmDemandService extends IService<PmDemand>
 
     /**
      * 专家库--查询抽取专家列表 非必传条件:专家名称,开始结束时间 sunhh
+     *
      * @param baseExpertVo
      * @return
      */
     List<PmDemand> selectExtractionExpert(BaseExpertVo baseExpertVo);
+
+    /**
+     * 查询需求单位首页待办事项(需求待提交)
+     *
+     * @return
+     */
+    AjaxResult demandWaitCommit();
+
+    /**
+     * 查询需求单位首页待办事项(合同待填制)
+     *
+     * @return
+     */
+    AjaxResult contractWaitFilled();
+
+    /**
+     * 查询需求单位首页待办事项(项目建设待完成)
+     *
+     * @return
+     */
+    AjaxResult projectWaitFinish();
 }

+ 4 - 1
purchase-system/src/main/java/com/ozs/pm/service/PmBidOpeningService.java

@@ -2,6 +2,9 @@ package com.ozs.pm.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.pm.doman.PmBidOpening;
+import com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo;
+
+import java.util.List;
 
 /**
  * 开标信息表(PmBidOpening)表服务接口
@@ -10,5 +13,5 @@ import com.ozs.pm.doman.PmBidOpening;
  * @since 2023-02-02 00:47:22
  */
 public interface PmBidOpeningService extends IService<PmBidOpening> {
-
+    List<PmBidOpeningResVo> getPmBidOpeningResVoList(Long demnadId);
 }

+ 2 - 0
purchase-system/src/main/java/com/ozs/pm/service/PmDemandExpertRefService.java

@@ -2,6 +2,7 @@ package com.ozs.pm.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.pm.doman.PmDemandExpertRef;
+import com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo;
 
 import java.util.List;
 
@@ -14,4 +15,5 @@ import java.util.List;
 public interface PmDemandExpertRefService extends IService<PmDemandExpertRef> {
 
     List<Integer> selectByExpertId(Integer id);
+    List<PmBaseExpertResVo> getPmBaseExpertResVoList(Long demnadId);
 }

+ 6 - 1
purchase-system/src/main/java/com/ozs/pm/service/impl/PmBidOpeningServiceImpl.java

@@ -1,11 +1,14 @@
 package com.ozs.pm.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo;
 import com.ozs.pm.mapper.PmBidOpeningMapper;
 import com.ozs.pm.doman.PmBidOpening;
 import com.ozs.pm.service.PmBidOpeningService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 开标信息表(PmBidOpening)表服务实现类
  *
@@ -14,5 +17,7 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class PmBidOpeningServiceImpl extends ServiceImpl<PmBidOpeningMapper, PmBidOpening> implements PmBidOpeningService {
-
+    public List<PmBidOpeningResVo> getPmBidOpeningResVoList(Long demnadId){
+        return this.baseMapper.getPmBidOpeningResVoList(demnadId);
+    }
 }

+ 5 - 5
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandExpertRefServiceImpl.java

@@ -1,10 +1,10 @@
 package com.ozs.pm.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo;
 import com.ozs.pm.mapper.PmDemandExpertRefMapper;
 import com.ozs.pm.doman.PmDemandExpertRef;
 import com.ozs.pm.service.PmDemandExpertRefService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -18,11 +18,11 @@ import java.util.List;
 @Service
 public class PmDemandExpertRefServiceImpl extends ServiceImpl<PmDemandExpertRefMapper, PmDemandExpertRef> implements PmDemandExpertRefService {
 
-    @Autowired
-    private PmDemandExpertRefMapper pmDemandExpertRefMapper;
-
     @Override
     public List<Integer> selectByExpertId(Integer expertId) {
-        return pmDemandExpertRefMapper.selectByExpertId(expertId);
+        return this.baseMapper.selectByExpertId(expertId);
+    }
+    public List<PmBaseExpertResVo> getPmBaseExpertResVoList(Long demnadId){
+        return this.baseMapper.getPmBaseExpertResVoList(demnadId);
     }
 }

+ 314 - 88
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -7,14 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ozs.base.domain.BaseAgency;
-import com.ozs.base.domain.BaseExpert;
-import com.ozs.base.domain.BaseSupplier;
-import com.ozs.base.domain.BaseUnitInformation;
+import com.ozs.base.domain.*;
 import com.ozs.base.domain.vo.BaseExpertVo;
-import com.ozs.base.service.BaseAgencyService;
-import com.ozs.base.service.BaseExpertService;
-import com.ozs.base.service.BaseSupplierService;
+import com.ozs.base.service.*;
+import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.enums.*;
 import com.ozs.common.utils.DateUtils;
 import com.ozs.common.utils.RandomUtil;
@@ -99,7 +95,13 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Autowired
     private PmProjectConstructionService pmProjectConstructionService;
     @Autowired
-    private PmDemandMapper pmDemandMapper;
+    private PmDemandMapper demandMapper;
+
+    @Autowired
+    private BaseNoticeTypeService baseNoticeTypeService;
+
+    @Autowired
+    private BaseNoticeService baseNoticeService;
 
 
     /**
@@ -301,11 +303,87 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
             } else if("4".equals(detailType)) { //中标信息
                 PmPurchaseExecutionResVo pmPurchaseExecutionResVo = new PmPurchaseExecutionResVo();
+
+                //代理商信息
                 BaseAgency baseAgency = this.baseAgencyService.getById(pmDemand.getAgencyId());
                 pmPurchaseExecutionResVo.setBaseAgency(baseAgency);
 
+                //发布公告列表
+                LambdaQueryWrapper<PmReleaseAnnouncement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+                lambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId,demandId);
+                List<PmReleaseAnnouncement> pmReleaseAnnouncementList = this.pmReleaseAnnouncementService.list(lambdaQueryWrapper);
+                if(!ObjectUtils.isEmpty(pmReleaseAnnouncementList)){
+                    List<PmReleaseAnnouncementResVo> pmReleaseAnnouncementResVoList = new ArrayList<>();
+                    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);
+                        }
+                        pmReleaseAnnouncementResVoList.add(pmReleaseAnnouncementResVo);
+                    }
+                    pmPurchaseExecutionResVo.setPmReleaseAnnouncementResVoList(pmReleaseAnnouncementResVoList);
+                }
+
+                //专家信息列表
+                List<PmBaseExpertResVo> pmBaseExpertResVoList = this.pmDemandExpertRefService.getPmBaseExpertResVoList(demandId);
+                pmPurchaseExecutionResVo.setPmBaseExpertResVoList(pmBaseExpertResVoList);
+
+                //开标信息列表
+                List<PmBidOpeningResVo> pmBidOpeningResVoList = this.pmBidOpeningService.getPmBidOpeningResVoList(demandId);
+                pmPurchaseExecutionResVo.setPmBidOpeningResVoList(pmBidOpeningResVoList);
+
+                //中标信息列表
+                LambdaQueryWrapper<PmBidWinning> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+                lambdaQueryWrapper1.eq(PmBidWinning::getDemandId,demandId).orderByDesc(PmBidWinning::getBidAnnouncementTime);
+                List<PmBidWinning> pmBidWinningList = this.pmBidWinningService.list(lambdaQueryWrapper1);
+                if (!ObjectUtils.isEmpty(pmBidWinningList)) {
+                    List<PmBidWinningResVo> pmBidWinningResVoList = new ArrayList<>();
+                    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);
+                        }
+                        pmBidWinningResVoList.add(pmBidWinningResVo);
+                    }
+                    pmPurchaseExecutionResVo.setPmBidWinningResVoList(pmBidWinningResVoList);
+                }
+
+                //质疑情况
+                HashMap<String, String> callRequestFileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
+                if(callRequestFileMap != null){
+                    pmPurchaseExecutionResVo.setCallRequestFileMap(callRequestFileMap);
+                }
+
+                //流标情况
+                LambdaQueryWrapper<PmBidFailure> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
+                lambdaQueryWrapper2.eq(PmBidFailure::getDemandId,demandId).orderByDesc(PmBidFailure::getBidFailureTime);
+                List<PmBidFailure> pmBidFailureList = this.pmBidFailureService.list(lambdaQueryWrapper2);
+                if (!ObjectUtils.isEmpty(pmBidFailureList)) {
+                    List<PmBidFailureResVo> pmBidFailureResVoList = new ArrayList<>();
+                    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);
+                        }
+                        pmBidFailureResVoList.add(pmBidFailureResVo);
+                    }
+                    pmPurchaseExecutionResVo.setPmBidFailureResVoList(pmBidFailureResVoList);
+                }
+
+                //中标通知书
+                HashMap<String, String> pmBidWinningNotificationFileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
+                if(pmBidWinningNotificationFileMap != null){
+                    pmPurchaseExecutionResVo.setPmBidWinningNotificationFileMap(pmBidWinningNotificationFileMap);
+                }
 
                 vo.setPmPurchaseExecutionResVo(pmPurchaseExecutionResVo);
+
             } else if("5".equals(detailType)) { //合同信息
                 LambdaQueryWrapper<PmContractInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
                 lambdaQueryWrapper.eq(PmContractInfo::getDemandId,demandId);
@@ -315,7 +393,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     BeanUtils.copyProperties(pmContractInfo,pmContractInfoResVo);
 
                     // todo
-                    BaseUnitInformation baseUnitInformation = null;
+                    BaseUnitInformation baseUnitInformation = new BaseUnitInformation();
 
                     PmBaseUnitInformationVo pmBaseUnitInformationVo = new PmBaseUnitInformationVo();
                     BeanUtils.copyProperties(baseUnitInformation, pmBaseUnitInformationVo);
@@ -351,7 +429,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     }
 
                     //合同信息文件
-                    HashMap<String, String> pmContractInfoFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
+                    HashMap<String, String> pmContractInfoFileMap = getFileMap(pmContractInfo.getId(),SysFileRefEnum.PM_CONTRACT_INFO.getType());
                     if(pmContractInfoFileMap != null){
                         pmContractInfoResVo.setFileMap(pmContractInfoFileMap);
                     }
@@ -366,7 +444,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                     BeanUtils.copyProperties(pmProjectConstruction,pmProjectConstructionResVo);
 
                     //建设情况文件
-                    HashMap<String, String> projectConstructionFileMap = getFileMap(vo.getDemandId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
+                    HashMap<String, String> projectConstructionFileMap = getFileMap(pmProjectConstruction.getId(),SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
                     if(projectConstructionFileMap != null){
                         pmProjectConstructionResVo.setFileMap(projectConstructionFileMap);
                     }
@@ -415,82 +493,18 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         } else  if(reqType== 2) { //任务下达列表
             lw.apply("(project_status = 8 or project_status = 9 )");
         } else  if(reqType== 3) { //采购执行列表
-            lw.apply("(project_status = 9 or project_status = 10 )");
+            lw.apply("(project_status = 9 or project_status = 10 or project_status = 11 or project_status = 12 or project_status = 13 or project_status = 14 or project_status = 15)");
         } else  if(reqType== 4) { //合同信息列表
-            lw.apply("(project_status = 10 or project_status = 11 )");
+            lw.apply("(project_status = 15 or project_status = 16 )");
         }  else  if(reqType== 5) { //项目建设列表
-            lw.apply("(project_status = 11 or project_status = 12 )");
+            lw.apply("(project_status = 16 or project_status = 17 )");
         }
 
         IPage<PmDemand> pageRes = this.page(new Page<>(pmDemandReqVo.getPageNum(), pmDemandReqVo.getPageSize()), lw);
         IPage<PmDemandResVo> results = new Page<>(pageRes.getCurrent(), pageRes.getSize(), pageRes.getTotal());
-        if(pageRes.getRecords() != null && pageRes.getRecords().size() > 0){
-            List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
-            for(PmDemand pmDemand1 : pageRes.getRecords()){
-                PmDemandResVo vo = new PmDemandResVo();
-                BeanUtils.copyProperties(pmDemand1,vo);
-                if(vo.getPurchaseDeptId() != null){
-                    Map<String, Object> deptMap =  deptService.selectDeptById(vo.getPurchaseDeptId());
-                    if(deptMap!= null){
-                        SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo)deptMap.get("sysDept");
-                        if(sysDeptResponseVo != null){
-                            vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
-                        }
-                    }
-                }
-
-                String purchaseServicesName = dictDataService.selectDictLabel("purchase_services",vo.getPurchaseServices());
-                if(StringUtils.isNotEmpty(purchaseServicesName)){
-                    vo.setPurchaseServicesName(purchaseServicesName);
-                }
-
-                //项目类型
-                for (ProjectTypes value : ProjectTypes.values()) {
-                    if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
-                        vo.setProjectTypeName(value.getInfo());
-                        break;
-                    }
-                }
-                //是否为超限额计划
-                for (IsExcess value : IsExcess.values()) {
-                    if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
-                        vo.setIsExcessName(value.getInfo());
-                        break;
-                    }
-                }
-
-                //采购方式
-                for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
-                    if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
-                        vo.setPurchaseModeName(value.getInfo());
-                        break;
-                    }
-                }
-                //项目属性
-                for (ProjectAttribute value : ProjectAttribute.values()) {
-                    if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
-                        vo.setProjectAttrName(value.getInfo());
-                        break;
-                    }
-                }
-                //预警状态
-                for (WarnStatus value : WarnStatus.values()) {
-                    if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
-                        vo.setWarnStatusName(value.getInfo());
-                        break;
-                    }
-                }
-
-                //项目状态
-                for (PmProjectStatus value : PmProjectStatus.values()) {
-                    if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
-                        vo.setProjectStatusName(value.getInfo());
-                        break;
-                    }
-                }
-                pmDemandResponseVoList.add(vo);
-            }
-            results.setRecords(pmDemandResponseVoList);
+        if(pageRes.getRecords() != null && pageRes.getRecords().size() > 0) {
+            List<PmDemandResVo> pmDemandResVos = demandChangeTo(pageRes.getRecords());
+            results.setRecords(pmDemandResVos);
         }
 
         return results;
@@ -745,10 +759,105 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 vo.setFileMap(fileMap);
             }
         } else if("任务下达".equals(moduleName)) {
-            //todo
+            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_TAST_RELEASE.getType());
+            if(fileMap != null){
+                vo.setFileMap(fileMap);
+            }
+        } 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);
+            }
+        } 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<>();
+                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));
+                    }
+                }
+                if (fileMapAll != null) {
+                    vo.setFileMap(fileMapAll);
+                }
+            }
+        } else if("填写专家信息".equals(moduleName)) {
+            //do nothing
+        } else if("填写开标信息".equals(moduleName)) {
+            //do nothing
+        } else if("填写中标信息".equals(moduleName)) {
+            HashMap<String, String> fileMapAll = new HashMap<>();
+
+            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));
+                    }
+                }
+            }
+
+            LambdaQueryWrapper<PmBidFailure> pmBidFailureLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            pmBidFailureLambdaQueryWrapper.eq(PmBidFailure::getDemandId,demandId);
+            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));
+                    }
+                }
+            }
+
+            if(!ObjectUtils.isEmpty(fileMapAll)){
+                vo.setFileMap(fileMapAll);
+            }
+
+        } else if("质疑处理".equals(moduleName)) {
+            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
+            if(fileMap != null){
+                vo.setFileMap(fileMap);
+            }
+        } else if("上传中标通知书".equals(moduleName)) {
+            HashMap<String, String> fileMap = getFileMap(demandId,SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
+            if(fileMap != null){
+                vo.setFileMap(fileMap);
+            }
+        } 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);
+                }
+            }
+
+        } else if("建设文档填制".equals(moduleName)) {
+            LambdaQueryWrapper<PmProjectConstruction> pmProjectConstructionLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            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);
+                }
+            }
+
+        } else if("项目归档".equals(moduleName)) {
+            //do nothing
         }
 
-         return vo;
+        return vo;
     }
 
     /**
@@ -864,7 +973,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo) throws Exception {
-
+        PmDemand pmDemand = this.getById(pmReleaseAnnouncementReqVo.getDemandId());
+        if(ObjectUtils.isEmpty(pmDemand)){
+            throw new Exception("参数错误");
+        }
         PmReleaseAnnouncement pmReleaseAnnouncement = new PmReleaseAnnouncement();
         BeanUtils.copyProperties(pmReleaseAnnouncementReqVo,pmReleaseAnnouncement);
         if(pmReleaseAnnouncementService.save(pmReleaseAnnouncement)){
@@ -874,8 +986,23 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 pmDemandUpdate.setProjectStatus(Long.parseLong(PmProjectStatus.WAIT_OPEN_BID.getCode()));
                 pmDemandUpdate.setUpdateTime(pmReleaseAnnouncementReqVo.getUpdateTime());
                 pmDemandUpdate.setUpdateBy(pmReleaseAnnouncementReqVo.getUpdateBy());
-                 return this.updateById(pmDemandUpdate);
-                 //TODO 发布公告生成后,会默认将该数据同步到公告管理和首页中
+                if(this.updateById(pmDemandUpdate)){
+                    //发布公告生成后,会默认将该数据同步到公告管理和首页中
+                    BaseNotice baseNotice = new BaseNotice();
+                    baseNotice.setName(pmDemand.getProjectName());
+                    baseNotice.setTitle(pmDemand.getProjectName() + "招标公告" );
+                    LambdaQueryWrapper<BaseNoticeType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    lambdaQueryWrapper.eq(BaseNoticeType::getName,"招标公告");
+                    BaseNoticeType baseNoticeType = baseNoticeTypeService.getOne(lambdaQueryWrapper);
+                    if(baseNoticeType == null){
+                        throw new Exception("招标公告 公告类型不存在");
+                    }
+                    baseNotice.setType(baseNoticeType.getId());
+                    baseNotice.setReleaseTime(pmReleaseAnnouncement.getReleaseTime());
+                    return this.baseNoticeService.save(baseNotice);
+                } else {
+                    return false;
+                }
 
             } else {
                 return false;
@@ -1390,16 +1517,115 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
      */
     @Override
     public List<PmDemand> selectByDemandIdList(List<Integer> demandIdList) {
-        return pmDemandMapper.selectByDemandIdList(demandIdList);
+        return this.baseMapper.selectByDemandIdList(demandIdList);
     }
 
     /**
      * 专家库--查询抽取专家列表 非必传条件:专家名称,开始结束时间 sunhh
+     *
      * @param baseExpertVo
      * @return
      */
     @Override
     public List<PmDemand> selectExtractionExpert(BaseExpertVo baseExpertVo) {
-        return pmDemandMapper.selectExtractionExpert(baseExpertVo);
+        return this.baseMapper.selectExtractionExpert(baseExpertVo);
+    }
+
+    @Override
+    public AjaxResult demandWaitCommit() {
+        return getListByStatus(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode());
+    }
+
+    @Override
+    public AjaxResult contractWaitFilled() {
+        return getListByStatus(PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+    }
+
+    @Override
+    public AjaxResult projectWaitFinish() {
+        return getListByStatus(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
+    }
+
+    //查询不同状态下的项目数据
+    public AjaxResult getListByStatus(String projectStatus) {
+        LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();
+        lw.eq(PmDemand::getProjectStatus, projectStatus);
+        List<PmDemand> demandList = demandMapper.selectList(lw);
+        //数据转换
+        List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
+        if (!ObjectUtils.isEmpty(demandList) && demandList.size() > 0) {
+            pmDemandResponseVoList = demandChangeTo(demandList);
+        }
+        return AjaxResult.success(pmDemandResponseVoList);
+    }
+
+    //字段转换and赋值
+    public List<PmDemandResVo> demandChangeTo(List<PmDemand> pmDemandList) {
+        List<PmDemandResVo> pmDemandResponseVoList = new ArrayList<>();
+        for (PmDemand pmDemand1 : pmDemandList) {
+            PmDemandResVo vo = new PmDemandResVo();
+            BeanUtils.copyProperties(pmDemand1, vo);
+            if (vo.getPurchaseDeptId() != null) {
+                Map<String, Object> deptMap = deptService.selectDeptById(vo.getPurchaseDeptId());
+                if (deptMap != null) {
+                    SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptMap.get("sysDept");
+                    if (sysDeptResponseVo != null) {
+                        vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
+                    }
+                }
+            }
+
+            String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
+            if (StringUtils.isNotEmpty(purchaseServicesName)) {
+                vo.setPurchaseServicesName(purchaseServicesName);
+            }
+
+            //项目类型
+            for (ProjectTypes value : ProjectTypes.values()) {
+                if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
+                    vo.setProjectTypeName(value.getInfo());
+                    break;
+                }
+            }
+            //是否为超限额计划
+            for (IsExcess value : IsExcess.values()) {
+                if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
+                    vo.setIsExcessName(value.getInfo());
+                    break;
+                }
+            }
+
+            //采购方式
+            for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
+                if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
+                    vo.setPurchaseModeName(value.getInfo());
+                    break;
+                }
+            }
+            //项目属性
+            for (ProjectAttribute value : ProjectAttribute.values()) {
+                if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
+                    vo.setProjectAttrName(value.getInfo());
+                    break;
+                }
+            }
+            //预警状态
+            for (WarnStatus value : WarnStatus.values()) {
+                if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
+                    vo.setWarnStatusName(value.getInfo());
+                    break;
+                }
+            }
+
+            //项目状态
+            for (PmProjectStatus value : PmProjectStatus.values()) {
+                if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
+                    vo.setProjectStatusName(value.getInfo());
+                    break;
+                }
+            }
+            pmDemandResponseVoList.add(vo);
+        }
+        return pmDemandResponseVoList;
     }
 }

+ 5 - 1
purchase-system/src/main/resources/mapper/plan/PlanQuarterMapper.xml

@@ -23,6 +23,7 @@
         <result property="remarks" column="remarks"/>
         <result property="project_status" column="projectStatus"/>
         <result property="send_letter" column="sendLetter"/>
+        <result property="letter_str" column="letterStr"/>
         <result property="created" column="created"/>
         <result property="create_time" column="createTime"/>
         <result property="updated" column="updated"/>
@@ -197,7 +198,10 @@
 
     <update id="sendLetter" parameterType="java.lang.Long">
         update plan_practical
-        set send_letter= 1
+        set send_letter=1,
+        <if test="letterStr != null and letterStr != ''">
+            letter_str=#{letterStr}
+        </if>
         where plan_practical_id = #{planPracticalId}
     </update>
 

+ 6 - 2
purchase-system/src/main/resources/mapper/plan/PlanYearsMapper.xml

@@ -22,6 +22,7 @@
 		<result property="remarks" column="remarks"/>
 		<result property="project_status" column="projectStatus"/>
 		<result property="send_letter" column="sendLetter"/>
+		<result property="letter_str" column="letterStr"/>
 		<result property="created" column="created"/>
 		<result property="create_time" column="createTime"/>
 		<result property="updated" column="updated"/>
@@ -178,9 +179,12 @@
 		where plan_year_id = #{planYearId}
 	</update>
 
-	<update id="sendLetter" parameterType="java.lang.Long">
+	<update id="sendLetter" parameterType="com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo">
 		update plan_years
-		set send_letter=1
+		set send_letter=1,
+		<if test="letterStr != null and letterStr != ''">
+			letter_str=#{letterStr}
+		</if>
 		where plan_year_id = #{planYearId}
 	</update>
 

+ 10 - 1
purchase-system/src/main/resources/mapper/pm/PmBidOpeningMapper.xml

@@ -1,6 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmBidOpeningMapper">
+<mapper namespace="com.ozs.pm.mapper.PmBidOpeningMapper">
+    <select id="getPmBidOpeningResVoList" resultType="com.ozs.pm.doman.vo.responseVo.PmBidOpeningResVo">
+        SELECT
+        t.demand_id as demandId,
+        DATE_FORMAT(t.open_bid_time,'%Y-%m-%d') openBidTime,
+        count(1) partakeCount
+        from pm_bid_opening t
+        where t.demand_id = #{demandId}
+        order by openBidTime desc
+    </select>
 
 
 </mapper>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmBidWinningMapper">
+<mapper namespace="com.ozs.pm.mapper.PmBidWinningMapper">
 
 
 </mapper>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmContractInfoMapper">
+<mapper namespace="com.ozs.pm.mapper.PmContractInfoMapper">
 
 
 </mapper>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmContractUnitRefMapper">
+<mapper namespace="com.ozs.pm.mapper.PmContractUnitRefMapper">
 
 
 </mapper>

+ 9 - 0
purchase-system/src/main/resources/mapper/pm/PmDemandExpertRefMapper.xml

@@ -5,5 +5,14 @@
     <select id="selectByExpertId" resultType="java.lang.Integer" parameterType="java.lang.Integer">
         select demand_id from pm_demand_expert_ref where expert_id = #{expertId}
     </select>
+    <select id="getPmBaseExpertResVoList" resultType="com.ozs.pm.doman.vo.responseVo.PmBaseExpertResVo">
+        SELECT
+        t.demand_id as demandId,
+        DATE_FORMAT(t.access_time,'%Y-%m-%d') accessTime,
+        count(1) expertCount
+        from pm_demand_expert_ref t
+        where t.demand_id = #{demandId}
+        order by accessTime desc
+    </select>
 
 </mapper>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmProjectConstructionMapper">
+<mapper namespace="com.ozs.pm.mapper.PmProjectConstructionMapper">
 
 
 </mapper>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.system.mapper.PmReleaseAnnouncementMapper">
+<mapper namespace="com.ozs.pm.mapper.PmReleaseAnnouncementMapper">
 
 
 </mapper>