Browse Source

增加合同管理代码、调整附件上传同步跟进记录

zjc 1 year ago
parent
commit
93c33ea7d4

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectContractController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.controller.invest;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.invest.domain.TProjectContract;
+import com.ruoyi.invest.service.ITProjectContractService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 合同管理Controller
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+@RestController
+@RequestMapping("/invest/contract")
+public class TProjectContractController extends BaseController
+{
+    @Autowired
+    private ITProjectContractService tProjectContractService;
+
+    /**
+     * 查询合同管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectContract tProjectContract)
+    {
+        startPage();
+        List<TProjectContract> list = tProjectContractService.selectTProjectContractList(tProjectContract);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出合同管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:export')")
+    @Log(title = "合同管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TProjectContract tProjectContract)
+    {
+        List<TProjectContract> list = tProjectContractService.selectTProjectContractList(tProjectContract);
+        ExcelUtil<TProjectContract> util = new ExcelUtil<TProjectContract>(TProjectContract.class);
+        util.exportExcel(response, list, "合同管理数据");
+    }
+
+    /**
+     * 获取合同管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tProjectContractService.selectTProjectContractById(id));
+    }
+
+    /**
+     * 新增合同管理
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:add')")
+    @Log(title = "合同管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TProjectContract tProjectContract)
+    {
+        return toAjax(tProjectContractService.insertTProjectContract(tProjectContract));
+    }
+
+    /**
+     * 修改合同管理
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:edit')")
+    @Log(title = "合同管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TProjectContract tProjectContract)
+    {
+        return toAjax(tProjectContractService.updateTProjectContract(tProjectContract));
+    }
+
+    /**
+     * 删除合同管理
+     */
+    @PreAuthorize("@ss.hasPermi('invest:contract:remove')")
+    @Log(title = "合同管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(tProjectContractService.deleteTProjectContractByIds(ids));
+    }
+}

+ 40 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectRecordController.java

@@ -3,8 +3,16 @@ package com.ruoyi.web.controller.invest;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.enums.FileType;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.framework.config.ServerConfig;
 import com.ruoyi.invest.domain.TProjectRecord;
 import com.ruoyi.invest.service.ITProjectRecordService;
+import com.ruoyi.tool.domain.TUnifyFile;
+import com.ruoyi.tool.service.ITUnifyFileService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -21,6 +29,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 跟进记录Controller
@@ -35,6 +44,12 @@ public class TProjectRecordController extends BaseController
     @Autowired
     private ITProjectRecordService tProjectRecordService;
 
+    @Autowired
+    private ITUnifyFileService tUnifyFileService;
+
+    @Autowired
+    private ServerConfig serverConfig;
+
     /**
      * 查询跟进记录列表
      */
@@ -76,8 +91,32 @@ public class TProjectRecordController extends BaseController
     @PreAuthorize("@ss.hasPermi('invest:record:add')")
     @Log(title = "跟进记录", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody TProjectRecord tProjectRecord)
+    public AjaxResult add(@RequestBody TProjectRecord tProjectRecord,List<MultipartFile> files)
     {
+        tProjectRecord.setId(IdUtils.fastSimpleUUID());
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            for (MultipartFile file : files)
+            {
+                // 上传并返回新文件名称
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                TUnifyFile tUnifyFile = new TUnifyFile();
+                tUnifyFile.setUploadPath(url);
+                tUnifyFile.setUploadName(fileName);
+                tUnifyFile.setNewUploadName(FileUtils.getName(fileName));
+                tUnifyFile.setUploadFormat(file.getOriginalFilename());
+                tUnifyFile.setFileBusinessId(tProjectRecord.getId());//跟进记录ID
+                tUnifyFile.setUploadType(String.valueOf(FileType.RECORD.ordinal()));//文件类型:跟进记录
+                tUnifyFileService.insertTUnifyFile(tUnifyFile);
+            }
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
         return toAjax(tProjectRecordService.insertTProjectRecord(tProjectRecord));
     }
 

