init
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package com.ruoyi.xq.controller.app;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.domain.PageModel;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.common.IdReq;
|
||||
import com.ruoyi.xq.dto.app.im.ImMessageDTO;
|
||||
import com.ruoyi.xq.dto.app.im.ImResp;
|
||||
import com.ruoyi.xq.service.ActivityShopService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jdk.nashorn.internal.ir.annotations.Ignore;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Validated
|
||||
@RestController
|
||||
@Tag(name = "相亲会相关接口")
|
||||
@RequestMapping("/xq/activity/matchmaking")
|
||||
public class MatchmakingEventController {
|
||||
|
||||
@Autowired
|
||||
private ActivityShopService activityShopService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "相亲会列表-分页")
|
||||
@Log(title = "相亲会列表-分页", businessType = BusinessType.OTHER, isPrintResponseData = false, isSaveDb = false)
|
||||
public R<PageModel<ActivityShopAppList>> page(PageQuery pageQuery){
|
||||
IPage<ActivityShopAppList> page = activityShopService.pageApp(pageQuery);
|
||||
return R.ok(PageModel.build(page));
|
||||
}
|
||||
|
||||
@GetMapping("/info")
|
||||
@Operation(summary = "相亲详情")
|
||||
@Log(title = "相亲会详情", businessType = BusinessType.OTHER, isPrintResponseData = false, isSaveDb = false)
|
||||
@SaIgnore
|
||||
public R<ActivityShopAppInfo> info(Long activityId, String activityCode){
|
||||
if(activityId == null && StringUtils.isEmpty(activityCode)){
|
||||
return R.ok();
|
||||
}
|
||||
ActivityShopAppInfo info = activityShopService.info(activityId, activityCode);
|
||||
return R.ok(info);
|
||||
}
|
||||
|
||||
@PostMapping("/join")
|
||||
@Operation(summary = "参加相亲会")
|
||||
@Log(title = "参加相亲会", businessType = BusinessType.OTHER)
|
||||
public R<ActivityShopAppInfo> join(@RequestBody IdReq idReq){
|
||||
Long userId = LoginHelper.getUserId();
|
||||
activityShopService.join(userId,idReq.getId());
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.ruoyi.xq.controller.app;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
package com.ruoyi.xq.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 相亲会订单对象 xq_activity_order
|
||||
@@ -77,7 +72,7 @@ public class ActivityOrder implements Serializable {
|
||||
/**
|
||||
* 支付时间
|
||||
*/
|
||||
private Date payTime;
|
||||
private LocalDateTime payTime;
|
||||
/**
|
||||
* appId
|
||||
*/
|
||||
|
||||
@@ -7,7 +7,6 @@ import lombok.Data;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 相亲会对象 xq_activity_shop
|
||||
@@ -26,6 +25,8 @@ public class ActivityShop implements Serializable {
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
private String activityCode;
|
||||
/**
|
||||
* 活动标题
|
||||
*/
|
||||
@@ -37,11 +38,11 @@ public class ActivityShop implements Serializable {
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private Date startTime;
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private Date endTime;
|
||||
private LocalDateTime endTime;
|
||||
/**
|
||||
* 城市名称
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.ruoyi.xq.dto.app.activity;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ActivityShopAppInfo extends ActivityShopAppList {
|
||||
/**
|
||||
* 必须强制会员参与
|
||||
*/
|
||||
private Integer mustVip;
|
||||
/**
|
||||
* 必须强制实名用户参与
|
||||
*/
|
||||
private Integer mustAuth;
|
||||
/**
|
||||
* 费用说明
|
||||
*/
|
||||
private String priceText;
|
||||
/**
|
||||
* 已经参与女生人数
|
||||
*/
|
||||
private Integer joinWomenNum;
|
||||
/**
|
||||
* 已经参与男生人数
|
||||
*/
|
||||
private Integer joinManNum;
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.ruoyi.xq.dto.app.activity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class ActivityShopAppList implements Serializable {
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "状态 0-未开始 1-已开始 2-已结束")
|
||||
private Integer openStatus;
|
||||
|
||||
@Schema(description = "活动编码")
|
||||
private String activityCode;
|
||||
/**
|
||||
* 活动标题
|
||||
*/
|
||||
@Schema(description = "活动标题")
|
||||
private String activityTitle;
|
||||
/**
|
||||
* 活动展示图片
|
||||
*/
|
||||
@Schema(description = "活动展示图片")
|
||||
private String activityBanner;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
@Schema(description = "开始时间")
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
@Schema(description = "结束时间")
|
||||
private LocalDateTime endTime;
|
||||
/**
|
||||
* 城市名称
|
||||
*/
|
||||
@Schema(description = "城市名称")
|
||||
private String cityName;
|
||||
/**
|
||||
* 城市编码
|
||||
*/
|
||||
@Schema(description = "城市编码")
|
||||
private Integer cityCode;
|
||||
/**
|
||||
* 女生人数上限
|
||||
*/
|
||||
@Schema(description = "女生人数上限")
|
||||
private Integer womenMaxNum;
|
||||
/**
|
||||
* 男生人数上限
|
||||
*/
|
||||
@Schema(description = "男生人数上限")
|
||||
private Integer manMaxNum;
|
||||
/**
|
||||
* 女生参与价格
|
||||
*/
|
||||
@Schema(description = "女生参与价格")
|
||||
private BigDecimal joinWomenPrice;
|
||||
/**
|
||||
* 男生参与价格
|
||||
*/
|
||||
@Schema(description = "男生参与价格")
|
||||
private BigDecimal joinManPrice;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.xq.dto.app.activity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class JoinResp {
|
||||
|
||||
@Schema(description = "是否成功加入")
|
||||
private boolean joinSuccess;
|
||||
@Schema(description = "失败原因 1-未实名认证 2-未开启VIP 3-需要支付 99-其他")
|
||||
private Integer failCode;
|
||||
@Schema(description = "失败原因说明")
|
||||
private String failText;
|
||||
@Schema(description = "需要支付的价格")
|
||||
private BigDecimal price;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.ruoyi.xq.enums.activity;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Getter
|
||||
public enum ActivityShopStatusEnum {
|
||||
NO_START(0,"未开启"),
|
||||
STARTING(1,"开始中"),
|
||||
ENDING(2,"已结束"),
|
||||
;
|
||||
private final Integer code;
|
||||
private final String text;
|
||||
|
||||
ActivityShopStatusEnum(Integer code, String text) {
|
||||
this.code = code;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public static ActivityShopStatusEnum getEnumByTime(LocalDateTime startTime, LocalDateTime endTime){
|
||||
if(startTime == null || endTime == null){
|
||||
return NO_START;
|
||||
}
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
if(now.isBefore(startTime)){
|
||||
return NO_START;
|
||||
}
|
||||
if(now.isAfter(endTime)){
|
||||
return ENDING;
|
||||
}
|
||||
return STARTING;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.ruoyi.xq.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 相亲会Mapper接口
|
||||
@@ -11,4 +15,5 @@ import com.ruoyi.xq.domain.ActivityShop;
|
||||
*/
|
||||
public interface ActivityShopMapper extends BaseMapper<ActivityShop> {
|
||||
|
||||
IPage<ActivityShopAppList> pageApp(@Param("build") Page<Object> build);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package com.ruoyi.xq.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.activity.JoinResp;
|
||||
|
||||
/**
|
||||
* 相亲会Service接口
|
||||
@@ -11,4 +16,12 @@ import com.ruoyi.xq.domain.ActivityShop;
|
||||
*/
|
||||
public interface ActivityShopService extends IService<ActivityShop> {
|
||||
|
||||
IPage<ActivityShopAppList> pageApp(PageQuery pageQuery);
|
||||
|
||||
ActivityShop getByCode(String activityCode);
|
||||
|
||||
ActivityShopAppInfo info(Long activityId, String activityCode);
|
||||
|
||||
JoinResp join(Long userId, Long activityId);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,31 @@
|
||||
package com.ruoyi.xq.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.xq.domain.ActivityShop;
|
||||
import com.ruoyi.xq.domain.User;
|
||||
import com.ruoyi.xq.domain.UserAuth;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppInfo;
|
||||
import com.ruoyi.xq.dto.app.activity.ActivityShopAppList;
|
||||
import com.ruoyi.xq.dto.app.activity.JoinResp;
|
||||
import com.ruoyi.xq.enums.activity.ActivityShopStatusEnum;
|
||||
import com.ruoyi.xq.enums.common.AuditEnum;
|
||||
import com.ruoyi.xq.enums.userinfo.UserGenderEnum;
|
||||
import com.ruoyi.xq.mapper.ActivityShopMapper;
|
||||
import com.ruoyi.xq.service.ActivityShopService;
|
||||
import com.ruoyi.xq.service.UserAuthService;
|
||||
import com.ruoyi.xq.service.UserService;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 相亲会Service业务层处理
|
||||
*
|
||||
@@ -15,4 +35,141 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class ActivityShopServiceImpl extends ServiceImpl<ActivityShopMapper,ActivityShop> implements ActivityShopService {
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private UserAuthService userAuthService;
|
||||
|
||||
@Override
|
||||
public IPage<ActivityShopAppList> pageApp(PageQuery pageQuery) {
|
||||
IPage<ActivityShopAppList> page = baseMapper.pageApp(pageQuery.build());
|
||||
List<ActivityShopAppList> records = page.getRecords();
|
||||
for (ActivityShopAppList record : records) {
|
||||
record.setOpenStatus(ActivityShopStatusEnum.getEnumByTime(record.getStartTime(), record.getEndTime()).getCode());
|
||||
}
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActivityShop getByCode(String activityCode){
|
||||
return this.getOne(Wrappers.lambdaQuery(ActivityShop.class).eq(ActivityShop::getActivityCode, activityCode).last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActivityShopAppInfo info(Long activityId, String activityCode) {
|
||||
ActivityShop activityShop = null;
|
||||
if(activityId != null){
|
||||
activityShop = this.getById(activityId);
|
||||
}else if(StringUtils.isNotEmpty(activityCode)){
|
||||
activityShop = getByCode(activityCode);
|
||||
}
|
||||
if(activityShop == null){
|
||||
return null;
|
||||
}
|
||||
ActivityShopAppInfo appInfo = new ActivityShopAppInfo();
|
||||
appInfo.setMustVip(activityShop.getMustVip());
|
||||
appInfo.setMustAuth(activityShop.getMustAuth());
|
||||
appInfo.setPriceText(activityShop.getPriceText());
|
||||
appInfo.setJoinWomenNum(activityShop.getJoinWomenNum()+activityShop.getHandWomenNum());
|
||||
appInfo.setJoinManNum(activityShop.getJoinManNum()+ activityShop.getHandManNum());
|
||||
appInfo.setId(activityShop.getId());
|
||||
appInfo.setOpenStatus(ActivityShopStatusEnum.getEnumByTime(activityShop.getStartTime(), activityShop.getEndTime()).getCode());
|
||||
appInfo.setActivityCode(activityShop.getActivityCode());
|
||||
appInfo.setActivityTitle(activityShop.getActivityTitle());
|
||||
appInfo.setActivityBanner(activityShop.getActivityBanner());
|
||||
appInfo.setStartTime(activityShop.getStartTime());
|
||||
appInfo.setEndTime(activityShop.getEndTime());
|
||||
appInfo.setCityName(activityShop.getCityName());
|
||||
appInfo.setCityCode(activityShop.getCityCode());
|
||||
appInfo.setWomenMaxNum(activityShop.getWomenMaxNum());
|
||||
appInfo.setManMaxNum(activityShop.getManMaxNum());
|
||||
appInfo.setJoinWomenPrice(activityShop.getJoinWomenPrice());
|
||||
appInfo.setJoinManPrice(activityShop.getJoinManPrice());
|
||||
return appInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 1-未实名认证 2-未开启VIP 3-需要支付
|
||||
*/
|
||||
@Override
|
||||
public JoinResp join(Long userId, Long activityId) {
|
||||
ActivityShop activityShop = this.getById(activityId);
|
||||
if(activityShop == null){
|
||||
throw new ServiceException("活动不存在");
|
||||
}
|
||||
User user = userService.getById(userId);
|
||||
if(user == null){
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
// 检测是否已经加入
|
||||
// 人数检测
|
||||
if(UserGenderEnum.MAN.getCode().equals(user.getGender())){
|
||||
if(activityShop.getManMaxNum() <= activityShop.getJoinManNum() + activityShop.getHandManNum()){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("男用户报名人数已满");
|
||||
return resp;
|
||||
}
|
||||
}else if(UserGenderEnum.WOMEN.getCode().equals(user.getGender())){
|
||||
if(activityShop.getWomenMaxNum() <= activityShop.getJoinWomenNum() + activityShop.getHandWomenNum()){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("女用户报名人数已满");
|
||||
return resp;
|
||||
}
|
||||
}else{
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
// 实名检测
|
||||
if(activityShop.getMustAuth() == 1){
|
||||
UserAuth userAuth = userAuthService.getByUserId(userId);
|
||||
if(userAuth == null){
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
if(!AuditEnum.SUCCESS.getCode().equals(userAuth.getCardNumAuth())){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(1);
|
||||
resp.setFailText("未实名认证");
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
// VIP检测
|
||||
if(activityShop.getMustAuth() == 1){
|
||||
if(BooleanUtils.isNotTrue(user.getOpenVip())){
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(2);
|
||||
resp.setFailText("未开通VIP");
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
// 需要支付
|
||||
if(UserGenderEnum.MAN.getCode().equals(user.getGender())){
|
||||
if(activityShop.getJoinManPrice().compareTo(BigDecimal.ZERO) > 0){ // 大于0
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(3);
|
||||
resp.setFailText("需要支付");
|
||||
return resp;
|
||||
}
|
||||
}else if(UserGenderEnum.WOMEN.getCode().equals(user.getGender())){
|
||||
if(activityShop.getJoinWomenPrice().compareTo(BigDecimal.ZERO) > 0){ // 大于0
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(3);
|
||||
resp.setFailText("需要支付");
|
||||
return resp;
|
||||
}
|
||||
}else{
|
||||
throw new ServiceException("用户异常");
|
||||
}
|
||||
JoinResp resp = new JoinResp();
|
||||
resp.setJoinSuccess(false);
|
||||
resp.setFailCode(99);
|
||||
resp.setFailText("加入失败");
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user