فهرست منبع

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

gao.qiang 2 سال پیش
والد
کامیت
8a697e270d
67فایلهای تغییر یافته به همراه1582 افزوده شده و 603 حذف شده
  1. 89 1
      purchase-admin/src/main/java/com/ozs/web/controller/base/BaseNoticeController.java
  2. 0 7
      purchase-admin/src/main/java/com/ozs/web/controller/base/BasePolicyController.java
  3. 37 6
      purchase-admin/src/main/java/com/ozs/web/controller/base/BaseProfessionalController.java
  4. 13 13
      purchase-admin/src/main/java/com/ozs/web/controller/common/CommonController.java
  5. 39 0
      purchase-admin/src/main/java/com/ozs/web/controller/home/HomeNoticeController.java
  6. 12 12
      purchase-admin/src/main/java/com/ozs/web/controller/home/SystemHomepageController.java
  7. 12 0
      purchase-admin/src/main/java/com/ozs/web/controller/plan/MonthlyReconciliationController.java
  8. 25 4
      purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanQuarterController.java
  9. 28 4
      purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanYearsController.java
  10. 55 163
      purchase-admin/src/main/java/com/ozs/web/controller/plan/ProvisionalPlanController.java
  11. 29 9
      purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/StatisticalAnalysisController.java
  12. 6 3
      purchase-admin/src/main/java/com/ozs/web/controller/system/SysRoleController.java
  13. 4 4
      purchase-admin/src/main/java/com/ozs/web/controller/tool/PmTaskServer.java
  14. 59 3
      purchase-admin/src/main/resources/application-prod.yml
  15. 1 0
      purchase-admin/src/main/resources/application.yml
  16. BIN
      purchase-admin/src/main/resources/template/planQuarter.xlsx
  17. BIN
      purchase-admin/src/main/resources/template/planYears.xlsx
  18. BIN
      purchase-admin/src/main/resources/template/professional.xlsx
  19. BIN
      purchase-admin/src/main/resources/template/provisionalPlan.xlsx
  20. 1 1
      purchase-common/src/main/java/com/ozs/common/config/PurchaseConfig.java
  21. 9 6
      purchase-common/src/main/java/com/ozs/common/core/domain/entity/SysProcurementStandard.java
  22. 6 6
      purchase-common/src/main/java/com/ozs/common/enums/ProcurementMethodSuggest.java
  23. 3 3
      purchase-common/src/main/java/com/ozs/common/enums/SysFileRefEnum.java
  24. 18 7
      purchase-common/src/main/java/com/ozs/common/utils/file/FileUtils.java
  25. 14 0
      purchase-common/src/main/java/com/ozs/common/vo/FileDownVo.java
  26. 1 1
      purchase-framework/src/main/java/com/ozs/framework/config/CaptchaConfig.java
  27. 2 0
      purchase-system/src/main/java/com/ozs/base/domain/BaseExpert.java
  28. 15 0
      purchase-system/src/main/java/com/ozs/base/domain/BaseNotice.java
  29. 3 0
      purchase-system/src/main/java/com/ozs/base/domain/BaseUnitInformation.java
  30. 2 0
      purchase-system/src/main/java/com/ozs/base/domain/vo/BaseExpertVo.java
  31. 12 0
      purchase-system/src/main/java/com/ozs/base/service/BaseProfessionalService.java
  32. 7 7
      purchase-system/src/main/java/com/ozs/base/service/impl/BaseExpertServiceImpl.java
  33. 50 0
      purchase-system/src/main/java/com/ozs/base/service/impl/BaseProfessionalServiceImpl.java
  34. 24 10
      purchase-system/src/main/java/com/ozs/home/domain/HomeNotice.java
  35. 19 3
      purchase-system/src/main/java/com/ozs/home/domain/vo/HomeNoticeVo.java
  36. 1 0
      purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java
  37. 20 6
      purchase-system/src/main/java/com/ozs/plan/doman/ProvisionalPlan.java
  38. 3 3
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanQuarterStandardVo.java
  39. 3 3
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanYearsStandardVo.java
  40. 2 1
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/ProvisionalPlanVo.java
  41. 4 4
      purchase-system/src/main/java/com/ozs/plan/mapper/ProvisionalPlanMapper.java
  42. 2 2
      purchase-system/src/main/java/com/ozs/plan/service/PlanQuarterService.java
  43. 2 2
      purchase-system/src/main/java/com/ozs/plan/service/PlanYearsService.java
  44. 7 6
      purchase-system/src/main/java/com/ozs/plan/service/ProvisionalPlanService.java
  45. 85 13
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java
  46. 172 137
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java
  47. 256 38
      purchase-system/src/main/java/com/ozs/plan/service/impl/ProvisionalPlanServiceImpl.java
  48. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmBidFailure.java
  49. 2 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmBidOpening.java
  50. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmBidWinning.java
  51. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmBidWinningOpeningRef.java
  52. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmBookBuilding.java
  53. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmContractInfo.java
  54. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmDemand.java
  55. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmDemandExpertRef.java
  56. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmFlowChart.java
  57. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmProjectConstruction.java
  58. 3 0
      purchase-system/src/main/java/com/ozs/pm/doman/PmReleaseAnnouncement.java
  59. 1 1
      purchase-system/src/main/java/com/ozs/pm/doman/vo/responseVo/PmDemandResVo.java
  60. 46 2
      purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java
  61. 28 8
      purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java
  62. 201 76
      purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java
  63. 8 6
      purchase-system/src/main/java/com/ozs/system/domain/vo/requestVo/SysProcurementStandardVo.java
  64. 2 0
      purchase-system/src/main/java/com/ozs/system/service/ISysDeptService.java
  65. 30 2
      purchase-system/src/main/java/com/ozs/system/service/impl/SysDeptServiceImpl.java
  66. 5 5
      purchase-system/src/main/resources/mapper/plan/ProvisionalPlanMapper.xml
  67. 77 15
      purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

+ 89 - 1
purchase-admin/src/main/java/com/ozs/web/controller/base/BaseNoticeController.java

@@ -8,13 +8,17 @@ import com.ozs.base.domain.BaseNoticeType;
 import com.ozs.base.service.BaseNoticeService;
 import com.ozs.base.service.BaseNoticeTypeService;
 import com.ozs.base.vo.BaseNoticePageReqVo;
-import com.ozs.base.vo.BaseNoticeTypePageReqVo;
 import com.ozs.base.vo.BaseNoticeVo;
 import com.ozs.common.annotation.Log;
+import com.ozs.common.constant.Constants;
 import com.ozs.common.constant.ModularConstans;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.entity.SysDept;
+import com.ozs.common.core.domain.entity.SysRole;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.plan.doman.MonthlyReconciliation;
+import com.ozs.system.service.ISysDeptService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -40,6 +44,9 @@ public class BaseNoticeController extends BaseController {
     @Autowired
     private BaseNoticeTypeService baseNoticeTypeService;
 
+    @Autowired
+    private ISysDeptService iSysDeptService;
+
     @ApiOperation(value = "分页查询公告信息")
     @PostMapping("/page")
     @PreAuthorize("@ss.hasPermi('base:notice:list')")
@@ -130,4 +137,85 @@ public class BaseNoticeController extends BaseController {
 
         return success(baseNoticeVo);
     }
+
+
+
+    @ApiOperation(value = "首页分页查询公告信息")
+    @PostMapping("/homePage")
+    @Log(title = ModularConstans.notice, businessType = BusinessType.QUERY)
+    public AjaxResult homePage(@NotEmpty(message = "数据为空")
+                           @RequestBody BaseNoticePageReqVo vo) {
+        LambdaQueryWrapper<BaseNotice> lw = new LambdaQueryWrapper<>();
+        if(!StringUtils.isBlank(vo.getTitle())){
+            lw.like(BaseNotice::getTitle,vo.getTitle());
+        }
+        if(!ObjectUtils.isEmpty(vo.getStartTime())){
+            lw.ge(BaseNotice::getReleaseTime,vo.getStartTime());
+        }
+        if(!ObjectUtils.isEmpty(vo.getStartTime())){
+            lw.le(BaseNotice::getReleaseTime,vo.getEntTime());
+        }
+
+        // 添加数据权限
+        List<String> roleKeys = getLoginUser().getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+        if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+            // 需求单位
+            /*(purchase_dept_id = 当前用户deptID) */
+            lw.eq(BaseNotice::getDeptId, getDeptId());
+        } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+            // 采购管理部门  或  采购办
+            SysDept sysDept = new SysDept();
+            sysDept.setParentId(getDeptId());
+            sysDept.setStatus("0");
+            List<Long> childDeptIds = iSysDeptService.selectDeptList(sysDept)
+                    .stream()
+                    .map(SysDept::getDeptId)
+                    .collect(Collectors.toList());
+            if(ObjectUtils.isEmpty(childDeptIds)){
+                lw.and((wrapper) -> {
+                    wrapper.eq(BaseNotice::getIsExcess, 0);
+                    wrapper.eq(BaseNotice::getDeptId, getDeptId());
+                });
+            }else {
+                lw.and((wrapper) -> {
+                    wrapper.eq(BaseNotice::getIsExcess, 0);
+                    wrapper.eq(BaseNotice::getDeptId, getDeptId());
+                })
+                        .or((wrapper) -> {
+                            wrapper.eq(BaseNotice::getIsExcess, 1);
+                            wrapper.in(BaseNotice::getDeptId, childDeptIds);
+                        });
+            }
+        }
+
+
+        IPage<BaseNotice> page = baseNoticeService.page(new Page<>(vo.getPageNum(), vo.getPageSize()), lw);
+        IPage<BaseNoticeVo> pagev = new Page<>();
+        pagev.setTotal(page.getTotal());
+        pagev.setCurrent(page.getCurrent());
+        pagev.setPages(page.getPages());
+
+        if(!ObjectUtils.isEmpty(page) && page.getRecords().size()>0){
+            List<BaseNoticeType> list = baseNoticeTypeService.list();
+            List<Long> ids = list.stream().map(BaseNoticeType::getId).collect(Collectors.toList());
+            List<BaseNoticeVo> collect = page.getRecords().stream().map(o -> {
+                BaseNoticeVo baseNoticeVo = new BaseNoticeVo();
+                BeanUtils.copyProperties(o, baseNoticeVo);
+                if (ids.contains(o.getType())) {
+                    List<BaseNoticeType> collect1 = list.stream().filter(tdto -> tdto.getId().equals(o.getType())).collect(Collectors.toList());
+                    if(!ObjectUtils.isEmpty(collect1)){
+                        baseNoticeVo.setTypeName(collect1.get(0).getName());
+                    }
+
+                }
+                return baseNoticeVo;
+            }).collect(Collectors.toList());
+            pagev.setRecords(collect);
+        }else {
+            pagev.setRecords(null);
+        }
+        return success(pagev);
+
+    }
 }

+ 0 - 7
purchase-admin/src/main/java/com/ozs/web/controller/base/BasePolicyController.java

@@ -165,12 +165,5 @@ public class BasePolicyController extends BaseController {
         return success(basePolicyService.getById(id));
     }
 
-    public static void main(String[] args) {
-        String  filePath ="/home/purchase/uploadPath/upload";
 
-        String  upload = "/profile/upload/2023/02/14/bookinfo应用_20230214124044A001.pdf";
-        String filePathStr = filePath + upload.substring("/profile/upload".length(),upload.length());
-        System.out.println(filePathStr);
-        System.out.println(upload.indexOf("/profile/upload"));
-    }
 }

+ 37 - 6
purchase-admin/src/main/java/com/ozs/web/controller/base/BaseProfessionalController.java

@@ -3,21 +3,33 @@ package com.ozs.web.controller.base;
 import com.ozs.base.domain.BaseProfessional;
 import com.ozs.base.domain.vo.BaseProfessionalVo;
 import com.ozs.base.service.BaseProfessionalService;
+import com.ozs.common.config.PurchaseConfig;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.R;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.exception.ServiceException;
 import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.plan.doman.ProvisionalPlan;
 import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.List;
 
 /**
@@ -28,12 +40,13 @@ import java.util.List;
 @Api(tags = "专业库管理")
 @RestController
 @RequestMapping("/base/professional")
+@Slf4j
 public class BaseProfessionalController extends BaseController {
 
     @Autowired
     private BaseProfessionalService baseProfessionalService;
 
-    @ApiOperation(value = "新增专业库", notes = "必传 专业库名称、一级分类、编码、父级编码;没有父级编码传0")
+    @ApiOperation(value = "新增专业库" , notes = "必传 专业库名称、一级分类、编码、父级编码;没有父级编码传0")
     @PostMapping("/insertProfessional")
     public AjaxResult insertProfessional(@RequestBody BaseProfessional baseProfessional) {
         if (StringUtils.isNull(baseProfessional)
@@ -46,7 +59,7 @@ public class BaseProfessionalController extends BaseController {
         return toAjax(baseProfessionalService.save(baseProfessional));
     }
 
-    @ApiOperation(value = "删除专业库", notes = "必传 id")
+    @ApiOperation(value = "删除专业库" , notes = "必传 id")
     @PostMapping("/deleteProfessional")
     public AjaxResult deleteProfessional(@RequestBody BaseProfessional baseProfessional) {
         if (StringUtils.isNull(baseProfessional) || StringUtils.isNull(baseProfessional.getId())) {
@@ -55,14 +68,14 @@ public class BaseProfessionalController extends BaseController {
         return toAjax(baseProfessionalService.removeById(baseProfessional.getId()));
     }
 
-    @ApiOperation(value = "批量删除专业库", notes = "必传 idList")
+    @ApiOperation(value = "批量删除专业库" , notes = "必传 idList")
     @PostMapping("/deleteIds")
     public AjaxResult deleteByIdLIst(@RequestBody BaseProfessionalVo baseProfessionalVo) {
         baseProfessionalService.deleteIds(baseProfessionalVo.getDeleteIds());
         return success();
     }
 
-    @ApiOperation(value = "修改专业库", notes = "必传 id 及修改数据")
+    @ApiOperation(value = "修改专业库" , notes = "必传 id 及修改数据")
     @PostMapping("/updateProfessional")
     public AjaxResult updateProfessional(@RequestBody BaseProfessional baseProfessional) {
         if (StringUtils.isNull(baseProfessional) || StringUtils.isNull(baseProfessional.getId())) {
@@ -71,14 +84,14 @@ public class BaseProfessionalController extends BaseController {
         return toAjax(baseProfessionalService.updateById(baseProfessional));
     }
 
-    @ApiOperation(value = "查询专业库树结构", notes = "非必传 查询条件:品目名称")
+    @ApiOperation(value = "查询专业库树结构" , notes = "非必传 查询条件:品目名称")
     @PostMapping("/selectBaseProfessional")
     public AjaxResult selectBaseProfessional(@RequestBody BaseProfessionalVo baseProfessionalVo) {
         List<BaseProfessionalVo> baseSupplierList = baseProfessionalService.selectBaseProfessionalVo(baseProfessionalVo);
         return success(baseSupplierList);
     }
 
-    @ApiOperation(value = "导入专业库", notes = "导入表格")
+    @ApiOperation(value = "导入专业库" , notes = "导入表格")
     @PostMapping("/importBaseProfessional")
     public AjaxResult importBaseProfessional(MultipartFile file, boolean updateSupport) throws Exception {
         ExcelUtil<BaseProfessional> util = new ExcelUtil<>(BaseProfessional.class);
@@ -98,4 +111,22 @@ public class BaseProfessionalController extends BaseController {
         ExcelUtil<BaseProfessional> util = new ExcelUtil<>(BaseProfessional.class);
         util.exportExcel(response, list, "专业库数据");
     }
+
+    @ApiOperation("文件下载")
+    @GetMapping("/downloaExcel")
+    public void downloadZip(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            // 文件路径
+//            String downloadPath = this.getClass().getResource("/template/professional.xlsx").getPath();
+            InputStream resourceAsStream = this.getClass().getResourceAsStream("/template/professional.xlsx");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, "专业库模板.xlsx");
+            FileUtils.writeBytesByInput(resourceAsStream, response.getOutputStream());
+
+        } catch (Exception e) {
+            log.error("下载文件失败" , e);
+        }
+    }
+
+
 }

+ 13 - 13
purchase-admin/src/main/java/com/ozs/web/controller/common/CommonController.java

@@ -6,6 +6,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.ozs.common.vo.FileDownVo;
 import com.ozs.system.domain.SysFileInfo;
 import com.ozs.system.service.SysFileService;
 import io.swagger.annotations.Api;
@@ -13,10 +14,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import com.ozs.common.config.PurchaseConfig;
 import com.ozs.common.constant.Constants;
@@ -50,22 +49,23 @@ public class CommonController {
     /**
      * 通用下载请求
      *
-     * @param fileName 文件名称
-     * @param delete   是否删除
      */
