getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long applyId) {
return R.ok(iPzcActivityGroupApplyService.queryById(applyId));
}
/**
* 申请参与组队
*
* 1 做校验
* 1.1 活动是否存在 1.2 活动是否已经开始 1.3 活动是否已经结束 1.4 活动是否已经满员
* 2 组是否还存在
*
*
* ====================
* 用户申请活动的时候 判断 是否足够缴纳保证金
*/
@Log(title = "活动组队申请列表", businessType = BusinessType.INSERT) //
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcActivityGroupApplyBo bo) {
log.info("申请参与组队:{}", JsonUtils.toJsonString(bo));
if(bo.getMoney().compareTo(new BigDecimal(100))<0)
{
return R.fail("申请失败,最低保障金为99派币~");
}
if (!activityUtils.allCheck(Math.toIntExact(bo.getActivityId()), bo.getGroupId())) {
return R.fail("申请失败,活动不存在或者已经结束或者组不存在");
}
bo.setUserId(LoginHelper.getUserId());
if (iPzcActivityGroupApplyService.queryByUserIdAndGroupId(bo.getUserId(), bo.getGroupId()) != null) {
return R.fail("申请失败,您已经申请过了");
}
//======================================================
PzcUser applyUser = pzcUserMapper.selectById(bo.getUserId()); //我有2个币 申请需要 两个币 我则需要 根据当前他的余额来判断
log.info("申请参与组队 我目前的余额是: {} 申请需要的余额是:{}", applyUser.getMoney(), bo.getMoney());
if (applyUser.getMoney().compareTo(bo.getMoney()) < 0 || applyUser.getMoney().compareTo(new BigDecimal(100)) < 0) //100块钱 也没有就需要充值了
{
return R.fail("申请失败,最低保障金为99派币~");
}
return toAjax(iPzcActivityGroupApplyService.insertByBo(bo));
}
/**
* 修改活动组队申请列表
*/
@Log(title = "活动组队申请列表", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcActivityGroupApplyBo bo) {
bo.setUserId(LoginHelper.getUserId());
if (!activityUtils.allCheck(Math.toIntExact(bo.getActivityId()), bo.getGroupId())) {
return R.fail("修改失败,活动不存在或者已经结束或者组不存在");
}
if (!iPzcActivityGroupApplyService.queryByUserIdAndActivityId(bo.getUserId(), bo.getActivityId())) {
return R.fail("修改失败,您还没有申请过该活动组");
}
return toAjax(iPzcActivityGroupApplyService.updateByBo(bo));
}
/**
* 取消活动组队申请列表
*
* @param applyIds 主键串
*/
@Log(title = "活动组队申请列表", businessType = BusinessType.DELETE)
@DeleteMapping("/{applyIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] applyIds) {
return toAjax(iPzcActivityGroupApplyService.deleteWithValidByIds(Arrays.asList(applyIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcActivityGroupController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.map.MapBuilder;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.util.DateUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.JsonUtils;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.*;
import top.flya.system.domain.bo.PzcActivityGroupBo;
import top.flya.system.domain.bo.RefurbishBo;
import top.flya.system.domain.vo.PzcActivityGroupApplyVo;
import top.flya.system.domain.vo.PzcActivityGroupVo;
import top.flya.system.domain.vo.RefurbishVO;
import top.flya.system.mapper.*;
import top.flya.system.service.IPzcActivityGroupApplyService;
import top.flya.system.service.IPzcActivityGroupService;
import top.flya.system.utils.WxUtils;
import top.flya.system.utils.gaode.GaoDeMapUtil;
import top.flya.system.xxlJob.ScheduledExecutorUtils;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static top.flya.system.config.ClientCache.concurrentHashMap;
/**
* 活动组队
*
* @author ruoyi
* @date 2023-07-10
*/
@Validated
@RequiredArgsConstructor
@RestController
@Slf4j
@RequestMapping("/system/activityGroup")
public class PzcActivityGroupController extends BaseController {
private final IPzcActivityGroupService iPzcActivityGroupService;
private final IPzcActivityGroupApplyService iPzcActivityGroupApplyService;
private final PzcUserMapper pzcUserMapper;
private final PzcActivityMapper pzcActivityMapper;
private final PzcUserPhotoMapper pzcUserPhotoMapper;
private final WxUtils wxUtils;
private final PzcActivityGroupMapper pzcActivityGroupMapper;
private final PzcActivityGroupApplyMapper pzcActivityGroupApplyMapper;
private final PzcOfficialMapper pzcOfficialMapper;
private final PzcUserTalkMapper pzcUserTalkMapper;
private final GaoDeMapUtil gaoDeMapUtil;
private final ExecutorService newSingleThreadExecutor = new ThreadPoolExecutor(10, 20, 200L,
TimeUnit.MILLISECONDS, new LinkedBlockingQueue(100),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy() //指定拒绝策略 防止任务不执行
);
@PostMapping("/cancelIssueGroup") //取消组队的发布
public R cancelIssueGroup(@RequestParam("groupId") Long groupId) {
log.info("取消组队的发布: {}", groupId);
Long userId = LoginHelper.getUserId();
//首先看看组队是否是我发布的 并且是否有人申请 如果有人申请则不能取消
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(groupId);
if (pzcActivityGroup == null || !pzcActivityGroup.getUserId().equals(userId)) {
return R.fail("组队不存在~");
}
// 查询申请列表 如果有人申请则不能取消
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("group_id", groupId);
List pzcActivityGroupApplies = pzcActivityGroupApplyMapper.selectList(queryWrapper);
List delApplyIds = new ArrayList<>();
pzcActivityGroupApplies.forEach(
pzcActivityGroupApply -> {
if (pzcActivityGroupApply.getApplyStatus() != -1 && pzcActivityGroupApply.getApplyStatus() != 0 && pzcActivityGroupApply.getApplyStatus() != 15) {
throw new RuntimeException("有组队正在进行中,不能取消");
}
if (pzcActivityGroupApply.getApplyStatus() == 0) {
delApplyIds.add(pzcActivityGroupApply.getActivityId());
//异步给对方发消息 通知对方已拒绝 修改为异步请求
newSingleThreadExecutor.execute(() -> {
wxUtils.insertPzcOfficialMsg(userId, pzcActivityGroupApply.getUserId(),
"来自您的申请组队【" + pzcActivityGroup.getTitle() + "】信息:",
"您的申请组队【" + pzcActivityGroup.getTitle() + "】已被发布者取消",
pzcActivityGroup.getGroupId(), pzcActivityGroup.getActivityId());
});
}
}
);
//删除申请
if (delApplyIds.size() > 0) {
pzcActivityGroupApplyMapper.deleteBatchIds(delApplyIds);
}
//删除组队
pzcActivityGroupMapper.deleteById(groupId);
return R.ok();
}
@PostMapping("/refurbish") //刷新
public R refurbish(@RequestBody RefurbishBo refurbishBo) throws Exception {
log.info("刷新: {}", JsonUtils.toJsonString(refurbishBo));
//首先查询这个组队是否是我发起的
PzcActivityGroupApply pzcActivityGroupApply = pzcActivityGroupApplyMapper.selectById(refurbishBo.getApplyId());
if (pzcActivityGroupApply == null) {
return R.fail("申请不存在");
}
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupApply.getGroupId());
Pattern pattern = Pattern.compile("【(.*?)】(.*?)");
Matcher matcher = pattern.matcher(pzcActivityGroup.getAddress());
String end = "";
if (matcher.find()) {
end = matcher.group(1);
} else {
return R.fail("地址解析失败,请联系管理员");
}
String[] startJwd = refurbishBo.getAddress().split(",");
Long data = gaoDeMapUtil.getDistance(refurbishBo.getAddress(), end).getData();
refurbishBo.setAddress(gaoDeMapUtil.getAddress(startJwd[0], startJwd[1]).getData().toString());
log.info("调用高德API获取到的用户目前地址为: {}", refurbishBo.getAddress());
log.info("调用高德API获取到的用户距离目标地址距离为: {}", data);
if (refurbishBo.getRole() == 0) //申请方
{
//判断申请方现在是否可以打卡
pzcActivityGroupApply.setApplyAddress(refurbishBo.getAddress());
pzcActivityGroupApplyMapper.updateById(pzcActivityGroupApply);
RefurbishVO refurbishVO = new RefurbishVO();
refurbishVO.setApplyAddress(refurbishBo.getAddress());
refurbishVO.setApplyId(refurbishBo.getApplyId());
refurbishVO.setStartAddress(pzcActivityGroupApply.getStartAddress());
refurbishVO.setDistance(data);
log.info("刷新返回的信息为: {}", JSONUtil.toJsonPrettyStr(refurbishVO));
return R.ok(refurbishVO);
} else {
pzcActivityGroupApply.setStartAddress(refurbishBo.getAddress());
pzcActivityGroupApplyMapper.updateById(pzcActivityGroupApply);
RefurbishVO refurbishVO = new RefurbishVO();
refurbishVO.setApplyAddress(pzcActivityGroupApply.getApplyAddress());
refurbishVO.setApplyId(refurbishBo.getApplyId());
refurbishVO.setStartAddress(refurbishBo.getAddress());
refurbishVO.setDistance(data);
log.info("刷新返回的信息为: {}", JSONUtil.toJsonPrettyStr(refurbishVO));
return R.ok(refurbishVO);
}
}
@PostMapping("/cancel") //取消 双方都可以取消
@Transactional
@RepeatSubmit()
public R cancel(@RequestParam("applyId") Integer applyId) {
//首先查询这个组队是否是我发起的
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryById(applyId.longValue());
if (pzcActivityGroupApplyVo == null) {
return R.fail("申请不存在");
}
Long userId = LoginHelper.getUserId();
Long groupId = pzcActivityGroupApplyVo.getGroupId();
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (pzcActivityGroupVo == null) {
return R.fail("组队不存在");
}
PzcUser otherUser = null;
if (pzcActivityGroupVo.getUserId().equals(userId)) //我是发起人 取消
{
otherUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
} else { //我是申请人
otherUser = pzcUserMapper.selectById(pzcActivityGroupMapper.selectById(groupId).getUserId());
}
// 给对方发官方消息 通知对方已取消
wxUtils.insertPzcOfficialMsg(userId, otherUser.getUserId(),
"来自" + otherUser.getNickname() + "与您的组队信息:",
"在【" + pzcActivityGroupVo.getTitle() + "】组队中途,对方已经取消本次组队。您可以再次同意或者申请其他用户",
groupId, pzcActivityGroupVo.getActivityId());
Integer applyStatus = pzcActivityGroupApplyVo.getApplyStatus();
if (applyStatus != 0 && applyStatus != 1 && applyStatus != 9 && applyStatus != 10) {
return R.fail("该订单位于【" + wxUtils.applyStatus(applyStatus) + "】状态,不可取消");
}
//查询用户是否有免责取消次数
PzcUser pzcUser = pzcUserMapper.selectById(LoginHelper.getUserId());
if (pzcUser.getExemptCancel() > 0) {
pzcUser.setExemptCancel(pzcUser.getExemptCancel() - 1);
} else {
pzcUser.setMoney(pzcUser.getMoney().subtract(new BigDecimal("10"))); //扣除10派币
wxUtils.insertUserHistory(pzcUser.getUserId(), pzcActivityGroupVo.getActivityId(), 4L, "取消组队扣除10派币", new BigDecimal("10").negate());
}
pzcUserMapper.updateById(pzcUser);
//修改状态为 已取消
newSingleThreadExecutor.execute(() -> {
// 更新 组队状态为已结束
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupVo.getGroupId());
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), -1));
}
@PostMapping("/cancelByGroupIn") //活动过程中取消组队 扣除保证金 + 20派币 退还对方派币 + 对方的保证金 通知对方
@Transactional
@RepeatSubmit()
public R cancelByGroupIn(@RequestParam("applyId") Integer applyId) {
Long userId = LoginHelper.getUserId();
PzcUser my = pzcUserMapper.selectById(userId);
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryById(applyId.longValue());
if (pzcActivityGroupApplyVo == null) {
return R.fail("申请不存在");
}
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupApplyVo.getGroupId());
if (pzcActivityGroupApplyVo.getUserId().equals(userId)) //我是申请方
{
//把钱都返还给发起方
BigDecimal money = pzcActivityGroupApplyVo.getMoney();
money = money.subtract(new BigDecimal("20"));
PzcUser startUser = pzcUserMapper.selectById(pzcActivityGroup.getUserId());
startUser.setMoney(startUser.getMoney().add(money).add(pzcActivityGroup.getMoney())); //全额返回给发起方的保证金 + 对方扣除 0.2保证金 后的派币
pzcUserMapper.updateById(startUser);
BigDecimal finalMoney = money;
newSingleThreadExecutor.execute(() -> {
//官方推送消息
wxUtils.insertPzcOfficialMsg(userId, startUser.getUserId(),
"来自" + my.getNickname() + "与您的组队信息:",
"很遗憾地通知您:您在【" + pzcActivityGroup.getTitle() + "】组队活动中,申请方已经取消本次组队活动。对方的违约金 【" + finalMoney + "派币】已纳入您的账户。您可以再次同意或者申请其他用户。",
pzcActivityGroup.getGroupId(), pzcActivityGroup.getActivityId());
//历史记录
wxUtils.insertUserHistory(userId, pzcActivityGroup.getActivityId(), 4L, "在【" + pzcActivityGroup.getTitle() + "】活动中途取消组队,扣除违约金 【" + pzcActivityGroup.getMoney() + "】派币", pzcActivityGroup.getMoney().negate());
wxUtils.insertUserHistory(startUser.getUserId(), pzcActivityGroup.getActivityId(), 2L, "在【" + pzcActivityGroup.getTitle() + "】活动中途取消组队,违约金所得 【" + pzcActivityGroup.getMoney().subtract(new BigDecimal("20")) + "】派币", pzcActivityGroup.getMoney().subtract(new BigDecimal("20")));
});
} else {
//我是发起方
PzcUser applyUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
applyUser.setMoney(applyUser.getMoney().
add(pzcActivityGroup.getMoney().subtract(new BigDecimal("20")))
.add(pzcActivityGroupApplyVo.getMoney())); //全额返回给申请方的保证金
pzcUserMapper.updateById(applyUser);
newSingleThreadExecutor.execute(() -> {
//官方推送消息
wxUtils.insertPzcOfficialMsg(userId, applyUser.getUserId(),
"来自" + my.getNickname() + "与您的组队信息:",
"很遗憾地通知您:您在在【" + pzcActivityGroup.getTitle() + "】组队活动中,发起方已经取消本次组队活动。对方的违约金 【" + pzcActivityGroup.getMoney().subtract(new BigDecimal("20")) + "派币】已纳入您的账户。您可以再次同意或者申请其他用户。",
pzcActivityGroup.getGroupId(), pzcActivityGroup.getActivityId());
//历史记录
wxUtils.insertUserHistory(userId, pzcActivityGroup.getActivityId(), 4L, "在【" + pzcActivityGroup.getTitle() + "】活动中途取消组队,违约金 【" + pzcActivityGroup.getMoney() + "】派币", pzcActivityGroup.getMoney().negate());
wxUtils.insertUserHistory(applyUser.getUserId(), pzcActivityGroup.getActivityId(), 2L, "在【" + pzcActivityGroup.getTitle() + "】活动中途取消组队,违约金所得 【" + pzcActivityGroup.getMoney().subtract(new BigDecimal("20")) + "】派币", pzcActivityGroup.getMoney().subtract(new BigDecimal("20")));
});
}
newSingleThreadExecutor.execute(() -> {
// 更新 组队状态为已结束
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), -1));//修改状态为 已取消
}
/**
* 我创建的活动的申请列表
* 思路整理
* 首先查出所有 GroupId
* 然后查出groupId 对应的申请列表
*
* @return
*/
@GetMapping("/applyList")
public R> applyList() {
PzcActivityGroupBo bo = new PzcActivityGroupBo();
bo.setUserId(LoginHelper.getUserId());
List pzcActivityGroupVos = iPzcActivityGroupService.queryList(bo);
List groupIds = pzcActivityGroupVos.stream().map(PzcActivityGroupVo::getGroupId).collect(Collectors.toList());
if (groupIds.size() == 0) {
return R.ok();
}
List pzcActivityGroupApplyVos = iPzcActivityGroupApplyService.queryListByGroupIds(groupIds);
pzcActivityGroupApplyVos.forEach(
s -> {
PzcUser pzcUser = pzcUserMapper.selectById(s.getUserId());
s.setNickName(pzcUser.getNickname());
s.setAvatar(pzcUser.getAvatar());
Integer region = pzcActivityGroupVos.stream().filter(s1 -> s1.getGroupId().equals(s.getGroupId())).findFirst().get().getRegion();
String title = "";
PzcActivity pzcActivity = pzcActivityMapper.selectById(s.getActivityId());
if (s.getActivityId() == 0) {
PzcRegion pzcRegion = pzcRegionMapper.selectById(region);
if (pzcRegion != null) {
title = "【" + pzcRegion.getName() + "】";
}
log.info("申请活动列表 title:{}", title);
} else {
if (pzcActivity != null) {
title = pzcActivity.getTitle();
} else {
title = "【活动已结束】";
}
}
s.setActivityTitle(title);
s.setGroupTitle(pzcActivityGroupVos.stream().filter(s1 -> s1.getGroupId().equals(s.getGroupId())).findFirst().get().getTitle());
}
);
List result = pzcActivityGroupApplyVos.stream().filter(s -> s.getApplyStatus() == 0).collect(Collectors.toList());//过滤掉已取消的
return R.ok(result);
}
@GetMapping("/userInfo") //查看申请人或者发起人信息
public R userInfo(@RequestParam("userId") Long userId, @RequestParam("groupId") Long groupId) {
//首先查询该用户是否申请了我的组 申请了 才有资格去查看 这个不应该是申请的 人才能看 双方都能互相看
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryByUserIdAndGroupId(userId, groupId);
if (pzcActivityGroupApplyVo == null) {
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (!userId.equals(pzcActivityGroupVo.getUserId())) {
return R.fail("无权查看该用户信息");
}
pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryByUserIdAndGroupId(LoginHelper.getUserId(), groupId);
}
PzcUser pzcUser = pzcUserMapper.selectById(userId);
pzcUser.setMoney(null);
pzcUser.setUserPhoto(pzcUserPhotoMapper.selectList(new QueryWrapper<>(new PzcUserPhoto()).eq("user_id", userId)));
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(groupId);
pzcActivityGroup.setAddress(pzcActivityGroup.getAddress().substring(pzcActivityGroup.getAddress().indexOf("】") + 1));
pzcActivityGroupApplyVo.setActivityTitle(pzcActivityGroup.getActivityName());
pzcUser.setPzcActivityGroupApplyVo(pzcActivityGroupApplyVo);
pzcUser.setPzcActivityGroup(pzcActivityGroup);
pzcUser.setLiveStatus(concurrentHashMap.get(userId) != null);
pzcUser.setNotReadCount(pzcUserTalkMapper.selectNotReadCount(userId, LoginHelper.getUserId(), LoginHelper.getUserId()));
pzcUser.setExemptCancel(pzcUserMapper.selectById(LoginHelper.getUserId()).getExemptCancel()); //获取我的免责取消次数
return R.ok(pzcUser);
}
/**
* 13 发起方已评价
* 14 申请方已评价
* 15 双方已评价
*
* @param applyId
* @return
*/
@PostMapping("/pj") //双方评价 (可选)
@Transactional
public R pj(@RequestParam("applyId") Integer applyId, @RequestParam("score") Integer score) {
wxUtils.checkApplyScore(score);
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = wxUtils.checkApplyPj(applyId.longValue());
//首先获取我的UserId
Long userId = LoginHelper.getUserId();
Long groupId = pzcActivityGroupApplyVo.getGroupId();
Integer applyStatus = pzcActivityGroupApplyVo.getApplyStatus();
if (pzcActivityGroupApplyVo.getUserId().equals(userId)) {
//获取对方 userId 并且修改对方积分
Long otherUserId = pzcActivityGroupMapper.selectById(groupId).getUserId();
PzcUser otherUser = pzcUserMapper.selectById(otherUserId);
if (applyStatus == 13) {
return R.fail("您已经评价过了 不可重复操作");
}
otherUser.setIntegration(otherUser.getIntegration() + score);
otherUser.setIntegrationNow(otherUser.getIntegrationNow() + score);
wxUtils.updateUserMsg(otherUser);
pzcUserMapper.updateById(otherUser);
if (applyStatus == 14) //发起方评价了
{
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 15)); //双方都已评价
}
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 13));//申请方评价
}
//判断当前 用户是否为组队发起人 如果不是 直接报错
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (pzcActivityGroupVo == null) {
return R.fail("组队不存在");
}
if (!pzcActivityGroupVo.getUserId().equals(userId)) {
return R.fail("你不是组队发起人");
}
if (applyStatus == 14) {
return R.fail("您已经评价过了 不可重复操作");
}
// ============================================================================================
Long otherUserId = pzcActivityGroupApplyVo.getUserId();
PzcUser otherUser = pzcUserMapper.selectById(otherUserId);
otherUser.setIntegration(otherUser.getIntegration() + score);
otherUser.setIntegrationNow(otherUser.getIntegrationNow() + score);
wxUtils.updateUserMsg(otherUser);
pzcUserMapper.updateById(otherUser);
//看看申请方是否评价了
if (applyStatus == 13) //申请方评价了
{
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 15)); //双方都已评价
}
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 14));//发起方评价
}
/**
* 双方都到达了目的地 开始扣手续费
*
* @param applyId
* @return
*/
@PostMapping("/confirmReach") //确认到达目的地
@Transactional
public R confirmReach(@RequestParam("applyId") Integer applyId) {
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = wxUtils.checkApplyConfirm(applyId.longValue());
Long userId = LoginHelper.getUserId();
PzcUser my = pzcUserMapper.selectById(userId);
Long groupId = pzcActivityGroupApplyVo.getGroupId();
Integer applyStatus = pzcActivityGroupApplyVo.getApplyStatus();
if (applyStatus != 2 && applyStatus != 11 && applyStatus != 12) {
return R.fail("该订单目前状态为【" + wxUtils.applyStatus(applyStatus) + "】不可确认");
}
//获取发起方的保证金
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (pzcActivityGroupVo == null) {
return R.fail("组队不存在");
}
PzcActivity pzcActivity = pzcActivityMapper.selectById(pzcActivityGroupVo.getActivityId());
if (pzcActivityGroupApplyVo.getUserId().equals(userId)) { //我是申请方
if (applyStatus == 11) //发起方确认了
{
BigDecimal money = pzcActivityGroupVo.getMoney();
money = money.subtract(new BigDecimal("10"));
//将保证金还给发起方
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
pzcUser.setMoney(pzcUser.getMoney().add(money));
pzcUserMapper.updateById(pzcUser);
//========================================================================
//获取申请方的保证金
PzcUser applyUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
BigDecimal applyMoney = pzcActivityGroupApplyVo.getMoney();
applyMoney = applyMoney.subtract(new BigDecimal("10"));
//将保证金还给申请方
applyUser.setMoney(applyUser.getMoney().add(applyMoney));
pzcUserMapper.updateById(applyUser);
BigDecimal finalMoney = money;
BigDecimal finalApplyMoney = applyMoney;
newSingleThreadExecutor.execute(() -> {
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 2L, "组队完成退还保证金 【" + finalMoney + "】 派币", finalMoney);
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupVo.getActivityId(), 2L, "组队完成退还保证金 【" + finalApplyMoney + "】 派币", finalMoney);
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 1L, JsonUtils.toJsonString(pzcActivity), null);
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupVo.getActivityId(), 1L, JsonUtils.toJsonString(pzcActivity), null);
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupApplyVo.getGroupId());
// 更新 组队状态为已结束
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
//更新双方积分
PzcUser pzcUser1 = pzcUserMapper.selectById(pzcActivityGroup.getUserId());
PzcUser pzcUser2 = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
pzcUser1.setIntegration(pzcUser1.getIntegration() + 3);
pzcUser1.setIntegrationNow(pzcUser1.getIntegrationNow() + 3);
pzcUser2.setIntegration(pzcUser2.getIntegration() + 3);
pzcUser2.setIntegrationNow(pzcUser2.getIntegrationNow() + 3);
wxUtils.updateUserMsg(pzcUser1);
wxUtils.updateUserMsg(pzcUser2);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 3)); //双方都已确认
}
if (applyStatus == 12) {
return R.fail("您已经确认过了 不可重复操作");
}
//申请方确认了 给发起方推送微信消息
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
Map dataMap = new HashMap<>();
dataMap.put("thing4", MapBuilder.create().put("value", my.getNickname()).build());
dataMap.put("thing5", MapBuilder.create().put("value", "对方已到达,您需在活动时间内到达").build());
dataMap.put("time6", MapBuilder.create().put("value", DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")).build());
log.info("发起方确认到达目的地,给申请方推送微信消息:{}", JsonUtils.toJsonString(dataMap));
newSingleThreadExecutor.execute(() -> {
wxUtils.sendArriveMsg(pzcUser.getOpenid(), dataMap);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 12));//申请方确认
}
//判断当前 用户是否为组队发起人 如果不是 直接报错
if (!pzcActivityGroupVo.getUserId().equals(userId)) {
return R.fail("你不是组队发起人");
}
//看看申请方是否确认了
if (applyStatus == 12) //我是发起方
{
//获取发起方的保证金
BigDecimal money = pzcActivityGroupVo.getMoney();
money = money.subtract(new BigDecimal("10"));
//将保证金还给发起方
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
pzcUser.setMoney(pzcUser.getMoney().add(money));
pzcUserMapper.updateById(pzcUser);
//========================================================================
//获取申请方的保证金
PzcUser applyUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
BigDecimal applyMoney = pzcActivityGroupApplyVo.getMoney();
applyMoney = applyMoney.subtract(new BigDecimal("10"));
//将保证金还给申请方
applyUser.setMoney(applyUser.getMoney().add(applyMoney));
pzcUserMapper.updateById(applyUser);
BigDecimal finalMoney = money;
BigDecimal finalApplyMoney = applyMoney;
newSingleThreadExecutor.execute(() -> {
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 2L, "组队完成退还保证金 " + finalMoney + " 派币", finalMoney);
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupVo.getActivityId(), 2L, "组队完成退还保证金 " + finalApplyMoney + " 派币", finalMoney);
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 1L, JsonUtils.toJsonString(pzcActivity), null);
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupVo.getActivityId(), 1L, JsonUtils.toJsonString(pzcActivity), null);
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupApplyVo.getGroupId());
// 更新 组队状态为已结束
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
//更新双方积分
PzcUser pzcUser1 = pzcUserMapper.selectById(pzcActivityGroup.getUserId());
PzcUser pzcUser2 = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
pzcUser1.setIntegration(pzcUser1.getIntegration() + 3);
pzcUser1.setIntegrationNow(pzcUser1.getIntegrationNow() + 3);
pzcUser2.setIntegration(pzcUser2.getIntegration() + 3);
pzcUser2.setIntegrationNow(pzcUser2.getIntegrationNow() + 3);
wxUtils.updateUserMsg(pzcUser1);
wxUtils.updateUserMsg(pzcUser2);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 3)); //双方都已确认
}
if (applyStatus == 11) {
return R.fail("您已经确认过了 不可重复操作");
}
//发起方确认了 给申请方推送微信消息
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
Map> dataMap = new HashMap<>();
dataMap.put("thing4", MapBuilder.create().put("value", my.getNickname()).build());
dataMap.put("thing5", MapBuilder.create().put("value", "对方已到达,您需在活动时间内到达").build()); //对方已到达约定的见面地点,您需在【"+pzcActivityGroupVo.getActivityTime()+"】前到达目的地,否则,按照违约处理。或您也可以与对方沟通,申请无限制确认到达,以保证组队的正常。
dataMap.put("time6", MapBuilder.create().put("value", DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")).build());
log.info("申请方确认到达目的地,给发起方推送微信消息:{}", JsonUtils.toJsonString(dataMap));
newSingleThreadExecutor.execute(() -> {
wxUtils.sendArriveMsg(pzcUser.getOpenid(), dataMap);
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 11));//发起方确认
}
@GetMapping("/applyRole")
public R applyRole(@RequestParam("applyId") Integer applyId) {
Long userId = LoginHelper.getUserId();
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryById(applyId.longValue());
if (pzcActivityGroupApplyVo.getUserId().equals(userId)) {
return R.ok(0); //我是申请方
} else {
return R.ok(1); //我是发起方
}
}
@PostMapping("/confirm") //确认申请 (这里判断 保证金 是否足够缴纳 保证 新人卡 bug)
@Transactional
public R confirm(@RequestParam("applyId") Integer applyId) {
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = wxUtils.checkApplyConfirm(applyId.longValue());
Long userId = LoginHelper.getUserId();
Long groupId = pzcActivityGroupApplyVo.getGroupId();
Integer applyStatus = pzcActivityGroupApplyVo.getApplyStatus();
if (applyStatus == 2) {
return R.fail("该订单进行中,不可确认");
}
PzcActivityGroupVo group = iPzcActivityGroupService.queryById(groupId);
//获取双方保证金
BigDecimal applyMoney = pzcActivityGroupApplyVo.getMoney();
BigDecimal startMoney = group.getMoney();
//获取双方
PzcUser applyUser = pzcUserMapper.selectById(pzcActivityGroupApplyVo.getUserId());
PzcUser startUser = pzcUserMapper.selectById(group.getUserId());
//如果可以确认 判断 是那一方确认的
if (pzcActivityGroupApplyVo.getUserId().equals(userId)) {// 自己是申请方 申请方还得等发起方最后确认时间地点
if (applyStatus == 10) {
return R.fail("您已经确认过了 不可重复操作");
}
//如果是自己确认的 则修改状态为 已确认
if (applyStatus == 9) //发起方确认了
{
log.info("申请方的余额与保证金 {}----{}", applyUser.getMoney(), applyMoney);
// 如果有一方保证金不足以缴纳 则报错
if (applyUser.getMoney().compareTo(applyMoney) < 0) {
return R.fail("您的保证金不足以缴纳");
}
//双方都已确认 开始 扣除保证金
//获取申请方保证金
applyUser.setMoney(applyUser.getMoney().subtract(applyMoney));
pzcUserMapper.updateById(applyUser);
//获取发起方保证金
startUser.setMoney(startUser.getMoney().subtract(startMoney));
pzcUserMapper.updateById(startUser);
//存入历史记录
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupApplyVo.getActivityId(), 3L, "组队开始扣除保证金 【" + applyMoney + "】 派币", applyMoney.negate());
wxUtils.insertUserHistory(group.getUserId(), pzcActivityGroupApplyVo.getActivityId(), 3L, "组队开始扣除保证金 【" + startMoney + "】 派币", startMoney.negate());
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 2)); //双方都已确认
} else {
return R.fail("发起方还未确认最后时间地点,请继续保持沟通哦");
}
} else { //自己是发起方
//判断当前 用户是否为组队发起人 如果不是 直接报错‘
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (pzcActivityGroupVo == null) {
return R.fail("组队不存在");
}
if (!pzcActivityGroupVo.getUserId().equals(userId)) {
return R.fail("你不是组队发起人");
}
if (applyStatus == 9) {
return R.fail("您已经确认过了 不可重复操作");
}
//看看申请方是否确认了
if (applyStatus == 10) //申请方确认了
{
log.info("发起方的余额与保证金 {}----{}", startUser.getMoney(), startMoney);
if (startUser.getMoney().compareTo(startMoney) < 0) {
return R.fail("您的的保证金不足以缴纳");
}
//双方都已确认 开始 扣除保证金
//获取申请方保证金
applyUser.setMoney(applyUser.getMoney().subtract(applyMoney));
pzcUserMapper.updateById(applyUser);
//获取发起方保证金
startUser.setMoney(startUser.getMoney().subtract(startMoney));
pzcUserMapper.updateById(startUser);
newSingleThreadExecutor.execute(() -> {
//存入历史记录
wxUtils.insertUserHistory(pzcActivityGroupApplyVo.getUserId(), pzcActivityGroupApplyVo.getActivityId(), 3L, "组队开始扣除保证金 【" + applyMoney + "】 派币", applyMoney.negate());
wxUtils.insertUserHistory(group.getUserId(), pzcActivityGroupApplyVo.getActivityId(), 3L, "组队开始扣除保证金 【" + startMoney + "】 派币", startMoney.negate());
});
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 2)); //双方都已确认
}
return R.ok(iPzcActivityGroupApplyService.updateStatus(applyId.longValue(), 9));//发起方确认
}
}
/**
* 同意用户申请 进入下一阶段
* 同意用户申请时 先判断对方是否 处于组队进程
*
*
* -1 已取消 0 位于申请列表中 1 申请通过待确认时
* 2 确认通过进行中 3 组队结束 9发起方已确认
* 10申请方已确认 11 发起方已打卡 12 申请方已打卡
* 13 申请方已评价 14 发起方已评价 15 双方已评价
*
* @return
*/
@PostMapping("/apply")
public R apply(@RequestParam("applyId") Long applyId) {
//首先查询这个组队是否是我发起的
PzcActivityGroupApplyVo pzcActivityGroupApplyVo = iPzcActivityGroupApplyService.queryById(applyId);
if (pzcActivityGroupApplyVo == null) {
return R.fail("申请不存在");
}
Long userId = LoginHelper.getUserId();
PzcUser my = pzcUserMapper.selectById(userId);
Long groupId = pzcActivityGroupApplyVo.getGroupId();
PzcActivityGroupVo pzcActivityGroupVo = iPzcActivityGroupService.queryById(groupId);
if (pzcActivityGroupVo == null) {
return R.fail("组队不存在");
}
if (!pzcActivityGroupVo.getUserId().equals(userId)) {
return R.fail("你不是组队发起人");
}
//判断对方是否 处于 组队进程 如果是 则不可同意
Long applyUserId = pzcActivityGroupApplyVo.getUserId();
//获取活动Id
Long activityId = pzcActivityGroupVo.getActivityId();
//获取活动组队列表 除了自己这个队伍外
List groups = pzcActivityGroupMapper.selectList(new QueryWrapper().eq("activity_id", activityId));
List groupIds = groups.stream().filter(s -> !s.getGroupId().equals(groupId)).map(PzcActivityGroup::getGroupId).collect(Collectors.toList());
if (groupIds.size() != 0) {
//然后获取当前对方申请了几个队伍 判断每个队伍的进程 如果有 进程处于 组队状态中 则不可以同意
List applies = pzcActivityGroupApplyMapper.selectList(new QueryWrapper().in("group_id", groupIds).eq("user_id", applyUserId));
applies.forEach(
a -> {
if (a.getApplyStatus() != 3 && a.getApplyStatus() != 13 && a.getApplyStatus() != 14 && a.getApplyStatus() != 15 && a.getApplyStatus() != -1) {
log.info("对方当前进程为 {} 详细信息为 {}", a.getApplyStatus(), JsonUtils.toJsonString(a));
throw new RuntimeException("该用户已经处于组队进程中 等待对方结束活动再试哦");
}
}
);
}
//判断一下 我是否在当前活动下 有未完成的组队 如果有就不能 同意其他的申请
List applies = pzcActivityGroupApplyMapper.selectList(new QueryWrapper().eq("group_id", groupId).
eq("activity_id", activityId).notIn("apply_status",-1,0,3,13,14,15));
log.info("当前申请人的申请列表为:{}",JSONUtil.toJsonPrettyStr(applies));
if(applies.size()>1)
{
return R.fail("您当前有未完成的组队,无法同意其他申请");
}
//修改状态为 已同意
Integer integer = iPzcActivityGroupApplyService.updateStatus(applyId, 1);
if (integer == null || integer != 1) {
return R.fail("修改状态失败");
}
//给对方发消息 已经同意了对方的申请 请尽快确认
PzcUser otherUser = pzcUserMapper.selectById(applyUserId);
wxUtils.insertPzcOfficialMsg(my.getUserId(), otherUser.getUserId(),"来自" + my.getNickname() + "与您的组队信息:","您的组队申请已经被对方同意,请尽快确认~",groupId,activityId);
try {
// 创建一个任务逻辑,接受参数并在任务执行时使用
ScheduledExecutorUtils.RunnableWithParams task = (params) -> {
System.out.println("Task executed at: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
if (params.length > 0) {
System.out.println("Parameter received: " + params[0]);
}
// 在这里添加你的任务逻辑
PzcActivityGroupApply pzcActivityGroupApply = pzcActivityGroupApplyMapper.selectById((Serializable) params[1]);
log.info("定时任务执行中,当前申请信息为:{}", JsonUtils.toJsonString(pzcActivityGroupApply));
if (pzcActivityGroupApply.getApplyStatus() == 1) {
//如果对方还未确认 则修改状态为 已取消
iPzcActivityGroupApplyService.updateStatus((Long) params[1], -1);
//发起方扣除10派币或者免责取消的一次机会
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
if (pzcUser.getExemptCancel() == 0) {
pzcUser.setMoney(pzcUser.getMoney().subtract(new BigDecimal("10")));
pzcUserMapper.updateById(pzcUser);
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 3L, "组队取消扣除保证金 【10】 派币", new BigDecimal("10").negate());
} else {
pzcUser.setExemptCancel(pzcUser.getExemptCancel() - 1);
pzcUserMapper.updateById(pzcUser);
}
//修改组队状态为已完成
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupVo.getGroupId());
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
//给对方发消息 对方未确认 申请已取消
PzcOfficial pzcOfficial1 = new PzcOfficial();
pzcOfficial1.setIsRead(0L);
PzcUser otherUser1 = pzcUserMapper.selectById(pzcActivityGroupApply.getUserId());
pzcOfficial1.setToUserId(otherUser1.getUserId());
pzcOfficial1.setTitle("派之城官方提醒您:");
pzcOfficial1.setContent("您好,由于对方未确认地址,您的组队已取消。平台已对对方进行相应惩罚。");
pzcOfficial1.setGroupId(groupId);
pzcOfficial1.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial1);
PzcOfficial pzcOfficial2 = new PzcOfficial();
pzcOfficial2.setIsRead(0L);
pzcOfficial2.setToUserId(pzcActivityGroupVo.getUserId());
pzcOfficial2.setTitle("派之城官方提醒您:");
pzcOfficial2.setContent("您好,由于您未进行确认地址,您的组队已取消,平台扣除您一次免责取消机会或10派币。(具体根据您免责机会次数确定)");
pzcOfficial2.setGroupId(groupId);
pzcOfficial2.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial2);
}
if (pzcActivityGroupApply.getApplyStatus() == 9) { //发起方确认了地址 而申请方未确认
//如果对方还未确认 则修改状态为 已取消
iPzcActivityGroupApplyService.updateStatus((Long) params[1], -1);
//申请方扣除10派币或者免责取消的一次机会
PzcUser pzcUser = pzcUserMapper.selectById(pzcActivityGroupApply.getUserId());
if (pzcUser.getExemptCancel() == 0) {
pzcUser.setMoney(pzcUser.getMoney().subtract(new BigDecimal("10")));
pzcUserMapper.updateById(pzcUser);
wxUtils.insertUserHistory(pzcActivityGroupApply.getUserId(), pzcActivityGroupApply.getActivityId(), 3L, "组队取消扣除保证金 【10】 派币", new BigDecimal("10").negate());
} else {
pzcUser.setExemptCancel(pzcUser.getExemptCancel() - 1);
pzcUserMapper.updateById(pzcUser);
}
//修改组队状态为已完成
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupVo.getGroupId());
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
//给对方发消息 对方未确认 申请已取消
PzcOfficial pzcOfficial1 = new PzcOfficial();
pzcOfficial1.setIsRead(0L);
PzcUser otherUser1 = pzcUserMapper.selectById(pzcActivityGroupApply.getUserId()); //申请方
pzcOfficial1.setToUserId(otherUser1.getUserId());
pzcOfficial1.setTitle("派之城官方提醒您:");
pzcOfficial1.setContent("您好,由于您未进行确认地址,您的组队已取消,平台扣除您一次免责取消机会或10派币。(具体根据您免责机会次数确定)");
pzcOfficial1.setGroupId(groupId);
pzcOfficial1.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial1);
PzcOfficial pzcOfficial2 = new PzcOfficial();
pzcOfficial2.setIsRead(0L);
pzcOfficial2.setToUserId(pzcActivityGroupVo.getUserId()); //发起方
pzcOfficial2.setTitle("派之城官方提醒您:");
pzcOfficial2.setContent("您好,由于对方未确认地址,您的组队已取消。平台已对对方进行相应惩罚。");
pzcOfficial2.setGroupId(groupId);
pzcOfficial2.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial2);
}
if (pzcActivityGroupApply.getApplyStatus() == 10) { //申请方确认了地址
//如果对方还未确认 则修改状态为 已取消
iPzcActivityGroupApplyService.updateStatus((Long) params[1], -1);
//修改组队状态为已完成
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupVo.getGroupId());
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
//双方均扣除10派币
PzcUser startUser = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
startUser.setMoney(startUser.getMoney().subtract(new BigDecimal("10")));
pzcUserMapper.updateById(startUser);
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 3L, "组队取消扣除保证金 【10】 派币", new BigDecimal("10").negate());
PzcUser applyUser = pzcUserMapper.selectById(pzcActivityGroupApply.getUserId());
applyUser.setMoney(applyUser.getMoney().subtract(new BigDecimal("10")));
pzcUserMapper.updateById(applyUser);
wxUtils.insertUserHistory(pzcActivityGroupApply.getUserId(), pzcActivityGroupApply.getActivityId(), 3L, "组队取消扣除保证金 【10】 派币", new BigDecimal("10").negate());
}
if (pzcActivityGroupApply.getApplyStatus() == 11 || pzcActivityGroupApply.getApplyStatus() == 12) {
//如果对方还未确认 则修改状态为 已取消
iPzcActivityGroupApplyService.updateStatus((Long) params[1], -1);
//修改组队状态为已完成
PzcActivityGroup pzcActivityGroup = pzcActivityGroupMapper.selectById(pzcActivityGroupVo.getGroupId());
pzcActivityGroup.setStatus(1); //已结束
pzcActivityGroupMapper.updateById(pzcActivityGroup);
if (pzcActivityGroupApply.getApplyStatus() == 11) //发起方打卡了 申请方 全责
{
BigDecimal money = pzcActivityGroupApply.getMoney();
PzcOfficial pzcOfficial1 = new PzcOfficial();
pzcOfficial1.setIsRead(0L);
pzcOfficial1.setFromUserId(null);
pzcOfficial1.setToUserId(pzcActivityGroupApply.getUserId());
pzcOfficial1.setTitle("派之城提醒您:");
pzcOfficial1.setContent("您好,由于您在活动结束前未进行到约定地方打卡签到,平台已对您进行违约处理,已扣除您全部保障金。");
pzcOfficial1.setGroupId(groupId);
pzcOfficial1.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial1);
PzcUser pzcUser1 = pzcUserMapper.selectById(pzcActivityGroupVo.getUserId());
pzcUser1.setMoney(pzcUser1.getMoney().add(pzcActivityGroup.getMoney()).add(money.subtract(new BigDecimal("20"))));
pzcUserMapper.updateById(pzcUser1); //发起方获得申请方 扣除20派币 后的保证金
PzcOfficial pzcOfficial2 = new PzcOfficial();
pzcOfficial2.setIsRead(0L);
pzcOfficial2.setFromUserId(null);
pzcOfficial2.setToUserId(pzcActivityGroupVo.getUserId());
pzcOfficial2.setTitle("派之城提醒您:");
pzcOfficial2.setContent("您好,您在【" + pzcActivityGroupVo.getTitle() + "】组队活动中,由于对方未在活动结束前进行签到打卡,平台已对对方进行违约处理。对方的违约金【" + money.subtract(new BigDecimal("20")) + "】派币已纳入您的账户。您可以再次同意或申请其他用户。");
pzcOfficial2.setGroupId(groupId);
pzcOfficial2.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial2);
wxUtils.insertUserHistory(pzcActivityGroupApply.getUserId(), pzcActivityGroupApply.getActivityId(), 3L, "活动时间到 自动取消组队 扣除保证金 【" + money + "】 派币", money.negate());
}
if (pzcActivityGroupApply.getApplyStatus() == 12) //申请方打卡了 发起方 全责
{
BigDecimal money = pzcActivityGroupVo.getMoney();
PzcOfficial pzcOfficial1 = new PzcOfficial();
pzcOfficial1.setIsRead(0L);
pzcOfficial1.setFromUserId(null);
pzcOfficial1.setToUserId(pzcActivityGroupVo.getUserId());
pzcOfficial1.setTitle("派之城提醒您:");
pzcOfficial1.setContent("您好,由于您在活动结束前未进行到约定地方打卡签到,平台已对您进行违约处理,已扣除您全部保障金。");
pzcOfficial1.setGroupId(groupId);
pzcOfficial1.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial1);
PzcUser pzcUser1 = pzcUserMapper.selectById(pzcActivityGroupApply.getUserId());
pzcUser1.setMoney(pzcUser1.getMoney().add(pzcActivityGroupApply.getMoney()).add(money.subtract(new BigDecimal("20"))));
pzcUserMapper.updateById(pzcUser1); //申请方获得发起方 扣除20派币 后的保证金
PzcOfficial pzcOfficial2 = new PzcOfficial();
pzcOfficial2.setIsRead(0L);
pzcOfficial2.setFromUserId(null);
pzcOfficial2.setToUserId(pzcActivityGroupApply.getUserId());
pzcOfficial2.setTitle("派之城提醒您:");
pzcOfficial2.setContent("您好,您在【" + pzcActivityGroupVo.getTitle() + "】组队活动中,由于对方未在活动结束前进行签到打卡,平台已对对方进行违约处理。对方的违约金【" + money.subtract(new BigDecimal("20")) + "】派币已纳入您的账户。您可以再次同意或申请其他用户。");
pzcOfficial2.setGroupId(groupId);
pzcOfficial2.setActivityId(activityId);
pzcOfficialMapper.insert(pzcOfficial2);
wxUtils.insertUserHistory(pzcActivityGroupVo.getUserId(), pzcActivityGroupVo.getActivityId(), 3L, "活动时间到 自动取消组队 扣除保证金 【" + money + "】 派币", money.negate());
}
}
};
ScheduledExecutorUtils.scheduleTask(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(pzcActivityGroupVo.getActivityTime()), task, groupId, applyId);
} catch (ParseException e) {
log.info("创建定时任务失败,活动信息为 {}", JsonUtils.toJsonString(pzcActivityGroupVo));
}
return R.ok();
}
/**
* 查询活动组队列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcActivityGroupBo bo, PageQuery pageQuery) {
log.info("组队大厅 查询条件是: {}", JsonUtils.toJsonString(bo));
return iPzcActivityGroupService.queryPageList(bo, pageQuery);
}
/**
* 导出活动组队列表
*/
@SaCheckPermission("system:activityGroup:export")
@Log(title = "活动组队", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcActivityGroupBo bo, HttpServletResponse response) {
List list = iPzcActivityGroupService.queryList(bo);
ExcelUtil.exportExcel(list, "活动组队", PzcActivityGroupVo.class, response);
}
/**
* 获取活动组队详细信息
*
* @param groupId 主键
*/
@GetMapping("/{groupId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long groupId) {
return R.ok(iPzcActivityGroupService.queryById(groupId));
}
@Autowired
private PzcRegionMapper pzcRegionMapper;
/**
* 发起活动组队
*/
@Log(title = "活动组队", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcActivityGroupBo bo) {
Long userId = LoginHelper.getUserId();
bo.setUserId(userId);
wxUtils.checkMgc(bo.getTitle());//校验敏感词
//校验活动是否存在
if (!iPzcActivityGroupService.checkActivity(bo.getActivityId()) && bo.getActivityId() != 0) { //如果不是城市活动 并且活动id不为0 则校验活动是否存在
return R.fail("活动不存在");
}
PzcRegion pzcRegion = pzcRegionMapper.selectById(bo.getRegion());
//校验城市是否存在 只对派对生效
if (pzcRegion == null && pzcActivityMapper.selectById(bo.getActivityId()).getClassify() != 0) {
log.info("传入的城市Id is {} ", bo.getRegion());
return R.fail("当前城市不存在");
}
if(bo.getMoney().compareTo(new BigDecimal(99))<0)
{
return R.fail("派币保证金至少为99");
}
//检验自己是否已经在此城市里发起过组队
if (bo.getActivityId() == 0) {
//如果是城市活动 则校验是否已经发起过组队
List groups = pzcActivityGroupMapper.selectList(new QueryWrapper().
eq("user_id", userId).eq("activity_id", 0).eq("region", bo.getRegion()).eq("status", 0));
if (groups.size() != 0) {
log.info("用户id为:{} 在城市id为:{} 发起过组队 {}", userId, bo.getRegion(), JsonUtils.toJsonString(groups));
return R.fail("您已经在此城市发起过组队了");
}
bo.setActivityName("【" + pzcRegion.getName() + "】");
} else {
//如果是活动 则校验是否已经发起过组队 //并且状态不为已结束
List groups = pzcActivityGroupMapper.selectList(new QueryWrapper().eq("user_id", userId).eq("activity_id", bo.getActivityId()).eq("status", 0));
if (groups.size() != 0) {
log.info("用户id为:{} 在活动id为:{} 发起过组队 {}", userId, bo.getActivityId(), JsonUtils.toJsonString(groups));
return R.fail("您已经在此活动发起过组队了");
}
bo.setActivityName(pzcActivityMapper.selectById(bo.getActivityId()).getTitle());
}
// 校验保证金
PzcUser pzcUser = pzcUserMapper.selectById(userId);
if (pzcUser.getMoney().compareTo(bo.getMoney()) < 0 || bo.getMoney().compareTo(new BigDecimal(99)) < 0) {
return R.fail("保证金不足 至少拥有99个派币");
}
return toAjax(iPzcActivityGroupService.insertByBo(bo));
}
/**
* 修改活动组队
*/
@Log(title = "活动组队", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcActivityGroupBo bo) {
bo.setUserId(LoginHelper.getUserId());
if(bo.getMoney().compareTo(new BigDecimal(99))<0)
{
return R.fail("保证金至少为99派币");
}
//判断是否在组队进程中 判断组队状态
//获取我的申请列表
List applies = pzcActivityGroupApplyMapper.selectList(new QueryWrapper().eq("group_id", bo.getGroupId()));
//判断是否有正在进行中的订单
applies.forEach(
a -> {
if (a.getApplyStatus() != -1 && a.getApplyStatus() != 0 && a.getApplyStatus() != 1) {
throw new RuntimeException("当前活动处于" + wxUtils.applyStatus(a.getApplyStatus()) + " 无法修改");
}
}
);
return toAjax(iPzcActivityGroupService.updateByBo(bo));
}
/**
* 删除活动组队
*
* @param groupIds 主键串
*/
@SaCheckPermission("system:activityGroup:remove")
@Log(title = "活动组队", businessType = BusinessType.DELETE)
@DeleteMapping("/{groupIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] groupIds) {
return toAjax(iPzcActivityGroupService.deleteWithValidByIds(Arrays.asList(groupIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcArtistController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcArtistVo;
import top.flya.system.domain.bo.PzcArtistBo;
import top.flya.system.service.IPzcArtistService;
import top.flya.common.core.page.TableDataInfo;
/**
* 艺人
*
* @author flya
* @date 2023-06-01
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/artist")
public class PzcArtistController extends BaseController {
private final IPzcArtistService iPzcArtistService;
/**
* 查询艺人列表
*/
@SaCheckPermission("system:artist:list")
@GetMapping("/list")
public TableDataInfo list(PzcArtistBo bo, PageQuery pageQuery) {
return iPzcArtistService.queryPageList(bo, pageQuery);
}
/**
* 导出艺人列表
*/
@SaCheckPermission("system:artist:export")
@Log(title = "艺人", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcArtistBo bo, HttpServletResponse response) {
List list = iPzcArtistService.queryList(bo);
ExcelUtil.exportExcel(list, "艺人", PzcArtistVo.class, response);
}
/**
* 获取艺人详细信息
*
* @param artistId 主键
*/
@SaCheckPermission("system:artist:query")
@GetMapping("/{artistId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long artistId) {
return R.ok(iPzcArtistService.queryById(artistId));
}
/**
* 新增艺人
*/
@SaCheckPermission("system:artist:add")
@Log(title = "艺人", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcArtistBo bo) {
return toAjax(iPzcArtistService.insertByBo(bo));
}
/**
* 修改艺人
*/
@SaCheckPermission("system:artist:edit")
@Log(title = "艺人", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcArtistBo bo) {
return toAjax(iPzcArtistService.updateByBo(bo));
}
/**
* 删除艺人
*
* @param artistIds 主键串
*/
@SaCheckPermission("system:artist:remove")
@Log(title = "艺人", businessType = BusinessType.DELETE)
@DeleteMapping("/{artistIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] artistIds) {
return toAjax(iPzcArtistService.deleteWithValidByIds(Arrays.asList(artistIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcIntroController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.JsonUtils;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcIntroBo;
import top.flya.system.domain.vo.PzcIntroVo;
import top.flya.system.service.IPzcIntroService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 活动介绍
*
* @author ruoyi
* @date 2023-08-04
*/
@Validated
@RequiredArgsConstructor
@RestController
@Slf4j
@RequestMapping("/system/intro")
public class PzcIntroController extends BaseController {
private final IPzcIntroService iPzcIntroService;
/**
* 查询活动介绍列表
*/
@SaCheckPermission("system:intro:list")
@GetMapping("/list")
public TableDataInfo list(PzcIntroBo bo, PageQuery pageQuery) {
return iPzcIntroService.queryPageList(bo, pageQuery);
}
/**
* 导出活动介绍列表
*/
@SaCheckPermission("system:intro:export")
@Log(title = "活动介绍", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcIntroBo bo, HttpServletResponse response) {
List list = iPzcIntroService.queryList(bo);
ExcelUtil.exportExcel(list, "活动介绍", PzcIntroVo.class, response);
}
/**
* 获取活动介绍详细信息
*
* @param introId 主键
*/
@SaCheckPermission("system:intro:query")
@GetMapping("/{introId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long introId) {
return R.ok(iPzcIntroService.queryById(introId));
}
/**
* 新增活动介绍
*/
@SaCheckPermission("system:intro:add")
@Log(title = "活动介绍", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcIntroBo bo) {
return toAjax(iPzcIntroService.insertByBo(bo));
}
/**
* 修改活动介绍
*/
@SaCheckPermission("system:intro:edit")
@Log(title = "活动介绍", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcIntroBo bo) {
log.info("bo:{}", JsonUtils.toJsonString(bo));
return toAjax(iPzcIntroService.updateByBo(bo));
}
/**
* 删除活动介绍
*
* @param introIds 主键串
*/
@SaCheckPermission("system:intro:remove")
@Log(title = "活动介绍", businessType = BusinessType.DELETE)
@DeleteMapping("/{introIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] introIds) {
return toAjax(iPzcIntroService.deleteWithValidByIds(Arrays.asList(introIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcOfficialController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcOfficialBo;
import top.flya.system.domain.vo.PzcOfficialVo;
import top.flya.system.service.IPzcOfficialService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 官方消息
*
* @author ruoyi
* @date 2023-07-27
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/official")
public class PzcOfficialController extends BaseController {
private final IPzcOfficialService iPzcOfficialService;
/**
* 查询官方 未读消息列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcOfficialBo bo, PageQuery pageQuery) {
bo.setToUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("create_time");
pageQuery.setIsAsc("desc");
return iPzcOfficialService.queryPageList(bo, pageQuery);
}
/**
* 已读消息
* 如果officialId为空,则表示全部已读
* @param officialId
* @return
*/
@PostMapping("/read")
public R read(@RequestParam(value = "officialId",required = false) Integer officialId) {
return R.ok(iPzcOfficialService.read(officialId));
}
/**
* 导出官方消息列表
*/
@SaCheckPermission("system:official:export")
@Log(title = "官方消息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcOfficialBo bo, HttpServletResponse response) {
List list = iPzcOfficialService.queryList(bo);
ExcelUtil.exportExcel(list, "官方消息", PzcOfficialVo.class, response);
}
/**
* 获取官方消息详细信息
*
* @param officialId 主键
*/
@SaCheckPermission("system:official:query")
@GetMapping("/{officialId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long officialId) {
return R.ok(iPzcOfficialService.queryById(officialId));
}
/**
* 新增官方消息
*/
@SaCheckPermission("system:official:add")
@Log(title = "官方消息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcOfficialBo bo) {
return toAjax(iPzcOfficialService.insertByBo(bo));
}
/**
* 修改官方消息
*/
@SaCheckPermission("system:official:edit")
@Log(title = "官方消息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcOfficialBo bo) {
return toAjax(iPzcOfficialService.updateByBo(bo));
}
/**
* 删除官方消息
*
* @param officialIds 主键串
*/
@SaCheckPermission("system:official:remove")
@Log(title = "官方消息", businessType = BusinessType.DELETE)
@DeleteMapping("/{officialIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] officialIds) {
return toAjax(iPzcOfficialService.deleteWithValidByIds(Arrays.asList(officialIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcOrderController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcOrderVo;
import top.flya.system.domain.bo.PzcOrderBo;
import top.flya.system.service.IPzcOrderService;
import top.flya.common.core.page.TableDataInfo;
/**
* 订单
*
* @author ruoyi
* @date 2023-07-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/pzc_order")
public class PzcOrderController extends BaseController {
private final IPzcOrderService iPzcOrderService;
/**
* 查询订单列表
*/
@SaCheckPermission("system:pzc_order:list")
@GetMapping("/list")
public TableDataInfo list(PzcOrderBo bo, PageQuery pageQuery) {
return iPzcOrderService.queryPageList(bo, pageQuery);
}
/**
* 导出订单列表
*/
@SaCheckPermission("system:pzc_order:export")
@Log(title = "订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcOrderBo bo, HttpServletResponse response) {
List list = iPzcOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "订单", PzcOrderVo.class, response);
}
/**
* 获取订单详细信息
*
* @param orderId 主键
*/
@SaCheckPermission("system:pzc_order:query")
@GetMapping("/{orderId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long orderId) {
return R.ok(iPzcOrderService.queryById(orderId));
}
/**
* 新增订单
*/
@SaCheckPermission("system:pzc_order:add")
@Log(title = "订单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcOrderBo bo) {
return toAjax(iPzcOrderService.insertByBo(bo));
}
/**
* 修改订单
*/
@SaCheckPermission("system:pzc_order:edit")
@Log(title = "订单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcOrderBo bo) {
return toAjax(iPzcOrderService.updateByBo(bo));
}
/**
* 删除订单
*
* @param orderIds 主键串
*/
@SaCheckPermission("system:pzc_order:remove")
@Log(title = "订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{orderIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] orderIds) {
return toAjax(iPzcOrderService.deleteWithValidByIds(Arrays.asList(orderIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcOrganizerController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcOrganizerVo;
import top.flya.system.domain.bo.PzcOrganizerBo;
import top.flya.system.service.IPzcOrganizerService;
import top.flya.common.core.page.TableDataInfo;
/**
* 活动主办方
*
* @author ruoyi
* @date 2023-06-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/organizer")
public class PzcOrganizerController extends BaseController {
private final IPzcOrganizerService iPzcOrganizerService;
/**
* 查询活动主办方列表
*/
@SaCheckPermission("system:organizer:list")
@GetMapping("/list")
public TableDataInfo list(PzcOrganizerBo bo, PageQuery pageQuery) {
return iPzcOrganizerService.queryPageList(bo, pageQuery);
}
/**
* 导出活动主办方列表
*/
@SaCheckPermission("system:organizer:export")
@Log(title = "活动主办方", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcOrganizerBo bo, HttpServletResponse response) {
List list = iPzcOrganizerService.queryList(bo);
ExcelUtil.exportExcel(list, "活动主办方", PzcOrganizerVo.class, response);
}
/**
* 获取活动主办方详细信息
*
* @param organizerId 主键
*/
@SaCheckPermission("system:organizer:query")
@GetMapping("/{organizerId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long organizerId) {
return R.ok(iPzcOrganizerService.queryById(organizerId));
}
/**
* 新增活动主办方
*/
@SaCheckPermission("system:organizer:add")
@Log(title = "活动主办方", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcOrganizerBo bo) {
return toAjax(iPzcOrganizerService.insertByBo(bo));
}
/**
* 修改活动主办方
*/
@SaCheckPermission("system:organizer:edit")
@Log(title = "活动主办方", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcOrganizerBo bo) {
return toAjax(iPzcOrganizerService.updateByBo(bo));
}
/**
* 删除活动主办方
*
* @param organizerIds 主键串
*/
@SaCheckPermission("system:organizer:remove")
@Log(title = "活动主办方", businessType = BusinessType.DELETE)
@DeleteMapping("/{organizerIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] organizerIds) {
return toAjax(iPzcOrganizerService.deleteWithValidByIds(Arrays.asList(organizerIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcOrganizerTicketController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcOrganizerTicketVo;
import top.flya.system.domain.bo.PzcOrganizerTicketBo;
import top.flya.system.service.IPzcOrganizerTicketService;
import top.flya.common.core.page.TableDataInfo;
/**
* 主办方票务
*
* @author ruoyi
* @date 2023-07-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/organizerTicket")
public class PzcOrganizerTicketController extends BaseController {
private final IPzcOrganizerTicketService iPzcOrganizerTicketService;
/**
* 查询主办方票务列表
*/
@SaCheckPermission("system:organizerTicket:list")
@GetMapping("/list")
public TableDataInfo list(PzcOrganizerTicketBo bo, PageQuery pageQuery) {
return iPzcOrganizerTicketService.queryPageList(bo, pageQuery);
}
/**
* 导出主办方票务列表
*/
@SaCheckPermission("system:organizerTicket:export")
@Log(title = "主办方票务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcOrganizerTicketBo bo, HttpServletResponse response) {
List list = iPzcOrganizerTicketService.queryList(bo);
ExcelUtil.exportExcel(list, "主办方票务", PzcOrganizerTicketVo.class, response);
}
/**
* 获取主办方票务详细信息
*
* @param organizerTicketId 主键
*/
@SaCheckPermission("system:organizerTicket:query")
@GetMapping("/{organizerTicketId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long organizerTicketId) {
return R.ok(iPzcOrganizerTicketService.queryById(organizerTicketId));
}
/**
* 新增主办方票务
*/
@SaCheckPermission("system:organizerTicket:add")
@Log(title = "主办方票务", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcOrganizerTicketBo bo) {
return toAjax(iPzcOrganizerTicketService.insertByBo(bo));
}
/**
* 修改主办方票务
*/
@SaCheckPermission("system:organizerTicket:edit")
@Log(title = "主办方票务", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcOrganizerTicketBo bo) {
return toAjax(iPzcOrganizerTicketService.updateByBo(bo));
}
/**
* 删除主办方票务
*
* @param organizerTicketIds 主键串
*/
@SaCheckPermission("system:organizerTicket:remove")
@Log(title = "主办方票务", businessType = BusinessType.DELETE)
@DeleteMapping("/{organizerTicketIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] organizerTicketIds) {
return toAjax(iPzcOrganizerTicketService.deleteWithValidByIds(Arrays.asList(organizerTicketIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcRegionController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcRegionBo;
import top.flya.system.domain.vo.PzcRegionVo;
import top.flya.system.mapper.RegionTreeMapper;
import top.flya.system.service.IPzcRegionService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 地区
*
* @author ruoyi
* @date 2023-07-22
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/region")
public class PzcRegionController extends BaseController {
private final IPzcRegionService iPzcRegionService;
private final RegionTreeMapper regionTreeMapper;
// /**
// * 查询地区列表
// */
// @SaCheckPermission("system:region:list")
// @GetMapping("/list")
// public TableDataInfo list(PzcRegionBo bo, PageQuery pageQuery) {
// return iPzcRegionService.queryPageList(bo, pageQuery);
// }
@GetMapping("/list")
public R list(@RequestParam(required = false) String regionName) {
PzcRegionBo bo = new PzcRegionBo();
bo.setName(regionName);
List pzcRegionVos = iPzcRegionService.queryList(bo);
//根据 pzcRegionVos 生成树形结构 base 字段相同的为同一级
return R.ok(regionTreeMapper.buildTree(pzcRegionVos));
}
/**
* 导出地区列表
*/
@SaCheckPermission("system:region:export")
@Log(title = "地区", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcRegionBo bo, HttpServletResponse response) {
List list = iPzcRegionService.queryList(bo);
ExcelUtil.exportExcel(list, "地区", PzcRegionVo.class, response);
}
/**
* 获取地区详细信息
*
* @param regionId 主键
*/
@SaCheckPermission("system:region:query")
@GetMapping("/{regionId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long regionId) {
return R.ok(iPzcRegionService.queryById(regionId));
}
/**
* 新增地区
*/
@SaCheckPermission("system:region:add")
@Log(title = "地区", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcRegionBo bo) {
return toAjax(iPzcRegionService.insertByBo(bo));
}
/**
* 修改地区
*/
@SaCheckPermission("system:region:edit")
@Log(title = "地区", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcRegionBo bo) {
return toAjax(iPzcRegionService.updateByBo(bo));
}
/**
* 删除地区
*
* @param regionIds 主键串
*/
@SaCheckPermission("system:region:remove")
@Log(title = "地区", businessType = BusinessType.DELETE)
@DeleteMapping("/{regionIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] regionIds) {
return toAjax(iPzcRegionService.deleteWithValidByIds(Arrays.asList(regionIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcTagController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcTagVo;
import top.flya.system.domain.bo.PzcTagBo;
import top.flya.system.service.IPzcTagService;
import top.flya.common.core.page.TableDataInfo;
/**
* 活动标签
*
* @author ruoyi
* @date 2023-06-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/tag")
public class PzcTagController extends BaseController {
private final IPzcTagService iPzcTagService;
/**
* 查询活动标签列表
*/
@SaCheckPermission("system:tag:list")
@GetMapping("/list")
public TableDataInfo list(PzcTagBo bo, PageQuery pageQuery) {
return iPzcTagService.queryPageList(bo, pageQuery);
}
/**
* 导出活动标签列表
*/
@SaCheckPermission("system:tag:export")
@Log(title = "活动标签", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcTagBo bo, HttpServletResponse response) {
List list = iPzcTagService.queryList(bo);
ExcelUtil.exportExcel(list, "活动标签", PzcTagVo.class, response);
}
/**
* 获取活动标签详细信息
*
* @param tagId 主键
*/
@SaCheckPermission("system:tag:query")
@GetMapping("/{tagId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long tagId) {
return R.ok(iPzcTagService.queryById(tagId));
}
/**
* 新增活动标签
*/
@SaCheckPermission("system:tag:add")
@Log(title = "活动标签", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcTagBo bo) {
return toAjax(iPzcTagService.insertByBo(bo));
}
/**
* 修改活动标签
*/
@SaCheckPermission("system:tag:edit")
@Log(title = "活动标签", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcTagBo bo) {
return toAjax(iPzcTagService.updateByBo(bo));
}
/**
* 删除活动标签
*
* @param tagIds 主键串
*/
@SaCheckPermission("system:tag:remove")
@Log(title = "活动标签", businessType = BusinessType.DELETE)
@DeleteMapping("/{tagIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] tagIds) {
return toAjax(iPzcTagService.deleteWithValidByIds(Arrays.asList(tagIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcUserCollectController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.JsonUtils;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.common.BatchUtils;
import top.flya.system.domain.PzcActivity;
import top.flya.system.domain.bo.PzcUserCollectBo;
import top.flya.system.domain.vo.PzcUserCollectVo;
import top.flya.system.mapper.PzcActivityMapper;
import top.flya.system.service.IPzcUserCollectService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import java.util.*;
/**
* 用户收藏活动
*
* @author ruoyi
* @date 2023-07-08
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userCollect")
@Slf4j
public class PzcUserCollectController extends BaseController {
private final IPzcUserCollectService iPzcUserCollectService;
private final PzcActivityMapper pzcActivityMapper;
private final StringRedisTemplate stringRedisTemplate;
private final BatchUtils batchUtils;
/**
* 查询用户收藏活动列表
*/
@GetMapping("/list")
public R> list(PzcUserCollectBo bo, PageQuery pageQuery) {
Set members = stringRedisTemplate.opsForSet().members("collect:" + getUserId());
if(members==null||members.isEmpty())
{
return R.ok();
}
List collect = new ArrayList<>(members);
List pzcActivities = pzcActivityMapper.selectActivityByActivityIds(collect, bo.getType());
log.info("用户收藏活动列表 {}", JsonUtils.toJsonString(pzcActivities));
pzcActivities.stream().forEach(
pzcActivity -> {
pzcActivity.setCoverImage(pzcActivity.getCoverImage().contains("http")?pzcActivity.getCoverImage():
(batchUtils.getNewImageUrls(Collections.singletonList(pzcActivity.getCoverImage())).get(Long.parseLong((pzcActivity.getCoverImage())))));
}
);
return R.ok(pzcActivities);
}
/**
* 导出用户收藏活动列表
*/
@SaCheckPermission("system:userCollect:export")
@Log(title = "用户收藏活动", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcUserCollectBo bo, HttpServletResponse response) {
List list = iPzcUserCollectService.queryList(bo);
ExcelUtil.exportExcel(list, "用户收藏活动", PzcUserCollectVo.class, response);
}
/**
* 获取用户收藏活动详细信息
*
* @param collectId 主键
*/
@GetMapping("/{collectId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long collectId) {
return R.ok(iPzcUserCollectService.queryById(collectId));
}
@GetMapping("/status")
public R status(@RequestParam("activityId") Long activityId) {
return R.ok(Boolean.TRUE.equals(stringRedisTemplate.opsForSet().isMember("collect:" + getUserId(), activityId.toString())));
}
/**
* 新增用户收藏活动 这里改为存入Redis 加快响应速度
*/
@Log(title = "用户收藏/取消活动", businessType = BusinessType.INSERT)
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcUserCollectBo bo) {
log.info("用户收藏/取消活动 {}", JsonUtils.toJsonString(bo));
if(Boolean.TRUE.equals(stringRedisTemplate.opsForSet().isMember("collect:" + getUserId(), bo.getActivityId().toString())))
{
//取消收藏活动
stringRedisTemplate.opsForSet().remove("collect:" + getUserId(),bo.getActivityId().toString());
}else {
stringRedisTemplate.opsForSet().add("collect:" + getUserId(),bo.getActivityId().toString());
}
return R.ok("1");
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcUserController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcUserBo;
import top.flya.system.domain.bo.UpdateMoneyBo;
import top.flya.system.domain.vo.PzcUserVo;
import top.flya.system.service.IPzcUserService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 用户
*
* @author ruoyi
* @date 2023-07-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/pzc_user")
public class PzcUserController extends BaseController {
private final IPzcUserService iPzcUserService;
/**
* 查询用户列表
*/
@SaCheckPermission("system:pzc_user:list")
@GetMapping("/list")
public TableDataInfo list(PzcUserBo bo, PageQuery pageQuery) {
return iPzcUserService.queryPageList(bo, pageQuery);
}
/**
* 导出用户列表
*/
@SaCheckPermission("system:pzc_user:export")
@Log(title = "用户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcUserBo bo, HttpServletResponse response) {
List list = iPzcUserService.queryList(bo);
ExcelUtil.exportExcel(list, "用户", PzcUserVo.class, response);
}
/**
* 获取用户详细信息
*
* @param userId 主键
*/
@SaCheckPermission("system:pzc_user:query")
@GetMapping("/{userId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long userId) {
return R.ok(iPzcUserService.queryById(userId));
}
/**
* 新增用户
*/
@SaCheckPermission("system:pzc_user:add")
@Log(title = "用户", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcUserBo bo) {
return toAjax(iPzcUserService.insertByBo(bo));
}
@PostMapping("/updateMoney")
public R updateMoney(@Validated(AddGroup.class) @RequestBody UpdateMoneyBo bo) {
return toAjax(iPzcUserService.updateMoney(bo));
}
/**
* 修改用户
*/
@SaCheckPermission("system:pzc_user:edit")
@Log(title = "用户", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcUserBo bo) {
return toAjax(iPzcUserService.updateByBo(bo));
}
/**
* 删除用户
*
* @param userIds 主键串
*/
@SaCheckPermission("system:pzc_user:remove")
@Log(title = "用户", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] userIds) {
return toAjax(iPzcUserService.deleteWithValidByIds(Arrays.asList(userIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcUserHistoryController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcUserHistoryBo;
import top.flya.system.domain.vo.PzcUserHistoryVo;
import top.flya.system.service.IPzcUserHistoryService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 用户操作历史记录
*
* @author ruoyi
* @date 2023-07-06
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userHistory")
public class PzcUserHistoryController extends BaseController {
private final IPzcUserHistoryService iPzcUserHistoryService;
/**
* 查询用户操作历史记录列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcUserHistoryBo bo, PageQuery pageQuery) {
bo.setUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("create_time");
pageQuery.setIsAsc("desc");
return iPzcUserHistoryService.queryPageList(bo, pageQuery);
}
/**
* 导出用户操作历史记录列表
*/
@SaCheckPermission("system:userHistory:export")
@Log(title = "用户操作历史记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcUserHistoryBo bo, HttpServletResponse response) {
List list = iPzcUserHistoryService.queryList(bo);
ExcelUtil.exportExcel(list, "用户操作历史记录", PzcUserHistoryVo.class, response);
}
/**
* 获取用户操作历史记录详细信息
*
* @param historyId 主键
*/
@SaCheckPermission("system:userHistory:query")
@GetMapping("/{historyId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long historyId) {
return R.ok(iPzcUserHistoryService.queryById(historyId));
}
/**
* 新增用户操作历史记录
*/
@SaCheckPermission("system:userHistory:add")
@Log(title = "用户操作历史记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcUserHistoryBo bo) {
return toAjax(iPzcUserHistoryService.insertByBo(bo));
}
/**
* 修改用户操作历史记录
*/
@SaCheckPermission("system:userHistory:edit")
@Log(title = "用户操作历史记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcUserHistoryBo bo) {
return toAjax(iPzcUserHistoryService.updateByBo(bo));
}
/**
* 删除用户操作历史记录
*
* @param historyIds 主键串
*/
@SaCheckPermission("system:userHistory:remove")
@Log(title = "用户操作历史记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{historyIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] historyIds) {
return toAjax(iPzcUserHistoryService.deleteWithValidByIds(Arrays.asList(historyIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcUserPhotoController.java
================================================
package top.flya.system.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.annotation.Log;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.vo.PzcUserPhotoVo;
import top.flya.system.domain.bo.PzcUserPhotoBo;
import top.flya.system.service.IPzcUserPhotoService;
import top.flya.common.core.page.TableDataInfo;
/**
* 用户资料相册
*
* @author ruoyi
* @date 2023-07-11
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userPhoto")
public class PzcUserPhotoController extends BaseController {
private final IPzcUserPhotoService iPzcUserPhotoService;
/**
* 查询用户资料相册列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcUserPhotoBo bo, PageQuery pageQuery) {
if(bo.getUserId()==null)
{
bo.setUserId(LoginHelper.getUserId());
}
return iPzcUserPhotoService.queryPageList(bo, pageQuery);
}
/**
* 导出用户资料相册列表
*/
@Log(title = "用户资料相册", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcUserPhotoBo bo, HttpServletResponse response) {
List list = iPzcUserPhotoService.queryList(bo);
ExcelUtil.exportExcel(list, "用户资料相册", PzcUserPhotoVo.class, response);
}
/**
* 获取用户资料相册详细信息
*
* @param photoId 主键
*/
@GetMapping("/{photoId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long photoId) {
return R.ok(iPzcUserPhotoService.queryById(photoId));
}
/**
* 新增用户资料相册
*/
@Log(title = "用户资料相册", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcUserPhotoBo bo) {
bo.setUserId(LoginHelper.getUserId());
return toAjax(iPzcUserPhotoService.insertByBo(bo));
}
/**
* 修改用户资料相册
*/
@Log(title = "用户资料相册", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcUserPhotoBo bo) {
return toAjax(iPzcUserPhotoService.updateByBo(bo));
}
/**
* 删除用户资料相册
*
* @param photoIds 主键串
*/
@Log(title = "用户资料相册", businessType = BusinessType.DELETE)
@DeleteMapping("/{photoIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] photoIds) {
return toAjax(iPzcUserPhotoService.deleteWithValidByIds(Arrays.asList(photoIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcUserTalkController.java
================================================
package top.flya.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.JsonUtils;
import top.flya.system.domain.PzcUser;
import top.flya.system.domain.PzcUserTalk;
import top.flya.system.domain.bo.PzcUserTalkBo;
import top.flya.system.domain.vo.PzcUserTalkVo;
import top.flya.system.mapper.PzcUserMapper;
import top.flya.system.mapper.PzcUserPhotoMapper;
import top.flya.system.mapper.PzcUserTalkMapper;
import top.flya.system.service.IPzcUserTalkService;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static top.flya.system.config.ClientCache.concurrentHashMap;
/**
* 用户聊天
*
* @author ruoyi
* @date 2023-07-14
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userTalk")
@Slf4j
public class PzcUserTalkController extends BaseController {
private final IPzcUserTalkService iPzcUserTalkService;
private final PzcUserTalkMapper pzcUserTalkMapper;
private final PzcUserMapper pzcUserMapper;
private final PzcUserPhotoMapper pzcUserPhotoMapper;
@PostMapping("/deleteByUserId") //删除聊天记录
public R deleteByUserId(@RequestParam("userId") String userId, @RequestParam("groupId") Long groupId) {
Long my = LoginHelper.getUserId();
pzcUserTalkMapper.delete(new QueryWrapper().
eq("group_id", groupId).
and(
i -> i.eq("user_id", my).
eq("from_user_id", userId).or().
eq("user_id", my).eq("to_user_id", userId)));
return R.ok();
}
/**
* 用户在线状态
*
* @param userId
* @return
*/
@GetMapping("/live")
public R liveStatus(@RequestParam("userId") String userId) {
Boolean liveStatus = false;
if (concurrentHashMap.get(userId) != null) {
liveStatus = true;
}
PzcUser pzcUser = pzcUserMapper.selectById(userId);
Map result = new java.util.HashMap<>();
result.put("liveStatus", liveStatus.toString());
result.put("userId", userId);
result.put("nickName", pzcUser.getNickname());
result.put("address", pzcUser.getAddress());
result.put("sex", String.valueOf(pzcUser.getSex()));
result.put("info", pzcUser.getIntro());
result.put("avatar", pzcUser.getAvatar());
result.put("age", pzcUser.getAge());
result.put("level", pzcUser.getUserLevel());
// 查询用户相册
result.put("photo", pzcUserPhotoMapper.selectList(new QueryWrapper().eq("user_id", userId)).stream().map(top.flya.system.domain.PzcUserPhoto::getUrl).collect(Collectors.toList()));
return R.ok(result);
}
/**
* 一键已读
*
* @param userId
* @return
*/
@PostMapping("/read")
public R read(@RequestParam("userId") String userId) {
List pzcUserTalks = pzcUserTalkMapper.selectList(new QueryWrapper().eq("from_user_id", userId).eq("to_user_id", LoginHelper.getUserId())).stream()
.filter(pzcUserTalk -> pzcUserTalk.getMessageStatus() == 0)
.peek(pzcUserTalk -> pzcUserTalk.setMessageStatus(1L))
.collect(Collectors.toList());
log.info("pzcUserTalks:{}", JsonUtils.toJsonString(pzcUserTalks));
if (pzcUserTalks.size() == 0) {
return R.ok(true);
}
boolean b = pzcUserTalkMapper.updateBatchById(pzcUserTalks);
return R.ok(b);
}
/**
* 我的聊天列表
*
* 1. 按照 最后聊天的时间倒序排列
* 2. 展示 最新一条聊天记录 以及未读消息条数
*/
@GetMapping("/myList")
public TableDataInfo myList(PzcUserTalkBo bo, PageQuery pageQuery) {
return iPzcUserTalkService.queryMyPageList(bo, pageQuery);
}
/**
* 查询用户聊天列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcUserTalkBo bo, PageQuery pageQuery) {
bo.setFromUserId(LoginHelper.getUserId());
bo.setUserId(LoginHelper.getUserId());
pageQuery.setIsAsc("desc");
pageQuery.setOrderByColumn("create_time");
return iPzcUserTalkService.queryPageList(bo, pageQuery);
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/PzcViewPagerController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.annotation.Log;
import top.flya.common.annotation.RepeatSubmit;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.PageQuery;
import top.flya.common.core.domain.R;
import top.flya.common.core.page.TableDataInfo;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.common.enums.BusinessType;
import top.flya.common.utils.poi.ExcelUtil;
import top.flya.system.domain.bo.PzcViewPagerBo;
import top.flya.system.domain.vo.PzcViewPagerVo;
import top.flya.system.service.IPzcViewPagerService;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 轮播图
*
* @author ruoyi
* @date 2023-05-23
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/viewPager")
public class PzcViewPagerController extends BaseController {
private final IPzcViewPagerService iPzcViewPagerService;
/**
* 查询轮播图列表
*/
@GetMapping("/list")
public TableDataInfo list(PzcViewPagerBo bo, PageQuery pageQuery) {
return iPzcViewPagerService.queryPageList(bo, pageQuery);
}
/**
* 导出轮播图列表
*/
@SaCheckPermission("system:viewPager:export")
@Log(title = "轮播图", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PzcViewPagerBo bo, HttpServletResponse response) {
List list = iPzcViewPagerService.queryList(bo);
ExcelUtil.exportExcel(list, "轮播图", PzcViewPagerVo.class, response);
}
/**
* 获取轮播图详细信息
*
* @param viewPagerId 主键
*/
@GetMapping("/{viewPagerId}")
public R getInfo(@NotNull(message = "主键不能为空")
@PathVariable Integer viewPagerId) {
return R.ok(iPzcViewPagerService.queryById(viewPagerId));
}
/**
* 新增轮播图
*/
@SaCheckPermission("system:viewPager:add")
@Log(title = "轮播图", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated(AddGroup.class) @RequestBody PzcViewPagerBo bo) {
return toAjax(iPzcViewPagerService.insertByBo(bo));
}
/**
* 修改轮播图
*/
@SaCheckPermission("system:viewPager:edit")
@Log(title = "轮播图", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R edit(@Validated(EditGroup.class) @RequestBody PzcViewPagerBo bo) {
return toAjax(iPzcViewPagerService.updateByBo(bo));
}
/**
* 删除轮播图
*
* @param viewPagerIds 主键串
*/
@SaCheckPermission("system:viewPager:remove")
@Log(title = "轮播图", businessType = BusinessType.DELETE)
@DeleteMapping("/{viewPagerIds}")
public R remove(@NotEmpty(message = "主键不能为空")
@PathVariable Integer[] viewPagerIds) {
return toAjax(iPzcViewPagerService.deleteWithValidByIds(Arrays.asList(viewPagerIds), true));
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/controller/WxUserController.java
================================================
package top.flya.system.controller;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.flya.common.constant.Constants;
import top.flya.common.core.controller.BaseController;
import top.flya.common.core.domain.R;
import top.flya.common.core.domain.event.LogininforEvent;
import top.flya.common.core.domain.model.XcxLoginUser;
import top.flya.common.enums.DeviceType;
import top.flya.common.helper.LoginHelper;
import top.flya.common.utils.MessageUtils;
import top.flya.common.utils.ServletUtils;
import top.flya.common.utils.spring.SpringUtils;
import top.flya.system.domain.*;
import top.flya.system.domain.bo.PayOrderBo;
import top.flya.system.domain.bo.PzcUserBo;
import top.flya.system.domain.bo.SuccessCallBackObjBo;
import top.flya.system.domain.vo.PzcUserHistoryVo;
import top.flya.system.handel.WxPayInitHandel;
import top.flya.system.mapper.*;
import top.flya.system.utils.CreateSign;
import top.flya.system.utils.WxUtils;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.security.GeneralSecurityException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wx/user")
@Slf4j
public class WxUserController extends BaseController {
@Value("${wx.appId}")
private String appId;
@Value("${wx.appSecret}")
private String secret;
@Value("${sa-token.token-prefix}")
private String tokenPrefix;
@Value("${wx.merchantId}")
private String mchId;
@Value("${wx.api3}")
private String api3;
@Value("${wx.notifyUrl}")
private String notifyUrl;
@Value("${api.school}")
private String schoolUrl;
@Value("${api.apiKey}")
private String apiKey;
private final PzcUserMapper userMapper;
private final WxUtils wxUtils;
private final PzcUserHistoryMapper userHistoryMapper;
@Autowired
private WxPayInitHandel wxPayInitHandel;
@Autowired
private CreateSign createSign;
@Autowired
private PzcOrderMapper orderMapper;
@Autowired
private PzcOfficialMapper officialMapper;
@Autowired
private PzcUserTalkMapper talkMapper;
@Autowired
private SysUserMapper sysUserMapper;
@Value("${neteaseCloudMusicApi}")
private String neteaseCloudMusicApi;
@GetMapping("/filterKeyWords")
public R filterKeyWords(@RequestParam("msg") String msg) {
wxUtils.checkMgc(msg);
return R.ok();
}
@GetMapping("/music")
public R music() {
String url = neteaseCloudMusicApi + sysUserMapper.selectUserById(1L).getNickName();
log.info("url is {}", url);
String result = HttpUtil.get(url);
JSONObject jsonObject = JSONObject.parseObject(result);
return R.ok(jsonObject.getJSONArray("data").getJSONObject(0).getString("url"));
}
@GetMapping("/notRead") // 获取首页 未读消息 (红点点)
public R notRead() {
PzcUser user = wxUtils.checkUser();
List pzcOfficials = officialMapper.selectList(new QueryWrapper().eq("to_user_id", user.getUserId()).eq("is_read", 0));
Integer size1 = pzcOfficials.size();
Integer size2 = talkMapper.selectList(new QueryWrapper().eq("to_user_id", user.getUserId()).eq("message_status", 0)).size();
return R.ok(Math.min(size1 + size2, 99));
}
@PostMapping("/login") // 登录
public R login(@RequestBody @Validated PzcUserBo loginUser) {
String tokenValue = userLogin(loginUser);
return (tokenValue != null) ? R.ok(tokenPrefix + " " + tokenValue) : R.fail("登录失败");
}
@GetMapping("/getSchoolList")
public R getSchoolList(@RequestParam("schoolName") String schoolName) {
String baseUrl = schoolUrl + schoolName + "&" + apiKey;
log.info("baseUrl is {}", baseUrl);
String result = HttpUtil.get(baseUrl);
return R.ok(JSONObject.parseObject(result).get("data"));
}
@GetMapping("/userInfo") // 获取用户信息
public R userInfo() {
return R.ok(wxUtils.checkUser());
}
@PostMapping("/updateUserInfo") // 更新用户信息
public R updateUserInfo(@RequestBody PzcUserBo pzcUserBo) {
log.info("更新用户信息: pzcUserBo is {}", pzcUserBo);
PzcUser user = wxUtils.checkUser();
//获取现在时间和一年前的时间 并格式化
String nowTime = DateUtils.format(new Date());
String lastYearNow = LocalDateTime.of(LocalDate.now().minusYears(1), LocalDateTime.now().toLocalTime()).toString();
log.info("nowTime is {} , lastYearNow is {}", nowTime, lastYearNow);
if (pzcUserBo.getNickname() != null && !user.getNickname().equals(pzcUserBo.getNickname())) {
//判断用户是否之前一年内是否更新过昵称
List pzcUserHistoryVos = userHistoryMapper.
selectVoList(new QueryWrapper().eq("user_id", user.getUserId()).eq("type", 0).like("message", "%昵称%")
.between("create_time", lastYearNow, nowTime));
if (!pzcUserHistoryVos.isEmpty()) {
return R.fail("一年内只能修改一次昵称");
} else {
wxUtils.checkMgc(pzcUserBo.getNickname());
//更新用户信息
user.setNickname(pzcUserBo.getNickname());
userMapper.updateById(user);
//存入用户历史记录
wxUtils.insertUserHistory(user.getUserId(), 0L, 0L, "昵称修改为" + pzcUserBo.getNickname(), null);
return R.ok(userMapper.selectById(user.getUserId()));
}
} else {
pzcUserBo.setMoney(user.getMoney());//余额不允许修改
pzcUserBo.setUserId(user.getUserId());//用户id不允许修改
pzcUserBo.setRealname(user.getRealname());//真实姓名不允许修改
pzcUserBo.setPhone(user.getPhone());//手机号不允许修改
pzcUserBo.setOpenid(user.getOpenid());//openid不允许修改
pzcUserBo.setExemptCancel(user.getExemptCancel());//免责不允许修改
Map map = BeanUtil.beanToMap(pzcUserBo);
//存入用户历史记录
wxUtils.insertUserHistory(user.getUserId(), 0L, 0L, "更新用户其他信息", null);
return R.ok(updateUser(map, user));
}
}
@PostMapping("/recharge") // 充值
@Transactional
public R createOrder(@RequestBody @Validated PayOrderBo payOrder) throws Exception {
PzcUser user = wxUtils.checkUser();
String openId = user.getOpenid();
CloseableHttpClient httpClient = wxPayInitHandel.setup();
//请求URL
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi");
HashMap amount = new HashMap<>();
amount.put("total", payOrder.getCount());
amount.put("currency", "CNY");
HashMap payer = new HashMap<>();
payer.put("openid", openId);
String orderNum = IdUtil.getSnowflakeNextIdStr();
HashMap toData = new HashMap<>();
toData.put("amount", amount);
toData.put("mchid", mchId);
toData.put("description", "派币充值订单");
toData.put("notify_url", notifyUrl);
toData.put("payer", payer);
toData.put("attach", orderNum);
toData.put("out_trade_no", orderNum);
toData.put("goods_tag", "WXG");
toData.put("appid", appId);
String s = JSONObject.toJSONString(toData);
log.info("订单: " + s);
StringEntity entity = new StringEntity(s, "utf-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Accept", "application/json");
//完成签名并执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
String result = "prepay_id=" + JSONObject.parseObject(EntityUtils.toString(response.getEntity())).get("prepay_id").toString();
response.close();
//关闭连接
wxPayInitHandel.after(httpClient);
String nonceStr = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS";
long timestamp = System.currentTimeMillis() / 1000;
String paySign = createSign.getSign(appId, timestamp, nonceStr, result);
HashMap map = new HashMap<>();
map.put("timestamp", String.valueOf(timestamp));
map.put("nonceStr", nonceStr);
map.put("package", result);
map.put("signType", "RSA");
map.put("paySign", paySign);
map.put("orderNum", orderNum);
//创建未支付的充值订单
PzcOrder pzcRechargeOrder = new PzcOrder();
pzcRechargeOrder.setActivityId(null);
pzcRechargeOrder.setMoney(BigDecimal.valueOf(payOrder.getCount()).divide(BigDecimal.valueOf(100)));
pzcRechargeOrder.setOrderStatus(0L);
pzcRechargeOrder.setType(0L);
pzcRechargeOrder.setOutOrderNum(orderNum);
pzcRechargeOrder.setIntro("派币充值订单");
pzcRechargeOrder.setTitle("派币充值");
pzcRechargeOrder.setUserId(user.getUserId());
orderMapper.insert(pzcRechargeOrder);
return R.ok(map);
} else if (statusCode == 204) {
log.info("success");
response.close();
//关闭连接
wxPayInitHandel.after(httpClient);
return R.ok("成功但未返回预支付订单号");
} else {
log.info("failed,resp code = " + statusCode + ",return body = " + EntityUtils.toString(response.getEntity()));
String result = EntityUtils.toString(response.getEntity());
response.close();
//关闭连接
wxPayInitHandel.after(httpClient);
return R.fail("创建预支付订单失败: " + result);
}
}
/**/
@RequestMapping("/callback")
@Transactional
public R callback(HttpServletRequest request, @RequestBody SuccessCallBackObjBo obj) {
log.info("进入支付回调啦~");
String associated_data = obj.getResource().getAssociated_data();
String nonce = obj.getResource().getNonce();
String ciphertext = obj.getResource().getCiphertext();
AesUtil aesUtil = new AesUtil(api3.getBytes());
try {
String s = aesUtil.decryptToString(associated_data.getBytes(), nonce.getBytes(), ciphertext);
JSONObject jsonObject = JSONObject.parseObject(s);
jsonObject.forEach((k, v) -> log.info("k:" + k + " v:" + v + "\n"));
String orderNum = jsonObject.getString("out_trade_no");
//更新订单状态和用户余额
PzcOrder pzcOrder = orderMapper.selectOne(new QueryWrapper().eq("out_order_num", orderNum));
if (pzcOrder == null) {
return R.fail("订单不存在");
}
if (pzcOrder.getOrderStatus() == 1) {
return R.fail("订单已支付");
}
pzcOrder.setOrderStatus(1L);
orderMapper.updateById(pzcOrder);
Long userId = pzcOrder.getUserId();
PzcUser user = userMapper.selectById(userId);
user.setMoney(user.getMoney().add(pzcOrder.getMoney()));
userMapper.updateById(user);
wxUtils.insertUserHistory(user.getUserId(), 0L, 2L, "派币充值【" + pzcOrder.getMoney() + "】", pzcOrder.getMoney());
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
return R.ok();
}
// 假设接收到的请求参数为Map userInfo
public PzcUser updateUser(Map userInfo, PzcUser user) {
// 反射动态更新用户信息
try {
Class> clazz = user.getClass();
for (Map.Entry entry : userInfo.entrySet()) {
String fieldName = entry.getKey();
Object fieldValue = entry.getValue();
log.info("fieldName is {} , fieldValue is {}", fieldName, fieldValue);
if (fieldValue != null) {
wxUtils.checkMgc(String
.valueOf(fieldValue)); //敏感词检测
}
if (fieldValue instanceof Map) //跳过map类型
{
continue;
}
if (fieldValue != null) {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(user, fieldValue);
}
}
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException("更新用户信息失败 反射异常");
}
// 保存更新后的用户信息
userMapper.updateById(user);
return userMapper.selectById(user.getUserId());
}
public String userLogin(PzcUserBo pzcUserBo) {
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId +
"&secret=" + secret + "&js_code=" + pzcUserBo.getLoginCode() + "&grant_type=authorization_code";
String response = HttpUtil.get(url);
log.info("微信小程序登录 url : {},response is {}", url, response);
JSONObject wxUser = JSONObject.parseObject(response);
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.checkValNull(wxUser) || wxUser.get("errcode") != null) {
throw new RuntimeException("微信登录失败 可能是code过期了");
}
String openId = wxUser.get("openid").toString();
//如果存在 就直接返回 不存在就新建用户
PzcUser user = userMapper.selectOne(new QueryWrapper().eq("openid", openId));
if (user == null) {
//存入用户信息
PzcUser newUser = new PzcUser();
newUser.setNickname(pzcUserBo.getNickname());
newUser.setOpenid(openId);
newUser.setAvatar(pzcUserBo.getAvatar());
//新注册时 根据 POST https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN 获取手机号
String getPhoneUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + wxUtils.getAccessToken();
Map codeMap = new HashMap<>();
codeMap.put("code", pzcUserBo.getPhoneCode());
String phoneResponse = HttpUtil.post(getPhoneUrl, JSONUtil.toJsonStr(codeMap));
log.info("微信小程序获取用户手机号信息 url : {},response is {}", getPhoneUrl, phoneResponse);
cn.hutool.json.JSONObject phoneJson = JSONUtil.parseObj(phoneResponse);
if (phoneJson.getInt("errcode") != 0) {
log.info("微信小程序获取用户手机号信息失败");
throw new RuntimeException("微信小程序获取用户手机号信息失败");
}
newUser.setPhone(phoneJson.getJSONObject("phone_info").getStr("purePhoneNumber"));
newUser.setSex(pzcUserBo.getSex());
newUser.setMoney(new BigDecimal(100)); //新用户注册送1元
newUser.setUserLevel(1L);
int insert = userMapper.insert(newUser);
log.info("insertUser: " + insert);
user = userMapper.selectOne(new QueryWrapper().eq("openid", openId));
}
if (user.getState() == 0) {
throw new RuntimeException("用户已被禁用");
}
// 此处可根据登录用户的数据不同 自行创建 loginUser
XcxLoginUser loginUser = new XcxLoginUser();
loginUser.setUserId(Long.valueOf(user.getUserId()));
loginUser.setUsername(user.getNickname());
loginUser.setUserType("微信小程序用户");
loginUser.setOpenid(openId);
// 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
recordLogininfor(user.getNickname(), MessageUtils.message("user.login.success"));
return StpUtil.getTokenValue();
}
private void recordLogininfor(String username, String message) {
LogininforEvent logininforEvent = new LogininforEvent();
logininforEvent.setUsername(username);
logininforEvent.setStatus(Constants.LOGIN_SUCCESS);
logininforEvent.setMessage(message);
logininforEvent.setRequest(ServletUtils.getRequest());
SpringUtils.context().publishEvent(logininforEvent);
}
@PostMapping("/sendArriveMsg") //推送微信小程序通知
public R sendArriveMsg(String toUserOpenId, String data) {
String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?" + "grant_type=client_credential&appid=" + appId + "&secret=" + secret;
String response = HttpUtil.get(getTokenUrl);
log.info("微信小程序获取token url : {},response is {}", getTokenUrl, response);
JSONObject wxUser = JSONObject.parseObject(response);
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.checkValNull(wxUser) || wxUser.get("errcode") != null) {
throw new RuntimeException("微信登录失败 可能是code过期了");
}
String accessToken = wxUser.get("access_token").toString();
String msgUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
Map map = new HashMap<>();
map.put("template_id", "MMHCiz9Z5faTwbDI9ywE0ScIvGMeDduTxXm00wdLxmw");
map.put("touser", toUserOpenId);
map.put("data", data);
map.put("miniprogram_state", "trial");//developer为开发版;trial为体验版;formal为正式版;默认为正式版
map.put("lang", "zh_CN");
String msgResponse = HttpUtil.post(msgUrl, JSONUtil.toJsonStr(map));
log.info("微信小程序推送消息 url : {},response is {}", msgUrl, msgResponse);
JSONObject msgJson = JSONObject.parseObject(msgResponse);
if (msgJson.getInteger("errcode") != 0) {
throw new RuntimeException("微信小程序推送消息失败");
}
return R.ok(msgJson.get("errcode").toString());
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivity.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动对象 pzc_activity
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity")
public class PzcActivity extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 活动id
*/
@TableId(value = "activity_id", type = IdType.AUTO)
private Integer activityId;
/**
* 地址
*/
private String address;
/**
* 城市ID
*/
private Integer regionId;
/**
* 活动标题
*/
private String title;
/**
* 开始时间
*/
private String startTime;
/**
* 结束时间
*/
private String endDate;
/**
* 活动详情主图
*/
private String innerImage;
/**
* 展示时间
*/
private String showTime;
/**
* 封面图片
*/
private String coverImage;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
private Integer classify; //属于哪个分类 0 电音节 1派对
private Integer region; // 0 国内 1 国外
private Long organizerId; //主办方id
private String shareImage; //分享图片
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivityConnArtist.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动关联艺人对象 pzc_activity_conn_artist
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity_conn_artist")
public class PzcActivityConnArtist extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "activity_conn_artist_id", type = IdType.AUTO)
private Integer activityConnArtistId;
/**
* 活动ID
*/
private Integer activityId;
/**
* 艺人ID
*/
private Integer artistId;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivityConnIntro.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动介绍与活动关联对象 pzc_activity_conn_intro
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity_conn_intro")
public class PzcActivityConnIntro extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "activity_conn_intro_id", type = IdType.AUTO)
private Integer activityConnIntroId;
/**
* 活动ID
*/
private Integer activityId;
/**
* 活动介绍ID
*/
private Integer introId;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivityConnTag.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动标签与活动关联对象 pzc_activity_conn_tag
*
* @author ruoyi
* @date 2023-06-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity_conn_tag")
public class PzcActivityConnTag extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "activity_conn_tag_id")
private Integer activityConnTagId;
/**
* 活动ID
*/
private Integer activityId;
/**
* 活动标签ID
*/
private Integer tagId;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivityGroup.java
================================================
package top.flya.system.domain;
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 lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
* 活动组队对象 pzc_activity_group
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity_group")
public class PzcActivityGroup extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 组队ID
*/
@TableId(value = "group_id",type = IdType.AUTO)
private Long groupId;
/**
* 活动ID
*/
private Long activityId;
private Integer region;
/**
* 活动组队发起人ID
*/
private Long userId;
/**
* 活动主题
*/
private String title;
/**
* 活动组队所缴纳的保证金
*/
private BigDecimal money;
/**
* 买单方式
*/
private Long groupType;
/**
* 活动地址
*/
private String address;
/**
* 一起约定好的时间
*/
private Date activityTime;
/**
* 权限
*/
private Long auth;
@TableField(exist = false)
private PzcUser user;
private Integer status;
private String activityName;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcActivityGroupApply.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 活动组队申请列对象 pzc_activity_group_apply
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_activity_group_apply")
public class PzcActivityGroupApply extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 申请ID
*/
@TableId(value = "apply_id",type = IdType.AUTO)
private Long applyId;
/**
* 申请人ID
*/
private Long userId;
/**
* 申请的活动ID
*/
private Long activityId;
/**
* 申请加入的组ID
*/
private Long groupId;
/**
* 0 AA制
1 我买单
2 你买单
*/
private Long groupType;
/**
* 活动保证金
*/
private BigDecimal money;
/**
* 留言内容
*/
private String message;
/**
* 0 位于申请列表中 1 申请通过待确认时 2 确认通过进行中 3 组队结束
*/
private Integer applyStatus;
/**
* 无限制确认到达 0 未确认 1 已确认
*/
private Integer wxz;
@TableField(exist = false)
private BigDecimal otherMoney; //对方的保证金
@TableField(exist = false)
private String otherName; //对方的名字
@TableField(exist = false)
private String otherAvatar; //对方的头像
@TableField(exist = false)
private String otherUserId; //对方的userId
@TableField(exist = false)
private Integer otherLevel; //对方的等级
@TableField(exist = false)
private String myAvatar; //我的头像
@TableField(exist = false)
private String title;
//发起方当前位置
private String startAddress;
//申请方当前位置
private String applyAddress;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcArtist.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 艺人对象 pzc_artist
*
* @author flya
* @date 2023-06-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_artist")
public class PzcArtist extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "artist_id", type = IdType.AUTO)
private Long artistId;
/**
* 艺人名
*/
private String name;
/**
* 艺人照片
*/
private String imageUrl;
/**
* 艺人介绍
*/
private String description;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcIntro.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动介绍对象 pzc_intro
*
* @author ruoyi
* @date 2023-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_intro")
public class PzcIntro extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "intro_id",type = IdType.AUTO)
private Long introId;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* 0 场地舞台介绍 1 更多介绍
*/
private Long type;
/**
* 图片
*/
private String imageFullUrl;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcOfficial.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 官方消息对象 pzc_official
*
* @author ruoyi
* @date 2023-07-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_official")
public class PzcOfficial extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "official_id",type = IdType.AUTO)
private Long officialId;
/**
* 来自谁的消息
*/
private Long fromUserId;
/**
* 给谁发的消息
*/
private Long toUserId;
/**
* 标题
*/
private String title;
/**
* 主体消息
*/
private String content;
/**
* 是否已读
*/
private Long isRead;
/**
* 来自那场组队的消息
*/
private Long groupId;
/**
* 来自那场活动的消息
*/
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcOrder.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 订单对象 pzc_order
*
* @author ruoyi
* @date 2023-07-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_order")
public class PzcOrder extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 订单ID
*/
@TableId(value = "order_id",type = IdType.AUTO)
private Long orderId;
/**
* 用户ID
*/
private Long userId;
/**
* 活动ID
*/
private Long activityId;
/**
* 订单金额
*/
private BigDecimal money;
/**
* 订单状态
*/
private Long orderStatus;
/**
* 订单类型
*/
private Long type;
/**
* 外部订单号
*/
private String outOrderNum;
/**
* 描述
*/
private String intro;
/**
* 标题
*/
private String title;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcOrganizer.java
================================================
package top.flya.system.domain;
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 lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import java.util.List;
/**
* 活动主办方对象 pzc_organizer
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_organizer")
public class PzcOrganizer extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "organizer_id", type = IdType.AUTO)
private Long organizerId;
/**
* 电话号码
*/
private String phone;
/**
* 名称
*/
private String name;
/**
* 组织者标志图片
*/
private String logo;
/**
* 主办方介绍
*/
private String content;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
@TableField(exist = false)
private List organizerTickets; // 组织者票务列表
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcOrganizerTicket.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 主办方票务对象 pzc_organizer_ticket
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_organizer_ticket")
public class PzcOrganizerTicket extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "organizer_ticket_id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
private Long organizerTicketId;
/**
* 名称
*/
private String name;
/**
* 二维码图片
*/
private String qrImage;
/**
* logo图
*/
private String logoImage;
/**
* 关联主办方ID
*/
private Long organizerId;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcRegion.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 地区对象 pzc_region
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_region")
public class PzcRegion extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 地区id
*/
@TableId(value = "region_id",type = IdType.AUTO)
private Long regionId;
/**
* 省
*/
private String base;
/**
* 地区名称
*/
private String name;
/**
* 城市主活动图
*/
private String imgUrl;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcTag.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 活动标签对象 pzc_tag
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_tag")
public class PzcTag extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "tag_id", type = IdType.AUTO)
private Long tagId;
/**
* 名称
*/
private String name;
/**
* 图片
*/
private String imageUrl;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcUser.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.system.domain.vo.PzcActivityGroupApplyVo;
import java.math.BigDecimal;
import java.util.List;
/**
* 用户对象 pzc_user
*
* @author ruoyi
* @date 2023-07-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_user")
public class PzcUser extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 用户主键
*/
@TableId(value = "user_id",type = IdType.AUTO)
private Long userId;
/**
* 用户在小程序端的 openId 唯一
*/
private String openid;
/**
* 派币余额
*/
private BigDecimal money;
/**
* 用户等级
*/
private Long userLevel;
/**
* 用户累计积分
*/
private Long integration;
/**
* 用户现有积分
*/
private Long integrationNow;
/**
* 真实姓名
*/
private String realname;
/**
* 昵称
*/
private String nickname;
/**
* 用户性别 0 男 1 女 2 未知
*/
private Integer sex;
/**
* 手机号
*/
private String phone;
/**
* 头像
*/
private String avatar;
/**
* 地址
*/
private String address;
/**
* 个人介绍
*/
private String intro;
/**
* 年龄
*/
private Long age;
/**
* 星座
*/
private String constellation;
/**
* 人格类型
*/
private String mbti;
/**
* 兴趣爱好
*/
private String hobby;
/**
* 学校
*/
private String school;
/**
* 职业
*/
private String occupation;
/**
* 喜欢的音乐风格
*/
private String musicStyle;
/**
* 状态 是否被封禁
*/
private Long state;
@TableField(exist = false)
private List userPhoto;
@TableField(exist = false)
private PzcActivityGroup pzcActivityGroup;
@TableField(exist = false)
private PzcActivityGroupApplyVo pzcActivityGroupApplyVo;
/**
* 用户免责取消次数 0点定时任务刷新
*/
private Integer exemptCancel;
@TableField(exist = false)
private Boolean liveStatus;
@TableField(exist = false)
private Integer notReadCount;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcUserCollect.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 用户收藏活动对象 pzc_user_collect
*
* @author ruoyi
* @date 2023-07-08
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_user_collect")
public class PzcUserCollect extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* ID
*/
@TableId(value = "collect_id",type = IdType.AUTO)
private Long collectId;
/**
* 用户Id
*/
private Long userId;
/**
* 收藏活动的Id
*/
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcUserHistory.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 用户操作历史记录对象 pzc_user_history
*
* @author ruoyi
* @date 2023-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_user_history")
public class PzcUserHistory extends BaseEntity {
private static final long serialVersionUID=1L;
/**
*
*/
@TableId(value = "history_id",type = IdType.AUTO)
private Long historyId;
/**
* 关联用户Id
*/
private Long userId;
/**
* 关联活动Id
*/
private Long activityId;
/**
* 操作类型
*/
private Long type;
/**
* 信息
*/
private String message;
private BigDecimal money;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcUserPhoto.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 用户资料相册对象 pzc_user_photo
*
* @author ruoyi
* @date 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_user_photo")
public class PzcUserPhoto extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 照片ID
*/
@TableId(value = "photo_id", type = IdType.AUTO)
private Long photoId;
/**
* 用户ID
*/
private Long userId;
/**
* 照片
*/
private String url;
/**
* 照片说明
*/
private String message;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcUserTalk.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
/**
* 用户聊天对象 pzc_user_talk
*
* @author ruoyi
* @date 2023-07-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_user_talk")
public class PzcUserTalk extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 聊天ID
*/
@TableId(value = "talk_id",type = IdType.AUTO)
private Long talkId;
/**
* 发起方
*/
private Long fromUserId;
/**
* 接受方
*/
private Long toUserId;
private Long userId; //消息的归属者 单向删除
/**
* 消息
*/
private String message;
/**
* 消息状态
*/
private Long messageStatus;
/**
* 消息类型
*/
private Long messageType;
@TableField(exist = false)
private Integer notReadCount;
private Long groupId; //群组id
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/PzcViewPager.java
================================================
package top.flya.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
/**
* 轮播图对象 pzc_view_pager
*
* @author ruoyi
* @date 2023-05-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("pzc_view_pager")
public class PzcViewPager extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 轮播图id
*/
@TableId(value = "view_pager_id", type = IdType.AUTO)
private Integer viewPagerId;
/**
* 轮播图名称
*/
private String name;
/**
* 轮播图图片Url
*/
private String imageUrl;
/**
* 轮播图链接Url
*/
private String linkUrl;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
/**
* 关联活动id 0表示不关联
*/
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PayOrderBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class PayOrderBo {
@NotNull
private Integer count;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import top.flya.system.domain.PzcArtist;
import top.flya.system.domain.PzcIntro;
import top.flya.system.domain.PzcOrganizer;
import top.flya.system.domain.PzcTag;
import javax.validation.constraints.*;
import java.util.List;
/**
* 活动业务对象 pzc_activity
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityBo extends BaseEntity {
/**
* 活动id
*/
@NotNull(message = "活动id不能为空", groups = { EditGroup.class })
private Integer activityId;
/**
* 地址
*/
@NotBlank(message = "地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String address;
/**
* 城市ID
*/
@NotNull(message = "城市ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer regionId;
/**
* 活动标题
*/
@NotBlank(message = "活动标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 开始时间
*/
@NotBlank(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
private String startTime;
/**
* 结束时间
*/
@NotBlank(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
private String endDate;
/**
* 展示时间
*/
// @NotBlank(message = "展示时间不能为空", groups = { AddGroup.class, EditGroup.class })
private String showTime;
/**
* 封面图片
*/
@NotBlank(message = "封面图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String coverImage;
/**
* 活动详情主图
*/
@NotNull(message = "活动详情主图不能为空", groups = { AddGroup.class, EditGroup.class })
private String innerImage;
/**
* 删除状态,默认为1表示正常状态
*/
private Integer state;
private Integer classify; //属于哪个分类
private Integer region; // 0 国际 1 国内
private List stageList; // 场地舞台列表
private List introList; // 简介列表
private List tagList; // 标签列表
private List artistList; // 艺人列表
@NotNull(message = "主办方不能为空", groups = { AddGroup.class, EditGroup.class })
private PzcOrganizer organizerList; // 主办方列表
private String shareImage; //分享图片
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityConnArtistBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 活动关联艺人业务对象 pzc_activity_conn_artist
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityConnArtistBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Integer activityConnArtistId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer activityId;
/**
* 艺人ID
*/
@NotNull(message = "艺人ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer artistId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityConnIntroBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 活动介绍与活动关联业务对象 pzc_activity_conn_intro
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityConnIntroBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Integer activityConnIntroId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer activityId;
/**
* 活动介绍ID
*/
@NotNull(message = "活动介绍ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer introId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityConnTagBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 活动标签与活动关联业务对象 pzc_activity_conn_tag
*
* @author ruoyi
* @date 2023-06-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityConnTagBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Integer activityConnTagId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer activityId;
/**
* 活动标签ID
*/
@NotNull(message = "活动标签ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer tagId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityGroupApplyBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 活动组队申请列业务对象 pzc_activity_group_apply
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityGroupApplyBo extends BaseEntity {
/**
* 申请ID
*/
@NotNull(message = "申请ID不能为空", groups = { EditGroup.class })
private Long applyId;
/**
* 申请人ID
*/
// @NotNull(message = "申请人ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 申请的活动ID
*/
@NotNull(message = "申请的活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
/**
* 申请加入的组ID
*/
@NotNull(message = "申请加入的组ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long groupId;
/**
* 申请状态
* 0 位于申请列表中 1 申请通过待确认时 2 确认通过进行中 3 组队结束 //申请状态不应该由前端传入 由后端自动计算
*/
// private Integer applyStatus;
/**
* 0 AA制
1 我买单
2 你买单
*/
@NotNull(message = "0 AA制 我买单 2 你买单不能为空", groups = { AddGroup.class, EditGroup.class })
private Long groupType;
/**
* 活动保证金
*/
@NotNull(message = "活动保证金不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal money;
/**
* 留言内容
*/
@NotBlank(message = "留言内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String message;
// 无限制确认到达
private Integer wxz;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcActivityGroupBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* 活动组队业务对象 pzc_activity_group
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcActivityGroupBo extends BaseEntity {
/**
* 组队ID
*/
@NotNull(message = "组队ID不能为空", groups = { EditGroup.class })
private Long groupId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
private Integer region;
/**
* 活动组队发起人ID
*/
private Long userId;
private String activityName;
/**
* 活动主题
*/
@NotBlank(message = "活动主题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 活动组队所缴纳的保证金
*/
@NotNull(message = "活动组队所缴纳的保证金不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal money;
/**
* 买单方式
*/
@NotNull(message = "买单方式不能为空", groups = { AddGroup.class, EditGroup.class })
private Long groupType;
/**
* 活动地址
*/
@NotBlank(message = "活动地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String address;
/**
* 一起约定好的时间
*/
@NotNull(message = "一起约定好的时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date activityTime;
/**
* 权限
*/
@NotNull(message = "权限不能为空", groups = { AddGroup.class, EditGroup.class })
private Long auth;
private Integer userSex;
private Integer distance;// 1
private Integer userLevel;
private Integer activityTime1;
private String longitudeAndLatitude; //经纬度
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcArtistBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 艺人业务对象 pzc_artist
*
* @author flya
* @date 2023-06-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcArtistBo extends BaseEntity {
/**
* ID
*/
private Long artistId;
/**
* 艺人名
*/
@NotBlank(message = "艺人名不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 艺人照片
*/
private String imageUrl;
/**
* 艺人介绍
*/
private String description;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcIntroBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 活动介绍业务对象 pzc_intro
*
* @author ruoyi
* @date 2023-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcIntroBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long introId;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 内容
*/
// @NotBlank(message = "内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String content;
/**
* 0 场地舞台介绍 1 更多介绍
*/
@NotNull(message = "0 场地舞台介绍 1 更多介绍不能为空", groups = { AddGroup.class, EditGroup.class })
private Long type;
/**
* 图片
*/
@NotBlank(message = "图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String imageFullUrl;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcOfficialBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 官方消息业务对象 pzc_official
*
* @author ruoyi
* @date 2023-07-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcOfficialBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long officialId;
/**
* 来自谁的消息
*/
@NotNull(message = "来自谁的消息不能为空", groups = { AddGroup.class, EditGroup.class })
private Long fromUserId;
/**
* 给谁发的消息
*/
@NotNull(message = "给谁发的消息不能为空", groups = { AddGroup.class, EditGroup.class })
private Long toUserId;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 主体消息
*/
@NotBlank(message = "主体消息不能为空", groups = { AddGroup.class, EditGroup.class })
private String content;
/**
* 是否已读
*/
@NotNull(message = "是否已读不能为空", groups = { AddGroup.class, EditGroup.class })
private Long isRead;
/**
* 来自那场组队的消息
*/
@NotNull(message = "来自那场组队的消息不能为空", groups = { AddGroup.class, EditGroup.class })
private Long groupId;
/**
* 来自那场活动的消息
*/
@NotNull(message = "来自那场活动的消息不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcOrderBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 订单业务对象 pzc_order
*
* @author ruoyi
* @date 2023-07-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcOrderBo extends BaseEntity {
/**
* 订单ID
*/
@NotNull(message = "订单ID不能为空", groups = { EditGroup.class })
private Long orderId;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
/**
* 订单金额
*/
@NotNull(message = "订单金额不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal money;
/**
* 订单状态
*/
@NotNull(message = "订单状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderStatus;
/**
* 订单类型
*/
@NotNull(message = "订单类型不能为空", groups = { AddGroup.class, EditGroup.class })
private Long type;
/**
* 外部订单号
*/
@NotBlank(message = "外部订单号不能为空", groups = { AddGroup.class, EditGroup.class })
private String outOrderNum;
/**
* 描述
*/
@NotBlank(message = "描述不能为空", groups = { AddGroup.class, EditGroup.class })
private String intro;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcOrganizerBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 活动主办方业务对象 pzc_organizer
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcOrganizerBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long organizerId;
/**
* 电话号码
*/
@NotBlank(message = "电话号码不能为空", groups = { AddGroup.class, EditGroup.class })
private String phone;
/**
* 名称
*/
@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 组织者标志图片
*/
private String logo;
/**
* 主办方介绍
*/
@NotBlank(message = "主办方介绍不能为空", groups = { AddGroup.class, EditGroup.class })
private String content;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcOrganizerTicketBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 主办方票务业务对象 pzc_organizer_ticket
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcOrganizerTicketBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long organizerTicketId;
/**
* 名称
*/
@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 二维码图片
*/
@NotBlank(message = "二维码图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String qrImage;
/**
* logo图
*/
@NotBlank(message = "logo图不能为空", groups = { AddGroup.class, EditGroup.class })
private String logoImage;
/**
* 关联主办方ID
*/
@NotNull(message = "关联主办方ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long organizerId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcRegionBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 地区业务对象 pzc_region
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcRegionBo extends BaseEntity {
/**
* 地区id
*/
@NotNull(message = "地区id不能为空", groups = { EditGroup.class })
private Long regionId;
/**
* 省
*/
@NotBlank(message = "省不能为空", groups = { AddGroup.class, EditGroup.class })
private String base;
/**
* 地区名称
*/
@NotBlank(message = "地区名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 城市主活动图
*/
@NotBlank(message = "城市主活动图不能为空", groups = { AddGroup.class, EditGroup.class })
private String imgUrl;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcTagBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 活动标签业务对象 pzc_tag
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcTagBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long tagId;
/**
* 名称
*/
@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 图片
*/
@NotBlank(message = "图片不能为空", groups = { AddGroup.class, EditGroup.class })
private String imageUrl;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcUserBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 用户业务对象 pzc_user
*
* @author ruoyi
* @date 2023-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcUserBo extends BaseEntity {
/**
* 用户主键
*/
@NotNull(message = "用户主键不能为空", groups = { EditGroup.class })
private Long userId;
/**
* OpenId
*/
private String openid;
/**
* 换取openid的code
*/
private String loginCode;
/**
* 换取手机号的code
*/
private String phoneCode;
/**
* 派币余额
*/
private BigDecimal money;
/**
* 真实姓名
*/
@NotBlank(message = "真实姓名不能为空", groups = { AddGroup.class, EditGroup.class })
private String realname;
/**
* 昵称
*/
@NotBlank(message = "昵称不能为空", groups = { AddGroup.class, EditGroup.class })
private String nickname;
/**
* 性别
*/
@NotNull(message = "性别不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer sex;
/**
* 用户等级
*/
private Long userLevel;
/**
* 用户累计积分
*/
private Long integration;
/**
* 用户现有积分
*/
private Long integrationNow;
/**
* 手机号
*/
private String phone;
/**
* 头像
*/
private String avatar;
/**
* 地址
*/
private String address;
/**
* 介绍
*/
private String intro;
/**
* 年龄
*/
private Long age;
/**
* 星座
*/
private String constellation;
/**
* 人格类型
*/
private String mbti;
/**
* 兴趣爱好
*/
private String hobby;
/**
* 学校
*/
private String school;
/**
* 职业
*/
private String occupation;
/**
* 音乐风格
*/
private String musicStyle;
/**
* 封禁状态
*/
private Integer state;
private Integer exemptCancel;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcUserCollectBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 用户收藏活动业务对象 pzc_user_collect
*
* @author ruoyi
* @date 2023-07-08
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcUserCollectBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long collectId;
/**
* 用户Id
*/
@NotNull(message = "用户Id不能为空", groups = { EditGroup.class })
private Long userId;
/**
* 收藏活动的Id
*/
@NotNull(message = "收藏活动的Id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
private Integer type ; // 收藏类型 0电音节 1派对
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcUserHistoryBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 用户操作历史记录业务对象 pzc_user_history
*
* @author ruoyi
* @date 2023-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcUserHistoryBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long historyId;
/**
* 关联用户Id
*/
@NotNull(message = "关联用户Id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 关联活动Id
*/
@NotNull(message = "关联活动Id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
/**
* 操作类型
*/
@NotNull(message = "操作类型不能为空", groups = { AddGroup.class, EditGroup.class })
private Long[] type;
/**
* 信息
*/
@NotBlank(message = "信息不能为空", groups = { AddGroup.class, EditGroup.class })
private String message;
private String nowTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcUserPhotoBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 用户资料相册业务对象 pzc_user_photo
*
* @author ruoyi
* @date 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcUserPhotoBo extends BaseEntity {
/**
* 照片ID
*/
@NotNull(message = "照片ID不能为空", groups = { EditGroup.class })
private Long photoId;
/**
* 用户ID
*/
private Long userId;
/**
* 照片
*/
@NotBlank(message = "照片不能为空", groups = { AddGroup.class, EditGroup.class })
private String url;
/**
* 照片说明
*/
private String message;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcUserTalkBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 用户聊天业务对象 pzc_user_talk
*
* @author ruoyi
* @date 2023-07-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcUserTalkBo extends BaseEntity {
/**
* 聊天ID
*/
@NotNull(message = "聊天ID不能为空", groups = { EditGroup.class })
private Long talkId;
/**
* 发起方
*/
@NotNull(message = "发起方不能为空", groups = { AddGroup.class, EditGroup.class })
private Long fromUserId;
/**
* 接受方
*/
@NotNull(message = "接受方不能为空", groups = { AddGroup.class, EditGroup.class })
private Long toUserId;
/**
* 消息
*/
@NotBlank(message = "消息不能为空", groups = { AddGroup.class, EditGroup.class })
private String message;
/**
* 消息状态
*/
// @NotNull(message = "消息状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Long messageStatus;
/**
* 消息类型
*/
@NotNull(message = "消息类型不能为空", groups = { AddGroup.class, EditGroup.class })
private Long messageType;
private Long userId; //消息的归属者 单向删除
private Long groupId; //群组id
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/PzcViewPagerBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import top.flya.common.core.domain.BaseEntity;
import top.flya.common.core.validate.AddGroup;
import top.flya.common.core.validate.EditGroup;
import javax.validation.constraints.*;
/**
* 轮播图业务对象 pzc_view_pager
*
* @author ruoyi
* @date 2023-05-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PzcViewPagerBo extends BaseEntity {
/**
* 轮播图id
*/
@NotNull(message = "轮播图id不能为空", groups = { EditGroup.class })
private Integer viewPagerId;
/**
* 轮播图名称
*/
@NotBlank(message = "轮播图名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 轮播图图片Url
*/
@NotBlank(message = "轮播图图片Url不能为空", groups = { AddGroup.class, EditGroup.class })
private String imageUrl;
/**
* 轮播图链接Url
*/
@NotBlank(message = "轮播图链接Url不能为空", groups = { AddGroup.class, EditGroup.class })
private String linkUrl;
/**
* 删除状态,默认为1表示正常状态
*/
@NotNull(message = "删除状态,默认为1表示正常状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer state;
/**
* 关联活动id 0表示不关联
*/
@NotNull(message = "关联活动id 0表示不关联不能为空", groups = { AddGroup.class, EditGroup.class })
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/RefurbishBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
@Data
public class RefurbishBo {
private Long applyId;
private Integer role;
private String address;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/Resource.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
/**
* Created with IntelliJ IDEA.
*
* @author: 风离
* @Date: 2022/06/04/2:59
* @Description:
*/
@Data
public class Resource {
private String original_type;
private String algorithm;
private String ciphertext;
private String associated_data;
private String nonce;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/SuccessCallBackObjBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
/**
* Created with IntelliJ IDEA.
*
* @author: 风离
* @Date: 2022/06/04/2:57
* @Description:
*/
@Data
public class SuccessCallBackObjBo {
private String id;
private String create_time;
private String event_type;
private String resource_type;
private Resource resource;
private String summary;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/UpdateMoneyBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class UpdateMoneyBo {
private Long userId;
private BigDecimal money;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/bo/WxzApplyBo.java
================================================
package top.flya.system.domain.bo;
import lombok.Data;
@Data
public class WxzApplyBo {
private Integer fromUserId;
private Integer toUserId;
private Integer activityId;
private Integer groupId;
private Integer applyId;
private String message;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityConnArtistVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 活动关联艺人视图对象 pzc_activity_conn_artist
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@ExcelIgnoreUnannotated
public class PzcActivityConnArtistVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Integer activityConnArtistId;
/**
* 活动ID
*/
@ExcelProperty(value = "活动ID")
private Integer activityId;
/**
* 艺人ID
*/
@ExcelProperty(value = "艺人ID")
private Integer artistId;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 删除状态,默认为1表示正常状态
*/
@ExcelProperty(value = "删除状态,默认为1表示正常状态")
private Integer state;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityConnIntroVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 活动介绍与活动关联视图对象 pzc_activity_conn_intro
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@ExcelIgnoreUnannotated
public class PzcActivityConnIntroVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Integer activityConnIntroId;
/**
* 活动ID
*/
@ExcelProperty(value = "活动ID")
private Integer activityId;
/**
* 活动介绍ID
*/
@ExcelProperty(value = "活动介绍ID")
private Integer introId;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityConnTagVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 活动标签与活动关联视图对象 pzc_activity_conn_tag
*
* @author ruoyi
* @date 2023-06-03
*/
@Data
@ExcelIgnoreUnannotated
public class PzcActivityConnTagVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Integer activityConnTagId;
/**
* 活动ID
*/
@ExcelProperty(value = "活动ID")
private Integer activityId;
/**
* 活动标签ID
*/
@ExcelProperty(value = "活动标签ID")
private Integer tagId;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityGroupApplyVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import java.math.BigDecimal;
import java.util.Date;
/**
* 活动组队申请列视图对象 pzc_activity_group_apply
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@ExcelIgnoreUnannotated
public class PzcActivityGroupApplyVo {
private static final long serialVersionUID = 1L;
/**
* 申请ID
*/
@ExcelProperty(value = "申请ID")
private Long applyId;
/**
* 申请人ID
*/
@ExcelProperty(value = "申请人ID")
private Long userId;
/**
* 申请的活动ID
*/
@ExcelProperty(value = "申请的活动ID")
private Long activityId;
/**
* 活动标题
*/
private String activityTitle;
/**
* 组队的标题
*/
private String groupTitle;
/**
* 申请加入的组ID
*/
@ExcelProperty(value = "申请加入的组ID")
private Long groupId;
/**
* 0 AA制
1 我买单
2 你买单
*/
@ExcelProperty(value = "0 AA制 1 我买单 2 你买单", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "group_pay_type")
private Long groupType;
/**
* 活动保证金
*/
@ExcelProperty(value = "活动保证金")
private BigDecimal money;
/**
* 留言内容
*/
@ExcelProperty(value = "留言内容")
private String message;
/**
* 0 位于申请列表中 1 申请通过待确认时 2 确认通过进行中 3 组队结束
*/
@ExcelProperty(value = "-1 已取消 0 位于申请列表中 1 申请通过待确认时 2 确认通过进行中 3 组队结束", converter = ExcelDictConvert.class)
private Integer applyStatus;
/**
*
*/
@ExcelProperty(value = "")
private Date createTime;
/**
*
*/
@ExcelProperty(value = "")
private Date updateTime;
//申请人的头像以及用户名
private String nickName;
private String avatar;
/**
* 无限制确认到达 0 未确认 1 已确认
*/
private Integer wxz;
//发起方当前位置
private String startAddress;
//申请方当前位置
private String applyAddress;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityGroupVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import top.flya.system.domain.PzcUserPhoto;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 活动组队视图对象 pzc_activity_group
*
* @author ruoyi
* @date 2023-07-10
*/
@Data
@ExcelIgnoreUnannotated
public class PzcActivityGroupVo {
private static final long serialVersionUID = 1L;
/**
* 组队ID
*/
@ExcelProperty(value = "组队ID")
private Long groupId;
/**
* 活动ID
*/
@ExcelProperty(value = "活动ID")
private Long activityId;
private Integer region;
/**
* 活动组队发起人ID
*/
@ExcelProperty(value = "活动组队发起人ID")
private Long userId;
/**
* 活动组队发起人
*/
private PzcUserVo user;
/**
* 活动主题
*/
@ExcelProperty(value = "活动主题")
private String title;
private String activityTitle;
/**
* 活动组队所缴纳的保证金
*/
@ExcelProperty(value = "活动组队所缴纳的保证金")
private BigDecimal money;
/**
* 买单方式
*/
@ExcelProperty(value = "买单方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "group_pay_type")
private Long groupType;
/**
* 活动地址
*/
@ExcelProperty(value = "活动地址")
private String address;
/**
* 一起约定好的时间
*/
@ExcelProperty(value = "一起约定好的时间")
private Date activityTime;
/**
* 权限
*/
@ExcelProperty(value = "权限", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "group_auth")
private Long auth;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
private List photo;
private Boolean ifShow = true;
private BigDecimal distance; //距离多少米
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcActivityVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import top.flya.system.domain.PzcArtist;
import top.flya.system.domain.PzcIntro;
import top.flya.system.domain.PzcOrganizer;
import top.flya.system.domain.PzcTag;
import java.util.Date;
import java.util.List;
/**
* 活动视图对象 pzc_activity
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcActivityVo {
private static final long serialVersionUID = 1L;
/**
* 活动id
*/
@ExcelProperty(value = "活动id")
private Integer activityId;
/**
* 地址
*/
@ExcelProperty(value = "地址")
private String address;
/**
* 城市ID
*/
@ExcelProperty(value = "城市ID")
private Integer regionId;
/**
* 活动标题
*/
@ExcelProperty(value = "活动标题")
private String title;
/**
* 开始时间
*/
@ExcelProperty(value = "开始时间")
private String startTime;
/**
* 结束时间
*/
@ExcelProperty(value = "结束时间")
private String endDate;
/**
* 活动详情主图
*/
@ExcelProperty(value = "活动详情主图")
private String innerImage;
/**
* 展示时间
*/
@ExcelProperty(value = "展示时间")
private String showTime;
/**
* 封面图片
*/
@ExcelProperty(value = "封面图片")
private String coverImage;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 删除状态,默认为1表示正常状态
*/
@ExcelProperty(value = "删除状态,默认为1表示正常状态")
private Integer state;
private Long organizerId; // 主办方id
private Integer classify; //属于哪个分类
private Integer region; // 0 国内 1 国外
private List introList; // 简介列表
private List tagList; // 标签列表
private List artistList; // 艺人列表
private PzcOrganizer organizerList; // 主办方列表
private List stageList; // 场地列表
private String shareImage; //分享图片
// private String distance; //距我多少km
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcArtistVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 艺人视图对象 pzc_artist
*
* @author flya
* @date 2023-06-01
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcArtistVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long artistId;
/**
* 艺人名
*/
@ExcelProperty(value = "艺人名")
private String name;
/**
* 艺人照片
*/
@ExcelProperty(value = "艺人照片")
private String imageUrl;
/**
* 艺人介绍
*/
@ExcelProperty(value = "艺人介绍")
private String description;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcIntroVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 活动介绍视图对象 pzc_intro
*
* @author ruoyi
* @date 2023-08-04
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcIntroVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long introId;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 内容
*/
@ExcelProperty(value = "内容")
private String content;
/**
* 0 场地舞台介绍 1 更多介绍
*/
@ExcelProperty(value = "0 场地舞台介绍 1 更多介绍")
private Long type;
/**
* 图片
*/
@ExcelProperty(value = "图片")
private String imageFullUrl;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcOfficialVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.util.Date;
/**
* 官方消息视图对象 pzc_official
*
* @author ruoyi
* @date 2023-07-27
*/
@Data
@ExcelIgnoreUnannotated
public class PzcOfficialVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long officialId;
/**
* 来自谁的消息
*/
@ExcelProperty(value = "来自谁的消息")
private Long fromUserId;
/**
* 给谁发的消息
*/
@ExcelProperty(value = "给谁发的消息")
private Long toUserId;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 主体消息
*/
@ExcelProperty(value = "主体消息")
private String content;
/**
* 是否已读
*/
@ExcelProperty(value = "是否已读")
private Long isRead;
/**
* 来自那场组队的消息
*/
@ExcelProperty(value = "来自那场组队的消息")
private Long groupId;
/**
* 来自那场活动的消息
*/
@ExcelProperty(value = "来自那场活动的消息")
private Long activityId;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcOrderVo.java
================================================
package top.flya.system.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 订单视图对象 pzc_order
*
* @author ruoyi
* @date 2023-07-09
*/
@Data
@ExcelIgnoreUnannotated
public class PzcOrderVo {
private static final long serialVersionUID = 1L;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 用户ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
* 活动ID
*/
@ExcelProperty(value = "活动ID")
private Long activityId;
/**
* 订单金额
*/
@ExcelProperty(value = "订单金额")
private BigDecimal money;
/**
* 订单状态
*/
@ExcelProperty(value = "订单状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "order_status")
private Long orderStatus;
/**
* 订单类型
*/
@ExcelProperty(value = "订单类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "order_type")
private Long type;
/**
* 外部订单号
*/
@ExcelProperty(value = "外部订单号")
private String outOrderNum;
/**
* 描述
*/
@ExcelProperty(value = "描述")
private String intro;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 订单创建时间
*/
@ExcelProperty(value = "订单创建时间")
private Date createTime;
/**
* 订单更新时间
*/
@ExcelProperty(value = "订单更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcOrganizerTicketVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 主办方票务视图对象 pzc_organizer_ticket
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@ExcelIgnoreUnannotated
public class PzcOrganizerTicketVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long organizerTicketId;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String name;
/**
* 二维码图片
*/
@ExcelProperty(value = "二维码图片")
private String qrImage;
/**
* logo图
*/
@ExcelProperty(value = "logo图")
private String logoImage;
/**
* 关联主办方ID
*/
@ExcelProperty(value = "关联主办方ID")
private Long organizerId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcOrganizerVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 活动主办方视图对象 pzc_organizer
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcOrganizerVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long organizerId;
/**
* 电话号码
*/
@ExcelProperty(value = "电话号码")
private String phone;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String name;
/**
* 组织者标志图片
*/
@ExcelProperty(value = "组织者标志图片")
private String logo;
/**
* 主办方介绍
*/
@ExcelProperty(value = "主办方介绍")
private String content;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcRegionVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 地区视图对象 pzc_region
*
* @author ruoyi
* @date 2023-07-22
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
public class PzcRegionVo {
private static final long serialVersionUID = 1L;
/**
* 地区id
*/
@ExcelProperty(value = "地区id")
private Long regionId;
/**
* 省
*/
@ExcelProperty(value = "省")
private String base;
/**
* 地区名称
*/
@ExcelProperty(value = "地区名称")
private String name;
/**
* 城市主活动图
*/
@ExcelProperty(value = "城市主活动图")
private String imgUrl;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 子地区列表
*/
private List children;
// 构造方法
public PzcRegionVo() {
this.children = new ArrayList<>();
}
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcTagVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 活动标签视图对象 pzc_tag
*
* @author ruoyi
* @date 2023-06-02
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcTagVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long tagId;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String name;
/**
* 图片
*/
@ExcelProperty(value = "图片")
private String imageUrl;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcUserCollectVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import top.flya.system.domain.PzcActivity;
/**
* 用户收藏活动视图对象 pzc_user_collect
*
* @author ruoyi
* @date 2023-07-08
*/
@Data
@ExcelIgnoreUnannotated
public class PzcUserCollectVo {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long collectId;
/**
* 用户Id
*/
@ExcelProperty(value = "用户Id")
private Long userId;
/**
* 收藏活动的Id
*/
@ExcelProperty(value = "收藏活动的Id")
private Long activityId;
private PzcActivity activity;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcUserHistoryVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 用户操作历史记录视图对象 pzc_user_history
*
* @author ruoyi
* @date 2023-07-06
*/
@Data
@ExcelIgnoreUnannotated
public class PzcUserHistoryVo {
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long historyId;
/**
* 关联用户Id
*/
@ExcelProperty(value = "关联用户Id")
private Long userId;
/**
* 关联活动Id
*/
@ExcelProperty(value = "关联活动Id")
private Long activityId;
/**
* 操作类型
*/
@ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "user_history_type")
private Long type;
/**
* 信息
*/
@ExcelProperty(value = "信息")
private String message;
private BigDecimal money;
private Date createTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcUserPhotoVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 用户资料相册视图对象 pzc_user_photo
*
* @author ruoyi
* @date 2023-07-11
*/
@Data
@ExcelIgnoreUnannotated
public class PzcUserPhotoVo {
private static final long serialVersionUID = 1L;
/**
* 照片ID
*/
@ExcelProperty(value = "照片ID")
private Long photoId;
/**
* 用户ID
*/
@ExcelProperty(value = "用户ID")
private Long userId;
/**
* 照片
*/
@ExcelProperty(value = "照片")
private String url;
/**
* 照片说明
*/
@ExcelProperty(value = "照片说明")
private String message;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@ExcelProperty(value = "更新时间")
private Date updateTime;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcUserTalkVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 用户聊天视图对象 pzc_user_talk
*
* @author ruoyi
* @date 2023-07-16
*/
@Data
@ExcelIgnoreUnannotated
public class PzcUserTalkVo {
private static final long serialVersionUID = 1L;
/**
* 聊天ID
*/
@ExcelProperty(value = "聊天ID")
private Long talkId;
/**
* 发起方
*/
@ExcelProperty(value = "发起方")
private Long fromUserId;
/**
* 接受方
*/
@ExcelProperty(value = "接受方")
private Long toUserId;
/**
* 消息
*/
@ExcelProperty(value = "消息", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "user_talk_msg_type")
private String message;
/**
* 消息状态
*/
@ExcelProperty(value = "消息状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "user_talk_msg_status")
private Long messageStatus;
/**
* 消息类型
*/
@ExcelProperty(value = "消息类型")
private Long messageType;
/**
*
*/
@ExcelProperty(value = "")
private Date createTime;
/**
*
*/
@ExcelProperty(value = "")
private Date updateTime;
private Integer notReadCount; //未读消息数量
private String username;
private String avatar;
private Long groupId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcUserVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import top.flya.common.annotation.ExcelDictFormat;
import top.flya.common.convert.ExcelDictConvert;
import java.math.BigDecimal;
import java.util.Date;
/**
* 用户视图对象 pzc_user
*
* @author ruoyi
* @date 2023-07-09
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelIgnoreUnannotated
public class PzcUserVo {
private static final long serialVersionUID = 1L;
/**
* 用户主键
*/
@ExcelProperty(value = "用户主键")
private Long userId;
/**
* 用户在小程序端的 openId 唯一
*/
@ExcelProperty(value = "用户在小程序端的 openId 唯一")
private String openid;
/**
* 派币余额
*/
@ExcelProperty(value = "派币余额")
private BigDecimal money;
/**
* 用户等级
*/
@ExcelProperty(value = "用户等级", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "user_level")
private Long userLevel;
/**
* 用户累计积分
*/
@ExcelProperty(value = "用户累计积分")
private Long integration;
/**
* 用户现有积分
*/
@ExcelProperty(value = "用户现有积分")
private Long integrationNow;
/**
* 真实姓名
*/
@ExcelProperty(value = "真实姓名")
private String realname;
/**
* 昵称
*/
@ExcelProperty(value = "昵称")
private String nickname;
/**
* 用户性别 0 男 1 女 2 未知
*/
@ExcelProperty(value = "用户性别 0 男 1 女 2 未知", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "sys_user_sex")
private Integer sex;
/**
* 手机号
*/
@ExcelProperty(value = "手机号")
private String phone;
/**
* 头像
*/
@ExcelProperty(value = "头像")
private String avatar;
/**
* 地址
*/
@ExcelProperty(value = "地址")
private String address;
/**
* 个人介绍
*/
@ExcelProperty(value = "个人介绍")
private String intro;
/**
* 年龄
*/
@ExcelProperty(value = "年龄")
private Long age;
/**
* 星座
*/
@ExcelProperty(value = "星座", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "constellation")
private String constellation;
/**
* 人格类型
*/
@ExcelProperty(value = "人格类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "mbti")
private String mbti;
/**
* 兴趣爱好
*/
@ExcelProperty(value = "兴趣爱好", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "user_hobby")
private String hobby;
/**
* 学校
*/
@ExcelProperty(value = "学校")
private String school;
/**
* 职业
*/
@ExcelProperty(value = "职业")
private String occupation;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 喜欢的音乐风格
*/
@ExcelProperty(value = "喜欢的音乐风格", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "music_style")
private String musicStyle;
/**
* 状态 是否被封禁
*/
@ExcelProperty(value = "状态 是否被封禁", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "state")
private Long state;
private Integer exemptCancel; // 用户免责取消次数
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/PzcViewPagerVo.java
================================================
package top.flya.system.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 轮播图视图对象 pzc_view_pager
*
* @author ruoyi
* @date 2023-05-23
*/
@Data
@ExcelIgnoreUnannotated
@AllArgsConstructor
@NoArgsConstructor
public class PzcViewPagerVo {
private static final long serialVersionUID = 1L;
/**
* 轮播图id
*/
@ExcelProperty(value = "轮播图id")
private Integer viewPagerId;
/**
* 轮播图名称
*/
@ExcelProperty(value = "轮播图名称")
private String name;
/**
* 轮播图图片Url
*/
@ExcelProperty(value = "轮播图图片Url")
private String imageUrl;
/**
* 轮播图链接Url
*/
@ExcelProperty(value = "轮播图链接Url")
private String linkUrl;
/**
* 删除状态,默认为1表示正常状态
*/
@ExcelProperty(value = "删除状态,默认为1表示正常状态")
private Integer state;
/**
* 关联活动id 0表示不关联
*/
@ExcelProperty(value = "关联活动id 0表示不关联")
private Long activityId;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/domain/vo/RefurbishVO.java
================================================
package top.flya.system.domain.vo;
import lombok.Data;
@Data
public class RefurbishVO {
//发起方当前位置
private String startAddress;
//申请方当前位置
private String applyAddress;
private Long applyId;
private Long distance;
}
================================================
FILE: PaiZhiCheng/src/main/java/top/flya/system/entity/Activity.java
================================================
package top.flya.system.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true) //活动
@TableName("pzc_activity")
public class Activity extends FLBaseEntity {
@TableId(value = "activity_id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
private String activityId; //活动id
private String address; // 地址
private Integer regionId; // 城市ID
private String title; //活动标题
private String startTime; // 开始时间
private String endDate; // 结束日期
private String innerImage; // 活动详情主图
private String showTime; // 展示时间
private String coverImage; // 封面图片
private Integer classify; //属于哪个分类
private Integer region; // 0 国内 1 国外
@TableField(exist = false)
private List