拼团秒杀活动

This commit is contained in:
DB 2024-04-19 10:08:57 +08:00
parent 9cd4f4e1f8
commit 94c94dd1be
20 changed files with 807 additions and 7 deletions

View File

@ -26,7 +26,7 @@ public class CpopGenerator {
* 数据库 URL * 数据库 URL
*/ */
// private static final String URL = "jdbc:mysql://localhost:3306/cpop-dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; // private static final String URL = "jdbc:mysql://localhost:3306/cpop-dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
private static final String URL = "jdbc:mysql://localhost:3306/cpop_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; private static final String URL = "jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/cpop_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
/** /**
* 数据库用户名 * 数据库用户名
*/ */
@ -34,23 +34,23 @@ public class CpopGenerator {
/** /**
* 数据库密码 * 数据库密码
*/ */
private static final String PASSWORD = "Admin@123"; private static final String PASSWORD = "Customer0401";
//private static final String PASSWORD = "Customer0401"; //private static final String PASSWORD = "Customer0401";
/** /**
* 输出路径 * 输出路径
*/ */
private static final String EXPORT_URL = "/Cpop-Jambox"; private static final String EXPORT_URL = "/Cpop-Mall";
/** /**
* 模块 * 模块
*/ */
private static final String EXPORT_ITEM = "jambox"; private static final String EXPORT_ITEM = "mall";
/** /**
* 表前缀 * 表前缀
*/ */
private static final String TABLE_PREFIX = "cp_j_"; private static final String TABLE_PREFIX = "cp_mall_";
/** /**
* 主入口 * 主入口

View File

@ -56,9 +56,9 @@ mybatis-flex:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
datasource: datasource:
mall: mall:
url: jdbc:mysql://localhost:3306/cpop_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/cpop_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
password: Admin@123 password: Customer0401
jambox: jambox:
url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/jambox_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/jambox_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
username: root username: root

View File

@ -0,0 +1,106 @@
package com.cpop.mall.business.controller.backstage;
import com.cpop.core.base.R;
import com.cpop.mall.business.entity.Activity;
import com.cpop.mall.business.service.ActivityService;
import com.cpop.mall.business.vo.ActivityPageVo;
import com.mybatisflex.core.paginate.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.Serializable;
import java.util.List;
/**
* 商城活动 控制层
*
* @author DB
* @since 2024-04-18
*/
@RestController
@Api(tags = "商城活动接口")
@RequestMapping("/backstage/activity")
public class BackstageActivityController {
@Autowired
private ActivityService activityService;
/**
* 分页查询商城活动
* @param brandId 品牌id
* @param isUp 是否上架
* @return 分页对象
*/
@GetMapping("/getActivityPage")
@ApiOperation("分页查询商城活动")
public R<Page<ActivityPageVo>> getActivityPage(@RequestParam(required = false) @ApiParam("品牌id") String brandId,
@RequestParam(required = false) @ApiParam("品牌id") Boolean isUp) {
Page<ActivityPageVo> page = activityService.getActivityPage(brandId, isUp);
return R.ok(page);
}
/**
* 添加商城活动
*
* @param activity 商城活动
* @return {@code true} 添加成功{@code false} 添加失败
*/
@PostMapping("/save")
@ApiOperation("保存商城活动")
public boolean save(@RequestBody @ApiParam("商城活动") Activity activity) {
return activityService.save(activity);
}
/**
* 根据主键删除商城活动
*
* @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/
@DeleteMapping("/remove/{id}")
@ApiOperation("根据主键商城活动")
public boolean remove(@PathVariable @ApiParam("商城活动主键") Serializable id) {
return activityService.removeById(id);
}
/**
* 根据主键更新商城活动
*
* @param activity 商城活动
* @return {@code true} 更新成功{@code false} 更新失败
*/
@PutMapping("/update")
@ApiOperation("根据主键更新商城活动")
public boolean update(@RequestBody @ApiParam("商城活动主键") Activity activity) {
return activityService.updateById(activity);
}
/**
* 查询所有商城活动
*
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation("查询所有商城活动")
public List<Activity> list() {
return activityService.list();
}
/**
* 根据商城活动主键获取详细信息
*
* @param id 商城活动主键
* @return 商城活动详情
*/
@GetMapping("/getInfo/{id}")
@ApiOperation("根据主键获取商城活动")
public Activity getInfo(@PathVariable @ApiParam("商城活动主键") Serializable id) {
return activityService.getById(id);
}
}

View File

@ -0,0 +1,106 @@
package com.cpop.mall.business.controller.mini;
import com.mybatisflex.core.paginate.Page;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.cpop.mall.business.entity.Activity;
import com.cpop.mall.business.service.ActivityService;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import java.util.List;
/**
* 商城活动 控制层
*
* @author DB
* @since 2024-04-18
*/
@RestController
@Api(tags = "商城活动接口")
@RequestMapping("/mini/activity")
public class MiniActivityController {
@Autowired
private ActivityService activityService;
/**
* 添加商城活动
*
* @param activity 商城活动
* @return {@code true} 添加成功{@code false} 添加失败
*/
@PostMapping("/save")
@ApiOperation("保存商城活动")
public boolean save(@RequestBody @ApiParam("商城活动") Activity activity) {
return activityService.save(activity);
}
/**
* 根据主键删除商城活动
*
* @param id 主键
* @return {@code true} 删除成功{@code false} 删除失败
*/
@DeleteMapping("/remove/{id}")
@ApiOperation("根据主键商城活动")
public boolean remove(@PathVariable @ApiParam("商城活动主键") Serializable id) {
return activityService.removeById(id);
}
/**
* 根据主键更新商城活动
*
* @param activity 商城活动
* @return {@code true} 更新成功{@code false} 更新失败
*/
@PutMapping("/update")
@ApiOperation("根据主键更新商城活动")
public boolean update(@RequestBody @ApiParam("商城活动主键") Activity activity) {
return activityService.updateById(activity);
}
/**
* 查询所有商城活动
*
* @return 所有数据
*/
@GetMapping("/list")
@ApiOperation("查询所有商城活动")
public List<Activity> list() {
return activityService.list();
}
/**
* 根据商城活动主键获取详细信息
*
* @param id 商城活动主键
* @return 商城活动详情
*/
@GetMapping("/getInfo/{id}")
@ApiOperation("根据主键获取商城活动")
public Activity getInfo(@PathVariable @ApiParam("商城活动主键") Serializable id) {
return activityService.getById(id);
}
/**
* 分页查询商城活动
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
@ApiOperation("分页查询商城活动")
public Page<Activity> page(@ApiParam("分页信息") Page<Activity> page) {
return activityService.page(page);
}
}

View File

@ -0,0 +1,134 @@
package com.cpop.mall.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 商城活动 实体类
*
* @author DB
* @since 2024-04-18
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_mall_activity", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class Activity extends BaseEntity implements Serializable {
/**
* 主键
*/
@Id
private String id;
/**
* 品牌id
*/
private String brandId;
/**
* 活动类型 1拼团2秒杀
*/
private Integer activityType;
/**
* 活动名称
*/
private String activityName;
/**
* 颜色
*/
private String color;
/**
* 活动头图
*/
private String headPic;
/**
* 描述
*/
private String description;
/**
* 活动详情图
*/
private String detailPic;
/**
* 关联商品
*/
private String productList;
/**
* 拼团人数
*/
private Integer groupNum;
/**
* 单买价格
*/
private BigDecimal singlePrice;
/**
* 拼团价格
*/
private BigDecimal groupPrice;
/**
* 是否上架
*/
private Boolean isUp;
/**
* 是否置顶
*/
private Boolean isTop;
/**
* 秒杀开始时间
*/
private LocalDateTime secKillStartTime;
/**
* 秒杀结束时间
*/
private LocalDateTime secKillEndTime;
/**
* 活动开始时间
*/
private LocalDateTime activityStartTime;
/**
* 活动结束时间
*/
private LocalDateTime activityEndTime;
/**
* 备注
*/
private String remark;
/**
* 是否删除(0否1是)
*/
@Column(isLogicDelete = true)
private Boolean isDelete;
}

View File

@ -0,0 +1,51 @@
package com.cpop.mall.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 商城活动组 实体类
*
* @author DB
* @since 2024-04-18
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_mall_activity_group", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class ActivityGroup extends BaseEntity implements Serializable {
/**
* 活动组id
*/
@Id
private String id;
/**
* 活动组名
*/
private String activityGroupName;
/**
* 活动id
*/
private String activityId;
/**
* 商品id
*/
private String productId;
}

View File

@ -0,0 +1,42 @@
package com.cpop.mall.business.entity;
import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* 拼团活动-校区 实体类
*
* @author DB
* @since 2024-04-19
*/
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_mall_activity_store", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class ActivityStore extends BaseEntity implements Serializable {
/**
* 活动id
*/
@Id
private String activityId;
/**
* 校区id
*/
@Id
private String storeId;
}

View File

@ -0,0 +1,14 @@
package com.cpop.mall.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.mall.business.entity.ActivityGroup;
/**
* 商城活动组 映射层
*
* @author DB
* @since 2024-04-18
*/
public interface ActivityGroupMapper extends BaseMapper<ActivityGroup> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.mall.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.mall.business.entity.Activity;
/**
* 商城活动 映射层
*
* @author DB
* @since 2024-04-18
*/
public interface ActivityMapper extends BaseMapper<Activity> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.mall.business.mapper;
import com.mybatisflex.core.BaseMapper;
import com.cpop.mall.business.entity.ActivityStore;
/**
* 拼团活动-校区 映射层
*
* @author DB
* @since 2024-04-19
*/
public interface ActivityStoreMapper extends BaseMapper<ActivityStore> {
}

View File

@ -0,0 +1,14 @@
package com.cpop.mall.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.mall.business.entity.ActivityGroup;
/**
* 商城活动组 服务层
*
* @author DB
* @since 2024-04-18
*/
public interface ActivityGroupService extends IService<ActivityGroup> {
}

View File

@ -0,0 +1,25 @@
package com.cpop.mall.business.service;
import com.cpop.mall.business.vo.ActivityPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.cpop.mall.business.entity.Activity;
/**
* 商城活动 服务层
*
* @author DB
* @since 2024-04-18
*/
public interface ActivityService extends IService<Activity> {
/**
* 分页查询商城活动
* @author DB
* @since 2024/4/18
* @param brandId 品牌id
* @param isUp 是否上架
* @return Page<ActivityPageVo>
*/
Page<ActivityPageVo> getActivityPage(String brandId, Boolean isUp);
}

View File

@ -0,0 +1,14 @@
package com.cpop.mall.business.service;
import com.mybatisflex.core.service.IService;
import com.cpop.mall.business.entity.ActivityStore;
/**
* 拼团活动-校区 服务层
*
* @author DB
* @since 2024-04-19
*/
public interface ActivityStoreService extends IService<ActivityStore> {
}

View File

@ -0,0 +1,18 @@
package com.cpop.mall.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.mall.business.entity.ActivityGroup;
import com.cpop.mall.business.mapper.ActivityGroupMapper;
import com.cpop.mall.business.service.ActivityGroupService;
import org.springframework.stereotype.Service;
/**
* 商城活动组 服务层实现
*
* @author DB
* @since 2024-04-18
*/
@Service("activityGroupService")
public class ActivityGroupServiceImpl extends ServiceImpl<ActivityGroupMapper, ActivityGroup> implements ActivityGroupService {
}

View File

@ -0,0 +1,57 @@
package com.cpop.mall.business.service.impl;
import com.cpop.core.base.entity.PageDomain;
import com.cpop.core.utils.sql.SqlUtils;
import com.cpop.mall.business.vo.ActivityPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.mall.business.entity.Activity;
import com.cpop.mall.business.mapper.ActivityMapper;
import com.cpop.mall.business.service.ActivityService;
import org.springframework.stereotype.Service;
import java.util.List;
import static com.cpop.mall.business.entity.table.ActivityTableDef.ACTIVITY;
/**
* 商城活动 服务层实现
*
* @author DB
* @since 2024-04-18
*/
@Service("activityService")
public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements ActivityService {
/**
* 分页查询商城活动
* @author DB
* @since 2024/4/18
* @param brandId 品牌id
* @param isUp 分页对象
* @return Page<ActivityPageVo>
*/
@Override
public Page<ActivityPageVo> getActivityPage(String brandId, Boolean isUp) {
/*LambdaQueryWrapper<ActivityInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(brandId != null, ActivityInfo::getBrandId, brandId);
queryWrapper.eq(ActivityInfo::getShelve, shelve);
queryWrapper.eq(ActivityInfo::getDeleted, "1");
queryWrapper.orderByDesc(ActivityInfo::getStick).orderByDesc(ActivityInfo::getLastModificationDate);
IPage activityInfoPage = this.page(pageinfo, queryWrapper);
List<ActivityInfo> activityInfos= activityInfoPage.getRecords();
for (ActivityInfo activityInfo : activityInfos) {
List<ActivityStore> activityStores=activityStoreMapper.selectStoreName(activityInfo.getActivityId());
activityInfo.setStoreList(activityStores);
}*/
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
return this.pageAs(Page.of(pageDomain.getPageNum(),pageDomain.getPageSize()), QueryWrapper.create()
.where(ACTIVITY.BRAND_ID.eq(brandId))
.and(ACTIVITY.IS_UP.eq(isUp))
.orderBy(ACTIVITY.IS_TOP.desc(), ACTIVITY.UPDATE_TIME.desc())
, ActivityPageVo.class);
}
}