+ 37 - 0
ruoyi-common/src/main/java/com/ruoyi/common/enums/FileType.java

@@ -0,0 +1,37 @@
+package com.ruoyi.common.enums;
+
+/**
+ * 文件附件类型[t_unify_file.upload_type]
+ * todo 添加枚举类型时,请依次在末尾增加枚举
+ * todo ordinal()使用方式注
+ */
+public enum FileType {
+    /**
+     * 其他
+     */
+    OTHER,
+    /**
+     * 跟进记录
+     */
+    RECORD,
+    /**
+     * 研究资料
+     */
+    GEN,
+    /**
+     * 文件资料
+     */
+    INFORMATION,
+    /**
+     * 会议记录
+     */
+    MEETING,
+    /**
+     * 渠道信息
+     */
+    CHANNEL,
+    /**
+     * 合同管理
+     */
+    CONTRACT,
+}

+ 138 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectContract.java

@@ -0,0 +1,138 @@
+package com.ruoyi.invest.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 合同管理对象 t_project_contract
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public class TProjectContract extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private String id;
+
+    /** 合同名称 */
+    @Excel(name = "合同名称")
+    private String contractName;
+
+    /** 合同类别 */
+    @Excel(name = "合同类别")
+    private String contractType;
+
+    /** 项目ID */
+    @Excel(name = "项目ID")
+    private String projectPoolId;
+
+    /** 项目阶段 */
+    @Excel(name = "项目阶段")
+    private String projectStage;
+
+    /** 会议编号 */
+    @Excel(name = "会议编号")
+    private String meetingCode;
+
+    /** 状态 */
+    private String delFlag;
+
+    /** 附件业务ID */
+    private String fileBusinessId;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setContractName(String contractName) 
+    {
+        this.contractName = contractName;
+    }
+
+    public String getContractName() 
+    {
+        return contractName;
+    }
+    public void setContractType(String contractType) 
+    {
+        this.contractType = contractType;
+    }
+
+    public String getContractType() 
+    {
+        return contractType;
+    }
+    public void setProjectPoolId(String projectPoolId) 
+    {
+        this.projectPoolId = projectPoolId;
+    }
+
+    public String getProjectPoolId() 
+    {
+        return projectPoolId;
+    }
+    public void setProjectStage(String projectStage) 
+    {
+        this.projectStage = projectStage;
+    }
+
+    public String getProjectStage() 
+    {
+        return projectStage;
+    }
+    public void setMeetingCode(String meetingCode) 
+    {
+        this.meetingCode = meetingCode;
+    }
+
+    public String getMeetingCode() 
+    {
+        return meetingCode;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setFileBusinessId(String fileBusinessId) 
+    {
+        this.fileBusinessId = fileBusinessId;
+    }
+
+    public String getFileBusinessId() 
+    {
+        return fileBusinessId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("contractName", getContractName())
+            .append("contractType", getContractType())
+            .append("projectPoolId", getProjectPoolId())
+            .append("projectStage", getProjectStage())
+            .append("meetingCode", getMeetingCode())
+            .append("delFlag", getDelFlag())
+            .append("fileBusinessId", getFileBusinessId())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/mapper/TProjectContractMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.invest.mapper;
+
+import java.util.List;
+import com.ruoyi.invest.domain.TProjectContract;
+
+/**
+ * 合同管理Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public interface TProjectContractMapper 
+{
+    /**
+     * 查询合同管理
+     * 
+     * @param id 合同管理主键
+     * @return 合同管理
+     */
+    public TProjectContract selectTProjectContractById(String id);
+
+    /**
+     * 查询合同管理列表
+     * 
+     * @param tProjectContract 合同管理
+     * @return 合同管理集合
+     */
+    public List<TProjectContract> selectTProjectContractList(TProjectContract tProjectContract);
+
+    /**
+     * 新增合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    public int insertTProjectContract(TProjectContract tProjectContract);
+
+    /**
+     * 修改合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    public int updateTProjectContract(TProjectContract tProjectContract);
+
+    /**
+     * 删除合同管理
+     * 
+     * @param id 合同管理主键
+     * @return 结果
+     */
+    public int deleteTProjectContractById(String id);
+
+    /**
+     * 批量删除合同管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTProjectContractByIds(String[] ids);
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/service/ITProjectContractService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.invest.service;
+
+import java.util.List;
+import com.ruoyi.invest.domain.TProjectContract;
+
+/**
+ * 合同管理Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+public interface ITProjectContractService 
+{
+    /**
+     * 查询合同管理
+     * 
+     * @param id 合同管理主键
+     * @return 合同管理
+     */
+    public TProjectContract selectTProjectContractById(String id);
+
+    /**
+     * 查询合同管理列表
+     * 
+     * @param tProjectContract 合同管理
+     * @return 合同管理集合
+     */
+    public List<TProjectContract> selectTProjectContractList(TProjectContract tProjectContract);
+
+    /**
+     * 新增合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    public int insertTProjectContract(TProjectContract tProjectContract);
+
+    /**
+     * 修改合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    public int updateTProjectContract(TProjectContract tProjectContract);
+
+    /**
+     * 批量删除合同管理
+     * 
+     * @param ids 需要删除的合同管理主键集合
+     * @return 结果
+     */
+    public int deleteTProjectContractByIds(String[] ids);
+
+    /**
+     * 删除合同管理信息
+     * 
+     * @param id 合同管理主键
+     * @return 结果
+     */
+    public int deleteTProjectContractById(String id);
+}

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/service/ITProjectRecordService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.invest.service;
 
 import com.ruoyi.invest.domain.TProjectRecord;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 

+ 98 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/service/impl/TProjectContractServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ruoyi.invest.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.invest.mapper.TProjectContractMapper;
+import com.ruoyi.invest.domain.TProjectContract;
+import com.ruoyi.invest.service.ITProjectContractService;
+
+/**
+ * 合同管理Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-02-23
+ */
+@Service
+public class TProjectContractServiceImpl implements ITProjectContractService 
+{
+    @Autowired
+    private TProjectContractMapper tProjectContractMapper;
+
+    /**
+     * 查询合同管理
+     * 
+     * @param id 合同管理主键
+     * @return 合同管理
+     */
+    @Override
+    public TProjectContract selectTProjectContractById(String id)
+    {
+        return tProjectContractMapper.selectTProjectContractById(id);
+    }
+
+    /**
+     * 查询合同管理列表
+     * 
+     * @param tProjectContract 合同管理
+     * @return 合同管理
+     */
+    @Override
+    public List<TProjectContract> selectTProjectContractList(TProjectContract tProjectContract)
+    {
+        return tProjectContractMapper.selectTProjectContractList(tProjectContract);
+    }
+
+    /**
+     * 新增合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    @Override
+    public int insertTProjectContract(TProjectContract tProjectContract)
+    {
+        tProjectContract.setCreateTime(DateUtils.getNowDate());
+        tProjectContract.setId(IdUtils.fastSimpleUUID());
+        return tProjectContractMapper.insertTProjectContract(tProjectContract);
+    }
+
+    /**
+     * 修改合同管理
+     * 
+     * @param tProjectContract 合同管理
+     * @return 结果
+     */
+    @Override
+    public int updateTProjectContract(TProjectContract tProjectContract)
+    {
+        tProjectContract.setUpdateTime(DateUtils.getNowDate());
+        return tProjectContractMapper.updateTProjectContract(tProjectContract);
+    }
+
+    /**
+     * 批量删除合同管理
+     * 
+     * @param ids 需要删除的合同管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTProjectContractByIds(String[] ids)
+    {
+        return tProjectContractMapper.deleteTProjectContractByIds(ids);
+    }
+
+    /**
+     * 删除合同管理信息
+     * 
+     * @param id 合同管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTProjectContractById(String id)
+    {
+        return tProjectContractMapper.deleteTProjectContractById(id);
+    }
+}

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/service/impl/TProjectRecordServiceImpl.java

@@ -8,6 +8,7 @@ import com.ruoyi.invest.mapper.TProjectRecordMapper;
 import com.ruoyi.invest.service.ITProjectRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 跟进记录Service业务层处理
@@ -55,7 +56,6 @@ public class TProjectRecordServiceImpl implements ITProjectRecordService
     public int insertTProjectRecord(TProjectRecord tProjectRecord)
     {
         tProjectRecord.setCreateTime(DateUtils.getNowDate());
-        tProjectRecord.setId(IdUtils.fastSimpleUUID());
         return tProjectRecordMapper.insertTProjectRecord(tProjectRecord);
     }
 

+ 106 - 0
ruoyi-system/src/main/resources/mapper/invest/TProjectContractMapper.xml

@@ -0,0 +1,106 @@
+<?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.ruoyi.invest.mapper.TProjectContractMapper">
+    
+    <resultMap type="TProjectContract" id="TProjectContractResult">
+        <result property="id"    column="id"    />
+        <result property="contractName"    column="contract_name"    />
+        <result property="contractType"    column="contract_type"    />
+        <result property="projectPoolId"    column="project_pool_id"    />
+        <result property="projectStage"    column="project_stage"    />
+        <result property="meetingCode"    column="meeting_code"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="fileBusinessId"    column="file_business_id"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectTProjectContractVo">
+        select id, contract_name, contract_type, project_pool_id, project_stage, meeting_code, del_flag, file_business_id, remark, create_by, create_time, update_by, update_time from t_project_contract
+    </sql>
+
+    <select id="selectTProjectContractList" parameterType="TProjectContract" resultMap="TProjectContractResult">
+        <include refid="selectTProjectContractVo"/>
+        <where>  
+            <if test="contractName != null  and contractName != ''"> and contract_name like concat('%', #{contractName}, '%')</if>
+            <if test="contractType != null  and contractType != ''"> and contract_type = #{contractType}</if>
+            <if test="projectPoolId != null  and projectPoolId != ''"> and project_pool_id = #{projectPoolId}</if>
+            <if test="projectStage != null  and projectStage != ''"> and project_stage = #{projectStage}</if>
+            <if test="meetingCode != null  and meetingCode != ''"> and meeting_code = #{meetingCode}</if>
+        </where>
+    </select>
+    
+    <select id="selectTProjectContractById" parameterType="String" resultMap="TProjectContractResult">
+        <include refid="selectTProjectContractVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTProjectContract" parameterType="TProjectContract">
+        insert into t_project_contract
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="contractName != null">contract_name,</if>
+            <if test="contractType != null">contract_type,</if>
+            <if test="projectPoolId != null">project_pool_id,</if>
+            <if test="projectStage != null">project_stage,</if>
+            <if test="meetingCode != null">meeting_code,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="fileBusinessId != null">file_business_id,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="contractName != null">#{contractName},</if>
+            <if test="contractType != null">#{contractType},</if>
+            <if test="projectPoolId != null">#{projectPoolId},</if>
+            <if test="projectStage != null">#{projectStage},</if>
+            <if test="meetingCode != null">#{meetingCode},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="fileBusinessId != null">#{fileBusinessId},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTProjectContract" parameterType="TProjectContract">
+        update t_project_contract
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="contractName != null">contract_name = #{contractName},</if>
+            <if test="contractType != null">contract_type = #{contractType},</if>
+            <if test="projectPoolId != null">project_pool_id = #{projectPoolId},</if>
+            <if test="projectStage != null">project_stage = #{projectStage},</if>
+            <if test="meetingCode != null">meeting_code = #{meetingCode},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="fileBusinessId != null">file_business_id = #{fileBusinessId},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTProjectContractById" parameterType="String">
+        delete from t_project_contract where id = #{id}
+    </delete>
+
+    <delete id="deleteTProjectContractByIds" parameterType="String">
+        delete from t_project_contract where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>