-    @GetMapping("/download")
-    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) {
+    @PostMapping("/download")
+    public void fileDownload(@RequestBody FileDownVo vo, HttpServletResponse response, HttpServletRequest request) {
         try {
-            if (!FileUtils.checkAllowDownload(fileName)) {
-                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+            if(ObjectUtils.isEmpty(vo)){
+                throw new Exception("参数不能为空");
             }
-            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
-            String filePath = PurchaseConfig.getDownloadPath() + fileName;
+            if (!FileUtils.checkAllowDownload(vo.getFileName())) {
+                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", vo.getFileName()));
+            }
+            String realFileName = System.currentTimeMillis() + vo.getFileName().substring(vo.getFileName().indexOf("_") + 1);
+            String filePath = PurchaseConfig.getDownloadPath() + vo.getFileName().substring("/profile/upload/".length(),vo.getFileName().length());
 
             response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
             FileUtils.setAttachmentResponseHeader(response, realFileName);
             FileUtils.writeBytes(filePath, response.getOutputStream());
-            if (delete) {
+            if (vo.getDelete()) {
                 FileUtils.deleteFile(filePath);
             }
         } catch (Exception e) {

+ 39 - 0
purchase-admin/src/main/java/com/ozs/web/controller/home/HomeNoticeController.java

@@ -25,6 +25,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -89,4 +92,40 @@ public class HomeNoticeController extends BaseController {
         }
         return planYearsService.projectDetails(yearsStandardVo);
     }
+
+    /**
+     * 查询不同类型的公告
+     */
+    @PreAuthorize("@ss.hasPermi('home:homeNotice:getNoticesByType')")
+    @Log(title = "查询公告", businessType = BusinessType.QUERY)
+    @PostMapping("getNoticesByType")
+    @ApiOperation("查询不同类型的公告")
+    public AjaxResult getNoticesByType(@RequestBody HomeNoticeVo homeNoticeVo) {
+        LambdaQueryWrapper<HomeNotice> lw = new LambdaQueryWrapper<>();
+        if (!ObjectUtils.isEmpty(homeNoticeVo.getNoticeName())) {
+            lw.like(HomeNotice::getNoticeName, homeNoticeVo.getNoticeName());
+        }
+        if (!ObjectUtils.isEmpty(homeNoticeVo.getAnnouncementClassification())) {
+            lw.eq(HomeNotice::getAnnouncementClassification, homeNoticeVo.getAnnouncementClassification());
+        }
+        if (!ObjectUtils.isEmpty(homeNoticeVo.getBeginTime())) {
+            lw.ge(HomeNotice::getNoticeTime, homeNoticeVo.getBeginTime());
+        }
+        if (!ObjectUtils.isEmpty(homeNoticeVo.getEndTime())) {
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+            Date parse = null;
+            try {
+                parse = dateFormatT.parse((dateFormat.format(homeNoticeVo.getEndTime()) + " 23:59:59:999"));
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+            lw.le(HomeNotice::getNoticeTime, parse);
+        }
+
+        List<HomeNotice> noticeList = homeNoticeService.list(lw);
+        return AjaxResult.success(noticeList);
+    }
+
+
 }

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

@@ -37,24 +37,12 @@ public class SystemHomepageController extends BaseController {
         return planYearsService.demandUnitPlanManagementTotal();
     }
 
-    @ApiOperation(value = "采购管理部门首页计划管理总数")
-    @GetMapping("/purchasingManagement/planManagement/total")
-    public AjaxResult purchasingManagementPurchasingManagementTotal() {
-        return planYearsService.purchasingManagementPurchasingManagementTotal();
-    }
-
     @ApiOperation(value = "需求单位首页需求管理总数")
     @GetMapping("/demandUnit/demandManagement/total")
     public AjaxResult demandUnitDemandManagementTotal() {
         return planYearsService.demandUnitDemandManagementTotal();
     }
 
-    @ApiOperation(value = "采购管理部门首页需求管理总数")
-    @GetMapping("/purchasingManagement/demandManagement/total")
-    public AjaxResult purchasingManagementDemandManagementTotal() {
-        return planYearsService.purchasingManagementDemandManagementTotal();
-    }
-
     @ApiOperation(value = "需求单位首页合同管理总数")
     @GetMapping("/demandUnit/contractManagement/total")
     public AjaxResult demandUnitContractManagementTotal() {
@@ -67,6 +55,18 @@ public class SystemHomepageController extends BaseController {
         return planYearsService.demandUnitConstructionManagementTotal();
     }
 
+    @ApiOperation(value = "采购管理部门首页计划管理总数")
+    @GetMapping("/purchasingManagement/planManagement/total")
+    public AjaxResult purchasingManagementPurchasingManagementTotal() {
+        return planYearsService.purchasingManagementPurchasingManagementTotal();
+    }
+
+    @ApiOperation(value = "采购管理部门首页需求管理总数")
+    @GetMapping("/purchasingManagement/demandManagement/total")
+    public AjaxResult purchasingManagementDemandManagementTotal() {
+        return planYearsService.purchasingManagementDemandManagementTotal();
+    }
+
     @ApiOperation(value = "采购管理部门首页任务下达管理总数")
     @GetMapping("/purchasingManagement/taskRelease/total")
     public AjaxResult purchasingManagementTaskReleaseTotal() {

+ 12 - 0
purchase-admin/src/main/java/com/ozs/web/controller/plan/MonthlyReconciliationController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ozs.base.domain.BaseNoticeType;
+import com.ozs.base.vo.BasePolicyPageReqVo;
 import com.ozs.common.annotation.Log;
 import com.ozs.common.constant.Constants;
 import com.ozs.common.constant.ModularConstans;
@@ -178,4 +179,15 @@ public class MonthlyReconciliationController extends BaseController {
         return success(vo);
     }
 
+    @ApiOperation(value = "根据项目名称模糊查询项目信息")
+    @PostMapping("/listProjectInfoLikeName")
+    @Log(title = ModularConstans.monthly, businessType = BusinessType.QUERY)
+    public AjaxResult listProjectInfoLikeName(@NotEmpty(message = "数据为空")
+                                              @RequestBody BasePolicyPageReqVo vo) {
+        LambdaQueryWrapper<MonthlyReconciliation> lw = new LambdaQueryWrapper<>();
+        if (!StringUtils.isBlank(vo.getName())) {
+            lw.like(MonthlyReconciliation::getProjectName, vo.getName());
+        }
+        return success(monthlyReconciliationService.list(lw));
+    }
 }

+ 25 - 4
purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanQuarterController.java

@@ -13,6 +13,7 @@ import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.enums.BusinessType;
 import com.ozs.common.enums.DataIsDelete;
 import com.ozs.common.utils.PageUtils;
+import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.framework.web.service.TokenService;
 import com.ozs.plan.doman.PlanQuarter;
@@ -23,9 +24,12 @@ import com.ozs.plan.service.impl.PlanQuarterServiceImpl;
 import com.ozs.system.service.ISysDeptService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -34,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -47,6 +52,7 @@ import java.util.stream.Collectors;
  */
 @Api(tags = "季度计划")
 @RestController
+@Slf4j
 @RequestMapping("/plan/quarter")
 public class PlanQuarterController extends BaseController {
     @Autowired
@@ -215,8 +221,9 @@ public class PlanQuarterController extends BaseController {
     @Log(title = ModularConstans.planQuarter, businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('plan:quarter:exportPlan')")
     @PostMapping("/exportPlan")
-    public void exportPlan(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo) throws Exception {
-        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterListEXP(quarterStandardVo);
+    public void exportPlan(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo, HttpServletRequest request) throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterListEXP(quarterStandardVo, loginUser);
         ExcelUtil<PlanQuarterResponseVo> util = new ExcelUtil<>(PlanQuarterResponseVo.class);
         util.exportExcel(response, list, "季度计划数据");
     }
@@ -225,8 +232,9 @@ public class PlanQuarterController extends BaseController {
     @PostMapping("/exportPlanExamine")
     @PreAuthorize("@ss.hasPermi('plan:quarter:exportPlanExamine')")
     @Log(title = ModularConstans.planQuarter, businessType = BusinessType.EXPORT)
-    public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo) throws Exception {
-        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterExamineListEXP(quarterStandardVo);
+    public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanQuarterStandardVo quarterStandardVo, HttpServletRequest request) throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        List<PlanQuarterResponseVo> list = quarterService.selectPlanQuarterExamineListEXP(quarterStandardVo, loginUser);
         ExcelUtil<PlanQuarterResponseVo> util = new ExcelUtil<>(PlanQuarterResponseVo.class);
         util.exportExcel(response, list, "季度计划数据(审核单位)");
     }
@@ -340,5 +348,18 @@ public class PlanQuarterController extends BaseController {
         return success(message);
     }
 
+    @ApiOperation("模板下载")
+    @GetMapping("/downloaExcel")
+    public void downloadZip(HttpServletResponse response) {
+        try {
+            InputStream resourceAsStream = this.getClass().getResourceAsStream("/template/planQuarter.xlsx");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, "季度计划导入模板.xlsx");
+            FileUtils.writeBytesByInput(resourceAsStream, response.getOutputStream());
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
 
 }

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

@@ -13,6 +13,7 @@ import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.enums.BusinessType;
 import com.ozs.common.enums.DataIsDelete;
 import com.ozs.common.utils.PageUtils;
+import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.framework.web.service.TokenService;
 import com.ozs.plan.doman.PlanYears;
@@ -23,7 +24,9 @@ import com.ozs.plan.service.impl.PlanYearsServiceImpl;
 import com.ozs.system.service.ISysDeptService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -35,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -47,6 +51,7 @@ import java.util.stream.Collectors;
  * @author buzhanyi
  */
 @Api(tags = "年度计划")
+@Slf4j
 @RestController
 @RequestMapping("/plan/planYears")
 public class PlanYearsController extends BaseController {
@@ -215,8 +220,9 @@ public class PlanYearsController extends BaseController {
     @PostMapping("/exportPlan")
     @PreAuthorize("@ss.hasPermi('plan:planYears:exportPlan')")
     @Log(title = ModularConstans.planYear, businessType = BusinessType.EXPORT)
-    public void exportPlan(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo) throws Exception {
-        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsListEXP(yearsStandardVo);
+    public void exportPlan(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo, HttpServletRequest request) throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsListEXP(yearsStandardVo, loginUser);
         ExcelUtil<PlanYearsResponseVo> util = new ExcelUtil<>(PlanYearsResponseVo.class);
         util.exportExcel(response, list, "年度计划数据");
     }
@@ -225,8 +231,9 @@ public class PlanYearsController extends BaseController {
     @PreAuthorize("@ss.hasPermi('plan:planYears:exportPlanExamine')")
     @PostMapping("/exportPlanExamine")
     @Log(title = ModularConstans.planYear, businessType = BusinessType.EXPORT)
-    public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo) throws Exception {
-        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsExamineListEXP(yearsStandardVo);
+    public void exportPlanExamine(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo, HttpServletRequest request) throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        List<PlanYearsResponseVo> list = planYearsService.selectPlanYearsExamineListEXP(yearsStandardVo, loginUser);
         ExcelUtil<PlanYearsResponseVo> util = new ExcelUtil<>(PlanYearsResponseVo.class);
         util.exportExcel(response, list, "年度计划数据(审核单位)");
     }
@@ -249,6 +256,7 @@ public class PlanYearsController extends BaseController {
     @Log(title = ModularConstans.planYear, businessType = BusinessType.UPDATE)
     public AjaxResult update(@RequestBody PlanYearsStandardVo yearsStandardVo, HttpServletRequest request) {
         LoginUser loginUser = tokenService.getLoginUser(request);
+        yearsStandardVo.setPurchaseDeptId(String.valueOf(loginUser.getDeptId()));
         yearsStandardVo.setUpdated(String.valueOf(loginUser.getUserId()));
         return planYearsService.update(yearsStandardVo);
     }
@@ -347,4 +355,20 @@ public class PlanYearsController extends BaseController {
     public AjaxResult planYearsTotal() {
         return success(planYearsService.count());
     }
+
+
+    @ApiOperation("模板下载")
+    @GetMapping("/downloaExcel")
+    public void downloadZip(HttpServletResponse response) {
+        try {
+            InputStream resourceAsStream = this.getClass().getResourceAsStream("/template/planYears.xlsx");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, "年度计划导入模板.xlsx");
+            FileUtils.writeBytesByInput(resourceAsStream, response.getOutputStream());
+
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
 }

+ 55 - 163
purchase-admin/src/main/java/com/ozs/web/controller/plan/ProvisionalPlanController.java

@@ -1,36 +1,33 @@
 package com.ozs.web.controller.plan;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.pagehelper.PageInfo;
 import com.ozs.common.annotation.Log;
-import com.ozs.common.constant.Constants;
 import com.ozs.common.constant.ModularConstans;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
-import com.ozs.common.core.domain.entity.SysDept;
-import com.ozs.common.core.domain.entity.SysRole;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.enums.BusinessType;
-import com.ozs.common.enums.DataIsDelete;
+import com.ozs.common.enums.SysFileRefEnum;
 import com.ozs.common.exception.ServiceException;
-import com.ozs.common.utils.PageUtils;
 import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.file.FileUtils;
 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.ProvisionalPlan;
 import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
-import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
 import com.ozs.plan.service.PlanQuarterService;
 import com.ozs.plan.service.ProvisionalPlanService;
 import com.ozs.plan.service.impl.PlanQuarterServiceImpl;
+import com.ozs.system.domain.SysFileRef;
 import com.ozs.system.service.ISysDeptService;
+import com.ozs.system.service.SysFileRefService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -39,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -51,6 +49,7 @@ import java.util.stream.Collectors;
  * @author sunhh
  */
 @Api(tags = "临时计划")
+@Slf4j
 @RestController
 @RequestMapping("/plan/provisionalPlan")
 public class ProvisionalPlanController extends BaseController {
@@ -65,6 +64,10 @@ public class ProvisionalPlanController extends BaseController {
     private TokenService tokenService;
     @Autowired
     private ISysDeptService iSysDeptService;
+    @Autowired
+    private PlanQuarterServiceImpl planQuarterServiceImpl;
+    @Autowired
+    private SysFileRefService sysFileRefService;
 
     @ApiOperation(value = "新增临时计划")
     @PostMapping("/insertProvisionalPlan")
@@ -80,7 +83,25 @@ public class ProvisionalPlanController extends BaseController {
         provisionalPlan.setPlanType("1");
         // 项目状态(0:计划待提交,1:计划待审核,2:计划已退回,3:计划已审核)
         provisionalPlan.setProjectStatus("0");
-        return toAjax(provisionalPlanService.save(provisionalPlan));
+        provisionalPlan.setIsExcess(iSysDeptService.isExcessOrNo(provisionalPlan.getProjectType(), provisionalPlan.getEvaluation(), Long.valueOf(provisionalPlan.getPurchaseDeptId())));
+        boolean save = provisionalPlanService.save(provisionalPlan);
+        log.info("provisionalPlan的主键id:{}", provisionalPlan.getPlanPracticalId());
+        List<SysFileRef> sysFileRefs = provisionalPlan.getSysFileRefs();
+        if (!ObjectUtils.isEmpty(sysFileRefs)) {
+            if (save) {
+                for (SysFileRef ref : sysFileRefs) {
+                    ref.setRedId(provisionalPlan.getPlanPracticalId());
+                    ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
+                    ref.setCreated(provisionalPlan.getCreated());
+                    ref.setCreateTime(new Date());
+                    ref.setUpdated(provisionalPlan.getCreated());
+                    ref.setUpdateTime(new Date());
+                    sysFileRefService.save(ref);
+                }
+            }
+
+        }
+        return toAjax(save);
     }
 
     @ApiOperation(value = "删除临时计划", notes = "必传 plan_practical_id")
@@ -102,6 +123,7 @@ public class ProvisionalPlanController extends BaseController {
         if (StringUtils.isNull(provisionalPlan) || StringUtils.isNull(provisionalPlan.getPlanPracticalId())) {
             return error("临时计划id和修改数据不能为空");
         }
+        provisionalPlan.setIsExcess(iSysDeptService.isExcessOrNo(provisionalPlan.getProjectType(), provisionalPlan.getEvaluation(), Long.valueOf(provisionalPlan.getPurchaseDeptId())));
         return toAjax(provisionalPlanService.updateProvisionalPlanById(provisionalPlan));
     }
 
@@ -115,80 +137,8 @@ public class ProvisionalPlanController extends BaseController {
                 || StringUtils.isNull(vo.getPageSize())) {
             throw new ServiceException("分页参数不能为空!");
         }
-        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
-        try {
-            LambdaQueryWrapper<PlanQuarter> lw = new LambdaQueryWrapper<>();
-            lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
-            lw.eq(PlanQuarter::getPlanType, "1");
-            if (!ObjectUtils.isEmpty(vo.getProjectName())) {
-                lw.like(PlanQuarter::getProjectName, vo.getProjectName());
-            }
-            if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
-                lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices());
-            }
-            if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
-                lw.eq(PlanQuarter::getIsExcess, vo.getIsExcess());
-            }
-            if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
-                lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus());
-            }
-            if (!ObjectUtils.isEmpty(vo.getStartTime())) {
-                lw.ge(PlanQuarter::getPlanDemandSubTime, vo.getStartTime());
-            }
-            if (!ObjectUtils.isEmpty(vo.getEndTime())) {
-                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-                SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-                Date parse = dateFormatT.parse(dateFormat.format(vo.getEndTime()) + " 23:59:59:999");
-                lw.le(PlanQuarter::getPlanDemandSubTime, parse);
-            }
-
-            LoginUser loginUser = tokenService.getLoginUser(request);
-            // 添加数据权限
-            List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
-            if (roleKeys.contains(Constants.DEMAND_UNIT)) {
-                // 需求单位
-                /*(purchase_dept_id = 当前用户deptID) */
-                lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-            } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
-                    || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
-                // 采购管理部门  或  采购办
-                SysDept sysDept = new SysDept();
-                sysDept.setParentId(loginUser.getDeptId());
-                sysDept.setStatus("0");
-                List<Long> childDeptIds = iSysDeptService.selectDeptList(sysDept)
-                        .stream()
-                        .map(SysDept::getDeptId)
-                        .collect(Collectors.toList());
-                if (ObjectUtils.isEmpty(childDeptIds)) {
-                    lw.and((wrapper) -> {
-                        wrapper.eq(PlanQuarter::getIsExcess, 0);
-                        wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-                    });
-                } else {
-                    lw.and((wrapper) -> {
-                        wrapper.eq(PlanQuarter::getIsExcess, 0);
-                        wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-                    })
-                            .or((wrapper) -> {
-                                wrapper.eq(PlanQuarter::getIsExcess, 1);
-                                wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds);
-                            });
-                }
-            }
-            lw.orderBy(true, false, PlanQuarter::getCreateTime);
-            List<PlanQuarter> list = quarterService.list(lw);
-            planQuarterList = quarterServiceImpl.changeTo(list);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        Page pages = PageUtils.getPages(vo.getPageNum().intValue(), vo.getPageSize().intValue(), planQuarterList);
-        PageInfo<ProvisionalPlan> provisionalPlanPageInfo = new PageInfo<>();
-        if(!ObjectUtils.isEmpty(pages) && pages.getRecords().size()>0){
-            provisionalPlanPageInfo.setList(pages.getRecords());
-            provisionalPlanPageInfo.setTotal(pages.getTotal());
-            provisionalPlanPageInfo.setPages(Integer.parseInt(pages.getPages()+""));
-        }
-        return success(provisionalPlanPageInfo);
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        return provisionalPlanService.selectProvisionalPlan(vo, request, loginUser);
     }
 
     @ApiOperation(value = "查询临时计划-审核单位")
@@ -201,82 +151,8 @@ public class ProvisionalPlanController extends BaseController {
                 || StringUtils.isNull(vo.getPageSize())) {
             throw new ServiceException("分页参数不能为空!");
         }
-        List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
-        try {
-            LambdaQueryWrapper<PlanQuarter> lw = new LambdaQueryWrapper<>();
-            lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
-            lw.eq(PlanQuarter::getPlanType, "1");
-            if (!ObjectUtils.isEmpty(vo.getProjectName())) {
-                lw.like(PlanQuarter::getProjectName, vo.getProjectName());
-            }
-            if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
-                lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices());
-            }
-            if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
-                lw.eq(PlanQuarter::getIsExcess, vo.getIsExcess());
-            }
-            if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
-                lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus());
-            } else {
-                lw.apply("  project_status IN (1,3)", "");
-            }
-            if (!ObjectUtils.isEmpty(vo.getStartTime())) {
-                lw.ge(PlanQuarter::getPlanDemandSubTime, vo.getStartTime());
-            }
-            if (!ObjectUtils.isEmpty(vo.getEndTime())) {
-                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-                SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-                Date parse = dateFormatT.parse(dateFormat.format(vo.getEndTime()) + " 23:59:59:999");
-                lw.le(PlanQuarter::getPlanDemandSubTime, parse);
-            }
-
-            LoginUser loginUser = tokenService.getLoginUser(request);
-            // 添加数据权限
-            List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
-            if (roleKeys.contains(Constants.DEMAND_UNIT)) {
-                // 需求单位
-                /*(purchase_dept_id = 当前用户deptID) */
-                lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-            } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
-                    || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
-                // 采购管理部门  或  采购办
-                SysDept sysDept = new SysDept();
-                sysDept.setParentId(loginUser.getDeptId());
-                sysDept.setStatus("0");
-                List<Long> childDeptIds = iSysDeptService.selectDeptList(sysDept)
-                        .stream()
-                        .map(SysDept::getDeptId)
-                        .collect(Collectors.toList());
-                if (ObjectUtils.isEmpty(childDeptIds)) {
-                    lw.and((wrapper) -> {
-                        wrapper.eq(PlanQuarter::getIsExcess, 0);
-                        wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-                    });
-                } else {
-                    lw.and((wrapper) -> {
-                        wrapper.eq(PlanQuarter::getIsExcess, 0);
-                        wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
-                    })
-                            .or((wrapper) -> {
-                                wrapper.eq(PlanQuarter::getIsExcess, 1);
-                                wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds);
-                            });
-                }
-            }
-            lw.orderBy(true, false, PlanQuarter::getCreateTime);
-            List<PlanQuarter> list = quarterService.list(lw);
-            planQuarterList = quarterServiceImpl.changeTo(list);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        Page pages = PageUtils.getPages(vo.getPageNum().intValue(), vo.getPageSize().intValue(), planQuarterList);
-        PageInfo<ProvisionalPlan> provisionalPlanPageInfo = new PageInfo<>();
-        if (!ObjectUtils.isEmpty(pages) && pages.getRecords().size() > 0) {
-            provisionalPlanPageInfo.setList(pages.getRecords());
-            provisionalPlanPageInfo.setTotal(pages.getTotal());
-            provisionalPlanPageInfo.setPages(Integer.parseInt(pages.getPages() + ""));
-        }
-        return AjaxResult.success(provisionalPlanPageInfo);
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        return provisionalPlanService.selectProvisionalPlanAudit(vo, request, loginUser);
     }
 
     @ApiOperation(value = "查询临时计划详情")
