Commit 83ac257a authored by fhj's avatar fhj

模板服务 -> 活动页需求

parent 606bca5a
......@@ -39,6 +39,7 @@ dependencies {
implementation project(':product-service:product-service-api')
implementation project(':report-service:report-service-api')
implementation project(':purchase-service:purchase-service-api')
implementation project(':scheduler-service:scheduler-service-api')
// spring
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
......
......@@ -26,3 +26,6 @@ project(':report-service:report-service-api').projectDir = "../report-service/re
include 'purchase-service:purchase-service-api'
project(':purchase-service:purchase-service-api').projectDir = "../purchase-service/purchase-service-api" as File
include 'scheduler-service:scheduler-service-api'
project(':scheduler-service:scheduler-service-api').projectDir = "../scheduler-service/scheduler-service-api" as File
......@@ -2,7 +2,6 @@ package com.ssy.lingxi.platform.template.service;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
......@@ -14,5 +13,4 @@ public class PlatformTemplateServiceApplication {
public static void main(String[] args) {
SpringApplication.run(PlatformTemplateServiceApplication.class, args);
}
}
......@@ -9,6 +9,7 @@ import com.ssy.lingxi.platform.template.service.model.dto.common.IdDTO;
import com.ssy.lingxi.platform.template.service.model.dto.web.SaveActivityPageDTO;
import com.ssy.lingxi.platform.template.service.model.qo.ActivityPageQO;
import com.ssy.lingxi.platform.template.service.service.web.ActivityPageWebService;
import com.ssy.lingxi.scheduler.api.model.ScheduleTaskCallbackVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
......@@ -72,4 +73,16 @@ public class ActivityPageWebController extends BaseController {
public Wrapper<Void> adorn(@RequestBody @Validated({SaveActivityPageDTO.Adorn.class}) SaveActivityPageDTO dto) {
return activityPageWebService.adorn(dto, getSysUser());
}
@ApiOperation(value = "定时服务回调 - 开始活动页")
@PostMapping(value = "/start")
public Wrapper<Void> start(@RequestBody ScheduleTaskCallbackVO dto) {
return activityPageWebService.start(dto);
}
@ApiOperation(value = "定时服务回调 - 结束活动页")
@PostMapping(value = "/end")
public Wrapper<Void> end(@RequestBody ScheduleTaskCallbackVO dto) {
return activityPageWebService.end(dto);
}
}
......@@ -88,4 +88,12 @@ public class ActivityPage {
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "创建时间")
private Long createTime = System.currentTimeMillis();
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "开始时间的定时任务ID")
private Long startTimeTaskId;
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "结束时间的定时任务ID")
private Long endTimeTaskId;
}
......@@ -8,6 +8,7 @@ import com.ssy.lingxi.platform.template.service.model.dto.common.CommonStatusDTO
import com.ssy.lingxi.platform.template.service.model.dto.common.IdDTO;
import com.ssy.lingxi.platform.template.service.model.dto.web.SaveActivityPageDTO;
import com.ssy.lingxi.platform.template.service.model.qo.ActivityPageQO;
import com.ssy.lingxi.scheduler.api.model.ScheduleTaskCallbackVO;
/**
* @menu web - 活动页 - 业务处理层
......@@ -30,4 +31,8 @@ public interface ActivityPageWebService {
Wrapper<Void> openOffLine(CommonStatusDTO dto, UserLoginCacheDTO user);
Wrapper<Void> adorn(SaveActivityPageDTO dto, UserLoginCacheDTO user);
Wrapper<Void> start(ScheduleTaskCallbackVO dto);
Wrapper<Void> end(ScheduleTaskCallbackVO dto);
}
package com.ssy.lingxi.platform.template.service.serviceimpl.web;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
......@@ -20,6 +21,10 @@ import com.ssy.lingxi.platform.template.service.model.dto.web.SaveActivityPageDT
import com.ssy.lingxi.platform.template.service.model.qo.ActivityPageQO;
import com.ssy.lingxi.platform.template.service.repository.ActivityPageRepository;
import com.ssy.lingxi.platform.template.service.service.web.ActivityPageWebService;
import com.ssy.lingxi.scheduler.api.feign.ScheduleTaskFeign;
import com.ssy.lingxi.scheduler.api.model.ScheduleTaskCallbackVO;
import com.ssy.lingxi.scheduler.api.model.ScheduleTaskIdVO;
import com.ssy.lingxi.scheduler.api.model.ScheduleTaskVO;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
......@@ -29,6 +34,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @menu web - 活动页 - 业务实现层
......@@ -44,6 +51,8 @@ public class ActivityPageWebServiceImpl implements ActivityPageWebService {
private JPAQueryFactory jpaQueryFactory;
@Resource
private ActivityPageRepository activityPageRepository;
@Resource
private ScheduleTaskFeign scheduleTaskFeign;
@Override
@ApiOperation(value = "列表")
......@@ -114,6 +123,9 @@ public class ActivityPageWebServiceImpl implements ActivityPageWebService {
activityPage.setStatusName(ActivityPageStatusEnum.getMessage(activityPage.getStatus()));
activityPageRepository.saveAndFlush(activityPage);
//保存活动页(定时服务的任务ID)
activityPageRepository.saveAndFlush(activityPage);
return Wrapper.success();
}
......@@ -159,6 +171,7 @@ public class ActivityPageWebServiceImpl implements ActivityPageWebService {
return Wrapper.fail("只能删除'待上线'的活动页");
}
//删除
activityPageRepository.deleteById(dto.getId());
return Wrapper.success();
......@@ -175,27 +188,109 @@ public class ActivityPageWebServiceImpl implements ActivityPageWebService {
if(activityPage == null) {
throw new BusinessException(ResponseCode.PT_RECORDS_DON_T_EXIST);
}
//上线
if(dto.getStatus().equals(CommonBooleanEnum.YES.getCode())) {
//校验
if(!ActivityPageStatusEnum.isOpenLine(activityPage.getStatus())) {
return Wrapper.fail("只能上线'待上线'或'已下线'的活动页");
}
if(CollectionUtil.isEmpty(activityPage.getAdornContent())) {
return Wrapper.fail("请先去装修活动页再去上线");
}
if(System.currentTimeMillis() - 10000 >= activityPage.getEndTime()) {
activityPage.setStatus(ActivityPageStatusEnum.START.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.START.getMessage());
}else {
//活动页开始时间还没到 -> 活动页状态修改为已上线。创建定时任务,活动页的自动开启与自动结束。
if(System.currentTimeMillis() < activityPage.getStartTime()) {
activityPage.setStatus(ActivityPageStatusEnum.ALREADY_OPEN_LINE.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.ALREADY_OPEN_LINE.getMessage());
//调用定时服务 -> 创建定时任务 -> 活动页开启
ScheduleTaskVO startVO = new ScheduleTaskVO();
startVO.setServiceName("platform-template-service");
startVO.setCallbackUrl("/template/web/activityPage/start");
startVO.setMemberId(user.getMemberId());
startVO.setRoleId(user.getMemberRoleId());
startVO.setDataIds(Stream.of(activityPage.getId()).collect(Collectors.toList()));
startVO.setExecTime(activityPage.getStartTime());
Wrapper<Long> startWrapper = scheduleTaskFeign.createScheduleTask(startVO);
if(startWrapper.getCode() != ResponseCode.SUCCESS.getCode()) {
log.error("调用定时服务失败:{}", startWrapper.getMessage());
throw new BusinessException(ResponseCode.SERVICE_SCHEDULER_ERROR);
}
activityPage.setStartTimeTaskId(startWrapper.getData());
//调用定时服务 -> 创建定时任务 -> 活动页结束
ScheduleTaskVO endVO = new ScheduleTaskVO();
endVO.setServiceName("platform-template-service");
endVO.setCallbackUrl("/template/web/activityPage/end");
endVO.setMemberId(user.getMemberId());
endVO.setRoleId(user.getMemberRoleId());
endVO.setDataIds(Stream.of(activityPage.getId()).collect(Collectors.toList()));
endVO.setExecTime(activityPage.getEndTime());
Wrapper<Long> endWrapper = scheduleTaskFeign.createScheduleTask(endVO);
if(endWrapper.getCode() != ResponseCode.SUCCESS.getCode()) {
log.error("调用定时服务失败:{}", endWrapper.getMessage());
throw new BusinessException(ResponseCode.SERVICE_SCHEDULER_ERROR);
}
activityPage.setEndTimeTaskId(endWrapper.getData());
}
//活动页开始时间到了 -> 活动页状态改为进行中。创建定时任务,活动页的自动结束。
if(System.currentTimeMillis() >= activityPage.getStartTime()) {
activityPage.setStatus(ActivityPageStatusEnum.START.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.START.getMessage());
//调用定时服务 -> 创建定时任务 -> 活动页结束
ScheduleTaskVO endVO = new ScheduleTaskVO();
endVO.setServiceName("platform-template-service");
endVO.setCallbackUrl("/template/web/activityPage/end");
endVO.setMemberId(user.getMemberId());
endVO.setRoleId(user.getMemberRoleId());
endVO.setDataIds(Stream.of(activityPage.getId()).collect(Collectors.toList()));
endVO.setExecTime(activityPage.getEndTime());
Wrapper<Long> endWrapper = scheduleTaskFeign.createScheduleTask(endVO);
if(endWrapper.getCode() != ResponseCode.SUCCESS.getCode()) {
log.error("调用定时服务失败:{}", endWrapper.getMessage());
throw new BusinessException(ResponseCode.SERVICE_SCHEDULER_ERROR);
}
activityPage.setEndTimeTaskId(endWrapper.getData());
}
//活动页结束时间到了 -> 活动页改为已结束
if(System.currentTimeMillis() > activityPage.getEndTime()) {
activityPage.setStatus(ActivityPageStatusEnum.END.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.END.getMessage());
}
}
//下线
if(dto.getStatus().equals(CommonBooleanEnum.NO.getCode())) {
//校验
if (!ActivityPageStatusEnum.isOffLine(activityPage.getStatus())) {
return Wrapper.fail("只能下线'已上线'或'进行中'的活动页");
}
//活动页改为已下线
activityPage.setStatus(ActivityPageStatusEnum.OFF_LINE.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.OFF_LINE.getMessage());
//调用定时服务 -> 删除任务 -> 活动页开启
ScheduleTaskIdVO startVO = new ScheduleTaskIdVO();
startVO.setTaskId(activityPage.getStartTimeTaskId());
Wrapper<Void> startWrapper = scheduleTaskFeign.deleteScheduleTask(startVO);
if(startWrapper.getCode() != ResponseCode.SUCCESS.getCode()) {
log.error("调用定时服务失败:{}", startWrapper.getMessage());
throw new BusinessException(ResponseCode.SERVICE_SCHEDULER_ERROR);
}
//调用定时服务 -> 删除任务 -> 活动页结束
ScheduleTaskIdVO endVO = new ScheduleTaskIdVO();
endVO.setTaskId(activityPage.getEndTimeTaskId());
Wrapper<Void> endWrapper = scheduleTaskFeign.deleteScheduleTask(endVO);
if(endWrapper.getCode() != ResponseCode.SUCCESS.getCode()) {
log.error("调用定时服务失败:{}", endWrapper.getMessage());
throw new BusinessException(ResponseCode.SERVICE_SCHEDULER_ERROR);
}
}
//更新活动页状态
......@@ -222,4 +317,44 @@ public class ActivityPageWebServiceImpl implements ActivityPageWebService {
return Wrapper.success();
}
@Override
@ApiOperation(value = "定时服务回调 - 开始活动页")
public Wrapper<Void> start(ScheduleTaskCallbackVO dto) {
log.info("定时服务回调 - 开始活动页 - 参数:{}", JSONUtil.toJsonStr(dto));
List<ActivityPage> list = activityPageRepository.findAllById(dto.getDataIds());
if(CollectionUtil.isEmpty(list)) {
return Wrapper.fail("获取不到活动页数据");
}
//批量更新活动页状态为进行中, 只更新已上线的活动页
list.forEach(a -> {
if(a.getStatus().equals(ActivityPageStatusEnum.ALREADY_OPEN_LINE.getCode())) {
a.setStatus(ActivityPageStatusEnum.START.getCode());
a.setStatusName(ActivityPageStatusEnum.START.getMessage());
}
});
return Wrapper.success();
}
@Override
@ApiOperation(value = "定时服务回调 - 结束活动页")
public Wrapper<Void> end(ScheduleTaskCallbackVO dto) {
log.info("定时服务回调 - 结束活动页 - 参数:{}", JSONUtil.toJsonStr(dto));
List<ActivityPage> list = activityPageRepository.findAllById(dto.getDataIds());
if(CollectionUtil.isEmpty(list)) {
return Wrapper.fail("获取不到活动页数据");
}
//批量更新活动页状态为已结束, 只更新进行中的活动页
list.forEach(a -> {
if(a.getStatus().equals(ActivityPageStatusEnum.START.getCode())) {
a.setStatus(ActivityPageStatusEnum.END.getCode());
a.setStatusName(ActivityPageStatusEnum.END.getMessage());
}
});
return Wrapper.success();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment