101captain
2022-01-14 6fc1e7f179acaeec4df755f72895b3b4fb50d4bb
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActActivityServiceImpl.java
@@ -12,6 +12,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -19,6 +20,9 @@
import javax.annotation.Resource;
import com.panzhihua.common.model.vos.user.SysTemplateConfigVO;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.model.dos.*;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
@@ -52,19 +56,7 @@
import com.panzhihua.common.service.user.UserService;
import com.panzhihua.common.utlis.WxUtil;
import com.panzhihua.common.utlis.WxXCXTempSend;
import com.panzhihua.service_community.dao.ComActActEvaluateDAO;
import com.panzhihua.service_community.dao.ComActActPictureDAO;
import com.panzhihua.service_community.dao.ComActActRegistDAO;
import com.panzhihua.service_community.dao.ComActActSignDAO;
import com.panzhihua.service_community.dao.ComActActivityCodeDao;
import com.panzhihua.service_community.dao.ComActActivityDAO;
import com.panzhihua.service_community.dao.ComBpActivityDAO;
import com.panzhihua.service_community.entity.ComActActivityCode;
import com.panzhihua.service_community.model.dos.ComActActEvaluateDO;
import com.panzhihua.service_community.model.dos.ComActActPictureDO;
import com.panzhihua.service_community.model.dos.ComActActRegistDO;
import com.panzhihua.service_community.model.dos.ComActActSignDO;
import com.panzhihua.service_community.model.dos.ComActActivityDO;
import com.panzhihua.service_community.service.ComActActivityCodeService;
import com.panzhihua.service_community.service.ComActActivityService;
import com.panzhihua.service_community.service.ComActIntegralUserTradeService;
@@ -105,6 +97,8 @@
    private ComActIntegralUserTradeService comActIntegralUserTradeService;
    @Resource
    private ComActActivityCodeService comActActivityCodeService;
    @Resource
    private ComActDAO comActDAO;
    /**
     * 新增社区活动
@@ -115,6 +109,9 @@
     */
    @Override
    public R addActivity(ComActActivityVO comActActivityVO) {
        if (comActActivityVO.getHaveIntegralReward().intValue() == 2) {
            comActActivityVO.setRewardWay(null);
        }
        ComActActivityDO comActActivityDO = new ComActActivityDO();
        BeanUtils.copyProperties(comActActivityVO, comActActivityDO);
        Integer status = comActActivityVO.getStatus();
@@ -183,7 +180,8 @@
                try {
                    WxXCXTempSend util = new WxXCXTempSend();
                    String accessToken = util.getAppAccessToken();
                    ComActDO comActDO=comActDAO.selectById(comActActivityDO.getCommunityId());
                    R<SysTemplateConfigVO> r=userService.selectTemplate(comActDO.getAreaCode(),1);
                    activitySignVOS.forEach(activitySignVO1 -> {
                        // 变更社区活动推送订阅消息给用户
                        WxUtil.sendSubscribeHDBG(activitySignVO1.getOpenid(), accessToken,
@@ -193,18 +191,22 @@
                            comActActivityDO.getActivityAddr(),
                            com.panzhihua.common.utlis.DateUtils.format(comActActivityVO.getBeginAt(),
                                com.panzhihua.common.utlis.DateUtils.ymdhms_format),
                            comActActivityVO.getActivityAddr());
                            comActActivityVO.getActivityAddr(),r.getData().getTemplateId());
                    });
                } catch (Exception e) {
                    log.error("消息推送失败,失败原因:" + e.getMessage());
                }
            }
        }
        if (comActActivityVO.getHaveIntegralReward().intValue() == 2) {
            comActActivityVO.setRewardWay(null);
        }
        BeanUtils.copyProperties(comActActivityVO, comActActivityDO);
        // 结束时间大于当前时间则设置为“进行中”
        Date now = new Date();
        if (comActActivityVO.getSignUpEnd() != null && now.getTime() < comActActivityVO.getSignUpEnd().getTime()) {
        if (comActActivityVO.getSignUpEnd() != null && now.getTime() < comActActivityVO.getSignUpEnd().getTime()
        && now.getTime() > comActActivityVO.getSignUpBegin().getTime()) {
            comActActivityDO.setStatus(3);
        }
        boolean b = this.updateById(comActActivityDO);
@@ -278,8 +280,7 @@
     */
    @Override
    public R cancelActivity(ComActActivityVO comActActivityVO) {
        ComActActivityDO comActActivityDO = new ComActActivityDO();
        comActActivityDO.setId(comActActivityVO.getId());
        ComActActivityDO comActActivityDO = comActActivityDAO.selectById(comActActivityVO.getId());
        comActActivityDO.setStatus(comActActivityVO.getStatus());
        comActActivityDO.setCancelReason(comActActivityVO.getCancelReason());
        int update = comActActivityDAO.updateById(comActActivityDO);
@@ -310,6 +311,12 @@
                if (!ObjectUtils.isEmpty(comActActSignDO)) {
                    comActActivityVO.setIsSign(1);
                    comActActivityVO.setIsVolunteer(comActActSignDO.getIsVolunteer());
                }
                List<ComActActRegistDO> regList = comActActRegistDAO.selectList(new QueryWrapper<ComActActRegistDO>().lambda()
                        .eq(ComActActRegistDO::getUserId, userId).eq(ComActActRegistDO::getActivityId, id).eq(ComActActRegistDO::getType, 1));
                if (!regList.isEmpty()) {
                    List<ComActActRegistDO> collect = regList.stream().sorted(Comparator.comparing(ComActActRegistDO::getId).reversed()).collect(Collectors.toList());
                    comActActivityVO.setTimes(collect.get(0).getTimes());
                }
            }
        }