View File

@ -0,0 +1,18 @@
package com.cpop.mall.business.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.cpop.mall.business.entity.ActivityStore;
import com.cpop.mall.business.mapper.ActivityStoreMapper;
import com.cpop.mall.business.service.ActivityStoreService;
import org.springframework.stereotype.Service;
/**
* 拼团活动-校区 服务层实现
*
* @author DB
* @since 2024-04-19
*/
@Service("activityStoreService")
public class ActivityStoreServiceImpl extends ServiceImpl<ActivityStoreMapper, ActivityStore> implements ActivityStoreService {
}

View File

@ -0,0 +1,152 @@
package com.cpop.mall.business.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author DB
* @version 1.0.0
* @since 2024-04-18 18:02
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "拼团活动分页", description = "拼团活动分页")
public class ActivityPageVo {
/**
* 主键
*/
@ApiModelProperty(value = "主键")
private String id;
/**
* 活动类型 1拼团2秒杀
*/
@ApiModelProperty(value = "活动类型 1拼团2秒杀")
private Integer activityType;
/**
* 交易数量
*/
@ApiModelProperty(value = "交易数量")
private Integer tradeNum;
/**
* 交易金额
*/
@ApiModelProperty(value = "交易金额")
private BigDecimal tradeAmount;
/**
* 商品id
*/
@ApiModelProperty(value = "商品id")
private String productId;
/**
* 关联商品
*/
@ApiModelProperty(value = "关联商品")
private String productName;
/**
* 品牌id
*/
@ApiModelProperty(value = "品牌id")
private String brandId;
/**
* 品牌名
*/
@ApiModelProperty(value = "品牌名")
private String brandName;
/**
* 活动名称
*/
@ApiModelProperty(value = "活动名称")
private String activityName;
/**
* 颜色
*/
@ApiModelProperty(value = "颜色")
private String color;
/**
* 活动头图
*/
@ApiModelProperty(value = "活动头图")
private String headPic;
/**
* 描述
*/
@ApiModelProperty(value = "描述")
private String description;
/**
* 活动详情图
*/
@ApiModelProperty(value = "活动详情图")
private String detailPic;
/**
* 拼团人数
*/
@ApiModelProperty(value = "拼团人数")
private Integer groupNum;
/**
* 单买价格
*/
@ApiModelProperty(value = "单买价格")
private BigDecimal singlePrice;
/**
* 拼团价格
*/
@ApiModelProperty(value = "拼团价格")
private BigDecimal groupPrice;
/**
* 是否上架
*/
@ApiModelProperty(value = "是否上架")
private Boolean isUp;
/**
* 是否置顶
*/
@ApiModelProperty(value = "是否置顶")
private Boolean isTop;
/**
* 秒杀开始时间
*/
@ApiModelProperty(value = "秒杀开始时间")
private LocalDateTime secKillStartTime;
/**
* 秒杀结束时间
*/
@ApiModelProperty(value = "秒杀结束时间")
private LocalDateTime secKillEndTime;
/**
* 活动开始时间
*/
@ApiModelProperty(value = "活动开始时间")
private LocalDateTime activityStartTime;
/**
* 活动结束时间
*/
@ApiModelProperty(value = "活动结束时间")
private LocalDateTime activityEndTime;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpop.mall.business.mapper.ActivityGroupMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpop.mall.business.mapper.ActivityMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpop.mall.business.mapper.ActivityStoreMapper">
</mapper>