فهرست منبع

Merge remote-tracking branch 'origin/master'

suntianwu 2 سال پیش
والد
کامیت
dc819e8830
17فایلهای تغییر یافته به همراه420 افزوده شده و 88 حذف شده
  1. 1 1
      purchase-admin/src/main/java/com/ozs/web/controller/base/BaseAgencyController.java
  2. 3 4
      purchase-admin/src/main/java/com/ozs/web/controller/plan/PlanYearsController.java
  3. 24 2
      purchase-admin/src/main/java/com/ozs/web/controller/plan/ProvisionalPlanController.java
  4. 16 7
      purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java
  5. 24 2
      purchase-system/src/main/java/com/ozs/plan/doman/ProvisionalPlan.java
  6. 0 1
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/PlanYearsStandardVo.java
  7. 10 0
      purchase-system/src/main/java/com/ozs/plan/doman/vo/requestVo/ProvisionalPlanVo.java
  8. 3 3
      purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanYearsResponseVo.java
  9. 8 0
      purchase-system/src/main/java/com/ozs/plan/mapper/ProvisionalPlanMapper.java
  10. 9 2
      purchase-system/src/main/java/com/ozs/plan/service/PlanYearsService.java
  11. 8 1
      purchase-system/src/main/java/com/ozs/plan/service/ProvisionalPlanService.java
  12. 55 19
      purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java
  13. 135 0
      purchase-system/src/main/java/com/ozs/plan/service/impl/ProvisionalPlanServiceImpl.java
  14. 13 12
      purchase-system/src/main/java/com/ozs/system/service/impl/SysDictTypeServiceImpl.java
  15. 4 4
      purchase-system/src/main/resources/mapper/plan/PlanYearsMapper.xml
  16. 0 30
      purchase-system/src/main/resources/mapper/plan/ProvisionalPlan.xml
  17. 107 0
      purchase-system/src/main/resources/mapper/plan/ProvisionalPlanMapper.xml

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

@@ -231,7 +231,7 @@ public class BaseAgencyController extends BaseController {
     }
 
 
-    @ApiOperation(value = "根据项目名称模糊查询项目信息")
+    @ApiOperation(value = "确认抽取")
     @PostMapping("/extract")
     @PreAuthorize("@ss.hasPermi('base:agency:extract')")
     @Log(title = ModularConstans.agency, businessType = BusinessType.OTHER)

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

