创建报名数据表


CREATE TABLE `pms_signup` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`signup_index` bigint(20) DEFAULT NULL,
`vote_id` bigint(20) DEFAULT NULL COMMENT '活动id',
`signup_name` varchar(50) DEFAULT NULL COMMENT '参赛名称',
`signup_desc` varchar(2000) DEFAULT NULL COMMENT '参赛介绍',
`signup_images` text COMMENT '图片',
`signup_phone` varchar(20) DEFAULT NULL COMMENT '电话',
`signup_weixin` varchar(50) DEFAULT NULL COMMENT '微信',
`signup_qq` varchar(20) DEFAULT NULL COMMENT 'qq',
`signup_video` varchar(255) DEFAULT NULL COMMENT '视频',
`signup_age` varchar(20) DEFAULT NULL COMMENT '年龄',
`signup_address` varchar(255) DEFAULT NULL COMMENT '地址',
`background_img` varchar(255) DEFAULT NULL COMMENT '背景图片',
`share_img` varchar(255) DEFAULT NULL COMMENT '自定义分享视频',
`signup_status` int(2) DEFAULT NULL COMMENT '报名状态',
`is_deleted` int(1) DEFAULT NULL COMMENT '删除状态',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人',
`apv_user_id` bigint(20) DEFAULT NULL COMMENT '审批人',
`apv_time` datetime DEFAULT NULL COMMENT '审批时间',
`apv_reason` varchar(255) DEFAULT NULL COMMENT '审核原因',
`browse_num` bigint(20) DEFAULT NULL COMMENT '浏览量',
`vote_num2` bigint(20) DEFAULT '0',
`vote_num` bigint(20) DEFAULT '0' COMMENT '投票量',
`signup_type` char(2) DEFAULT NULL COMMENT '参赛类型',
`file_url` varchar(255) DEFAULT NULL,
`is_disability` int(1) DEFAULT NULL COMMENT '是否残疾',
`disability_num` varchar(255) DEFAULT NULL COMMENT '残疾证号码',
`is_upload` int(1) DEFAULT NULL COMMENT '是否上传',
`user_name` varchar(50) DEFAULT NULL,
`dynamic_field` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;

投票小程序之后台报名管理功能实现_java

vote-entity模块报名表对应的PO


/**
*报名表
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class PmsSignup implements Serializable {

private static final long serialVersionUID = 1L;

@TableId(value = "id", type = IdType.AUTO)
private Long id;

/**
* 报名编号
*/
private Long signupIndex;

/**
* 活动id
*/
private Long voteId;

/**
* 参赛名称
*/
private String signupName;

/**
* 参赛介绍
*/
private String signupDesc;

/**
* 图片
*/
private String signupImages;

/**
* 电话
*/
private String signupPhone;

/**
* 微信
*/
private String signupWeixin;

/**
* qq
*/
private String signupQq;

/**
* 视频
*/
private String signupVideo;

/**
* 年龄
*/
private String signupAge;

/**
* 地址
*/
private String signupAddress;

/**
* 背景图片
*/
private String backgroundImg;

/**
* 自定义分享视频
*/
private String shareImg;

/**
* 报名状态
*/
private Integer signupStatus;

/**
* 删除状态
*/
private Integer isDeleted;

private Date createTime;

private Date updateTime;

/**
* 创建人
*/
private Long createUserId;

/**
* 审批人
*/
private Long apvUserId;

/**
* 审批时间
*/
private Date apvTime;

/**
* 审批原因
*/
private String apvReason;

/**
* 浏览量
*/
private Long browseNum;

/**
* 投票数
*/
private Long voteNum;

/**
* 虚拟投票数
*/
private Long voteNum2;

/**
* 参赛类型
*/
private String signupType;

/**
* 文档url
*/
private String fileUrl;

/**
* 是否残疾
*/
private Integer isDisability;

/**
* 残疾证号码
*/
private String disabilityNum;

/**
* 是否上传(图片|视频|文档)
*/
private Integer isUpload;

private String userName;