@@ -477,13 +484,13 @@
                    JSONObject.parseObject(JSONObject.toJSONString(userInfoR.getData()), LoginUserInfoVO.class);
            // 查询当前活动下参与居民
            Integer residentCount = comActActSignDAO.selectCount(new QueryWrapper<ComActActSignDO>().lambda()
                    .eq(ComActActSignDO::getActivityId, activityId).eq(ComActActSignDO::getIsVolunteer, 0));
                    .eq(ComActActSignDO::getActivityId, activityId).eq(ComActActSignDO::getIsVolunteer, 0).eq(ComActActSignDO::getStatus, 1));
            if (volunteerMax != 0) {
                //志愿者活动
                boolean userIsVolunteer = loginUserInfoVO.getIsVolunteer() == 1;
                // 查询当前活动下参与志愿者
                Integer volunteerCount = comActActSignDAO.selectCount(new QueryWrapper<ComActActSignDO>().lambda()
                        .eq(ComActActSignDO::getActivityId, activityId).eq(ComActActSignDO::getIsVolunteer, 1));
                        .eq(ComActActSignDO::getActivityId, activityId).eq(ComActActSignDO::getIsVolunteer, 1).eq(ComActActSignDO::getStatus, 1));
                if (userIsVolunteer) {
                    //用户是志愿者以志愿者身份参加
                    if (volunteerMax > volunteerCount || volunteerMax.equals(-1)) {
@@ -544,6 +551,15 @@
                num = comActActSignDAO.insert(comActActSignDO);
            }
        } else {
            Integer regTimes = comActActRegistDAO.selectCount(new QueryWrapper<ComActActRegistDO>().lambda()
                    .eq(ComActActRegistDO::getActivityId, activityId).eq(ComActActRegistDO::getUserId, userId).eq(ComActActRegistDO::getType, 1));
            Integer canCancel = actActivityDO.getCanCancel();
            if (nonNull(canCancel) && canCancel.equals(2)) {
                return R.fail("该活动暂不支持取消");
            }
            if (regTimes > 0) {
                return R.fail("您已参与活动,不可取消");
            }
            if (isNull(signactivityVO.getReason())) {
                return R.fail("缺少取消原因");
            }
@@ -553,6 +569,16 @@
            comActActSignDO.setStatus(0);
            comActActSignDO.setReason(signactivityVO.getReason());
            num = comActActSignDAO.updateById(comActActSignDO);
            if (num > 0) {
                AddComActIntegralUserDTO addComActIntegralUserDTO = new AddComActIntegralUserDTO();
                addComActIntegralUserDTO.setUserId(userId);
                addComActIntegralUserDTO.setIntegralType(8);
                addComActIntegralUserDTO.setActivityType(1);
                addComActIntegralUserDTO.setIsVolunteer(comActActSignDO.getIsVolunteer());
                addComActIntegralUserDTO.setCommunityId(actActivityDO.getCommunityId());
                addComActIntegralUserDTO.setServiceId(activityId);
                comActIntegralUserTradeService.addIntegralTradeAdmin(addComActIntegralUserDTO);
            }
        }
        if (num > 0) {
            return R.ok(isVolunteer);
@@ -579,8 +605,13 @@
        List<ComActActivityDO> comActActivityDOS = comActActivityDAO.selectBatchIds(longs);
        List<ComActActivityVO> comActActivityVOS = new ArrayList<>();
        if (nonNull(status)) {
            comActActivityDOS = comActActivityDOS.stream()
                    .filter(activityDO -> activityDO.getStatus().equals(status)).collect(Collectors.toList());
            if(status.equals(4)){
                comActActivityDOS = comActActivityDOS.stream()
                        .filter(activityDO -> activityDO.getStatus().equals(3)||activityDO.getStatus().equals(4)).collect(Collectors.toList());
            }else{
                comActActivityDOS = comActActivityDOS.stream()
                        .filter(activityDO -> activityDO.getStatus().equals(status)).collect(Collectors.toList());
            }
        }
        if (!comActActivityDOS.isEmpty()) {
            comActActivityDOS.forEach(comActActivityDO -> {
@@ -609,7 +640,8 @@
                }
                comActActivityVO.setSingDate(createAt);
                comActActivityVO.setTimes(activitySignVO.getTimes());
                comActActivityVO.setAward(activitySignVO.getAward());
                Integer totalAward = comActActRegistDAO.selectTotalAwardWithRegist(activitySignVO.getActivityId(), userId);
                comActActivityVO.setAward(totalAward);
                comActActivityVOS.add(comActActivityVO);
            });
        }
@@ -813,6 +845,8 @@
            try {
                String accessToken = util.getAppAccessToken();
                actActivityList.forEach(actActivity -> {
                    ComActDO comActDO=comActDAO.selectById(actActivity.getCommunityId());
                    R<SysTemplateConfigVO> r=userService.selectTemplate(comActDO.getAreaCode(),9);
                    // 查询报名活动人员列表
                    List<ComActActSignDO> actSignList = comActActSignDAO.selectList(new QueryWrapper<ComActActSignDO>()
                        .lambda().eq(ComActActSignDO::getActivityId, actActivity.getId()));
@@ -820,12 +854,13 @@
                        // 查询用户openId
                        Map<String, String> map = comActActSignDAO.getUserOpenId(actSign.getUserId());
                        if (map != null) {
                            String openid = map.get("openid");
                            // 推送消息
                            WxUtil.sendSubscribeHDJJKS(openid, accessToken, actActivity.getActivityName(),
                                com.panzhihua.common.utlis.DateUtils.format(actActivity.getBeginAt(),
                                    com.panzhihua.common.utlis.DateUtils.ymdhms_format),
                                actActivity.getActivityAddr(), actSignList.size() + "");
                                actActivity.getActivityAddr(), actSignList.size() + "",r.getData().getTemplateId());
                        }
                    });
