Commit dcef1aaf by 袁伟铭

迁移答题代码

parent 8f05c6d7
package com.zq.common.vo;
import cn.hutool.core.util.StrUtil;
import lombok.*;
import java.util.HashSet;
import java.util.Set;
/**
* @author wilmiam
* @since 2022-08-12 11:40
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IdVo {
private String id;
private String note;
private Set<String> ids;
public Set<String> getIds() {
if (ids == null) {
ids = new HashSet<>();
}
if (StrUtil.isNotBlank(id)) {
ids.add(id);
}
return ids;
}
}
...@@ -11,28 +11,49 @@ import java.util.Map; ...@@ -11,28 +11,49 @@ import java.util.Map;
* @author wilmiam * @author wilmiam
* @since 2021-07-13 09:56 * @since 2021-07-13 09:56
*/ */
@FeignClient(name = "USER-SERVER", path = "/user/api", configuration = FeignConfig.class) @FeignClient(name = "USER-SERVER", path = "/user", configuration = FeignConfig.class)
public interface UserFeign { public interface UserFeign {
/** @PostMapping(value = "/api/wxLogin")
* 发送手机验证码
*
* @param phone
* @return
*/
@GetMapping(value = "/sendCode")
ResultVo sendCode(@RequestParam String phone);
@PostMapping(value = "/wxLogin")
ResultVo wxLogin(@RequestBody Map<String, Object> paramsMap); ResultVo wxLogin(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/getWxPhone") @PostMapping(value = "/api/getWxPhone")
ResultVo getWxPhone(@RequestBody Map<String, Object> paramsMap); ResultVo getWxPhone(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/updateWxUserInfo") @PostMapping(value = "/api/updateWxUserInfo")
ResultVo updateWxUserInfo(@RequestBody Map<String, Object> paramsMap); ResultVo updateWxUserInfo(@RequestBody Map<String, Object> paramsMap);
@GetMapping(value = "/getWxUserInfo/{userId}") @GetMapping(value = "/api/getWxUserInfo/{userId}")
ResultVo getWxUserInfo(@PathVariable String userId); ResultVo getWxUserInfo(@PathVariable String userId);
@PostMapping(value = "/api/question/answer")
ResultVo answer(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/api/question/getQuestionList")
ResultVo getQuestionList(@RequestBody Map<String, Object> paramsMap);
@GetMapping(value = "/api/prize/getAllPrizeType")
ResultVo getAllPrizeType();
@GetMapping(value = "/api/prize/luckDraw")
ResultVo luckDraw(@RequestParam String userId);
@PostMapping(value = "/api/prize/getLotteryRecList")
ResultVo getLotteryRecList(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/api/address/getAddressList")
ResultVo getAddressList(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/api/address/addAddress")
ResultVo addAddress(@RequestBody Map<String, Object> paramsMap);
@PostMapping(value = "/api/address/editAddress")
ResultVo editAddress(@RequestBody Map<String, Object> paramsMap);
@DeleteMapping(value = "/api/address/delAddress")
ResultVo delAddress(@RequestBody Map<String, Object> paramsMap);
@GetMapping(value = "/api/address/getAddress/{addressId}")
ResultVo getAddress(@PathVariable String addressId);
} }
...@@ -11,9 +11,6 @@ import com.zq.api.form.ApiResp; ...@@ -11,9 +11,6 @@ import com.zq.api.form.ApiResp;
*/ */
public interface IApiLogic extends IApiCommon { public interface IApiLogic extends IApiCommon {
@ApiMethod(name = "发送验证码", service = "USER-SERVER")
ApiResp sendCode(ApiForm form);
@ApiMethod(name = "微信登录", service = "USER-SERVER") @ApiMethod(name = "微信登录", service = "USER-SERVER")
ApiResp wxLogin(ApiForm form); ApiResp wxLogin(ApiForm form);
...@@ -26,4 +23,84 @@ public interface IApiLogic extends IApiCommon { ...@@ -26,4 +23,84 @@ public interface IApiLogic extends IApiCommon {
@ApiMethod(name = "获取微信用户信息", service = "USER-SERVER") @ApiMethod(name = "获取微信用户信息", service = "USER-SERVER")
ApiResp getWxUserInfo(ApiForm form); ApiResp getWxUserInfo(ApiForm form);
/**
* 答题
*
* @param form
* @return
*/
ApiResp answer(ApiForm form);
/**
* 获取题目
*
* @param form
* @return
*/
ApiResp getQuestionList(ApiForm form);
/**
* 获取全部奖品类型
*
* @param form
* @return
*/
ApiResp getAllPrizeType(ApiForm form);
/**
* 抽奖
*
* @param form
* @return
*/
ApiResp luckDraw(ApiForm form);
/**
* 抽奖记录
*
* @param form
* @return
*/
ApiResp getLotteryRecList(ApiForm form);
/**
* 收货地址
*
* @param form
* @return
*/
ApiResp getAddressList(ApiForm form);
/**
* 添加地址
*
* @param form
* @return
*/
ApiResp addAddress(ApiForm form);
/**
* 修改地址
*
* @param form
* @return
*/
ApiResp editAddress(ApiForm form);
/**
* 删除地址
*
* @param form
* @return
*/
ApiResp delAddress(ApiForm form);
/**
* 获取地址
*
* @param form
* @return
*/
ApiResp getAddress(ApiForm form);
} }
...@@ -14,17 +14,6 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic { ...@@ -14,17 +14,6 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
@Autowired @Autowired
private UserFeign userFeign; private UserFeign userFeign;
/**
* 发送验证码
*
* @param form
* @return
*/
@Override
public ApiResp sendCode(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.sendCode(form.getString("phone")));
}
@Override @Override
public ApiResp wxLogin(ApiForm form) { public ApiResp wxLogin(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.wxLogin(form.getParamsMap())); return ApiUtils.toApiResp(form, userFeign.wxLogin(form.getParamsMap()));
...@@ -45,4 +34,84 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic { ...@@ -45,4 +34,84 @@ public class ApiV100Logic extends BaseApiLogic implements IApiLogic {
return ApiUtils.toApiResp(form, userFeign.getWxUserInfo(form.getUserId())); return ApiUtils.toApiResp(form, userFeign.getWxUserInfo(form.getUserId()));
} }
@Override
public ApiResp answer(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.answer(form.getParamsMap(true)));
}
@Override
public ApiResp getQuestionList(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.getQuestionList(form.getParamsMap()));
}
@Override
public ApiResp getAllPrizeType(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.getAllPrizeType());
}
@Override
public ApiResp luckDraw(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.luckDraw(form.getUserId()));
}
@Override
public ApiResp getLotteryRecList(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.getLotteryRecList(form.getParamsMap(true)));
}
/**
* 收货地址
*
* @param form
* @return
*/
@Override
public ApiResp getAddressList(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.getAddressList(form.getParamsMap(true)));
}
/**
* 添加地址
*
* @param form
* @return
*/
@Override
public ApiResp addAddress(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.addAddress(form.getParamsMap(true)));
}
/**
* 修改地址
*
* @param form
* @return
*/
@Override
public ApiResp editAddress(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.editAddress(form.getParamsMap(true)));
}
/**
* 删除地址
*
* @param form
* @return
*/
@Override
public ApiResp delAddress(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.delAddress(form.getParamsMap(true)));
}
/**
* 获取地址
*
* @param form
* @return
*/
@Override
public ApiResp getAddress(ApiForm form) {
return ApiUtils.toApiResp(form, userFeign.getAddress(form.getString("addressId")));
}
} }
package com.zq.user.controller;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.IdVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.LotteryRec;
import com.zq.user.entity.Prize;
import com.zq.user.entity.PrizeType;
import com.zq.user.service.PrizeService;
import com.zq.user.vo.LotteryRecFindVo;
import com.zq.user.vo.PrizeFindVo;
import com.zq.user.vo.PrizeTypeFindVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wilmiam
* @since 2022/6/15 16:19
*/
@Api(tags = "抽奖相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/prize")
public class PrizeController {
private final PrizeService prizeService;
@ApiOperation("获取全部奖品类型")
@GetMapping(value = "/getAllPrizeType")
public ResultVo<List<PrizeType>> getAllPrizeType() {
return ResultVo.success(prizeService.getAllPrizeType());
}
@ApiOperation("奖品类型列表")
@PostMapping(value = "/getPrizeTypeList")
public ResultVo<PageVo<PrizeType>> getPrizeTypeList(@RequestBody PrizeTypeFindVo vo) {
return ResultVo.success(prizeService.getPrizeTypeList(vo));
}
@ApiOperation("添加奖品类型")
@PostMapping(value = "/addPrizeType")
public ResultVo addPrizeType(@RequestBody PrizeType vo) {
AssertUtils.hasText(vo.getTypeName(), "缺少类型名称");
AssertUtils.hasText(vo.getDisplayName(), "缺少显示名称");
prizeService.addPrizeType(vo);
return ResultVo.success();
}
@ApiOperation("修改奖品类型")
@PostMapping(value = "/editPrizeType")
public ResultVo editPrizeType(@RequestBody PrizeType vo) {
AssertUtils.notNull(vo.getId(), "缺少奖品ID");
prizeService.editPrizeType(vo);
return ResultVo.success();
}
@ApiOperation("删除奖品类型")
@DeleteMapping(value = "/delPrizeType")
public ResultVo delPrizeType(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "缺少ID");
prizeService.delPrizeType(vo.getIds());
return ResultVo.success();
}
@ApiOperation("获取奖品类型")
@GetMapping(value = "/getPrizeType/{prizeTypeId}")
public ResultVo getPrizeType(@PathVariable String prizeTypeId) {
return ResultVo.success(prizeService.getPrizeType(prizeTypeId));
}
/************************************************************************************/
@ApiOperation("奖品列表")
@PostMapping(value = "/getPrizeList")
public ResultVo<PageVo<Prize>> getPrizeList(@RequestBody PrizeFindVo vo) {
return ResultVo.success(prizeService.getPrizeList(vo));
}
@ApiOperation("添加奖品")
@PostMapping(value = "/addPrize")
public ResultVo addPrize(@RequestBody Prize vo) {
prizeService.addPrize(vo);
return ResultVo.success();
}
@ApiOperation("修改奖品")
@PostMapping(value = "/editPrize")
public ResultVo editPrize(@RequestBody Prize vo) {
AssertUtils.notNull(vo.getId(), "缺少奖品ID");
prizeService.editPrize(vo);
return ResultVo.success();
}
@ApiOperation("删除奖品")
@DeleteMapping(value = "/delPrize")
public ResultVo delPrize(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "缺少ID");
prizeService.delPrize(vo.getIds());
return ResultVo.success();
}
@ApiOperation("获取奖品")
@GetMapping(value = "/getPrize/{prizeId}")
public ResultVo getPrize(@PathVariable String prizeId) {
return ResultVo.success(prizeService.getPrize(prizeId));
}
/************************************************************************************/
@ApiOperation("获取抽奖记录")
@PostMapping(value = "/getLotteryRecList")
public ResultVo<PageVo<LotteryRec>> getLotteryRecList(@RequestBody LotteryRecFindVo vo) {
return ResultVo.success(prizeService.getLotteryRecList(vo));
}
@ApiOperation("确认派奖")
@PutMapping(value = "/confirmAward")
public ResultVo confirmAward(Long lotteryRecId) {
AssertUtils.notNull(lotteryRecId, "中奖记录ID");
prizeService.confirmAward(lotteryRecId);
return ResultVo.success();
}
}
package com.zq.user.controller;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.IdVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.Question;
import com.zq.user.entity.QuestionType;
import com.zq.user.service.QuestionService;
import com.zq.user.vo.QuestionFindVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wilmiam
* @since 2022/6/15 9:51
*/
@Api(tags = "答题相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/question")
public class QuestionController {
private final QuestionService questionService;
@ApiOperation("获取全部题型")
@GetMapping(value = "/getAllQuestionType")
public ResultVo<List<QuestionType>> getAllQuestionType() {
return ResultVo.success(questionService.getAllQuestionType());
}
@ApiOperation("题目列表")
@PostMapping(value = "/getQuestionList")
public ResultVo<PageVo<Question>> getQuestionList(@RequestBody QuestionFindVo vo) {
return ResultVo.success(questionService.getQuestionList(vo));
}
@ApiOperation("添加题目")
@PostMapping(value = "/addQuestion")
public ResultVo addQuestion(@RequestBody Question vo) {
questionService.addQuestion(vo);
return ResultVo.success();
}
@ApiOperation("修改题目")
@PostMapping(value = "/editQuestion")
public ResultVo editQuestion(@RequestBody Question vo) {
AssertUtils.notNull(vo.getId(), "缺少题目ID");
questionService.editQuestion(vo);
return ResultVo.success();
}
@ApiOperation("删除题目")
@DeleteMapping(value = "/delQuestion")
public ResultVo delQuestion(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "缺少ID");
questionService.delQuestion(vo.getIds());
return ResultVo.success();
}
@ApiOperation("获取题目")
@GetMapping(value = "/getQuestion/{questionId}")
public ResultVo getQuestion(@PathVariable String questionId) {
return ResultVo.success(questionService.getQuestion(questionId));
}
}
package com.zq.user.controller.admin; package com.zq.user.controller;
import com.zq.common.annotation.AnonymousAccess; import com.zq.common.annotation.AnonymousAccess;
import com.zq.common.vo.PageVo; import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo; import com.zq.common.vo.ResultVo;
import com.zq.logging.annotation.Log; import com.zq.logging.annotation.Log;
import com.zq.user.entity.AppUser; import com.zq.user.entity.WxUser;
import com.zq.user.service.UserService; import com.zq.user.service.WxUserService;
import com.zq.user.vo.FindAppUserVo; import com.zq.user.vo.FindUserVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -22,16 +22,16 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -22,16 +22,16 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "用户相关接口") @Api(tags = "用户相关接口")
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping(value = "/user/admin") @RequestMapping(value = "/user")
public class UserAdminController { public class UserController {
private final UserService userService; private final WxUserService userService;
@Log("获取用户列表") @Log("获取用户列表")
@AnonymousAccess @AnonymousAccess
@ApiOperation("获取用户列表") @ApiOperation("获取用户列表")
@PostMapping(value = "/getUserList") @PostMapping(value = "/getUserList")
public ResultVo<PageVo<AppUser>> getUserList(@RequestBody FindAppUserVo vo) { public ResultVo<PageVo<WxUser>> getUserList(@RequestBody FindUserVo vo) {
return ResultVo.success(userService.getUserList(vo)); return ResultVo.success(userService.getUserList(vo));
} }
......
package com.zq.user.controller.api;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.IdVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.Address;
import com.zq.user.service.AddressService;
import com.zq.user.vo.AddressFindVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* @author wilmiam
* @since 2022/6/15 9:51
*/
@Api(tags = "收货地址相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/api/address")
public class AddressApi {
private final AddressService addressService;
@ApiOperation("地址列表")
@PostMapping(value = "/getAddressList")
public ResultVo<PageVo<Address>> getAddressList(@RequestBody AddressFindVo vo) {
return ResultVo.success(addressService.getAddressList(vo));
}
@ApiOperation("添加地址")
@PostMapping(value = "/addAddress")
public ResultVo addAddress(@RequestBody Address vo) {
addressService.addAddress(vo);
return ResultVo.success();
}
@ApiOperation("修改地址")
@PostMapping(value = "/editAddress")
public ResultVo editAddress(@RequestBody Address vo) {
AssertUtils.notNull(vo.getId(), "缺少地址ID");
addressService.editAddress(vo);
return ResultVo.success();
}
@ApiOperation("删除地址")
@DeleteMapping(value = "/delAddress")
public ResultVo delAddress(@RequestBody IdVo vo) {
AssertUtils.notEmpty(vo.getIds(), "缺少ID");
addressService.delAddress(vo.getIds());
return ResultVo.success();
}
@ApiOperation("获取地址")
@GetMapping(value = "/getAddress/{addressId}")
public ResultVo getAddress(@PathVariable String addressId) {
return ResultVo.success(addressService.getAddress(addressId));
}
}
package com.zq.user.controller.api;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.LotteryRec;
import com.zq.user.entity.Prize;
import com.zq.user.entity.PrizeType;
import com.zq.user.service.PrizeService;
import com.zq.user.vo.LotteryRecFindVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wilmiam
* @since 2022/6/15 16:19
*/
@Api(tags = "抽奖相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/api/prize")
public class PrizeApi {
private final PrizeService prizeService;
@ApiOperation("获取全部奖品类型")
@GetMapping(value = "/getAllPrizeType")
public ResultVo<List<PrizeType>> getAllPrizeType() {
return ResultVo.success(prizeService.getAllPrizeType());
}
@ApiOperation("抽奖")
@GetMapping(value = "/luckDraw")
public ResultVo<Prize> luckDraw(@RequestParam String userId) {
return ResultVo.success(prizeService.luckDraw(userId));
}
@ApiOperation("抽奖记录列表")
@PostMapping(value = "/getLotteryRecList")
public ResultVo<PageVo<LotteryRec>> getLotteryRecList(@RequestBody LotteryRecFindVo vo) {
AssertUtils.hasText(vo.getUserId(), "缺少用户ID");
return ResultVo.success(prizeService.getLotteryRecList(vo));
}
}
package com.zq.user.controller.api;
import com.zq.common.utils.AssertUtils;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.AnswerRec;
import com.zq.user.service.QuestionService;
import com.zq.user.vo.QuestionFindVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
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;
/**
* @author wilmiam
* @since 2022/6/15 9:51
*/
@Api(tags = "答题相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/api/question")
public class QuestionApi {
private final QuestionService questionService;
@ApiOperation("获取题目列表")
@PostMapping(value = "/getQuestionList")
public ResultVo getQuestionList(@RequestBody QuestionFindVo vo) {
return ResultVo.success(questionService.questionList(vo));
}
@ApiOperation("答题")
@PostMapping(value = "/answer")
public ResultVo answer(@RequestBody AnswerRec vo) {
AssertUtils.hasText(vo.getUserId(), "缺少用户ID");
AssertUtils.hasText(vo.getAnswerList(), "缺少答案");
return ResultVo.success(questionService.answer(vo));
}
}
package com.zq.user.controller.api;
import com.zq.common.annotation.Limit;
import com.zq.common.config.limit.LimitType;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.ValidateUtil;
import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo;
import com.zq.user.entity.AppUser;
import com.zq.user.service.UserService;
import com.zq.user.vo.FindAppUserVo;
import com.zq.user.vo.LoginVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* @author wilmiam
* @since 2021-07-09 10:38
*/
@Api(tags = "用户相关接口")
@RequiredArgsConstructor
@RestController
@RequestMapping(value = "/user/api")
public class UserController {
private final UserService userService;
/**
* 发送手机验证码
* 使用第一个参数值作为限流key, 30秒只能访问1次
*
* @param phone
* @return
*/
@Limit(limitType = LimitType.PARAM, keyParamIndex = 0, period = 1, count = 1, name = "发送手机验证码", errMsg = "请稍后再试!")
@ApiOperation("发送验证码")
@GetMapping(value = "/sendCode")
public ResultVo sendCode(String phone) {
AssertUtils.hasText(phone, "手机号不能为空");
AssertUtils.isTrue(ValidateUtil.isMobilePhoneNo(phone), "手机号格式不正确");
userService.sendCode(phone);
return ResultVo.success();
}
@ApiOperation("重置登录密码")
@PostMapping(value = "/resetPasswd")
public ResultVo resetPassword(@RequestBody LoginVo vo) {
AssertUtils.hasText(vo.getPhone(), "手机号不能为空");
AssertUtils.isTrue(ValidateUtil.isMobilePhoneNo(vo.getPhone()), "手机号格式不正确");
AssertUtils.hasText(vo.getVerifyCode(), "请输入验证码");
userService.resetPassword(vo);
return ResultVo.success();
}
@ApiOperation("修改登录密码")
@PostMapping(value = "/modifyPasswd")
public ResultVo modifyPasswd(@RequestBody LoginVo vo) {
AssertUtils.hasText(vo.getPhone(), "手机号不能为空");
AssertUtils.isTrue(ValidateUtil.isMobilePhoneNo(vo.getPhone()), "手机号格式不正确");
AssertUtils.hasText(vo.getVerifyCode(), "请输入验证码");
AssertUtils.hasText(vo.getPasswd(), "请输入密码");
userService.modifyPasswd(vo);
return ResultVo.success();
}
@ApiOperation("手机号登录")
@PostMapping(value = "/phoneLogin")
public ResultVo<ApiTokenVo> phoneLogin(@RequestBody LoginVo vo) {
AssertUtils.hasText(vo.getPhone(), "手机号不能为空");
AssertUtils.hasText(vo.getVerifyCode(), "请输入验证码");
return ResultVo.success(userService.phoneLogin(vo));
}
@ApiOperation("密码登录")
@PostMapping(value = "/passwdLogin")
public ResultVo<ApiTokenVo> passwdLogin(@RequestBody LoginVo vo) {
AssertUtils.hasText(vo.getPhone(), "手机号不能为空");
AssertUtils.hasText(vo.getPasswd(), "请输入密码");
return ResultVo.success(userService.passwdLogin(vo));
}
@ApiOperation("获取用户信息")
@GetMapping(value = "/getUserInfo")
public ResultVo getUserInfo(@RequestParam String userId) {
return ResultVo.success(userService.getUserInfo(userId));
}
@ApiOperation("获取用户列表")
@PostMapping(value = "/getUserList")
public ResultVo<PageVo<AppUser>> getUserList(@RequestBody FindAppUserVo vo) {
return ResultVo.success(userService.getUserList(vo));
}
}
package com.zq.user.dao; package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.AppUser; import com.zq.user.entity.Address;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
* 用户表(TAppUser)表数据库访问层 * (TbAddress)表数据库访问层
* *
* @author wilmiam * @author makejava
* @since 2021-07-05 10:52:18 * @since 2022-06-27 09:53:42
*/ */
@Repository @Repository
public interface AppUserDao extends BaseMapper<AppUser> { public interface AddressDao extends BaseMapper<Address> {
} }
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.AnswerRec;
import org.springframework.stereotype.Repository;
/**
* 答题记录(TbAnswerRec)表数据库访问层
*
* @author makejava
* @since 2022-06-15 16:23:57
*/
@Repository
public interface AnswerRecDao extends BaseMapper<AnswerRec> {
}
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.LotteryRec;
import org.springframework.stereotype.Repository;
/**
* 奖品发放记录(TbPrizeSendRec)表数据库访问层
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Repository
public interface LotteryRecDao extends BaseMapper<LotteryRec> {
}
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.LotteryRec;
import com.zq.user.entity.Prize;
import com.zq.user.vo.LotteryRecFindVo;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 奖品定义(TbPrize)表数据库访问层
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Repository
public interface PrizeDao extends BaseMapper<Prize> {
List<Prize> getLuckDrawPrize();
List<LotteryRec> getLotteryRecList(LotteryRecFindVo reqVo);
}
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.PrizeType;
import org.springframework.stereotype.Repository;
/**
* 奖品类型(TbPrizeType)表数据库访问层
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Repository
public interface PrizeTypeDao extends BaseMapper<PrizeType> {
}
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.Question;
import org.springframework.stereotype.Repository;
/**
* 试题(TbQuestion)表数据库访问层
*
* @author makejava
* @since 2022-06-15 09:43:53
*/
@Repository
public interface QuestionDao extends BaseMapper<Question> {
}
package com.zq.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zq.user.entity.QuestionType;
import org.springframework.stereotype.Repository;
/**
* 试题类型(TbQuestionType)表数据库访问层
*
* @author makejava
* @since 2022-06-15 09:43:53
*/
@Repository
public interface QuestionTypeDao extends BaseMapper<QuestionType> {
}
package com.zq.user.entity;
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 io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* (TbAddress)实体类
*
* @author makejava
* @since 2022-06-27 09:53:42
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_address")
public class Address {
/**
* 主键
*/
@ApiModelProperty("主键")
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private String userId;
/**
* 收货人
*/
@ApiModelProperty("收货人")
private String consignee;
/**
* 收货人手机号
*/
@ApiModelProperty("收货人手机号")
private String consigneePhone;
/**
* 地址
*/
@ApiModelProperty("地址")
private String consigneeAddress;
/**
* 是否为默认
*/
@ApiModelProperty("是否为默认")
private Boolean isDefault;
/**
* 是否删除
*/
@ApiModelProperty("是否删除")
private Boolean isDel;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("用户昵称")
@TableField(exist = false)
private String nickname;
}
package com.zq.user.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 答题记录(TbAnswerRec)实体类
*
* @author makejava
* @since 2022-06-15 16:23:57
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_answer_rec")
public class AnswerRec {
/**
* 主键
*/
@ApiModelProperty("主键")
@TableId(type = IdType.AUTO)
private Long id;
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private String userId;
/**
* 答案数组json字符串
*/
@ApiModelProperty("答案数组json字符串")
private String answerList;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 得分
*/
@ApiModelProperty("得分")
private Float score;
}
package com.zq.user.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 用户表(TAppUser)实体类
*
* @author wilmiam
* @since 2021-07-05 10:21:25
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_app_user")
public class AppUser {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 账号
*/
@ApiModelProperty("账号")
private String account;
/**
* 手机号
*/
@ApiModelProperty("手机号")
private String phone;
/**
* 登录密码
*/
@ApiModelProperty("登录密码")
private String password;
/**
* 交易密码
*/
@ApiModelProperty("交易密码")
private String dealpwd;
/**
* 用户类型
*/
@ApiModelProperty("用户类型")
private Integer userType;
/**
* 真实姓名
*/
@ApiModelProperty("真实姓名")
private String realname;
/**
* 昵称
*/
@ApiModelProperty("昵称")
private String nickname;
/**
* 头像
*/
@ApiModelProperty("头像")
private String avatar;
/**
* 性别
*/
@ApiModelProperty("性别")
private String gender;
/**
* 年龄
*/
@ApiModelProperty("年龄")
private Integer age;
/**
* 地址
*/
@ApiModelProperty("地址")
private String address;
/**
* 邀请码
*/
@ApiModelProperty("邀请码")
private String inviteCode;
/**
* 邀请二维码连接
*/
@ApiModelProperty("邀请二维码连接")
private String inviteLink;
/**
* 上级
*/
@ApiModelProperty("上级")
private Long pid;
/**
* 所有上级ID线路,上级在左
*/
@ApiModelProperty("所有上级ID线路,上级在左")
private String pids;
/**
* 用户等级
*/
@ApiModelProperty("用户等级")
private Integer level;
/**
* 状态:0未激活 1正常 2暂停使用 3永久停号
*/
@ApiModelProperty("状态:0未激活 1正常 2暂停使用 3永久停号")
private Integer status;
/**
* 开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通
*/
@ApiModelProperty("开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通")
private String unionId;
/**
* 最后登录访问IP
*/
@ApiModelProperty("最后登录访问IP")
private String accessIp;
/**
* 区域码
*/
@ApiModelProperty("区域码")
private String areaCode;
/**
* 最后登录时间
*/
@ApiModelProperty("最后登录时间")
private Date lastLoginTime;
/**
* createTime
*/
private Date createTime;
/**
* updateTime
*/
private Date updateTime;
}
package com.zq.user.entity;
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 io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 抽奖记录(LotteryRec)实体类
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_lottery_rec")
public class LotteryRec {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 奖品id(t_prize表中id)
*/
@ApiModelProperty("奖品id(t_prize表中id)")
private Long prizeId;
/**
* 用户id
*/
@ApiModelProperty("用户id")
private String userId;
/**
* 活动类型,1.签到 2.抽奖
*/
@ApiModelProperty("活动类型,1.签到 2.抽奖")
private Integer activityType;
/**
* 发奖状态,1为自动发奖成功,2为自动发奖失败,3为待人工派奖,4为人工派奖成功
*/
@ApiModelProperty("发奖状态,0未中奖,1为自动发奖成功,2为自动发奖失败,3为待人工派奖,4为人工派奖成功")
private Integer awardStatus;
/**
* 奖品类型ID
*/
@ApiModelProperty("奖品类型ID")
private Integer prizeTypeId;
/**
* 奖品类型名称
*/
@ApiModelProperty("奖品类型名称")
private String prizeTypeName;
/**
* 删除标记
*/
@ApiModelProperty("删除标记")
private Integer active;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("用户名称")
@TableField(exist = false)
private String nickname;
@ApiModelProperty("奖品名称")
@TableField(exist = false)
private String prizeName;
@ApiModelProperty("奖品类型显示名称")
@TableField(exist = false)
private String displayName;
@TableField(exist = false)
private Address address;
}
package com.zq.user.entity;
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 com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* 奖品定义(TbPrize)实体类
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_prize")
public class Prize {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 奖品类型:1现金,2优惠券,3实物,4软件内积分
*/
@ApiModelProperty("奖品类型:1现金,2优惠券,3实物,4软件内积分")
private Integer prizeTypeId;
/**
* 奖品名称
*/
@ApiModelProperty("奖品名称")
private String prizeName;
/**
* 如果是奖励实物的话,该字段存储实物图片地址,比如店铺宝贝主图src
*/
@ApiModelProperty("如果是奖励实物的话,该字段存储实物图片地址,比如店铺宝贝主图src")
private String prizeImg;
/**
* 奖品价值
*/
@ApiModelProperty("奖品价值")
private String prizePrice;
/**
* 奖品备注
*/
@ApiModelProperty("奖品备注")
private String prizeMemo;
/**
* prize_type为话费的时候填单份奖品值多少话费;type为积分的时候,填单份奖品值多少积分;type为淘金币的时候,填单份奖品值多少淘金币
*/
@ApiModelProperty("prize_type为话费的时候填单份奖品值多少话费;type为积分的时候,填单份奖品值多少积分;type为淘金币的时候,填单份奖品值多少淘金币")
private Integer prizeSingleCash;
/**
* 本次发布奖品总数,如prize_type为优惠卷的话,publish_count最大数为500
*/
@ApiModelProperty("本次发布奖品总数,如prize_type为优惠卷的话,publish_count最大数为500")
private Integer publishCount;
/**
* 奖品被领取的总数量
*/
@ApiModelProperty("奖品被领取的总数量")
private Integer hadOutCount;
/**
* 中奖概率
*/
@ApiModelProperty("中奖概率")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal awardRate;
/**
* 奖品兑换开始时间
*/
@ApiModelProperty("奖品兑换开始时间")
private Date startDate;
/**
* 奖品兑换结束时间
*/
@ApiModelProperty("奖品兑换结束时间")
private Date endDate;
/**
* 是否可用。删除标记。0,可用。1,表示删除
*/
@ApiModelProperty("是否可用。删除标记。0,可用。1,表示删除")
private Integer active;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* updateTime
*/
private Date updateTime;
@ApiModelProperty("奖品类型名称")
@TableField(exist = false)
private String prizeTypeName;
}
package com.zq.user.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 奖品类型(TbPrizeType)实体类
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_prize_type")
public class PrizeType {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* typeName
*/
private String typeName;
/**
* typeCode
*/
private String typeCode;
/**
* 显示名称
*/
@ApiModelProperty("显示名称")
private String displayName;
/**
* active
*/
@ApiModelProperty("0-可用,1-删除")
private Integer active;
/**
* 是否中奖
*/
@ApiModelProperty("是否中奖")
private Boolean isWinPrize;
/**
* createTime
*/
private Date createTime;
/**
* updateTime
*/
private Date updateTime;
}
package com.zq.user.entity;
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 io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 试题(TbQuestion)实体类
*
* @author makejava
* @since 2022-06-15 09:43:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_question")
public class Question {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 题目
*/
@ApiModelProperty("题目")
private String subject;
/**
* content
*/
private String content;
/**
* 题型
*/
@ApiModelProperty("题型")
private Integer questionTypeId;
/**
* 试题考试时间
*/
@ApiModelProperty("试题考试时间")
private Integer duration;
/**
* points
*/
private Integer points;
/**
* 班组ID
*/
@ApiModelProperty("班组ID")
private Integer groupId;
/**
* 试题可见性
*/
@ApiModelProperty("试题可见性")
private Integer isVisible;
/**
* createTime
*/
private Date createTime;
/**
* 创建者
*/
@ApiModelProperty("创建者")
private String creator;
/**
* lastModify
*/
private Date lastModify;
/**
* answer
*/
@ApiModelProperty("答案")
private String answer;
/**
* exposeTimes
*/
private Integer exposeTimes;
/**
* rightTimes
*/
private Integer rightTimes;
/**
* wrongTimes
*/
private Integer wrongTimes;
/**
* difficulty
*/
private Integer difficulty;
/**
* analysis
*/
@ApiModelProperty("解析")
private String analysis;
/**
* reference
*/
private String reference;
/**
* examingPoint
*/
private String examingPoint;
/**
* keyword
*/
private String keyword;
@ApiModelProperty("题型名称")
@TableField(exist = false)
private String questionTypeName;
}
package com.zq.user.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 试题类型(TbQuestionType)实体类
*
* @author makejava
* @since 2022-06-15 09:43:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "t_question_type")
public class QuestionType {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* name
*/
private String name;
/**
* subjective
*/
private Integer subjective;
}
package com.zq.user.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.vo.PageVo;
import com.zq.user.dao.AddressDao;
import com.zq.user.dao.WxUserDao;
import com.zq.user.entity.Address;
import com.zq.user.entity.WxUser;
import com.zq.user.vo.AddressFindVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Set;
/**
* @author wilmiam
* @since 2022/6/27 10:02
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class AddressService {
private final AddressDao addressDao;
private final WxUserDao wxUserDao;
public PageVo<Address> getAddressList(AddressFindVo vo) {
PageVo<Address> paging = PagingUtils.paging(vo, addressDao, Address.class);
return paging;
}
public void addAddress(Address vo) {
vo.setCreateTime(DateUtil.date());
vo.setUpdateTime(DateUtil.date());
addressDao.insert(vo);
if (vo.getIsDefault()) {
addressDao.update(Address.builder().isDefault(false).updateTime(DateUtil.date()).build(),
Wrappers.lambdaUpdate(Address.class)
.eq(Address::getUserId, vo.getUserId())
.notIn(Address::getId, vo.getId()));
}
}
public void editAddress(Address vo) {
Address address = addressDao.selectById(vo.getId());
AssertUtils.notNull(address, "地址ID不存在");
BeanUtil.copyProperties(vo, address, "id", "createTime");
address.setUpdateTime(DateUtil.date());
addressDao.updateById(address);
if (vo.getIsDefault()) {
addressDao.update(Address.builder().isDefault(false).updateTime(DateUtil.date()).build(),
Wrappers.lambdaUpdate(Address.class)
.eq(Address::getUserId, address.getUserId())
.notIn(Address::getId, vo.getId()));
}
}
public void delAddress(Set<String> ids) {
addressDao.update(Address.builder().isDel(true).updateTime(DateUtil.date()).build(),
Wrappers.lambdaUpdate(Address.class)
.in(Address::getId, ids));
}
public Object getAddress(String addressId) {
Address address = addressDao.selectById(addressId);
AssertUtils.notNull(address, "地址不存在");
WxUser wxUser = wxUserDao.selectById(address.getUserId());
address.setNickname(wxUser.getNickname());
return address;
}
public Address getDefaultAddress(String userId) {
return addressDao.selectOne(Wrappers.lambdaQuery(Address.builder().userId(userId).isDefault(true).isDel(false).build()));
}
}
package com.zq.user.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.vo.PageVo;
import com.zq.user.dao.LotteryRecDao;
import com.zq.user.dao.PrizeDao;
import com.zq.user.dao.PrizeTypeDao;
import com.zq.user.entity.Address;
import com.zq.user.entity.LotteryRec;
import com.zq.user.entity.Prize;
import com.zq.user.entity.PrizeType;
import com.zq.user.vo.LotteryRecFindVo;
import com.zq.user.vo.PrizeFindVo;
import com.zq.user.vo.PrizeTypeFindVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author wilmiam
* @since 2022/6/15 17:06
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class PrizeService {
private final PrizeDao prizeDao;
private final LotteryRecDao lotteryRecDao;
private final PrizeTypeDao prizeTypeDao;
private final AddressService addressService;
public List<PrizeType> getAllPrizeType() {
return prizeTypeDao.selectList(Wrappers.lambdaQuery(PrizeType.class)
.eq(PrizeType::getActive, 0)
.orderByAsc(PrizeType::getId));
}
public PageVo<Prize> getPrizeList(PrizeFindVo vo) {
LambdaQueryWrapper<Prize> lambdaQuery = Wrappers.lambdaQuery(Prize.class);
lambdaQuery.orderByDesc(Prize::getCreateTime);
if (StrUtil.isNotBlank(vo.getPrizeName())) {
lambdaQuery.like(Prize::getPrizeName, vo.getPrizeName());
}
PageVo<Prize> paging = PagingUtils.paging(vo, prizeDao, lambdaQuery, Prize.class);
paging.getRows().forEach(prize -> {
if (prize.getPrizeTypeId() != null) {
PrizeType prizeType = prizeTypeDao.selectById(prize.getPrizeTypeId());
prize.setPrizeTypeName(prizeType.getTypeName());
}
});
return paging;
}
public void addPrize(Prize vo) {
vo.setAwardRate(vo.getAwardRate() == null ? BigDecimal.ZERO : vo.getAwardRate());
judgeRate(vo.getAwardRate());
vo.setPublishCount(vo.getPublishCount() == null ? 0 : vo.getPublishCount());
vo.setHadOutCount(0);
vo.setCreateTime(DateUtil.date());
vo.setUpdateTime(DateUtil.date());
prizeDao.insert(vo);
}
public void editPrize(Prize vo) {
Prize prize = prizeDao.selectById(vo.getId());
AssertUtils.notNull(prize, "奖品不存在");
vo.setAwardRate(vo.getAwardRate() == null ? BigDecimal.ZERO : vo.getAwardRate());
judgeRate(vo.getAwardRate());
BeanUtil.copyProperties(vo, prize, "id");
prize.setUpdateTime(DateUtil.date());
prizeDao.updateById(prize);
}
private void judgeRate(BigDecimal cuurRate) {
LambdaQueryWrapper<Prize> lambdaQuery = Wrappers.lambdaQuery(Prize.builder().active(0).build());
List<Prize> prizeList = prizeDao.selectList(lambdaQuery);
BigDecimal rate = prizeList.stream()
.filter(p -> p.getPublishCount() - p.getHadOutCount() > 0)
.map(Prize::getAwardRate)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal v = BigDecimal.ONE.subtract(rate).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP);
AssertUtils.isTrue(rate.add(cuurRate).compareTo(BigDecimal.ONE) > 0, "中奖概率总和大于100%,剩余" + v.toPlainString() + "%概率,请重新设定中奖概率!");
}
public void delPrize(Set<String> ids) {
prizeDao.deleteBatchIds(ids);
}
public Prize getPrize(String prizeId) {
return prizeDao.selectById(prizeId);
}
public Prize luckDraw(String userId) {
List<Prize> prizeList = prizeDao.getLuckDrawPrize();
prizeList = prizeList.stream()
.filter(prize -> prize.getPublishCount() - prize.getHadOutCount() > 0)
.collect(Collectors.toList());
List<Long> prizeIdList = new ArrayList<>();
for (Prize prize : prizeList) {
BigDecimal count = prize.getAwardRate().multiply(BigDecimal.valueOf(100));
for (int i = 0; i < count.intValue(); i++) {
prizeIdList.add(prize.getId());
}
}
for (int i = prizeIdList.size(); i < 100; i++) {
prizeIdList.add(0L);
}
Collections.shuffle(prizeIdList);
int index = RandomUtil.randomInt(0, prizeIdList.size());
Long prizeId = prizeIdList.get(index);
if (prizeId == 0) {
LotteryRec build = LotteryRec.builder()
.prizeId(prizeId)
.userId(userId)
.activityType(2)
.awardStatus(0)
.active(0)
.prizeTypeName("未中奖!")
.createTime(DateUtil.date())
.updateTime(DateUtil.date())
.build();
lotteryRecDao.insert(build);
return null;
}
Prize prize = prizeDao.selectById(prizeId);
prize.setHadOutCount(prize.getHadOutCount() + 1);
prize.setUpdateTime(DateUtil.date());
prizeDao.updateById(prize);
PrizeType prizeType = prizeTypeDao.selectById(prize.getPrizeTypeId());
prize.setPrizeTypeName(prizeType.getTypeName());
LotteryRec build = LotteryRec.builder()
.prizeId(prizeId)
.userId(userId)
.activityType(2)
.awardStatus(3)
.prizeTypeId(prize.getPrizeTypeId())
.prizeTypeName(prizeType.getTypeName())
.active(0)
.createTime(DateUtil.date())
.updateTime(DateUtil.date())
.build();
lotteryRecDao.insert(build);
return prize;
}
public PageVo<PrizeType> getPrizeTypeList(PrizeTypeFindVo vo) {
LambdaQueryWrapper<PrizeType> lambdaQuery = Wrappers.lambdaQuery(PrizeType.class);
lambdaQuery.orderByDesc(PrizeType::getCreateTime);
if (StrUtil.isNotBlank(vo.getTypeName())) {
lambdaQuery.like(PrizeType::getTypeName, vo.getTypeName());
}
if (StrUtil.isNotBlank(vo.getDisplayName())) {
lambdaQuery.like(PrizeType::getDisplayName, vo.getDisplayName());
}
PageVo<PrizeType> paging = PagingUtils.paging(vo, prizeTypeDao, lambdaQuery, PrizeType.class);
return paging;
}
public void addPrizeType(PrizeType vo) {
if (vo.getActive() == null) {
vo.setActive(0);
}
vo.setCreateTime(DateUtil.date());
vo.setUpdateTime(DateUtil.date());
prizeTypeDao.insert(vo);
}
public void editPrizeType(PrizeType vo) {
PrizeType prizeType = prizeTypeDao.selectById(vo.getId());
AssertUtils.notNull(prizeType, "奖品类型不存在");
BeanUtil.copyProperties(vo, prizeType, "id", "createTime");
prizeType.setUpdateTime(DateUtil.date());
prizeTypeDao.updateById(prizeType);
}
public void delPrizeType(Set<String> ids) {
prizeTypeDao.deleteBatchIds(ids);
}
public PrizeType getPrizeType(String prizeTypeId) {
return prizeTypeDao.selectById(prizeTypeId);
}
public PageVo<LotteryRec> getLotteryRecList(LotteryRecFindVo vo) {
PageVo<LotteryRec> paging = PagingUtils.paging(vo, prizeDao::getLotteryRecList);
paging.getRows().forEach(lotteryRec -> {
Address defaultAddress = addressService.getDefaultAddress(lotteryRec.getUserId());
lotteryRec.setAddress(defaultAddress);
});
return paging;
}
public void confirmAward(Long lotteryRecId) {
LotteryRec lotteryRec = lotteryRecDao.selectById(lotteryRecId);
AssertUtils.notNull(lotteryRec, "中间记录不存在");
lotteryRec.setAwardStatus(4);
lotteryRec.setUpdateTime(DateUtil.date());
lotteryRecDao.updateById(lotteryRec);
}
}
package com.zq.user.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.vo.PageVo;
import com.zq.user.dao.AnswerRecDao;
import com.zq.user.dao.QuestionDao;
import com.zq.user.dao.QuestionTypeDao;
import com.zq.user.entity.AnswerRec;
import com.zq.user.entity.Question;
import com.zq.user.entity.QuestionType;
import com.zq.user.vo.QuestionFindVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
/**
* @author wilmiam
* @since 2022/6/15 9:52
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class QuestionService {
private final QuestionDao questionDao;
private final QuestionTypeDao questionTypeDao;
private final AnswerRecDao answerRecDao;
public Object questionList(QuestionFindVo vo) {
LambdaQueryWrapper<Question> lambdaQuery = Wrappers.lambdaQuery(Question.class);
if (vo.getGroupId() != null) {
lambdaQuery.eq(Question::getGroupId, vo.getGroupId());
}
lambdaQuery.orderByAsc(Question::getId);
return questionDao.selectList(lambdaQuery);
}
public PageVo<Question> getQuestionList(QuestionFindVo vo) {
LambdaQueryWrapper<Question> lambdaQuery = Wrappers.lambdaQuery(Question.class);
lambdaQuery.orderByDesc(Question::getCreateTime);
if (StrUtil.isNotBlank(vo.getContent())) {
lambdaQuery.like(Question::getContent, vo.getContent());
}
if (StrUtil.isNotBlank(vo.getKeyword())) {
lambdaQuery.like(Question::getKeyword, vo.getKeyword());
}
PageVo<Question> paging = PagingUtils.paging(vo, questionDao, lambdaQuery, Question.class);
paging.getRows().forEach(question -> {
if (question.getQuestionTypeId() != null) {
QuestionType questionType = questionTypeDao.selectById(question.getQuestionTypeId());
question.setQuestionTypeName(questionType.getName());
}
});
return paging;
}
public void addQuestion(Question vo) {
vo.setCreateTime(DateUtil.date());
questionDao.insert(vo);
}
public void editQuestion(Question vo) {
Question question = questionDao.selectById(vo.getId());
AssertUtils.notNull(question, "题目不存在");
question.setSubject(vo.getSubject());
question.setContent(vo.getContent());
question.setAnalysis(vo.getAnalysis());
question.setAnswer(vo.getAnswer());
question.setQuestionTypeId(vo.getQuestionTypeId());
questionDao.updateById(question);
}
public void delQuestion(Set<String> ids) {
questionDao.deleteBatchIds(ids);
}
public Question getQuestion(String questionId) {
Question question = questionDao.selectById(questionId);
if (question.getQuestionTypeId() != null) {
QuestionType questionType = questionTypeDao.selectById(question.getQuestionTypeId());
question.setQuestionTypeName(questionType.getName());
}
return question;
}
public List<QuestionType> getAllQuestionType() {
return questionTypeDao.selectList(null);
}
public Object answer(AnswerRec vo) {
// 正确题数
int correct = 0;
// 错题
List<Map<String, Object>> wrongQuestionList = new ArrayList<>();
String answerObjList = vo.getAnswerList();
JSONArray objects = JSONUtil.parseArray(answerObjList);
for (Object object : objects) {
JSONObject obj = JSONUtil.parseObj(object);
String questionId = obj.getStr("questionId");
// 用户所选答案
JSONArray answerArr = obj.getJSONArray("answer");
Question question = questionDao.selectById(questionId);
String answer = question.getAnswer();
// 正确答案
List<String> answerList = StrUtil.split(answer, ',');
for (Object o : answerArr) {
String s = Convert.toStr(o, "");
// 删除所选答案,正确答案中还有答案就说明答错了
boolean remove = answerList.remove(s);
if (!remove) {
Map<String, Object> map = new HashMap<>();
map.put("subject", question.getSubject());
map.put("answer", question.getAnswer());
map.put("analysis", question.getAnalysis());
map.put("content", question.getContent());
map.put("choiceAnswer", answer);
wrongQuestionList.add(map);
break;
}
}
if (CollUtil.isEmpty(answerList)) {
correct++;
}
}
// 题数
int count = objects.size();
BigDecimal score = BigDecimal.valueOf(100)
.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(correct));
vo.setScore(score.setScale(2, RoundingMode.HALF_UP).floatValue());
vo.setCreateTime(DateUtil.date());
answerRecDao.insert(vo);
Map<String, Object> returnData = new HashMap<>();
returnData.put("wrongQuestionList", wrongQuestionList);
returnData.put("score", vo.getScore());
return returnData;
}
}
...@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil; ...@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jfinal.weixin.sdk.api.ApiResult; import com.jfinal.weixin.sdk.api.ApiResult;
import com.jfinal.wxaapp.WxaConfig; import com.jfinal.wxaapp.WxaConfig;
...@@ -17,13 +18,16 @@ import com.zq.common.config.redis.RedisUtils; ...@@ -17,13 +18,16 @@ import com.zq.common.config.redis.RedisUtils;
import com.zq.common.config.security.ApiTokenUtils; import com.zq.common.config.security.ApiTokenUtils;
import com.zq.common.http.HttpRequestUtils; import com.zq.common.http.HttpRequestUtils;
import com.zq.common.utils.AssertUtils; import com.zq.common.utils.AssertUtils;
import com.zq.common.utils.PagingUtils;
import com.zq.common.vo.ApiTokenVo; import com.zq.common.vo.ApiTokenVo;
import com.zq.common.vo.PageVo;
import com.zq.user.dao.WxAppAccountDao; import com.zq.user.dao.WxAppAccountDao;
import com.zq.user.dao.WxUserDao; import com.zq.user.dao.WxUserDao;
import com.zq.user.entity.WxAppAccount; import com.zq.user.entity.WxAppAccount;
import com.zq.user.entity.WxUser; import com.zq.user.entity.WxUser;
import com.zq.user.manager.UserCacheKeys; import com.zq.user.manager.UserCacheKeys;
import com.zq.user.utils.AesCbcUtil; import com.zq.user.utils.AesCbcUtil;
import com.zq.user.vo.FindUserVo;
import com.zq.user.vo.WxLoginVo; import com.zq.user.vo.WxLoginVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -220,4 +224,34 @@ public class WxUserService { ...@@ -220,4 +224,34 @@ public class WxUserService {
return wxUser; return wxUser;
} }
/**
* 获取用户列表
*
* @param vo
* @return
*/
// @Cacheable(key = "'list:' + #vo")
public PageVo<WxUser> getUserList(FindUserVo vo) {
LambdaQueryWrapper<WxUser> lambdaQuery = Wrappers.lambdaQuery(WxUser.class);
lambdaQuery.orderByAsc(WxUser::getId);
if (StrUtil.isNotBlank(vo.getUsername())) {
lambdaQuery.like(WxUser::getUsername, vo.getUsername());
}
if (StrUtil.isNotBlank(vo.getPhone())) {
lambdaQuery.like(WxUser::getPhone, vo.getPhone());
}
if (StrUtil.isNotBlank(vo.getNickname())) {
lambdaQuery.like(WxUser::getNickname, vo.getNickname());
}
if (StrUtil.isNotBlank(vo.getRealname())) {
lambdaQuery.like(WxUser::getRealname, vo.getRealname());
}
if (StrUtil.isNotBlank(vo.getIdCard())) {
lambdaQuery.like(WxUser::getIdCard, vo.getIdCard());
}
return PagingUtils.paging(vo, wxUserDao, lambdaQuery, WxUser.class);
}
} }
package com.zq.user.vo;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author wilmiam
* @since 2022/6/27 10:04
*/
@Data
public class AddressFindVo extends PageReqVo {
/**
* 主键
*/
@ApiModelProperty("主键")
private String id;
/**
* 用户ID
*/
@ApiModelProperty("用户ID")
private String userId;
/**
* 收货人
*/
@ApiModelProperty("收货人")
private String consignee;
/**
* 收货人手机号
*/
@ApiModelProperty("收货人手机号")
private String consigneePhone;
/**
* 地址
*/
@ApiModelProperty("地址")
private String consigneeAddress;
/**
* 是否为默认
*/
@ApiModelProperty("是否为默认")
private Boolean isDefault;
/**
* 是否删除
*/
@ApiModelProperty("是否删除")
private Boolean isDel;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
}
...@@ -4,6 +4,8 @@ import com.zq.common.vo.PageReqVo; ...@@ -4,6 +4,8 @@ import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* 用户表(TAppUser)实体类 * 用户表(TAppUser)实体类
* *
...@@ -11,18 +13,13 @@ import lombok.Data; ...@@ -11,18 +13,13 @@ import lombok.Data;
* @since 2021-07-05 10:21:25 * @since 2021-07-05 10:21:25
*/ */
@Data @Data
public class FindAppUserVo extends PageReqVo { public class FindUserVo extends PageReqVo {
/**
* id
*/
private Long id;
/** /**
* 账号 * 用户ID
*/ */
@ApiModelProperty("账号") @ApiModelProperty("用户ID")
private String account; private String id;
/** /**
* 手机号 * 手机号
...@@ -31,22 +28,22 @@ public class FindAppUserVo extends PageReqVo { ...@@ -31,22 +28,22 @@ public class FindAppUserVo extends PageReqVo {
private String phone; private String phone;
/** /**
* 登录密码 * 账号
*/ */
@ApiModelProperty("登录密码") @ApiModelProperty("账号")
private String password; private String username;
/** /**
* 交易密码 * 登录密码
*/ */
@ApiModelProperty("交易密码") @ApiModelProperty("登录密码")
private String dealpwd; private String passwd;
/** /**
* 用户类型 * 昵称
*/ */
@ApiModelProperty("用户类型") @ApiModelProperty("昵称")
private Integer userType; private String nickname;
/** /**
* 真实姓名 * 真实姓名
...@@ -55,10 +52,22 @@ public class FindAppUserVo extends PageReqVo { ...@@ -55,10 +52,22 @@ public class FindAppUserVo extends PageReqVo {
private String realname; private String realname;
/** /**
* 昵称 * 身份证号码
*/ */
@ApiModelProperty("昵称") @ApiModelProperty("身份证号码")
private String nickname; private String idCard;
/**
* 头像
*/
@ApiModelProperty("头像")
private String avatar;
/**
* 年龄
*/
@ApiModelProperty("年龄")
private Integer age;
/** /**
* 性别 * 性别
...@@ -73,28 +82,22 @@ public class FindAppUserVo extends PageReqVo { ...@@ -73,28 +82,22 @@ public class FindAppUserVo extends PageReqVo {
private String address; private String address;
/** /**
* 邀请码 * 状态:0未激活 1正常 2暂停使用 3永久停号
*/
@ApiModelProperty("邀请码")
private String inviteCode;
/**
* 上级
*/ */
@ApiModelProperty("上级") @ApiModelProperty("状态:0未激活 1正常 2暂停使用 3永久停号")
private Long pid; private Integer state;
/** /**
* 用户等级 * 微信APPID
*/ */
@ApiModelProperty("用户等级") @ApiModelProperty("微信APPID")
private Integer level; private String appId;
/** /**
* 状态:0未激活 1正常 2暂停使用 3永久停号 * 微信openId
*/ */
@ApiModelProperty("状态:0未激活 1正常 2暂停使用 3永久停号") @ApiModelProperty("微信openId")
private Integer status; private String openId;
/** /**
* 开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通 * 开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通
...@@ -102,4 +105,28 @@ public class FindAppUserVo extends PageReqVo { ...@@ -102,4 +105,28 @@ public class FindAppUserVo extends PageReqVo {
@ApiModelProperty("开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通") @ApiModelProperty("开放平台获取的unionid,解决这个同一个企业的不同APP和不同公众号之间的帐号共通")
private String unionId; private String unionId;
/**
* 最后登录访问IP
*/
@ApiModelProperty("最后登录访问IP")
private String accessIp;
/**
* 最后登录时间
*/
@ApiModelProperty("最后登录时间")
private Date lastLoginTime;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
} }
package com.zq.user.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 抽奖记录(LotteryRec)实体类
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LotteryRecFindVo extends PageReqVo {
/**
* id
*/
private Long id;
/**
* 奖品id(t_prize表中id)
*/
@ApiModelProperty("奖品id(t_prize表中id)")
private Long prizeId;
/**
* 用户id
*/
@ApiModelProperty("用户id")
private String userId;
/**
* 活动类型,1.签到 2.抽奖
*/
@ApiModelProperty("活动类型,1.签到 2.抽奖")
private Integer activityType;
/**
* 发奖状态,1为自动发奖成功,2为自动发奖失败,3为待人工派奖,4为人工派奖成功
*/
@ApiModelProperty("发奖状态,0未中奖,1为自动发奖成功,2为自动发奖失败,3为待人工派奖,4为人工派奖成功")
private Integer awardStatus;
/**
* 奖品类型
*/
@ApiModelProperty("奖品类型")
private Integer prizeTypeId;
/**
* 奖品类型名称
*/
@ApiModelProperty("奖品类型名称")
private String prizeTypeName;
/**
* 删除标记
*/
@ApiModelProperty("删除标记")
private Integer active;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("用户名称")
@TableField(exist = false)
private String nickname;
@ApiModelProperty("奖品名称")
@TableField(exist = false)
private String prizeName;
@ApiModelProperty("奖品类型显示名称")
@TableField(exist = false)
private String displayName;
}
package com.zq.user.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author wilmiam
* @since 2022/6/15 17:18
*/
@Data
public class PrizeFindVo extends PageReqVo {
/**
* id
*/
private Long id;
/**
* 奖品类型:1现金,2优惠券,3实物,4软件内积分
*/
@ApiModelProperty("奖品类型:1现金,2优惠券,3实物,4软件内积分")
private Long prizeTypeId;
/**
* 奖品名称
*/
@ApiModelProperty("奖品名称")
private String prizeName;
/**
* 如果是奖励实物的话,该字段存储实物图片地址,比如店铺宝贝主图src
*/
@ApiModelProperty("如果是奖励实物的话,该字段存储实物图片地址,比如店铺宝贝主图src")
private String prizeImg;
/**
* 奖品价值
*/
@ApiModelProperty("奖品价值")
private String prizePrice;
/**
* 奖品备注
*/
@ApiModelProperty("奖品备注")
private String prizeMemo;
/**
* prize_type为话费的时候填单份奖品值多少话费;type为积分的时候,填单份奖品值多少积分;type为淘金币的时候,填单份奖品值多少淘金币
*/
@ApiModelProperty("prize_type为话费的时候填单份奖品值多少话费;type为积分的时候,填单份奖品值多少积分;type为淘金币的时候,填单份奖品值多少淘金币")
private Integer prizeSingleCash;
/**
* 本次发布奖品总数,如prize_type为优惠卷的话,publish_count最大数为500
*/
@ApiModelProperty("本次发布奖品总数,如prize_type为优惠卷的话,publish_count最大数为500")
private Integer publishCount;
/**
* 奖品被领取的总数量
*/
@ApiModelProperty("奖品被领取的总数量")
private Integer hadOutCount;
/**
* 中奖概率
*/
@ApiModelProperty("中奖概率")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal awardRate;
/**
* 奖品兑换开始时间
*/
@ApiModelProperty("奖品兑换开始时间")
private Date startDate;
/**
* 奖品兑换结束时间
*/
@ApiModelProperty("奖品兑换结束时间")
private Date endDate;
/**
* 是否可用。删除标记。0,可用。1,表示删除
*/
@ApiModelProperty("是否可用。删除标记。0,可用。1,表示删除")
private Integer active;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* updateTime
*/
private Date updateTime;
}
package com.zq.user.vo;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 奖品类型(TbPrizeType)实体类
*
* @author makejava
* @since 2022-06-15 17:14:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PrizeTypeFindVo extends PageReqVo {
/**
* id
*/
private Integer id;
/**
* typeName
*/
private String typeName;
/**
* typeCode
*/
private String typeCode;
/**
* 显示名称
*/
@ApiModelProperty("显示名称")
private String displayName;
/**
* active
*/
private Integer active;
/**
* 是否中奖
*/
@ApiModelProperty("是否中奖")
private Boolean isWinPrize;
/**
* createTime
*/
private Date createTime;
/**
* updateTime
*/
private Date updateTime;
}
package com.zq.user.vo;
import com.zq.common.vo.PageReqVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author wilmiam
* @since 2022/6/15 9:58
*/
@Data
public class QuestionFindVo extends PageReqVo {
/**
* id
*/
private Integer id;
/**
* 题目
*/
@ApiModelProperty("题目")
private String subject;
/**
* content
*/
private String content;
/**
* 题型
*/
@ApiModelProperty("题型")
private Integer questionTypeId;
/**
* 试题考试时间
*/
@ApiModelProperty("试题考试时间")
private Integer duration;
/**
* points
*/
private Integer points;
/**
* 班组ID
*/
@ApiModelProperty("班组ID")
private Integer groupId;
/**
* 试题可见性
*/
@ApiModelProperty("试题可见性")
private Integer isVisible;
/**
* createTime
*/
private Date createTime;
/**
* 创建者
*/
@ApiModelProperty("创建者")
private String creator;
/**
* lastModify
*/
private Date lastModify;
/**
* answer
*/
@ApiModelProperty("答案")
private String answer;
/**
* exposeTimes
*/
private Integer exposeTimes;
/**
* rightTimes
*/
private Integer rightTimes;
/**
* wrongTimes
*/
private Integer wrongTimes;
/**
* difficulty
*/
private Integer difficulty;
/**
* analysis
*/
@ApiModelProperty("解析")
private String analysis;
/**
* reference
*/
private String reference;
/**
* examingPoint
*/
private String examingPoint;
/**
* keyword
*/
private String keyword;
}
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