diff --git a/ServiceSite/facade/src/main/java/com/seasky/budget/web/api/IPreliminaryController.java b/ServiceSite/facade/src/main/java/com/seasky/budget/web/api/IPreliminaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..7192f4faaa967e6c8f32e56c4cfd758c0a9f4c20
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/budget/web/api/IPreliminaryController.java
@@ -0,0 +1,25 @@
+package com.seasky.budget.web.api;
+
+
+import com.seasky.budget.web.dto.preliminary.PreliminaryCmd;
+import com.seasky.core.common.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@FeignClient("budget-project-manage")
+@RequestMapping("preliminary")
+@Api(tags = "棰勫绠$悊Controller")
+public interface IPreliminaryController {
+
+
+    @ApiOperation("淇濆瓨棰勫椤圭洰淇℃伅")
+    @PostMapping(path = "/savePreliminary")
+    Result<Long> savePreliminary(@RequestBody @NotNull @Valid PreliminaryCmd preliminaryCmd);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryCmd.java b/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryCmd.java
index e8acf2aab34ee7f49ca824d92d0416f9edffc60b..12a054215f9390d76a88ea4e4c9b75b8b32ad9d1 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryCmd.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryCmd.java
@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
-
+import java.util.List;
 
 
 @Data
@@ -50,6 +50,7 @@ public class PreliminaryCmd implements Serializable {
     @ApiModelProperty(value = "鍏朵粬", example = "")
     private String other;
 
-
+    @ApiModelProperty("闄勪欢id")
+    private List<Long> fileIds;
 
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryQuery.java b/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryQuery.java
new file mode 100644
index 0000000000000000000000000000000000000000..d52d4189d17094ef58d0befa72c360f81503c939
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/budget/web/dto/preliminary/PreliminaryQuery.java
@@ -0,0 +1,31 @@
+package com.seasky.budget.web.dto.preliminary;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = true)
+@ApiModel("棰勫琛ㄨ姹俶odel")
+public class PreliminaryQuery implements Serializable {
+
+
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1")
+    private Integer pageIndex;
+
+    @ApiModelProperty(value = "椤甸潰澶у皬", example = "10")
+    private Integer pageSize;
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/budget/business/api/PreliminaryService.java b/ServiceSite/src/main/java/com/seasky/budget/business/api/PreliminaryService.java
index f6632874b729602e5ee89eddd58957274ea0f441..759077153e59a6cebc159fbb3603489c619e3b3b 100644
--- a/ServiceSite/src/main/java/com/seasky/budget/business/api/PreliminaryService.java
+++ b/ServiceSite/src/main/java/com/seasky/budget/business/api/PreliminaryService.java
@@ -5,5 +5,5 @@ import com.seasky.budget.web.dto.preliminary.PreliminaryCmd;
 
 public interface PreliminaryService {
 
-    Long savePreliminary(PreliminaryCmd PreliminaryCmd);
+    Long savePreliminary(PreliminaryCmd preliminaryCmd);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/budget/business/entity/PreliminaryPO.java b/ServiceSite/src/main/java/com/seasky/budget/business/entity/PreliminaryPO.java
index ab3947a8a66353fb236723616d8abe89c30a9289..c95f0a10a055c6331bd3740d441e8079c3c9c749 100644
--- a/ServiceSite/src/main/java/com/seasky/budget/business/entity/PreliminaryPO.java
+++ b/ServiceSite/src/main/java/com/seasky/budget/business/entity/PreliminaryPO.java
@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
 @NoArgsConstructor
 @Accessors(chain = true)
 @Builder
-@TableName("t_Preliminary")
+@TableName("t_preliminary")
 public class PreliminaryPO extends BaseModel{
 
     @TableField("project_id")
diff --git a/ServiceSite/src/main/java/com/seasky/budget/business/service/PreliminaryServiceImpl.java b/ServiceSite/src/main/java/com/seasky/budget/business/service/PreliminaryServiceImpl.java
index ef04cba2afdf75f4c79a98c42df95295e20e26f4..a60082a09c0dc8dda8ace969232af0d2af40af37 100644
--- a/ServiceSite/src/main/java/com/seasky/budget/business/service/PreliminaryServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/budget/business/service/PreliminaryServiceImpl.java
@@ -1,9 +1,17 @@
 package com.seasky.budget.business.service;
 
 
+import com.seasky.budget.business.api.LoginService;
 import com.seasky.budget.business.api.PreliminaryService;
+import com.seasky.budget.business.dao.mapper.FileMapper;
 import com.seasky.budget.business.dao.mapper.PreliminaryMapper;
+import com.seasky.budget.business.entity.FilePO;
+import com.seasky.budget.business.entity.PreliminaryPO;
+import com.seasky.budget.business.entity.ProjectTypePO;
 import com.seasky.budget.web.dto.preliminary.PreliminaryCmd;
+import com.seasky.budget.web.dto.userInfo.UserInfo;
+import com.seasky.core.ddd.utils.MapperUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -17,17 +25,41 @@ public class PreliminaryServiceImpl   implements PreliminaryService {
     @Autowired
     private PreliminaryMapper preliminaryMapper;
 
+    @Autowired
+    private LoginService loginService;
 
-
+    @Autowired
+    private FileMapper fileMapper;
 
     @Override
-    public Long savePreliminary(PreliminaryCmd PreliminaryCmd) {
-        Long id = PreliminaryCmd.getId();
-
-
+    public Long savePreliminary(PreliminaryCmd preliminaryCmd) { //鏂板缓缂栬緫鐨勬柟娉�
+        Long id = preliminaryCmd.getId();
+        if (ObjectUtils.isEmpty(id)) {
+            UserInfo loginInfo = loginService.getLoginInfo();
+            preliminaryCmd.setOperator_author_code(loginInfo.getUserCode());
+            PreliminaryPO  PreliminaryPO = MapperUtils.INSTANCE.map(PreliminaryPO.class, preliminaryCmd);
+            preliminaryMapper.insert(PreliminaryPO);
+            id = PreliminaryPO.getId();
+        }else{
+            PreliminaryPO  PreliminaryPO = preliminaryMapper.selectById(id);
+            preliminaryMapper.updateById(PreliminaryPO);
+        }
+        preliminaryCmd.setId(id);
+        modifyPreliminaryParentId(preliminaryCmd);
+        return id;
+    }
 
+    private void modifyPreliminaryParentId(PreliminaryCmd preliminaryCmd) {
+        if (ObjectUtils.isNotEmpty(preliminaryCmd.getFileIds())) {
+            for (Long fileId :  preliminaryCmd.getFileIds()) {
+                FilePO filePO = fileMapper.selectById(fileId);
+                if (ObjectUtils.isNotEmpty(filePO) && ObjectUtils.isEmpty(filePO.getParentId())) {
+                    filePO.setParentId(preliminaryCmd.getId());
+                    fileMapper.updateById(filePO);
+                }
+            }
+        }
 
-        return id;
     }
 
 
diff --git a/ServiceSite/src/main/java/com/seasky/budget/web/controller/PreliminaryController.java b/ServiceSite/src/main/java/com/seasky/budget/web/controller/PreliminaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..96a9b1ac150f0b952f291efb8dc94a42b265e06f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/budget/web/controller/PreliminaryController.java
@@ -0,0 +1,23 @@
+package com.seasky.budget.web.controller;
+import com.seasky.budget.business.api.PreliminaryService;
+import com.seasky.budget.web.api.IPreliminaryController;
+import com.seasky.budget.web.dto.preliminary.PreliminaryCmd;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+import static com.seasky.core.common.Response.ok;
+
+@RestController
+@Slf4j
+public class PreliminaryController implements IPreliminaryController {
+    @Autowired
+    private PreliminaryService preliminaryService;
+
+    @Override
+    public Result<Long> savePreliminary(PreliminaryCmd preliminaryCmd) {
+        return ok(ResponseCode.SUCCESS, preliminaryService.savePreliminary(preliminaryCmd));
+    }
+
+}