@@ -870,6 +905,12 @@
                return R.fail("活动不存在!");
            }
            ComActActSignDO comActActSignDO = comActActSignDAO.selectOne(new QueryWrapper<ComActActSignDO>().lambda()
                    .eq(ComActActSignDO::getActivityId, activityId).eq(ComActActSignDO::getUserId, userId).eq(ComActActSignDO::getStatus, 1));
            if (isNull(comActActSignDO)) {
                return R.fail("活动未报名");
            }
            Date beginAt = comActActivityDO.getBeginAt();
            Date endAt = comActActivityDO.getEndAt();
            Date nowDate = new Date();
@@ -884,9 +925,13 @@
            if (signDayCount > 0) {
                return R.fail("请扫描新的签到码");
            }
            int limit = comActActivityDO.getLimit().intValue();
            if(limit != -1 && signAllCount >= limit){
                return R.fail("签到次数上限");
            Integer haveIntegralReward = comActActivityDO.getHaveIntegralReward();
            boolean isHave = nonNull(haveIntegralReward) && haveIntegralReward.equals(1);
            if (isHave) {
                int limit = comActActivityDO.getLimit().intValue();
                if(limit != -1 && signAllCount >= limit){
                    return R.fail("签到次数上限");
                }
            }
//        String activitySignInKey = String.join(DELIMITER, ACTIVITY_SIGN_IN, userId.toString(), activityId.toString());
@@ -897,24 +942,28 @@
            comActActRegistDO.setActivityId(activityId);
            comActActRegistDO.setType(1);
            comActActRegistDO.setUserId(userId);
            comActActRegistDO.setIsVolunteer(comActActRegistVO.getIsVolunteer());
            comActActRegistDO.setIsVolunteer(comActActSignDO.getIsVolunteer());
            comActActRegistDO.setCreateAt(nowDate);
            comActActRegistDO.setCodeId(comActActRegistVO.getCodeId());
            comActActRegistDO.setAward(comActActivityDO.getRewardIntegral());
            comActActRegistDO.setAward(isHave ? comActActivityDO.getRewardIntegral() : 0);
            comActActRegistDO.setPosition(comActActRegistVO.getPosition());
            comActActRegistDO.setTimes(signAllCount+1);
            int result = comActActRegistDAO.insert(comActActRegistDO);
            if (result > 0) {
                AddComActIntegralUserDTO addComActIntegralUserDTO=new AddComActIntegralUserDTO();
                addComActIntegralUserDTO.setUserId(userId);
                addComActIntegralUserDTO.setIntegralType(8);
                addComActIntegralUserDTO.setActivityType(1);
                addComActIntegralUserDTO.setCommunityId(comActActivityDO.getCommunityId());
                addComActIntegralUserDTO.setServiceId(activityId);
                comActIntegralUserTradeService.addIntegralTradeAdmin(addComActIntegralUserDTO);
//            ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
//            opsForValue.set(activitySignInKey, "", 1800L, TimeUnit.SECONDS);
                return R.ok(comActActivityDO.getRewardIntegral());
                if (isHave) {
                    boolean isVolunteerAct = comActActivityDO.getVolunteerMax() != 0;
                    AddComActIntegralUserDTO addComActIntegralUserDTO=new AddComActIntegralUserDTO();
                    addComActIntegralUserDTO.setUserId(userId);
                    addComActIntegralUserDTO.setIntegralType(isVolunteerAct ? 5 : 4);
                    addComActIntegralUserDTO.setActivityType(1);
                    addComActIntegralUserDTO.setIsVolunteer(comActActSignDO.getIsVolunteer());
                    addComActIntegralUserDTO.setCommunityId(comActActivityDO.getCommunityId());
                    addComActIntegralUserDTO.setServiceId(activityId);
                    comActIntegralUserTradeService.addIntegralTradeAdmin(addComActIntegralUserDTO);
                    return R.ok(comActActivityDO.getRewardIntegral());
                } else {
                    return R.ok();
                }
            }
            return R.fail("网络错误,请重试");
        }