Commit 40d0d787 authored by yzc's avatar yzc

Merge remote-tracking branch 'origin/v2' into v2

parents fa23c7e0 8b46ecbb
package com.ssy.lingxi.common.constant.manage;
import java.util.Arrays;
/**
* 商城适用环境 - enum
* @author fhj
......@@ -21,6 +23,14 @@ public enum ShopEnvironmentEnum {
this.message = message;
}
/**
* 根据code获取message
* */
public static String getMessage(Integer code) {
ShopEnvironmentEnum shopEnvironmentEnum = Arrays.stream(ShopEnvironmentEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(null);
return shopEnvironmentEnum != null ? shopEnvironmentEnum.getMessage() : "无效环境";
}
public Integer getCode() {
return code;
}
......
package com.ssy.lingxi.platform.template.service.constant;
import java.util.Arrays;
/**
* 活动页状态 - enum
* @author fhj
* @date 2021/08/06
* @version 2.0.0
*/
public enum ActivityPageStatusEnum {
WAIT_OPEN_LINE(1, "待上线"),
ALREADY_OPEN_LINE(2, "已上线"),
START(3, "进行中"),
OFF_LINE(4, "已下线"),
END(5, "已结束")
;
private final Integer code;
private final String message;
ActivityPageStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
/**
* 根据code获取message
* */
public static String getMessage(Integer code) {
ActivityPageStatusEnum activityPageStatusEnum = Arrays.stream(ActivityPageStatusEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(null);
return activityPageStatusEnum != null ? activityPageStatusEnum.getMessage() : "无效状态";
}
/**
* 判断是否能修改
* */
public static Boolean isUpdate(Integer code) {
return code.equals(WAIT_OPEN_LINE.code) || code.equals(OFF_LINE.code);
}
/**
* 判断是否能删除
* */
public static Boolean isDelete(Integer code) {
return code.equals(WAIT_OPEN_LINE.code);
}
/**
* 判断是否能上线
* */
public static Boolean isOpenLine(Integer code) {
return code.equals(WAIT_OPEN_LINE.code) || code.equals(OFF_LINE.code);
}
/**
* 判断是否能下线
* */
public static Boolean isOffLine(Integer code) {
return code.equals(ALREADY_OPEN_LINE.code) || code.equals(START.code);
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
......@@ -4,6 +4,7 @@ import com.ssy.lingxi.common.controller.BaseController;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.template.service.entity.adorn.ActivityPage;
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;
......@@ -22,7 +23,7 @@ import javax.validation.Valid;
* @version 2.0.0
* @date 2021/04/15
*/
@Api(tags = "web - SEO")
@Api(tags = "web - 活动页")
@RestController
@RequestMapping("/template/web/activityPage")
public class ActivityPageWebController extends BaseController {
......@@ -33,7 +34,7 @@ public class ActivityPageWebController extends BaseController {
@ApiOperation(value = "列表")
@GetMapping("/page")
public Wrapper<PageData<ActivityPage>> page(@Valid ActivityPageQO qo) {
return activityPageWebService.page(qo);
return activityPageWebService.page(qo, getSysUser());
}
@ApiOperation(value = "详情")
......@@ -59,4 +60,16 @@ public class ActivityPageWebController extends BaseController {
public Wrapper<Void> delete(@RequestBody @Valid IdDTO dto) {
return activityPageWebService.delete(dto, getSysUser());
}
@ApiOperation(value = "上下线")
@PostMapping(value = "/openOffLine")
public Wrapper<Void> openOffLine(@RequestBody @Valid CommonStatusDTO dto) {
return activityPageWebService.openOffLine(dto, getSysUser());
}
@ApiOperation(value = "装修")
@PostMapping(value = "/adorn")
public Wrapper<Void> adorn(@RequestBody @Validated({SaveActivityPageDTO.Adorn.class}) SaveActivityPageDTO dto) {
return activityPageWebService.adorn(dto, getSysUser());
}
}
......@@ -103,4 +103,10 @@ public class PageTemplateWebController extends BaseController {
public Wrapper<Void> useChannelTemplate(@RequestBody @Valid IdDTO dto) {
return pageTemplateWebService.useChannelTemplate(dto, getSysUser());
}
@ApiOperation(value = "获取所有活动模板")
@GetMapping("/findAllActivityTemplate")
public Wrapper<List<PageTemplate>> findAllActivityTemplate(Integer environment) {
return pageTemplateWebService.findAllActivityTemplate(environment);
}
}
......@@ -24,6 +24,18 @@ public class ActivityPage {
@ApiModelProperty(value = "ID")
private Long id;
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "会员ID")
private Long memberId;
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "角色ID")
private Long roleId;
@Column(columnDefinition = "int2")
@ApiModelProperty(value = "类型: 1.平台 2.商家")
private Integer type;
@Column(columnDefinition = "varchar(64)")
@ApiModelProperty(value = "活动页名称")
private String name;
......@@ -40,6 +52,10 @@ public class ActivityPage {
@ApiModelProperty(value = "适用环境: 1.WEB 2.H5 3.小程序 4.APP")
private Integer environment;
@Column(columnDefinition = "varchar(20)")
@ApiModelProperty(value = "适用环境(冗余)")
private String environmentName;
@Column(columnDefinition = "int8")
@ApiModelProperty(value = "活动模板ID")
private Long templateId;
......@@ -58,7 +74,11 @@ public class ActivityPage {
@Column(columnDefinition = "int2")
@ApiModelProperty(value = "状态: 1.待上线 2.已上线 3.进行中 4.已下线 5.已结束")
private Integer status;
private Integer status = 1;
@Column(columnDefinition = "varchar(20)")
@ApiModelProperty(value = "状态(冗余)")
private String statusName;
@Convert(converter = JpaJsonToJsonObjectConverter.class)
@Column(columnDefinition="jsonb")
......
package com.ssy.lingxi.platform.template.service.model.dto.web;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Map;
/**
* 活动页 - 新增/修改/装修 - DTO
* @author fhj
* @version 2.0.0
* @date 2021/08/06
*/
@Data
public class SaveActivityPageDTO {
public interface Add {
}
@NotNull(message = "主键id不能为空", groups = {SaveActivityPageDTO.Update.class, SaveActivityPageDTO.Adorn.class})
@ApiModelProperty(value = "ID")
private Long id;
@NotNull(message = "类型不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "类型: 1.平台 2.商家")
private Integer type;
@NotBlank(message = "活动页名称不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@Size(max = 60, message = "活动页名称最长60个字符", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "活动页名称")
private String name;
@NotNull(message = "开始时间不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "开始时间")
private Long startTime;
@NotNull(message = "结束时间不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "结束时间")
private Long endTime;
@NotNull(message = "适用环境不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "适用环境: 1.WEB 2.H5 3.小程序 4.APP")
private Integer environment;
@NotNull(message = "活动模板ID不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "活动模板ID")
private Long templateId;
@NotBlank(message = "活动模板名称不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "活动模板名称")
private String templateName;
@NotNull(message = "商城ID不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "商城ID")
private Long shopId;
@NotBlank(message = "商城名称不能为空", groups = {SaveActivityPageDTO.Add.class, SaveActivityPageDTO.Update.class})
@ApiModelProperty(value = "商城名称")
private String shopName;
@NotEmpty(message = "装修内容不能为空", groups = {SaveActivityPageDTO.Adorn.class})
@ApiModelProperty(value = "装修内容")
private Map<String, Object> adornContent;
public interface Update {
}
public interface Add {}
public interface Update {}
public interface Adorn {}
}
......@@ -46,9 +46,6 @@ public class SaveSeoDTO {
@ApiModelProperty(value = "Keywords")
private String keywords;
public interface Add {
}
public interface Update {
}
public interface Add {}
public interface Update {}
}
package com.ssy.lingxi.platform.template.service.model.qo;
public class ActivityPageQO {
import com.ssy.lingxi.common.model.vo.PageVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* 活动页 - QO
* @author fhj
* @date 2021/08/06
* @version 2.0.0
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ActivityPageQO extends PageVO {
private static final long serialVersionUID = 9090064708039097952L;
@NotNull(message = "类型不能为空")
@ApiModelProperty(value = "类型: 1.平台 2.商家")
private Integer type;
@ApiModelProperty(value = "活动页名称")
private String name;
@ApiModelProperty(value = "开始时间")
private Long startTime;
@ApiModelProperty(value = "结束时间")
private Long endTime;
@ApiModelProperty(value = "适用环境: 1.WEB 2.H5 3.小程序 4.APP")
private Integer environment;
@ApiModelProperty(value = "状态: 1.待上线 2.已上线 3.进行中 4.已下线 5.已结束")
private Integer status;
}
......@@ -22,4 +22,7 @@ public interface PageTemplateRepository extends JpaRepository<PageTemplate, Long
List<PageTemplate> findByEnvironmentAndTypeAndStatusAndShelfAndShopId(Integer environment, Integer type, Integer status, Integer shelf, Long shopId);
List<PageTemplate> findByEnvironmentAndTypeAndStatusAndShelf(Integer environment, Integer type, Integer status, Integer shelf);
List<PageTemplate> findByEnvironmentAndTypeAndAllow(Integer environment, Integer type, Integer allow);
}
......@@ -4,18 +4,30 @@ import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.template.service.entity.adorn.ActivityPage;
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;
/**
* @menu web - 活动页 - 业务处理层
* @author fhj
* @version 2.0.0
* @date 2021/08/06
*/
public interface ActivityPageWebService {
Wrapper<PageData<ActivityPage>> page(ActivityPageQO qo);
Wrapper<PageData<ActivityPage>> page(ActivityPageQO qo, UserLoginCacheDTO user);
Wrapper<ActivityPage> get(IdDTO dto);
Wrapper<Void> add(SaveActivityPageDTO dto, UserLoginCacheDTO sysUser);
Wrapper<Void> add(SaveActivityPageDTO dto, UserLoginCacheDTO user);
Wrapper<Void> update(SaveActivityPageDTO dto, UserLoginCacheDTO user);
Wrapper<Void> delete(IdDTO dto, UserLoginCacheDTO user);
Wrapper<Void> update(SaveActivityPageDTO dto, UserLoginCacheDTO sysUser);
Wrapper<Void> openOffLine(CommonStatusDTO dto, UserLoginCacheDTO user);
Wrapper<Void> delete(IdDTO dto, UserLoginCacheDTO sysUser);
Wrapper<Void> adorn(SaveActivityPageDTO dto, UserLoginCacheDTO user);
}
......@@ -43,4 +43,6 @@ public interface PageTemplateWebService {
Wrapper<PageTemplateVO> findChannelTemplateDetails(IdDTO dto, UserLoginCacheDTO user);
Wrapper<Void> useChannelTemplate(IdDTO dto, UserLoginCacheDTO user);
Wrapper<List<PageTemplate>> findAllActivityTemplate(Integer environment);
}
package com.ssy.lingxi.platform.template.service.serviceimpl.web;
import cn.hutool.core.collection.CollectionUtil;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.ssy.lingxi.common.constant.manage.ShopEnvironmentEnum;
import com.ssy.lingxi.common.exception.BusinessException;
import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.ResponseCode;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.template.service.constant.ActivityPageStatusEnum;
import com.ssy.lingxi.platform.template.service.constant.CommonBooleanEnum;
import com.ssy.lingxi.platform.template.service.entity.adorn.ActivityPage;
import com.ssy.lingxi.platform.template.service.entity.adorn.QActivityPage;
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.platform.template.service.repository.ActivityPageRepository;
import com.ssy.lingxi.platform.template.service.service.web.ActivityPageWebService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* @menu web - 活动页 - 业务实现层
* @author fhj
* @version 2.0.0
* @date 2021/04/14
*/
@Slf4j
@Service
public class ActivityPageWebServiceImpl implements ActivityPageWebService {
@Resource
private JPAQueryFactory jpaQueryFactory;
@Resource
private ActivityPageRepository activityPageRepository;
@Override
@ApiOperation(value = "列表")
public Wrapper<PageData<ActivityPage>> page(ActivityPageQO qo, UserLoginCacheDTO user) {
//查询表实体 - 活动页
QActivityPage activityPage = QActivityPage.activityPage;
//查询条件构造 - 必要条件
BooleanBuilder predicates = new BooleanBuilder();
predicates.and(activityPage.memberId.eq(user.getMemberId()));
predicates.and(activityPage.roleId.eq(user.getMemberRoleId()));
predicates.and(activityPage.type.eq(qo.getType()));
//搜索条件
if(StringUtils.isNotBlank(qo.getName())) {
predicates.and(activityPage.name.like("%" + qo.getName() + "%"));
}
if(qo.getStartTime() != null) {
predicates.and(activityPage.startTime.goe(qo.getStartTime()));
}
if(qo.getEndTime() != null) {
predicates.and(activityPage.endTime.loe(qo.getEndTime()));
}
if(qo.getEnvironment() != null) {
predicates.and(activityPage.environment.eq(qo.getEnvironment()));
}
if(qo.getStatus() != null) {
predicates.and(activityPage.status.eq(qo.getStatus()));
}
//查询
JPAQuery<ActivityPage> query = jpaQueryFactory.select(activityPage).from(activityPage).where(predicates);
//总记录数
long totalCount = query.fetchCount();
//列表数据
List<ActivityPage> list = query.orderBy(activityPage.createTime.desc()).offset((qo.getCurrent() - 1) * qo.getPageSize()).limit(qo.getPageSize()).fetch();
return Wrapper.success(new PageData<>(totalCount, list));
}
@Override
@ApiOperation(value = "详情")
public Wrapper<ActivityPage> get(IdDTO dto) {
ActivityPage activityPage = activityPageRepository.findById(dto.getId()).orElse(null);
if(activityPage == null) {
throw new BusinessException(ResponseCode.PT_RECORDS_DON_T_EXIST);
}
return Wrapper.success(activityPage);
}
@Override
@Transactional
@ApiOperation(value = "新增")
public Wrapper<Void> add(SaveActivityPageDTO dto, UserLoginCacheDTO user) {
//校验
if(dto.getStartTime() >= dto.getEndTime() || System.currentTimeMillis() >= dto.getEndTime()) {
return Wrapper.fail("截止时间必须大于开始时间并且还要大于当前时间");
}
//新增
ActivityPage activityPage = new ActivityPage();
BeanUtils.copyProperties(dto, activityPage);
activityPage.setMemberId(user.getMemberId());
activityPage.setRoleId(user.getMemberRoleId());
activityPage.setEnvironmentName(ShopEnvironmentEnum.getMessage(dto.getEnvironment()));
activityPage.setStatusName(ActivityPageStatusEnum.getMessage(activityPage.getStatus()));
activityPageRepository.saveAndFlush(activityPage);
return Wrapper.success();
}
@Override
@Transactional
@ApiOperation(value = "修改")
public Wrapper<Void> update(SaveActivityPageDTO dto, UserLoginCacheDTO user) {
//获取活动页
ActivityPage activityPage = activityPageRepository.findById(dto.getId()).orElse(null);
//校验
if(activityPage == null) {
throw new BusinessException(ResponseCode.PT_RECORDS_DON_T_EXIST);
}
if(dto.getStartTime() >= dto.getEndTime() || System.currentTimeMillis() >= dto.getEndTime()) {
return Wrapper.fail("截止时间必须大于开始时间并且还要大于当前时间");
}
if(!ActivityPageStatusEnum.isUpdate(activityPage.getStatus())) {
return Wrapper.fail("只能修改'待上线'或'已下线'的活动页");
}
//修改
activityPage.setName(dto.getName());
activityPage.setStartTime(dto.getStartTime());
activityPage.setEndTime(dto.getEndTime());
activityPageRepository.saveAndFlush(activityPage);
return Wrapper.success();
}
@Override
@Transactional
@ApiOperation(value = "删除")
public Wrapper<Void> delete(IdDTO dto, UserLoginCacheDTO user) {
//获取活动页
ActivityPage activityPage = activityPageRepository.findById(dto.getId()).orElse(null);
//校验
if(activityPage == null) {
throw new BusinessException(ResponseCode.PT_RECORDS_DON_T_EXIST);
}
if(!ActivityPageStatusEnum.isDelete(activityPage.getStatus())) {
return Wrapper.fail("只能删除'待上线'的活动页");
}
activityPageRepository.deleteById(dto.getId());
return Wrapper.success();
}
@Override
@Transactional
@ApiOperation(value = "上下线")
public Wrapper<Void> openOffLine(CommonStatusDTO dto, UserLoginCacheDTO user) {
//获取活动页
ActivityPage activityPage = activityPageRepository.findById(dto.getId()).orElse(null);
//校验
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 {
activityPage.setStatus(ActivityPageStatusEnum.ALREADY_OPEN_LINE.getCode());
activityPage.setStatusName(ActivityPageStatusEnum.ALREADY_OPEN_LINE.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());
}
//更新活动页状态
activityPageRepository.saveAndFlush(activityPage);
return Wrapper.success();
}
@Override
@Transactional
@ApiOperation(value = "装修")
public Wrapper<Void> adorn(SaveActivityPageDTO dto, UserLoginCacheDTO user) {
//获取活动页
ActivityPage activityPage = activityPageRepository.findById(dto.getId()).orElse(null);
//校验
if(activityPage == null) {
throw new BusinessException(ResponseCode.PT_RECORDS_DON_T_EXIST);
}
//保存装修内容
activityPage.setAdornContent(dto.getAdornContent());
activityPageRepository.saveAndFlush(activityPage);
return Wrapper.success();
}
}
......@@ -375,4 +375,17 @@ public class PageTemplateWebServiceImpl implements PageTemplateWebService {
return Wrapper.success();
}
@Override
@ApiOperation(value = "获取所有活动模板")
public Wrapper<List<PageTemplate>> findAllActivityTemplate(Integer environment) {
if(environment == null) {
return Wrapper.fail("商城环境不能为空");
}
return Wrapper.success(pageTemplateRepository.findByEnvironmentAndTypeAndAllow(
environment,
PageTemplateTypeEnum.ACTIVITY.getCode(),
CommonBooleanEnum.YES.getCode()
));
}
}
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