# tik-wula
**Repository Path**: cscd/tik-wula
## Basic Information
- **Project Name**: tik-wula
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-21
- **Last Updated**: 2025-01-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# wula
A Strategy Route Framework
- original inspiration: https://github.com/alibaba/COLA.git
## Usage
spring-boot application support
### Maven
maven dependency import
```xml
io.yec
wula-spring-boot-starter
${wula.version}
```
### Strategy Bean
create different strategy bean with a logical component name
```java
@Slf4j
@ExtPoint("newOrderRouter")
public class NewOrderRouter implements IOrderRouter {
@Override
public void wula(OrderEntity orderEntity) {
log.info("NewOrderRouter = {}", orderEntity);
}
}
// ...
```
### bizRulesConfig
define strategy route rules, support both:
- bizRulesConfig*.json
- bizRulesConfig*.yml
```json
[
{
"group": "io.yec.wula.example.extpoint.IOrderRouter",
"def": [
{
"beanName": "newOrderRouter",
"extEl": "['businessType'] == 'NEW' && ['discounted'] == false && ['sellerId'] == '618'",
"desc": "新品"
},
{
"beanName": "normalOrderRouter",
"extEl": "['businessType'] == 'NORMAL' && ['discounted'] == true ",
"desc": "普品"
},
{
"beanName": "defaultOrderRouter",
"extEl": "['businessType'] == null",
"desc": "默认"
}
]
}
]
```
or
```yaml
---
- group: io.yec.wula.example.extpoint.IOrderRouter
def:
- beanName: newOrderRouter
extEl: "['businessType'] == 'NEW' && ['discounted'] == false && ['sellerId'] == '618'"
desc: 新品
- beanName: normalOrderRouter
extEl: "['businessType'] == 'NORMAL' && ['discounted'] == true"
desc: 普品
- beanName: defaultOrderRouter
extEl: "['businessType'] == null"
desc: 默认
- group: io.yec.wula.example.extpoint.IPersonRouter
def:
- beanName: yellowRouter
extEl: "['raceEnum'] == 'YELLOW'"
desc: 黄种人
```
### BizIdentity
define BizIdentity
```java
@Getter
@Builder
public class IdentityParam implements BizIdentity {
/**
* 业务类型
*/
private BusinessTypeEnum businessType;
/**
* 是否促销
*/
private Boolean discounted;
/**
* 卖家id
*/
private String sellerId;
/**
* 人种
*/
private RaceEnum raceEnum;
/**
* 是否歪果仁
*/
private Boolean foreign;
/**
* 家乡
*/
private String hometown;
@Override
public Identity toIdentity() {
Map pairs = new HashMap<>(64);
pairs.put("businessType", Objects.nonNull(this.getBusinessType()) ? this.getBusinessType().name() : null);
pairs.put("discounted", this.getDiscounted());
pairs.put("sellerId", this.getSellerId());
pairs.put("raceEnum", Objects.nonNull(this.getRaceEnum()) ? this.getRaceEnum().name() : null);
pairs.put("foreign", this.getForeign());
pairs.put("hometown", this.getHometown());
return new Identity(pairs);
}
}
```
### ExtensionExecutor
strategy route executor usage
```java
@SpringBootApplication
public class WulaApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(WulaApplication.class, args);
ExtensionExecutor extensionExecutor = applicationContext.getBean(ExtensionExecutor.class);
OrderEntity newOrderEntity = OrderEntity.createNewOrderEntity();
extensionExecutor.executeVoid(IOrderRouter.class,
// match rule param
IdentityParam.builder()
.businessType(newOrderEntity.getBusinessType())
.discounted(false)
.sellerId("618")
.build(),
orderRouter -> orderRouter.wula(newOrderEntity));
}
}
```