Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

buzhanyi 2 anni fa
parent
commit
88bc9cf11b

+ 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);
+    }
 }

+ 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;

+ 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;
 }

+ 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);
 }

+ 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);
 }

+ 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");
+        }
+    }
 }

+ 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>