private String dynamicField;


}

投票小程序之后台报名管理功能实现_小程序_02

在vote-api模块的 IPmsSignupService 接口方法


public interface IPmsSignupService extends IService<PmsSignup> {

/**
* 分页查询
* @param vo
* @return
*/
IPage<PmsSignupDto> listPage(PmsSignupQueryVo vo);

/**
* 新增
* @param vo
* @return
*/
boolean create(PmsSignupParamVo vo);

/**
* 修改
* @param id
* @param vo
* @return
*/
boolean update(Long id,PmsSignupParamVo vo);

/**
* 查询详情
* @param id
* @return
*/
PmsSignupDto query(Long id);

/**
* 删除
* @param id
* @param voteStatus
* @return
*/
boolean delete(Long id);

/**
* 审批
* @param vo
* @return
*/
boolean verify(PmsSignupVerifyVo vo);

/**
* 查询报名数
* @param id
* @return
*/
long signNum(Long voteId);

/**
* 查询投票数
* @param id
* @return
*/
long voteNum(Long voteId);

/**
* 前端查询接口
* @param vo
* @return
*/
IPage<WxSignupDto> signupPage(WxSignupQueryVo vo);

/**
* 投票,每次加一
* @param signupId
* @return
*/
boolean addVoteNum(Long signupId);

/**
* 投票
* @param userId 投票人
* @param signupId 投票Id
* @return
*/
boolean vote(Long userId,Long signupId);

/**
* 查询活动所有报名数据
* @param voteId
* @return
*/
List<PmsSignup> list(Long voteId);


}

投票小程序之后台报名管理功能实现_java_03

在vote-app模块的PmsSignupServiceImpl类实现业务


@Service
public class PmsSignupServiceImpl extends ServiceImpl<PmsSignupMapper, PmsSignup> implements IPmsSignupService {

@Autowired
private RedisClient redisClient;
@Autowired
private IPmsVoteService pmsVoteService;

@Override
public IPage<PmsSignupDto> listPage(PmsSignupQueryVo vo) {
vo.getPage().setOptimizeCountSql(false);
vo.getPage().setSearchCount(false);
return baseMapper.listPage(vo.getPage(), vo);
}

@Override
public boolean create(PmsSignupParamVo vo) {

PmsVote vote = pmsVoteService.getById(vo.getVoteId());
if (vote == null) {
throw new CommonException("参数错误");
}
if (IntUtils.equalInt(vote.getActivityType(), 10)) {
if (IntUtils.equalInt(vote.getIsOpenSignup(), Constants.COMMON_FLAG_YES)) {
throw new CommonException("该活动不允许报名");
} else {
if (vote.getVoteEndTime() != null && new Date().after(vote.getVoteEndTime())) {
throw new CommonException("报名失败,报名时间已过");
}
}
} else {
if (vote.getVoteEndTime() != null && new Date().after(vote.getVoteEndTime())) {
throw new CommonException("报名失败,报名时间已过");
}
}

PmsSignup signup = new PmsSignup();
BeanUtil.copyProperties(vo, signup);
signup.setSignupStatus(Constants.VerifyStatus.VERIFY_SAVE.getCode());
signup.setVoteNum(0L);
signup.setBrowseNum(0L);
signup.setCreateUserId(vo.getUserId());
signup.setSignupImages(JSONObject.toJSONString(vo.getSignupImages()));
signup.setDynamicField(JSONObject.toJSONString(vo.getDynamicField()));
EntityUtil.setValue(signup);
return save(signup);
}

@Override
public boolean update(Long id, PmsSignupParamVo vo) {
PmsSignup signup = new PmsSignup();
signup.setId(id);
BeanUtil.copyProperties(vo, signup);
EntityUtil.setUpdateValue(signup);
signup.setSignupImages(JSONObject.toJSONString(vo.getSignupImages()));
signup.setDynamicField(JSONObject.toJSONString(vo.getSignupImages()));

return updateById(signup);
}

@Override
public PmsSignupDto query(Long id) {
PmsSignupDto dto = new PmsSignupDto();
Optional.ofNullable(baseMapper.selectById(id)).ifPresent(v -> {
BeanUtil.copyProperties(v, dto);
});
return dto;
}

@Override
public boolean delete(Long id) {
PmsSignup signup = baseMapper.selectById(id);
if (signup == null) {
throw new CommonException("删除失败");
}
signup.setIsDeleted(Constants.COMMON_FLAG_YES);
EntityUtil.setUpdateValue(signup);

return updateById(signup);
}

@Override
public boolean verify(PmsSignupVerifyVo vo) {
PmsSignup signup = baseMapper.selectById(vo.getId());
if (signup == null) {
throw new CommonException("删除失败");
}
if (IntUtils.equalInt(vo.getSignupStatus(), Constants.VerifyStatus.VERIFY_PUBLISH.getCode())) {
// 审核通过,设置报名序号
long incr = redisClient.incr(Constants.SIGNUP_INDEX_PRE + signup.getVoteId() + "." + signup.getSignupType(),
1);
signup.setSignupIndex(incr);
}
signup.setApvTime(new Date());
signup.setApvUserId(vo.getUserId());
signup.setSignupStatus(vo.getSignupStatus());
signup.setApvReason(vo.getRejectReason());
EntityUtil.setUpdateValue(signup);
return updateById(signup);
}


@Override
public IPage<WxSignupDto> signupPage(WxSignupQueryVo vo) {
vo.getPage().setOptimizeCountSql(false);
vo.getPage().setSearchCount(false);
return baseMapper.signupPage(vo.getPage(), vo);
}



@Override
public List<PmsSignup> list(Long voteId) {
QueryWrapper<PmsSignup> query = new QueryWrapper<>();
query.eq("vote_id", voteId);
query.eq("is_deleted", Constants.COMMON_FLAG_NO);
return baseMapper.selectList(query);
}

}