@@ -310,8 +186,9 @@ public class ProvisionalPlanController extends BaseController {
     @PostMapping("/exportProvisionalPlan")
     @PreAuthorize("@ss.hasPermi('plan:provisionalPlan:exportProvisionalPlan')")
     @Log(title = ModularConstans.provisionalPlan, businessType = BusinessType.EXPORT)
-    public void exportProvisionalPlan(HttpServletResponse response, @RequestBody ProvisionalPlanVo provisionalPlanVo) throws Exception {
-        List<ProvisionalPlan> list = provisionalPlanService.selectProvisionalPlanExport(provisionalPlanVo);
+    public void exportProvisionalPlan(HttpServletResponse response, @RequestBody ProvisionalPlanVo provisionalPlanVo, HttpServletRequest request) throws Exception {
+        LoginUser loginUser = tokenService.getLoginUser(request);
+        List<ProvisionalPlan> list = provisionalPlanService.selectProvisionalPlanExport(provisionalPlanVo, loginUser);
         ExcelUtil<ProvisionalPlan> util = new ExcelUtil<>(ProvisionalPlan.class);
         util.exportExcel(response, list, "临时计划数据");
     }
@@ -352,4 +229,19 @@ public class ProvisionalPlanController extends BaseController {
         provisionalPlanVo.setUpdated(String.valueOf(loginUser.getUserId()));
         return provisionalPlanService.auditNoPass(provisionalPlanVo);
     }
+
+
+    @ApiOperation("模板下载")
+    @GetMapping("/downloaExcel")
+    public void downloadZip(HttpServletResponse response) {
+        try {
+            InputStream resourceAsStream = this.getClass().getResourceAsStream("/template/provisionalPlan.xlsx");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, "临时计划导入模板.xlsx");
+            FileUtils.writeBytesByInput(resourceAsStream, response.getOutputStream());
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
 }

+ 29 - 9
purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/StatisticalAnalysisController.java

@@ -57,6 +57,19 @@ public class StatisticalAnalysisController extends BaseController {
         return AjaxResult.success(resVos);
     }
 
+    @ApiOperation(value = "采购方式分布")
+    @PostMapping("/countByPurchaseMouth")
+    @PreAuthorize("@ss.hasPermi('statistical:countByPurchaseMouth')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByPurchaseMouth(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照项目属性统计所有的项目
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByPurchaseMode();
+        return AjaxResult.success(resVos);
+    }
+
     @ApiOperation(value = "项目金额分布")
     @PostMapping("/countByEvaluation")
     @PreAuthorize("@ss.hasPermi('statistical:countByEvaluation')")
@@ -155,15 +168,6 @@ public class StatisticalAnalysisController extends BaseController {
         return pmDemandService.taskQuantityAnalysis(pmDemandReqVo);
     }
 
-    //@ApiOperation(value = "新完成采购任务数量")--------接口作废
-    // @PostMapping("/newFinishPro")
-    //public AjaxResult newFinishPro(@RequestBody PmDemandReqVo pmDemandReqVo) {
-    //    // 新完成采购任务数量:本年度状态为“合同待填制”、“项目建设中”、“项目建设完成”的项目
-    //    //        预算金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的预算金额
-    //    //合同金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的合同金额
-    //    return pmDemandService.newFinishPro();
-    //}
-
     @ApiOperation(value = "各阶段采购任务数量分布")
     @PostMapping("/countEveryStatusNum")
     @PreAuthorize("@ss.hasPermi('statistical:countEveryStatusNum')")
@@ -220,6 +224,22 @@ public class StatisticalAnalysisController extends BaseController {
         return success(map);
     }
 
+    @ApiOperation(value = "已完成采购任务数量")
+    @PostMapping("/purchaseTaskFinish")
+    @PreAuthorize("@ss.hasPermi('statistical:purchaseTaskFinish')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult purchaseTaskFinish(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        // 需求单位可查看本单位及其下属单位的统计数据
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        if (StringUtils.isNull(pmDemandReqVo.getTimeType())) {
+            return error("统计时间类型不能为空, 1:年度,2:季度,3:月份!");
+        }
+        List<Map<String, Integer>> map = pmDemandService.purchaseTaskFinish(pmDemandReqVo);
+        return success(map);
+    }
+
     @ApiOperation(value = "各阶段项目数量分布")
     @PostMapping("/purchaseProjectDistribution")
     @PreAuthorize("@ss.hasPermi('statistical:purchaseProjectDistribution')")

+ 6 - 3
purchase-admin/src/main/java/com/ozs/web/controller/system/SysRoleController.java

@@ -155,10 +155,13 @@ public class SysRoleController extends BaseController
         {
             return error("新增角色'" + sysRole.getRoleName() + "'失败,角色名称已存在");
         }
+        if(org.apache.commons.lang3.StringUtils.isBlank(sysRole.getRoleKey())){
+            sysRole.setRoleKey("common");
+        }
         sysRole.setCreateBy(getUsername());
         return toAjax(roleService.addRole(sysRole));
     }
-    
+
     @PreAuthorize("@ss.hasPermi('system:role:addDistribution')")
     @PostMapping("/saveDistributionModule")
     @ApiOperation("新增分配模块")
@@ -223,7 +226,7 @@ public class SysRoleController extends BaseController
         role.setUpdateBy(getUsername());
 
         return toAjax(roleService.updateRoles(role));
-        
+
     }
 
     /**
@@ -239,7 +242,7 @@ public class SysRoleController extends BaseController
         roleService.checkRoleDataScope(role.getRoleId());
         return toAjax(roleService.authDataScope(role));
     }
-    
+
     @PreAuthorize("@ss.hasPermi('system:role:editDistribution')")
     @PostMapping("/updateDistributionModule")
     @ApiOperation("修改分配模块")

+ 4 - 4
purchase-admin/src/main/java/com/ozs/web/controller/tool/PmTaskServer.java

@@ -40,7 +40,7 @@ public class PmTaskServer {
         if(ObjectUtils.isEmpty(list)){
             return;
         }
-        Date now = new Date();
+        Date now = DateUtils.parseDate(DateUtils.getDate());
         List<PmDemand> updateList = new ArrayList<>();
         List<SysDictData> data = iSysDictTypeService.selectDictDataByType("alert_time_setting");
         int setting1 = Integer.parseInt(data.stream().filter(item -> item.getDictLabel().equals("计划提报时间")).collect(Collectors.toList()).get(0).getDictValue());
@@ -52,7 +52,7 @@ public class PmTaskServer {
         list.forEach(item-> {
             //需求提报时间:根据数据阈值中设置的提报时间进行判断,进行预警
             int diff1 = DateUtils.differentDaysByMillisecond(item.getPlanDemandSubTime(), now);
-            if (ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff1 > setting1) {
+            if (ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff1 >= setting1) {
                 log.info("******** 需求提报预警: " + item.getProjectName());
                 PmDemand pmDemand = new PmDemand();
                 pmDemand.setDemandId(item.getDemandId());
@@ -61,7 +61,7 @@ public class PmTaskServer {
             } else {
                 //采购完成时间:根据数据阈值中设置的采购完成时间进行判断,进行预警
                 int diff2 = DateUtils.differentDaysByMillisecond(item.getPlanPurchaseFinishTime(), now);
-                if ( ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff2 > setting2) {
+                if ( ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff2 >= setting2) {
                     log.info("******** 采购完成预警: " + item.getProjectName());
                     PmDemand pmDemand = new PmDemand();
                     pmDemand.setDemandId(item.getDemandId());
@@ -70,7 +70,7 @@ public class PmTaskServer {
                 } else {
                     //计划交付时间:根据数据阈值中设置的交付时间进行判断,进行预警
                     int diff3 = DateUtils.differentDaysByMillisecond(item.getPlanDeliverTime(), now);
-                    if (ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff3 > setting3) {
+                    if (ObjectUtils.isEmpty(item.getRealDemandCommitTime()) && diff3 >= setting3) {
                         log.info("******** 计划交付预警: " + item.getProjectName());
                         PmDemand pmDemand = new PmDemand();
                         pmDemand.setDemandId(item.getDemandId());

+ 59 - 3
purchase-admin/src/main/resources/application-prod.yml

@@ -23,7 +23,7 @@ server:
     # tomcat的URI编码
     uri-encoding: UTF-8
     # 连接数满后的排队数,默认为100
-    accept-count: 1000
+    accept-count: 100
     threads:
       # tomcat最大线程数,默认为200
       max: 800
@@ -46,6 +46,62 @@ user:
 
 # Spring配置
 spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://127.0.0.1:3306/purchase?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123.asd
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: purchase
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+
   # 资源信息
   messages:
     # 国际化资源文件路径
@@ -67,11 +123,11 @@ spring:
     # 地址
     host: 127.0.0.1
     # 端口,默认为6379
-    port: 7001
+    port: 6379
     # 数据库索引
     database: 0
     # 密码
-    password: 106@qwe123
+    password: tysfrz123
     # 连接超时时间
     timeout: 100s
     lettuce:

+ 1 - 0
purchase-admin/src/main/resources/application.yml

@@ -11,3 +11,4 @@ server:
 spring:
   profiles:
     active: druid,test
+#    active: prod

BIN
purchase-admin/src/main/resources/template/planQuarter.xlsx


BIN
purchase-admin/src/main/resources/template/planYears.xlsx


BIN
purchase-admin/src/main/resources/template/professional.xlsx


BIN
purchase-admin/src/main/resources/template/provisionalPlan.xlsx


+ 1 - 1
purchase-common/src/main/java/com/ozs/common/config/PurchaseConfig.java

@@ -135,7 +135,7 @@ public class PurchaseConfig
      */
     public static String getDownloadPath()
     {
-        return getProfile() + "/download/";
+        return getProfile() + "/upload/";
     }
 
     /**

+ 9 - 6
purchase-common/src/main/java/com/ozs/common/core/domain/entity/SysProcurementStandard.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 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 io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import java.io.Serializable;
@@ -18,12 +19,12 @@ import java.util.Date;
 @TableName("sys_procurement_standard")
 public class SysProcurementStandard implements Serializable {
     private static final long serialVersionUID = 1L;
-    
+
     @ApiModelProperty(value = "采购标准ID")
     @TableField("procurement_standard_id")
     @TableId(type = IdType.AUTO)
     private Long procurementStandardId;
-    
+
     @ApiModelProperty(value = "部门ID")
     @TableField("dept_id")
     private Long deptId;
@@ -37,20 +38,22 @@ public class SysProcurementStandard implements Serializable {
     @ApiModelProperty(value = "状态")
     @TableField("state")
     private Integer state;
-    
+
     @ApiModelProperty(value = "最小值(万元)")
     @TableField("minimum_value")
     private BigDecimal minimumValue;
-    
+
     @ApiModelProperty(value = "最大值(万元)")
     @TableField("maximum")
     private BigDecimal maximum;
-    
+
     @ApiModelProperty(value = "创建时间")
     @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
-    
+
     @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("update_time")
     private Date updateTime;
 }

+ 6 - 6
purchase-common/src/main/java/com/ozs/common/enums/ProcurementMethodSuggest.java

@@ -1,16 +1,16 @@
 package com.ozs.common.enums;
 
 /**
- * 采购方式建议
+ * 采购方式
  *
  * @author buzhanyi
  */
 public enum ProcurementMethodSuggest {
-    OPEN_BIDDING("1", "公开招标"),
-    SELECTED_BIDDING("2", "邀请招标"),
-    COMPETITIVE_NEGOTIATION("3", "竞争性谈判"),
-    ENQUIRY("4", "询价"),
-    SINGLE_SOURCE ("5", "单一来源");
+    OPEN_BIDDING("0", "公开招标"),
+    SELECTED_BIDDING("1", "邀请招标"),
+    COMPETITIVE_NEGOTIATION("2", "竞争性谈判"),
+    ENQUIRY("3", "询价"),
+    SINGLE_SOURCE("4", "单一来源");
 
     private final String code;
     private final String info;

+ 3 - 3
purchase-common/src/main/java/com/ozs/common/enums/SysFileRefEnum.java

@@ -22,9 +22,9 @@ public enum SysFileRefEnum {
     PM_BID_FAILURE_FILE(11, "流标文件"),
     PM_BID_CALL_QEUSTION_FILE(12, "质疑文件"),
     PM_BID_WINNING_NOTIFICATION(13, "中标通知书"),
-    PM_CONTRACT_INFO (14, "合同信息附件"),
-    PM_PROJECT_CONSTRUCTION (15, "建设文档附件")
-    ;
+    PM_CONTRACT_INFO(14, "合同信息附件"),
+    PM_PROJECT_CONSTRUCTION(15, "建设文档附件"),
+    PLAN_TEMPORARY_EXAMINE(16, "临时、季度计划审核文件");
 
     private Integer type;
     private String info;

+ 18 - 7
purchase-common/src/main/java/com/ozs/common/utils/file/FileUtils.java

@@ -1,12 +1,6 @@
 package com.ozs.common.utils.file;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.net.URLEncoder;
 import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
@@ -360,4 +354,21 @@ public class FileUtils {
     }
 
 
+    public static void writeBytesByInput(InputStream ins, OutputStream os) throws IOException {
+        try {
+            if (ObjectUtils.isEmpty(ins)) {
+                throw new FileNotFoundException();
+            }
+            byte[] b = new byte[1024];
+            int length;
+            while ((length = ins.read(b)) > 0) {
+                os.write(b, 0, length);
+            }
+        } catch (IOException e) {
+            throw e;
+        } finally {
+            IOUtils.close(os);
+            IOUtils.close(ins);
+        }
+    }
 }

+ 14 - 0
purchase-common/src/main/java/com/ozs/common/vo/FileDownVo.java

@@ -0,0 +1,14 @@
+package com.ozs.common.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class FileDownVo {
+
+    String fileName;
+    Boolean delete;
+}

+ 1 - 1
purchase-framework/src/main/java/com/ozs/framework/config/CaptchaConfig.java

@@ -63,7 +63,7 @@ public class CaptchaConfig
         // KAPTCHA_SESSION_KEY
         properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath");
         // 验证码文本生成器
-        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.framework.config.KaptchaTextCreator");
+        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ozs.framework.config.KaptchaTextCreator");
         // 验证码文本字符间距 默认为2
         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");
         // 验证码文本字符长度 默认为5

+ 2 - 0
purchase-system/src/main/java/com/ozs/base/domain/BaseExpert.java

@@ -128,6 +128,7 @@ public class BaseExpert extends BaseDto {
      */
     @ApiModelProperty(value = "创建时间")
     @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
@@ -142,5 +143,6 @@ public class BaseExpert extends BaseDto {
      */
     @ApiModelProperty(value = "更新时间")
     @TableField("update_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 }

+ 15 - 0
purchase-system/src/main/java/com/ozs/base/domain/BaseNotice.java

@@ -35,6 +35,21 @@ public class BaseNotice extends BaseDto {
     @TableId(type = IdType.AUTO)
     private Long id;
 
+    /** 主键id */
+    @ApiModelProperty("项目ID")
+    @NotBlank(message = "项目ID")
+    private Long demandId;
+
+    /** 单位ID */
+    @ApiModelProperty("单位ID")
+    @NotBlank(message = "单位ID")
+    private Long deptId;
+
+    /** 超限额 */
+    @ApiModelProperty("超限额")
+    @NotBlank(message = "超限额")
+    private Integer isExcess;
+
     /** 项目名称 */
     @Excel(name = "项目名称")
     @ApiModelProperty("项目名称")

+ 3 - 0
purchase-system/src/main/java/com/ozs/base/domain/BaseUnitInformation.java

@@ -2,6 +2,7 @@ package com.ozs.base.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -32,6 +33,7 @@ public class BaseUnitInformation {
      * 创建人
      */
     @ApiModelProperty(value = "创建人")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("created")
     private String created;
 
@@ -39,6 +41,7 @@ public class BaseUnitInformation {
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("create_time")
     private Date createTime;
 }

+ 2 - 0
purchase-system/src/main/java/com/ozs/base/domain/vo/BaseExpertVo.java

@@ -139,6 +139,7 @@ public class BaseExpertVo extends PageVo {
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
@@ -151,5 +152,6 @@ public class BaseExpertVo extends PageVo {
      * 更新时间
      */
     @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 }

+ 12 - 0
purchase-system/src/main/java/com/ozs/base/service/BaseProfessionalService.java

@@ -3,7 +3,10 @@ package com.ozs.base.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.base.domain.BaseProfessional;
 import com.ozs.base.domain.vo.BaseProfessionalVo;
+import com.ozs.common.core.domain.AjaxResult;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 public interface BaseProfessionalService extends IService<BaseProfessional> {
@@ -13,4 +16,13 @@ public interface BaseProfessionalService extends IService<BaseProfessional> {
     void deleteIds(List<Integer> deleteIds);
 
     String importBaseProfessional(List<BaseProfessional> userList, boolean updateSupport);
+
+    /**
+     * 下载模板
+     * @param downloadPath
+     * @param request
+     * @param response
+     * @return
+     */
+    AjaxResult downloadPathFile(String downloadPath, HttpServletRequest request, HttpServletResponse response);
 }

+ 7 - 7
purchase-system/src/main/java/com/ozs/base/service/impl/BaseExpertServiceImpl.java

@@ -62,11 +62,11 @@ public class BaseExpertServiceImpl extends ServiceImpl<BaseExpertMapper, BaseExp
                 Integer i = baseExpertMapper.insertBaseUnitInformation(baseUnitInformation);
             }
         }
-        // 区域list转字符串
-        if (StringUtils.isNotNull(baseExpertVo.getLocalAreaList())) {
-            String stringFromList = String.join(",", baseExpertVo.getLocalAreaList());
-            baseExpertVo.setLocalArea(stringFromList);
-        }
+        //// 区域list转字符串
+        //if (StringUtils.isNotNull(baseExpertVo.getLocalAreaList())) {
+        //    String stringFromList = String.join(",", baseExpertVo.getLocalAreaList());
+        //    baseExpertVo.setLocalArea(stringFromList);
+        //}
         return baseExpertMapper.insertExpert(baseExpertVo);
     }
 
@@ -84,8 +84,8 @@ public class BaseExpertServiceImpl extends ServiceImpl<BaseExpertMapper, BaseExp
     public AjaxResult selectReviewProject(BaseExpertVo baseExpertVo) {
         // 通过专家ID查询 与专家库关联的采购执行管理ID
         List<Integer> demandIdList = pmDemandExpertRefService.selectByExpertId(baseExpertVo.getId());
-        if (demandIdList.size() == 0) {
-            return AjaxResult.error("当前专家还有有被抽取!");
+        if (ObjectUtils.isEmpty(demandIdList)) {
+            return AjaxResult.success(new PageInfo<>(demandIdList));
         }
         List<PmDemand> pmDemandList = pmDemandService.selectByDemandIdList(demandIdList);
         List<PmDemandResVo> pmDemandResponseVoList = changTo(pmDemandList);

+ 50 - 0
purchase-system/src/main/java/com/ozs/base/service/impl/BaseProfessionalServiceImpl.java

@@ -5,6 +5,7 @@ import com.ozs.base.domain.BaseProfessional;
 import com.ozs.base.domain.vo.BaseProfessionalVo;
 import com.ozs.base.mapper.BaseProfessionalMapper;
 import com.ozs.base.service.BaseProfessionalService;
+import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.entity.SysDictType;
 import com.ozs.common.core.domain.entity.SysUser;
 import com.ozs.common.exception.ServiceException;
@@ -15,7 +16,10 @@ import com.ozs.common.utils.bean.BeanValidators;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Validator;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -78,6 +82,52 @@ public class BaseProfessionalServiceImpl extends ServiceImpl<BaseProfessionalMap
         return successMsg.toString();
     }
 
+    @Override
+    public AjaxResult downloadPathFile(String downloadPath, HttpServletRequest request, HttpServletResponse response) {
+        //设置文件路径
+        File file = new File(downloadPath);
+        //获取文件名称
+        String fileName = file.getName();
+        //判断文件是否存在
+        if (file.exists()) {
+            response.setContentType("application/force-download");// 设置强制下载不打开
+            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
+            byte[] buffer = new byte[1024];
+            FileInputStream fis = null;
+            BufferedInputStream bis = null;
+            try {
+                fis = new FileInputStream(file);
+                bis = new BufferedInputStream(fis);
+                OutputStream os = response.getOutputStream();
+                int i = bis.read(buffer);
+                while (i != -1) {
+                    os.write(buffer, 0, i);
+                    i = bis.read(buffer);
+                }
+                file.delete();
+                return AjaxResult.success("下载成功");
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (bis != null) {
+                    try {
+                        bis.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+                if (fis != null) {
+                    try {
+                        fis.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return AjaxResult.success("下载失败");
+    }
+
     @Override
     public List<BaseProfessionalVo> selectBaseProfessionalVo(BaseProfessionalVo baseProfessionalVo) {
         List<BaseProfessional> allList = new ArrayList<>();

+ 24 - 10
purchase-system/src/main/java/com/ozs/home/domain/HomeNotice.java

@@ -1,7 +1,7 @@
 package com.ozs.home.domain;
 
 
-import com.ozs.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
@@ -9,7 +9,9 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.math.BigDecimal;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.Table;
 import java.util.Date;
 
 /**
@@ -21,29 +23,41 @@ import java.util.Date;
 @NoArgsConstructor
 @Builder
 @ApiModel("首页公告")
+@Table(name = "home_notice")
 public class HomeNotice extends BaseEntity {
 
     /** 主键 */
+    @Id
     private Long homeNoticeId;
 
     /** 首页分类(0需求单位首页1采购管理部门首页2采购部首页) */
+    @Column(name = "homepage_classification")
     private Integer homepageClassification;
 
     /** 公告分类(0采购公告1中标公告2流标公告) */
+    @Column(name = "announcement_classification")
     private Integer announcementClassification;
 
-    /** 公告名称 */
+    /**
+     * 公告名称
+     */
+    @Column(name = "notice_name")
     private String noticeName;
 
-    /** 公告时间 */
+    /**
+     * 公告时间
+     */
+    @Column(name = "notice_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date noticeTime;
 
-    /** 采购项目编号 */
-    private String projectNo;
+    ///** 合同履行日期 */
+    //@Column(name = "performance_date")
+    //private String performanceDate;
 
-    /** 合同履行日期 */
-    private String performanceDate;
-
-    /** 采购项目名称 */
+    /**
+     * 采购项目名称
+     */
+    @Column(name = "project_name")
     private String projectName;
 }

+ 19 - 3
purchase-system/src/main/java/com/ozs/home/domain/vo/HomeNoticeVo.java

@@ -1,6 +1,7 @@
 package com.ozs.home.domain.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.vo.PageVo;
 import lombok.Data;
 
@@ -14,12 +15,27 @@ public class HomeNoticeVo extends PageVo {
     /** 首页分类(0需求单位首页1采购管理部门首页2采购部首页) */
     private String homepageClassification;
 
-    /** 公告分类(0采购公告1中标公告2流标公告) */
+    /**
+     * 公告分类(0采购公告1中标公告2流标公告)
+     */
     private String announcementClassification;
 
-    /** 公告名称 */
+    /**
+     * 公告名称
+     */
     private String noticeName;
 
-    /** 公告时间 */
+    /**
+     * 公告时间
+     */
     private Date noticeTime;
+
+    /**
+     * 查询参数开始时间和结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date beginTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
 }

+ 1 - 0
purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java

@@ -150,6 +150,7 @@ public class PlanYears {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
+
     /**
      * 逻辑删除字段--->(0:正常,1:已删除)
      */

+ 20 - 6
purchase-system/src/main/java/com/ozs/plan/doman/ProvisionalPlan.java

@@ -1,15 +1,19 @@
 package com.ozs.plan.doman;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 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 com.ozs.system.domain.SysFileRef;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 @Data
 @TableName("plan_practical")
@@ -17,11 +21,12 @@ public class ProvisionalPlan {
 
     @ApiModelProperty(value = "主键ID")
     @TableField("plan_practical_id")
-    private Integer planPracticalId;
+    @TableId(type = IdType.AUTO)
+    private Long planPracticalId;
 
     @ApiModelProperty(value = "年度计划ID")
     @TableField("plan_year_id")
-    private Integer planYearId;
+    private Long planYearId;
 
     @NotNull(message = "采购单位不能为空")
     @ApiModelProperty(value = "采购单位(登录账号的单位)")
@@ -62,6 +67,7 @@ public class ProvisionalPlan {
     @ApiModelProperty(value = "采购服务站")
     @TableField("purchase_services")
     private String  purchaseServices;
+
     @Excel(name = "采购服务站")
     @TableField(exist = false)
     private String purchaseServicesStr;
@@ -73,28 +79,29 @@ public class ProvisionalPlan {
     @TableField(exist = false)
     private String purchaseModeStr;
 
-    @Excel(name = "提报需求时间")
+    @Excel(name = "计划提报需求时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)")
     @TableField("plan_demand_sub_time")
     private Date planDemandSubTime;
 
-    @Excel(name = "完成采购时间")
+    @Excel(name = "计划完成采购时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)")
     @TableField("plan_purchase_finish_time")
     private Date planPurchaseFinishTime;
 
-    @Excel(name = "交付(实施)时间")
+    @Excel(name = "计划交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期")
     @TableField("plan_deliver_time")
     private Date planDeliverTime;
 
+    @Excel(name = "项目属性")
     @ApiModelProperty(value = "项目属性(0:应急应战项目, 1:重大规划任务项目, 2:规划任务项目, 3:一般项目)")
     @TableField("project_attr")
     private String projectAttr;
-    @Excel(name = "项目属性")
+
     @TableField(exist = false)
     private String projectAttrStr;
 
@@ -141,4 +148,11 @@ public class ProvisionalPlan {
     @ApiModelProperty(value = "修改时间")
     @TableField("update_time")
     private Date updateTime;
+
+    /**
+     * 上传附件
+     */
+    @ApiModelProperty(value = "附件关联")
+    @TableField(exist = false)
+    List<SysFileRef> sysFileRefs;
 }

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

@@ -87,7 +87,7 @@ public class PlanQuarterStandardVo extends PageVo {
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划提报需求时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划提报需求时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
@@ -95,7 +95,7 @@ public class PlanQuarterStandardVo extends PageVo {
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划完成采购时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划完成采购时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
@@ -103,7 +103,7 @@ public class PlanQuarterStandardVo extends PageVo {
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划交付时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;

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

@@ -83,7 +83,7 @@ public class PlanYearsStandardVo extends PageVo {
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划提报需求时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划提报需求时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
@@ -91,7 +91,7 @@ public class PlanYearsStandardVo extends PageVo {
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划完成采购时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划完成采购时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
@@ -99,7 +99,7 @@ public class PlanYearsStandardVo extends PageVo {
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
+    @Excel(name = "计划交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划交付时间")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;

+ 2 - 1
purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/ProvisionalPlanVo.java

@@ -28,7 +28,7 @@ public class ProvisionalPlanVo extends PageVo {
     List<SysFileInfo> fileInfos;
 
     @ApiModelProperty(value = "主键ID")
-    private Integer planPracticalId;
+    private Long planPracticalId;
 
     @ApiModelProperty(value = "年度计划ID")
     private Long planYearId;
@@ -105,4 +105,5 @@ public class ProvisionalPlanVo extends PageVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "修改时间")
     private Date updateTime;
+
 }

+ 4 - 4
purchase-system/src/main/java/com/ozs/plan/mapper/ProvisionalPlanMapper.java

@@ -11,21 +11,21 @@ import java.util.List;
 
 @Mapper
 public interface ProvisionalPlanMapper extends BaseMapper<ProvisionalPlan> {
-    int deleteProvisionalPlanById(@Param("planPracticalId") Integer planPracticalId);
+    int deleteProvisionalPlanById(@Param("planPracticalId") Long planPracticalId);
 
     int updateProvisionalPlanById(ProvisionalPlanVo provisionalPlan);
 
     List<ProvisionalPlan> selectProjectName(String projectName);
 
-    int commitProvisionalPlan(Integer planPracticalId);
+    int commitProvisionalPlan(@Param("planPracticalId") Long planPracticalId);
 
-    ProvisionalPlan seletById(Integer planPracticalId);
+    ProvisionalPlan seletById(@Param("planPracticalId") Long planPracticalId);
 
     List<ProvisionalPlan> selectProvisionalPlan(ProvisionalPlanVo provisionalPlanVo);
 
     List<ProvisionalPlan> selectProvisionalPlanAudit(ProvisionalPlanVo provisionalPlanVo);
 
-    int review(ProvisionalPlan provisionalPlan);
+    int review(ProvisionalPlanVo vo);
 
     /**
      * 通过年度ID,查询季度、临时计划详情

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

@@ -25,7 +25,7 @@ public interface PlanQuarterService extends IService<PlanQuarter> {
      * @param vo 季度计划请求对象
      * @return 季度计划记录集合
      */
-    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo);
+    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo, LoginUser loginUser);
 
     /**
      * 查询季度计划记录集合(审核单位--导出)
@@ -33,7 +33,7 @@ public interface PlanQuarterService extends IService<PlanQuarter> {
      * @param vo 季度计划请求对象
      * @return 季度计划记录集合
      */
-    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo);
+    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo, LoginUser loginUser);
 
     /**
      * 创建季度计划

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

@@ -26,7 +26,7 @@ public interface PlanYearsService extends IService<PlanYears> {
      * @param vo 年度计划请求对象
      * @return 年度计划记录集合
      */
-    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo);
+    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo, LoginUser loginUser);
 
     /**
      * 查询年度计划记录集合(审核单位--导出)
@@ -34,7 +34,7 @@ public interface PlanYearsService extends IService<PlanYears> {
      * @param vo 年度计划请求对象
      * @return 年度计划记录集合
      */
-    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo);
+    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo, LoginUser loginUser);
 
     /**
      * 创建年度计划

+ 7 - 6
purchase-system/src/main/java/com/ozs/plan/service/ProvisionalPlanService.java

@@ -5,28 +5,29 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.pagehelper.PageInfo;
 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.ProvisionalPlan;
 import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 public interface ProvisionalPlanService extends IService<ProvisionalPlan> {
-    int deleteProvisionalPlanById(Integer planPracticalId);
+    int deleteProvisionalPlanById(Long planPracticalId);
+
 
     int updateProvisionalPlanById(ProvisionalPlanVo provisionalPlan);
 
     String importProvisionalPlan(List<ProvisionalPlan> provisionalPlans, boolean updateSupport, LoginUser loginUser);
 
-    List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo provisionalPlanVo);
+    List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo provisionalPlanVo, LoginUser loginUser);
 
     int commitProvisionalPlan(ProvisionalPlanVo provisionalPlanVo);
 
-    AjaxResult seletById(Integer planPracticalId);
+    AjaxResult seletById(Long planPracticalId);
 
-    PageInfo<ProvisionalPlan> selectProvisionalPlan(ProvisionalPlanVo provisionalPlanVo);
+    AjaxResult selectProvisionalPlan(ProvisionalPlanVo provisionalPlanVo, HttpServletRequest request, LoginUser loginUser);
 
-    PageInfo<ProvisionalPlan> selectProvisionalPlanAudit(ProvisionalPlanVo provisionalPlanVo);
+    AjaxResult selectProvisionalPlanAudit(ProvisionalPlanVo provisionalPlanVo, HttpServletRequest request, LoginUser loginUser);
 
     AjaxResult auditPass(ProvisionalPlanVo provisionalPlanVo);
 

+ 85 - 13
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanQuarterServiceImpl.java

@@ -28,6 +28,7 @@ import com.ozs.plan.mapper.PlanYearsMapper;
 import com.ozs.plan.service.PlanQuarterService;
 import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.mapper.PmDemandMapper;
+import com.ozs.pm.service.IPmDemandService;
 import com.ozs.system.domain.SysFileInfo;
 import com.ozs.system.domain.SysFileRef;
 import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
@@ -50,6 +51,7 @@ import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -82,9 +84,11 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
     private SysFileService fileService;
     @Autowired
     private PmDemandMapper pmDemandMapper;
+    @Autowired
+    private IPmDemandService demandService;
 
     @Override
-    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo) {
+    public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) {
         List<PlanQuarter> list = new ArrayList<>();
         List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
@@ -111,6 +115,38 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
                     lw.le(PlanQuarter::getPlanDemandSubTime, vo.getEndTime());
                 }
                 lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+                // 添加数据权限
+                List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+                if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                    // 需求单位
+                    /*(purchase_dept_id = 当前用户deptID) */
+                    lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                        || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                    // 采购管理部门  或  采购办
+                    SysDept sysDept = new SysDept();
+                    sysDept.setParentId(loginUser.getDeptId());
+                    sysDept.setStatus("0");
+                    List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                            .stream()
+                            .map(SysDept::getDeptId)
+                            .collect(Collectors.toList());
+                    if (ObjectUtils.isEmpty(childDeptIds)) {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanQuarter::getIsExcess, 0);
+                            wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                        });
+                    } else {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanQuarter::getIsExcess, 0);
+                            wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                        })
+                                .or((wrapper) -> {
+                                    wrapper.eq(PlanQuarter::getIsExcess, 1);
+                                    wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds);
+                                });
+                    }
+                }
                 Page<PlanQuarter> page = planQuarterMapper.selectPage(new Page<>(num, size, false), lw);
                 list.addAll(page.getRecords());
                 size = page.getRecords().size();
@@ -124,7 +160,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
     }
 
     @Override
-    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo) {
+    public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) {
         List<PlanQuarter> list = new ArrayList<>();
         List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
         try {
@@ -153,6 +189,38 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
                     lw.le(PlanQuarter::getPlanDemandSubTime, vo.getEndTime());
                 }
                 lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+                // 添加数据权限
+                List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+                if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                    // 需求单位
+                    /*(purchase_dept_id = 当前用户deptID) */
+                    lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                        || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                    // 采购管理部门  或  采购办
+                    SysDept sysDept = new SysDept();
+                    sysDept.setParentId(loginUser.getDeptId());
+                    sysDept.setStatus("0");
+                    List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                            .stream()
+                            .map(SysDept::getDeptId)
+                            .collect(Collectors.toList());
+                    if (ObjectUtils.isEmpty(childDeptIds)) {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanQuarter::getIsExcess, 0);
+                            wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                        });
+                    } else {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanQuarter::getIsExcess, 0);
+                            wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
+                        })
+                                .or((wrapper) -> {
+                                    wrapper.eq(PlanQuarter::getIsExcess, 1);
+                                    wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds);
+                                });
+                    }
+                }
                 Page<PlanQuarter> page = planQuarterMapper.selectPage(new Page<PlanQuarter>(num, size, false), lw);
                 list.addAll(page.getRecords());
                 size = page.getRecords().size();
