|
@@ -1,16 +1,24 @@
|
|
|
package com.kxs.system.biz.service.impl;
|
|
package com.kxs.system.biz.service.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.kxs.common.core.constant.SecurityConstants;
|
|
import com.kxs.common.core.constant.SecurityConstants;
|
|
|
|
|
+import com.kxs.common.core.exception.GlobalCustomerException;
|
|
|
import com.kxs.common.core.util.R;
|
|
import com.kxs.common.core.util.R;
|
|
|
import com.kxs.common.security.util.SecurityUtils;
|
|
import com.kxs.common.security.util.SecurityUtils;
|
|
|
|
|
+import com.kxs.stat.api.dto.statUser.GetActivityStatByIdAndTimeDTO;
|
|
|
|
|
+import com.kxs.stat.api.feign.RemoteKxsStatService;
|
|
|
|
|
+import com.kxs.stat.api.vo.GetActivityStatByIdAndTimeVO;
|
|
|
|
|
+import com.kxs.system.api.dto.admin.GetByBcqtPageDTO;
|
|
|
import com.kxs.system.api.dto.kxsapp.camp.CampAddBcqtTeamDTO;
|
|
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.CampOpenActivityDTO;
|
|
|
import com.kxs.system.api.dto.kxsapp.camp.CampReturnTeamDTO;
|
|
import com.kxs.system.api.dto.kxsapp.camp.CampReturnTeamDTO;
|
|
|
import com.kxs.system.api.model.KxsBcqtTeamDetail;
|
|
import com.kxs.system.api.model.KxsBcqtTeamDetail;
|
|
|
|
|
+import com.kxs.system.api.vo.admin.GetByBcqtPageVO;
|
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampGetBcqtDetailVO;
|
|
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.CampGetBcqtListVO;
|
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampGetMyBcqtListVO;
|
|
import com.kxs.system.api.vo.kxsapp.camp.CampGetMyBcqtListVO;
|
|
@@ -22,6 +30,7 @@ import com.kxs.system.biz.service.KxsBcqtTeamService;
|
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
import com.kxs.user.api.model.KxsUser;
|
|
import com.kxs.user.api.model.KxsUser;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.checkerframework.checker.units.qual.K;
|
|
|
import org.jacoco.agent.rt.internal_43f5073.core.internal.flow.IFrame;
|
|
import org.jacoco.agent.rt.internal_43f5073.core.internal.flow.IFrame;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -31,6 +40,7 @@ import java.math.BigDecimal;
|
|
|
import java.sql.Array;
|
|
import java.sql.Array;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
@@ -46,6 +56,8 @@ import java.util.Objects;
|
|
|
public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBcqtTeam> implements KxsBcqtTeamService {
|
|
public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBcqtTeam> implements KxsBcqtTeamService {
|
|
|
private final KxsBcqtTeamDetailMapper kxsBcqtTeamDetailMapper;
|
|
private final KxsBcqtTeamDetailMapper kxsBcqtTeamDetailMapper;
|
|
|
private final RemoteKxsUserService remoteKxsUserService;
|
|
private final RemoteKxsUserService remoteKxsUserService;
|
|
|
|
|
+ private final RemoteKxsStatService remoteKxsStatService;
|
|
|
|
|
+ private final KxsBcqtTeamMapper kxsBcqtTeamMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public R getBcqtList(Page<KxsBcqtTeam> page, String keyword) {
|
|
public R getBcqtList(Page<KxsBcqtTeam> page, String keyword) {
|
|
@@ -74,8 +86,8 @@ public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBc
|
|
|
public R addBcqtTeam(CampAddBcqtTeamDTO param) {
|
|
public R addBcqtTeam(CampAddBcqtTeamDTO param) {
|
|
|
String teamName = param.getTeamName();
|
|
String teamName = param.getTeamName();
|
|
|
Long captainId = param.getCaptainId();
|
|
Long captainId = param.getCaptainId();
|
|
|
- if (verifyAddTeam(param)) {
|
|
|
|
|
- R.failed("校验未通过,非法参数");
|
|
|
|
|
|
|
+ if (!verifyAddTeam(param)) {
|
|
|
|
|
+ return R.failed("校验未通过,非法参数");
|
|
|
}
|
|
}
|
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(Math.toIntExact(captainId), SecurityConstants.FROM_IN);
|
|
R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(Math.toIntExact(captainId), SecurityConstants.FROM_IN);
|
|
|
KxsUser kxsUser = kxsUserR.getData();
|
|
KxsUser kxsUser = kxsUserR.getData();
|
|
@@ -104,6 +116,7 @@ public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBc
|
|
|
kxsBcqtTeamDetail.setEndFlag(0);
|
|
kxsBcqtTeamDetail.setEndFlag(0);
|
|
|
//需要拿到存储的团队id,该方法无法添加事务
|
|
//需要拿到存储的团队id,该方法无法添加事务
|
|
|
kxsBcqtTeamDetail.setTeamId(Long.valueOf(kxsBcqtTeam.getId()));
|
|
kxsBcqtTeamDetail.setTeamId(Long.valueOf(kxsBcqtTeam.getId()));
|
|
|
|
|
+ kxsBcqtTeamDetailMapper.insert(kxsBcqtTeamDetail);
|
|
|
return R.ok();
|
|
return R.ok();
|
|
|
|
|
|
|
|
|
|
|
|
@@ -129,7 +142,7 @@ public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBc
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
//用户状态正常且已实名
|
|
//用户状态正常且已实名
|
|
|
- return !kxsUserR.getData().getStatus().equals(1) || !kxsUserR.getData().getRealStatus().equals(1);
|
|
|
|
|
|
|
+ return kxsUserR.getData().getStatus().equals(1) || kxsUserR.getData().getRealStatus().equals(1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -171,10 +184,10 @@ public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBc
|
|
|
if (!kxsBcqtTeam.getStatus().equals(0)){
|
|
if (!kxsBcqtTeam.getStatus().equals(0)){
|
|
|
return R.failed("活动已开始");
|
|
return R.failed("活动已开始");
|
|
|
}
|
|
}
|
|
|
- if (kxsBcqtTeam.getTeamNumber().equals(10)){
|
|
|
|
|
|
|
+ if (!kxsBcqtTeam.getTeamNumber().equals(10)){
|
|
|
return R.failed("人员不足无法开启活动");
|
|
return R.failed("人员不足无法开启活动");
|
|
|
}
|
|
}
|
|
|
- if (userId.equals(kxsBcqtTeam.getCaptainId())){
|
|
|
|
|
|
|
+ if (!userId.equals(kxsBcqtTeam.getCaptainId())){
|
|
|
return R.failed("您无法开启该活动,请联系团长开启活动");
|
|
return R.failed("您无法开启该活动,请联系团长开启活动");
|
|
|
}
|
|
}
|
|
|
LocalDateTime dateTime = LocalDateTime.now();
|
|
LocalDateTime dateTime = LocalDateTime.now();
|
|
@@ -242,34 +255,155 @@ public class KxsBcqtTeamServiceImpl extends ServiceImpl<KxsBcqtTeamMapper, KxsBc
|
|
|
return R.ok(campGetBcqtDetailVO);
|
|
return R.ok(campGetBcqtDetailVO);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public void setUserActivityTimeStat() {
|
|
|
|
|
+ //获取全部活动中团队
|
|
|
|
|
+ List<KxsBcqtTeam> list = list(Wrappers.<KxsBcqtTeam>query().lambda().eq(KxsBcqtTeam::getStatus, 1));
|
|
|
|
|
+ //构造查询数据
|
|
|
|
|
+ for (KxsBcqtTeam kxsBcqtTeam : list) {
|
|
|
|
|
+ ArrayList<GetActivityStatByIdAndTimeDTO> getActivityStatByIdAndTimeDTOS = new ArrayList<>();
|
|
|
|
|
+ //构造该团队的查询日期
|
|
|
|
|
+ LocalDateTime startTime = kxsBcqtTeam.getStartTime();//开始时间
|
|
|
|
|
+ Integer activityDate = kxsBcqtTeam.getActivityDate();//活动时长
|
|
|
|
|
+ //获取从开始时间开始未来活动时长的每天字符串
|
|
|
|
|
+ List<String> futureDates = new ArrayList<>();
|
|
|
|
|
+ for (int i = 0; i <= activityDate; i++) {
|
|
|
|
|
+ LocalDate currentDate = startTime.toLocalDate().plusDays(i);
|
|
|
|
|
+ String currentDateString = LocalDateTimeUtil.format(currentDate, DatePattern.PURE_DATE_PATTERN);
|
|
|
|
|
+ futureDates.add(currentDateString);
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询所有团队成员
|
|
|
|
|
+ List<KxsBcqtTeamDetail> kxsBcqtTeamDetailS = kxsBcqtTeamDetailMapper.selectList(Wrappers.<KxsBcqtTeamDetail>query().lambda()
|
|
|
|
|
+ .eq(KxsBcqtTeamDetail::getTeamId,kxsBcqtTeam.getId()));
|
|
|
|
|
+ //构造dto
|
|
|
|
|
+ for (KxsBcqtTeamDetail kxsBcqtTeamDetail : kxsBcqtTeamDetailS) {
|
|
|
|
|
+ GetActivityStatByIdAndTimeDTO getActivityStatByIdAndTimeDTO = new GetActivityStatByIdAndTimeDTO();
|
|
|
|
|
+ getActivityStatByIdAndTimeDTO.setUserId(kxsBcqtTeamDetail.getUserId());
|
|
|
|
|
+ getActivityStatByIdAndTimeDTO.setTimes(futureDates);
|
|
|
|
|
+ getActivityStatByIdAndTimeDTOS.add(getActivityStatByIdAndTimeDTO);
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询得到统计数据
|
|
|
|
|
+ List<GetActivityStatByIdAndTimeVO> activityStatByIdAndTime = remoteKxsStatService.getActivityStatByIdAndTime(getActivityStatByIdAndTimeDTOS, SecurityConstants.FROM_IN);
|
|
|
|
|
+ int reachNumber = 0;
|
|
|
|
|
+ //修改查询到的数据的当前激活数
|
|
|
|
|
+ for (GetActivityStatByIdAndTimeVO getActivityStatByIdAndTimeVO : activityStatByIdAndTime) {
|
|
|
|
|
+ Long userId = getActivityStatByIdAndTimeVO.getUserId();
|
|
|
|
|
+ Integer posActivityNumber = getActivityStatByIdAndTimeVO.getPosActivityNumber();
|
|
|
|
|
+ if (posActivityNumber != null){
|
|
|
|
|
+ reachNumber += posActivityNumber;
|
|
|
|
|
+ }
|
|
|
|
|
+ Integer gdActivityNumber = getActivityStatByIdAndTimeVO.getGdActivityNumber();
|
|
|
|
|
+ if (gdActivityNumber != null){
|
|
|
|
|
+ reachNumber += gdActivityNumber;
|
|
|
|
|
+ }
|
|
|
|
|
+ Integer lkbActivityNumber = getActivityStatByIdAndTimeVO.getLkbActivityNumber();
|
|
|
|
|
+ if (lkbActivityNumber != null){
|
|
|
|
|
+ reachNumber += lkbActivityNumber;
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询当前在活动的该用户
|
|
|
|
|
+ KxsBcqtTeamDetail kxsBcqtTeamDetail = kxsBcqtTeamDetailMapper.selectOne(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getUserId, userId).eq(KxsBcqtTeamDetail::getEndFlag, 0));
|
|
|
|
|
+ kxsBcqtTeamDetail.setUpdateTime(LocalDateTime.now());
|
|
|
|
|
+ kxsBcqtTeamDetail.setPosActivateNumber(posActivityNumber);
|
|
|
|
|
+ kxsBcqtTeamDetail.setLkbActivateNumber(lkbActivityNumber);
|
|
|
|
|
+ kxsBcqtTeamDetail.setGdActivateNumber(gdActivityNumber);
|
|
|
|
|
+ //修改激活数
|
|
|
|
|
+ kxsBcqtTeamDetailMapper.updateById(kxsBcqtTeamDetail);
|
|
|
|
|
+ }
|
|
|
|
|
+ //判断当前团队是否达标
|
|
|
|
|
+ if (reachNumber >= 100 && kxsBcqtTeam.getReachStatus() != 1){
|
|
|
|
|
+ kxsBcqtTeam.setReachStatus(1);
|
|
|
|
|
+ updateById(kxsBcqtTeam);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public void setUserActiviteStatus() {
|
|
|
|
|
+ //获取全部活动中团队
|
|
|
|
|
+ List<KxsBcqtTeam> list = list(Wrappers.<KxsBcqtTeam>query().lambda().eq(KxsBcqtTeam::getStatus, 1));
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ for (KxsBcqtTeam kxsBcqtTeam : list) {
|
|
|
|
|
+ LocalDateTime endTime = kxsBcqtTeam.getEndTime();
|
|
|
|
|
+ //当前时间在结束时间之后
|
|
|
|
|
+ if (now.isAfter(endTime)){
|
|
|
|
|
+ //设置活动状态为已结束
|
|
|
|
|
+ kxsBcqtTeam.setStatus(2);
|
|
|
|
|
+ updateById(kxsBcqtTeam);
|
|
|
|
|
+ //修改团队人员明细
|
|
|
|
|
+ List<KxsBcqtTeamDetail> kxsBcqtTeamDetailS = kxsBcqtTeamDetailMapper.selectList(Wrappers.<KxsBcqtTeamDetail>query().lambda()
|
|
|
|
|
+ .eq(KxsBcqtTeamDetail::getTeamId,kxsBcqtTeam.getId()));
|
|
|
|
|
+ for (KxsBcqtTeamDetail kxsBcqtTeamDetail : kxsBcqtTeamDetailS) {
|
|
|
|
|
+ //结束参与状态
|
|
|
|
|
+ kxsBcqtTeamDetail.setEndFlag(1);
|
|
|
|
|
+ kxsBcqtTeamDetailMapper.updateById(kxsBcqtTeamDetail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R getByBcqtPage(Page<KxsBcqtTeam> page, GetByBcqtPageDTO param) {
|
|
|
|
|
+ ArrayList<Long> teamIds = new ArrayList<>();
|
|
|
|
|
+ if (param.getUserCode() != null && !param.getUserCode().equals("")){
|
|
|
|
|
+ List<KxsBcqtTeamDetail> kxsBcqtTeamDetails = kxsBcqtTeamDetailMapper.selectList(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getUserCode, param.getUserCode()));
|
|
|
|
|
+ if (kxsBcqtTeamDetails.size() == 0){
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ for (KxsBcqtTeamDetail kxsBcqtTeamDetail : kxsBcqtTeamDetails) {
|
|
|
|
|
+ teamIds.add(kxsBcqtTeamDetail.getTeamId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ Page<KxsBcqtTeam> page1 = page(page, Wrappers.<KxsBcqtTeam>query().lambda()
|
|
|
|
|
+ .eq(param.getStatus() != null, KxsBcqtTeam::getStatus, param.getStatus())
|
|
|
|
|
+ .eq(param.getReachStatus() != null, KxsBcqtTeam::getReachStatus, param.getReachStatus())
|
|
|
|
|
+ .like(param.getTeamName() != null && !param.getTeamName().equals(""),KxsBcqtTeam::getTeamName,param.getTeamName())
|
|
|
|
|
+ .in(teamIds.size() != 0, KxsBcqtTeam::getId, teamIds));
|
|
|
|
|
+ ArrayList<GetByBcqtPageVO> getByBcqtPageVOS = new ArrayList<>();
|
|
|
|
|
+ for (KxsBcqtTeam record : page1.getRecords()) {
|
|
|
|
|
+ GetByBcqtPageVO getByBcqtPageVO = new GetByBcqtPageVO();
|
|
|
|
|
+ BeanUtil.copyProperties(record,getByBcqtPageVO);
|
|
|
|
|
+ List<KxsBcqtTeamDetail> kxsBcqtTeamDetails = kxsBcqtTeamDetailMapper.selectList(Wrappers.<KxsBcqtTeamDetail>query().lambda().eq(KxsBcqtTeamDetail::getTeamId, record.getId()));
|
|
|
|
|
+ int activityTotal = 0;
|
|
|
|
|
+ for (KxsBcqtTeamDetail kxsBcqtTeamDetail : kxsBcqtTeamDetails) {
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getGdActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getGdActivateNumber();
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getGdActivateNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getLkbActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getLkbActivateNumber();
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getLkbActivateNumber();
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getPosActivateNumber() != null){
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getPosActivateNumber();
|
|
|
|
|
+ activityTotal += kxsBcqtTeamDetail.getPosActivateNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (kxsBcqtTeamDetail.getCaptainStatus() == 1){
|
|
|
|
|
+ //队长编号
|
|
|
|
|
+ getByBcqtPageVO.setUserCode(kxsBcqtTeamDetail.getUserCode());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //总激活
|
|
|
|
|
+ getByBcqtPageVO.setActivityTotal(activityTotal);
|
|
|
|
|
+ getByBcqtPageVOS.add(getByBcqtPageVO);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ return R.ok(getByBcqtPageVOS);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void updateBcqt(KxsBcqtTeam kxsBcqtTeam) {
|
|
|
|
|
+ KxsBcqtTeam kxsBcqtTeam1 = kxsBcqtTeamMapper.selectById(kxsBcqtTeam.getId());
|
|
|
|
|
+ if (kxsBcqtTeam1 == null){
|
|
|
|
|
+ throw new GlobalCustomerException("团队不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ kxsBcqtTeam1.setTeamName(kxsBcqtTeam.getTeamName());
|
|
|
|
|
+ kxsBcqtTeamMapper.updateById(kxsBcqtTeam1);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|