@@ -52,9 +52,8 @@ public class PlanYearsController extends BaseController {
     @ApiOperation(value = "导出年度计划数据")
     @PostMapping("/exportPlan")
     public void exportPlan(HttpServletResponse response, @RequestBody PlanYearsStandardVo yearsStandardVo) throws Exception {
-        PageInfo<PlanYears> page = planYearsService.selectPlanYearsList(yearsStandardVo);
-        List<PlanYears> list = page.getList();
-        ExcelUtil<PlanYears> util = new ExcelUtil<PlanYears>(PlanYears.class);
+        List<PlanYears> list = planYearsService.selectPlanYearsListEXP(yearsStandardVo);
+        ExcelUtil<PlanYears> util = new ExcelUtil<>(PlanYears.class);
         util.exportExcel(response, list, "年度计划数据");
     }
 
@@ -122,7 +121,7 @@ public class PlanYearsController extends BaseController {
     @ApiOperation(value = "申请修改年度计划")
     @PostMapping("/appUpdate")
     public AjaxResult appUpdate(@RequestBody PlanYearsStandardVo yearsStandardVo) {
-        return planYearsService.reviewReturn(yearsStandardVo);
+        return planYearsService.appUpdate(yearsStandardVo);
     }
 
     @ApiOperation(value = "发函催告")

+ 24 - 2
purchase-admin/src/main/java/com/ozs/web/controller/plan/ProvisionalPlanController.java

@@ -9,8 +9,11 @@ import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.common.exception.ServiceException;
 import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.framework.web.service.TokenService;
+import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.ProvisionalPlan;
 import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
 import com.ozs.plan.service.ProvisionalPlanService;
@@ -23,9 +26,11 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 临时计划
@@ -64,7 +69,7 @@ public class ProvisionalPlanController extends BaseController {
         if (StringUtils.isNull(provisionalPlan) || StringUtils.isNull(provisionalPlan.getPlanYearId())) {
             return error("专家库id不能为空");
         }
-        return toAjax(provisionalPlanService.removeById(provisionalPlan.getPlanYearId()));
+        return toAjax(provisionalPlanService.deleteProvisionalPlanById(provisionalPlan.getPlanYearId()));
     }
 
     @ApiOperation(value = "修改临时计划", notes = "必传 plan_year_id 及修改数据")
@@ -73,7 +78,7 @@ public class ProvisionalPlanController extends BaseController {
         if (StringUtils.isNull(provisionalPlan) || StringUtils.isNull(provisionalPlan.getPlanYearId())) {
             return error("专家库id和修改数据不能为空");
         }
-        return toAjax(provisionalPlanService.updateById(provisionalPlan));
+        return toAjax(provisionalPlanService.updateProvisionalPlanById(provisionalPlan));
     }
 
     @ApiOperation(value = "查询临时计划")
@@ -91,7 +96,24 @@ public class ProvisionalPlanController extends BaseController {
         if (!ObjectUtils.isEmpty(provisionalPlanVo.getProjectStatus())) {
             lw.eq(ProvisionalPlan::getProjectStatus, provisionalPlanVo.getProjectStatus());
         }
+        if (!ObjectUtils.isEmpty(provisionalPlanVo.getStartTime()) || !ObjectUtils.isEmpty(provisionalPlanVo.getEndTime())) {
+            lw.between(ProvisionalPlan::getPlanDemandSubTime, provisionalPlanVo.getStartTime(), provisionalPlanVo.getEndTime());
+        }
         IPage<ProvisionalPlan> page = provisionalPlanService.page(new Page<ProvisionalPlan>(provisionalPlanVo.getPageNum(), provisionalPlanVo.getPageSize()), lw);
         return success(page);
     }
+
+    @ApiOperation(value = "导入年临时计划")
+    @PostMapping("/importProvisionalPlan")
+    public AjaxResult importProvisionalPlan(MultipartFile file, boolean updateSupport) throws Exception {
+        ExcelUtil<ProvisionalPlan> util = new ExcelUtil<>(ProvisionalPlan.class);
+        List<ProvisionalPlan> provisionalPlans = util.importExcel(file.getInputStream());
+        if (StringUtils.isNull(provisionalPlans) || provisionalPlans.size() == 0) {
+            throw new ServiceException("导入临时计划数据不能为空!");
+        }
+        //获取采购单位-
+        LoginUser loginUser = getLoginUser();
+        String message = provisionalPlanService.importProvisionalPlan(provisionalPlans, updateSupport, loginUser);
+        return success(message);
+    }
 }

+ 16 - 7
purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java

@@ -2,6 +2,7 @@ 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.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.annotation.Excel;
@@ -32,6 +33,7 @@ public class PlanYears {
     private Long purchaseDeptId;
 
     @Excel(name = "采购单位")
+    @TableField(exist = false)
     private String purchaseDeptName;
     /**
      * 项目名称
@@ -42,9 +44,10 @@ public class PlanYears {
     /**
      * 项目类型(0:装备类;1:物资类;2:服务类;3:工程类)
      */
-    @Excel(name = "项目类型")
     @NotNull(message = "项目类型不能为空")
     private String projectType;
+    @Excel(name = "项目类型")
+    @TableField(exist = false)
     private String projectTypeStr;
     /**
      * 需求概况
@@ -66,44 +69,48 @@ public class PlanYears {
     /**
      * 采购服务站
      */
-    @Excel(name = "采购服务站")
     @NotNull(message = "采购服务站不能为空")
     private String purchaseServices;
+    @Excel(name = "采购服务站")
+    @TableField(exist = false)
     private String purchaseServicesStr;
     /**
      * 采购方式 (0:公开招标, 1:单一来源,2:邀请招标,3:竞争式谈判,4:询价)
      */
-    @Excel(name = "采购方式")
     @NotNull(message = "采购方式不能为空")
     private String purchaseMode;
+    @Excel(name = "采购方式")
+    @TableField(exist = false)
     private String purchaseModeStr;
     /**
      * 计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)
      */
-    @Excel(name = "提报需求时间")
+    @Excel(name = "提报需求时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划提报需求时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDemandSubTime;
     /**
      * 计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)
      */
-    @Excel(name = "完成采购时间")
+    @Excel(name = "完成采购时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划完成采购时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planPurchaseFinishTime;
     /**
      * 计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期
      */
-    @Excel(name = "交付(实施)时间")
+    @Excel(name = "交付(实施)时间", dateFormat = "yyyy-MM-dd")
     @NotNull(message = "计划交付时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDeliverTime;
     /**
      * 项目属性--->应急应战项目、重大规划任务项目、规划任务项目或一般项目
      */
-    @Excel(name = "项目属性")
     @NotNull(message = "项目属性不能为空")
     private String projectAttr;
+
+    @Excel(name = "项目属性")
+    @TableField(exist = false)
     private String projectAttrStr;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
@@ -158,8 +165,10 @@ public class PlanYears {
      * 查询参数开始时间和结束时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
     private Date beginTime;
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
     private Date endTime;
 
 }

+ 24 - 2
purchase-system/src/main/java/com/ozs/plan/doman/ProvisionalPlan.java

@@ -2,7 +2,8 @@ package com.ozs.plan.doman;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.ozs.common.vo.PageVo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -16,26 +17,34 @@ public class ProvisionalPlan {
 
     @ApiModelProperty(value = "主键ID")
     @TableField("plan_year_id")
-    private Long planYearId;
+    private Integer planYearId;
 
     @NotNull(message = "采购单位不能为空")
     @ApiModelProperty(value = "采购单位(登录账号的单位)")
     @TableField("purchase_dept_id")
     private Long purchaseDeptId;
 
+    @Excel(name = "采购单位")
+    @TableField(exist = false)
+    private String purchaseDeptName;
+
+    @Excel(name = "项目名称")
     @NotNull(message = "项目名称不能为空")
     @ApiModelProperty(value = "项目名称")
     @TableField("project_name")
     private String projectName;
 
+    @Excel(name = "项目类型")
     @ApiModelProperty(value = "项目类型(0:装备类;1:物资类;2:服务类;3:工程类)")
     @TableField("project_type")
     private String projectType;
 
+    @Excel(name = "需求概况")
     @ApiModelProperty(value = "需求概况")
     @TableField("demand_overview")
     private String demandOverview;
 
+    @Excel(name = "概算金额(万元)")
     @ApiModelProperty(value = "概算金额(万元(保留小数点后两位)")
     @TableField("evaluation")
     private BigDecimal evaluation;
@@ -44,34 +53,45 @@ public class ProvisionalPlan {
     @TableField("is_excess")
     private String isExcess;
 
+    @Excel(name = "采购服务站")
     @ApiModelProperty(value = "采购服务站")
     @TableField("purchase_services")
     private String purchaseServices;
 
+    @Excel(name = "采购方式")
     @ApiModelProperty(value = "采购方式  (0:公开招标, 1:单一来源,2:邀请招标,3:竞争式谈判,4:询价)")
     @TableField("purchase_mode")
     private String purchaseMode;
 
+    @Excel(name = "提报需求时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)")
     @TableField("plan_demand_sub_time")
     private Date planDemandSubTime;
 
+    @Excel(name = "完成采购时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)")
     @TableField("plan_purchase_finish_time")
     private Date planPurchaseFinishTime;
 
+    @Excel(name = "交付(实施)时间")
+    @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 = "计划调整情况及理由")
     @ApiModelProperty(value = "计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示该信息")
     @TableField("adjust_reason")
     private String adjustReason;
 
+    @Excel(name = "备注")
     @ApiModelProperty(value = "备注")
     @TableField("remarks")
     private String remarks;
@@ -96,6 +116,7 @@ public class ProvisionalPlan {
     @TableField("created")
     private String created;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "创建时间")
     @TableField("create_time")
     private Date createTime;
@@ -104,6 +125,7 @@ public class ProvisionalPlan {
     @TableField("updated")
     private String updated;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "修改时间")
     @TableField("update_time")
     private String updateTime;

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

@@ -7,7 +7,6 @@ import com.ozs.system.domain.SysFileRef;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;

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

@@ -1,6 +1,7 @@
 package com.ozs.plan.doman.vo.requestVo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.vo.PageVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -11,6 +12,10 @@ import java.util.Date;
 
 @Data
 public class ProvisionalPlanVo extends PageVo {
+
+    private Date startTime;
+    private Date endTime;
+
     @ApiModelProperty(value = "主键ID")
     private Long planYearId;
 
@@ -40,12 +45,15 @@ public class ProvisionalPlanVo extends PageVo {
     @ApiModelProperty(value = "采购方式  (0:公开招标, 1:单一来源,2:邀请招标,3:竞争式谈判,4:询价)")
     private String purchaseMode;
 
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划提报需求时间--->需求单位成功提报采购需求的日期(具体到月)")
     private Date planDemandSubTime;
 
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划完成采购时间--->公示中标结果的日期,即填制中标信息的日期(具体到月)")
     private Date planPurchaseFinishTime;
 
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "计划交付时间--->供应商完成并交付后,使用单位收到标的日期,即填制建设文档的日期")
     private Date planDeliverTime;
 
@@ -73,12 +81,14 @@ public class ProvisionalPlanVo extends PageVo {
     @ApiModelProperty(value = "创建者")
     private String created;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
     @ApiModelProperty(value = "修改者")
     private String updated;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "修改时间")
     private String updateTime;
 }

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

@@ -3,7 +3,7 @@ package com.ozs.plan.doman.vo.responseVo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.annotation.Excel;
-import com.ozs.system.domain.SysFileRef;
+import com.ozs.system.domain.SysFileInfo;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -113,8 +113,8 @@ public class PlanYearsResponseVo implements Serializable {
     private String refuseReason;
 
     /**
-     * 上传附件的URL
+     * 已上传的关联附件信息
      */
-    HashMap<String, String> fileMap;
+    List<SysFileInfo> fileInfos;
 
 }

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

@@ -4,7 +4,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ozs.base.domain.BaseExpert;
 import com.ozs.plan.doman.ProvisionalPlan;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface ProvisionalPlanMapper extends BaseMapper<ProvisionalPlan> {
+    int deleteProvisionalPlanById(@Param("planYearId") Integer planYearId);
+
+    int updateProvisionalPlanById(ProvisionalPlan provisionalPlan);
+
+    List<ProvisionalPlan> selectProjectName(String projectName);
 }

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

@@ -1,7 +1,6 @@
 package com.ozs.plan.service;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.pagehelper.PageInfo;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.model.LoginUser;
@@ -26,7 +25,15 @@ public interface PlanYearsService {
     public PageInfo<PlanYears> selectPlanYearsList(PlanYearsStandardVo vo);
 
     /**
-     * 查询年度计划记录集合
+     * 查询年度计划记录集合(导出)
+     *
+     * @param vo 年度计划请求对象
+     * @return 年度计划记录集合
+     */
+    public List<PlanYears> selectPlanYearsListEXP(PlanYearsStandardVo vo);
+
+    /**
+     * 查询年度计划记录集合(审核单位)
      *
      * @param vo 年度计划请求对象
      * @return 年度计划记录集合

+ 8 - 1
purchase-system/src/main/java/com/ozs/plan/service/ProvisionalPlanService.java

@@ -1,8 +1,15 @@
 package com.ozs.plan.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ozs.base.domain.BaseExpert;
+import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.plan.doman.ProvisionalPlan;
 
+import java.util.List;
+
 public interface ProvisionalPlanService extends IService<ProvisionalPlan> {
+    int deleteProvisionalPlanById(Integer planYearId);
+
+    int updateProvisionalPlanById(ProvisionalPlan provisionalPlan);
+
+    String importProvisionalPlan(List<ProvisionalPlan> provisionalPlans, boolean updateSupport, LoginUser loginUser);
 }

+ 55 - 19
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -1,7 +1,7 @@
 package com.ozs.plan.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.pagehelper.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ozs.common.core.domain.AjaxResult;
@@ -67,16 +67,12 @@ public class PlanYearsServiceImpl implements PlanYearsService {
     @Override
     public PageInfo<PlanYears> selectPlanYearsList(PlanYearsStandardVo vo) {
         PlanYears ofYears = new PlanYears();
-        List<PlanYears> planYears = new ArrayList<>();
+        List<PlanYears> planYears;
         List<PlanYears> planYearsList = new ArrayList<>();
         PageHelper.startPage(vo.getPageNum().intValue(), vo.getPageSize().intValue());
         try {
             BeanUtils.copyProperties(vo, ofYears);
             planYears = planYearsMapper.selectPlanYearsList(ofYears);
-            for (PlanYears planYear : planYears) {
-                SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept");
-                planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
-            }
             planYearsList = changeTo(planYears);
         } catch (Exception e) {
             e.printStackTrace();
@@ -85,22 +81,59 @@ public class PlanYearsServiceImpl implements PlanYearsService {
         return pageInfo;
     }
 
+    @Override
+    public List<PlanYears> selectPlanYearsListEXP(PlanYearsStandardVo vo) {
+        List<PlanYears> list = new ArrayList<>();
+        List<PlanYears> planYearsList = new ArrayList<>();
+        try {
+            int num = 1;
+            int size = 200;
+            while (size == 200) {
+                LambdaQueryWrapper<PlanYears> lw = new LambdaQueryWrapper<PlanYears>();
+                if (!ObjectUtils.isEmpty(vo.getProjectName())) {
+                    lw.like(PlanYears::getProjectName, vo.getProjectName());
+                }
+                if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
+                    lw.eq(PlanYears::getPurchaseServices, vo.getPurchaseServices());
+                }
+                if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
+                    lw.eq(PlanYears::getIsExcess, vo.getIsExcess());
+                }
+                if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
+                    lw.eq(PlanYears::getProjectStatus, vo.getProjectStatus());
+                }
+                if (!ObjectUtils.isEmpty(vo.getBeginTime())) {
+                    lw.ge(PlanYears::getPlanDemandSubTime, vo.getBeginTime());
+                }
+                if (!ObjectUtils.isEmpty(vo.getEndTime())) {
+                    lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime());
+                }
+                Page<PlanYears> page = planYearsMapper.selectPage(new Page<PlanYears>(num, size, false), lw);
+                list.addAll(page.getRecords());
+                size = page.getRecords().size();
+                num++;
+            }
+            planYearsList = changeTo(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return planYearsList;
+    }
+
     @Override
     public PageInfo<PlanYears> selectPlanYearsExamineList(PlanYearsStandardVo vo) {
         PlanYears ofYears = new PlanYears();
         PageHelper.startPage(vo.getPageNum().intValue(), vo.getPageSize().intValue());
-        List<PlanYears> planYears = new ArrayList<>();
+        List<PlanYears> planYears;
+        List<PlanYears> planYearsList = new ArrayList<>();
         try {
             BeanUtils.copyProperties(vo, ofYears);
             planYears = planYearsMapper.selectPlanYearsExamineList(ofYears);
-            for (PlanYears planYear : planYears) {
-                SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept");
-                planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
-            }
+            planYearsList = changeTo(planYears);
         } catch (Exception e) {
             e.printStackTrace();
         }
-        PageInfo<PlanYears> pageInfo = new PageInfo<PlanYears>(planYears);
+        PageInfo<PlanYears> pageInfo = new PageInfo<PlanYears>(planYearsList);
         return pageInfo;
     }
 
@@ -165,14 +198,14 @@ public class PlanYearsServiceImpl implements PlanYearsService {
         map.put("red_id", byId.getPlanYearId());
         map.put("type", "1");
         List<SysFileRef> fileRefs = sysFileRefMapper.selectByMap(map);
+        List<SysFileInfo> fileInfos = new ArrayList<>();
         BeanUtils.copyProperties(byId, responseVo);
         if (!ObjectUtils.isEmpty(fileRefs)) {
-            HashMap<String, String> fileMap = new HashMap<>();
             for (SysFileRef ref : fileRefs) {
                 SysFileInfo fileInfo = fileService.getById(ref.getFileId());
-                fileMap.put(fileInfo.getFileUrl(), fileInfo.getFileName());
+                fileInfos.add(fileInfo);
             }
-            responseVo.setFileMap(fileMap);
+            responseVo.setFileInfos(fileInfos);
         }
         return AjaxResult.success(responseVo);
     }
@@ -284,7 +317,7 @@ public class PlanYearsServiceImpl implements PlanYearsService {
             failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
             throw new ServiceException(failureMsg.toString());
         } else {
-            successMsg.insert(0, "导入成功!共 " + successNum + " 条,数据如下:");
+            successMsg.insert(0, "导入成功!共 " + successNum + " 条");
         }
         return successMsg.toString();
     }
@@ -437,6 +470,9 @@ public class PlanYearsServiceImpl implements PlanYearsService {
         HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
         List<PlanYears> list = new ArrayList<PlanYears>();
         for (PlanYears planYear : planYears) {
+            SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept");
+            planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
+
             for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
                 if (planYear.getProjectType().equals(entry.getValue())) {
                     planYear.setProjectTypeStr(entry.getKey());
@@ -450,7 +486,7 @@ public class PlanYearsServiceImpl implements PlanYearsService {
                 }
             }
             //项目属性是拼接的
-            if (planYear.getProjectAttr().length() > 2) {
+            if (planYear.getProjectAttr().length() > 1) {
                 StringBuilder builder = new StringBuilder();
                 String[] split = planYear.getProjectAttr().split(",");
                 for (String s : split) {
@@ -461,7 +497,7 @@ public class PlanYearsServiceImpl implements PlanYearsService {
                         }
                     }
                 }
-                planYear.setProjectAttr(builder.toString());
+                planYear.setProjectAttrStr(builder.toString());
             } else {
                 for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
                     if (planYear.getProjectAttr().equals(entry.getValue())) {

+ 135 - 0
purchase-system/src/main/java/com/ozs/plan/service/impl/ProvisionalPlanServiceImpl.java

@@ -1,11 +1,146 @@
 package com.ozs.plan.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.common.core.domain.entity.SysDept;
+import com.ozs.common.core.domain.entity.SysDictData;
+import com.ozs.common.core.domain.model.LoginUser;
+import com.ozs.common.enums.ProjectStatus;
+import com.ozs.common.enums.ProjectTypes;
+import com.ozs.common.exception.ServiceException;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.plan.doman.PlanYears;
 import com.ozs.plan.doman.ProvisionalPlan;
+import com.ozs.plan.mapper.PlanYearsMapper;
 import com.ozs.plan.mapper.ProvisionalPlanMapper;
 import com.ozs.plan.service.ProvisionalPlanService;
+import com.ozs.system.mapper.SysDeptMapper;
+import com.ozs.system.service.ISysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+
 @Service
 public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMapper, ProvisionalPlan> implements ProvisionalPlanService {
+
+    @Autowired
+    private ProvisionalPlanMapper provisionalPlanMapper;
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+    @Autowired
+    private SysDeptMapper deptMapper;
+
+    @Override
+    public int deleteProvisionalPlanById(Integer planYearId) {
+        return provisionalPlanMapper.deleteProvisionalPlanById(planYearId);
+    }
+
+    @Override
+    public int updateProvisionalPlanById(ProvisionalPlan provisionalPlan) {
+        return provisionalPlanMapper.updateProvisionalPlanById(provisionalPlan);
+    }
+
+    @Override
+    public String importProvisionalPlan(List<ProvisionalPlan> provisionalPlans, boolean updateSupport, LoginUser loginUser) {
+        // 字典项
+        HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
+        HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
+        HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
+        HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
+        HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
+
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        for (ProvisionalPlan ofProvisionalPlan : provisionalPlans) {
+            try {
+                //验证项目名称是否重复导入
+                List<ProvisionalPlan> plan = provisionalPlanMapper.selectProjectName(ofProvisionalPlan.getProjectName());
+                //将录入信息中的值更改为要保存的数据
+                if (plan.size() == 0) {
+                    //采购单位
+                    SysDept info = deptMapper.checkDeptNameOnlyOne(ofProvisionalPlan.getPurchaseDeptName());
+                    if (StringUtils.isNotNull(info)) {
+                        ofProvisionalPlan.setPurchaseDeptId(info.getDeptId());
+                    }
+                    ofProvisionalPlan.setProjectType(projectTypesMap.get(ofProvisionalPlan.getProjectType()));
+                    ofProvisionalPlan.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
+                    ofProvisionalPlan.setPurchaseMode(planPurchaseModesMap.get(ofProvisionalPlan.getPurchaseMode()));
+                    //项目属性是多选字段
+                    StringBuilder builder = new StringBuilder();
+                    if (ofProvisionalPlan.getProjectAttr().contains(",")) {
+                        String[] split = ofProvisionalPlan.getProjectAttr().split(",");
+                        for (String s : split) {
+                            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.setCreated(String.valueOf(loginUser.getUserId()));
+                    ofProvisionalPlan.setCreateTime(new Date());
+                    provisionalPlanMapper.insert(ofProvisionalPlan);
+                    successNum++;
+                    successMsg.append("*" + successNum + "、项目 " + ofProvisionalPlan.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("*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 已存在");
+                }
+            } catch (Exception exc) {
+                failureNum++;
+                String msg = "*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 导入失败";
+                failureMsg.append(msg + exc.getMessage());
+                log.error(msg, exc);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "导入成功!共 " + successNum + " 条。");
+        }
+        return successMsg.toString();
+    }
+
+    //判断是否为超额计划
+    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");
+        }
+    }
 }

+ 13 - 12
purchase-system/src/main/java/com/ozs/system/service/impl/SysDictTypeServiceImpl.java

@@ -8,11 +8,9 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 
-import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.constant.Constants;
 import com.ozs.common.enums.PlanPurchaseMode;
-import com.ozs.common.enums.ProjectAttribute;
 import com.ozs.common.enums.ProjectStatus;
-import com.ozs.common.enums.ProjectTypes;
 import com.ozs.system.service.ISysDictTypeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -215,10 +213,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
         HashMap<String, String> planPurchaseModesMap = new LinkedHashMap<>();
         HashMap<String, String> projectAttributes = new LinkedHashMap<>();
         HashMap<String, String> purchaseServices = new LinkedHashMap<>();
-        //项目类型
-        for (ProjectTypes value : ProjectTypes.values()) {
-            projectTypesMap.put(value.getInfo(), value.getCode());
-        }
+
         //项目审核状态
         for (ProjectStatus value : ProjectStatus.values()) {
             projectStatusMap.put(value.getInfo(), value.getCode());
@@ -227,15 +222,21 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
         for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
             planPurchaseModesMap.put(value.getInfo(), value.getCode());
         }
-        //项目属性
-        for (ProjectAttribute value : ProjectAttribute.values()) {
-            projectAttributes.put(value.getInfo(), value.getCode());
-        }
-        List<SysDictData> data = dictDataMapper.selectDictDataByType("purchase_services");
         //采购服务站
+        List<SysDictData> data = dictDataMapper.selectDictDataByType(Constants.PURCHASE_SERVICES);
         for (SysDictData dictData : data) {
             purchaseServices.put(dictData.getDictLabel(), dictData.getDictValue());
         }
+        //项目属性
+        List<SysDictData> data1 = dictDataMapper.selectDictDataByType(Constants.SYS_PROJECT_ATTR);
+        for (SysDictData dictData : data1) {
+            projectAttributes.put(dictData.getDictLabel(), dictData.getDictValue());
+        }
+        //项目类型
+        List<SysDictData> data2 = dictDataMapper.selectDictDataByType(Constants.SYS_PROJECT_TYPE);
+        for (SysDictData dictData : data2) {
+            projectTypesMap.put(dictData.getDictLabel(), dictData.getDictValue());
+        }
 
         hashMap.put("projectTypes", projectTypesMap);
         hashMap.put("projectStatus", projectStatusMap);

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

@@ -65,10 +65,10 @@
 			<if test="projectStatus != null and projectStatus != ''">
 				AND project_status = #{projectStatus}
 			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
+			<if test="beginTime != null  "><!-- 开始时间检索 -->
 				and date_format(plan_demand_sub_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
 			</if>
-			<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
+			<if test="endTime != null  "><!-- 结束时间检索 -->
 				and date_format(plan_demand_sub_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
 			</if>
 			and del_flay=0
@@ -94,10 +94,10 @@
 			<if test="projectStatus != null and projectStatus != ''">
 				AND project_status = #{projectStatus}
 			</if>
-			<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
+			<if test="beginTime != null "><!-- 开始时间检索 -->
 				and date_format(plan_demand_sub_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
 			</if>
-			<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
+			<if test="endTime != null "><!-- 结束时间检索 -->
 				and date_format(plan_demand_sub_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
 			</if>
 			and del_flay=0

+ 0 - 30
purchase-system/src/main/resources/mapper/plan/ProvisionalPlan.xml

@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ozs.plan.mapper.ProvisionalPlanMapper">
-	<resultMap type="com.ozs.plan.doman.PlanYears" id="PlanYearsResult">
-		<id property="plan_year_id" column="planYearId"/>
-		<result property="purchase_dept_id" column="purchaseDeptId"/>
-		<result property="project_name" column="projectName"/>
-		<result property="project_type" column="projectType"/>
-		<result property="demand_overview" column="demandOverview"/>
-		<result property="evaluation" column="evaluation"/>
-		<result property="is_excess" column="isExcess"/>
-		<result property="purchase_services" column="purchaseServices"/>
-		<result property="purchase_mode" column="purchaseMode"/>
-		<result property="plan_demand_sub_time" column="planDemandSubTime"/>
-		<result property="plan_purchase_finish_time" column="planPurchaseFinishTime"/>
-		<result property="plan_deliver_time" column="planDeliverTime"/>
-		<result property="project_attr" column="projectAtt"/>
-		<result property="adjust_reason" column="adjustReason"/>
-		<result property="remarks" column="remarks"/>
-		<result property="project_status" column="projectStatus"/>
-		<result property="created" column="created"/>
-		<result property="create_time" column="createTime"/>
-		<result property="updated" column="updated"/>
-		<result property="update_time" column="updateTime"/>
-		<result property="refuse_reason" column="refuseReason"/>
-		<result property="del_flay" column="delFlay"/>
-	</resultMap>
-</mapper>

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

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ozs.plan.mapper.ProvisionalPlanMapper">
+	<resultMap type="com.ozs.plan.doman.ProvisionalPlan" id="ProvisionalPlanResult">
+		<id property="plan_year_id" column="planYearId"/>
+		<result property="plan_year_id" column="planYearId"/>
+		<result property="purchase_dept_id" column="purchaseDeptId"/>
+		<result property="project_name" column="projectName"/>
+		<result property="project_type" column="projectType"/>
+		<result property="demand_overview" column="demandOverview"/>
+		<result property="evaluation" column="evaluation"/>
+		<result property="is_excess" column="isExcess"/>
+		<result property="purchase_services" column="purchaseServices"/>
+		<result property="purchase_mode" column="purchaseMode"/>
+		<result property="plan_demand_sub_time" column="planDemandSubTime"/>
+		<result property="plan_purchase_finish_time" column="planPurchaseFinishTime"/>
+		<result property="plan_deliver_time" column="planDeliverTime"/>
+		<result property="project_attr" column="projectAttr"/>
+		<result property="adjust_reason" column="adjustReason"/>
+		<result property="remarks" column="remarks"/>
+		<result property="project_status" column="projectStatus"/>
+		<result property="refuse_reason" column="refuseReason"/>
+		<result property="del_flay" column="delFlay"/>
+		<result property="plan_type" column="planType"/>
+		<result property="created" column="created"/>
+		<result property="create_time" column="createTime"/>
+		<result property="updated" column="updated"/>
+		<result property="update_time" column="updateTime"/>
+	</resultMap>
+
+	<delete id="deleteProvisionalPlanById" parameterType="java.lang.Integer">
+		delete from plan_practical where plan_year_id = #{planYearId}
+	</delete>
+
+	<update id="updateProvisionalPlanById" parameterType="com.ozs.plan.doman.ProvisionalPlan">
+		update plan_practical
+		<set>
+			<if test="purchaseDeptId != null and purchaseDeptId != ''">
+				purchase_dept_id = #{purchaseDeptId},
+			</if>
+			<if test="projectName != null and projectName != ''">
+				project_name = #{projectName},
+			</if>
+			<if test="projectType != null and projectType != ''">
+				project_type = #{projectType},
+			</if>
+			<if test="demandOverview != null and demandOverview != ''">
+				demand_overview = #{demandOverview},
+			</if>
+			<if test="evaluation != null and evaluation != ''">
+				evaluation = #{evaluation},
+			</if>
+			<if test="isExcess != null and isExcess != '' ">
+				is_excess = #{isExcess},
+			</if>
+			<if test="purchaseServices != null and purchaseServices != '' ">
+				purchase_services = #{purchaseServices},
+			</if>
+			<if test="purchaseMode != null and purchaseMode != '' ">
+				purchase_mode = #{purchaseMode},
+			</if>
+			<if test="planDemandSubTime != null and planDemandSubTime != '' ">
+				plan_demand_sub_time = #{planDemandSubTime},
+			</if>
+			<if test="planPurchaseFinishTime != null and planPurchaseFinishTime != '' ">
+				plan_purchase_finish_time = #{planPurchaseFinishTime},
+			</if>
+			<if test="planDeliverTime != null and planDeliverTime != '' ">
+				plan_deliver_time = #{planDeliverTime},
+			</if>
+			<if test="projectAttr != null and projectAttr != '' ">
+				project_attr = #{projectAttr},
+			</if>
+			<if test="adjustReason != null and adjustReason != '' ">
+				adjust_reason = #{adjustReason},
+			</if>
+			<if test="remarks != null and remarks != '' ">
+				remarks = #{remarks},
+			</if>
+			<if test="projectStatus != null and projectStatus != '' ">
+				project_status = #{projectStatus},
+			</if>
+			<if test="refuseReason != null and refuseReason != '' ">
+				refuse_reason = #{refuseReason},
+			</if>
+			<if test="delFlay != null and delFlay != '' ">
+				del_flay = #{delFlay},
+			</if>
+			<if test="planType != null and planType != '' ">
+				plan_type = #{planType},
+			</if>
+			<if test="updated != null and updated != '' ">
+				updated = #{updated},
+			</if>
+			<if test="updateTime != null and updateTime != '' ">
+				update_time = #{updateTime},
+			</if>
+		</set>
+		where plan_year_id = #{planYearId}
+	</update>
+
+	<select id="selectProjectName" resultType="com.ozs.plan.doman.ProvisionalPlan" parameterType="java.lang.String">
+		select * from plan_practical where project_name = #{projectName} and del_flay = 0 and plan_type = 1
+	</select>
+</mapper>