@@ -178,7 +246,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
             e.printStackTrace();
         }
         //判断是否为超额计划
-        quarters.setIsExcess(isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation()));
+        quarters.setIsExcess(deptService.isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation(), Long.valueOf(quarters.getPurchaseDeptId())));
         quarters.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
         quarters.setCreateTime(new Date());
         planQuarterMapper.insertPlanQuarter(quarters);
@@ -220,10 +288,10 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
         }
         SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(byId.getPurchaseDeptId())).get("sysDept");
         byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("red_id", byId.getPlanPracticalId());
-        map.put("type", SysFileRefEnum.PLAN_TEMPORARY.getType());
-        List<SysFileRef> fileRefs = sysFileRefMapper.selectByMap(map);
+        LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
+        lw.eq(SysFileRef::getRedId, quarterStandardVo.getPlanPracticalId());
+        lw.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_TEMPORARY.getType(), SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType()));
+        List<SysFileRef> fileRefs = sysFileRefMapper.selectList(lw);
         List<SysFileInfo> fileInfos = new ArrayList<>();
         BeanUtils.copyProperties(byId, responseVo);
         if (!ObjectUtils.isEmpty(fileRefs)) {
@@ -248,7 +316,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
         } catch (Exception e) {
             e.printStackTrace();
         }
-        quarters.setIsExcess(isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation()));
+        quarters.setIsExcess(deptService.isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation(), Long.valueOf(quarters.getPurchaseDeptId())));
         quarters.setUpdateTime(new Date());
         planQuarterMapper.updateInfoById(quarters);
         List<SysFileRef> sysFileRefs = quarterStandardVo.getSysFileRefs();
@@ -325,7 +393,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
                     }
                     planQuarter.setProjectAttr(builder.toString());
                     planQuarter.setPurchaseServices(purchaseServices.get(planQuarter.getPurchaseServices()));
-                    planQuarter.setIsExcess(isExcessOrNo(planQuarter.getProjectType(), planQuarter.getEvaluation()));
+                    planQuarter.setIsExcess(deptService.isExcessOrNo(planQuarter.getProjectType(), planQuarter.getEvaluation(), Long.valueOf(planQuarter.getPurchaseDeptId())));
                     planQuarter.setCreated(String.valueOf(loginUser.getUserId()));
                     planQuarter.setCreateTime(new Date());
                     planQuarterMapper.insertPlanQuarter(planQuarter);
@@ -384,18 +452,21 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
         demand.setProjectStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
         demand.setCreateTime(new Date());
         pmDemandMapper.insert(demand);
-        //计划附件也进行同步---查询年度计划附件后复制一份改为项目需求附件
+        demandService.updateDemandWarnStatus(demand.getDemandId());
+        //计划附件也进行同步---查询季度计划附件后复制一份改为项目需求附件
         LambdaQueryWrapper<SysFileRef> sysFileRefLp = new LambdaQueryWrapper<>();
-        sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_YEAR.getType());
-        sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanYearId());
+        sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_TEMPORARY.getType());
+        sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanPracticalId());
         List<SysFileRef> sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp);
         if (!ObjectUtils.isEmpty(sysFileRefs)) {
             for (SysFileRef ref : sysFileRefs) {
                 ref.setRedId(demand.getDemandId());
                 ref.setType(SysFileRefEnum.PM_DEMAND.getType());
+                ref.setId(null);
                 sysFileRefMapper.insert(ref);
             }
         }
+        //上传审核文件并赋予计划审核通过
         vo.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
         return review(vo);
     }
@@ -404,6 +475,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
     @Transactional
     public AjaxResult reviewReturn(PlanQuarterStandardVo vo) {
         vo.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
+        //上传审核文件并赋予计划审核退回
         return review(vo);
     }
 
