diff --git a/ServiceSite/facade/pom.xml b/ServiceSite/facade/pom.xml
index 3678fb50d6b5dfc5553084a95d3a776c71c39e8f..cdb978d780260441842dd444acd13ee03a6d9de2 100644
--- a/ServiceSite/facade/pom.xml
+++ b/ServiceSite/facade/pom.xml
@@ -78,6 +78,14 @@
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-openfeign</artifactId>
 		</dependency>
+
+		<dependency>
+			<groupId>com.seasky</groupId>
+			<artifactId>base-data-micro-api</artifactId>
+			<version>1.1.0</version>
+			<scope>compile</scope>
+		</dependency>
+
 	</dependencies>
 
 	<distributionManagement>
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/IAttachmentController.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/IAttachmentController.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b4acca29be5b42d8d44b6b034e2a16997b46ff6
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/IAttachmentController.java
@@ -0,0 +1,57 @@
+package com.seasky.adjustproject.api;
+
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.core.common.Result;
+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 org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/22 15:52
+ */
+@FeignClient("dddtemplate-provider")
+@RequestMapping("attachment")
+public interface IAttachmentController {
+
+    /**
+     * 淇濆瓨闄勪欢
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link Result}<{@link Object}>
+     */
+    @PostMapping(path = "/saveAttachment")
+    Result<Object> saveAttachment(@RequestBody AttachmentCmd attachmentCmd);
+
+    /**
+     * 鍒犻櫎闄勪欢
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link Result}<{@link Object}>
+     */
+    @PostMapping(path = "/removeAttachment")
+    Result<Object> removeAttachment(@RequestBody AttachmentCmd attachmentCmd);
+
+    /**
+     * 閫氳繃id鑾峰彇闄勪欢
+     *
+     * @param id id
+     * @return {@link Result}<{@link AttachmentQry}>
+     */
+    @PostMapping(path = "/getAttachmentById")
+    Result<AttachmentOut> getAttachmentById(@RequestParam Long id);
+
+    /**
+     * 闄勪欢鍒楄〃
+     *
+     * @param attachmentQry 闄勪欢qry
+     * @return {@link Result}<{@link AttachmentOut}>
+     */
+    @PostMapping(path = "/listAttachment")
+    Result<AttachmentOut> listAttachment(@RequestBody AttachmentQry attachmentQry);
+
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestController.java
new file mode 100644
index 0000000000000000000000000000000000000000..500f16a45f976a884404d57eecc5fdc13619e46f
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestController.java
@@ -0,0 +1,41 @@
+package com.seasky.adjustproject.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.adjustproject.dto.test.TestCmd;
+import com.seasky.adjustproject.dto.test.TestQueryOut;
+import com.seasky.adjustproject.dto.test.TestQueryQry;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.io.UnsupportedEncodingException;
+
+@FeignClient("dddtemplate-provider")
+@RequestMapping("test")
+@Api("Test")
+public interface ITestController {
+
+    @ApiOperation("1.testQ")
+    @PostMapping(path = "/pc/v1/queryList")
+    Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry);
+
+    @ApiOperation("2.testExport")
+    @PostMapping(path = "/pc/v1/export")
+    ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException;
+
+    @ApiOperation("3.testSave")
+    @PostMapping(path = "/pc/v1/save")
+    Result<Long> testSave(@RequestBody TestCmd testCmd);
+
+    @ApiOperation("4.testSubmit")
+    @PostMapping(path = "/pc/v1/submit")
+    Result<Long> testSubmit(@RequestBody TestCmd testCmd);
+
+    @ApiOperation("5.testSaveAndSubmit")
+    @PostMapping(path = "/pc/v1/saveandsubmit")
+    Result<Long> testSaveAndSubmit(@RequestBody TestCmd testCmd);
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestWebService.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestWebService.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4bf404ad9d6991aee54de4ad35ec9b9fe6c0310
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/api/ITestWebService.java
@@ -0,0 +1,16 @@
+package com.seasky.adjustproject.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.adjustproject.dto.test.TestQueryOut;
+import com.seasky.adjustproject.dto.test.TestQueryQry;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+
+@WebService(name = "TestService", targetNamespace = "http://www.seaskysh.com")
+public interface ITestWebService {
+    @WebMethod
+    Result<TestQueryOut> testQ(@WebParam TestQueryQry testQry);
+}
+
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentCmd.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentCmd.java
new file mode 100644
index 0000000000000000000000000000000000000000..abc6e36cb3ce100719f38bf48dfea7562a5aacd4
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentCmd.java
@@ -0,0 +1,46 @@
+package com.seasky.adjustproject.dto.attachment;
+
+import com.seasky.micro.basedata.dto.BaseDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.InputStream;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:35
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AttachmentCmd extends BaseDTO {
+
+    /**
+     * 闄勪欢鍚嶇О
+     */
+    private String fileName;
+
+    /**
+     * 澶栭儴鍏宠仈瀛楁id
+     */
+    private Long parentId;
+
+    /**
+     * 鏂囦欢娴�
+     */
+    private InputStream fileStream;
+
+    /**
+     * 鍚庣紑
+     */
+    private String extension;
+
+    /**
+     * 鍧愭爣
+     */
+    private String coordinate;
+
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentOut.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentOut.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e80bcf0fb56dbc7c1224487bd2b222807198e18
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentOut.java
@@ -0,0 +1,45 @@
+package com.seasky.adjustproject.dto.attachment;
+
+import com.seasky.micro.basedata.dto.BaseDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.InputStream;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/22 16:01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AttachmentOut extends BaseDTO {
+    /**
+     * 闄勪欢鍚嶇О
+     */
+    private String fileName;
+
+    /**
+     * 澶栭儴鍏宠仈瀛楁id
+     */
+    private Long parentId;
+
+    /**
+     * 鏂囦欢娴�
+     */
+    private InputStream fileStream;
+
+    /**
+     * 鍚庣紑
+     */
+    private String extension;
+
+    /**
+     * 鍧愭爣
+     */
+    private String coordinate;
+
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentQry.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentQry.java
new file mode 100644
index 0000000000000000000000000000000000000000..97817f9b2181bbcdc9cd082d2f36710345e3af08
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/attachment/AttachmentQry.java
@@ -0,0 +1,45 @@
+package com.seasky.adjustproject.dto.attachment;
+
+import com.seasky.micro.basedata.dto.BaseDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.InputStream;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/22 16:02
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AttachmentQry extends BaseDTO {
+    /**
+     * 闄勪欢鍚嶇О
+     */
+    private String fileName;
+
+    /**
+     * 澶栭儴鍏宠仈瀛楁id
+     */
+    private Long parentId;
+
+    /**
+     * 鏂囦欢娴�
+     */
+    private InputStream fileStream;
+
+    /**
+     * 鍚庣紑
+     */
+    private String extension;
+
+    /**
+     * 鍧愭爣
+     */
+    private String coordinate;
+
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestCmd.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestCmd.java
new file mode 100644
index 0000000000000000000000000000000000000000..86a7d326e29050a3dbddcbf4ac49af4363a804b3
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestCmd.java
@@ -0,0 +1,32 @@
+package com.seasky.adjustproject.dto.test;
+
+
+import com.seasky.core.ddd.base.objects.BaseDTO;
+import lombok.Data;
+
+/**
+ * 绀轰緥cmd
+ * 姝ょ被涓篊绾挎帴鍙d紶鍏ョ殑鍙傛暟绫�  鍦―DD缁撴瀯涓睘浜巃pplication灞傜殑 DTO绫�
+ * 闇€瑕佺户鎵� BaseDto
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@Data
+public class TestCmd extends BaseDTO {
+    /**
+     * 鍚嶅瓧
+     */
+    private String name;
+    /**
+     * 缂栧彿
+     */
+    private String code;
+    /**
+     * 鎬у埆
+     */
+    private String sex;
+    /**
+     * 骞撮緞
+     */
+    private Integer age;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryOut.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryOut.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e59aade9cd66e73238d832166983ae14b319bfe
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryOut.java
@@ -0,0 +1,60 @@
+package com.seasky.adjustproject.dto.test;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.seasky.core.ddd.base.objects.BaseDTO;
+import com.seasky.core.enums.Available;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 娴嬭瘯Out绫�
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ * JsonInclude(JsonInclude.Include.ALWAYS)  ---> 浠讳綍鎯呭喌涓嬮兘搴忓垪鍖栬瀛楁 ,鏁版嵁搴撹繑鍥炲€间负绌烘椂,浠嶇劧杩斿洖璇ュ瓧娈电粰鍓嶇 涓旇瀛楁涓� null
+ */
+@Data
+@NoArgsConstructor
+@JsonInclude(JsonInclude.Include.ALWAYS)
+public class TestQueryOut extends BaseDTO implements Serializable {
+    /**
+     * 涓婚敭
+     */
+    private Long id;
+    /**
+     * 鍚嶅瓧
+     */
+    private String name;
+    /**
+     * 缂栧彿
+     */
+    private String code;
+    /**
+     * 鎬у埆
+     */
+    private String sex;
+    /**
+     * 骞撮緞
+     */
+    private Integer age;
+
+
+    protected Date createDate;
+
+    protected Long creator;
+
+    protected Long updator;
+
+    protected Date updateDate;
+
+    protected Available available;
+
+    protected String remark;
+
+    protected Date versionDate;
+
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryQry.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryQry.java
new file mode 100644
index 0000000000000000000000000000000000000000..094940bab2e0b50b46cf0b11d4ea21527c9db46f
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/dto/test/TestQueryQry.java
@@ -0,0 +1,36 @@
+package com.seasky.adjustproject.dto.test;
+
+import com.seasky.core.ddd.base.objects.BaseDTO;
+import lombok.Data;
+
+/**
+ * 娴嬭瘯qry
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@Data
+public class TestQueryQry extends BaseDTO {
+
+    /**
+     * 鍚嶅瓧
+     */
+    private String name;
+    /**
+     * 缂栧彿
+     */
+    private String code;
+    /**
+     * 鎬у埆
+     */
+    private String sex;
+    /**
+     * 骞撮緞
+     */
+    private Integer age;
+
+
+    private Integer pageIndex;
+
+    private Integer pageSize;
+}
diff --git a/ServiceSite/facade/src/main/java/com/seasky/adjustproject/enums/EnumTest.java b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/enums/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f06c0cd403a9826ffe511169df99f9886c58f3f5
--- /dev/null
+++ b/ServiceSite/facade/src/main/java/com/seasky/adjustproject/enums/EnumTest.java
@@ -0,0 +1,4 @@
+package com.seasky.adjustproject.enums;
+
+public enum EnumTest {
+}
diff --git a/ServiceSite/pom.xml b/ServiceSite/pom.xml
index 93e0cd1ac4447739c27f7c83c7cef30f0c6b9542..a30392926d74fe421412934e4248e8e68ce71c5e 100644
--- a/ServiceSite/pom.xml
+++ b/ServiceSite/pom.xml
@@ -201,6 +201,12 @@
             <artifactId>seata-spring-boot-starter</artifactId>
             <version>1.4.2</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.seasky</groupId>
+            <artifactId>base-data-micro-api</artifactId>
+            <version>1.1.0</version>
+        </dependency>
         <!--seata-->
         <!-- 鏃ュ織璁板綍SkyWalking -->
         <dependency>
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/AttachmentAssembler.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/AttachmentAssembler.java
new file mode 100644
index 0000000000000000000000000000000000000000..421c7f10538af8108b40fb74813d3c5748d83c22
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/AttachmentAssembler.java
@@ -0,0 +1,35 @@
+package com.seasky.adjustproject.application.command.assembler;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.core.ddd.utils.MapperUtils;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:32
+ */
+public class AttachmentAssembler {
+
+    /**
+     * 闄勪欢cmd杞珹gg
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link AttachmentAgg}
+     */
+    public static AttachmentAgg attachmentCmdToAgg(AttachmentCmd attachmentCmd) {
+        return MapperUtils.INSTANCE.map(AttachmentAgg.class, attachmentCmd);
+    }
+
+    /**
+     * 闄勪欢Agg杞琌ut
+     *
+     * @param attachmentAgg 闄勪欢gg
+     * @return {@link AttachmentOut}
+     */
+    public static AttachmentOut attachmentAggToOut(AttachmentAgg attachmentAgg) {
+        return MapperUtils.INSTANCE.map(AttachmentOut.class, attachmentAgg);
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/TestAssembler.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/TestAssembler.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffc90a8f5a91277aac3d4bb4f77972a9c1229e70
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/assembler/TestAssembler.java
@@ -0,0 +1,32 @@
+package com.seasky.adjustproject.application.command.assembler;
+
+
+import com.seasky.core.ddd.utils.MapperUtils;
+import com.seasky.adjustproject.domain.aggregate.test.TestAggregate;
+import com.seasky.adjustproject.dto.test.TestCmd;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绀轰緥宸ュ巶绫�
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+public class TestAssembler {
+
+
+    /**
+     * 鏋勫缓绀轰緥鑱氬悎鏍�
+     *
+     * @param testCmd 娴嬭瘯cmd
+     * @return {@link TestAggregate}
+     */
+    public static TestAggregate buildTestAggregate(TestCmd testCmd) {
+        //杞崲瀵瑰簲閿€糾ap
+        Map<String, String> map = new HashMap<>(3);
+        TestAggregate testAggregate = MapperUtils.INSTANCE.map(TestAggregate.class,testCmd);
+        return testAggregate;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/AttachmentCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/AttachmentCmdServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c40c87f9129d3313d340cd5a61672767aa58c15a
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/AttachmentCmdServiceImpl.java
@@ -0,0 +1,74 @@
+package com.seasky.adjustproject.application.command.attachment;
+
+import com.seasky.adjustproject.application.command.assembler.AttachmentAssembler;
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.domain.service.api.IAttachmentDomainService;
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.adjustproject.infrastructure.db.mapper.table.AttachmentMapper;
+import com.seasky.core.base.AbstractService;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataAccessException;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:21
+ */
+@Service
+public class AttachmentCmdServiceImpl extends AbstractService<AttachmentPO, AttachmentMapper> implements IAttachmentCmdService {
+
+    @Resource
+    IAttachmentDomainService IAttachmentDomainService;
+
+    /**
+     * 淇濆瓨
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link Long}
+     */
+    @Override
+    public Long saveAttachment(AttachmentCmd attachmentCmd) {
+        AttachmentAgg attachmentAgg = AttachmentAssembler.attachmentCmdToAgg(attachmentCmd);
+        return IAttachmentDomainService.saveAttachment(attachmentAgg);
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     */
+    @Override
+    public void removeAttachment(AttachmentCmd attachmentCmd) {
+        if (ObjectUtils.isEmpty(attachmentCmd.getId())) {
+            throw new DataAccessException(
+                    Error.builder()
+                            .responseCode(ResponseCode.DATA_VERIFY_NULL_POINTER)
+                            .message("id涓嶈兘浣嶇┖")
+                            .build()
+            );
+        }
+        AttachmentAgg attachmentAgg = AttachmentAssembler.attachmentCmdToAgg(attachmentCmd);
+        IAttachmentDomainService.removeAttachment(attachmentAgg);
+    }
+
+    /**
+     * 鏌ヨ闄勪欢Agg
+     *
+     * @param id id
+     * @return {@link AttachmentAgg}
+     */
+    @Override
+    public AttachmentOut getAttachmentById(Long id) {
+        AttachmentAgg byPersistentId = IAttachmentDomainService.getAttachmentById(id);
+        return AttachmentAssembler.attachmentAggToOut(byPersistentId);
+
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/IAttachmentCmdService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/IAttachmentCmdService.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb7ea3b62aad001a45ac59cbd82654027422a014
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/attachment/IAttachmentCmdService.java
@@ -0,0 +1,40 @@
+package com.seasky.adjustproject.application.command.attachment;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.core.base.BaseService;
+import org.checkerframework.checker.units.qual.A;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:20
+ */
+public interface IAttachmentCmdService extends BaseService<AttachmentPO> {
+
+    /**
+     * 淇濆瓨
+     *
+     * @param attachmentCmd
+     * @return {@link Long}
+     */
+    Long saveAttachment(AttachmentCmd attachmentCmd);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     */
+    void removeAttachment(AttachmentCmd attachmentCmd);
+
+    /**
+     * 鏌ヨ闄勪欢Agg
+     *
+     * @param id id
+     * @return {@link AttachmentAgg}
+     */
+    AttachmentOut getAttachmentById(Long id);
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/test/TestCmdService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/test/TestCmdService.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6cb9f5e6bd79c0267037b64e38495cf1521682c
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/command/test/TestCmdService.java
@@ -0,0 +1,31 @@
+package com.seasky.adjustproject.application.command.test;
+
+import com.seasky.adjustproject.dto.test.TestCmd;
+
+public interface TestCmdService {
+    /**
+     * 淇濆瓨绀轰緥
+     *
+     * @param testCmd 娴嬭瘯cmd
+     * @return int
+     */
+    Long SaveTest(TestCmd testCmd);
+
+    /**
+     * 鎻愪氦绀轰緥
+     *
+     * @param testCmd 娴嬭瘯cmd
+     * @return int
+     */
+    Long SubmitTest(TestCmd testCmd);
+
+    /**
+     * 淇濆瓨骞舵彁浜ょず渚�
+     *
+     * @param testCmd 娴嬭瘯cmd
+     * @return int
+     */
+    Long SavaAndSubmitTest(TestCmd testCmd);
+
+    void Delete(TestCmd testCmd);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/TestQueryService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/TestQueryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..367930b3d0ad6644855bd45deec61174b6910a07
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/TestQueryService.java
@@ -0,0 +1,27 @@
+package com.seasky.adjustproject.application.query;
+
+
+import com.seasky.core.base.BaseService;
+import com.seasky.adjustproject.dto.test.TestQueryOut;
+import com.seasky.adjustproject.dto.test.TestQueryQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.TestPo;
+
+import java.util.List;
+
+/**
+ * 娴嬭瘯鏌ヨ鏈嶅姟
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+public interface TestQueryService extends BaseService<TestPo> {
+
+
+    /**
+     * 鏌ヨ娴嬭瘯
+     *
+     * @param testQry 娴嬭瘯qry
+     * @return {@link TestQueryOut}
+     */
+    List<TestQueryOut> queryTestList(TestQueryQry testQry);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/attachment/IAttachmentQueryService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/attachment/IAttachmentQueryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d34fb82d571d0702d33127680233f4f5f1744ba
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/application/query/attachment/IAttachmentQueryService.java
@@ -0,0 +1,27 @@
+package com.seasky.adjustproject.application.query.attachment;
+
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.core.base.BaseService;
+import com.seasky.core.common.Pagination;
+import org.simpleframework.xml.core.Validate;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:25
+ */
+@Validated
+public interface IAttachmentQueryService extends BaseService<AttachmentPO> {
+
+    /**
+     * 闄勪欢鍒楄〃
+     *
+     * @param attachmentQry 闄勪欢qry
+     * @return {@link Pagination}<{@link AttachmentOut}>
+     */
+    Pagination<AttachmentOut> listAttachment(@RequestBody AttachmentQry attachmentQry);
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/AttachmentAgg.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/AttachmentAgg.java
new file mode 100644
index 0000000000000000000000000000000000000000..b89277f0db20bd6b80125ec2b6d0cb8391b7f425
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/AttachmentAgg.java
@@ -0,0 +1,65 @@
+package com.seasky.adjustproject.domain.aggregate.attachmentAggregate;
+
+import com.seasky.core.ddd.base.BaseAggregate;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.io.InputStream;
+
+/**
+ * @Author wangxingjun
+ * 闄勪欢Agg
+ * @Data 2022/4/20 10:36
+ */
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttachmentAgg extends BaseAggregate {
+
+    /**
+     * 闄勪欢鍚嶇О
+     */
+    private String fileName;
+
+    /**
+     * 澶栭儴鍏宠仈瀛楁id
+     */
+    private Long parentId;
+
+    /**
+     * 鏂囦欢娴�
+     */
+    private InputStream fileStream;
+
+    /**
+     * 鍚庣紑
+     */
+    private String extension;
+
+    /**
+     * 鍧愭爣
+     */
+    private String coordinate;
+
+    /**
+     * 淇敼
+     *
+     * @param attachmentAgg 闄勪欢gg
+     */
+    public void modify(AttachmentAgg attachmentAgg) {
+
+        this.fileName = attachmentAgg.getFileName();
+        this.parentId = attachmentAgg.getParentId();
+        this.fileStream = attachmentAgg.getFileStream();
+        this.extension = attachmentAgg.getExtension();
+        this.coordinate = attachmentAgg.getCoordinate();
+
+    }
+
+    @Override
+    protected String iniDescribeName() {
+        return "闄勪欢Agg";
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/IAttachmentRepository.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/IAttachmentRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d1d995ff165b69ef185989fc06813334d5158db
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/attachmentAggregate/IAttachmentRepository.java
@@ -0,0 +1,19 @@
+package com.seasky.adjustproject.domain.aggregate.attachmentAggregate;
+
+import com.seasky.core.ddd.base.DddRepository;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/20 10:48
+ */
+public interface IAttachmentRepository extends DddRepository<AttachmentAgg> {
+
+    /**
+     * 淇敼闄勪欢
+     *
+     * @param attachmentAgg 闄勪欢gg
+     * @return {@link Long}
+     */
+    Long modifyAttachment(AttachmentAgg attachmentAgg);
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/flow/FlowAggregate.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/flow/FlowAggregate.java
new file mode 100644
index 0000000000000000000000000000000000000000..fdb0b35d261774e9a11a32e809b0cb2cb7108d77
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/flow/FlowAggregate.java
@@ -0,0 +1,14 @@
+package com.seasky.adjustproject.domain.aggregate.flow;
+
+import lombok.Data;
+
+@Data
+public class FlowAggregate {
+    private String status;
+    private String userCode;
+    private String flowID;
+
+    public void submit(String userCode){
+        this.userCode = userCode;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/message/MessageAggregate.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/message/MessageAggregate.java
new file mode 100644
index 0000000000000000000000000000000000000000..6369e75d001c486bce6b92ba4480b39a0eeb8fa1
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/message/MessageAggregate.java
@@ -0,0 +1,5 @@
+package com.seasky.adjustproject.domain.aggregate.message;
+
+public class MessageAggregate {
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestAggregate.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestAggregate.java
new file mode 100644
index 0000000000000000000000000000000000000000..8209c6488ca549ea53a8aa8f7d3d459b37226772
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestAggregate.java
@@ -0,0 +1,67 @@
+package com.seasky.adjustproject.domain.aggregate.test;
+
+
+import com.seasky.core.ddd.base.BaseAggregate;
+import lombok.*;
+
+/**
+ * 绀轰緥鑱氬悎鏍�
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+public class TestAggregate extends BaseAggregate {
+
+    /**
+     * 鍚嶅瓧
+     */
+    private String name;
+    /**
+     * 缂栧彿
+     */
+    private String code;
+    /**
+     * 鎬у埆
+     */
+    private String sex;
+    /**
+     * 骞撮緞
+     */
+    private Integer age;
+
+    /**
+     * 鐘舵€�
+     */
+    private String status;
+
+    @Override
+    protected String iniDescribeName() {
+        return "绀轰緥";
+    }
+
+    public TestAggregate updata(TestAggregate aggregate) {
+        // 杩涜鏍¢獙 渚嬪骞撮緞澶т簬0 灏忎簬 150
+        // name code涓笉鑳芥湁鐗规畩瀛楃绛�
+        this.name = aggregate.name;
+        this.code = aggregate.code;
+        this.sex = aggregate.sex;
+        this.age = aggregate.age;
+        this.id = aggregate.id;
+        return this;
+    }
+
+    public TestAggregate submit(String status) {
+        this.status = status;
+        return this;
+    }
+
+    public String BuildSubmitMessage() {
+        return "";
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestRepository.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..47da3a4f1c25958b7b802ca0ae58580d72160af4
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/test/TestRepository.java
@@ -0,0 +1,19 @@
+package com.seasky.adjustproject.domain.aggregate.test;
+
+import com.seasky.core.ddd.base.DddRepository;
+
+/**
+ * 绀轰緥瀛樺偍搴�
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+public interface TestRepository extends DddRepository<TestAggregate> {
+    /**
+     * 淇濆瓨绀轰緥
+     *
+     * @param testAggregate 绀轰緥鑱氬悎鏍�
+     * @return int
+     */
+    int saveTest(TestAggregate testAggregate);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/value/TestVO.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/value/TestVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..3cf0914a8e7e8392788aec38d9b4482587110e9b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/aggregate/value/TestVO.java
@@ -0,0 +1,4 @@
+package com.seasky.adjustproject.domain.aggregate.value;
+
+public class TestVO {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/DeleteTestEvent.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/DeleteTestEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..785fc14fef0f68956fe9c5f56a4364ea05c65f9b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/DeleteTestEvent.java
@@ -0,0 +1,26 @@
+package com.seasky.adjustproject.domain.event;
+
+import com.seasky.core.common.SpringContainer;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DeleteTestEvent extends ApplicationEvent {
+
+    public DeleteTestEvent() {
+        super("");
+    }
+
+    DeleteTestEvent(String userCode){
+        super(userCode);
+    }
+
+    /**
+     * 鍙戝竷娑堟伅
+     */
+    public void DeleteVerify(String userCode){
+        ApplicationEvent event = new DeleteTestEvent(userCode);
+        SpringContainer.getContainer().publishEvent(event);
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/SendMessageEvent.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/SendMessageEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d9e5969ff2dd3085a0e938c5c871f49ba984028
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/event/SendMessageEvent.java
@@ -0,0 +1,41 @@
+package com.seasky.adjustproject.domain.event;
+
+import com.seasky.core.common.SpringContainer;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.stereotype.Service;
+
+/**
+ * 瀹氫箟涓€涓彂閫佹秷鎭殑event
+ *
+ */
+@Service
+public class SendMessageEvent extends ApplicationEvent {
+    String message; // 娑堟伅鍐呭
+    public String getMessage(){
+        return this.message;
+    }
+
+    String user;
+    public String getUser(){
+        return this.user;
+    }
+
+    public SendMessageEvent() {
+        super("");
+    }
+
+    SendMessageEvent(String message,String  user){
+        super(message);
+        this.message = message;
+        this.user = user;
+    }
+
+    /**
+     * 鍙戝竷娑堟伅
+     */
+    public void send(String message, String  user){
+        ApplicationEvent event = new SendMessageEvent(message, user);
+        SpringContainer.getContainer().publishEvent(event);
+    }
+
+}
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/primitive/TestPrimitive.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/primitive/TestPrimitive.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4a18dbee4c730aff86bc8f0201b3a8a2abb3b5e
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/primitive/TestPrimitive.java
@@ -0,0 +1,4 @@
+package com.seasky.adjustproject.domain.primitive;
+
+public class TestPrimitive {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/FlowDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/FlowDomainServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca06ab76c1c0839eb827057d7123d22a1e711f85
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/FlowDomainServiceImpl.java
@@ -0,0 +1,17 @@
+package com.seasky.adjustproject.domain.service;
+
+import com.seasky.adjustproject.domain.event.DeleteTestEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FlowDomainServiceImpl {
+
+    @EventListener
+    @Order(0)
+    public void deleteTestVerify(DeleteTestEvent event) {
+        // 杩涜鍒犻櫎test鐨勬牎楠�
+        System.out.println("娴佺▼鏀跺埌鍒犻櫎浜嬩欢锛屽弬鏁�:" + event.getSource());//鑾峰彇鍙傛暟
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/IAttachmentDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/IAttachmentDomainServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a88855ca5a3f22bd192444edfecba97661fb1b39
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/IAttachmentDomainServiceImpl.java
@@ -0,0 +1,78 @@
+package com.seasky.adjustproject.domain.service;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.IAttachmentRepository;
+import com.seasky.adjustproject.domain.service.api.IAttachmentDomainService;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.adjustproject.infrastructure.db.mapper.table.AttachmentMapper;
+import com.seasky.core.base.AbstractService;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataAccessException;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:22
+ */
+@Service
+public class IAttachmentDomainServiceImpl extends AbstractService<AttachmentPO, AttachmentMapper> implements IAttachmentDomainService {
+
+    @Resource
+    IAttachmentRepository IAttachmentRepository;
+
+    /**
+     * 淇濆瓨
+     *
+     * @param attachmentAgg 闄勪欢gg
+     * @return {@link Long}
+     */
+    @Override
+    public Long saveAttachment(AttachmentAgg attachmentAgg) {
+        Long id;
+        AttachmentAgg byPersistentId = IAttachmentRepository.findByPersistentId(attachmentAgg.getId());
+        if (ObjectUtils.isEmpty(attachmentAgg.getId()) || ObjectUtils.isEmpty(byPersistentId)) {
+            //鏂板
+            id = IAttachmentRepository.save(byPersistentId);
+        }else {
+            //淇敼
+            byPersistentId.modify(attachmentAgg);
+            id = IAttachmentRepository.modifyAttachment(byPersistentId);
+        }
+        return id;
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param attachmentAgg 闄勪欢gg
+     */
+    @Override
+    public void removeAttachment(AttachmentAgg attachmentAgg) {
+        AttachmentAgg byPersistentId = IAttachmentRepository.findByPersistentId(attachmentAgg.getId());
+        IAttachmentRepository.remove(byPersistentId);
+    }
+
+    /**
+     * 鏌ヨ闄勪欢gg
+     *
+     * @param id id
+     * @return {@link AttachmentAgg}
+     */
+    @Override
+    public AttachmentAgg getAttachmentById(Long id) {
+        AttachmentAgg byPersistentId = IAttachmentRepository.findByPersistentId(id);
+        if (ObjectUtils.isEmpty(byPersistentId)) {
+            throw new DataAccessException(
+                    Error.builder()
+                            .responseCode(ResponseCode.DATA_VERIFY_NULL_POINTER)
+                            .message(id + "瀵瑰簲鐨凙gg涓嶅瓨鍦�")
+                            .build()
+            );
+        }
+        return byPersistentId;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendEmailDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendEmailDomainServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b7055f3f0556e640e1ca35c0c0466827c676a8f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendEmailDomainServiceImpl.java
@@ -0,0 +1,18 @@
+package com.seasky.adjustproject.domain.service;
+
+import com.seasky.adjustproject.domain.event.SendMessageEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendEmailDomainServiceImpl {
+
+    @EventListener
+    @Async
+    public void send(SendMessageEvent event) {
+        // 鎶奺vent杞垚 鍙戦€侀偖浠剁殑鑱氬悎
+        // 鐒跺悗鍘诲彂閫佹秷鎭�
+        System.out.println("閭欢娑堟伅鏀跺埌浜嬩欢锛屽弬鏁�:" + event.getMessage());//鑾峰彇鍙傛暟
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendWXDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendWXDomainServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..21e01f730caa90fb94fa1846050b927a59c51519
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/SendWXDomainServiceImpl.java
@@ -0,0 +1,17 @@
+package com.seasky.adjustproject.domain.service;
+
+import com.seasky.adjustproject.domain.event.SendMessageEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendWXDomainServiceImpl {
+    @EventListener
+    @Async
+    public void send(SendMessageEvent event) {
+        // 鎶奺vent杞垚 鍙戦€佸井淇$殑鑱氬悎
+        // 鐒跺悗鍘诲彂閫佹秷鎭�
+        System.out.println("寰俊娑堟伅鏀跺埌浜嬩欢锛屽弬鏁�:" + event.getMessage());//鑾峰彇鍙傛暟
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/api/IAttachmentDomainService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/api/IAttachmentDomainService.java
new file mode 100644
index 0000000000000000000000000000000000000000..c26e55db91e3a4be804da77b1b9ef07ccf715de7
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/domain/service/api/IAttachmentDomainService.java
@@ -0,0 +1,34 @@
+package com.seasky.adjustproject.domain.service.api;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:22
+ */
+public interface IAttachmentDomainService {
+
+    /**
+     * 淇濆瓨
+     *
+     * @param attachmentAgg
+     * @return {@link Long}
+     */
+    Long saveAttachment(AttachmentAgg attachmentAgg);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param attachmentAgg 闄勪欢gg
+     */
+    void removeAttachment(AttachmentAgg attachmentAgg);
+
+    /**
+     * 鏌ヨ闄勪欢gg
+     *
+     * @param id id
+     * @return {@link AttachmentAgg}
+     */
+    AttachmentAgg getAttachmentById(Long id);
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/AttachmentPO.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/AttachmentPO.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c92ebcc523eb48e6d62ad4560ce88a6a4a6ece9
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/AttachmentPO.java
@@ -0,0 +1,52 @@
+package com.seasky.adjustproject.infrastructure.dataobject.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/20 11:07
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "attach", autoResultMap = true)
+public class AttachmentPO extends BasePO {
+
+    /**
+     * 鍧愭爣
+     */
+    @TableField("coordinate")
+    private String coordinate;
+
+    /**
+     * 鍚庣紑鍚�
+     */
+    @TableField("extension")
+    private String extension;
+
+    /**
+     * 鍏宠仈鐨処D
+     */
+    @TableField("parent_id")
+    private Long parentId;
+
+    /**
+     * 鏂囦欢鍚�
+     */
+    @TableField("filename")
+    private String fileName;
+
+    /**
+     * 鏂囦欢浜岃繘鍒舵祦
+     */
+    @TableField("filestream")
+    private String fileStream;
+
+}
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/BasePO.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/BasePO.java
new file mode 100644
index 0000000000000000000000000000000000000000..06b3c019f2446b9b900e5ea9be8bba6e1ba478c3
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/BasePO.java
@@ -0,0 +1,15 @@
+package com.seasky.adjustproject.infrastructure.dataobject.po;
+
+import com.seasky.core.ddd.base.BaseDataObject;
+import lombok.Data;
+
+/**
+ * 鍩哄湴Po绫�
+ *
+ * @author XueYawei
+ * @date 2020/12/08
+ */
+@Data
+public class BasePO extends BaseDataObject {
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/TestPo.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/TestPo.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a55d8c3fc59cf8f0a808df35c7b14335383f261
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/dataobject/po/TestPo.java
@@ -0,0 +1,34 @@
+package com.seasky.adjustproject.infrastructure.dataobject.po;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 绀轰緥Po绫�
+ *
+ * @author XueYawei
+ * @date 2020/12/07
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@TableName(value = "tb_user",autoResultMap = true)
+public class TestPo extends BasePO {
+    @TableField("name")
+    private String name;
+    @TableField("code")
+    private String code;
+    @TableField("sex")
+    private String sex;
+    @TableField("age")
+    private Integer age;
+
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/AttachmentMapper.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/AttachmentMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cc3ec9133844009f53b35b2801d21fd36baa880
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/AttachmentMapper.java
@@ -0,0 +1,13 @@
+package com.seasky.adjustproject.infrastructure.db.mapper.table;
+
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.core.base.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/20 14:50
+ */
+@Mapper
+public interface AttachmentMapper extends BaseMapper<AttachmentPO> {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/TestMapper.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/TestMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..52d9fe863f89721b6169c6815c0d701f9fee48fe
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/table/TestMapper.java
@@ -0,0 +1,29 @@
+package com.seasky.adjustproject.infrastructure.db.mapper.table;
+
+import com.seasky.core.base.BaseMapper;
+import com.seasky.adjustproject.dto.test.TestQueryQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.TestPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 绀轰緥鏄犲皠鍣�
+ *
+ * @author XueYawei
+ * @date 2020/12/08
+ */
+@Mapper
+public interface TestMapper extends BaseMapper<TestPo> {
+
+    /**
+     * 閫夋嫨鐢ㄦ埛鍒楄〃
+     *
+     * @param testQry 绀轰緥qry
+     * @return {@link List<TestPo>}
+     */
+    List<TestPo> selectUserList(@Param("pm") TestQueryQry testQry);
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/AttachmentMapper.xml b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/AttachmentMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0115627ddffeb799c6c8a10e67b3253d1f91b9b5
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/AttachmentMapper.xml
@@ -0,0 +1,4 @@
+<?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.seasky.adjustproject.infrastructure.db.mapper.table.AttachmentMapper">
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/TestMapper.xml b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/TestMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..270cd457b0490e9450fbcf463e652b95b1c98f16
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/db/mapper/xml/TestMapper.xml
@@ -0,0 +1,46 @@
+<?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.seasky.adjustproject.infrastructure.db.mapper.table.TestMapper">
+
+
+    <select id="selectIdPage" resultType="java.lang.Long">
+        select id from tb_user
+        <where>
+            available = 'YES'
+            <if test="cm.name != null and cm.name != ''">
+                and name = #{cm.name}
+            </if>
+            <if test="cm.code != null and cm.code != ''">
+                and code = #{cm.code}
+            </if>
+            <if test="cm.age != null ">
+                and age = #{cm.age}
+            </if>
+            <if test="cm.sex != null and cm.sex != ''">
+                and sex = #{cm.sex}
+            </if>
+        </where>
+    </select>
+
+
+
+    <select id="selectUserList" resultType="com.seasky.adjustproject.infrastructure.dataobject.po.TestPo">
+        select * from tb_user
+        <where>
+            available = 'YES'
+            <if test="pm.name != null and pm.name != ''">
+                and name = #{pm.name}
+            </if>
+            <if test="pm.code != null and pm.code != ''">
+                and code = #{pm.code}
+            </if>
+            <if test="pm.age != null ">
+                and age = #{pm.age}
+            </if>
+            <if test="pm.sex != null and pm.sex != ''">
+                and sex = #{pm.sex}
+            </if>
+
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryConvert.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryConvert.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d19d3af85c6a85e6f11f16391c55269188290b1
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryConvert.java
@@ -0,0 +1,19 @@
+package com.seasky.adjustproject.infrastructure.reader.attachment;
+
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.core.ddd.utils.MapperUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:59
+ */
+public class AttachmentQueryConvert {
+
+    public static List<AttachmentOut> AttachmentPOToOut(List<AttachmentPO> attachmentPOList) {
+        return MapperUtils.INSTANCE.mapAsList(AttachmentOut.class, attachmentPOList);
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryServiceImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..18ebe4f3eb91114d8b27c0fa6aa701759c0a7c0b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/reader/attachment/AttachmentQueryServiceImpl.java
@@ -0,0 +1,62 @@
+package com.seasky.adjustproject.infrastructure.reader.attachment;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seasky.adjustproject.application.query.attachment.IAttachmentQueryService;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.adjustproject.infrastructure.db.mapper.table.AttachmentMapper;
+import com.seasky.core.base.AbstractService;
+import com.seasky.core.base.BaseService;
+import com.seasky.core.common.Pagination;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/21 15:58
+ */
+@Repository
+public class AttachmentQueryServiceImpl extends AbstractService<AttachmentPO, AttachmentMapper> implements IAttachmentQueryService {
+
+    @Resource
+    AttachmentMapper attachmentMapper;
+
+    /**
+     * 闄勪欢鍒楄〃
+     *
+     * @param attachmentQry 闄勪欢qry
+     * @return {@link Pagination}<{@link AttachmentOut}>
+     */
+    @Override
+    public Pagination<AttachmentOut> listAttachment(AttachmentQry attachmentQry) {
+
+        Page<AttachmentPO> attachmentPOPage;
+        Page<AttachmentOut> attachmentOutPage;
+        if (ObjectUtils.isEmpty(attachmentQry.getPageSize()) ||
+                ObjectUtils.isEmpty(attachmentQry.getPageIndex())) {
+            attachmentPOPage = new Page<>(1,10);
+            attachmentOutPage = new Page<>(1,10);
+        }else {
+            attachmentPOPage = new Page<>(attachmentQry.getPageIndex(), attachmentQry.getPageSize());
+            attachmentOutPage = new Page<>(attachmentQry.getPageIndex(), attachmentQry.getPageSize());
+        }
+        //鏍规嵁鏉′欢杩涜鍒嗛〉鏌ヨ
+        QueryWrapper<AttachmentPO> attachmentPOQueryWrapper = new QueryWrapper<>();
+        Page<AttachmentPO> attachmentPOList =
+                attachmentMapper.selectPage(attachmentPOPage, attachmentPOQueryWrapper);
+        //灏唒o杞垚out
+        List<AttachmentOut> attachmentOuts =
+                AttachmentQueryConvert.AttachmentPOToOut(attachmentPOList.getRecords());
+
+        //璁剧疆杩斿洖鍊�
+        attachmentOutPage.setTotal(attachmentPOList.getTotal());
+        attachmentOutPage.setRecords(attachmentOuts);
+        return Pagination.fromPage(attachmentOutPage);
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentConvert.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentConvert.java
new file mode 100644
index 0000000000000000000000000000000000000000..e432b2d7cebd4c32c0d8f7487d19483c7e5665ee
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentConvert.java
@@ -0,0 +1,33 @@
+package com.seasky.adjustproject.infrastructure.repository.attachment;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.core.ddd.utils.MapperUtils;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/20 14:56
+ */
+public class AttachmentConvert {
+
+    /**
+     * 闄勪欢gg杞琍o
+     *
+     * @param attachmentAgg 闄勪欢gg
+     * @return {@link AttachmentPO}
+     */
+    public static AttachmentPO attachmentAggToPo(AttachmentAgg attachmentAgg) {
+        return MapperUtils.INSTANCE.map(AttachmentPO.class, attachmentAgg);
+    }
+
+    /**
+     * Po杞檮浠禔gg
+     *
+     * @param attachmentPo 闄勪欢璁㈠崟
+     * @return {@link AttachmentAgg}
+     */
+    public static AttachmentAgg attachmentPoToAgg(AttachmentPO attachmentPo) {
+        return MapperUtils.INSTANCE.map(AttachmentAgg.class, attachmentPo);
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentRepositoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..4867b58a464fb7ba76970200671cbbfd295b089f
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/infrastructure/repository/attachment/AttachmentRepositoryImpl.java
@@ -0,0 +1,127 @@
+package com.seasky.adjustproject.infrastructure.repository.attachment;
+
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.AttachmentAgg;
+import com.seasky.adjustproject.domain.aggregate.attachmentAggregate.IAttachmentRepository;
+import com.seasky.adjustproject.infrastructure.dataobject.po.AttachmentPO;
+import com.seasky.adjustproject.infrastructure.db.mapper.table.AttachmentMapper;
+import com.seasky.core.base.AbstractService;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.ddd.base.DomainKeysMap;
+import com.seasky.core.exception.DataAccessException;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/20 14:56
+ */
+@Repository
+public class AttachmentRepositoryImpl extends AbstractService<AttachmentPO, AttachmentMapper> implements IAttachmentRepository {
+
+    @Resource
+    private AttachmentMapper attachmentMapper;
+
+    /**
+     * 鏂板
+     *
+     * @param aggregate
+     * @return {@link Long}
+     */
+    @Override
+    public Long save(AttachmentAgg aggregate) {
+
+        AttachmentPO attachmentPo = AttachmentConvert.attachmentAggToPo(aggregate);
+
+        int insert = attachmentMapper.insert(attachmentPo);
+        if (insert != 1) {
+            throw new DataAccessException(
+                    Error.builder()
+                            .responseCode(ResponseCode.DATA_VERIFY_EXCEPTION)
+                            .message("鏂板澶辫触")
+                            .build()
+            );
+        }
+        return attachmentPo.getId();
+    }
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param aggregate
+     */
+    @Override
+    public void remove(AttachmentAgg aggregate) {
+        AttachmentPO attachmentPo = AttachmentConvert.attachmentAggToPo(aggregate);
+        int i = attachmentMapper.deleteById(attachmentPo.getId());
+        if (i != 1) {
+            throw new DataAccessException(
+                    Error.builder()
+                            .responseCode(ResponseCode.DATA_VERIFY_EXCEPTION)
+                            .message("鍒犻櫎澶辫触")
+                            .build()
+            );
+        }
+
+    }
+
+    /**
+     * 淇敼闄勪欢
+     *
+     * @param attachmentAgg 闄勪欢gg
+     * @return {@link Long}
+     */
+    @Override
+    public Long modifyAttachment(AttachmentAgg attachmentAgg) {
+        AttachmentPO attachmentPo = AttachmentConvert.attachmentAggToPo(attachmentAgg);
+        int i = attachmentMapper.updateById(attachmentPo);
+        if (i != 1) {
+            throw new DataAccessException(
+                    Error.builder()
+                            .responseCode(ResponseCode.DATA_VERIFY_EXCEPTION)
+                            .message("淇敼澶辫触")
+                            .build()
+            );
+        }
+
+        return attachmentPo.getId();
+    }
+
+    /**
+     * 閫氳繃鍩熼敭鎵惧埌
+     *
+     * @param domainKeysMap
+     * @return {@link AttachmentAgg}
+     */
+    @Override
+    public AttachmentAgg findByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    /**
+     * 閫氳繃鍩熼敭瀛樺湪鍚�
+     *
+     * @param domainKeysMap
+     * @return {@link Boolean}
+     */
+    @Override
+    public Boolean isExistsByDomainKey(DomainKeysMap domainKeysMap) {
+        return null;
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param aLong
+     * @return {@link AttachmentAgg}
+     */
+    @Override
+    public AttachmentAgg findByPersistentId(Long aLong) {
+        AttachmentPO attachmentPo = attachmentMapper.selectById(aLong);
+        AttachmentAgg attachmentAgg = AttachmentConvert.attachmentPoToAgg(attachmentPo);
+        return attachmentAgg;
+    }
+
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/controller/AttachmentController.java b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/controller/AttachmentController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34843b19210b59c1dbac4c15a1cadb5851eb19f5
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/controller/AttachmentController.java
@@ -0,0 +1,85 @@
+package com.seasky.adjustproject.interfaces.controller;
+
+import com.seasky.adjustproject.api.IAttachmentController;
+import com.seasky.adjustproject.application.command.attachment.IAttachmentCmdService;
+import com.seasky.adjustproject.application.query.attachment.IAttachmentQueryService;
+import com.seasky.adjustproject.dto.attachment.AttachmentCmd;
+import com.seasky.adjustproject.dto.attachment.AttachmentOut;
+import com.seasky.adjustproject.dto.attachment.AttachmentQry;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+import static com.seasky.core.common.Response.ok;
+
+/**
+ * @Author wangxingjun
+ * @Data 2022/4/22 15:56
+ */
+@RestController
+@Api("Attachment")
+public class AttachmentController extends BaseController implements IAttachmentController {
+
+    @Resource
+    IAttachmentCmdService iAttachmentCmdService;
+
+    @Resource
+    IAttachmentQueryService iAttachmentQueryService;
+
+    /**
+     * 淇濆瓨闄勪欢
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link Result}<{@link Object}>
+     */
+    @Override
+    @ApiOperation("淇濆瓨闄勪欢")
+    public Result<Object> saveAttachment(@RequestBody AttachmentCmd attachmentCmd) {
+        return ok(ResponseCode.SUCCESS, iAttachmentCmdService.saveAttachment(attachmentCmd));
+    }
+
+    /**
+     * 鍒犻櫎闄勪欢
+     *
+     * @param attachmentCmd 闄勪欢cmd
+     * @return {@link Result}<{@link Object}>
+     */
+    @Override
+    @ApiOperation("鍒犻櫎闄勪欢")
+    public Result<Object> removeAttachment(@RequestBody AttachmentCmd attachmentCmd) {
+        iAttachmentCmdService.removeAttachment(attachmentCmd);
+        return ok(ResponseCode.SUCCESS);
+    }
+
+    /**
+     * 閫氳繃id鑾峰彇闄勪欢
+     *
+     * @param id id
+     * @return {@link Result}<{@link AttachmentQry}>
+     */
+    @Override
+    @ApiOperation("鏌ヨ鍗曚釜闄勪欢")
+    public Result<AttachmentOut> getAttachmentById(@RequestParam Long id) {
+        return ok(ResponseCode.SUCCESS, iAttachmentCmdService.getAttachmentById(id));
+    }
+
+    /**
+     * 闄勪欢鍒楄〃
+     *
+     * @param attachmentQry 闄勪欢qry
+     * @return {@link Result}<{@link AttachmentOut}>
+     */
+    @Override
+    @ApiOperation("鏌ヨ鍗曚釜闄勪欢")
+    public Result<AttachmentOut> listAttachment(@RequestBody AttachmentQry attachmentQry) {
+        return ok(ResponseCode.SUCCESS, iAttachmentQueryService.listAttachment(attachmentQry));
+    }
+
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/rpc/TestRPC.java b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/rpc/TestRPC.java
new file mode 100644
index 0000000000000000000000000000000000000000..657cf6e9b0107b7ebc009db609853d671fc244c5
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/rpc/TestRPC.java
@@ -0,0 +1,4 @@
+package com.seasky.adjustproject.interfaces.rpc;
+
+public class TestRPC {
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/SOAPConfig.java b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/SOAPConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..af146e54613d7dda3b18428afa4e6e1b4027661b
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/SOAPConfig.java
@@ -0,0 +1,65 @@
+package com.seasky.adjustproject.interfaces.soap;
+
+import com.seasky.adjustproject.api.ITestWebService;
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.spring.SpringBus;
+import org.apache.cxf.jaxws.EndpointImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.xml.ws.Endpoint;
+
+
+@Configuration
+public class SOAPConfig {
+    @Autowired
+    private ITestWebService testWebServiceImpl;
+
+    @Autowired
+    private ITestWebService test2WebServiceImpl;
+
+    /**
+     * Apache CXF 鏍稿績鏋舵瀯鏄互BUS涓烘牳蹇冿紝鏁村悎鍏朵粬缁勪欢銆�
+     * Bus鏄疌XF鐨勪富骞�, 涓哄叡浜祫婧愭彁渚涗竴涓彲閰嶇疆鐨勫満鎵€锛屼綔鐢ㄧ被浼间簬Spring鐨凙pplicationContext锛岃繖浜涘叡浜祫婧愬寘鎷�
+     * WSDl绠$悊鍣ㄣ€佺粦瀹氬伐鍘傜瓑銆傞€氳繃瀵笲US杩涜鎵╁睍锛屽彲浠ユ柟渚垮湴瀹圭撼鑷繁鐨勮祫婧愶紝鎴栬€呮浛鎹㈢幇鏈夌殑璧勬簮銆傞粯璁us瀹炵幇鍩轰簬Spring鏋舵瀯锛�
+     * 閫氳繃渚濊禆娉ㄥ叆锛屽湪杩愯鏃跺皢缁勪欢涓茶仈璧锋潵銆侭usFactory璐熻矗Bus鐨勫垱寤恒€傞粯璁ょ殑BusFactory鏄疭pringBusFactory锛屽搴斾簬榛樿
+     * 鐨凚us瀹炵幇銆傚湪鏋勯€犺繃绋嬩腑锛孲pringBusFactory浼氭悳绱ETA-INF/cxf锛堝寘鍚湪 CXF 鐨刯ar涓級涓嬬殑鎵€鏈塨ean閰嶇疆鏂囦欢銆�
+     * 鏍规嵁杩欎簺閰嶇疆鏂囦欢鏋勫缓涓€涓狝pplicationContext銆傚紑鍙戣€呬篃鍙互鎻愪緵鑷繁鐨勯厤缃枃浠舵潵瀹氬埗Bus銆�
+     */
+    @Bean(name = Bus.DEFAULT_BUS_ID)
+    public SpringBus springBus() {
+        return new SpringBus();
+    }
+
+    /**
+     * 姝ゆ柟娉曚綔鐢ㄦ槸鏀瑰彉椤圭洰涓湇鍔″悕鐨勫墠缂€鍚嶏紝姝ゅ127.0.0.1鎴栬€卨ocalhost涓嶈兘璁块棶鏃讹紝璇蜂娇鐢╥pconfig鏌ョ湅鏈満ip鏉ヨ闂�
+     * 姝ゆ柟娉曡娉ㄩ噴鍚�, 鍗充笉鏀瑰彉鍓嶇紑鍚�(榛樿鏄痵ervices), wsdl璁块棶鍦板潃涓� http://127.0.0.1:8080/services/ws/api?wsdl
+     * 鍘绘帀娉ㄩ噴鍚巜sdl璁块棶鍦板潃涓猴細http://127.0.0.1:8080/soap/ws/api?wsdl
+     * http://127.0.0.1:8080/soap/鍒楀嚭鏈嶅姟鍒楄〃 鎴� http://127.0.0.1:8080/soap/ws/api?wsdl 鏌ョ湅瀹為檯鐨勬湇鍔�
+     * 鏂板缓Servlet璁板緱闇€瑕佸湪鍚姩绫绘坊鍔犳敞瑙o細@ServletComponentScan
+     *
+     * 濡傛灉鍚姩鏃跺嚭鐜伴敊璇細not loaded because DispatcherServlet Registration found non dispatcher servlet dispatcherServlet
+     * 鍙兘鏄痵pringboot涓巆fx鐗堟湰涓嶅吋瀹广€�
+     * 鍚屾椂鍦╯pring boot2.0.6涔嬪悗鐨勭増鏈笌xcf闆嗘垚锛屼笉闇€瑕佸湪瀹氫箟浠ヤ笅鏂规硶锛岀洿鎺ュ湪application.properties閰嶇疆鏂囦欢涓坊鍔狅細
+     * cxf.path=/service锛堥粯璁ゆ槸services锛�
+     */
+    //@Bean
+    //public ServletRegistrationBean dispatcherServlet() {
+    //    return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
+    //}
+
+    @Bean
+    public Endpoint testendpoint() {
+        EndpointImpl endpoint = new EndpointImpl(springBus(), testWebServiceImpl);
+        endpoint.publish("/ws/api");
+        return endpoint;
+    }
+
+    @Bean
+    public Endpoint test2endpoint() {
+        EndpointImpl endpoint = new EndpointImpl(springBus(), test2WebServiceImpl);
+        endpoint.publish("/ws/api2");
+        return endpoint;
+    }
+}
diff --git a/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/TestWebService.java b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/TestWebService.java
new file mode 100644
index 0000000000000000000000000000000000000000..c1b36d90327de42c20df6f37f6dbc49bb822a739
--- /dev/null
+++ b/ServiceSite/src/main/java/com/seasky/adjustproject/interfaces/soap/TestWebService.java
@@ -0,0 +1,26 @@
+package com.seasky.adjustproject.interfaces.soap;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.adjustproject.api.ITestWebService;
+import com.seasky.adjustproject.application.query.TestQueryService;
+import com.seasky.adjustproject.dto.test.TestQueryOut;
+import com.seasky.adjustproject.dto.test.TestQueryQry;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.jws.WebService;
+import static com.seasky.core.common.Response.ok;
+
+@Component
+@WebService(name = "TestService", targetNamespace = "http://www.seaskysh.com",
+        endpointInterface = "com.seasky.adjustproject.api.ITestWebService")
+public class TestWebService implements ITestWebService {
+    @Autowired
+    private TestQueryService testQueryService;
+
+    @Override
+    public Result<TestQueryOut> testQ(TestQueryQry testQry) {
+        return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry));
+    }
+}
diff --git a/ServiceSite/src/test/java/com/seasky/adjustproject/ApplicationTests.java b/ServiceSite/src/test/java/com/seasky/adjustproject/ApplicationTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57dbb70197797658d480e65fe2da6c95154408
--- /dev/null
+++ b/ServiceSite/src/test/java/com/seasky/adjustproject/ApplicationTests.java
@@ -0,0 +1,13 @@
+package com.seasky.adjustproject;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class ApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}