diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java
index 138657e67..656da8b34 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/ExtContractController.java
@@ -1,8 +1,10 @@
 package cn.iocoder.yudao.module.cms.controller.admin.extContract;
 
+import cn.iocoder.yudao.framework.common.util.file.FileUtils;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO;
+import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDetailDO;
 import cn.iocoder.yudao.module.cms.service.extContract.ExtContractService;
 import org.springframework.web.bind.annotation.*;
 import jakarta.annotation.Resource;
@@ -68,8 +70,13 @@ public class ExtContractController {
     @Parameter(name = "id", description = "外部合同编号", required = true)
     @PreAuthorize("@ss.hasPermission('cms-ext:ext-contract:query')")
     public CommonResult<ExtContractRespVO> getExtContract(@RequestParam("id") Long id) {
-        ExtContractRespVO extContract = extContractService.getExtContract(id);
-        return success(extContract);
+        ExtContractDetailDO extContractDetailDO = extContractService.getContractDetail(id);
+        ExtContractRespVO extContractRespVO = new ExtContractRespVO();
+        org.springframework.beans.BeanUtils.copyProperties(extContractDetailDO, extContractRespVO, "contractFileUrl", "reviewFileUrl");
+        extContractRespVO.setReviewFileUrl(FileUtils.covertJSONStringToFile(extContractDetailDO.getReviewFileUrl()));
+        extContractRespVO.setContractFileUrl(FileUtils.covertJSONStringToFile(extContractDetailDO.getContractFileUrl()));
+
+        return success(extContractRespVO);
     }
 
     @GetMapping("/page")
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java
index 757a6cf17..86c0809a3 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractPageReqVO.java
@@ -20,20 +20,10 @@ public class ExtContractPageReqVO extends PageParam {
     @Schema(description = "项目id", example = "30598")
     private Long projectId;
 
-    @Schema(description = "合同名称", example = "芋艿")
-    private String name;
-
     @Schema(description = "合同类型", example = "1")
     @DictFormat(DictTypeConstants.CONTRACT_TYPE)
     private String type;
 
-    @Schema(description = "客户公司id", example = "25191")
-    private Long customerCompanyId;
-
-    @Schema(description = "合同进展")
-    private String progress;
-
-
     @Schema(description = "状态", example = "2")
     @DictFormat(DictTypeConstants.CONTRACT_STATUS)
     private String status;
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractRespVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractRespVO.java
index 424756dab..5657d0140 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractRespVO.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractRespVO.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.cms.controller.admin.extContract.vo;
 
+import cn.iocoder.yudao.framework.common.pojo.FileDTO;
 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
 import cn.iocoder.yudao.module.cms.enums.DictTypeConstants;
@@ -7,6 +8,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
+
 import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 外部合同 Response VO")
@@ -35,7 +38,7 @@ public class ExtContractRespVO {
 
     @Schema(description = "客户名称")
     @ExcelProperty("客户名称")
-    private String customerCompanyName;
+    private String constructionSide;
 
     @Schema(description = "主控部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "生产一部")
     @ExcelProperty("主控部门")
@@ -116,9 +119,9 @@ public class ExtContractRespVO {
     @ExcelProperty("备注")
     private String remark;
 
-    @Schema(description = "合同附件url", example = "https://www.iocoder.cn")
+    @Schema(description = "合同附件url")
     @ExcelProperty("合同附件url")
-    private String contractFileUrl;
+    private List<FileDTO> contractFileUrl;
 
     @Schema(description = "建安费")
     @ExcelProperty("建安费")
@@ -154,9 +157,9 @@ public class ExtContractRespVO {
     @ExcelProperty("审定金额")
     private BigDecimal approvedAmount;
 
-    @Schema(description = "审核文件url", example = "https://www.iocoder.cn")
+    @Schema(description = "审核文件url")
     @ExcelProperty("审核文件url")
-    private String reviewFileUrl;
+    private List<FileDTO> reviewFileUrl;
 
     @Schema(description = "最后编辑人")
     @ExcelProperty("最后编辑人")
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java
index 954b7600d..ef17a4c9a 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/controller/admin/extContract/vo/ExtContractSaveReqVO.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.cms.controller.admin.extContract.vo;
 
+import cn.iocoder.yudao.framework.common.pojo.FileDTO;
 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
 import cn.iocoder.yudao.module.cms.enums.DictTypeConstants;
@@ -9,6 +10,7 @@ import lombok.*;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "管理后台 - 外部合同新增/修改 Request VO")
 @Data
@@ -29,29 +31,6 @@ public class ExtContractSaveReqVO {
 
 
 
-    @Schema(description = "项目编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SJ24001")
-    @ExcelProperty("项目编号")
-    private String code;
-
-    @Schema(description = "客户名称")
-    @ExcelProperty("客户名称")
-    private String customerCompanyName;
-
-    @Schema(description = "主控部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "生产一部")
-    @ExcelProperty("主控部门")
-    private String trackingDep;
-
-    @Schema(description = "项目负责人", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("项目负责人")
-    private String projectManager;
-
-    @Schema(description = "外部合同商议提示时间")
-    @ExcelProperty("外部合同商议提示时间")
-    private LocalDateTime exReminderTime;
-
-
-
-
 
     @Schema(description = "合同名称", example = "赵六")
     @ExcelProperty("合同名称")
@@ -116,9 +95,9 @@ public class ExtContractSaveReqVO {
     @ExcelProperty("备注")
     private String remark;
 
-    @Schema(description = "合同附件url", example = "https://www.iocoder.cn")
+    @Schema(description = "合同附件url")
     @ExcelProperty("合同附件url")
-    private String contractFileUrl;
+    private List<FileDTO> contractFileUrl;
 
     @Schema(description = "建安费")
     @ExcelProperty("建安费")
@@ -154,9 +133,9 @@ public class ExtContractSaveReqVO {
     @ExcelProperty("审定金额")
     private BigDecimal approvedAmount;
 
-    @Schema(description = "审核文件url", example = "https://www.iocoder.cn")
+    @Schema(description = "审核文件url")
     @ExcelProperty("审核文件url")
-    private String reviewFileUrl;
+    private List<FileDTO> reviewFileUrl;
 
     @Schema(description = "最后编辑人")
     @ExcelProperty("最后编辑人")
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontract/ExtContractDetailDO.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontract/ExtContractDetailDO.java
index f5c24ae46..6a4247dfe 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontract/ExtContractDetailDO.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/dataobject/extcontract/ExtContractDetailDO.java
@@ -1,9 +1,7 @@
 package cn.iocoder.yudao.module.cms.dal.dataobject.extcontract;
 
-import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -12,13 +10,30 @@ import java.time.LocalDateTime;
  *  @date 2024/8/14
  */
 @Data
-public class ExtContractDetailDO extends ContractDO {
+public class ExtContractDetailDO extends ExtContractDO {
     /**
      * 项目编号
      */
     private String code;
 
+    /**
+     * 建设方
+     */
+    private String constructionSide;
 
+    /**
+     * 主控部门
+     */
+    private String trackingDep;
 
+    /**
+     * 项目负责人
+     */
+    private String projectManager;
+
+    /**
+     * 外部合同商议提示
+     */
+    private LocalDateTime exReminderTime;
 
 }
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
index 1df293240..7f579e7ae 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/dal/mysql/extContract/ExtContractMapper.java
@@ -19,9 +19,8 @@ public interface ExtContractMapper extends BaseMapperX<ExtContractDO> {
 
     default PageResult<ExtContractDO> selectPage(ExtContractPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ExtContractDO>()
-                .likeIfPresent(ExtContractDO::getName, reqVO.getName())
+                .eqIfPresent(ExtContractDO::getProjectId, reqVO.getProjectId())
                 .eqIfPresent(ExtContractDO::getType, reqVO.getType())
-                .eqIfPresent(ExtContractDO::getProgress, reqVO.getProgress())
                 .eqIfPresent(ExtContractDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(ExtContractDO::getContractId, reqVO.getContractId()));
     }
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java
index 495fa9d78..801eb749e 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractService.java
@@ -4,6 +4,7 @@ package cn.iocoder.yudao.module.cms.service.extContract;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO;
+import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDetailDO;
 import jakarta.validation.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 
@@ -45,7 +46,7 @@ public interface ExtContractService {
      * @param id 编号
      * @return 外部合同
      */
-    ExtContractRespVO getExtContract(Long id);
+    ExtContractDetailDO getContractDetail(Long id);
 
     /**
      * 获得外部合同分页
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java
index 3216f1d44..cf221e868 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/extContract/ExtContractServiceImpl.java
@@ -1,16 +1,15 @@
 package cn.iocoder.yudao.module.cms.service.extContract;
-
-import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.hutool.core.bean.BeanUtil;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO;
 import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO;
-import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO;
 import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDO;
+import cn.iocoder.yudao.module.cms.dal.dataobject.extcontract.ExtContractDetailDO;
 import cn.iocoder.yudao.module.cms.dal.mysql.extContract.ExtContractMapper;
-import cn.iocoder.yudao.module.cms.dal.mysql.extcontracthistory.ExtContractHistoryMapper;
-import cn.iocoder.yudao.module.cms.enums.ChargingStandardEnum;
-import cn.iocoder.yudao.module.cms.enums.ContractStatusEnum;
-import cn.iocoder.yudao.module.cms.enums.ContractTypeEnum;
+import cn.iocoder.yudao.module.pms.api.projectschedule.ProjectScheduleApi;
+import cn.iocoder.yudao.module.pms.api.projectschedule.dto.ProjectScheduleDetailDTO;
+import cn.iocoder.yudao.module.pms.api.projecttracking.ProjectTrackingApi;
+import cn.iocoder.yudao.module.pms.api.projecttracking.dto.ProjectTrackingDetailDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
@@ -24,7 +23,6 @@ import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
 
 /**
  * 外部合同 Service 实现类
@@ -41,6 +39,12 @@ public class ExtContractServiceImpl implements ExtContractService {
     @Resource
     private AdminUserApi adminUserApi;
 
+    @Resource
+    private ProjectTrackingApi projectTrackingApi;
+
+    @Resource
+    private ProjectScheduleApi projectScheduleApi;
+
 
 
 
@@ -86,63 +90,39 @@ public class ExtContractServiceImpl implements ExtContractService {
     }
 
     @Override
-    public ExtContractRespVO getExtContract(Long id) {
-        //校验
-        if (id == null) {
-            throw exception(EXT_CONTRACT_NOT_EXISTS);
-        }
-
+    public ExtContractDetailDO getContractDetail(Long id) {
+        ExtContractDetailDO extContractDetailDO = new ExtContractDetailDO();
         ExtContractDO extContractDO = extContractMapper.selectById(id);
+        //校验
         if (extContractDO == null) {
             throw exception(EXT_CONTRACT_NOT_EXISTS);
         }
 
         Long projectId = extContractDO.getProjectId();
+        projectTrackingApi.validateProjectExists(projectId);
+        ProjectScheduleDetailDTO projectScheduleDetail = projectScheduleApi.getProjectScheduleDetail(projectId);
+        ProjectTrackingDetailDTO projectTracking = projectTrackingApi.getProjectTracking(projectId);
+        BeanUtil.copyProperties(extContractDO, extContractDetailDO);
+        BeanUtil.copyProperties(projectTracking,extContractDetailDO);
+        BeanUtil.copyProperties(projectScheduleDetail,extContractDetailDO);
 
-
-        //Long customerCompanyId = extContractDO.getCustomerCompanyId();
-        ExtContractRespVO extContractRespVO = BeanUtils.toBean(extContractDO, ExtContractRespVO.class);
-
-        //用客户公司id查询
-        //CustomerCompanyDO customerCompanyDO = customerCompanyMapper.selectById(customerCompanyId);
-        //String name = customerCompanyDO.getName();
-        //extContractRespVO.setCustomerCompanyName(name);
-
-
-        //合同总金额
-
-
-        //合同商议提示 // TODO 待优化
-        extContractRespVO.setExReminderTime(null);
-
-        extContractRespVO.setType(ContractTypeEnum.getNoByCode(extContractRespVO.getType()));
-        extContractRespVO.setStatus(ContractStatusEnum.getNoByCode(extContractRespVO.getStatus()));
-        extContractRespVO.setCountType(ContractStatusEnum.getNoByCode(extContractRespVO.getCountType()));
-        extContractRespVO.setSource(ContractStatusEnum.getNoByCode(extContractRespVO.getSource()));
-        extContractRespVO.setChargingStandard(ChargingStandardEnum.getNoByCode(extContractRespVO.getChargingStandard()));
-
-
-        return extContractRespVO;
+        return extContractDetailDO;
     }
 
     @Override
     public PageResult<ExtContractRespVO> getExtContractPage(ExtContractPageReqVO pageReqVO) {
-        if (pageReqVO == null) {
-            throw exception(PARAM_NOT_EXISTS);
-        }
+        PageResult<ExtContractDO> extContractPage = extContractMapper.selectPage(pageReqVO);
+        List<ExtContractDO> list = extContractPage.getList();
+        List<ExtContractDetailDO> extContractDetailDOList = new ArrayList<>();
 
-        PageResult<ExtContractDO> extContractDOPageResult = extContractMapper.selectPage(pageReqVO);
-        List<ExtContractDO> excontractDOList = extContractDOPageResult.getList();
-        List<ExtContractRespVO> extContractRespVOList = new ArrayList<>();
-
-
-        for (ExtContractDO extContractDO : excontractDOList) {
+        for (ExtContractDO extContractDO : list) {
             Long id = extContractDO.getId();
-            ExtContractRespVO extContractRespVO = getExtContract(id);
-            extContractRespVOList.add(extContractRespVO);
+            ExtContractDetailDO extContractDetailDO = getContractDetail(id);
+            extContractDetailDOList.add(extContractDetailDO);
         }
+        List<ExtContractRespVO> respVOS = BeanUtils.toBean(extContractDetailDOList, ExtContractRespVO.class);
         PageResult<ExtContractRespVO> pageResult = new PageResult<>();
-        pageResult.setList(extContractRespVOList);
+        pageResult.setList(respVOS);
         return pageResult;
     }
 
diff --git a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
index 301beadd6..a7277025a 100644
--- a/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
+++ b/yudao-module-cms/yudao-module-cms-biz/src/main/java/cn/iocoder/yudao/module/cms/service/outscontract/OutsContractServiceImpl.java
@@ -3,15 +3,11 @@ package cn.iocoder.yudao.module.cms.service.outscontract;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
-import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
-import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractRespVO;
 import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO;
 import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO;
 import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO;
 import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
-import cn.iocoder.yudao.module.cms.dal.dataobject.outscontracthistory.OutsContractHistoryDO;
 import cn.iocoder.yudao.module.cms.dal.mysql.outscontract.OutsContractMapper;
-import cn.iocoder.yudao.module.cms.dal.mysql.outscontracthistory.OutsContractHistoryMapper;
 import cn.iocoder.yudao.module.cms.enums.*;
 import cn.iocoder.yudao.module.cms.service.contract.ContractService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -19,7 +15,6 @@ import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -58,106 +53,12 @@ public class OutsContractServiceImpl implements OutsContractService {
     @Resource
     private BpmProcessInstanceApi processInstanceApi;
 
-    @Resource
-    private OutsContractHistoryMapper outsContractHistoryMapper;
 
 
 
     @Override
     public Long createOutsContract(Long loginUserId,OutsContractSaveReqVO createReqVO) {
-        if (createReqVO == null) {
-            throw exception(PARAM_NOT_EXISTS);
-        }
-        if (loginUserId == null) {
-            throw exception(PARAM_NOT_EXISTS);
-        }
-        String userName = adminUserApi.getUser(loginUserId).getNickname();
-        if (userName == null) {
-            throw exception(USER_NOT_EXISTS);
-        }
-
-        OutsContractDO outsContractDO = BeanUtils.toBean(createReqVO, OutsContractDO.class);
-        //校验
-        Long projectId = outsContractDO.getProjectId();
-
-
-        //校验联表的字段是否和所联系的表内容相同
-        ContractRespVO contract = contractService.getContract(createReqVO.getContractId());
-        //        需要联表查询
-        //        1.合同名称 √
-        //        2.主控部门(跟踪部门) √
-        //        3.项目经理 √
-        //        4.签订合同总额 √
-
-        //todo 待提取 枚举优化
-        String name = createReqVO.getName();
-        String trackingDep = createReqVO.getTrackingDep();
-        String projectManager = createReqVO.getProjectManager();
-        BigDecimal outsAmount = createReqVO.getOutsAmount();
-
-
-        if (!contract.getName().equals(name)){
-            throw exception(PARAM_ERROR);
-        }
-        if (!contract.getTrackingDep().equals(trackingDep)){
-            throw exception(PARAM_ERROR);
-        }
-        if (!contract.getProjectManager().equals(projectManager)){
-            throw exception(PARAM_ERROR);
-        }
-        if (contract.getAmount().compareTo(outsAmount) != 0){
-            throw exception(PARAM_ERROR);
-        }
-
-
-
-        OutsContractRespVO outsContractRespVO = BeanUtils.toBean(outsContractDO, OutsContractRespVO.class);
-        outsContractDO.setCreator(userName);
-        outsContractDO.setUpdater(userName);
-
-
-
-        //判断该合同是否已经存在,比较各个字段值是否完全一样
-        //得到所有的合同?逐个比较?
-
-
-        List<OutsContractDO> outsContractDOList = outsContractMapper.selectList("project_id", projectId);
-        List<OutsContractRespVO> outsContractRespList = BeanUtils.toBean(outsContractDOList, OutsContractRespVO.class);
-
-        for (OutsContractRespVO respVO : outsContractRespList) {
-            if (respVO.equals(outsContractRespVO)){
-                throw exception(CONTRACT_ALREADY_EXISTS);
-            }
-        }
-        outsContractMapper.insert(outsContractDO);
-
-
-        Long outsContractDOId = outsContractDO.getId();
-        OutsContractHistoryDO outsContractHistoryDO = BeanUtils.toBean(outsContractDO, OutsContractHistoryDO.class);
-
-
-        // 启动流程,同时写入历史合同
-        if (createReqVO.getId() == null) {
-            String processInstanceId = processInstanceApi.createProcessInstance(loginUserId,
-                    new BpmProcessInstanceCreateReqDTO()
-                            .setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(outsContractDOId)));
-
-            // 写入工作流编号
-            outsContractHistoryDO.setProcessInstanceId(processInstanceId);
-            outsContractHistoryDO.setOutsContractId(outsContractDOId);
-
-            Long count = outsContractHistoryMapper.selectCount("project_id", projectId);
-            if (count < 1) {
-                outsContractHistoryDO.setVersion(VERSION);
-            } else {
-                outsContractHistoryDO.setVersion(String.valueOf(count+1));
-            }
-
-            outsContractHistoryDO.setProcessStatus("0");
-            outsContractHistoryMapper.insert(outsContractHistoryDO);
-        }
-
-        return outsContractDO.getId();
+       return null;
     }
 
     @Override
@@ -166,10 +67,6 @@ public class OutsContractServiceImpl implements OutsContractService {
         validateOutsContractExists(updateReqVO.getId());
 
         Long contractId = updateReqVO.getContractId();
-        ContractRespVO contract = contractService.getContract(contractId);
-        if (contract == null) {
-            throw exception(CONTRACT_NOT_EXISTS);
-        }
         OutsContractDO outsContractDO = outsContractMapper.selectById(updateReqVO.getId());
         if (!Objects.equals(updateReqVO.getProjectId(), outsContractDO.getProjectId())) {
             throw exception(PROJECT_NOT_EXISTS);
@@ -207,12 +104,7 @@ public class OutsContractServiceImpl implements OutsContractService {
         OutsContractDO outsContractDO = outsContractMapper.selectById(id);
         OutsContractRespVO outsContractRespVO = BeanUtils.toBean(outsContractDO, OutsContractRespVO.class);
         Long contractId = outsContractDO.getContractId();
-        ContractRespVO contract = contractService.getContract(contractId);
 
-        outsContractRespVO.setName(contract.getName());
-        outsContractRespVO.setTrackingDep(contract.getTrackingDep());
-        outsContractRespVO.setProjectManager(contract.getProjectManager());
-        outsContractRespVO.setOutsAmount(contract.getAmount());
 
         outsContractRespVO.setMajor(OutsContractMajorEnum.getNoByCode(outsContractRespVO.getMajor()));
         outsContractRespVO.setCountType(CountTypeEnum.getNoByCode(outsContractRespVO.getCountType()));
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projectschedule/dto/ProjectScheduleDetailDTO.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projectschedule/dto/ProjectScheduleDetailDTO.java
index c3b16a223..fb93563a5 100644
--- a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projectschedule/dto/ProjectScheduleDetailDTO.java
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projectschedule/dto/ProjectScheduleDetailDTO.java
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.pms.api.projectschedule.dto;
 
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 /**
  * @author wyw
  * @description
@@ -15,4 +17,9 @@ public class ProjectScheduleDetailDTO {
      */
     private String projectManager;
 
+    /**
+     * 外部合同商议提示
+     */
+    private LocalDateTime exReminderTime;
+
 }
diff --git a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projecttracking/dto/ProjectTrackingDetailDTO.java b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projecttracking/dto/ProjectTrackingDetailDTO.java
index c38ba7ba4..ce3fd2f64 100644
--- a/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projecttracking/dto/ProjectTrackingDetailDTO.java
+++ b/yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/api/projecttracking/dto/ProjectTrackingDetailDTO.java
@@ -33,4 +33,10 @@ public class ProjectTrackingDetailDTO {
      */
     private BigDecimal expectedContractAmount;
 
+    /**
+     * 建设方
+     */
+    private String constructionSide;
+
+
 }
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDO.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDO.java
index d4c56590d..a20e5c276 100644
--- a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDO.java
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDO.java
@@ -75,7 +75,7 @@ public class ProjectScheduleDO extends BaseDO {
     /**
      * 外部合同商议时间
      */
-    private LocalDateTime contractNegotiationTime;
+    private LocalDateTime exReminderTime;
     /**
      * 已完成百分比
      */
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDetailDO.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDetailDO.java
index 0c16718e0..537bdab6a 100644
--- a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDetailDO.java
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projectschedule/ProjectScheduleDetailDO.java
@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.pms.dal.dataobject.projectschedule;
 import cn.iocoder.yudao.module.pms.dal.dataobject.project.ProjectDO;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 
 /**
  * @author wyw
@@ -17,4 +19,8 @@ public class ProjectScheduleDetailDO extends ProjectDO {
      */
     private String projectManager;
 
+    /**
+     * 外部合同商议时间
+     */
+    private LocalDateTime exReminderTime;
 }
diff --git a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projecttracking/ProjectTrackingDetailDO.java b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projecttracking/ProjectTrackingDetailDO.java
index abaa87bea..7d2daeb57 100644
--- a/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projecttracking/ProjectTrackingDetailDO.java
+++ b/yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/projecttracking/ProjectTrackingDetailDO.java
@@ -36,4 +36,9 @@ public class ProjectTrackingDetailDO extends ProjectDO {
      */
     private BigDecimal expectedContractAmount;
 
+    /**
+     * 建设方
+     */
+    private String constructionSide;
+
 }