投票小程序之后台报名管理功能实现_springboot_04

在vote-web模块的PmsSignupController类实现活动管理前端控制器


@Api(value = "报名相关接口", tags = "PmsSignupController")
@RestController
@RequestMapping("/pmsSignup")
public class PmsSignupController extends BaseController {

private static Logger logger =
LoggerFactory.getLogger(PmsSignupController.class);

@Value("${BASE_PATH}")
private String BASE_PATH;
@Value("${BASE_HOST}")
private String BASE_HOST;

@Autowired
private IPmsSignupService pmsSignupService;
@Autowired
private IPmsVoteService pmsVoteService;

@ApiOperation("查询报名列表")
@GetMapping("/listPage")
public Response<PmsSignupDto> listPage(PmsSignupQueryVo vo) {
return Response.ofPage(pmsSignupService.listPage(vo));
}

@ApiOperation("报名")
@PostMapping("/create")
public Response<Boolean> create(@RequestBody @Valid PmsSignupParamVo vo) {
vo.setUserId(getUserId());
return Response.of(pmsSignupService.create(vo));
}

@ApiOperation("更新报名信息")
@PutMapping("/update/{id}")
public Response<Boolean> update(@PathVariable Long id, @RequestBody @Valid PmsSignupParamVo vo) {
vo.setUserId(getUserId());
return Response.of(pmsSignupService.update(id, vo));
}

@ApiOperation("删除")
@DeleteMapping("/delete/{id}")
public Response<Boolean> delete(@PathVariable Long id) {
return Response.of(pmsSignupService.delete(id));
}

@ApiOperation("查看")
@GetMapping("/view/{id}")
public Response<PmsSignupDto> view(@PathVariable Long id) {
return Response.ofData(pmsSignupService.query(id));
}

@ApiOperation("审核报名信息")
@PutMapping("/verify")
public Response<Boolean> verify(@RequestBody @Valid PmsSignupVerifyVo vo) {
vo.setUserId(getUserId());
return Response.of(pmsSignupService.verify(vo));
}
}

投票小程序之后台报名管理功能实现_java_05