From 2ee7b5a921a65aae3b8a8a53d0e03068a4344ee8 Mon Sep 17 00:00:00 2001 From: ljfxxx <ljfxxx@qq.com> Date: Tue, 22 Dec 2020 12:49:43 +0800 Subject: [PATCH] feature: add ddd demo --- .../com/seasky/dddtemplate/api/ITest.java | 21 ----- .../dddtemplate/api/ITestController.java | 41 +++++++++ .../dddtemplate/api/ITestWebService.java | 16 ++++ ServiceSite/pom.xml | 25 +++++ .../command/api/TestCmdService.java | 20 +++- .../command/service/TestCmdServiceImpl.java | 91 ++++++++++++++++++- .../domain/aggregate/flow/FlowAggregate.java | 14 +++ .../aggregate/message/MessageAggregate.java | 5 + .../domain/aggregate/test/TestAggregate.java | 25 +++++ .../domain/aggregate/test/TestRepository.java | 4 +- .../domain/api/TestDomainService.java | 4 +- .../domain/event/DeleteTestEvent.java | 26 ++++++ .../domain/event/SendMessageEvent.java | 41 +++++++++ .../domain/service/FlowDomainServiceImpl.java | 17 ++++ .../service/SendEmailDomainServiceImpl.java | 18 ++++ .../service/SendWXDomainServiceImpl.java | 17 ++++ .../domain/service/TestDomainServiceImpl.java | 31 ++++++- .../repository/test/TestRepositoryImpl.java | 26 ++++++ .../interfaces/controller/TestController.java | 76 ++++++++++++---- .../dddtemplate/interfaces/rpc/TestRPC.java | 4 + .../interfaces/soap/SOAPConfig.java | 65 +++++++++++++ .../interfaces/soap/TestWebService.java | 26 ++++++ .../src/main/resources/application.properties | 2 +- ServiceSite/src/main/resources/bootstrap.yml | 22 +++++ .../controller/test/TestControllerTest.java | 4 +- 25 files changed, 589 insertions(+), 52 deletions(-) delete mode 100644 ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITest.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestController.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestWebService.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/flow/FlowAggregate.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/message/MessageAggregate.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/DeleteTestEvent.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/SendMessageEvent.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/FlowDomainServiceImpl.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendEmailDomainServiceImpl.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendWXDomainServiceImpl.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/rpc/TestRPC.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/SOAPConfig.java create mode 100644 ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/TestWebService.java diff --git a/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITest.java b/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITest.java deleted file mode 100644 index 5d79450..0000000 --- a/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.seasky.dddtemplate.api; - -import com.seasky.core.common.Result; -import com.seasky.dddtemplate.dto.test.TestCmd; -import com.seasky.dddtemplate.dto.test.TestQueryOut; -import com.seasky.dddtemplate.dto.test.TestQueryQry; -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; - -@FeignClient("dddtemplate-provider") -@RequestMapping("test") -public interface ITest { - - @PostMapping(path = "/pc/v1/add") - Result<Integer> testC(@RequestBody TestCmd testCmd); - - @PostMapping(path = "/pc/v1/queryList") - Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry); -} diff --git a/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestController.java b/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestController.java new file mode 100644 index 0000000..55ddd66 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestController.java @@ -0,0 +1,41 @@ +package com.seasky.dddtemplate.api; + +import com.seasky.core.common.Result; +import com.seasky.dddtemplate.dto.test.TestCmd; +import com.seasky.dddtemplate.dto.test.TestQueryOut; +import com.seasky.dddtemplate.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/dddtemplate/api/ITestWebService.java b/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestWebService.java new file mode 100644 index 0000000..5dcfd35 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/dddtemplate/api/ITestWebService.java @@ -0,0 +1,16 @@ +package com.seasky.dddtemplate.api; + +import com.seasky.core.common.Result; +import com.seasky.dddtemplate.dto.test.TestQueryOut; +import com.seasky.dddtemplate.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/pom.xml b/ServiceSite/pom.xml index ca24a34..f8daca5 100644 --- a/ServiceSite/pom.xml +++ b/ServiceSite/pom.xml @@ -73,6 +73,31 @@ </dependency> + + + + + <!-- webService--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web-services</artifactId> + </dependency> + <!-- CXF webservice --> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-spring-boot-starter-jaxws</artifactId> + <version>3.2.1</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-http</artifactId> + <version>3.2.1</version> + </dependency> + <!-- CXF webservice --> + + + + <!-- <dependency>--> <!-- <groupId>org.jetbrains</groupId>--> <!-- <artifactId>annotations</artifactId>--> diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/api/TestCmdService.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/api/TestCmdService.java index ec4e8a6..ded4e56 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/api/TestCmdService.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/api/TestCmdService.java @@ -9,5 +9,23 @@ public interface TestCmdService { * @param testCmd 娴嬭瘯cmd * @return int */ - int saveTest(TestCmd testCmd); + 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/dddtemplate/application/command/service/TestCmdServiceImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/service/TestCmdServiceImpl.java index 8743fed..6f61141 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/service/TestCmdServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/application/command/service/TestCmdServiceImpl.java @@ -1,10 +1,13 @@ package com.seasky.dddtemplate.application.command.service; import com.seasky.dddtemplate.application.command.api.TestCmdService; -import com.seasky.dddtemplate.dto.test.TestCmd; -import com.seasky.dddtemplate.domain.aggregate.test.TestAggregate; import com.seasky.dddtemplate.application.command.factory.TestFactory; +import com.seasky.dddtemplate.domain.aggregate.test.TestAggregate; +import com.seasky.dddtemplate.domain.aggregate.test.TestRepository; import com.seasky.dddtemplate.domain.api.TestDomainService; +import com.seasky.dddtemplate.domain.event.DeleteTestEvent; +import com.seasky.dddtemplate.domain.event.SendMessageEvent; +import com.seasky.dddtemplate.dto.test.TestCmd; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,9 +16,89 @@ public class TestCmdServiceImpl implements TestCmdService { @Autowired private TestDomainService testDomainService; + @Autowired + private TestRepository testRepository; + + @Autowired + private SendMessageEvent sendMessageEvent; + + @Autowired + private DeleteTestEvent deleteTestEvent; + /** + * 淇濆瓨 + * + * @param testCmd + * @return {@link Long} + */ + @Override + public Long SaveTest(TestCmd testCmd) { + TestAggregate testAggregate = TestFactory.buildTestAggregate(testCmd); + return this.save(testAggregate); + } + + /** + * 鎻愪氦 + * + * @param testCmd + * @return {@link int} + */ @Override - public int saveTest(TestCmd testCmd) { + public Long SubmitTest(TestCmd testCmd) { TestAggregate testAggregate = TestFactory.buildTestAggregate(testCmd); - return testDomainService.saveTest(testAggregate); + this.submit(testAggregate); + return 0l; + } + + /** + * 淇濆瓨骞舵彁浜� + * + * @param testCmd + * @return {@link int} + */ + @Override + public Long SavaAndSubmitTest(TestCmd testCmd) { + TestAggregate testAggregate = TestFactory.buildTestAggregate(testCmd); + Long result = this.save(testAggregate); + this.submit(testAggregate); + return result; + } + + /** + * 鍒犻櫎 + * + * @param testCmd + * @return {@link int} + */ + @Override + public void Delete(TestCmd testCmd) { + TestAggregate testAggregate = TestFactory.buildTestAggregate(testCmd); + deleteTestEvent.DeleteVerify(testAggregate.getCode()); + testRepository.remove(testAggregate); + } + + /** + * 淇濆瓨鍏辩敤鏂规硶 + * + * @param testAggregate + * @return {@link Long} + */ + private Long save(TestAggregate testAggregate){ + TestAggregate aggregate = testRepository.findByPersistentId(testAggregate.getId()); + aggregate = aggregate.updata(testAggregate); + return testRepository.save(aggregate); + } + + /** + * 鎻愪氦鍏辩敤鏂规硶 + * + * @param testAggregate + * @return {@link TestAggregate} + */ + private TestAggregate submit(TestAggregate testAggregate) { + testAggregate = testDomainService.submitTest(testAggregate); + String message = testAggregate.BuildSubmitMessage(); + // 姝ゅ璋冪敤flowRepository 鏍规嵁 涓氬姟鍗曞彿鑾峰彇瀹℃牳鐢ㄦ埛鍒楄〃 + sendMessageEvent.send(message,"鑾峰彇鍒扮殑鐢ㄦ埛鍒楄〃"); + return testAggregate; } } diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/flow/FlowAggregate.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/flow/FlowAggregate.java new file mode 100644 index 0000000..1d737d5 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/flow/FlowAggregate.java @@ -0,0 +1,14 @@ +package com.seasky.dddtemplate.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/dddtemplate/domain/aggregate/message/MessageAggregate.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/message/MessageAggregate.java new file mode 100644 index 0000000..8cd8d6c --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/message/MessageAggregate.java @@ -0,0 +1,5 @@ +package com.seasky.dddtemplate.domain.aggregate.message; + +public class MessageAggregate { + +} diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestAggregate.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestAggregate.java index cf2bf96..c16bf66 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestAggregate.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestAggregate.java @@ -35,8 +35,33 @@ public class TestAggregate extends BaseAggregate { */ 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/dddtemplate/domain/aggregate/test/TestRepository.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestRepository.java index f116a9e..52dc00c 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestRepository.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/aggregate/test/TestRepository.java @@ -1,12 +1,14 @@ package com.seasky.dddtemplate.domain.aggregate.test; +import com.seasky.core.ddd.base.DddRepository; + /** * 绀轰緥瀛樺偍搴� * * @author XueYawei * @date 2020/12/07 */ -public interface TestRepository { +public interface TestRepository extends DddRepository<TestAggregate> { /** * 淇濆瓨绀轰緥 * diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/api/TestDomainService.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/api/TestDomainService.java index 8c11e57..00ff77a 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/api/TestDomainService.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/api/TestDomainService.java @@ -10,10 +10,10 @@ import com.seasky.dddtemplate.domain.aggregate.test.TestAggregate; */ public interface TestDomainService { /** - * 淇濆瓨绀轰緥 + * 鎻愪氦绀轰緥 * * @param testAggregate 娴嬭瘯aggregate * @return int */ - int saveTest(TestAggregate testAggregate); + TestAggregate submitTest(TestAggregate testAggregate); } diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/DeleteTestEvent.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/DeleteTestEvent.java new file mode 100644 index 0000000..55dafa1 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/DeleteTestEvent.java @@ -0,0 +1,26 @@ +package com.seasky.dddtemplate.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/dddtemplate/domain/event/SendMessageEvent.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/SendMessageEvent.java new file mode 100644 index 0000000..c164854 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/event/SendMessageEvent.java @@ -0,0 +1,41 @@ +package com.seasky.dddtemplate.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/dddtemplate/domain/service/FlowDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/FlowDomainServiceImpl.java new file mode 100644 index 0000000..951a570 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/FlowDomainServiceImpl.java @@ -0,0 +1,17 @@ +package com.seasky.dddtemplate.domain.service; + +import com.seasky.dddtemplate.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/dddtemplate/domain/service/SendEmailDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendEmailDomainServiceImpl.java new file mode 100644 index 0000000..b29bf0b --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendEmailDomainServiceImpl.java @@ -0,0 +1,18 @@ +package com.seasky.dddtemplate.domain.service; + +import com.seasky.dddtemplate.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/dddtemplate/domain/service/SendWXDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendWXDomainServiceImpl.java new file mode 100644 index 0000000..a1d59c3 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/SendWXDomainServiceImpl.java @@ -0,0 +1,17 @@ +package com.seasky.dddtemplate.domain.service; + +import com.seasky.dddtemplate.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/dddtemplate/domain/service/TestDomainServiceImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/TestDomainServiceImpl.java index b9cb828..7c004ca 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/TestDomainServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/domain/service/TestDomainServiceImpl.java @@ -4,7 +4,10 @@ package com.seasky.dddtemplate.domain.service; import com.seasky.dddtemplate.domain.aggregate.test.TestAggregate; import com.seasky.dddtemplate.domain.aggregate.test.TestRepository; import com.seasky.dddtemplate.domain.api.TestDomainService; +import com.seasky.dddtemplate.domain.event.DeleteTestEvent; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; /** @@ -19,12 +22,36 @@ public class TestDomainServiceImpl implements TestDomainService { @Autowired TestRepository testRepository; + /** * 涓氬姟鎿嶄綔 */ @Override - public int saveTest(TestAggregate testAggregate) { + public TestAggregate submitTest(TestAggregate testAggregate) { // 涓氬姟浠g爜 - return testRepository.saveTest(testAggregate); + TestAggregate aggregate = testRepository.findByPersistentId(testAggregate.getId()); + + // 姝ゅ璋冪敤repository鑾峰彇鏁版嵁鍋氭牎楠�,姣斿宸ュ彿涓嶈兘閲嶅 +// +// FlowAggregate flowAggregate = flowRepository.findByTestCode(testAggregate.getCode()); +// flowAggregate.submit(testAggregate.getCode()); +// +// if(aggregate.getAge()>50){ +// flowAggregate = flowRepository.submitA(flowAggregate); +// } else { +// flowAggregate = flowRepository.submitB(flowAggregate); +// } +// +// aggregate.submit(flowAggregate.getStatus()); + testRepository.save(testAggregate); + return aggregate; + } + + + @EventListener + @Order(1) + public void deleteTestVerify(DeleteTestEvent event) { + // 杩涜鍒犻櫎test鐨勬牎楠� + System.out.println("Test鏀跺埌鍒犻櫎浜嬩欢锛屽弬鏁�:" + event.getSource());//鑾峰彇鍙傛暟 } } diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/infrastructure/repository/test/TestRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/infrastructure/repository/test/TestRepositoryImpl.java index 81b3069..0ec7f14 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/infrastructure/repository/test/TestRepositoryImpl.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/infrastructure/repository/test/TestRepositoryImpl.java @@ -3,6 +3,7 @@ package com.seasky.dddtemplate.infrastructure.repository.test; 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 com.seasky.dddtemplate.dto.test.TestQueryQry; import com.seasky.dddtemplate.domain.aggregate.test.TestAggregate; @@ -43,4 +44,29 @@ public class TestRepositoryImpl implements TestRepository { return testMapper.insert(testPo); } + + @Override + public Long save(TestAggregate aggregate) { + return null; + } + + @Override + public void remove(TestAggregate aggregate) { + + } + + @Override + public TestAggregate findByDomainKey(DomainKeysMap domainKeysMap) { + return null; + } + + @Override + public Boolean isExistsByDomainKey(DomainKeysMap domainKeysMap) { + return null; + } + + @Override + public TestAggregate findByPersistentId(Long aLong) { + return null; + } } diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/controller/TestController.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/controller/TestController.java index fbf28da..53fa680 100644 --- a/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/controller/TestController.java +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/controller/TestController.java @@ -3,19 +3,24 @@ package com.seasky.dddtemplate.interfaces.controller; import com.seasky.core.common.ResponseCode; import com.seasky.core.common.Result; -import com.seasky.dddtemplate.api.ITest; +import com.seasky.dddtemplate.api.ITestController; import com.seasky.dddtemplate.application.command.api.TestCmdService; import com.seasky.dddtemplate.application.query.TestQueryService; import com.seasky.dddtemplate.dto.test.TestCmd; import com.seasky.dddtemplate.dto.test.TestQueryOut; import com.seasky.dddtemplate.dto.test.TestQueryQry; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.List; + import static com.seasky.core.common.Response.ok; /** @@ -24,10 +29,9 @@ import static com.seasky.core.common.Response.ok; * @author XueYawei * @date 2020/12/07 */ -@Api("Test") @RestController @RequestMapping("test") -public class TestController extends BaseController implements ITest { +public class TestController extends BaseController implements ITestController { @Autowired private TestCmdService testApplicationCmdService; @@ -35,28 +39,64 @@ public class TestController extends BaseController implements ITest { private TestQueryService testQueryService; /** - * C绾跨ず渚� + * 鏌ヨ绀轰緥 * - * @param testCmd - * @return {@link Object} + * @param testQry + * @return {@link Result<TestQueryOut>} */ - @ApiOperation("1.testC") @Override - public Result<Integer> testC(@RequestBody TestCmd testCmd){ - //TODO 淇濆瓨鐢ㄦ埛淇℃伅 - return ok(ResponseCode.SUCCESS, testApplicationCmdService.saveTest(testCmd)); + public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){ + return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry)); } /** - * Q绾跨ず渚� + * 瀵煎嚭 + * 涓巘estQ鍚屾牱鑾峰彇鏁版嵁,浣嗚浆鎹㈡垚涓嶅悓鏁版嵁鏍煎紡杩斿洖 * * @param testQry - * @return {@link Object} + * @return {@link ResponseEntity<byte[]>} */ - @ApiOperation("1.testQ") @Override - public Result<TestQueryOut> testQ(@RequestBody TestQueryQry testQry){ - //TODO 鏌ヨ鐢ㄦ埛闆嗗悎淇℃伅 - return ok(ResponseCode.SUCCESS, testQueryService.queryTestList(testQry)); + public ResponseEntity<byte[]> testExcelExport(@RequestBody TestQueryQry testQry) throws UnsupportedEncodingException { + List<TestQueryOut> list = testQueryService.queryTestList(testQry); + + byte[] excelbyte = null; // 姝ゅ璋冪敤excel宸ュ叿绫昏浆鎴恊xcel + HttpHeaders header = new HttpHeaders(); + header.add("Content-Length", "0"); + header.add("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode("xxxnanme", "UTF-8")); + return new ResponseEntity<>(excelbyte, header, HttpStatus.OK); + } + + /** + * 淇濆瓨鑽夌ǹ + * + * @param testCmd + * @return {@link Result<Long>} + */ + @Override + public Result<Long> testSave(TestCmd testCmd) { + return ok(ResponseCode.SUCCESS, testApplicationCmdService.SaveTest(testCmd)); + } + + /** + * 鎻愪氦 + * + * @param testCmd + * @return {@link Result<Long>} + */ + @Override + public Result<Long> testSubmit(TestCmd testCmd) { + return ok(ResponseCode.SUCCESS, testApplicationCmdService.SubmitTest(testCmd)); + } + + /** + * 淇濆瓨骞舵彁浜� + * + * @param testCmd + * @return {@link Result<Long>} + */ + @Override + public Result<Long> testSaveAndSubmit(TestCmd testCmd) { + return ok(ResponseCode.SUCCESS, testApplicationCmdService.SavaAndSubmitTest(testCmd)); } } diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/rpc/TestRPC.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/rpc/TestRPC.java new file mode 100644 index 0000000..648b094 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/rpc/TestRPC.java @@ -0,0 +1,4 @@ +package com.seasky.dddtemplate.interfaces.rpc; + +public class TestRPC { +} diff --git a/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/SOAPConfig.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/SOAPConfig.java new file mode 100644 index 0000000..917ea00 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/SOAPConfig.java @@ -0,0 +1,65 @@ +package com.seasky.dddtemplate.interfaces.soap; + +import com.seasky.dddtemplate.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/dddtemplate/interfaces/soap/TestWebService.java b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/TestWebService.java new file mode 100644 index 0000000..c1c9949 --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/dddtemplate/interfaces/soap/TestWebService.java @@ -0,0 +1,26 @@ +package com.seasky.dddtemplate.interfaces.soap; + +import com.seasky.core.common.ResponseCode; +import com.seasky.core.common.Result; +import com.seasky.dddtemplate.api.ITestWebService; +import com.seasky.dddtemplate.application.query.TestQueryService; +import com.seasky.dddtemplate.dto.test.TestQueryOut; +import com.seasky.dddtemplate.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.dddtemplate.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/main/resources/application.properties b/ServiceSite/src/main/resources/application.properties index b6b0966..42e86f8 100644 --- a/ServiceSite/src/main/resources/application.properties +++ b/ServiceSite/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.application.name=dddtemplate-provider spring.profiles.active=@env@ -server.port=8008 +server.port=8009 swagger.enable=true mybatis-plus.global-config.db-config.db-type=mysql diff --git a/ServiceSite/src/main/resources/bootstrap.yml b/ServiceSite/src/main/resources/bootstrap.yml index 139597f..7fd252b 100644 --- a/ServiceSite/src/main/resources/bootstrap.yml +++ b/ServiceSite/src/main/resources/bootstrap.yml @@ -1,2 +1,24 @@ +seasky: + version: @version@ +server: + port: 8009 +spring: + main: + allow-bean-definition-overriding: true + application: + name: dddtemplate-provider + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: 192.168.1.80:8848 + config: + server-addr: 192.168.1.80:8848 + file-extension: properties + inetutils: + preferred-networks: + - 10.0.8 + diff --git a/ServiceSite/src/test/java/com/seasky/dddtemplate/interfaces/controller/test/TestControllerTest.java b/ServiceSite/src/test/java/com/seasky/dddtemplate/interfaces/controller/test/TestControllerTest.java index f4a6a98..279fd58 100644 --- a/ServiceSite/src/test/java/com/seasky/dddtemplate/interfaces/controller/test/TestControllerTest.java +++ b/ServiceSite/src/test/java/com/seasky/dddtemplate/interfaces/controller/test/TestControllerTest.java @@ -34,10 +34,10 @@ class TestControllerTest { @MethodSource("getTCStream") void testC(TestCmdTc testCase) { if(testCase.getIsPositiveCase()){//鏄惁涓烘甯稿叆鍙傚璞� - testCmdService.saveTest(testCase.getCmdParam()); + testCmdService.SaveTest(testCase.getCmdParam()); }else {//寮傚父鍏ュ弬瀵硅薄鎵ц assertThrows(testCase.getExpectExceptionType().getClass(), - ()->testCmdService.saveTest(testCase.getCmdParam()),testCase.getFlag()); + ()->testCmdService.SaveTest(testCase.getCmdParam()),testCase.getFlag()); } //楠岃瘉 浠ヤ笂鎺ュ彛鏄惁鎵ц鎴愬姛 -- GitLab