|
@@ -0,0 +1,276 @@
|
|
|
|
|
+package com.kxs.system.biz.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.kxs.common.core.constant.SecurityConstants;
|
|
|
|
|
+import com.kxs.common.core.util.R;
|
|
|
|
|
+import com.kxs.common.security.util.SecurityUtils;
|
|
|
|
|
+import com.kxs.system.api.dto.kxsapp.camp.CampAddBcqtTeamDTO;
|
|
|
|
|
+import com.kxs.system.api.dto.kxsapp.camp.CampOpenActivityDTO;
|
|
|
|
|
+import com.kxs.system.api.dto.kxsapp.camp.CampReturnTeamDTO;
|
|
|
|
|
+import com.kxs.system.api.model.KxsBcqtTeamDetail;
|
|
|
|
|
+import com.kxs.system.api.vo.kxsapp.camp.CampGetBcqtDetailVO;
|
|
|
|
|
+import com.kxs.system.api.vo.kxsapp.camp.CampGetBcqtListVO;
|
|
|
|
|
+import com.kxs.system.api.vo.kxsapp.camp.CampGetMyBcqtListVO;
|
|
|
|
|
+import com.kxs.system.api.vo.kxsapp.camp.TeamUserItem;
|
|
|
|
|
+import com.kxs.system.biz.mapper.KxsBcqtTeamDetailMapper;
|
|
|
|
|
+import com.kxs.system.biz.mapper.KxsBcqtTeamMapper;
|
|
|
|
|
+import com.kxs.system.api.model.KxsBcqtTeam;
|
|
|
|
|
+import com.kxs.system.biz.service.KxsBcqtTeamService;
|
|
|
|
|
+import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
|
|
+import com.kxs.user.api.model.KxsUser;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.jacoco.agent.rt.internal_43f5073.core.internal.flow.IFrame;
|
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.sql.Array;
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Objects;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 百城千团团队表(KxsBcqtTeam)表服务实现类
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author 系统
|
|
|
|
|
+ * @since 2024-05-22 14:29:03
|
|
|
|
|
+ */
|
|
|
|
|
+@Service("kxsBcqtTeamService")
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
|
+public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBcqtTeam> implements KxsBcqtTeamService {
|
|
|
|
|
+ private final KxsBcqtTeamDetailMapper kxsBcqtTeamDetailMapper;
|
|
|
|
|
+ private final RemoteKxsUserService remoteKxsUserService;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R getBcqtList(Page<KxsBcqtTeam> page, String keyword) {
|
|
|
|
|
+ Page<CampGetBcqtListVO> kxsBcqtTeamPage = baseMapper.getBcqtList(page, keyword);
|
|
|
|
|
+ Long userId = SecurityUtils.getUser().getId();
|
|
|
|
|
+ KxsBcqtTeamDetail kxsBcqtTeamDetail = kxsBcqtTeamDetailMapper.selectOne(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getUserId, userId).eq(KxsBcqtTeamDetail::getEndFlag, 0));
|
|
|
|
|
+ if (kxsBcqtTeamDetail == null) {
|
|
|
|
|
+ return R.ok(kxsBcqtTeamPage);
|
|
|
|
|
+ }
|
|
|
|
|
+ //当用户存在正在参加的活动 需要判断列表关系
|
|
|
|
|
+ for (CampGetBcqtListVO record : kxsBcqtTeamPage.getRecords()) {
|
|
|
|
|
+ if (Objects.equals(kxsBcqtTeamDetail.getTeamId(), Long.valueOf(record.getId()))) {
|
|
|
|
|
+ record.setRelation(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.ok(kxsBcqtTeamPage);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R getMyBcqtList(Page<KxsBcqtTeam> page) {
|
|
|
|
|
+ Long userId = SecurityUtils.getUser().getId();
|
|
|
|
|
+ return R.ok(kxsBcqtTeamDetailMapper.getMyBcqtList(page, userId));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R addBcqtTeam(CampAddBcqtTeamDTO param) {
|
|
|
|
|
+ String teamName = param.getTeamName();
|
|
|
|
|
+ Long captainId = param.getCaptainId();
|
|
|
|
|
+ if (verifyAddTeam(param)) {
|
|
|
|
|
+ R.failed("校验未通过,非法参数");
|
|
|
|
|
+ }
|
|
|
|
|
+ R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(Math.toIntExact(captainId), SecurityConstants.FROM_IN);
|
|
|
|
|
+ KxsUser kxsUser = kxsUserR.getData();
|
|
|
|
|
+ //团队数据
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam = new KxsBcqtTeam();
|
|
|
|
|
+ kxsBcqtTeam.setCreateTime(LocalDateTime.now());
|
|
|
|
|
+ kxsBcqtTeam.setDelFlag("0");
|
|
|
|
|
+ kxsBcqtTeam.setTeamName(teamName);
|
|
|
|
|
+ kxsBcqtTeam.setStatus(0);
|
|
|
|
|
+ kxsBcqtTeam.setReachStatus(0);
|
|
|
|
|
+ kxsBcqtTeam.setCaptainId(captainId);
|
|
|
|
|
+ kxsBcqtTeam.setTeamNumber(1);
|
|
|
|
|
+ kxsBcqtTeam.setUsername(kxsUser.getUsername());
|
|
|
|
|
+ save(kxsBcqtTeam);
|
|
|
|
|
+ //团队人员数据
|
|
|
|
|
+ KxsBcqtTeamDetail kxsBcqtTeamDetail = new KxsBcqtTeamDetail();
|
|
|
|
|
+ kxsBcqtTeamDetail.setCreateTime(LocalDateTime.now());
|
|
|
|
|
+ kxsBcqtTeamDetail.setDelFlag("0");
|
|
|
|
|
+ kxsBcqtTeamDetail.setUserId(captainId);
|
|
|
|
|
+ kxsBcqtTeamDetail.setUsername(kxsUser.getUsername());
|
|
|
|
|
+ kxsBcqtTeamDetail.setUserCode(kxsUser.getUserCode());
|
|
|
|
|
+ kxsBcqtTeamDetail.setPosActivateNumber(0);
|
|
|
|
|
+ kxsBcqtTeamDetail.setLkbActivateNumber(0);
|
|
|
|
|
+ kxsBcqtTeamDetail.setGdActivateNumber(0);
|
|
|
|
|
+ kxsBcqtTeamDetail.setCaptainStatus(1);
|
|
|
|
|
+ kxsBcqtTeamDetail.setEndFlag(0);
|
|
|
|
|
+ //需要拿到存储的团队id,该方法无法添加事务
|
|
|
|
|
+ kxsBcqtTeamDetail.setTeamId(Long.valueOf(kxsBcqtTeam.getId()));
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean verifyAddTeam(CampAddBcqtTeamDTO param) {
|
|
|
|
|
+ String teamName = param.getTeamName();
|
|
|
|
|
+ Long captainId = param.getCaptainId();
|
|
|
|
|
+ //不存在同名团队
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam = baseMapper.selectOne(Wrappers.<KxsBcqtTeam>query().lambda().eq(KxsBcqtTeam::getTeamName, teamName));
|
|
|
|
|
+ if (kxsBcqtTeam != null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ //不存在未结束的团队
|
|
|
|
|
+ KxsBcqtTeamDetail kxsBcqtTeamDetail = kxsBcqtTeamDetailMapper.selectOne(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getUserId, captainId).eq(KxsBcqtTeamDetail::getEndFlag, 0));
|
|
|
|
|
+ if (kxsBcqtTeamDetail != null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ //用户存在
|
|
|
|
|
+ R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(Math.toIntExact(captainId), SecurityConstants.FROM_IN);
|
|
|
|
|
+ if (kxsUserR.getData() == null){
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ //用户状态正常且已实名
|
|
|
|
|
+ return !kxsUserR.getData().getStatus().equals(1) || !kxsUserR.getData().getRealStatus().equals(1);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public R returnTeam(CampReturnTeamDTO param) {
|
|
|
|
|
+ Long id = param.getId();
|
|
|
|
|
+ Long userId = SecurityUtils.getUser().getId();
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam = getById(id);
|
|
|
|
|
+ if (kxsBcqtTeam == null){
|
|
|
|
|
+ return R.failed("该活动不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeam.getCaptainId().equals(userId)){
|
|
|
|
|
+ return R.failed("团长无法退出");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!kxsBcqtTeam.getStatus().equals(0)){
|
|
|
|
|
+ return R.failed("非报名期间无法退出");
|
|
|
|
|
+ }
|
|
|
|
|
+ //退出
|
|
|
|
|
+ //修改团队人数
|
|
|
|
|
+ kxsBcqtTeam.setTeamNumber(kxsBcqtTeam.getTeamNumber()-1);
|
|
|
|
|
+ updateById(kxsBcqtTeam);
|
|
|
|
|
+ //删除明细
|
|
|
|
|
+ kxsBcqtTeamDetailMapper.delete(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getTeamId, kxsBcqtTeam.getId()).eq(KxsBcqtTeamDetail::getUserId, userId));
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R openActivity(CampOpenActivityDTO param) {
|
|
|
|
|
+ Long userId = SecurityUtils.getUser().getId();
|
|
|
|
|
+ Integer id = param.getId();
|
|
|
|
|
+ Integer activityDate = param.getActivityDate();
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam = getById(id);
|
|
|
|
|
+ if (kxsBcqtTeam == null){
|
|
|
|
|
+ return R.failed("活动不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!kxsBcqtTeam.getStatus().equals(0)){
|
|
|
|
|
+ return R.failed("活动已开始");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeam.getTeamNumber().equals(10)){
|
|
|
|
|
+ return R.failed("人员不足无法开启活动");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (userId.equals(kxsBcqtTeam.getCaptainId())){
|
|
|
|
|
+ return R.failed("您无法开启该活动,请联系团长开启活动");
|
|
|
|
|
+ }
|
|
|
|
|
+ LocalDateTime dateTime = LocalDateTime.now();
|
|
|
|
|
+ LocalDate currentDate = dateTime.toLocalDate();
|
|
|
|
|
+ // 计算次日凌晨0点
|
|
|
|
|
+ LocalDateTime startTime = currentDate.plusDays(1).atStartOfDay();
|
|
|
|
|
+ // 计算次日后+活动时长凌晨0点
|
|
|
|
|
+ LocalDateTime endTime = currentDate.plusDays(activityDate + 1).atStartOfDay();
|
|
|
|
|
+ kxsBcqtTeam.setUpdateTime(dateTime);
|
|
|
|
|
+ kxsBcqtTeam.setStartTime(startTime);//开始时间
|
|
|
|
|
+ kxsBcqtTeam.setEndTime(endTime);//结束时间
|
|
|
|
|
+ kxsBcqtTeam.setStatus(1);//活动开启
|
|
|
|
|
+ kxsBcqtTeam.setActivityDate(activityDate);//活动时长
|
|
|
|
|
+ updateById(kxsBcqtTeam);
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R getBcqtDetail(Integer id) {
|
|
|
|
|
+ CampGetBcqtDetailVO campGetBcqtDetailVO = new CampGetBcqtDetailVO();
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam = getById(id);
|
|
|
|
|
+ if (kxsBcqtTeam ==null){
|
|
|
|
|
+ return R.failed("该活动不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ //复制活动信息
|
|
|
|
|
+ BeanUtil.copyProperties(kxsBcqtTeam,campGetBcqtDetailVO);
|
|
|
|
|
+ //总激活
|
|
|
|
|
+ int activityTotal = 0;
|
|
|
|
|
+ //查询并复制人员信息
|
|
|
|
|
+ List<KxsBcqtTeamDetail> kxsBcqtTeamDetails = kxsBcqtTeamDetailMapper.selectList(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getTeamId, id));
|
|
|
|
|
+ ArrayList<TeamUserItem> teamUserItems = new ArrayList<>();
|
|
|
|
|
+ for (KxsBcqtTeamDetail kxsBcqtTeamDetail : kxsBcqtTeamDetails) {
|
|
|
|
|
+ TeamUserItem teamUserItem = new TeamUserItem();
|
|
|
|
|
+ //个人激活数
|
|
|
|
|
+ int personageActivity = 0;
|
|
|
|
|
+ BeanUtil.copyProperties(kxsBcqtTeamDetail,teamUserItem);
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getGdActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getGdActivateNumber();
|
|
|
|
|
+ personageActivity += kxsBcqtTeamDetail.getGdActivateNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getLkbActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getLkbActivateNumber();
|
|
|
|
|
+ personageActivity += kxsBcqtTeamDetail.getLkbActivateNumber();
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getPosActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getPosActivateNumber();
|
|
|
|
|
+ personageActivity += kxsBcqtTeamDetail.getPosActivateNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+ //个人总激活数返回字段归于posActivateNumber
|
|
|
|
|
+ teamUserItem.setPosActivateNumber(personageActivity);
|
|
|
|
|
+ teamUserItems.add(teamUserItem);
|
|
|
|
|
+ }
|
|
|
|
|
+ //计算奖池
|
|
|
|
|
+ BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
|
|
+ if (activityTotal > 100 && 200 > activityTotal){
|
|
|
|
|
+ totalAmount = new BigDecimal(1000);
|
|
|
|
|
+ } else if (200 < activityTotal) {
|
|
|
|
|
+ totalAmount = new BigDecimal(2200);
|
|
|
|
|
+ }
|
|
|
|
|
+ //赋值
|
|
|
|
|
+ campGetBcqtDetailVO.setTotalAmount(totalAmount);
|
|
|
|
|
+ campGetBcqtDetailVO.setActiviteTotal(activityTotal);
|
|
|
|
|
+ campGetBcqtDetailVO.setTeamUser(teamUserItems);
|
|
|
|
|
+ return R.ok(campGetBcqtDetailVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|