From 4cb3b6926bbc1454d4c330c55d1314188563695c Mon Sep 17 00:00:00 2001
From: ranyu1998 <2772602769@qq.com>
Date: Wed, 28 Feb 2024 13:24:44 +0800
Subject: [PATCH 1/4] feat(init):
---
.gitignore | 26 +++
demo-web-adapter/pom.xml | 31 ++++
.../demo/mobile/CustomerMobileAdaptor.java | 11 ++
.../alibaba/demo/wap/CustomerWapAdaptor.java | 12 ++
.../alibaba/demo/web/CustomerController.java | 34 ++++
demo-web-app/pom.xml | 45 +++++
.../demo/customer/CustomerServiceImpl.java | 38 +++++
.../customer/executor/CustomerAddCmdExe.java | 23 +++
.../query/CustomerListByNameQryExe.java | 20 +++
.../alibaba/demo/order/OrderServiceImpl.java | 8 +
.../demo/app/CustomerConvertorTest.java | 6 +
.../demo/app/CustomerValidatorTest.java | 11 ++
demo-web-client/pom.xml | 25 +++
.../alibaba/demo/api/CustomerServiceI.java | 14 ++
.../com/alibaba/demo/dto/CustomerAddCmd.java | 11 ++
.../demo/dto/CustomerListByNameQry.java | 9 +
.../alibaba/demo/dto/data/CustomerDTO.java | 17 ++
.../com/alibaba/demo/dto/data/ErrorCode.java | 21 +++
.../demo/dto/event/CustomerCreatedEvent.java | 23 +++
.../demo/dto/event/DomainEventConstant.java | 11 ++
demo-web-domain/pom.xml | 32 ++++
.../demo/domain/customer/CompanyType.java | 14 ++
.../alibaba/demo/domain/customer/Credit.java | 10 ++
.../demo/domain/customer/Customer.java | 38 +++++
.../demo/domain/customer/CustomerType.java | 14 ++
.../demo/domain/customer/SourceType.java | 12 ++
.../customer/domainservice/CreditChecker.java | 6 +
.../customer/gateway/CreditGateway.java | 8 +
.../customer/gateway/CustomerGateway.java | 7 +
.../com/alibaba/demo/domain/order/Order.java | 5 +
.../com/alibaba/demo/domain/package-info.java | 6 +
.../demo/domain/CustomerEntityTest.java | 9 +
demo-web-infrastructure/pom.xml | 39 +++++
.../alibaba/demo/config/DiamondConfig.java | 5 +
.../demo/customer/CreditGatewayImpl.java | 10 ++
.../com/alibaba/demo/customer/CustomerDO.java | 12 ++
.../demo/customer/CustomerGatewayImpl.java | 19 +++
.../alibaba/demo/customer/CustomerMapper.java | 9 +
.../alibaba/demo/order/OrderGatewayImpl.java | 5 +
.../src/main/resources/logback-spring.xml | 35 ++++
.../resources/mybatis/customer-mapper.xml | 14 ++
.../main/resources/mybatis/mybatis-config.xml | 10 ++
.../demo/repository/CustomerMapperTest.java | 9 +
.../src/test/resources/sample.properties | 0
pom.xml | 157 ++++++++++++++++++
start/pom.xml | 39 +++++
.../java/com/alibaba/demo/Application.java | 18 ++
.../src/main/resources/application.properties | 7 +
start/src/main/resources/logback-spring.xml | 49 ++++++
.../com/alibaba/demo/TestApplication.java | 11 ++
.../demo/test/CustomerServiceTest.java | 63 +++++++
start/src/test/resources/logback-test.xml | 49 ++++++
start/src/test/resources/test.properties | 23 +++
53 files changed, 1140 insertions(+)
create mode 100644 .gitignore
create mode 100644 demo-web-adapter/pom.xml
create mode 100644 demo-web-adapter/src/main/java/com/alibaba/demo/mobile/CustomerMobileAdaptor.java
create mode 100644 demo-web-adapter/src/main/java/com/alibaba/demo/wap/CustomerWapAdaptor.java
create mode 100644 demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
create mode 100644 demo-web-app/pom.xml
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/customer/CustomerServiceImpl.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/customer/executor/CustomerAddCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/customer/executor/query/CustomerListByNameQryExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/order/OrderServiceImpl.java
create mode 100644 demo-web-app/src/test/java/com/alibaba/demo/app/CustomerConvertorTest.java
create mode 100644 demo-web-app/src/test/java/com/alibaba/demo/app/CustomerValidatorTest.java
create mode 100644 demo-web-client/pom.xml
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/api/CustomerServiceI.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerAddCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerListByNameQry.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/CustomerDTO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/ErrorCode.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/event/CustomerCreatedEvent.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/event/DomainEventConstant.java
create mode 100644 demo-web-domain/pom.xml
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CompanyType.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Credit.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Customer.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CustomerType.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/SourceType.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/domainservice/CreditChecker.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CreditGateway.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CustomerGateway.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/order/Order.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/package-info.java
create mode 100644 demo-web-domain/src/test/java/com/alibaba/demo/domain/CustomerEntityTest.java
create mode 100644 demo-web-infrastructure/pom.xml
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/config/DiamondConfig.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CreditGatewayImpl.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerDO.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerGatewayImpl.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerMapper.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/order/OrderGatewayImpl.java
create mode 100644 demo-web-infrastructure/src/main/resources/logback-spring.xml
create mode 100644 demo-web-infrastructure/src/main/resources/mybatis/customer-mapper.xml
create mode 100644 demo-web-infrastructure/src/main/resources/mybatis/mybatis-config.xml
create mode 100644 demo-web-infrastructure/src/test/java/com/alibaba/demo/repository/CustomerMapperTest.java
create mode 100644 demo-web-infrastructure/src/test/resources/sample.properties
create mode 100644 pom.xml
create mode 100644 start/pom.xml
create mode 100644 start/src/main/java/com/alibaba/demo/Application.java
create mode 100644 start/src/main/resources/application.properties
create mode 100644 start/src/main/resources/logback-spring.xml
create mode 100644 start/src/test/java/com/alibaba/demo/TestApplication.java
create mode 100644 start/src/test/java/com/alibaba/demo/test/CustomerServiceTest.java
create mode 100644 start/src/test/resources/logback-test.xml
create mode 100644 start/src/test/resources/test.properties
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..be72375
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+target/
+
+### eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+
+### NetBeans ###
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+bin/
+doc/
+.DS_Store
diff --git a/demo-web-adapter/pom.xml b/demo-web-adapter/pom.xml
new file mode 100644
index 0000000..5969745
--- /dev/null
+++ b/demo-web-adapter/pom.xml
@@ -0,0 +1,31 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-web-adapter
+ jar
+ demo-web-adapter
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-app
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/mobile/CustomerMobileAdaptor.java b/demo-web-adapter/src/main/java/com/alibaba/demo/mobile/CustomerMobileAdaptor.java
new file mode 100644
index 0000000..50ab17a
--- /dev/null
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/mobile/CustomerMobileAdaptor.java
@@ -0,0 +1,11 @@
+package com.alibaba.demo.mobile;
+
+/**
+ * Customer Mobile Adaptor
+ *
+ *
+ * @author Frank Zhang
+ * @date 2020-10-27 8:04 PM
+ */
+public class CustomerMobileAdaptor {
+}
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/wap/CustomerWapAdaptor.java b/demo-web-adapter/src/main/java/com/alibaba/demo/wap/CustomerWapAdaptor.java
new file mode 100644
index 0000000..5ede913
--- /dev/null
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/wap/CustomerWapAdaptor.java
@@ -0,0 +1,12 @@
+package com.alibaba.demo.wap;
+
+/**
+ * Customer Wap Adaptor
+ *
+ * WAP : Wireless Application Protocol)
+ *
+ * @author Frank Zhang
+ * @date 2020-10-27 8:03 PM
+ */
+public class CustomerWapAdaptor {
+}
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java b/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
new file mode 100644
index 0000000..01bd9ef
--- /dev/null
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
@@ -0,0 +1,34 @@
+package com.alibaba.demo.web;
+
+import com.alibaba.cola.dto.MultiResponse;
+import com.alibaba.cola.dto.Response;
+import com.alibaba.demo.api.CustomerServiceI;
+import com.alibaba.demo.dto.CustomerAddCmd;
+import com.alibaba.demo.dto.CustomerListByNameQry;
+import com.alibaba.demo.dto.data.CustomerDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class CustomerController {
+
+ @Autowired
+ private CustomerServiceI customerService;
+
+ @GetMapping(value = "/helloworld")
+ public String helloWorld(){
+ return "Hello, welcome to COLA world!";
+ }
+
+ @GetMapping(value = "/customer")
+ public MultiResponse listCustomerByName(@RequestParam(required = false) String name){
+ CustomerListByNameQry customerListByNameQry = new CustomerListByNameQry();
+ customerListByNameQry.setName(name);
+ return customerService.listByName(customerListByNameQry);
+ }
+
+ @PostMapping(value = "/customer")
+ public Response addCustomer(@RequestBody CustomerAddCmd customerAddCmd){
+ return customerService.addCustomer(customerAddCmd);
+ }
+}
diff --git a/demo-web-app/pom.xml b/demo-web-app/pom.xml
new file mode 100644
index 0000000..a1f9354
--- /dev/null
+++ b/demo-web-app/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-web-app
+ jar
+ demo-web-app
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-client
+
+
+ com.alibaba.cola.demo.web
+ demo-web-infrastructure
+
+
+
+ com.alibaba.cola
+ cola-component-catchlog-starter
+
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+ javax.el
+ javax.el-api
+
+
+ org.glassfish
+ jakarta.el
+
+
+
+
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/customer/CustomerServiceImpl.java b/demo-web-app/src/main/java/com/alibaba/demo/customer/CustomerServiceImpl.java
new file mode 100644
index 0000000..b64cab0
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/customer/CustomerServiceImpl.java
@@ -0,0 +1,38 @@
+package com.alibaba.demo.customer;
+
+import com.alibaba.cola.dto.MultiResponse;
+import com.alibaba.cola.dto.Response;
+import com.alibaba.cola.catchlog.CatchAndLog;
+import com.alibaba.demo.api.CustomerServiceI;
+import com.alibaba.demo.dto.CustomerAddCmd;
+import com.alibaba.demo.dto.CustomerListByNameQry;
+import com.alibaba.demo.dto.data.CustomerDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.demo.customer.executor.CustomerAddCmdExe;
+import com.alibaba.demo.customer.executor.query.CustomerListByNameQryExe;
+
+import javax.annotation.Resource;
+
+
+@Service
+@CatchAndLog
+public class CustomerServiceImpl implements CustomerServiceI {
+
+ @Resource
+ private CustomerAddCmdExe customerAddCmdExe;
+
+ @Resource
+ private CustomerListByNameQryExe customerListByNameQryExe;
+
+ public Response addCustomer(CustomerAddCmd customerAddCmd) {
+ return customerAddCmdExe.execute(customerAddCmd);
+ }
+
+ @Override
+ public MultiResponse listByName(CustomerListByNameQry customerListByNameQry) {
+ return customerListByNameQryExe.execute(customerListByNameQry);
+ }
+
+}
\ No newline at end of file
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/CustomerAddCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/CustomerAddCmdExe.java
new file mode 100644
index 0000000..14e52cc
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/CustomerAddCmdExe.java
@@ -0,0 +1,23 @@
+
+package com.alibaba.demo.customer.executor;
+
+import com.alibaba.cola.dto.Response;
+import com.alibaba.cola.exception.BizException;
+import com.alibaba.demo.dto.CustomerAddCmd;
+import com.alibaba.demo.dto.data.ErrorCode;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class CustomerAddCmdExe{
+
+ public Response execute(CustomerAddCmd cmd) {
+ //The flow of usecase is defined here.
+ //The core ablility should be implemented in Domain. or sink to Domian gradually
+ if(cmd.getCustomerDTO().getCompanyName().equals("ConflictCompanyName")){
+ throw new BizException(ErrorCode.B_CUSTOMER_companyNameConflict.getErrCode(), "公司名冲突");
+ }
+ return Response.buildSuccess();
+ }
+
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/query/CustomerListByNameQryExe.java b/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/query/CustomerListByNameQryExe.java
new file mode 100644
index 0000000..4fc00ff
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/customer/executor/query/CustomerListByNameQryExe.java
@@ -0,0 +1,20 @@
+package com.alibaba.demo.customer.executor.query;
+
+import com.alibaba.cola.dto.MultiResponse;
+import com.alibaba.demo.dto.CustomerListByNameQry;
+import com.alibaba.demo.dto.data.CustomerDTO;
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class CustomerListByNameQryExe{
+ public MultiResponse execute(CustomerListByNameQry cmd) {
+ List customerDTOList = new ArrayList<>();
+ CustomerDTO customerDTO = new CustomerDTO();
+ customerDTO.setCustomerName("Frank");
+ customerDTOList.add(customerDTO);
+ return MultiResponse.of(customerDTOList);
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/order/OrderServiceImpl.java b/demo-web-app/src/main/java/com/alibaba/demo/order/OrderServiceImpl.java
new file mode 100644
index 0000000..c25fa3a
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/order/OrderServiceImpl.java
@@ -0,0 +1,8 @@
+package com.alibaba.demo.order;
+
+//package by domain, not by duty
+
+
+public class OrderServiceImpl{
+
+}
\ No newline at end of file
diff --git a/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerConvertorTest.java b/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerConvertorTest.java
new file mode 100644
index 0000000..612f3a3
--- /dev/null
+++ b/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerConvertorTest.java
@@ -0,0 +1,6 @@
+package com.alibaba.demo.app;
+
+
+public class CustomerConvertorTest {
+
+}
diff --git a/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerValidatorTest.java b/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerValidatorTest.java
new file mode 100644
index 0000000..a2fec49
--- /dev/null
+++ b/demo-web-app/src/test/java/com/alibaba/demo/app/CustomerValidatorTest.java
@@ -0,0 +1,11 @@
+package com.alibaba.demo.app;
+
+import org.junit.Test;
+
+public class CustomerValidatorTest {
+
+ @Test
+ public void testValidation(){
+
+ }
+}
diff --git a/demo-web-client/pom.xml b/demo-web-client/pom.xml
new file mode 100644
index 0000000..43f8c90
--- /dev/null
+++ b/demo-web-client/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-web-client
+ jar
+ demo-web-client
+
+
+
+ com.alibaba.cola
+ cola-component-dto
+
+
+ javax.validation
+ validation-api
+
+
+
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/api/CustomerServiceI.java b/demo-web-client/src/main/java/com/alibaba/demo/api/CustomerServiceI.java
new file mode 100644
index 0000000..72c18be
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/api/CustomerServiceI.java
@@ -0,0 +1,14 @@
+package com.alibaba.demo.api;
+
+import com.alibaba.cola.dto.MultiResponse;
+import com.alibaba.cola.dto.Response;
+import com.alibaba.demo.dto.CustomerAddCmd;
+import com.alibaba.demo.dto.CustomerListByNameQry;
+import com.alibaba.demo.dto.data.CustomerDTO;
+
+public interface CustomerServiceI {
+
+ Response addCustomer(CustomerAddCmd customerAddCmd);
+
+ MultiResponse listByName(CustomerListByNameQry customerListByNameQry);
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerAddCmd.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerAddCmd.java
new file mode 100644
index 0000000..b048429
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerAddCmd.java
@@ -0,0 +1,11 @@
+package com.alibaba.demo.dto;
+
+import com.alibaba.demo.dto.data.CustomerDTO;
+import lombok.Data;
+
+@Data
+public class CustomerAddCmd{
+
+ private CustomerDTO customerDTO;
+
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerListByNameQry.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerListByNameQry.java
new file mode 100644
index 0000000..0e0b2cb
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/CustomerListByNameQry.java
@@ -0,0 +1,9 @@
+package com.alibaba.demo.dto;
+
+import com.alibaba.cola.dto.Query;
+import lombok.Data;
+
+@Data
+public class CustomerListByNameQry extends Query{
+ private String name;
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/data/CustomerDTO.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/data/CustomerDTO.java
new file mode 100644
index 0000000..53c4175
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/data/CustomerDTO.java
@@ -0,0 +1,17 @@
+package com.alibaba.demo.dto.data;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+
+@Data
+public class CustomerDTO{
+ private String customerId;
+ private String memberId;
+ private String customerName;
+ private String customerType;
+ @NotEmpty
+ private String companyName;
+ @NotEmpty
+ private String source;
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/data/ErrorCode.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/data/ErrorCode.java
new file mode 100644
index 0000000..caa46e0
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/data/ErrorCode.java
@@ -0,0 +1,21 @@
+package com.alibaba.demo.dto.data;
+
+public enum ErrorCode{
+ B_CUSTOMER_companyNameConflict("B_CUSTOMER_companyNameConflict", "客户公司名冲突");
+
+ private final String errCode;
+ private final String errDesc;
+
+ private ErrorCode(String errCode, String errDesc) {
+ this.errCode = errCode;
+ this.errDesc = errDesc;
+ }
+
+ public String getErrCode() {
+ return errCode;
+ }
+
+ public String getErrDesc() {
+ return errDesc;
+ }
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/event/CustomerCreatedEvent.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/event/CustomerCreatedEvent.java
new file mode 100644
index 0000000..acd359a
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/event/CustomerCreatedEvent.java
@@ -0,0 +1,23 @@
+package com.alibaba.demo.dto.event;
+
+import static com.alibaba.demo.dto.event.DomainEventConstant.CUSTOMER_CREATED_TOPIC;
+
+/**
+ * CustomerCreatedEvent
+ *
+ * @author Frank Zhang
+ * @date 2019-01-04 10:32 AM
+ */
+public class CustomerCreatedEvent{
+
+ private String customerId;
+
+ public String getCustomerId() {
+ return customerId;
+ }
+
+ public void setCustomerId(String customerId) {
+ this.customerId = customerId;
+ }
+
+}
diff --git a/demo-web-client/src/main/java/com/alibaba/demo/dto/event/DomainEventConstant.java b/demo-web-client/src/main/java/com/alibaba/demo/dto/event/DomainEventConstant.java
new file mode 100644
index 0000000..569ec5b
--- /dev/null
+++ b/demo-web-client/src/main/java/com/alibaba/demo/dto/event/DomainEventConstant.java
@@ -0,0 +1,11 @@
+package com.alibaba.demo.dto.event;
+
+/**
+ * @author niexiaolong
+ * @date 2019/4/16
+ */
+public class DomainEventConstant {
+
+ public static final String CUSTOMER_CREATED_TOPIC = "CRM_CUSTOMER_CREATED_DOMAIN_EVENT_TOPIC";
+
+}
diff --git a/demo-web-domain/pom.xml b/demo-web-domain/pom.xml
new file mode 100644
index 0000000..a1740c9
--- /dev/null
+++ b/demo-web-domain/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-web-domain
+ jar
+ demo-web-domain
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-client
+
+
+
+
+ com.alibaba.cola
+ cola-component-domain-starter
+
+
+ com.alibaba.cola
+ cola-component-exception
+
+
+
+
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CompanyType.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CompanyType.java
new file mode 100644
index 0000000..239fe2c
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CompanyType.java
@@ -0,0 +1,14 @@
+package com.alibaba.demo.domain.customer;
+
+/**
+ * CompanyType
+ *
+ * @author Frank Zhang
+ * @date 2018-01-08 11:02 AM
+ */
+public enum CompanyType {
+ POTENTIAL,
+ INTENTIONAL,
+ IMPORTANT,
+ VIP;
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Credit.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Credit.java
new file mode 100644
index 0000000..a32190a
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Credit.java
@@ -0,0 +1,10 @@
+package com.alibaba.demo.domain.customer;
+
+import com.alibaba.cola.domain.Entity;
+import lombok.Data;
+
+@Data
+@Entity
+public class Credit{
+
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Customer.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Customer.java
new file mode 100644
index 0000000..b52c145
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/Customer.java
@@ -0,0 +1,38 @@
+package com.alibaba.demo.domain.customer;
+
+import com.alibaba.cola.domain.Entity;
+import com.alibaba.cola.exception.BizException;
+import lombok.Data;
+
+//Domain Entity can choose to extend the domain model which is used for DTO
+@Data
+@Entity
+public class Customer{
+
+ private String customerId;
+ private String memberId;
+ private String globalId;
+ private long registeredCapital;
+ private String companyName;
+ private SourceType sourceType;
+ private CompanyType companyType;
+
+ public Customer() {
+ }
+
+ public boolean isBigCompany() {
+ return registeredCapital > 10000000; //注册资金大于1000万的是大企业
+ }
+
+ public boolean isSME() {
+ return registeredCapital > 10000 && registeredCapital < 1000000; //注册资金大于10万小于100万的为中小企业
+ }
+
+ public void checkConflict(){
+ //Per different biz, the check policy could be different, if so, use ExtensionPoint
+ if("ConflictCompanyName".equals(this.companyName)){
+ throw new BizException(this.companyName+" has already existed, you can not add it");
+ }
+
+ }
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CustomerType.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CustomerType.java
new file mode 100644
index 0000000..0739dbd
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/CustomerType.java
@@ -0,0 +1,14 @@
+package com.alibaba.demo.domain.customer;
+
+/**
+ * CustomerType
+ *
+ * @author Frank Zhang
+ * @date 2018-01-08 8:51 AM
+ */
+public enum CustomerType {
+ POTENTIAL,
+ INTENTIONAL,
+ IMPORTANT,
+ VIP;
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/SourceType.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/SourceType.java
new file mode 100644
index 0000000..825e5f4
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/SourceType.java
@@ -0,0 +1,12 @@
+package com.alibaba.demo.domain.customer;
+
+/**
+ * SourceType
+ *
+ * @author Frank Zhang
+ * @date 2018-01-08 11:09 AM
+ */
+public enum SourceType {
+ BIZ_ONE, //From biz one
+ BIZ_TWO; //From biz two
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/domainservice/CreditChecker.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/domainservice/CreditChecker.java
new file mode 100644
index 0000000..8c64697
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/domainservice/CreditChecker.java
@@ -0,0 +1,6 @@
+package com.alibaba.demo.domain.customer.domainservice;
+
+//The domain's ability can also be placed here
+public class CreditChecker{
+
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CreditGateway.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CreditGateway.java
new file mode 100644
index 0000000..c9cfc79
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CreditGateway.java
@@ -0,0 +1,8 @@
+package com.alibaba.demo.domain.customer.gateway;
+
+import com.alibaba.demo.domain.customer.Credit;
+
+//Assume that the credit info is in another distributed Service
+public interface CreditGateway {
+ Credit getCredit(String customerId);
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CustomerGateway.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CustomerGateway.java
new file mode 100644
index 0000000..5abf2c5
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/customer/gateway/CustomerGateway.java
@@ -0,0 +1,7 @@
+package com.alibaba.demo.domain.customer.gateway;
+
+import com.alibaba.demo.domain.customer.Customer;
+
+public interface CustomerGateway {
+ Customer getByById(String customerId);
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/order/Order.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/order/Order.java
new file mode 100644
index 0000000..f3d7832
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/order/Order.java
@@ -0,0 +1,5 @@
+package com.alibaba.demo.domain.order;
+
+public class Order{
+
+}
diff --git a/demo-web-domain/src/main/java/com/alibaba/demo/domain/package-info.java b/demo-web-domain/src/main/java/com/alibaba/demo/domain/package-info.java
new file mode 100644
index 0000000..08180c9
--- /dev/null
+++ b/demo-web-domain/src/main/java/com/alibaba/demo/domain/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * This is domain module, the core business logic is implemented here.
+ *
+ * @author fulan.zjf
+ */
+package com.alibaba.demo.domain;
\ No newline at end of file
diff --git a/demo-web-domain/src/test/java/com/alibaba/demo/domain/CustomerEntityTest.java b/demo-web-domain/src/test/java/com/alibaba/demo/domain/CustomerEntityTest.java
new file mode 100644
index 0000000..862acfe
--- /dev/null
+++ b/demo-web-domain/src/test/java/com/alibaba/demo/domain/CustomerEntityTest.java
@@ -0,0 +1,9 @@
+package com.alibaba.demo.domain;
+
+
+public class CustomerEntityTest {
+
+ public void testCustomerConflict() {
+ System.out.println("Please mock gatewayimpl, test pure Domain Knowledge");
+ }
+}
diff --git a/demo-web-infrastructure/pom.xml b/demo-web-infrastructure/pom.xml
new file mode 100644
index 0000000..d8a0f13
--- /dev/null
+++ b/demo-web-infrastructure/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-web-infrastructure
+ jar
+ demo-web-infrastructure
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-domain
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+
+
+ mysql
+ mysql-connector-java
+
+
+ com.alibaba
+ fastjson
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/config/DiamondConfig.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/config/DiamondConfig.java
new file mode 100644
index 0000000..0020c1f
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/config/DiamondConfig.java
@@ -0,0 +1,5 @@
+package com.alibaba.demo.config;
+
+public class DiamondConfig {
+ public final static String DummyConfig = "DummyConfig";
+}
\ No newline at end of file
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CreditGatewayImpl.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CreditGatewayImpl.java
new file mode 100644
index 0000000..aa92d72
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CreditGatewayImpl.java
@@ -0,0 +1,10 @@
+package com.alibaba.demo.customer;
+
+import com.alibaba.demo.domain.customer.Credit;
+import com.alibaba.demo.domain.customer.gateway.CreditGateway;
+
+public class CreditGatewayImpl implements CreditGateway {
+ public Credit getCredit(String customerId){
+ return null;
+ }
+}
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerDO.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerDO.java
new file mode 100644
index 0000000..cb1b48f
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerDO.java
@@ -0,0 +1,12 @@
+package com.alibaba.demo.customer;
+
+import lombok.Data;
+
+@Data
+public class CustomerDO{
+ private String customerId;
+ private String memberId;
+ private String globalId;
+ private long registeredCapital;
+ private String companyName;
+}
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerGatewayImpl.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerGatewayImpl.java
new file mode 100644
index 0000000..058f89c
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerGatewayImpl.java
@@ -0,0 +1,19 @@
+package com.alibaba.demo.customer;
+
+import com.alibaba.demo.domain.customer.Customer;
+import com.alibaba.demo.domain.customer.gateway.CustomerGateway;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CustomerGatewayImpl implements CustomerGateway {
+ @Autowired
+ private CustomerMapper customerMapper;
+
+ public Customer getByById(String customerId){
+ CustomerDO customerDO = customerMapper.getById(customerId);
+ //Convert to Customer
+ return null;
+ }
+}
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerMapper.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerMapper.java
new file mode 100644
index 0000000..2ed962d
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/customer/CustomerMapper.java
@@ -0,0 +1,9 @@
+package com.alibaba.demo.customer;
+
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CustomerMapper{
+
+ CustomerDO getById(String customerId);
+}
diff --git a/demo-web-infrastructure/src/main/java/com/alibaba/demo/order/OrderGatewayImpl.java b/demo-web-infrastructure/src/main/java/com/alibaba/demo/order/OrderGatewayImpl.java
new file mode 100644
index 0000000..1d9e43a
--- /dev/null
+++ b/demo-web-infrastructure/src/main/java/com/alibaba/demo/order/OrderGatewayImpl.java
@@ -0,0 +1,5 @@
+package com.alibaba.demo.order;
+
+public class OrderGatewayImpl{
+
+}
diff --git a/demo-web-infrastructure/src/main/resources/logback-spring.xml b/demo-web-infrastructure/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..38a1553
--- /dev/null
+++ b/demo-web-infrastructure/src/main/resources/logback-spring.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+ ${LOG_FILE}
+
+ ${FILE_LOG_PATTERN}
+
+
+ ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
+ 7
+ 50MB
+ 20GB
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf8
+
+
+
+
+
+
+
+
diff --git a/demo-web-infrastructure/src/main/resources/mybatis/customer-mapper.xml b/demo-web-infrastructure/src/main/resources/mybatis/customer-mapper.xml
new file mode 100644
index 0000000..46d7b8d
--- /dev/null
+++ b/demo-web-infrastructure/src/main/resources/mybatis/customer-mapper.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/demo-web-infrastructure/src/main/resources/mybatis/mybatis-config.xml b/demo-web-infrastructure/src/main/resources/mybatis/mybatis-config.xml
new file mode 100644
index 0000000..f7c8d88
--- /dev/null
+++ b/demo-web-infrastructure/src/main/resources/mybatis/mybatis-config.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-web-infrastructure/src/test/java/com/alibaba/demo/repository/CustomerMapperTest.java b/demo-web-infrastructure/src/test/java/com/alibaba/demo/repository/CustomerMapperTest.java
new file mode 100644
index 0000000..8f03c29
--- /dev/null
+++ b/demo-web-infrastructure/src/test/java/com/alibaba/demo/repository/CustomerMapperTest.java
@@ -0,0 +1,9 @@
+package com.alibaba.demo.repository;
+
+
+public class CustomerMapperTest {
+
+ public void testFindByID() {
+ System.out.println("Write your test here");
+ }
+}
diff --git a/demo-web-infrastructure/src/test/resources/sample.properties b/demo-web-infrastructure/src/test/resources/sample.properties
new file mode 100644
index 0000000..e69de29
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..8a8c57d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,157 @@
+
+
+ 4.0.0
+
+ cola-dummy-aggregation-parent
+ com.alibaba.cola
+ dummy-SNAPSHOT
+
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ pom
+ demo-web
+
+
+ 1.8
+ ${maven.compiler.source}
+ UTF-8
+ UTF-8
+ true
+
+ 4.3.2
+
+ 2.7.2
+ 2.2.2
+
+
+
+ demo-web-client
+ demo-web-adapter
+ demo-web-app
+ demo-web-domain
+ demo-web-infrastructure
+ start
+
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-adapter
+ ${project.version}
+
+
+ com.alibaba.cola.demo.web
+ demo-web-client
+ ${project.version}
+
+
+ com.alibaba.cola.demo.web
+ demo-web-app
+ ${project.version}
+
+
+ com.alibaba.cola.demo.web
+ demo-web-domain
+ ${project.version}
+
+
+ com.alibaba.cola.demo.web
+ demo-web-infrastructure
+ ${project.version}
+
+
+
+
+ com.alibaba.cola
+ cola-components-bom
+ ${cola.components.version}
+ pom
+ import
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ ${mybatis-starter.version}
+
+
+
+
+
+ javax.el
+ javax.el-api
+ 3.0.0
+
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
+
+
+
+
+
+
+
+
+ maven-resources-plugin
+ 3.3.0
+
+
+ maven-compiler-plugin
+ 3.10.1
+
+
+ maven-source-plugin
+ 3.2.1
+
+
+ maven-javadoc-plugin
+ 3.4.0
+
+
+ maven-deploy-plugin
+ 3.0.0
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+
+
diff --git a/start/pom.xml b/start/pom.xml
new file mode 100644
index 0000000..7a4d930
--- /dev/null
+++ b/start/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+
+ com.alibaba.cola.demo.web
+ demo-web-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
+
+
+ start
+ jar
+ start
+
+
+
+ com.alibaba.cola.demo.web
+ demo-web-adapter
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/start/src/main/java/com/alibaba/demo/Application.java b/start/src/main/java/com/alibaba/demo/Application.java
new file mode 100644
index 0000000..d74c6f5
--- /dev/null
+++ b/start/src/main/java/com/alibaba/demo/Application.java
@@ -0,0 +1,18 @@
+package com.alibaba.demo;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * Spring Boot Starter
+ *
+ * @author Frank Zhang
+ */
+@SpringBootApplication(scanBasePackages = {"com.alibaba.demo", "com.alibaba.cola"})
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/start/src/main/resources/application.properties b/start/src/main/resources/application.properties
new file mode 100644
index 0000000..12ae3de
--- /dev/null
+++ b/start/src/main/resources/application.properties
@@ -0,0 +1,7 @@
+project.name=start
+server.port=18080
+
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.url=jdbc:mysql://localhost:3306/lotteryDemo
+spring.datasource.username=root
+spring.datasource.password=123456
diff --git a/start/src/main/resources/logback-spring.xml b/start/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..b4d90e2
--- /dev/null
+++ b/start/src/main/resources/logback-spring.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+ ${LOG_FILE}
+
+ ${FILE_LOG_PATTERN}
+
+
+ ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
+ 7
+ 50MB
+ 20GB
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/start/src/test/java/com/alibaba/demo/TestApplication.java b/start/src/test/java/com/alibaba/demo/TestApplication.java
new file mode 100644
index 0000000..0bf4fcb
--- /dev/null
+++ b/start/src/test/java/com/alibaba/demo/TestApplication.java
@@ -0,0 +1,11 @@
+package com.alibaba.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.context.ApplicationContext;
+
+public class TestApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/start/src/test/java/com/alibaba/demo/test/CustomerServiceTest.java b/start/src/test/java/com/alibaba/demo/test/CustomerServiceTest.java
new file mode 100644
index 0000000..9016472
--- /dev/null
+++ b/start/src/test/java/com/alibaba/demo/test/CustomerServiceTest.java
@@ -0,0 +1,63 @@
+package com.alibaba.demo.test;
+
+import com.alibaba.cola.dto.Response;
+import com.alibaba.demo.api.CustomerServiceI;
+import com.alibaba.demo.dto.CustomerAddCmd;
+import com.alibaba.demo.dto.data.CustomerDTO;
+import com.alibaba.demo.dto.data.ErrorCode;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * This is for integration test.
+ *
+ * Created by fulan.zjf on 2017/11/29.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CustomerServiceTest {
+
+ @Autowired
+ private CustomerServiceI customerService;
+
+
+ @Before
+ public void setUp() {
+
+ }
+
+ @Test
+ public void testCustomerAddSuccess(){
+ //1.prepare
+ CustomerAddCmd customerAddCmd = new CustomerAddCmd();
+ CustomerDTO customerDTO = new CustomerDTO();
+ customerDTO.setCompanyName("NormalName");
+ customerAddCmd.setCustomerDTO(customerDTO);
+
+ //2.execute
+ Response response = customerService.addCustomer(customerAddCmd);
+
+ //3.assert
+ Assert.assertTrue(response.isSuccess());
+ }
+
+ @Test
+ public void testCustomerAddCompanyNameConflict(){
+ //1.prepare
+ CustomerAddCmd customerAddCmd = new CustomerAddCmd();
+ CustomerDTO customerDTO = new CustomerDTO();
+ customerDTO.setCompanyName("ConflictCompanyName");
+ customerAddCmd.setCustomerDTO(customerDTO);
+
+ //2.execute
+ Response response = customerService.addCustomer(customerAddCmd);
+
+ //3.assert error
+ Assert.assertEquals(ErrorCode.B_CUSTOMER_companyNameConflict.getErrCode(), response.getErrCode());
+ }
+}
diff --git a/start/src/test/resources/logback-test.xml b/start/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..b4d90e2
--- /dev/null
+++ b/start/src/test/resources/logback-test.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+ ${LOG_FILE}
+
+ ${FILE_LOG_PATTERN}
+
+
+ ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
+ 7
+ 50MB
+ 20GB
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/start/src/test/resources/test.properties b/start/src/test/resources/test.properties
new file mode 100644
index 0000000..e81b2a3
--- /dev/null
+++ b/start/src/test/resources/test.properties
@@ -0,0 +1,23 @@
+
+
+#tddl
+spring.tddl.app=TDDL6_APP
+spring.tddl.sharding=false
+mybatis.config-location=classpath:mybatis/mybatis-config.xml
+
+#app
+spring.hsf.group=HSF
+spring.hsf.version=1.0.0.DAILY
+spring.hsf.timeout=2000
+
+#tair
+spring.tair.config-id=mdbcomm-daily
+spring.tair.dynamic-config=true
+
+#notify
+spring.notify.subscriber.group-id=S-pb-test-subscriber1
+spring.notify.subscriber.messageListener=messageListener
+spring.notify.subscriber.binding.key=type
+spring.notify.subscriber.binding.topic=pandora-boot-test-topic
+spring.notify.publisher.group-id=P-pb-test
+spring.notify.publisher.topics=pandora-boot-test-topic2, pandora-boot-test-topic
--
Gitee
From a6f699936e52e4b73c54292b408ee30e3114948d Mon Sep 17 00:00:00 2001
From: ranyu1998 <2772602769@qq.com>
Date: Thu, 29 Feb 2024 18:17:37 +0800
Subject: [PATCH 2/4] =?UTF-8?q?feat(init):=20=E5=AE=8C=E6=88=90=E5=A5=96?=
=?UTF-8?q?=E5=93=81=E6=A8=A1=E5=9D=97=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../alibaba/demo/web/CustomerController.java | 4 +-
.../admin/AdminActivityConfigController.java | 48 +++++++++
.../demo/web/admin/AdminPrizeController.java | 59 +++++++++++
demo-web-app/pom.xml | 5 +
.../activity/ActivityConfigServiceImpl.java | 98 +++++++++++++++++++
.../activity/command/ActivityAddCmdExe.java | 29 ++++++
.../demo/assembler/ActivityAssembler.java | 68 +++++++++++++
.../demo/assembler/AwardAssembler.java | 41 ++++++++
.../demo/assembler/PrizeAssembler.java | 34 +++++++
.../demo/award/command/AwardAddCmdExe.java | 48 +++++++++
.../demo/award/command/AwardUpdateCmdExe.java | 25 +++++
.../alibaba/demo/prize/PrizeServiceImpl.java | 51 ++++++++++
.../demo/prize/command/PrizeAddCmdExe.java | 32 ++++++
.../demo/prize/command/PrizeUpdateCmdExe.java | 30 ++++++
.../prize/query/PrizeListByParamQueryExe.java | 34 +++++++
demo-web-base/pom.xml | 30 ++++++
.../demo/web/config/validate/AddGroup.java | 4 +
.../demo/web/config/validate/UpdateGroup.java | 4 +
.../cola/demo/web/enums/LdExceptionEnum.java | 29 ++++++
.../cola/demo/web/enums/RecordStatusEnum.java | 35 +++++++
.../demo/web/exception/LdCodeException.java | 37 +++++++
.../cola/demo/web/exception/LdException.java | 19 ++++
.../web/exception/TokenAuthException.java | 19 ++++
.../demo/web/handler/SysExceptionHandler.java | 98 +++++++++++++++++++
.../cola/demo/web/util/AssertUtil.java | 35 +++++++
.../cola/demo/web/util/SecurityUtil.java | 49 ++++++++++
.../alibaba/cola/demo/web/vo/FailInfo.java | 35 +++++++
.../cola/demo/web/vo/PageResultInfo.java | 71 ++++++++++++++
.../alibaba/cola/demo/web/vo/ResultInfo.java | 31 ++++++
.../alibaba/cola/demo/web/vo/SuccessInfo.java | 29 ++++++
demo-web-client/pom.xml | 4 +
.../demo/api/IActivityConfigService.java | 23 +++++
.../com/alibaba/demo/api/IPrizeService.java | 45 +++++++++
.../com/alibaba/demo/dto/ActivityAddCmd.java | 52 ++++++++++
.../demo/dto/ActivityConfigAddCmd.java | 32 ++++++
.../demo/dto/ActivityConfigUpdateCmd.java | 22 +++++
.../com/alibaba/demo/dto/AwardAddCmd.java | 41 ++++++++
.../com/alibaba/demo/dto/PrizeAddCmd.java | 47 +++++++++
.../demo/dto/data/ActivityConfigVO.java | 30 ++++++
.../com/alibaba/demo/dto/data/ActivityVO.java | 58 +++++++++++
.../com/alibaba/demo/dto/data/AwardVO.java | 63 ++++++++++++
.../com/alibaba/demo/dto/data/PrizeVO.java | 62 ++++++++++++
.../com/alibaba/demo/dto/data/RuleVO.java | 50 ++++++++++
.../demo/dto/query/PrizeListByParamQuery.java | 20 ++++
.../domain/acceptprize/AcceptPrizeEntity.java | 57 +++++++++++
.../demo/domain/activity/ActivityEntity.java | 53 ++++++++++
.../domain/activity/ActivityStatusEnum.java | 25 +++++
.../demo/domain/activity/ActivityTime.java | 60 ++++++++++++
.../activityrule/ActivityRuleEntity.java | 50 ++++++++++
.../demo/domain/award/AwardEntity.java | 74 ++++++++++++++
.../demo/domain/award/AwardNumber.java | 26 +++++
.../demo/domain/gateway/ActivityGateway.java | 19 ++++
.../demo/domain/gateway/AwardGateway.java | 19 ++++
.../demo/domain/gateway/PrizeGateway.java | 31 ++++++
.../alibaba/demo/domain/prize/Inventory.java | 25 +++++
.../demo/domain/prize/PrizeEntity.java | 63 ++++++++++++
.../demo/domain/record/RecordEntity.java | 77 +++++++++++++++
.../demo/domain/record/RecordStatus.java | 57 +++++++++++
demo-web-infrastructure/pom.xml | 18 ++++
.../demo/converter/ActivityConvertor.java | 23 +++++
.../demo/converter/PrizeConvertor.java | 30 ++++++
.../demo/database/dataobject/ActivityDO.java | 67 +++++++++++++
.../dataobject}/CustomerDO.java | 2 +-
.../demo/database/dataobject/PrizeDO.java | 67 +++++++++++++
.../gateway/impl/ActivityGatewayImpl.java | 54 ++++++++++
.../demo/gateway/impl/AwardGateWayImpl.java | 29 ++++++
.../impl}/CreditGatewayImpl.java | 2 +-
.../impl}/CustomerGatewayImpl.java | 4 +-
.../impl}/OrderGatewayImpl.java | 2 +-
.../demo/gateway/impl/PrizeGateWayImpl.java | 80 +++++++++++++++
.../alibaba/demo/mapper/ActivityMapper.java | 21 ++++
.../{customer => mapper}/CustomerMapper.java | 3 +-
.../com/alibaba/demo/mapper/PrizeMapper.java | 20 ++++
pom.xml | 64 +++++++++++-
start/pom.xml | 5 +
.../src/main/resources/application.properties | 7 --
start/src/main/resources/application.yml | 31 ++++++
77 files changed, 2831 insertions(+), 14 deletions(-)
create mode 100644 demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminActivityConfigController.java
create mode 100644 demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminPrizeController.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/activity/ActivityConfigServiceImpl.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/activity/command/ActivityAddCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/assembler/ActivityAssembler.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/assembler/AwardAssembler.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/assembler/PrizeAssembler.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardAddCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardUpdateCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/prize/PrizeServiceImpl.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeAddCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeUpdateCmdExe.java
create mode 100644 demo-web-app/src/main/java/com/alibaba/demo/prize/query/PrizeListByParamQueryExe.java
create mode 100644 demo-web-base/pom.xml
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/AddGroup.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/UpdateGroup.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/LdExceptionEnum.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/RecordStatusEnum.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdCodeException.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdException.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/TokenAuthException.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/handler/SysExceptionHandler.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/AssertUtil.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/SecurityUtil.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/vo/FailInfo.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/vo/PageResultInfo.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/vo/ResultInfo.java
create mode 100644 demo-web-base/src/main/java/com/alibaba/cola/demo/web/vo/SuccessInfo.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/api/IActivityConfigService.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/api/IPrizeService.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/ActivityAddCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/ActivityConfigAddCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/ActivityConfigUpdateCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/AwardAddCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/PrizeAddCmd.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/ActivityConfigVO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/ActivityVO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/AwardVO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/PrizeVO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/data/RuleVO.java
create mode 100644 demo-web-client/src/main/java/com/alibaba/demo/dto/query/PrizeListByParamQuery.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/acceptprize/AcceptPrizeEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/activity/ActivityEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/activity/ActivityStatusEnum.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/activity/ActivityTime.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/activityrule/ActivityRuleEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/award/AwardEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/award/AwardNumber.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/gateway/ActivityGateway.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/gateway/AwardGateway.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/gateway/PrizeGateway.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/prize/Inventory.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/prize/PrizeEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/record/RecordEntity.java
create mode 100644 demo-web-domain/src/main/java/com/alibaba/demo/domain/record/RecordStatus.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/converter/ActivityConvertor.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/converter/PrizeConvertor.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/database/dataobject/ActivityDO.java
rename demo-web-infrastructure/src/main/java/com/alibaba/demo/{customer => database/dataobject}/CustomerDO.java (81%)
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/database/dataobject/PrizeDO.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/gateway/impl/ActivityGatewayImpl.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/gateway/impl/AwardGateWayImpl.java
rename demo-web-infrastructure/src/main/java/com/alibaba/demo/{customer => gateway/impl}/CreditGatewayImpl.java (86%)
rename demo-web-infrastructure/src/main/java/com/alibaba/demo/{customer => gateway/impl}/CustomerGatewayImpl.java (78%)
rename demo-web-infrastructure/src/main/java/com/alibaba/demo/{order => gateway/impl}/OrderGatewayImpl.java (47%)
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/gateway/impl/PrizeGateWayImpl.java
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/mapper/ActivityMapper.java
rename demo-web-infrastructure/src/main/java/com/alibaba/demo/{customer => mapper}/CustomerMapper.java (59%)
create mode 100644 demo-web-infrastructure/src/main/java/com/alibaba/demo/mapper/PrizeMapper.java
delete mode 100644 start/src/main/resources/application.properties
create mode 100644 start/src/main/resources/application.yml
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java b/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
index 01bd9ef..bb012fd 100644
--- a/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/web/CustomerController.java
@@ -8,7 +8,9 @@ import com.alibaba.demo.dto.CustomerListByNameQry;
import com.alibaba.demo.dto.data.CustomerDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-
+/**
+ * 自定义接口
+ **/
@RestController
public class CustomerController {
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminActivityConfigController.java b/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminActivityConfigController.java
new file mode 100644
index 0000000..59b8c7a
--- /dev/null
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminActivityConfigController.java
@@ -0,0 +1,48 @@
+package com.alibaba.demo.web.admin;
+
+import com.alibaba.demo.api.IActivityConfigService;
+import com.alibaba.demo.dto.ActivityConfigAddCmd;
+import com.alibaba.demo.dto.data.ActivityConfigVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 活动配置接口
+ * @ClassName AdminActivityConfigController
+ * @Description 活动配置接口
+ * @Author guocheng
+ * @Date 2024/2/28 16:58
+ * @Version 1.0
+ **/
+@Slf4j
+@AllArgsConstructor
+@RestController
+@RequestMapping("/admin/v1/activityConfig")
+public class AdminActivityConfigController {
+
+ private final IActivityConfigService activityConfigService;
+
+ /**
+ * 添加活动配置
+ **/
+ @PostMapping("/add")
+ public ActivityConfigVO add(@Validated @RequestBody ActivityConfigAddCmd cmd){
+ return activityConfigService.add(cmd);
+ }
+
+ /**
+ * 查看活动配置
+ **/
+ @GetMapping("/one")
+ public ActivityConfigVO one(@RequestParam("id") Long id){
+ return activityConfigService.one(id);
+ }
+
+// @GetMapping("/copy")
+// public ActivityConfigCopyVO copy(@RequestParam("id") Long id){
+//
+//// return activityConfigService.copy(id);
+// }
+}
diff --git a/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminPrizeController.java b/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminPrizeController.java
new file mode 100644
index 0000000..d119f3b
--- /dev/null
+++ b/demo-web-adapter/src/main/java/com/alibaba/demo/web/admin/AdminPrizeController.java
@@ -0,0 +1,59 @@
+package com.alibaba.demo.web.admin;
+
+import com.alibaba.cola.demo.web.vo.PageResultInfo;
+import com.alibaba.demo.api.IPrizeService;
+import com.alibaba.demo.dto.PrizeAddCmd;
+import com.alibaba.demo.dto.data.PrizeVO;
+import com.alibaba.demo.dto.query.PrizeListByParamQuery;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 奖品接口
+ */
+@Slf4j
+@AllArgsConstructor
+@RestController
+@RequestMapping("/admin/v1/prize")
+public class AdminPrizeController {
+
+ private final IPrizeService prizeService;
+
+
+ /**
+ * 添加奖品
+ **/
+ @PostMapping("/add")
+ public PrizeVO add(@Validated @RequestBody PrizeAddCmd cmd) {
+ return prizeService.add(cmd);
+ }
+
+ /**
+ * 修改奖品
+ **/
+ @PostMapping("/update")
+ public PrizeVO update(@Validated @RequestBody PrizeAddCmd cmd) {
+ return prizeService.update(cmd);
+ }
+
+
+ /**
+ * 分页奖品
+ **/
+ @PostMapping("/page")
+ public PageResultInfo page(@RequestBody PrizeListByParamQuery query) {
+ return prizeService.page(query);
+ }
+
+
+ /**
+ * 查看奖品
+ **/
+ @PostMapping("/{id}")
+ public PrizeVO one(@PathVariable(name = "id") Long id) {
+ return prizeService.one(id);
+ }
+
+}
diff --git a/demo-web-app/pom.xml b/demo-web-app/pom.xml
index a1f9354..96ee377 100644
--- a/demo-web-app/pom.xml
+++ b/demo-web-app/pom.xml
@@ -41,5 +41,10 @@
jakarta.el
+
+
+ cn.hutool
+ hutool-all
+
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/activity/ActivityConfigServiceImpl.java b/demo-web-app/src/main/java/com/alibaba/demo/activity/ActivityConfigServiceImpl.java
new file mode 100644
index 0000000..528811e
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/activity/ActivityConfigServiceImpl.java
@@ -0,0 +1,98 @@
+package com.alibaba.demo.activity;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.cola.demo.web.util.AssertUtil;
+import com.alibaba.demo.activity.command.ActivityAddCmdExe;
+import com.alibaba.demo.api.IActivityConfigService;
+import com.alibaba.demo.award.command.AwardAddCmdExe;
+import com.alibaba.demo.dto.ActivityConfigAddCmd;
+import com.alibaba.demo.dto.ActivityConfigUpdateCmd;
+import com.alibaba.demo.dto.AwardAddCmd;
+import com.alibaba.demo.dto.data.ActivityConfigVO;
+import com.alibaba.demo.dto.data.ActivityVO;
+import com.alibaba.demo.dto.data.AwardVO;
+import com.alibaba.demo.dto.data.RuleVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName ActivityConfigServiceImpl
+ * @Description TODO
+ * @Author Jincheng.Guo
+ * @Date 2024/2/28 17:35
+ * @Version 1.0
+ **/
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ActivityConfigServiceImpl implements IActivityConfigService {
+
+ private final ActivityAddCmdExe activityAddCmdExe;
+ private final AwardAddCmdExe awardAddCmdExe;
+
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public ActivityConfigVO add(ActivityConfigAddCmd cmd) {
+ // 添加活动
+ ActivityVO activityVO = activityAddCmdExe.execute(cmd.getActivityAddCmd());
+ // 添加活动规则 todo
+
+// List ruleVOList = addActivityRule(activityVO, cmd.getRuleIdList());
+ // 添加奖项信息
+ List awardVOList = addAward(activityVO, cmd.getAwardAddCmdList());
+
+ ActivityConfigVO activityConfigVO = new ActivityConfigVO();
+ activityConfigVO.setActivityVO(activityVO);
+ activityConfigVO.setRuleVOList(null);
+ activityConfigVO.setAwardVOList(awardVOList);
+
+ // 发布活动创建事件
+
+ return activityConfigVO;
+ }
+
+ @Override
+ public ActivityConfigVO update(ActivityConfigUpdateCmd cmd) {
+ return null;
+ }
+
+ @Override
+ public ActivityConfigVO one(Long id) {
+ return null;
+ }
+
+
+// private List addActivityRule(ActivityVO activityVO, List ruleIdList) {
+//
+// List cmdList = new ArrayList<>();
+// for (Long ruleId : ruleIdList) {
+// ActivityRuleAddCmd activityRuleAddCmd = new ActivityRuleAddCmd();
+// activityRuleAddCmd.setActivityId(activityVO.getId());
+// activityRuleAddCmd.setRuleId(ruleId);
+// cmdList.add(activityRuleAddCmd);
+// }
+// List activityRuleVOList = activityRuleAddCmdExe.execute(cmdList);
+//
+// return getRuleVOList(activityRuleVOList.stream().map(ActivityRuleVO::getRuleId).collect(Collectors.toList()));
+// }
+
+
+ private List addAward(ActivityVO activityVO, List awardAddCmdList) {
+ AssertUtil.isTrue(CollectionUtil.isEmpty(awardAddCmdList), "奖项不为空!");
+
+ List result = new ArrayList<>();
+ for (AwardAddCmd awardAddCmd : awardAddCmdList) {
+ awardAddCmd.setActivityId(activityVO.getId());
+ result.add(awardAddCmdExe.execute(awardAddCmd));
+ }
+
+ return result;
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/activity/command/ActivityAddCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/activity/command/ActivityAddCmdExe.java
new file mode 100644
index 0000000..47fa957
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/activity/command/ActivityAddCmdExe.java
@@ -0,0 +1,29 @@
+package com.alibaba.demo.activity.command;
+
+import com.alibaba.demo.assembler.ActivityAssembler;
+import com.alibaba.demo.domain.activity.ActivityEntity;
+import com.alibaba.demo.domain.gateway.ActivityGateway;
+import com.alibaba.demo.dto.ActivityAddCmd;
+import com.alibaba.demo.dto.data.ActivityVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.activity.command
+ * @createTime 2022/12/2 - 23:58
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class ActivityAddCmdExe {
+
+ private final ActivityGateway activityGateway;
+
+ public ActivityVO execute(ActivityAddCmd cmd) {
+ ActivityEntity entity = activityGateway.save(ActivityAssembler.toAddEntity(cmd));
+ return ActivityAssembler.toActivityVO(entity);
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/assembler/ActivityAssembler.java b/demo-web-app/src/main/java/com/alibaba/demo/assembler/ActivityAssembler.java
new file mode 100644
index 0000000..25275f0
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/assembler/ActivityAssembler.java
@@ -0,0 +1,68 @@
+package com.alibaba.demo.assembler;
+
+import com.alibaba.cola.demo.web.util.SecurityUtil;
+import com.alibaba.demo.domain.activity.ActivityEntity;
+import com.alibaba.demo.domain.activity.ActivityTime;
+import com.alibaba.demo.dto.ActivityAddCmd;
+import com.alibaba.demo.dto.data.ActivityVO;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.assembler
+ * @createTime 2022/12/3 - 0:03
+ * @description
+ */
+public class ActivityAssembler {
+ public static ActivityEntity toAddEntity(ActivityAddCmd cmd) {
+ ActivityEntity activityEntity = new ActivityEntity();
+ activityEntity.setActivityName(cmd.getActivityName());
+ activityEntity.setActivityTime(new ActivityTime(cmd.getStartTime(), cmd.getEndTime()));
+ activityEntity.setDescribe(cmd.getDescribe());
+ activityEntity.setCreateTime(LocalDateTime.now());
+ activityEntity.setCreator(SecurityUtil.getName());
+ activityEntity.setUpdateTime(LocalDateTime.now());
+ activityEntity.setUpdater(SecurityUtil.getName());
+
+ return activityEntity;
+ }
+
+ public static ActivityVO toActivityVO(ActivityEntity entity) {
+ ActivityVO activityVO = new ActivityVO();
+ activityVO.setId(entity.getId());
+ activityVO.setActivityName(entity.getActivityName());
+ activityVO.setStartTime(entity.getActivityTime().getStartTime());
+ activityVO.setEndTime(entity.getActivityTime().getEndTime());
+ activityVO.setDescribe(entity.getDescribe());
+ activityVO.setCreateTime(entity.getCreateTime());
+ activityVO.setCreator(entity.getCreator());
+ activityVO.setUpdateTime(entity.getUpdateTime());
+ activityVO.setUpdater(entity.getUpdater());
+ activityVO.setStatus(entity.getActivityTime().getStatus().getValue());
+
+ return activityVO;
+ }
+
+// public static ActivityEntity toUpdateEntity(ActivityUpdateCmd cmd) {
+// ActivityEntity activityEntity = new ActivityEntity();
+// activityEntity.setId(cmd.getId());
+// activityEntity.setActivityName(cmd.getActivityName());
+// activityEntity.setActivityTime(new ActivityTime(cmd.getStartTime(), cmd.getEndTime()));
+// activityEntity.setDescribe(cmd.getDescribe());
+// activityEntity.setUpdateTime(LocalDateTime.now());
+// activityEntity.setUpdater(SecurityUtil.getName());
+//
+// return activityEntity;
+// }
+
+ public static ActivityAddCmd toActivityAddCmd(ActivityVO activityVO) {
+ ActivityAddCmd activityAddCmd = new ActivityAddCmd();
+ activityAddCmd.setActivityName(activityVO.getActivityName());
+ activityAddCmd.setStartTime(activityVO.getStartTime());
+ activityAddCmd.setEndTime(activityVO.getEndTime());
+ activityAddCmd.setDescribe(activityVO.getDescribe());
+
+ return activityAddCmd;
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/assembler/AwardAssembler.java b/demo-web-app/src/main/java/com/alibaba/demo/assembler/AwardAssembler.java
new file mode 100644
index 0000000..5af1ba5
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/assembler/AwardAssembler.java
@@ -0,0 +1,41 @@
+package com.alibaba.demo.assembler;
+
+import com.alibaba.demo.database.dataobject.ActivityDO;
+import com.alibaba.demo.domain.activity.ActivityEntity;
+import com.alibaba.demo.domain.award.AwardEntity;
+import com.alibaba.demo.domain.award.AwardNumber;
+import com.alibaba.demo.dto.AwardAddCmd;
+import com.alibaba.demo.dto.data.AwardVO;
+import org.mapstruct.Mapper;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author guocheng
+ * @Description TODO
+ * @Date 20:04 2024/2/28
+ * @Param
+ * @return
+ **/
+@Mapper(componentModel = "spring")
+public interface AwardAssembler {
+
+ AwardEntity toAddEntity(AwardAddCmd cmd);
+
+ AwardVO toAwardVO(AwardEntity entity) ;
+
+// AwardEntity toUpdateEntity(AwardUpdateCmd cmd) ;
+
+ AwardAddCmd toAwardAddCmd(AwardVO awardVO);
+
+ AwardEntity toAwardEntity(AwardVO awardVO) ;
+
+
+ default AwardNumber awardNumber(Integer number){
+ return new AwardNumber(number);
+ }
+
+ default Integer awardNumberV2(AwardNumber awardNumber){
+ return awardNumber.getNumber();
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/assembler/PrizeAssembler.java b/demo-web-app/src/main/java/com/alibaba/demo/assembler/PrizeAssembler.java
new file mode 100644
index 0000000..e325016
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/assembler/PrizeAssembler.java
@@ -0,0 +1,34 @@
+package com.alibaba.demo.assembler;
+
+import com.alibaba.demo.domain.award.AwardEntity;
+import com.alibaba.demo.domain.prize.PrizeEntity;
+import com.alibaba.demo.dto.AwardAddCmd;
+import com.alibaba.demo.dto.PrizeAddCmd;
+import com.alibaba.demo.dto.data.AwardVO;
+import com.alibaba.demo.dto.data.PrizeVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+
+/**
+ * @Author guocheng
+ * @Description TODO
+ * @Date 20:04 2024/2/28
+ * @Param
+ * @return
+ **/
+@Mapper(componentModel = "spring")
+public interface PrizeAssembler {
+
+
+
+ @Mapping(target = "inventory.inventory",source = "inventory")
+ PrizeEntity toAddEntity(PrizeAddCmd cmd);
+
+ @Mapping(target = "inventory",source = "inventory.inventory")
+ PrizeVO toPrizeVO(PrizeEntity entity) ;
+
+
+
+
+
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardAddCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardAddCmdExe.java
new file mode 100644
index 0000000..70d8c24
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardAddCmdExe.java
@@ -0,0 +1,48 @@
+package com.alibaba.demo.award.command;
+
+import com.alibaba.cola.demo.web.util.AssertUtil;
+import com.alibaba.demo.assembler.AwardAssembler;
+import com.alibaba.demo.domain.award.AwardEntity;
+import com.alibaba.demo.domain.gateway.AwardGateway;
+import com.alibaba.demo.domain.gateway.PrizeGateway;
+import com.alibaba.demo.dto.AwardAddCmd;
+import com.alibaba.demo.dto.data.AwardVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.award.command
+ * @createTime 2022/12/2 - 22:46
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class AwardAddCmdExe {
+
+ private final AwardGateway awardGateway;
+ private final PrizeGateway prizeGateway;
+ private final AwardAssembler awardAssembler;
+
+ public AwardVO execute(AwardAddCmd cmd) {
+ AssertUtil.isTrue(Objects.isNull(cmd.getActivityId()), "奖项活动id不为空!");
+
+ // 保存奖项
+ AwardEntity entity = awardGateway.save(awardAssembler.toAddEntity(cmd));
+
+ // 扣取奖品库存
+ if (Boolean.FALSE.equals(entity.isPrize())) {
+ // 代表该奖项是谢谢参与一类,不需要扣减奖品库存
+ return awardAssembler.toAwardVO(entity);
+ }
+
+ int update = prizeGateway.deductionInventory(cmd.getPrizeId(), cmd.getNumber());
+ AssertUtil.isTrue(update < 1, String.format("扣取奖品:%s, 出错,库存不足或奖品不存在!", cmd.getPrizeId()));
+
+ return awardAssembler.toAwardVO(entity);
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardUpdateCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardUpdateCmdExe.java
new file mode 100644
index 0000000..a751ab3
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/award/command/AwardUpdateCmdExe.java
@@ -0,0 +1,25 @@
+package com.alibaba.demo.award.command;
+
+import com.alibaba.demo.domain.gateway.AwardGateway;
+import com.alibaba.demo.dto.data.AwardVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.award.command
+ * @createTime 2022/12/2 - 22:47
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class AwardUpdateCmdExe {
+ private final AwardGateway awardGateway;
+// public AwardVO execute(AwardUpdateCmd cmd) {
+// AwardEntity entity = awardGateway.save(AwardAssembler.toUpdateEntity(cmd));
+//
+// return AwardAssembler.toAwardVO(entity);
+// }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/prize/PrizeServiceImpl.java b/demo-web-app/src/main/java/com/alibaba/demo/prize/PrizeServiceImpl.java
new file mode 100644
index 0000000..951b4a4
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/prize/PrizeServiceImpl.java
@@ -0,0 +1,51 @@
+package com.alibaba.demo.prize;
+
+import com.alibaba.cola.demo.web.vo.PageResultInfo;
+import com.alibaba.demo.api.IPrizeService;
+import com.alibaba.demo.dto.PrizeAddCmd;
+import com.alibaba.demo.dto.data.PrizeVO;
+import com.alibaba.demo.dto.query.PrizeListByParamQuery;
+import com.alibaba.demo.prize.command.PrizeAddCmdExe;
+import com.alibaba.demo.prize.command.PrizeUpdateCmdExe;
+import com.alibaba.demo.prize.query.PrizeListByParamQueryExe;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName PrizeServiceImpl
+ * @Description TODO
+ * @Author Jincheng.Guo
+ * @Date 2024/2/29 15:58
+ * @Version 1.0
+ **/
+@Slf4j
+@Service
+@AllArgsConstructor
+public class PrizeServiceImpl implements IPrizeService {
+
+ private final PrizeAddCmdExe prizeAddCmdExe;
+ private final PrizeUpdateCmdExe prizeUpdateCmdExe;
+ private final PrizeListByParamQueryExe prizeListByParamQueryExe;
+
+
+ @Override
+ public PrizeVO add(PrizeAddCmd cmd) {
+ return prizeAddCmdExe.execute(cmd);
+ }
+
+ @Override
+ public PrizeVO update(PrizeAddCmd cmd) {
+ return prizeUpdateCmdExe.execute(cmd);
+ }
+
+ @Override
+ public PageResultInfo page(PrizeListByParamQuery query) {
+ return prizeListByParamQueryExe.execute(query);
+ }
+
+ @Override
+ public PrizeVO one(Long id) {
+ return null;
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeAddCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeAddCmdExe.java
new file mode 100644
index 0000000..3e37632
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeAddCmdExe.java
@@ -0,0 +1,32 @@
+package com.alibaba.demo.prize.command;
+
+import com.alibaba.demo.assembler.PrizeAssembler;
+import com.alibaba.demo.domain.gateway.PrizeGateway;
+import com.alibaba.demo.domain.prize.PrizeEntity;
+import com.alibaba.demo.dto.PrizeAddCmd;
+import com.alibaba.demo.dto.data.PrizeVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.prize
+ * @createTime 2022/12/1 - 22:20
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class PrizeAddCmdExe {
+
+ private final PrizeAssembler prizeAssembler;
+
+ private final PrizeGateway prizeGateway;
+
+ public PrizeVO execute(PrizeAddCmd cmd) {
+ PrizeEntity prizeEntity = prizeGateway.save(prizeAssembler.toAddEntity(cmd));
+
+ return prizeAssembler.toPrizeVO(prizeEntity);
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeUpdateCmdExe.java b/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeUpdateCmdExe.java
new file mode 100644
index 0000000..4a2ccc6
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/prize/command/PrizeUpdateCmdExe.java
@@ -0,0 +1,30 @@
+package com.alibaba.demo.prize.command;
+
+import com.alibaba.demo.assembler.PrizeAssembler;
+import com.alibaba.demo.domain.gateway.PrizeGateway;
+import com.alibaba.demo.domain.prize.PrizeEntity;
+import com.alibaba.demo.dto.PrizeAddCmd;
+import com.alibaba.demo.dto.data.PrizeVO;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.prize
+ * @createTime 2022/12/1 - 22:20
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class PrizeUpdateCmdExe {
+
+ private final PrizeGateway prizeGateway;
+ private final PrizeAssembler prizeAssembler;
+
+ public PrizeVO execute(PrizeAddCmd cmd) {
+ PrizeEntity prizeEntity = prizeGateway.save(prizeAssembler.toAddEntity(cmd));
+ return prizeAssembler.toPrizeVO(prizeEntity);
+ }
+}
diff --git a/demo-web-app/src/main/java/com/alibaba/demo/prize/query/PrizeListByParamQueryExe.java b/demo-web-app/src/main/java/com/alibaba/demo/prize/query/PrizeListByParamQueryExe.java
new file mode 100644
index 0000000..1a0ea4d
--- /dev/null
+++ b/demo-web-app/src/main/java/com/alibaba/demo/prize/query/PrizeListByParamQueryExe.java
@@ -0,0 +1,34 @@
+package com.alibaba.demo.prize.query;
+
+import cn.hutool.core.util.PageUtil;
+import com.alibaba.cola.demo.web.vo.PageResultInfo;
+import com.alibaba.demo.assembler.PrizeAssembler;
+import com.alibaba.demo.domain.gateway.PrizeGateway;
+import com.alibaba.demo.domain.prize.PrizeEntity;
+import com.alibaba.demo.dto.data.PrizeVO;
+import com.alibaba.demo.dto.query.PrizeListByParamQuery;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.function.Function;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckyapp.prize.query
+ * @createTime 2022/12/1 - 22:21
+ * @description
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class PrizeListByParamQueryExe {
+
+ private final PrizeGateway prizeGateway;
+ private final PrizeAssembler prizeAssembler;
+
+ public PageResultInfo execute(PrizeListByParamQuery query) {
+ PageResultInfo page = prizeGateway.page(query);
+ return page.convert(prizeAssembler::toPrizeVO);
+ }
+}
diff --git a/demo-web-base/pom.xml b/demo-web-base/pom.xml
new file mode 100644
index 0000000..802aff8
--- /dev/null
+++ b/demo-web-base/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ demo-web-parent
+ com.alibaba.cola.demo.web
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ demo-web-base
+
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
\ No newline at end of file
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/AddGroup.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/AddGroup.java
new file mode 100644
index 0000000..e7eb406
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/AddGroup.java
@@ -0,0 +1,4 @@
+package com.alibaba.cola.demo.web.config.validate;
+
+public interface AddGroup {
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/UpdateGroup.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/UpdateGroup.java
new file mode 100644
index 0000000..fec761d
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/config/validate/UpdateGroup.java
@@ -0,0 +1,4 @@
+package com.alibaba.cola.demo.web.config.validate;
+
+public interface UpdateGroup {
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/LdExceptionEnum.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/LdExceptionEnum.java
new file mode 100644
index 0000000..ae66361
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/LdExceptionEnum.java
@@ -0,0 +1,29 @@
+package com.alibaba.cola.demo.web.enums;
+
+import com.alibaba.cola.demo.web.vo.FailInfo;
+import lombok.Getter;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.config
+ * @createTime 2022/12/4 - 21:58
+ * @description
+ */
+@Getter
+public enum LdExceptionEnum {
+
+ ADD_ERROR(FailInfo.DEFAULT_CODE, "保存数据失败!"),
+
+ UPDATE_ERROR(FailInfo.DEFAULT_CODE, "保存数据失败!"),
+
+ ;
+ private Integer code;
+
+ private String description;
+
+ LdExceptionEnum(Integer code, String description){
+ this.code = code;
+ this.description = description;
+ }
+
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/RecordStatusEnum.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/RecordStatusEnum.java
new file mode 100644
index 0000000..b5746ba
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/enums/RecordStatusEnum.java
@@ -0,0 +1,35 @@
+package com.alibaba.cola.demo.web.enums;
+
+import lombok.Getter;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.luckydomain.record
+ * @createTime 2022/12/9 - 23:06
+ * @description
+ */
+@Getter
+public enum RecordStatusEnum {
+
+ STATUE_0(0, "用户不可见"),
+
+ STATUE_1(1, "待领取奖品"),
+
+ STATUE_2(2, "待运营人员确认"),
+
+ STATUE_3(3, "待用户签收"),
+
+ STATUE_4(4, "流程结束"),
+
+ ;
+ private Integer value;
+
+ private String description;
+
+
+ RecordStatusEnum(Integer value, String description){
+ this.value = value;
+ this.description = description;
+ }
+
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdCodeException.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdCodeException.java
new file mode 100644
index 0000000..fbfe70b
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdCodeException.java
@@ -0,0 +1,37 @@
+package com.alibaba.cola.demo.web.exception;
+
+
+import com.alibaba.cola.demo.web.vo.FailInfo;
+
+public class LdCodeException extends RuntimeException {
+
+ private Integer code;
+
+ public Integer getCode() {
+ return code;
+ }
+
+ public LdCodeException() {
+ }
+
+ public LdCodeException(Integer code, String message, Object... args) {
+ super(String.format(message, args));
+ this.code = code;
+ }
+
+ public LdCodeException(String message, Object... args) {
+ super(String.format(message, args));
+ this.code = FailInfo.DEFAULT_CODE;
+ }
+
+ public LdCodeException(String message, Throwable cause, Object... args) {
+ super(String.format(message, args), cause);
+ this.code = FailInfo.DEFAULT_CODE;
+ }
+
+ public LdCodeException(Throwable cause) {
+ super(cause);
+ this.code = FailInfo.DEFAULT_CODE;
+ }
+
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdException.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdException.java
new file mode 100644
index 0000000..306d3b9
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/LdException.java
@@ -0,0 +1,19 @@
+package com.alibaba.cola.demo.web.exception;
+
+
+public class LdException extends RuntimeException {
+ public LdException() {
+ }
+ public LdException(String message, Object... args) {
+ super(String.format(message, args));
+ }
+
+ public LdException(String message, Throwable cause, Object... args) {
+ super(String.format(message, args), cause);
+ }
+
+ public LdException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/TokenAuthException.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/TokenAuthException.java
new file mode 100644
index 0000000..63ec9b8
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/exception/TokenAuthException.java
@@ -0,0 +1,19 @@
+package com.alibaba.cola.demo.web.exception;
+
+
+public class TokenAuthException extends RuntimeException {
+ public TokenAuthException() {
+ }
+ public TokenAuthException(String message, Object... args) {
+ super(String.format(message, args));
+ }
+
+ public TokenAuthException(String message, Throwable cause, Object... args) {
+ super(String.format(message, args), cause);
+ }
+
+ public TokenAuthException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/handler/SysExceptionHandler.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/handler/SysExceptionHandler.java
new file mode 100644
index 0000000..c9218ee
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/handler/SysExceptionHandler.java
@@ -0,0 +1,98 @@
+package com.alibaba.cola.demo.web.handler;
+
+import com.alibaba.cola.demo.web.exception.LdCodeException;
+import com.alibaba.cola.demo.web.exception.LdException;
+import com.alibaba.cola.demo.web.exception.TokenAuthException;
+import com.alibaba.cola.demo.web.vo.FailInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.BindException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.util.Objects;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.common.handler
+ * @createTime 2022/11/26 - 16:01
+ * @description
+ */
+@Slf4j
+@RestControllerAdvice
+public class SysExceptionHandler {
+
+ /**
+ * 最大的兜底错误处理
+ *
+ * @param ex
+ * @return
+ */
+ @ExceptionHandler(value = Exception.class)
+ public FailInfo exception(Exception ex) {
+ log.error("Exception_info:{}", ex.getMessage());
+ log.error("Exception_info:", ex);
+ return FailInfo.builder().exception(ex.getMessage()).build();
+ }
+
+ /**
+ * 参数绑定错误
+ *
+ * @param ex
+ * @return
+ */
+ @ExceptionHandler(value = BindException.class)
+ public FailInfo exception(BindException ex) {
+ String defaultMessage = Objects.requireNonNull(ex.getBindingResult().getFieldError()).getDefaultMessage();
+ log.error("Exception_info:{}", defaultMessage);
+ log.error("Exception_info:", ex);
+ return FailInfo.builder().exception(defaultMessage).build();
+ }
+
+ @ExceptionHandler(value = LdCodeException.class)
+ public FailInfo ldCodeException(LdCodeException ex) {
+ log.error("Exception_info:{}", ex.getMessage());
+ log.error("Exception_info:", ex);
+ FailInfo failInfo = new FailInfo(ex.getCode(), ex.getMessage());
+ return failInfo;
+ }
+
+ @ExceptionHandler(value = LdException.class)
+ public FailInfo sysException(Exception ex) {
+ log.error("Exception_info:{}", ex.getMessage());
+ log.error("Exception_info:", ex);
+ return FailInfo.builder().exception(ex.getMessage()).build();
+ }
+
+ @ExceptionHandler(value = TokenAuthException.class)
+ public FailInfo tokenAuthException(Exception ex) {
+ log.error("Exception_info:{}", ex.getMessage());
+ log.error("Exception_info:", ex);
+ return FailInfo.builder().exception(ex.getMessage()).build();
+ }
+
+
+// @ExceptionHandler(value = MysqlDataTruncation.class)
+// public FailInfo mysqlDataTruncation(Exception ex) {
+// log.error("Exception_info:{}", ex.getMessage());
+// log.error("Exception_info:", ex);
+// return new FailInfo(500, ex.getMessage());
+// }
+
+// @ExceptionHandler(value = DataIntegrityViolationException.class)
+// public FailInfo dataIntegrityViolationException(Exception ex) {
+// log.error("Exception_info:{}", ex.getMessage());
+// log.error("Exception_info:", ex);
+// String message = ex.getMessage();
+// String[] split = message.split("\r\n###");
+// for (String str : split) {
+// if (str.trim().isBlank() || str.trim().contains("Error")){
+// continue;
+// }
+// String[] split1 = str.split(":");
+// if (split1.length > 0) {
+// message = split1[split1.length - 1].trim();
+// }
+// }
+// return new FailInfo(500, message);
+// }
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/AssertUtil.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/AssertUtil.java
new file mode 100644
index 0000000..aa71512
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/AssertUtil.java
@@ -0,0 +1,35 @@
+package com.alibaba.cola.demo.web.util;
+
+
+import com.alibaba.cola.demo.web.exception.LdException;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.config.util
+ * @createTime 2022/12/4 - 21:52
+ * @description
+ */
+public class AssertUtil {
+
+ /**
+ * 条件是 true,抛出消息
+ * @param expression
+ * @param message
+ */
+ public static void isTrue(Boolean expression, String message) {
+ if (expression) {
+ throw new LdException(message);
+ }
+ }
+
+ /**
+ * 条件是 false,抛出消息
+ * @param expression
+ * @param message
+ */
+ public static void isFalse(Boolean expression, String message) {
+ if (!expression) {
+ throw new LdException(message);
+ }
+ }
+}
diff --git a/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/SecurityUtil.java b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/SecurityUtil.java
new file mode 100644
index 0000000..5d46222
--- /dev/null
+++ b/demo-web-base/src/main/java/com/alibaba/cola/demo/web/util/SecurityUtil.java
@@ -0,0 +1,49 @@
+package com.alibaba.cola.demo.web.util;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author J3(about:https://j3code.cn)
+ * @package cn.j3code.config.util
+ * @createTime 2022/11/30 - 22:45
+ * @description
+ */
+public class SecurityUtil {
+
+ private static ThreadLocal