4cacc271 by 李仁豪

[feat]

1. 定义任务相关模型和接口
2. 定义设备相关模型和接口
3. 定义策略相关模型和接口
4. 定义店铺相关模型和接口
1 parent 4f23450e
Showing 33 changed files with 937 additions and 29 deletions
......@@ -34,6 +34,13 @@
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- OKHttp3 -->
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<!-- easy-rules 执行引擎 -->
<dependency>
<groupId>org.jeasy</groupId>
......
package com.ql.backend.ploycenter.application.impl;
import com.alibaba.fastjson.JSON;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.ploycenter.application.PloyService;
import com.ql.backend.ploycenter.domain.po.PloyPO;
import com.ql.backend.ploycenter.infrastructure.adapter.ControlCenterAdapter;
import com.ql.backend.ploycenter.infrastructure.converter.mapper.PloyConverter;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.PloyDao;
import com.ql.backend.ploycenter.interfaces.request.PloyCreateRequest;
......@@ -24,6 +26,9 @@ import java.util.UUID;
public class PloyServiceImpl implements PloyService {
@Resource
private ControlCenterAdapter controlCenterAdapter;
@Resource
private PloyDao ployDao;
@Override
......@@ -39,13 +44,19 @@ public class PloyServiceImpl implements PloyService {
@Override
public ApiResponse<String> fire(TaskDTO taskDTO) {
/* todo 执行策略, 创建任务 */
/* 执行策略, 创建任务 */
if (!ObjectUtils.isEmpty(taskDTO.getPloyId())) {
/* 查询策略 */
PloyPO ployPO = ployDao.getPloyById(taskDTO.getPloyId());
if (ployPO == null) {
return ApiResponse.fail("未查询到策略", null);
}
/* 创建任务 */
log.info("[Fire] taskId -> [{}], ployInfo -> [{}]", taskDTO.getTaskId(), JSON.toJSONString(ployPO));
return controlCenterAdapter.createTask(ployPO);
}
return ApiResponse.fail("未查询到策略", null);
}
}
......
package com.ql.backend.ploycenter.domain.condition;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author lirenhao
* date: 2022/9/13 10:06
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class CommonPageCondition {
private int page;
private int size;
}
......@@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ql.backend.ploycenter.common.enums.DeviceStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Set;
......@@ -15,15 +15,15 @@ import java.util.Set;
* date: 2022/9/5 11:18
*/
@Data
@Builder
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DeviceCondition {
private int page;
private int size;
public class DeviceCondition extends CommonPageCondition {
private Set<DeviceStatus> deviceStatuses;
public Set<DeviceStatus> getDevice_statuses() {
return deviceStatuses;
}
}
......
package com.ql.backend.ploycenter.domain.condition;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/13 10:07
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class PloyCondition extends CommonPageCondition {
private Set<String> ployStatus;
public Set<String> getPloy_status() {
return ployStatus;
}
}
package com.ql.backend.ploycenter.domain.condition;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/13 10:07
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ShopCondition extends CommonPageCondition {
private Set<String> shopStatus;
public Set<String> getShop_status() {
return shopStatus;
}
}
package com.ql.backend.ploycenter.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
......@@ -9,6 +10,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author lirenhao
......@@ -28,4 +30,31 @@ public class ShopPO implements Serializable {
*/
@TableId(value = "shop_id", type = IdType.ASSIGN_ID)
private String shopId;
/**
* 店铺名称
*/
@TableField(value = "shop_name")
private String shopName;
/**
* 店铺类型
*/
@TableField(value = "shop_type")
private String shopType;
/**
* 指定策略状态
*/
@TableField(value = "ploy_status")
private String ployStatus;
@TableField(value = "is_deleted")
private Boolean isDeleted;
@TableField(value = "gmt_created")
private Date gmtCreated;
@TableField(value = "gmt_modified")
private Date gmtModified;
}
......
package com.ql.backend.ploycenter.infrastructure.adapter;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.ploycenter.domain.po.PloyPO;
/**
* 控制中枢适配器
*
* @author lirenhao
* date: 2022/9/9 11:53
*/
public interface ControlCenterAdapter {
/**
* 通过策略创建任务
*/
ApiResponse<String> createTask(PloyPO ployPO);
}
package com.ql.backend.ploycenter.infrastructure.adapter.dto;
import lombok.Builder;
import lombok.Data;
/**
* @author lirenhao
* date: 2022/9/9 14:33
*/
@Data
@Builder
public class CommonControlCenterResponse<T> {
private int code;
private String msg;
private T data;
}
package com.ql.backend.ploycenter.infrastructure.adapter.dto;
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @author lirenhao
* date: 2022/9/9 13:55
*/
@Data
@Builder
public class JobCreateRequestDTO {
private String jobName;
private String processDetailUUID;
private Integer executeTimes;
private Integer executeType;
private String cronExpression;
private Object inputParam;
private Integer priority;
private Integer distributionType;
private List<Object> botList;
private Integer processChannel;
}
package com.ql.backend.ploycenter.infrastructure.adapter.dto;
import lombok.Builder;
import lombok.Data;
/**
* @author lirenhao
* date: 2022/9/9 14:35
*/
@Data
@Builder
public class JobCreateResponseDTO {
private String jobUUID;
}
package com.ql.backend.ploycenter.infrastructure.adapter.impl;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.ploycenter.domain.po.PloyPO;
import com.ql.backend.ploycenter.infrastructure.adapter.ControlCenterAdapter;
import com.ql.backend.ploycenter.infrastructure.adapter.utils.ControlCenterApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
/**
* @author lirenhao
* date: 2022/9/9 11:54
*/
@Slf4j
@Service
public class ControlCenterAdapterImpl implements ControlCenterAdapter {
private ControlCenterApi controlCenterApi;
@PostConstruct
public void init() {
controlCenterApi = new ControlCenterApi(
"https://z-commander-api.ai-indeed.com",
"111",
"111"
);
}
@Override
public ApiResponse<String> createTask(PloyPO ployPO) {
/* todo 在控制中枢创建任务 */
return ApiResponse.ok("111");
}
}
package com.ql.backend.ploycenter.infrastructure.adapter.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.ploycenter.infrastructure.adapter.dto.CommonControlCenterResponse;
import com.ql.backend.ploycenter.infrastructure.adapter.dto.JobCreateRequestDTO;
import com.ql.backend.ploycenter.infrastructure.adapter.dto.JobCreateResponseDTO;
import com.ql.backend.ploycenter.infrastructure.okhttp3.interceptor.BasicParamsInterceptor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.io.IOException;
import java.util.Objects;
/**
* @author lirenhao
* date: 2022/9/9 11:58
*/
@Slf4j
public class ControlCenterApi {
private final String domain;
private final String appKey;
private final String appSecret;
private final OkHttpClient client;
public ControlCenterApi(String domain, String appKey, String appSecret) {
this.domain = domain;
this.appKey = appKey;
this.appSecret = appSecret;
this.client = new OkHttpClient.Builder()
.addInterceptor(new BasicParamsInterceptor.Builder()
.addHeaderParam("appKey", this.appKey)
.addHeaderParam("appSecret", this.appSecret)
.build())
.build();
}
public ApiResponse<String> createJob(JobCreateRequestDTO dto) {
final Request request = new Request.Builder()
.url(this.domain + "/openAPI/v1/job")
.post(RequestBody.create(JSON.toJSONString(dto), MediaType.parse("application/json")))
.build();
try {
CommonControlCenterResponse<JobCreateResponseDTO> response = call(request);
return ApiResponse.ok(response.getData().getJobUUID());
} catch (Exception e) {
return ApiResponse.fail("请求控制中心接口失败");
}
}
private <T> T call(Request request) throws IOException {
Call call = client.newCall(request);
Response response = call.execute();
String body = Objects.requireNonNull(response.body()).string();
log.info("Body [{}]", body);
return JSON.parseObject(body, new TypeReference<T>() {
}.getType());
}
}
package com.ql.backend.ploycenter.infrastructure.okhttp3.interceptor;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import okhttp3.*;
import okio.Buffer;
import java.io.IOException;
import java.util.*;
/**
* @author lirenhao
* date: 2022/9/9 14:08
*/
public class BasicParamsInterceptor implements Interceptor {
Map<String, String> queryParamsMap = new HashMap<>(); // 添加到 URL 末尾,Get Post 方法都使用
Map<String, String> paramsMap = new HashMap<>(); // 添加到公共参数到消息体,适用 Post 请求
Map<String, String> headerParamsMap = new HashMap<>(); // 公共 Headers 添加
List<String> headerLinesList = new ArrayList<>(); // 消息头 集合形式,一次添加一行
// 私有构造器
private BasicParamsInterceptor() {
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder requestBuilder = request.newBuilder();
// process header params inject
Headers.Builder headerBuilder = request.headers().newBuilder();
// 以 Entry 添加消息头
if (headerParamsMap.size() > 0) {
Iterator iterator = headerParamsMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
headerBuilder.add((String) entry.getKey(), (String) entry.getValue());
}
}
// 以 String 形式添加消息头
if (headerLinesList.size() > 0) {
for (String line : headerLinesList) {
headerBuilder.add(line);
}
requestBuilder.headers(headerBuilder.build());
}
// process header params end
// process queryParams inject whatever it's GET or POST
if (queryParamsMap.size() > 0) {
request = injectParamsIntoUrl(request.url().newBuilder(), requestBuilder, queryParamsMap);
}
// process post body inject
if (paramsMap.size() > 0) {
if (canInjectIntoBody(request)) {
FormBody.Builder formBodyBuilder = new FormBody.Builder();
for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
formBodyBuilder.add((String) entry.getKey(), (String) entry.getValue());
}
RequestBody formBody = formBodyBuilder.build();
String postBodyString = bodyToString(request.body());
postBodyString += ((postBodyString.length() > 0) ? "&" : "") + bodyToString(formBody);
requestBuilder.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"), postBodyString));
}
}
request = requestBuilder.build();
return chain.proceed(request);
}
/**
* 确认是否是 post 请求
*
* @param request 发出的请求
* @return true 需要注入公共参数
*/
private boolean canInjectIntoBody(Request request) {
if (request == null) {
return false;
}
if (!StringUtils.equals(request.method(), "POST")) {
return false;
}
RequestBody body = request.body();
if (body == null) {
return false;
}
MediaType mediaType = body.contentType();
if (mediaType == null) {
return false;
}
if (!StringUtils.equals(mediaType.subtype(), "x-www-form-urlencoded")) {
return false;
}
return true;
}
// func to inject params into url
private Request injectParamsIntoUrl(HttpUrl.Builder httpUrlBuilder, Request.Builder requestBuilder, Map<String, String> paramsMap) {
if (paramsMap.size() > 0) {
Iterator iterator = paramsMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
httpUrlBuilder.addQueryParameter((String) entry.getKey(), (String) entry.getValue());
}
requestBuilder.url(httpUrlBuilder.build());
return requestBuilder.build();
}
return null;
}
private static String bodyToString(final RequestBody request) {
try {
final RequestBody copy = request;
final Buffer buffer = new Buffer();
if (copy != null) {
copy.writeTo(buffer);
} else {
return "";
}
return buffer.readUtf8();
} catch (final IOException e) {
return "did not work";
}
}
public static class Builder {
BasicParamsInterceptor interceptor;
public Builder() {
interceptor = new BasicParamsInterceptor();
}
// 添加公共参数到 post 消息体
public Builder addParam(String key, String value) {
interceptor.paramsMap.put(key, value);
return this;
}
// 添加公共参数到 post 消息体
public Builder addParamsMap(Map<String, String> paramsMap) {
interceptor.paramsMap.putAll(paramsMap);
return this;
}
// 添加公共参数到消息头
public Builder addHeaderParam(String key, String value) {
interceptor.headerParamsMap.put(key, value);
return this;
}
// 添加公共参数到消息头
public Builder addHeaderParamsMap(Map<String, String> headerParamsMap) {
interceptor.headerParamsMap.putAll(headerParamsMap);
return this;
}
// 添加公共参数到消息头
public Builder addHeaderLine(String headerLine) {
int index = headerLine.indexOf(":");
if (index == -1) {
throw new IllegalArgumentException("Unexpected header: " + headerLine);
}
interceptor.headerLinesList.add(headerLine);
return this;
}
// 添加公共参数到消息头
public Builder addHeaderLinesList(List<String> headerLinesList) {
for (String headerLine : headerLinesList) {
int index = headerLine.indexOf(":");
if (index == -1) {
throw new IllegalArgumentException("Unexpected header: " + headerLine);
}
interceptor.headerLinesList.add(headerLine);
}
return this;
}
// 添加公共参数到 URL
public Builder addQueryParam(String key, String value) {
interceptor.queryParamsMap.put(key, value);
return this;
}
// 添加公共参数到 URL
public Builder addQueryParamsMap(Map<String, String> queryParamsMap) {
interceptor.queryParamsMap.putAll(queryParamsMap);
return this;
}
public BasicParamsInterceptor build() {
return interceptor;
}
}
}
/**
* @author lirenhao
* date: 2022/8/31 23:59
* date: 2022/9/9 14:08
*/
package com.ql.backend.taskmanager.domain;
package com.ql.backend.ploycenter.infrastructure.okhttp3;
......
......@@ -9,4 +9,5 @@ import com.ql.backend.ploycenter.domain.po.PloyPO;
*/
public interface PloyDao extends IService<PloyPO> {
PloyPO getPloyById(String ployId);
}
......
package com.ql.backend.ploycenter.infrastructure.persistence.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ql.backend.ploycenter.domain.po.PloyPO;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.PloyDao;
......@@ -13,4 +14,10 @@ import org.springframework.stereotype.Service;
@Service
public class PloyDaoImpl extends ServiceImpl<PloyMapper, PloyPO> implements PloyDao {
@Override
public PloyPO getPloyById(String ployId) {
LambdaQueryWrapper<PloyPO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PloyPO::getPloyId, ployId);
return this.baseMapper.selectOne(wrapper);
}
}
......
package com.ql.backend.ploycenter.interfaces.facade;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.core.interfaces.vo.PageVO;
import com.ql.backend.ploycenter.application.PloyService;
import com.ql.backend.ploycenter.domain.condition.PloyCondition;
import com.ql.backend.ploycenter.interfaces.request.PloyCreateRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ql.backend.ploycenter.interfaces.request.PloyUpdateRequest;
import com.ql.backend.ploycenter.interfaces.vo.PloyVO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
......@@ -31,9 +32,30 @@ public class PloyFacade {
);
}
/**
* 更新策略
*/
@PutMapping("/{id}")
public ApiResponse<Void> updatePloy(@PathVariable("id") String id, @RequestBody PloyUpdateRequest request) {
/* todo 更新策略 */
return ApiResponse.ok();
}
/**
* 查询策略列表
*/
@GetMapping
public ApiResponse<PageVO<PloyVO>> findPloy(PloyCondition condition) {
/* todo 查询策略列表 */
return ApiResponse.ok();
}
/**
* 查询策略详情
*/
@GetMapping("/{id}")
public ApiResponse<PloyVO> getPloy(@PathVariable("id") String id) {
/* todo 查询策略详情 */
return ApiResponse.ok();
}
}
......
package com.ql.backend.ploycenter.interfaces.facade;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.core.interfaces.vo.PageVO;
import com.ql.backend.ploycenter.domain.condition.ShopCondition;
import com.ql.backend.ploycenter.interfaces.request.ShopCreateRequest;
import com.ql.backend.ploycenter.interfaces.request.ShopUpdateRequest;
import com.ql.backend.ploycenter.interfaces.vo.ShopVO;
import org.springframework.web.bind.annotation.*;
/**
* @author lirenhao
......@@ -11,11 +16,34 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/ploy-center/v1/shops")
public class ShopFacade {
@PostMapping
public ApiResponse<String> createShop(@RequestBody ShopCreateRequest request) {
/* todo 创建店铺 */
return ApiResponse.ok();
}
@PutMapping("/{id}")
public ApiResponse<String> updateShop(@PathVariable("id") String id, @RequestBody ShopUpdateRequest request) {
/* todo 更新店铺信息 */
return ApiResponse.ok();
}
/**
* 查询店铺列表
*/
@GetMapping
public ApiResponse<PageVO<ShopVO>> findShop(ShopCondition condition) {
/* todo 查询店铺列表 */
return ApiResponse.ok();
}
/**
* 查询店铺详情
*/
@GetMapping("/{id}")
public ApiResponse<ShopVO> getShop(@PathVariable("id") String id) {
/* todo 查询店铺详情 */
return ApiResponse.ok();
}
}
......
......@@ -6,6 +6,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/5 17:40
......@@ -36,4 +38,9 @@ public class PloyCreateRequest {
private Integer priority;
private Integer distributionType;
/**
* 绑定的店铺ID
*/
private Set<String> bindShopIds;
}
......
package com.ql.backend.ploycenter.interfaces.request;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/5 17:40
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class PloyUpdateRequest {
/**
* 策略名称
*/
private String ployName;
private String processDetailUUID;
private String processChannel;
private Integer executeTimes;
private String executeType;
private String cronExpression;
private String inputParam;
private Integer priority;
private Integer distributionType;
/**
* 绑定的店铺ID
*/
private Set<String> bindShopIds;
}
package com.ql.backend.ploycenter.interfaces.request;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author lirenhao
* date: 2022/9/5 17:40
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ShopCreateRequest {
/**
* 店铺名称
*/
private String shopName;
/**
* 店铺类型
*/
private String shopType;
/**
* 绑定策略ID
*/
private String bindPloyId;
}
package com.ql.backend.ploycenter.interfaces.request;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author lirenhao
* date: 2022/9/5 17:40
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ShopUpdateRequest {
/**
* 店铺名称
*/
private String shopName;
/**
* 店铺类型
*/
private String shopType;
/**
* 绑定策略ID
*/
private String bindPloyId;
}
......@@ -7,6 +7,8 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author lirenhao
* date: 2022/9/5 17:49
......@@ -18,5 +20,34 @@ import lombok.NoArgsConstructor;
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class PloyVO {
/**
* 策略ID
*/
private String ployId;
/**
* 策略名称
*/
private String ployName;
private String processDetailUUID;
private String processChannel;
private Integer executeTimes;
private String executeType;
private String cronExpression;
private String inputParam;
private Integer priority;
private Integer distributionType;
/**
* 绑定的店铺信息
*/
private List<ShopVO> bindShops;
}
......
package com.ql.backend.ploycenter.interfaces.vo;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author lirenhao
* date: 2022/9/13 16:02
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class ShopVO {
/**
* 店铺ID
*/
private String shopId;
/**
* 店铺名称
*/
private String shopName;
/**
* 店铺类型
*/
private String shopType;
/**
* 指定策略状态
*/
private String ployStatus;
/**
* 绑定的策略
*/
private PloyVO bindPloy;
}
......@@ -19,3 +19,6 @@ mybatis-plus:
configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
#字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
field-strategy: 2
......
......@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.UUID;
/**
......@@ -39,6 +40,9 @@ public class TaskServiceImpl implements TaskService {
taskPO.setTaskId(UUID.randomUUID().toString());
taskPO.setTaskStatus(TaskStatus.CREATED);
taskPO.setTaskSubStatus(TaskSubStatus.PENDING);
taskPO.setGmtCreated(new Date());
taskPO.setGmtModified(new Date());
taskPO.setIsDeleted(Boolean.FALSE);
taskDao.save(taskPO);
/* 执行策略 */
......
package com.ql.backend.taskmanager.domain.condition;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ql.backend.ploycenter.domain.condition.CommonPageCondition;
import com.ql.backend.taskmanager.common.enums.TaskStatus;
import com.ql.backend.taskmanager.common.enums.TaskSubStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/13 14:35
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TaskCondition extends CommonPageCondition {
private Set<TaskStatus> taskStatus;
private Set<TaskSubStatus> taskSubStatus;
public Set<TaskStatus> getTask_status() {
return taskStatus;
}
public Set<TaskSubStatus> getTask_sub_status() {
return taskSubStatus;
}
}
package com.ql.backend.taskmanager.infrastructure.persistence.dao;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ql.backend.taskmanager.domain.po.TaskPO;
/**
* @author lirenhao
* date: 2022/9/1 11:02
*/
public interface TaskDao {
TaskPO save(TaskPO po);
public interface TaskDao extends IService<TaskPO> {
boolean updateByTaskId(String taskId, TaskPO update);
......
package com.ql.backend.taskmanager.infrastructure.persistence.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ql.backend.taskmanager.domain.po.TaskPO;
import com.ql.backend.taskmanager.infrastructure.persistence.dao.TaskDao;
import com.ql.backend.taskmanager.infrastructure.persistence.mapper.TaskMapper;
import org.springframework.stereotype.Service;
/**
......@@ -9,15 +12,13 @@ import org.springframework.stereotype.Service;
* date: 2022/9/1 11:02
*/
@Service
public class TaskDaoImpl implements TaskDao {
@Override
public TaskPO save(TaskPO po) {
return null;
}
public class TaskDaoImpl extends ServiceImpl<TaskMapper, TaskPO> implements TaskDao {
@Override
public boolean updateByTaskId(String taskId, TaskPO update) {
return false;
LambdaQueryWrapper<TaskPO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TaskPO::getTaskId, taskId);
return this.update(update, wrapper);
}
@Override
......
package com.ql.backend.taskmanager.interfaces.facade;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.core.interfaces.vo.PageVO;
import com.ql.backend.taskmanager.application.TaskService;
import com.ql.backend.taskmanager.domain.condition.TaskCondition;
import com.ql.backend.taskmanager.interfaces.request.TaskCreateRequest;
import com.ql.backend.taskmanager.interfaces.request.TaskStatusReport;
import com.ql.backend.taskmanager.interfaces.vo.TaskVO;
import org.springframework.web.bind.annotation.*;
......@@ -19,15 +22,37 @@ public class TaskFacade {
@Resource
private TaskService taskService;
/**
* 创建任务
*/
@PostMapping
public ApiResponse<String> createTask(@RequestBody TaskCreateRequest request) {
return ApiResponse.ok(taskService.createTask(request));
}
@GetMapping("/{taskId}")
public ApiResponse<TaskVO> getTask(@PathVariable("taskId") String taskId) {
/**
* 更新任务状态
*/
@PutMapping("/{id}")
public ApiResponse<String> updateTaskStatus(@PathVariable("id") String id, @RequestBody TaskStatusReport report) {
/* todo 设备上报任务状态 */
return ApiResponse.ok();
}
/**
* 获取任务详情
*/
@GetMapping("/{id}")
public ApiResponse<TaskVO> getTask(@PathVariable("id") String taskId) {
return ApiResponse.ok(taskService.getTask(taskId));
}
/* todo 设备上报任务状态 */
/**
* 分页查询任务信息
*/
@GetMapping
public ApiResponse<PageVO<TaskVO>> findTask(TaskCondition condition) {
/* todo 分页查询任务信息 */
return ApiResponse.ok();
}
}
......
package com.ql.backend.taskmanager.interfaces.request;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ql.backend.taskmanager.common.enums.TaskStatus;
import com.ql.backend.taskmanager.common.enums.TaskSubStatus;
import lombok.Data;
/**
* @author lirenhao
* date: 2022/8/31 18:13
*/
@Data
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TaskStatusReport {
private String deviceId;
/**
* 任务状态
*/
private TaskStatus taskStatus;
/**
* 任务子状态
*/
private TaskSubStatus taskSubStatus;
/**
* 失败原因
*/
private String failReason;
/**
* 时间戳
*/
private long timestamp;
}
......@@ -2,6 +2,8 @@ package com.ql.backend.taskmanager.interfaces.vo;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ql.backend.taskmanager.common.enums.TaskStatus;
import com.ql.backend.taskmanager.common.enums.TaskSubStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -18,5 +20,36 @@ import lombok.NoArgsConstructor;
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class TaskVO {
/**
* 任务ID
*/
private String taskId;
/**
* 任务状态
*/
private TaskStatus taskStatus;
/**
* 任务子状态
*/
private TaskSubStatus taskSubStatus;
private String shopId;
/**
* 策略ID
*/
private String ployId;
/**
* 任务参数
*/
private String taskParam;
/**
* 失败原因
*/
private String failReason;
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!