@@ -412,7 +484,7 @@ public class PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQ
         if (!ObjectUtils.isEmpty(sysFileRefs)) {
             for (SysFileRef ref : sysFileRefs) {
                 ref.setRedId(vo.getPlanPracticalId());
-                ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
+                ref.setType(SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType());
                 ref.setCreated(vo.getUpdated());
                 ref.setCreateTime(new Date());
                 ref.setUpdated(vo.getUpdated());

+ 172 - 137
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -47,13 +47,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Validator;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -122,7 +121,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     private SysFileRefService sysFileRefService;
 
     @Override
-    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo) {
+    public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo, LoginUser loginUser) {
         List<PlanYears> list = new ArrayList<>();
         List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
@@ -149,6 +148,38 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime());
                 }
                 lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+                // 添加数据权限
+                List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+                if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                    // 需求单位
+                    /*(purchase_dept_id = 当前用户deptID) */
+                    lw.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                        || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                    // 采购管理部门  或  采购办
+                    SysDept sysDept = new SysDept();
+                    sysDept.setParentId(loginUser.getDeptId());
+                    sysDept.setStatus("0");
+                    List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                            .stream()
+                            .map(SysDept::getDeptId)
+                            .collect(Collectors.toList());
+                    if (ObjectUtils.isEmpty(childDeptIds)) {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanYears::getIsExcess, 0);
+                            wrapper.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                        });
+                    } else {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanYears::getIsExcess, 0);
+                            wrapper.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                        })
+                                .or((wrapper) -> {
+                                    wrapper.eq(PlanYears::getIsExcess, 1);
+                                    wrapper.in(PlanYears::getPurchaseDeptId, childDeptIds);
+                                });
+                    }
+                }
                 Page<PlanYears> page = planYearsMapper.selectPage(new Page<PlanYears>(num, size, false), lw);
                 list.addAll(page.getRecords());
                 size = page.getRecords().size();
@@ -162,7 +193,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     }
 
     @Override
-    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo) {
+    public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo, LoginUser loginUser) {
         List<PlanYears> list = new ArrayList<>();
         List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
         try {
@@ -191,6 +222,38 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime());
                 }
                 lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete);
+                // 添加数据权限
+                List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+                if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                    // 需求单位
+                    /*(purchase_dept_id = 当前用户deptID) */
+                    lw.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                        || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                    // 采购管理部门  或  采购办
+                    SysDept sysDept = new SysDept();
+                    sysDept.setParentId(loginUser.getDeptId());
+                    sysDept.setStatus("0");
+                    List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                            .stream()
+                            .map(SysDept::getDeptId)
+                            .collect(Collectors.toList());
+                    if (ObjectUtils.isEmpty(childDeptIds)) {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanYears::getIsExcess, 0);
+                            wrapper.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                        });
+                    } else {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(PlanYears::getIsExcess, 0);
+                            wrapper.eq(PlanYears::getPurchaseDeptId, loginUser.getDeptId());
+                        })
+                                .or((wrapper) -> {
+                                    wrapper.eq(PlanYears::getIsExcess, 1);
+                                    wrapper.in(PlanYears::getPurchaseDeptId, childDeptIds);
+                                });
+                    }
+                }
                 Page<PlanYears> page = planYearsMapper.selectPage(new Page<PlanYears>(num, size, false), lw);
                 list.addAll(page.getRecords());
                 size = page.getRecords().size();
@@ -216,7 +279,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
             e.printStackTrace();
         }
         //判断是否为超额计划
-        ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
+        ofYears.setIsExcess(deptService.isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation(), Long.valueOf(ofYears.getPurchaseDeptId())));
         ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
         ofYears.setCreateTime(new Date());
         planYearsMapper.insertPlanYears(ofYears);
@@ -259,10 +322,10 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         }
         SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(byId.getPurchaseDeptId())).get("sysDept");
         byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("red_id", byId.getPlanYearId());
-        map.put("type", SysFileRefEnum.PLAN_YEAR.getType());
-        List<SysFileRef> fileRefs = sysFileRefMapper.selectByMap(map);
+        LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
+        lw.eq(SysFileRef::getRedId, yearsStandardVo.getPlanYearId());
+        lw.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_YEAR.getType(), SysFileRefEnum.PLAN_YEAR_EXAMINE.getType()));
+        List<SysFileRef> fileRefs = sysFileRefMapper.selectList(lw);
         List<SysFileInfo> fileInfos = new ArrayList<>();
         BeanUtils.copyProperties(byId, responseVo);
         if (!ObjectUtils.isEmpty(fileRefs)) {
@@ -287,7 +350,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         } catch (Exception e) {
             e.printStackTrace();
         }
-        ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
+        ofYears.setIsExcess(deptService.isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation(), Long.valueOf(ofYears.getPurchaseDeptId())));
         ofYears.setUpdateTime(new Date());
         planYearsMapper.updateInfoById(ofYears);
         List<SysFileRef> sysFileRefs = yearsStandardVo.getSysFileRefs();
@@ -365,20 +428,12 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     }
                     ofYear.setProjectAttr(builder.toString());
                     ofYear.setPurchaseServices(purchaseServices.get(ofYear.getPurchaseServices()));
-                    ofYear.setIsExcess(isExcessOrNo(ofYear.getProjectType(), ofYear.getEvaluation()));
+                    ofYear.setIsExcess(deptService.isExcessOrNo(ofYear.getProjectType(), ofYear.getEvaluation(), Long.valueOf(ofYear.getPurchaseDeptId())));
                     ofYear.setCreated(String.valueOf(loginUser.getUserId()));
                     ofYear.setCreateTime(new Date());
                     planYearsMapper.insertPlanYears(ofYear);
                     successNum++;
                     successMsg.append("*" + successNum + "、项目 " + ofYear.getProjectName() + " 导入成功!");
-                    //} else if (isUpdateSupport) {
-                    //    PlanYears years = plan.get(0);
-                    //    BeanValidators.validateWithException(validator, ofYear);
-                    //    years.setCreateTime(new Date());
-                    //    years.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
-                    //    planYearsMapper.updateById(years);
-                    //    successNum++;
-                    //    successMsg.append("<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 更新成功");
                 } else {
                     failureNum++;
                     failureMsg.append(failureNum + "*项目 " + ofYear.getProjectName() + " 已存在!/n");
@@ -401,28 +456,6 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
 
     @Override
     public AjaxResult commit(PlanYearsStandardVo yearsStandardVo) {
-        //PlanYears byId = PlanYearsMapper.getById(yearsStandardVo.getPlanYearId());
-        //BigDecimal evaluation = byId.getEvaluation();
-        //BigDecimal threshold = new BigDecimal(0);
-        ////获取各个项目类型设定的概算金额阈值
-        //List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
-        //HashMap<String, String> thresholdMap = new LinkedHashMap<>();
-        ////各个类型的概算金额阈值
-        //for (SysDictData dictData : data) {
-        //    //    类型----阈值
-        //    thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
-        //}
-        ////项目类型
-        //for (ProjectTypes value : ProjectTypes.values()) {
-        //    if (byId.getProjectType().equals(value.getCode())) {
-        //        threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
-        //    }
-        //    break;
-        //}
-        //
-        //if (evaluation.compareTo(threshold) == 1) {
-        //    //是超额项目
-        //}
 
         int commit = planYearsMapper.commit(yearsStandardVo.getPlanYearId());
         if (commit != 1) {
@@ -435,7 +468,6 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
     @Transactional
     public AjaxResult reviewTo(PlanYearsStandardVo vo) {
         //年度计划审核通过后同步到季度计划和项目管理
-        PlanYears ofYears = new PlanYears();
         PlanQuarter quarters = new PlanQuarter();
         PmDemand demand = new PmDemand();
         PlanYears byId = planYearsMapper.getById(vo.getPlanYearId());
@@ -457,12 +489,20 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
             demand.setPurchaseDeptId(Long.valueOf(byId.getPurchaseDeptId()));
             demand.setCreateTime(new Date());
             pmDemandMapper.insert(demand);
-            //计划附件也进行同步---查询年度计划附件后复制一份改为项目需求附件
+            log.info("预警状态更新:demandID:{}", demand.getDemandId());
+            demandService.updateDemandWarnStatus(demand.getDemandId());
+            //计划附件进行同步---查询年度计划附件后分别添加项目需求附件和季度附件
             LambdaQueryWrapper<SysFileRef> sysFileRefLp = new LambdaQueryWrapper<>();
             sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_YEAR.getType());
             sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanYearId());
             List<SysFileRef> sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp);
             if (!ObjectUtils.isEmpty(sysFileRefs)) {
+                for (SysFileRef ref : sysFileRefs) {
+                    ref.setRedId(quarters.getPlanPracticalId());
+                    ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
+                    ref.setId(null);
+                    sysFileRefMapper.insert(ref);
+                }
                 for (SysFileRef ref : sysFileRefs) {
                     ref.setRedId(demand.getDemandId());
                     ref.setType(SysFileRefEnum.PM_DEMAND.getType());
@@ -553,6 +593,13 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
                 QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
+                queryWrapper.eq("delFlay", DataIsDelete.DataNOTDelete.getCode());
+                planYears = planYearsMapper.selectList(queryWrapper);
+            }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("delFlay", DataIsDelete.DataNOTDelete.getCode());
                 planYears = planYearsMapper.selectList(queryWrapper);
             }
         } catch (Exception e) {
@@ -566,24 +613,21 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PlanYears> planYears = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
-                List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PlanYears::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PlanYears::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PlanYears::getPurchaseDeptId, collect)
-                                .eq(PlanYears::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchaseDeptId", sysDept.getDeptId())
                         .in("project_status", ProjectStatus.PLANWAIEXAMINE.getCode(), ProjectStatus.PLANTOEXAMINE.getCode());
                 planYears = planYearsMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", ProjectStatus.PLANWAIEXAMINE.getCode(), ProjectStatus.PLANTOEXAMINE.getCode());
+                planYears = planYearsMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -595,7 +639,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
@@ -603,6 +647,11 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -614,24 +663,22 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
                 List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
-                                .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchaseDeptId", sysDept.getDeptId())
                         .in("project_status", PmProjectStatus.DEMAND_WAIT_AUDIT.getCode(), PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", PmProjectStatus.DEMAND_WAIT_AUDIT.getCode(), PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -643,7 +690,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
@@ -652,6 +699,12 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 queryWrapper.in("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode(), PmProjectStatus.UNDER_CONSTRUCTION.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode(), PmProjectStatus.UNDER_CONSTRUCTION.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -663,7 +716,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
@@ -672,6 +725,12 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 queryWrapper.in("project_status", PmProjectStatus.UNDER_CONSTRUCTION.getCode(), PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", PmProjectStatus.UNDER_CONSTRUCTION.getCode(), PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -683,21 +742,12 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
-                List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
-                                .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchase_dept_id", sysDept.getDeptId())
                         .in("project_status", PmProjectStatus.TASK_WAIT_RELEASE.getCode(),
                                 PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
                                 PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
@@ -708,6 +758,18 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                         );
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", PmProjectStatus.TASK_WAIT_RELEASE.getCode(),
+                        PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
+                        PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
+                        PmProjectStatus.WAIT_ANNOUNCEMENT.getCode(),
+                        PmProjectStatus.WAIT_OPEN_BID.getCode(),
+                        PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode(),
+                        PmProjectStatus.BIDDING_PUBLICITY.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -719,21 +781,12 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("procurement_office")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
-                List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
-                                .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchase_dept_id", sysDept.getDeptId())
                         .in("project_status",
                                 PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
                                 PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
@@ -744,6 +797,18 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                                 PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("project_status", PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
+                        PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
+                        PmProjectStatus.WAIT_ANNOUNCEMENT.getCode(),
+                        PmProjectStatus.WAIT_OPEN_BID.getCode(),
+                        PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode(),
+                        PmProjectStatus.BIDDING_PUBLICITY.getCode(),
+                        PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -755,24 +820,21 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("procurement_office")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
-                List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
-                                .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchase_dept_id", sysDept.getDeptId())
                         .lt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -784,24 +846,21 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         List<PmDemand> pmDemands = new ArrayList<>();
         try {
             List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
-            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
+            List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("procurement_office")).collect(Collectors.toList());
             if (sysRoleList.size() > 0) {
                 SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
                 SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
-                List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
-                List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-                if (collect.size() == 0) {
-                    collect.add(-1L);
-                }
                 QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
-                queryWrapper
-                        .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
-                                .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
-                        .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
-                                .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
+                queryWrapper.eq("purchase_dept_id", sysDept.getDeptId())
                         .gt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
                 pmDemands = pmDemandMapper.selectList(queryWrapper);
             }
+            List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("admin")).collect(Collectors.toList());
+            if (sysRoleList2.size() > 0) {
+                QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
+                queryWrapper.gt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
+                pmDemands = pmDemandMapper.selectList(queryWrapper);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -850,6 +909,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
             for (PmDemandResVo demandResVo : demandRes) {
                 HomeToDoQueryResVo home = new HomeToDoQueryResVo();
+                home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
                 BeanUtils.copyProperties(demandResVo, home);
                 homeRes.add(home);
             }
@@ -876,6 +936,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
             for (PmDemandResVo demandResVo : demandRes) {
                 HomeToDoQueryResVo home = new HomeToDoQueryResVo();
+                home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
                 BeanUtils.copyProperties(demandResVo, home);
                 homeRes.add(home);
             }
@@ -1206,32 +1267,6 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
         return quarterRes;
     }
 
-    //判断是否为超额计划
-    public String isExcessOrNo(String projectType, BigDecimal evaluation) {
-        BigDecimal threshold = new BigDecimal(0);
-        //获取各个项目类型设定的概算金额阈值
-        List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
-        HashMap<String, String> thresholdMap = new LinkedHashMap<>();
-        //各个类型的概算金额阈值
-        for (SysDictData dictData : data) {
-            //    类型----阈值
-            thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
-        }
-        //项目类型
-        for (ProjectTypes value : ProjectTypes.values()) {
-            if (projectType.equals(value.getCode())) {
-                threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
-            }
-            break;
-        }
-        if (evaluation.compareTo(threshold) == 1) {
-            //是超额计划
-            return ("1");
-        } else {
-            return ("0");
-        }
-    }
-
     //字段赋值对应的名称
     public List<PlanYearsResponseVo> changeTo(List<PlanYears> planYears) {
         //获取年度计划提报时间的阈值

+ 256 - 38
purchase-system/src/main/java/com/ozs/plan/service/impl/ProvisionalPlanServiceImpl.java

@@ -2,31 +2,36 @@ package com.ozs.plan.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.ozs.base.domain.BasePolicy;
+import com.ozs.common.constant.Constants;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.entity.SysDept;
 import com.ozs.common.core.domain.entity.SysDictData;
+import com.ozs.common.core.domain.entity.SysRole;
 import com.ozs.common.core.domain.model.LoginUser;
+import com.ozs.common.enums.DataIsDelete;
 import com.ozs.common.enums.PmProjectStatus;
 import com.ozs.common.enums.ProjectStatus;
 import com.ozs.common.enums.ProjectTypes;
 import com.ozs.common.enums.SysFileRefEnum;
 import com.ozs.common.exception.ServiceException;
+import com.ozs.common.utils.PageUtils;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.bean.BeanUtils;
-import com.ozs.plan.doman.PlanQuarter;
+import com.ozs.plan.doman.MonthlyReconciliation;
 import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.ProvisionalPlan;
-import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
 import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
 import com.ozs.plan.mapper.PlanYearsMapper;
 import com.ozs.plan.mapper.ProvisionalPlanMapper;
 import com.ozs.plan.service.ProvisionalPlanService;
 import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.mapper.PmDemandMapper;
+import com.ozs.pm.service.IPmDemandService;
 import com.ozs.system.domain.SysFileInfo;
 import com.ozs.system.domain.SysFileRef;
 import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
@@ -37,10 +42,14 @@ import com.ozs.system.service.ISysDictTypeService;
 import com.ozs.system.service.SysFileService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMapper, ProvisionalPlan> implements ProvisionalPlanService {
@@ -61,14 +70,34 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
     private SysFileService fileService;
     @Autowired
     private PmDemandMapper pmDemandMapper;
+    @Autowired
+    private IPmDemandService demandService;
 
     @Override
-    public int deleteProvisionalPlanById(Integer planPracticalId) {
+    public int deleteProvisionalPlanById(Long planPracticalId) {
         return provisionalPlanMapper.deleteProvisionalPlanById(planPracticalId);
     }
 
     @Override
+    @Transactional
     public int updateProvisionalPlanById(ProvisionalPlanVo provisionalPlan) {
+        List<SysFileRef> sysFileRefs = provisionalPlan.getSysFileRefs();
+        if (!ObjectUtils.isEmpty(sysFileRefs)) {
+            // 删关联
+            LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
+            lw.eq(SysFileRef::getRedId, provisionalPlan.getPlanPracticalId());
+            lw.eq(SysFileRef::getType, SysFileRefEnum.PLAN_TEMPORARY.getType());
+            sysFileRefMapper.delete(lw);
+            for (SysFileRef ref : sysFileRefs) {
+                ref.setRedId(provisionalPlan.getPlanPracticalId());
+                ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
+                ref.setCreated(provisionalPlan.getCreated());
+                ref.setCreateTime(new Date());
+                ref.setUpdated(provisionalPlan.getCreated());
+                ref.setUpdateTime(new Date());
+                sysFileRefMapper.insert(ref);
+            }
+        }
         return provisionalPlanMapper.updateProvisionalPlanById(provisionalPlan);
     }
 
@@ -105,14 +134,18 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
                     if (ofProvisionalPlan.getProjectAttr().contains(",")) {
                         String[] split = ofProvisionalPlan.getProjectAttr().split(",");
                         for (String s : split) {
-                            builder.append(projectAttributes.get(s) + ",");
+                            if (!ofProvisionalPlan.getProjectAttr().endsWith(s)) {
+                                builder.append(projectAttributes.get(s) + ",");
+                            } else {
+                                builder.append(projectAttributes.get(s));
+                            }
                         }
                     } else {
                         builder.append(projectAttributes.get(ofProvisionalPlan.getProjectAttr()));
                     }
                     ofProvisionalPlan.setProjectAttr(builder.toString());
-                    ofProvisionalPlan.setPurchaseServices(purchaseServices.get(ofProvisionalPlan.getPurchaseServices()));
-                    ofProvisionalPlan.setIsExcess(isExcessOrNo(ofProvisionalPlan.getProjectType(), ofProvisionalPlan.getEvaluation()));
+                    ofProvisionalPlan.setPurchaseServices(purchaseServices.get(ofProvisionalPlan.getPurchaseServicesStr()));
+                    ofProvisionalPlan.setIsExcess(deptService.isExcessOrNo(ofProvisionalPlan.getProjectType(), ofProvisionalPlan.getEvaluation(), info.getDeptId()));
                     ofProvisionalPlan.setCreated(String.valueOf(loginUser.getUserId()));
                     ofProvisionalPlan.setCreateTime(new Date());
                     ofProvisionalPlan.setPlanType("1");
@@ -140,7 +173,7 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
     }
 
     @Override
-    public List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo vo) {
+    public List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo vo, LoginUser loginUser) {
         List<ProvisionalPlan> list = new ArrayList<>();
         List<ProvisionalPlan> provisionalPlanList = new ArrayList<>();
         try {
@@ -148,6 +181,7 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
             int size = 200;
             while (size == 200) {
                 LambdaQueryWrapper<ProvisionalPlan> lw = new LambdaQueryWrapper<ProvisionalPlan>();
+                lw.eq(ProvisionalPlan::getPlanType, "1");
                 if (!ObjectUtils.isEmpty(vo.getProjectName())) {
                     lw.like(ProvisionalPlan::getProjectName, vo.getProjectName());
                 }
@@ -166,6 +200,38 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
                 if (!ObjectUtils.isEmpty(vo.getEndTime())) {
                     lw.le(ProvisionalPlan::getPlanDemandSubTime, vo.getEndTime());
                 }
+                // 添加数据权限
+                List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+                if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                    // 需求单位
+                    /*(purchase_dept_id = 当前用户deptID) */
+                    lw.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                        || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                    // 采购管理部门  或  采购办
+                    SysDept sysDept = new SysDept();
+                    sysDept.setParentId(loginUser.getDeptId());
+                    sysDept.setStatus("0");
+                    List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                            .stream()
+                            .map(SysDept::getDeptId)
+                            .collect(Collectors.toList());
+                    if (ObjectUtils.isEmpty(childDeptIds)) {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                            wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                        });
+                    } else {
+                        lw.and((wrapper) -> {
+                            wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                            wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                        })
+                                .or((wrapper) -> {
+                                    wrapper.eq(ProvisionalPlan::getIsExcess, 1);
+                                    wrapper.in(ProvisionalPlan::getPurchaseDeptId, childDeptIds);
+                                });
+                    }
+                }
                 Page<ProvisionalPlan> page = provisionalPlanMapper.selectPage(new Page<ProvisionalPlan>(num, size, false), lw);
                 list.addAll(page.getRecords());
                 size = page.getRecords().size();
@@ -184,17 +250,18 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
     }
 
     @Override
-    public AjaxResult seletById(Integer planPracticalId) {
+    public AjaxResult seletById(Long planPracticalId) {
         ProvisionalPlan provisionalPlan = provisionalPlanMapper.seletById(planPracticalId);
         if (StringUtils.isNull(provisionalPlan)) {
             return AjaxResult.error("数据查询失败");
         }
         // 转换字段中文
         ProvisionalPlan provisionalPlanC = changeToProvisionalPlan(provisionalPlan);
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("red_id", provisionalPlanC.getPlanPracticalId());
-        map.put("type", SysFileRefEnum.PLAN_TEMPORARY.getType());
-        List<SysFileRef> fileRefs = sysFileRefMapper.selectByMap(map);
+        LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
+        lw.eq(SysFileRef::getRedId, provisionalPlanC.getPlanPracticalId());
+        lw.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_TEMPORARY.getType(), SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType()));
+        List<SysFileRef> fileRefs = sysFileRefMapper.selectList(lw);
+
         List<SysFileInfo> fileInfos = new ArrayList<>();
         ProvisionalPlanVo provisionalPlanVo = new ProvisionalPlanVo();
         BeanUtils.copyProperties(provisionalPlanC, provisionalPlanVo);
@@ -208,32 +275,176 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
         return AjaxResult.success(provisionalPlanVo);
     }
 
+
     @Override
-    public PageInfo<ProvisionalPlan> selectProvisionalPlan(ProvisionalPlanVo provisionalPlanVo) {
-        List<ProvisionalPlan> provisionalPlanList = provisionalPlanMapper.selectProvisionalPlan(provisionalPlanVo);
-        provisionalPlanList = changeTo(provisionalPlanList);
-        PageHelper.startPage(provisionalPlanVo.getPageNum().intValue(), provisionalPlanVo.getPageSize().intValue());
-        PageInfo<ProvisionalPlan> pageInfo = new PageInfo<>(provisionalPlanList);
-        return pageInfo;
+    public AjaxResult selectProvisionalPlan(ProvisionalPlanVo vo, HttpServletRequest request, LoginUser loginUser) {
+        List<ProvisionalPlan> provisionalPlanList = new ArrayList<>();
+        try {
+            LambdaQueryWrapper<ProvisionalPlan> lw = new LambdaQueryWrapper<>();
+            lw.eq(ProvisionalPlan::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+            lw.eq(ProvisionalPlan::getPlanType, "1");
+            if (!ObjectUtils.isEmpty(vo.getProjectName())) {
+                lw.like(ProvisionalPlan::getProjectName, vo.getProjectName());
+            }
+            if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
+                lw.eq(ProvisionalPlan::getPurchaseServices, vo.getPurchaseServices());
+            }
+            if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
+                lw.eq(ProvisionalPlan::getIsExcess, vo.getIsExcess());
+            }
+            if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
+                lw.eq(ProvisionalPlan::getProjectStatus, vo.getProjectStatus());
+            }
+            if (!ObjectUtils.isEmpty(vo.getStartTime())) {
+                lw.ge(ProvisionalPlan::getPlanDemandSubTime, vo.getStartTime());
+            }
+            if (!ObjectUtils.isEmpty(vo.getEndTime())) {
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+                Date parse = dateFormatT.parse(dateFormat.format(vo.getEndTime()) + " 23:59:59:999");
+                lw.le(ProvisionalPlan::getPlanDemandSubTime, parse);
+            }
+
+            // 添加数据权限
+            List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+            if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                // 需求单位
+                /*(purchase_dept_id = 当前用户deptID) */
+                lw.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+            } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                    || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                // 采购管理部门  或  采购办
+                SysDept sysDept = new SysDept();
+                sysDept.setParentId(loginUser.getDeptId());
+                sysDept.setStatus("0");
+                List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                        .stream()
+                        .map(SysDept::getDeptId)
+                        .collect(Collectors.toList());
+                if (ObjectUtils.isEmpty(childDeptIds)) {
+                    lw.and((wrapper) -> {
+                        wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                        wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                    });
+                } else {
+                    lw.and((wrapper) -> {
+                        wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                        wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                    })
+                            .or((wrapper) -> {
+                                wrapper.eq(ProvisionalPlan::getIsExcess, 1);
+                                wrapper.in(ProvisionalPlan::getPurchaseDeptId, childDeptIds);
+                            });
+                }
+            }
+            lw.orderBy(true, false, ProvisionalPlan::getCreateTime);
+            List<ProvisionalPlan> list = provisionalPlanMapper.selectList(lw);
+            provisionalPlanList = changeTo(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Page pages = PageUtils.getPages(vo.getPageNum().intValue(), vo.getPageSize().intValue(), provisionalPlanList);
+        PageInfo<ProvisionalPlan> provisionalPlanPageInfo = new PageInfo<>();
+        if (!ObjectUtils.isEmpty(pages) && pages.getRecords().size() > 0) {
+            provisionalPlanPageInfo.setList(pages.getRecords());
+            provisionalPlanPageInfo.setSize(Math.toIntExact(pages.getSize()));
+            provisionalPlanPageInfo.setPageNum(Math.toIntExact(pages.getCurrent()));
+            provisionalPlanPageInfo.setTotal(pages.getTotal());
+            provisionalPlanPageInfo.setPages(Integer.parseInt(pages.getPages() + ""));
+        }
+        return AjaxResult.success(provisionalPlanPageInfo);
     }
 
     @Override
-    public PageInfo<ProvisionalPlan> selectProvisionalPlanAudit(ProvisionalPlanVo provisionalPlanVo) {
-        List<ProvisionalPlan> provisionalPlanList = provisionalPlanMapper.selectProvisionalPlanAudit(provisionalPlanVo);
-        provisionalPlanList = changeTo(provisionalPlanList);
-        PageHelper.startPage(provisionalPlanVo.getPageNum().intValue(), provisionalPlanVo.getPageSize().intValue());
-        PageInfo<ProvisionalPlan> pageInfo = new PageInfo<>(provisionalPlanList);
-        return pageInfo;
+    public AjaxResult selectProvisionalPlanAudit(ProvisionalPlanVo vo, HttpServletRequest request, LoginUser loginUser) {
+        List<ProvisionalPlan> provisionalPlanList = new ArrayList<>();
+        try {
+            LambdaQueryWrapper<ProvisionalPlan> lw = new LambdaQueryWrapper<>();
+            lw.eq(ProvisionalPlan::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
+            lw.eq(ProvisionalPlan::getPlanType, "1");
+            if (!ObjectUtils.isEmpty(vo.getProjectName())) {
+                lw.like(ProvisionalPlan::getProjectName, vo.getProjectName());
+            }
+            if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
+                lw.eq(ProvisionalPlan::getPurchaseServices, vo.getPurchaseServices());
+            }
+            if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
+                lw.eq(ProvisionalPlan::getIsExcess, vo.getIsExcess());
+            }
+            if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
+                lw.eq(ProvisionalPlan::getProjectStatus, vo.getProjectStatus());
+            } else {
+                lw.apply("  project_status IN (1,3)", "");
+            }
+            if (!ObjectUtils.isEmpty(vo.getStartTime())) {
+                lw.ge(ProvisionalPlan::getPlanDemandSubTime, vo.getStartTime());
+            }
+            if (!ObjectUtils.isEmpty(vo.getEndTime())) {
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+                Date parse = dateFormatT.parse(dateFormat.format(vo.getEndTime()) + " 23:59:59:999");
+                lw.le(ProvisionalPlan::getPlanDemandSubTime, parse);
+            }
+            // 添加数据权限
+            List<String> roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList());
+            if (roleKeys.contains(Constants.DEMAND_UNIT)) {
+                // 需求单位
+                /*(purchase_dept_id = 当前用户deptID) */
+                lw.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+            } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT)
+                    || roleKeys.contains(Constants.PURCHASE_SERVICES)) {
+                // 采购管理部门  或  采购办
+                SysDept sysDept = new SysDept();
+                sysDept.setParentId(loginUser.getDeptId());
+                sysDept.setStatus("0");
+                List<Long> childDeptIds = deptService.selectDeptList(sysDept)
+                        .stream()
+                        .map(SysDept::getDeptId)
+                        .collect(Collectors.toList());
+                if (ObjectUtils.isEmpty(childDeptIds)) {
+                    lw.and((wrapper) -> {
+                        wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                        wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                    });
+                } else {
+                    lw.and((wrapper) -> {
+                        wrapper.eq(ProvisionalPlan::getIsExcess, 0);
+                        wrapper.eq(ProvisionalPlan::getPurchaseDeptId, loginUser.getDeptId());
+                    })
+                            .or((wrapper) -> {
+                                wrapper.eq(ProvisionalPlan::getIsExcess, 1);
+                                wrapper.in(ProvisionalPlan::getPurchaseDeptId, childDeptIds);
+                            });
+                }
+            }
+            lw.orderBy(true, false, ProvisionalPlan::getCreateTime);
+            List<ProvisionalPlan> list = provisionalPlanMapper.selectList(lw);
+            provisionalPlanList = changeTo(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Page pages = PageUtils.getPages(vo.getPageNum().intValue(), vo.getPageSize().intValue(), provisionalPlanList);
+        PageInfo<ProvisionalPlan> provisionalPlanPageInfo = new PageInfo<>();
+        if (!ObjectUtils.isEmpty(pages) && pages.getRecords().size() > 0) {
+            provisionalPlanPageInfo.setList(pages.getRecords());
+            provisionalPlanPageInfo.setSize(Math.toIntExact(pages.getSize()));
+            provisionalPlanPageInfo.setPageNum(Math.toIntExact(pages.getCurrent()));
+            provisionalPlanPageInfo.setTotal(pages.getTotal());
+            provisionalPlanPageInfo.setPages(Integer.parseInt(pages.getPages() + ""));
+        }
+        return AjaxResult.success(provisionalPlanPageInfo);
     }
 
     @Override
+    @Transactional
     public AjaxResult auditPass(ProvisionalPlanVo provisionalPlanVo) {
         ProvisionalPlan byId = provisionalPlanMapper.seletById(provisionalPlanVo.getPlanPracticalId());
         if (ObjectUtils.isEmpty(byId.getPlanYearId())) {
             PlanYears ofYears = new PlanYears();
             BeanUtils.copyProperties(byId, ofYears);
+            ofYears.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
             planYearsMapper.insertPlanYears(ofYears);
-            byId.setPlanYearId(ofYears.getPlanYearId().intValue());
+            byId.setPlanYearId(ofYears.getPlanYearId());
         }
         PmDemand demand = new PmDemand();
         BeanUtils.copyProperties(byId, demand);
@@ -241,38 +452,45 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
         demand.setEvaluation(byId.getEvaluation().doubleValue());
         //同步到项目管理状态为需求待填制
         demand.setProjectStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
+        demand.setPurchaseDeptId(Long.parseLong(byId.getPurchaseDeptId()));
         demand.setCreateTime(new Date());
+        demand.setCreateBy(provisionalPlanVo.getUpdated());
+        demand.setUpdateTime(demand.getCreateTime());
+        demand.setUpdateBy(demand.getCreateBy());
+        demand.setIsExcess(Integer.parseInt(byId.getIsExcess()));
         pmDemandMapper.insert(demand);
-        //计划附件也进行同步---查询年度计划附件后复制一份改为项目需求附件
+        demandService.updateDemandWarnStatus(demand.getDemandId());
+        //计划附件也进行同步---查询临时计划附件后复制一份改为项目需求附件
         LambdaQueryWrapper<SysFileRef> sysFileRefLp = new LambdaQueryWrapper<>();
-        sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_YEAR.getType());
-        sysFileRefLp.eq(SysFileRef::getRedId, byId.getPlanYearId());
+        sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_TEMPORARY.getType());
+        sysFileRefLp.eq(SysFileRef::getRedId, byId.getPlanPracticalId());
         List<SysFileRef> sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp);
         if (!ObjectUtils.isEmpty(sysFileRefs)) {
             for (SysFileRef ref : sysFileRefs) {
                 ref.setRedId(demand.getDemandId());
                 ref.setType(SysFileRefEnum.PM_DEMAND.getType());
+                ref.setId(null);
                 sysFileRefMapper.insert(ref);
             }
         }
-        byId.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
-        return review(provisionalPlanVo, byId);
+        provisionalPlanVo.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
+        //上传审核文件并赋予计划审核通过
+        return review(provisionalPlanVo);
     }
 
     @Override
     public AjaxResult auditNoPass(ProvisionalPlanVo provisionalPlanVo) {
-        ProvisionalPlan provisionalPlan = new ProvisionalPlan();
-        BeanUtils.copyProperties(provisionalPlanVo, provisionalPlan);
-        provisionalPlan.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
-        return review(provisionalPlanVo, provisionalPlan);
+        provisionalPlanVo.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
+        //上传审核文件并赋予计划审核退回
+        return review(provisionalPlanVo);
     }
 
-    private AjaxResult review(ProvisionalPlanVo vo, ProvisionalPlan provisionalPlan) {
+    private AjaxResult review(ProvisionalPlanVo vo) {
         List<SysFileRef> sysFileRefs = vo.getSysFileRefs();
         if (!ObjectUtils.isEmpty(sysFileRefs)) {
             for (SysFileRef ref : sysFileRefs) {
                 ref.setRedId(vo.getPlanPracticalId().longValue());
-                ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
+                ref.setType(SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType());
                 ref.setCreated(vo.getUpdated());
                 ref.setCreateTime(new Date());
                 ref.setUpdated(vo.getUpdated());
@@ -280,7 +498,7 @@ public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMappe
                 sysFileRefMapper.insert(ref);
             }
         }
-        int review = provisionalPlanMapper.review(provisionalPlan);
+        int review = provisionalPlanMapper.review(vo);
         if (review != 1) {
             return AjaxResult.error("项目状态数据异常");
         }

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmBidFailure.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -59,6 +60,7 @@ public class PmBidFailure implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -68,6 +70,7 @@ public class PmBidFailure implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 2 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmBidOpening.java

@@ -64,6 +64,7 @@ public class PmBidOpening implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -73,6 +74,7 @@ public class PmBidOpening implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmBidWinning.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -67,6 +68,7 @@ public class PmBidWinning implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -77,6 +79,7 @@ public class PmBidWinning implements Serializable {
 
     @ApiModelProperty("更新时间")
     @TableField("UPDATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmBidWinningOpeningRef.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -57,6 +58,7 @@ public class PmBidWinningOpeningRef implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -66,6 +68,7 @@ public class PmBidWinningOpeningRef implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmBookBuilding.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -63,6 +64,7 @@ public class PmBookBuilding implements Serializable {
 
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("CREATE_TIME")
     private Date createTime;
 
@@ -73,6 +75,7 @@ public class PmBookBuilding implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmContractInfo.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -74,6 +75,7 @@ public class PmContractInfo implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -83,6 +85,7 @@ public class PmContractInfo implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmDemand.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 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 io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -174,6 +175,7 @@ public class PmDemand implements Serializable {
 
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("CREATE_TIME")
     private Date createTime;
 
@@ -184,6 +186,7 @@ public class PmDemand implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 }

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmDemandExpertRef.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -57,6 +58,7 @@ public class PmDemandExpertRef implements Serializable {
 
     @ApiModelProperty("创建时间")
     @TableField("CREATE_TIME")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
 
@@ -66,6 +68,7 @@ public class PmDemandExpertRef implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmFlowChart.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -59,6 +60,7 @@ public class PmFlowChart implements Serializable {
 
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("CREATE_TIME")
     private Date createTime;
 
@@ -69,6 +71,7 @@ public class PmFlowChart implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmProjectConstruction.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -68,6 +69,7 @@ public class PmProjectConstruction implements Serializable {
 
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("CREATE_TIME")
     private Date createTime;
 
@@ -78,6 +80,7 @@ public class PmProjectConstruction implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

+ 3 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmReleaseAnnouncement.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -79,6 +80,7 @@ public class PmReleaseAnnouncement implements Serializable {
 
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("CREATE_TIME")
     private Date createTime;
 
@@ -89,6 +91,7 @@ public class PmReleaseAnnouncement implements Serializable {
 
 
     @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField("UPDATE_TIME")
     private Date updateTime;
 

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

@@ -224,7 +224,7 @@ public class PmDemandResVo extends BaseEntity
      * 采购需求的已上传的关联附件信息
      */
     @ApiModelProperty("采购需求的已上传的关联附件信息")
-    private List<SysFileInfo>demandFileInfos;
+    private List<SysFileInfo> demandFileInfos;
 
 
     /**

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

@@ -76,6 +76,13 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      */
     List<StatisticalChartsResVo> countByProjectAttr();
 
+    /**
+     * 按照采购方式统计所有的项目
+     *
+     * @return
+     */
+    List<StatisticalChartsResVo> countByPurchaseMode();
+
     /**
      * 按照概算金额统计所有的项目
      *
@@ -113,7 +120,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      *
      * @return
      */
-    LinkedList<StatisticalChartsResVo> countProjectExceedMonth();
+    StatisticalChartsResVo countProjectExceedMonth(@Param("month") Integer month, @Param("year") Integer year);
 
     /**
      * 统计不同时间维度的逾期项目
@@ -163,13 +170,15 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 通过计划ID查询项目
+     *
      * @param planId
      * @return
      */
-    PmDemand selectByPlanId(@Param("planId") Integer planId);
+    PmDemand selectByPlanId(@Param("planId") Long planId);
 
     /**
      * 项目执行进度统计--正常推进项目数量、预算金额
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -177,6 +186,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 项目执行进度统计--未完成采购任务,预算金额
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -184,12 +194,14 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 查询数据库年份最小值
+     *
      * @return
      */
     Integer selectMinYear();
 
     /**
      * 已完成项目数量统计 -- 年份
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -197,6 +209,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 已完成项目数量统计 -- 季度
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -204,11 +217,36 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 已完成项目数量统计 -- 月份
+     *
      * @param pmDemandReqVo
      * @return
      */
     List<Map<String, Integer>> selectpurchaseProjectCompleteNumberMonth(PmDemandReqVo pmDemandReqVo);
 
+    /**
+     * 已完成采购任务数量统计 -- 年份
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<Map<String, Integer>> selectPurchaseTaskFinishYear(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 已完成采购任务数量统计 -- 季度
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<Map<String, Integer>> selectPurchaseTaskFinishQuarter(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 已完成采购任务数量统计 -- 月份
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<Map<String, Integer>> selectPurchaseTaskFinishMonth(PmDemandReqVo pmDemandReqVo);
+
     List<StatisticalChartsResVo> countProjectMajorByYear();
 
     StatisticalChartsResVo countProjectMajorByQuarter(@Param("quarter") Integer quarter, @Param("year") Integer year);
@@ -223,6 +261,7 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 各阶段项目数量分布
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -230,18 +269,23 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
 
     /**
      * 项目数量分析--年
+     *
      * @param pmDemandReqVo
      * @return
      */
     List<Map<String, String>> purchaseProjectNumberAnalysisYear(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 项目数量分析--季度
+     *
      * @param pmDemandReqVo
      * @return
      */
     List<Map<String, String>> purchaseProjectNumberAnalysisQuarter(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 项目数量分析--月份
+     *
      * @param pmDemandReqVo
      * @return
      */

+ 28 - 8
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -116,6 +116,14 @@ public interface IPmDemandService extends IService<PmDemand> {
 
     boolean insertProjectConstruction(PmProjectConstructionReqVo pmProjectConstructionReqVo) throws Exception;
 
+    /**
+     * 更新需求预警状态
+     *
+     * @param demnadId
+     * @return
+     */
+    void updateDemandWarnStatus(Long demnadId);
+
     /**
      * 通过需求ID列表 查询采购执行列表 sunhh
      *
@@ -232,6 +240,14 @@ public interface IPmDemandService extends IService<PmDemand> {
      */
     List<StatisticalChartsResVo> countByProjectAttr();
 
+    /**
+     * 统计分析-按照采购方式统计所有的项目
+     *
+     * @param
+     * @return
+     */
+    List<StatisticalChartsResVo> countByPurchaseMode();
+
     /**
      * 统计分析-按照概算金额统计所有的项目
      *
@@ -275,13 +291,6 @@ public interface IPmDemandService extends IService<PmDemand> {
      */
     AjaxResult taskQuantityAnalysis(PmDemandReqVo pmDemandReqVo);
 
-    /**
-     * 新完成采购任务数量
-     *
-     * @return
-     */
-    AjaxResult newFinishPro();
-
     /**
      * 各阶段采购任务数量分布
      *
@@ -291,10 +300,11 @@ public interface IPmDemandService extends IService<PmDemand> {
 
     /**
      * 通过计划ID查询项目
+     *
      * @param planId
      * @return
      */
-    PmDemand selectByPlanId(Integer planId);
+    PmDemand selectByPlanId(Long planId);
 
     /**
      * 采购项目--项目数量分析
@@ -312,13 +322,23 @@ public interface IPmDemandService extends IService<PmDemand> {
 
     /**
      * 已完成项目数量统计
+     *
      * @param pmDemandReqVo
      * @return
      */
     List<Map<String, Integer>> purchaseProjectCompleteNumber(PmDemandReqVo pmDemandReqVo);
 
+    /**
+     * 已完成采购任务数量统计
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    List<Map<String, Integer>> purchaseTaskFinish(PmDemandReqVo pmDemandReqVo);
+
     /**
      * 各阶段项目数量分布
+     *
      * @param pmDemandReqVo
      * @return
      */

+ 201 - 76
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ozs.pm.service.impl;
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.util.*;
@@ -16,6 +17,7 @@ import com.ozs.base.domain.vo.BaseExpertVo;
 import com.ozs.base.service.*;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.entity.SysDept;
+import com.ozs.common.core.domain.entity.SysDictData;
 import com.ozs.common.core.domain.entity.SysRole;
 import com.ozs.common.core.domain.entity.SysUser;
 import com.ozs.common.enums.*;
@@ -41,6 +43,7 @@ import com.ozs.system.mapper.SysDeptMapper;
 import com.ozs.system.mapper.SysRoleMapper;
 import com.ozs.system.service.*;
 import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -55,6 +58,7 @@ import org.springframework.util.ObjectUtils;
  * @date 2023-01-16
  */
 @Service
+@Slf4j
 public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> implements IPmDemandService {
 
     @Autowired
@@ -84,8 +88,8 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     @Autowired
     private PmBidWinningService pmBidWinningService;
-
-
+    @Autowired
+    private ISysDictTypeService iSysDictTypeService;
     @Autowired
     private PmBidFailureService pmBidFailureService;
     @Autowired
@@ -131,6 +135,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         PmDemand pmDemand = this.getById(demandId);
         if (pmDemand != null) {
             PmDemandResVo vo = new PmDemandResVo();
+            vo.setProjectName(pmDemand.getProjectName());
             vo.setDemandId(demandId);
             if ("1".equals(detailType)) { //项目计划
 
@@ -261,18 +266,18 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 //中标信息列表
                 LambdaQueryWrapper<PmBidWinning> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
                 lambdaQueryWrapper1.eq(PmBidWinning::getDemandId, demandId)
-                        .eq(PmBidWinning::getStatus,BidWinningStatus.NORMAL.getCode());
+                        .eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
                 PmBidWinning pmBidWinning = this.pmBidWinningService.getOne(lambdaQueryWrapper1);
                 if (!ObjectUtils.isEmpty(pmBidWinning)) {
                     LambdaQueryWrapper<PmBidWinningOpeningRef> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
-                    lambdaQueryWrapper2.eq(PmBidWinningOpeningRef::getWinningId,pmBidWinning.getId())
-                            .eq(PmBidWinningOpeningRef::getStatus,BidWinningStatus.NORMAL.getCode());
+                    lambdaQueryWrapper2.eq(PmBidWinningOpeningRef::getWinningId, pmBidWinning.getId())
+                            .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
                     List<PmBidWinningOpeningRef> pmBidWinningOpeningRefList = this.pmBidWinningOpeningRefService.list(lambdaQueryWrapper2);
-                    if(!ObjectUtils.isEmpty(pmBidWinningOpeningRefList)){
+                    if (!ObjectUtils.isEmpty(pmBidWinningOpeningRefList)) {
                         List<PmBidWinningResVo> pmBidWinningResVoList = new ArrayList<>();
                         for (PmBidWinningOpeningRef pmBidWinningOpeningRef : pmBidWinningOpeningRefList) {
                             PmBidOpening pmBidOpening = this.pmBidOpeningService.getById(pmBidWinningOpeningRef.getOpeningId());
-                            if(pmBidOpening != null){
+                            if (pmBidOpening != null) {
                                 PmBidWinningResVo pmBidWinningResVo = new PmBidWinningResVo();
                                 BeanUtils.copyProperties(pmBidWinning, pmBidWinningResVo);
                                 pmBidWinningResVo.setBidWinningName(pmBidOpening.getBidderName());
@@ -381,7 +386,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         //获取属于求单位管理员的列表
         List<SysRole> sysRoleList2 = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals(SysRoleKey.DEMAND_UNIT.getCode())).collect(Collectors.toList());
         if (!ObjectUtils.isEmpty(sysRoleList2)) { //属于需求单位管理员
-            lw.apply("(purchase_dept_id = " + deptId + ")" ) ;
+            lw.apply("(purchase_dept_id = " + deptId + ")");
         } else {
             //获取属于采购管理部门管理员 或 采购办管理员的列表
             List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> (tdto.getRoleKey().equals(SysRoleKey.PURCHASING_MANAGEMENT.getCode())
@@ -390,18 +395,18 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 //获取子部门列表
                 List<SysDept> sysDeptSubs = deptMapper.selectChildrenDeptById(sysUser.getDeptId());
                 String sysDeptSubStr = null;
-                if(!ObjectUtils.isEmpty(sysDeptSubs)){
+                if (!ObjectUtils.isEmpty(sysDeptSubs)) {
                     List<String> sysDeptSubIds = sysDeptSubs.stream().map(SysDept::getDeptId).collect(Collectors.toList())
                             .stream().map(x -> x + "").collect(Collectors.toList());
                     sysDeptSubStr = String.join(",", sysDeptSubIds);
                 }
 
-                String condtionSql= null;
-                if(ObjectUtils.isEmpty(sysDeptSubStr)){
+                String condtionSql = null;
+                if (ObjectUtils.isEmpty(sysDeptSubStr)) {
                     condtionSql = "(purchase_dept_id = " + deptId + " AND is_excess = 0) ";
                 } else {
                     condtionSql = "((purchase_dept_id = " + deptId + " AND is_excess = 0) " +
-                            " OR (purchase_dept_id IN ("+ sysDeptSubStr +")  AND is_excess = 1))";
+                            " OR (purchase_dept_id IN (" + sysDeptSubStr + ")  AND is_excess = 1))";
                 }
 
                 lw.apply(condtionSql);
@@ -415,13 +420,13 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         if (!StringUtils.isBlank(pmDemandReqVo.getPurchaseServices())) {
             lw.eq(PmDemand::getPurchaseServices, pmDemandReqVo.getPurchaseServices());
         }
-        if (!ObjectUtils.isEmpty(pmDemandReqVo.getProjectStatus() )) {
+        if (!ObjectUtils.isEmpty(pmDemandReqVo.getProjectStatus())) {
             lw.eq(PmDemand::getProjectStatus, pmDemandReqVo.getProjectStatus());
         }
-        if (!ObjectUtils.isEmpty(pmDemandReqVo.getWarnStatus() )) {
+        if (!ObjectUtils.isEmpty(pmDemandReqVo.getWarnStatus())) {
             lw.eq(PmDemand::getWarnStatus, pmDemandReqVo.getWarnStatus());
         }
-        if (!ObjectUtils.isEmpty(pmDemandReqVo.getIsExcess() )) {
+        if (!ObjectUtils.isEmpty(pmDemandReqVo.getIsExcess())) {
             lw.eq(PmDemand::getIsExcess, pmDemandReqVo.getIsExcess());
         }
         if (!StringUtils.isBlank(pmDemandReqVo.getBeginDate())) {
@@ -443,6 +448,8 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             lw.apply("(project_status = 16 or project_status = 17 )");
         }
 
+        lw.last(" order by project_status, plan_demand_sub_time");
+
         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) {
@@ -742,13 +749,13 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Transactional(rollbackFor = Exception.class)
     public boolean reviewReturn(PmDemandReqVo pmDemandReqVo) {
         UpdateWrapper<PmDemand> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().eq(PmDemand::getDemandId,pmDemandReqVo.getDemandId())
-                .set(PmDemand::getProjectStatus,PmProjectStatus.DEMAND_AUDIT_RETURN.getCode())
-                .set(PmDemand::getAdjustReason,pmDemandReqVo.getRefuseReason())
-                .set(PmDemand::getRealDemandCommitTime,null)
-                .set(PmDemand::getUpdateBy,pmDemandReqVo.getUpdateBy())
-                .set(PmDemand::getUpdateTime,DateUtils.getNowDate())
-                .set(PmDemand::getAuditTime,DateUtils.getNowDate());
+        updateWrapper.lambda().eq(PmDemand::getDemandId, pmDemandReqVo.getDemandId())
+                .set(PmDemand::getProjectStatus, PmProjectStatus.DEMAND_AUDIT_RETURN.getCode())
+                .set(PmDemand::getAdjustReason, pmDemandReqVo.getRefuseReason())
+                .set(PmDemand::getRealDemandCommitTime, null)
+                .set(PmDemand::getUpdateBy, pmDemandReqVo.getUpdateBy())
+                .set(PmDemand::getUpdateTime, DateUtils.getNowDate())
+                .set(PmDemand::getAuditTime, DateUtils.getNowDate());
 
         return this.update(updateWrapper);
     }
@@ -838,6 +845,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 if (baseNoticeType == null) {
                     throw new Exception("招标公告 公告类型不存在");
                 }
+                baseNotice.setDemandId(pmDemand.getDemandId());
+                baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
+                baseNotice.setIsExcess(pmDemand.getIsExcess());
                 baseNotice.setType(baseNoticeType.getId());
                 baseNotice.setReleaseTime(pmReleaseAnnouncement.getReleaseTime());
                 return this.baseNoticeService.saveOrUpdate(baseNotice);
@@ -1116,6 +1126,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     /**
      * 填写中标
+     *
      * @param pmBidWinningReqVo
      * @return
      * @throws Exception
@@ -1138,22 +1149,22 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         BeanUtils.copyProperties(pmBidWinningReqVo, pmBidWinning);
 
         //修改老的中标信息状态
-        if(ObjectUtils.isEmpty(pmBidWinningReqVo.getId())){ //属于新增
+        if (ObjectUtils.isEmpty(pmBidWinningReqVo.getId())) { //属于新增
             LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId,pmBidWinningReqVo.getDemandId())
-                    .eq(PmBidWinning::getStatus,BidWinningStatus.NORMAL.getCode());
+            pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId, pmBidWinningReqVo.getDemandId())
+                    .eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
             List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(pmBidWinningLambdaQueryWrapper);
-            if(!ObjectUtils.isEmpty(pmBidWinninglist)){
-                for(PmBidWinning item : pmBidWinninglist) {
+            if (!ObjectUtils.isEmpty(pmBidWinninglist)) {
+                for (PmBidWinning item : pmBidWinninglist) {
                     UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
-                    updateWrapper1.lambda().set(PmBidWinning::getStatus,BidWinningStatus.BE_REPLACED.getCode())
-                            .eq(PmBidWinning::getId,item.getId());
+                    updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_REPLACED.getCode())
+                            .eq(PmBidWinning::getId, item.getId());
                     pmBidWinningService.update(updateWrapper1);
 
                     UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
-                    updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus,BidWinningStatus.BE_REPLACED.getCode())
-                            .eq(PmBidWinningOpeningRef::getWinningId,item.getId())
-                            .eq(PmBidWinningOpeningRef::getStatus,BidWinningStatus.NORMAL.getCode());
+                    updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_REPLACED.getCode())
+                            .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
+                            .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
                     pmBidWinningOpeningRefService.update(updateWrapper2);
                 }
             }
@@ -1193,9 +1204,12 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 if (baseNoticeType == null) {
                     throw new Exception("中标公告 公告类型不存在");
                 }
+                baseNotice.setDemandId(pmDemand.getDemandId());
+                baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
+                baseNotice.setIsExcess(pmDemand.getIsExcess());
                 baseNotice.setType(baseNoticeType.getId());
                 baseNotice.setReleaseTime(pmBidWinningReqVo.getBidAnnouncementTime());
-                 this.baseNoticeService.saveOrUpdate(baseNotice);
+                this.baseNoticeService.saveOrUpdate(baseNotice);
 
                 PmDemand pmDemandUpdate = new PmDemand();
                 pmDemandUpdate.setDemandId(pmBidWinningReqVo.getDemandId());
@@ -1228,28 +1242,28 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         }
 
         LambdaQueryWrapper<PmBidWinning> lw = new LambdaQueryWrapper<>();
-        lw.eq(PmBidWinning::getDemandId, pmBidWinningReqVo.getDemandId()).eq(PmBidWinning::getStatus,BidWinningStatus.NORMAL.getCode());
+        lw.eq(PmBidWinning::getDemandId, pmBidWinningReqVo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
         List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(lw);
         if (ObjectUtils.isEmpty(pmBidWinninglist)) {
             throw new Exception("原中标信息不存在");
         }
         //修改老的状态
-        for(PmBidWinning item : pmBidWinninglist) {
+        for (PmBidWinning item : pmBidWinninglist) {
             UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
-            updateWrapper1.lambda().set(PmBidWinning::getStatus,BidWinningStatus.BE_REPLACED.getCode())
-                    .eq(PmBidWinning::getId,item.getId());
+            updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_REPLACED.getCode())
+                    .eq(PmBidWinning::getId, item.getId());
             pmBidWinningService.update(updateWrapper1);
 
             UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
-            updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus,BidWinningStatus.BE_REPLACED.getCode())
-                    .eq(PmBidWinningOpeningRef::getWinningId,item.getId())
-                    .eq(PmBidWinningOpeningRef::getStatus,BidWinningStatus.NORMAL.getCode());
+            updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_REPLACED.getCode())
+                    .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
+                    .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
             pmBidWinningOpeningRefService.update(updateWrapper2);
         }
 
         //新增
         PmBidWinning pmBidWinning = new PmBidWinning();
-        BeanUtils.copyProperties(pmBidWinninglist.get(0),pmBidWinning);
+        BeanUtils.copyProperties(pmBidWinninglist.get(0), pmBidWinning);
         pmBidWinning.setId(null);
         pmBidWinning.setBidWinningAmount(pmBidWinningReqVo.getBidWinningAmount());
         pmBidWinning.setStatus(BidWinningStatus.NORMAL.getCode());
@@ -1270,8 +1284,8 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 pmBidWinningOpeningRefList.add(pmBidWinningOpeningRef);
             }
             LambdaQueryWrapper<SysFileRef> sysFileRefLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            sysFileRefLambdaQueryWrapper.eq(SysFileRef::getType,SysFileRefEnum.PM_BID_WINNING_FILE.getType())
-                    .eq(SysFileRef::getRedId,pmBidWinninglist.get(0));
+            sysFileRefLambdaQueryWrapper.eq(SysFileRef::getType, SysFileRefEnum.PM_BID_WINNING_FILE.getType())
+                    .eq(SysFileRef::getRedId, pmBidWinninglist.get(0));
             List<SysFileRef> sysFileRefs = sysFileRefService.list(sysFileRefLambdaQueryWrapper);
             uploadFile(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType(), sysFileRefs, pmBidWinningReqVo.getUpdateBy());
 
@@ -1283,6 +1297,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     /**
      * 流标
+     *
      * @param pmBidFailureReqVo
      * @return
      * @throws Exception
@@ -1295,19 +1310,19 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         if (pmBidFailureService.saveOrUpdate(pmBidFailure)) {
             //把中标信息修改状态
             LambdaQueryWrapper<PmBidWinning> lw = new LambdaQueryWrapper<>();
-            lw.eq(PmBidWinning::getDemandId, pmBidFailureReqVo.getDemandId()).eq(PmBidWinning::getStatus,BidWinningStatus.NORMAL.getCode());
+            lw.eq(PmBidWinning::getDemandId, pmBidFailureReqVo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode());
             List<PmBidWinning> pmBidWinninglist = pmBidWinningService.list(lw);
             if (!ObjectUtils.isEmpty(pmBidWinninglist)) {
-                for(PmBidWinning item : pmBidWinninglist) {
+                for (PmBidWinning item : pmBidWinninglist) {
                     UpdateWrapper<PmBidWinning> updateWrapper1 = new UpdateWrapper<>();
-                    updateWrapper1.lambda().set(PmBidWinning::getStatus,BidWinningStatus.BE_BID_FAILURE.getCode())
-                            .eq(PmBidWinning::getId,item.getId());
+                    updateWrapper1.lambda().set(PmBidWinning::getStatus, BidWinningStatus.BE_BID_FAILURE.getCode())
+                            .eq(PmBidWinning::getId, item.getId());
                     pmBidWinningService.update(updateWrapper1);
 
                     UpdateWrapper<PmBidWinningOpeningRef> updateWrapper2 = new UpdateWrapper<>();
-                    updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus,BidWinningStatus.BE_BID_FAILURE.getCode())
-                            .eq(PmBidWinningOpeningRef::getWinningId,item.getId())
-                            .eq(PmBidWinningOpeningRef::getStatus,BidWinningStatus.NORMAL.getCode());
+                    updateWrapper2.lambda().set(PmBidWinningOpeningRef::getStatus, BidWinningStatus.BE_BID_FAILURE.getCode())
+                            .eq(PmBidWinningOpeningRef::getWinningId, item.getId())
+                            .eq(PmBidWinningOpeningRef::getStatus, BidWinningStatus.NORMAL.getCode());
                     pmBidWinningOpeningRefService.update(updateWrapper2);
                 }
             }
@@ -1325,6 +1340,9 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             if (baseNoticeType == null) {
                 throw new Exception("流标公告 公告类型不存在");
             }
+            baseNotice.setDemandId(pmDemand.getDemandId());
+            baseNotice.setDeptId(pmDemand.getPurchaseDeptId());
+            baseNotice.setIsExcess(pmDemand.getIsExcess());
             baseNotice.setType(baseNoticeType.getId());
             baseNotice.setReleaseTime(pmBidFailureReqVo.getBidFailureTime());
             this.baseNoticeService.saveOrUpdate(baseNotice);
@@ -1443,6 +1461,29 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         }
     }
 
+    /**
+     * 更新需求预警状态
+     *
+     * @param demnadId
+     * @return
+     */
+    @Override
+    public void updateDemandWarnStatus(Long demnadId) {
+        PmDemand pmDemand = this.getById(demnadId);
+        List<SysDictData> data = iSysDictTypeService.selectDictDataByType("alert_time_setting");
+        int setting1 = Integer.parseInt(data.stream().filter(item -> item.getDictLabel().equals("计划提报时间")).collect(Collectors.toList()).get(0).getDictValue());
+        log.info("******** setting1 == " + setting1);
+        //需求提报时间:根据数据阈值中设置的提报时间进行判断,进行预警
+        int diff1 = DateUtils.differentDaysByMillisecond(pmDemand.getPlanDemandSubTime(), DateUtils.parseDate(DateUtils.getDate()));
+        if (ObjectUtils.isEmpty(pmDemand.getRealDemandCommitTime()) && diff1 >= setting1) {
+            PmDemand pmDemandUpdate = new PmDemand();
+            pmDemandUpdate.setDemandId(demnadId);
+            pmDemandUpdate.setWarnStatus(WarnStatus.DEMAND_COMMT_WARNING.getCode());
+            this.updateById(pmDemandUpdate);
+        }
+    }
+
+
     /**
      * 通过需求ID列表 查询采购执行列表 sunhh
      *
@@ -1536,9 +1577,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         List<PlanQuarterResponseVo> planRes = planYearsService.willSendLetter();
         //转为首页table展示数据
         if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
-            for (PmDemandResVo demandResVoVo : demandRes) {
+            for (PmDemandResVo demandResVo : demandRes) {
                 HomeToDoQueryResVo home = new HomeToDoQueryResVo();
-                BeanUtils.copyProperties(demandResVoVo, home);
+                home.setEvaluation(BigDecimal.valueOf(demandResVo.getEvaluation()));
+                BeanUtils.copyProperties(demandResVo, home);
                 homeRes.add(home);
             }
         }
@@ -1590,6 +1632,20 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return resVos;
     }
 
+    @Override
+    public List<StatisticalChartsResVo> countByPurchaseMode() {
+        List<StatisticalChartsResVo> resVos = pmDemandMapper.countByPurchaseMode();
+        for (StatisticalChartsResVo chartsResVo : resVos) {
+            for (ProcurementMethodSuggest value : ProcurementMethodSuggest.values()) {
+                if (value.getCode().equals(chartsResVo.getColumnName())) {
+                    chartsResVo.setColumnName(value.getInfo());
+                    break;
+                }
+            }
+        }
+        return resVos;
+    }
+
     @Override
     public List<StatisticalChartsResVo> countByEvaluation(PmDemandReqVo pmDemandReqVo) {
         List<StatisticalChartsResVo> resVos = new ArrayList<>();
@@ -1645,13 +1701,30 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
             for (StatisticalChartsResVo chartsResVo : byYear) {
                 for (int i = 1; i <= 4; i++) {
                     StatisticalChartsResVo quarter = pmDemandMapper.countProjectExceedQuarter(i, Integer.parseInt(chartsResVo.getColumnName()));
+                    if (ObjectUtils.isEmpty(quarter)) {
+                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", "0", "0");
+                        quarter = vo;
+                        quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
+                    }
                     quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
                     byQuarter.add(quarter);
                 }
             }
             resMap.put("季度", byQuarter);
         } else if (pmDemandReqVo.getTimeType().equals("3")) {
-            List<StatisticalChartsResVo> byMonth = pmDemandMapper.countProjectExceedMonth();
+            List<StatisticalChartsResVo> byMonth = new LinkedList<>();
+            for (StatisticalChartsResVo chartsResVo : byYear) {
+                for (int i = 1; i <= 12; i++) {
+                    StatisticalChartsResVo month = pmDemandMapper.countProjectExceedMonth(i, Integer.parseInt(chartsResVo.getColumnName()));
+                    if (ObjectUtils.isEmpty(month)) {
+                        StatisticalChartsResVo vo = new StatisticalChartsResVo("", "0", "0");
+                        month = vo;
+                        month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
+                    }
+                    month.setColumnName(chartsResVo.getColumnName() + "年" + i + "月");
+                    byMonth.add(month);
+                }
+            }
             resMap.put("月", byMonth);
         }
         return AjaxResult.success(resMap);
@@ -1681,27 +1754,6 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return AjaxResult.success(resMap);
     }
 
-    @Override
-    public AjaxResult newFinishPro() {
-        // 新完成采购任务数量:状态为“合同待填制”、“项目建设中”、“项目建设完成”的项目
-        //        预算金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的预算金额
-        List<StatisticalChartsResVo> everyStatusNum = pmDemandMapper.countEveryStatusNumTwo();
-        if (!ObjectUtils.isEmpty(everyStatusNum) && everyStatusNum.size() > 0) {
-            for (StatisticalChartsResVo vo : everyStatusNum) {
-                switch (vo.getColumnName()) {
-                    case "15":
-                        vo.setColumnName(PmProjectStatus.CONTRACT_WAIT_FILL.getInfo());
-                    case "16":
-                        vo.setColumnName(PmProjectStatus.UNDER_CONSTRUCTION.getInfo());
-                    case "17":
-                        vo.setColumnName(PmProjectStatus.COMPLETION_CONSTRUCTION.getInfo());
-                }
-            }
-        }
-        //合同金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的合同金额
-        return AjaxResult.success(everyStatusNum);
-    }
-
     @Override
     public AjaxResult countEveryStatusNum(PmDemandReqVo pmDemandReqVo) {
         //指项目进行到各个阶段的数量
@@ -1813,7 +1865,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
      * @return
      */
     @Override
-    public PmDemand selectByPlanId(Integer planId) {
+    public PmDemand selectByPlanId(Long planId) {
         return pmDemandMapper.selectByPlanId(planId);
     }
 
@@ -1922,8 +1974,80 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return mapReturn;
     }
 
+    /**
+     * 已完成采购任务数量统计
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    @Override
+    public List<Map<String, Integer>> purchaseTaskFinish(PmDemandReqVo pmDemandReqVo) {
+        List<Map<String, Integer>> mapReturn = new ArrayList<>();
+        // 统计时间类型 1:年度,2:季度,3:月份
+        if ("1".equals(pmDemandReqVo.getTimeType())) {
+            // 查询数据库中最小的年份
+            int minYear = pmDemandMapper.selectMinYear();
+            // 获取当前年份
+            Calendar calendar = Calendar.getInstance();
+            int year = calendar.get(Calendar.YEAR);
+            // 获取统计数据
+            List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishYear(pmDemandReqVo);
+            mapReturn.addAll(listMap);
+            for (int i = minYear; i <= year; i++) {
+                for (Map<String, Integer> map : listMap) {
+                    if (i != Integer.valueOf(map.get("yy"))) {
+                        Map<String, Integer> map1 = new HashMap<>();
+                        map1.put("yy", i);
+                        map1.put("evaluation", 0);
+                        map1.put("contractAmount", 0);
+                        map1.put("countNum", 0);
+                        mapReturn.add(map1);
+                    }
+                }
+            }
+        } else if ("2".equals(pmDemandReqVo.getTimeType())) {
+            // 当前年份季度统计
+            // 获取统计数据
+            List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishQuarter(pmDemandReqVo);
+            mapReturn.addAll(listMap);
+            for (int i = 1; i <= 4; i++) {
+                for (Map<String, Integer> map : listMap) {
+                    if (i != map.get("yy")) {
+                        Map<String, Integer> map1 = new HashMap<>();
+                        map1.put("yy", i);
+                        map1.put("evaluation", 0);
+                        map1.put("contractAmount", 0);
+                        map1.put("countNum", 0);
+                        mapReturn.add(map1);
+                    }
+                }
+            }
+        } else if ("3".equals(pmDemandReqVo.getTimeType())) {
+            // 当前年份月份统计
+            // 获取统计数据
+            List<Map<String, Integer>> listMap = pmDemandMapper.selectPurchaseTaskFinishMonth(pmDemandReqVo);
+            mapReturn.addAll(listMap);
+            for (int i = 1; i <= 12; i++) {
+                for (Map<String, Integer> map : listMap) {
+                    int ii = Integer.parseInt(String.valueOf(map.get("yy")));
+                    map.put("yy", ii);
+                    if (i != ii) {
+                        Map<String, Integer> map1 = new HashMap<>();
+                        map1.put("yy", i);
+                        map1.put("evaluation", 0);
+                        map1.put("contractAmount", 0);
+                        map1.put("countNum", 0);
+                        mapReturn.add(map1);
+                    }
+                }
+            }
+        }
+        return mapReturn;
+    }
+
     /**
      * 各阶段项目数量分布
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -1986,6 +2110,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     /**
      * 项目数量分析
+     *
      * @param pmDemandReqVo
      * @return
      */
@@ -2160,7 +2285,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 if (i > 0) {
                     return "距离计划交付时间不足" + i + "天";
                 } else {
-                    return "已超过计划完成时间" + i + "天";
+                    return "已超过计划完成时间" + Math.abs(i) + "天";
                 }
             }
         }

+ 8 - 6
purchase-system/src/main/java/com/ozs/system/domain/vo/requestVo/SysProcurementStandardVo.java

@@ -16,10 +16,10 @@ import java.util.Date;
 @Data
 public class SysProcurementStandardVo implements Serializable {
     private static final long serialVersionUID = 1L;
-    
+
     @ApiModelProperty(value = "采购标准ID")
     private Long procurementStandardId;
-    
+
     @ApiModelProperty(value = "部门ID")
     private Long deptId;
 
@@ -30,16 +30,18 @@ public class SysProcurementStandardVo implements Serializable {
     /** 状态(0不限1限额) */
     @ApiModelProperty(value = "状态")
     private Integer state;
-    
+
     @ApiModelProperty(value = "最小值(万元)")
     private BigDecimal minimumValue;
-    
+
     @ApiModelProperty(value = "最大值(万元)")
     private BigDecimal maximum;
-    
+
     @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
-    
+
     @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 }

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

@@ -1,5 +1,6 @@
 package com.ozs.system.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -124,4 +125,5 @@ public interface ISysDeptService
      */
     public int deleteDeptById(Long deptId);
 
+    public String isExcessOrNo(String projectType, BigDecimal evaluation, Long deptId);
 }

+ 30 - 2
purchase-system/src/main/java/com/ozs/system/service/impl/SysDeptServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ozs.system.service.impl;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -8,7 +9,9 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ozs.common.core.domain.entity.SysDictData;
 import com.ozs.common.core.domain.entity.SysProcurementStandard;
+import com.ozs.common.enums.ProjectTypes;
 import com.ozs.common.exception.base.BaseException;
 import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
 import com.ozs.system.mapper.SysDeptMapper;
@@ -359,8 +362,33 @@ public class SysDeptServiceImpl implements ISysDeptService
     /**
      * 判断是否有子节点
      */
-    private boolean hasChild(List<SysDept> list, SysDept t)
-    {
+    private boolean hasChild(List<SysDept> list, SysDept t) {
         return getChildList(list, t).size() > 0;
     }
+
+    //判断是否为超额计划
+    @Override
+    public String isExcessOrNo(String projectType, BigDecimal evaluation, Long deptId) {
+        String result = "0";
+        BigDecimal threshold = new BigDecimal(0);
+        //获取各个项目类型设定的概算金额阈值
+        QueryWrapper<SysProcurementStandard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("dept_id", deptId);
+        queryWrapper.eq("category", projectType.equals("2") ? "1" : projectType.equals("1") ? "2" : projectType);
+        List<SysProcurementStandard> sysProcurementStandardsList = sysProcurementStandardMapper.selectList(queryWrapper);
+        if (!ObjectUtils.isEmpty(sysProcurementStandardsList)) {
+            BigDecimal maximum = sysProcurementStandardsList.get(0).getMaximum();
+            if (ObjectUtils.isEmpty(maximum)) {
+                return "0";
+            }
+            if (evaluation.compareTo(maximum) == 1) {
+                //是超额计划
+                result = "1";
+            } else {
+                result = "0";
+            }
+        }
+        return result;
+
+    }
 }

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

@@ -31,7 +31,7 @@
         <result property="update_time" column="updateTime"/>
     </resultMap>
 
-    <delete id="deleteProvisionalPlanById" parameterType="java.lang.Integer">
+    <delete id="deleteProvisionalPlanById" parameterType="java.lang.Long">
         delete
         from plan_practical
         where plan_practical_id = #{planPracticalId}
@@ -112,14 +112,14 @@
           and plan_type = "1"
     </select>
 
-    <update id="commitProvisionalPlan" parameterType="java.lang.Integer">
+    <update id="commitProvisionalPlan" parameterType="java.lang.Long">
         update plan_practical
         set project_status = 1
         where plan_type = 1
           and plan_practical_id = #{planPracticalId}
     </update>
 
-    <select id="seletById" resultType="com.ozs.plan.doman.ProvisionalPlan" parameterType="java.lang.Integer">
+    <select id="seletById" resultType="com.ozs.plan.doman.ProvisionalPlan" parameterType="java.lang.Long">
         select *
         from plan_practical
         where plan_type = 1
@@ -184,14 +184,14 @@
     </select>
 
     <!--	计划审核-->
-    <update id="review" parameterType="com.ozs.plan.doman.ProvisionalPlan">
+    <update id="review" parameterType="com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo">
         update plan_practical
         <trim prefix="SET" suffixOverrides=",">
             <if test="refuseReason != null and refuseReason != ''">
                 refuse_reason = #{refuseReason},
             </if>
             <if test="projectStatus != null and projectStatus != ''">
-                project_status = #{projectStatus}
+                project_status = #{projectStatus},
             </if>
         </trim>
         where plan_practical_id = #{planPracticalId}

+ 77 - 15
purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

@@ -13,16 +13,18 @@
 
     <select id="selectExtractionExpert" parameterType="com.ozs.base.domain.vo.BaseExpertVo"
             resultType="com.ozs.pm.doman.PmDemand">
-        select * from pm_demand where project_status = 13
-        <if test="projectName != null and projectName != ''">
-            and project_name like '%' + #{projectName} + '%'
-        </if>
-        <if test="startTime != null  "><!-- 开始时间检索 -->
-            and date_format(plan_demand_sub_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
-        </if>
-        <if test="endTime != null  "><!-- 结束时间检索 -->
-            and date_format(plan_demand_sub_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
-        </if>
+        select * from pm_demand
+        <where>
+            <if test="projectName != null and projectName != ''">
+                and project_name like '%' + #{projectName} + '%'
+            </if>
+            <if test="startTime != null  "><!-- 开始时间检索 -->
+                and date_format(plan_demand_sub_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
+            </if>
+            <if test="endTime != null  "><!-- 结束时间检索 -->
+                and date_format(plan_demand_sub_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+            </if>
+        </where>
     </select>
 
     <select id="purchaseProjectStatistical" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -51,7 +53,8 @@
         -- 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
+        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">
@@ -60,6 +63,12 @@
         GROUP BY project_status
     </select>
 
+    <select id="countByPurchaseMode" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT purchase_mode columnName, COUNT(demand_id) num, SUM(evaluation) evaluationTotal
+        FROM `pm_demand`
+        GROUP BY purchase_mode
+    </select>
+
     <select id="countByEvaluationLt" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
         SELECT COUNT(demand_id) num, SUM(evaluation) evaluationTotal
         FROM `pm_demand`
@@ -109,11 +118,13 @@
         WHERE (real_demand_commit_time > plan_demand_sub_time
             or real_purchase_finish_time > plan_purchase_finish_time
             or real_deliver_time > plan_deliver_time)
+          and MONTH(create_time) = #{month}
+          AND DATE_FORMAT(create_time, '%Y') = #{year}
         GROUP BY DATE_FORMAT(create_time, '%Y-%m')
     </select>
 
     <select id="countProjectExceedQuarter" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
-        SELECT create_time columnName, COUNT(demand_id) num
+        SELECT DATE_FORMAT(create_time, '%Y-${quarter}季度') columnName, COUNT(demand_id) num
         FROM `pm_demand`
         WHERE (real_demand_commit_time > plan_demand_sub_time
             or real_purchase_finish_time > plan_purchase_finish_time
@@ -187,11 +198,10 @@
         GROUP BY project_status
     </select>
 
-    <select id="selectByPlanId" parameterType="java.lang.Integer" resultType="com.ozs.pm.doman.PmDemand">
+    <select id="selectByPlanId" parameterType="java.lang.Long" resultType="com.ozs.pm.doman.PmDemand">
         select *
         from pm_demand
-        where plan_id = #{planId}
-        limit 1
+        where plan_id = #{planId} limit 1
     </select>
 
     <select id="countMajorProjectLastYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
@@ -286,6 +296,58 @@
         group by date_format(a.plan_demand_sub_time, '%y%m')
     </select>
 
+    <select id="selectPurchaseTaskFinishYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="java.util.Map">
+        select count(demand_id)                  countNum,
+               ifnull(sum(a.evaluation), 0)      evaluation,
+               year(a.plan_demand_sub_time)      yy,
+               ifnull(sum(b.contract_amount), 0) contractAmount
+        from (
+                 select evaluation, plan_demand_sub_time, demand_id from pm_demand where project_status in (15, 16, 17)
+             ) a
+                 left join (
+            select contract_amount, demand_id
+            from pm_contract_info
+        ) b on a.demand_id = b.demand_id
+        group by year(a.plan_demand_sub_time)
+    </select>
+
+    <select id="selectPurchaseTaskFinishQuarter" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="java.util.Map">
+        select ifnull(sum(a.evaluation), 0)      evaluation,
+               quarter(a.plan_demand_sub_time)   yy,
+               ifnull(sum(b.contract_amount), 0) contractAmount
+        from (
+                 select evaluation, plan_demand_sub_time, demand_id
+                 from pm_demand
+                 where project_status in (15, 16, 17)
+                   and year(plan_demand_sub_time) = year(NOW())
+             ) a
+                 left join (
+            select contract_amount, demand_id
+            from pm_contract_info
+        ) b on a.demand_id = b.demand_id
+        group by concat(Year(a.plan_demand_sub_time), quarter(a.plan_demand_sub_time))
+    </select>
+
+    <select id="selectPurchaseTaskFinishMonth" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="java.util.Map">
+        select ifnull(sum(a.evaluation), 0)            evaluation,
+               date_format(plan_demand_sub_time, '%m') yy,
+               ifnull(sum(b.contract_amount), 0)       contractAmount
+        from (
+                 select evaluation, plan_demand_sub_time, demand_id
+                 from pm_demand
+                 where project_status in (15, 16, 17)
+                   and year(plan_demand_sub_time) = year(NOW())
+             ) a
+                 left join (
+            select contract_amount, demand_id
+            from pm_contract_info
+        ) b on a.demand_id = b.demand_id
+        group by date_format(a.plan_demand_sub_time, '%y%m')
+    </select>
+
     <select id="countProjectExceedAndMajor" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
         SELECT COUNT(demand_id) num, SUM(evaluation) evaluationTotal
         FROM `pm_demand`