| package com.matrix.system.shopXcx.api.action; | 
|   | 
| import cn.hutool.core.collection.CollUtil; | 
| import cn.hutool.core.date.DateUtil; | 
| import cn.hutool.core.util.ObjectUtil; | 
| import cn.hutool.core.util.RandomUtil; | 
| import cn.hutool.core.util.StrUtil; | 
| import com.alibaba.fastjson.JSON; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.matrix.component.redis.RedisUserLoginUtils; | 
| import com.matrix.core.pojo.AjaxResult; | 
| import com.matrix.core.tools.StringUtils; | 
| import com.matrix.system.activity.dao.ActivitySignAwardSetDao; | 
| import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao; | 
| import com.matrix.system.activity.dao.ActivitySignRecordDao; | 
| import com.matrix.system.activity.dao.ActivitySignWriteoffDao; | 
| import com.matrix.system.activity.entity.ActivitySignAwardSet; | 
| import com.matrix.system.activity.entity.ActivitySignReceiveRecord; | 
| import com.matrix.system.activity.entity.ActivitySignRecord; | 
| import com.matrix.system.activity.entity.ActivitySignWriteoff; | 
| import com.matrix.system.common.constance.AppConstance; | 
| import com.matrix.system.hive.bean.SysVipInfo; | 
| import com.matrix.system.score.dao.ScoreVipDetailDao; | 
| import com.matrix.system.score.entity.ScoreVipDetail; | 
| import com.matrix.system.score.service.ScoreVipDetailService; | 
| import com.matrix.system.shopXcx.api.service.WxShopLogisticsQueryService; | 
| import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil; | 
| import com.matrix.system.shopXcx.api.vo.ActivitySignAwardSetVo; | 
| import com.matrix.system.shopXcx.api.vo.LuckyDrawBasicInfoJsonVo; | 
| import com.matrix.system.shopXcx.api.vo.LuckyDrawInfoVo; | 
| import com.matrix.system.shopXcx.api.vo.LuckyDrawSuccessVo; | 
| import com.matrix.system.shopXcx.bean.ShopActivities; | 
| import com.matrix.system.shopXcx.bean.ShopCoupon; | 
| import com.matrix.system.shopXcx.bean.ShopCouponRecord; | 
| import com.matrix.system.shopXcx.dao.*; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiOperation; | 
| import io.swagger.annotations.ApiResponse; | 
| import io.swagger.annotations.ApiResponses; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
| @Api(tags = "转盘抽奖活动接口类") | 
| @RestController | 
| @RequestMapping(value = "/wxapi/luckydraw") | 
| public class WxShopActivitiesLuckydrawAction { | 
|   | 
|     @Autowired | 
|     private ShopActivitiesDao shopActivitiesDao; | 
|   | 
|     @Autowired | 
|     private RedisUserLoginUtils redisUserLoginUtils; | 
|   | 
|     @Autowired | 
|     private ActivitySignAwardSetDao activitySignAwardSetDao; | 
|   | 
|     @Autowired | 
|     private ActivitySignReceiveRecordDao activitySignReceiveRecordDao; | 
|   | 
|     @Autowired | 
|     private ActivitySignWriteoffDao activitySignWriteoffDao; | 
|   | 
|     @Autowired | 
|     private ActivitySignRecordDao activitySignRecordDao; | 
|   | 
|     @Autowired | 
|     ShopDeliveryInfoDao shopDeliveryInfoDao; | 
|   | 
|     @Autowired | 
|     private ShopLogisticsInfoDao shopLogisticsInfoDao; | 
|     @Autowired | 
|     private ShopReceiveAddressDao shopReceiveAddressDao; | 
|   | 
|     @Autowired | 
|     private WxShopLogisticsQueryService wxShopLogisticsQueryService; | 
|     @Autowired | 
|     private ScoreVipDetailService scoreVipDetailService; | 
|     @Autowired | 
|     private ShopCouponDao shopCouponDao; | 
|     @Autowired | 
|     private WxShopCouponUtil wxShopCouponUtil; | 
|     @Autowired | 
|     private ShopCouponRecordDao shopCouponRecordDao; | 
|     @Autowired | 
|     private ScoreVipDetailDao scoreVipDetailDao; | 
|   | 
|     @ApiOperation(value = "获取抽奖基本信息", notes = "") | 
|     @ApiResponses({ | 
|             @ApiResponse(code = 200, message = "ok", response = LuckyDrawInfoVo.class) | 
|     }) | 
|     @GetMapping(value = "/getLuckydrawBasicInfo") | 
|     public AjaxResult getLuckydrawBasicInfo() { | 
|         //获取登录人信息 | 
|         SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class); | 
|         Long companyId = loginUser.getCompanyId(); | 
|         Long userId = loginUser.getId(); | 
|         //获取抽奖活动的信息 | 
|         LuckyDrawInfoVo luckyDrawInfoVo = new LuckyDrawInfoVo(); | 
|         AjaxResult ajaxResult = new AjaxResult(); | 
|   | 
|         ShopActivities shopActivities = shopActivitiesDao.selectOneByCompanyIdAndActTypeAndActStatus(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW,ShopActivities.ACTSTATUS_STATUS_ING); | 
|         if(ObjectUtil.isEmpty(shopActivities)){ | 
|             ajaxResult = AjaxResult.buildFailInstance("活动还没有开始"); | 
|             ajaxResult.setData(luckyDrawInfoVo); | 
|             return ajaxResult; | 
|         } | 
|         Long actId = shopActivities.getId(); | 
|         luckyDrawInfoVo.setActName(shopActivities.getActName()); | 
|         luckyDrawInfoVo.setActCode(shopActivities.getActCode()); | 
|         luckyDrawInfoVo.setId(shopActivities.getId()); | 
|         String actContent = shopActivities.getActContent(); | 
|         LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); | 
|         luckyDrawInfoVo.setLuckyDrawBasicInfoJsonVo(luckyDrawBasicInfoJsonVo); | 
|   | 
|         List<ActivitySignAwardSetVo> activitySignAwardSetVos = activitySignAwardSetDao | 
|                 .selectListByActIDAndCompanyId(actId,companyId, ActivitySignAwardSet.AWARDSTATE_WORK); | 
|         luckyDrawInfoVo.setActivitySignAwardSetVos(activitySignAwardSetVos); | 
|   | 
|         /** | 
|          * 今日是否能参与 | 
|          * 用户今日剩余抽奖次数 | 
|          *      今日参与次数<每日允许最大参与次数都可以抽奖 | 
|          */ | 
|         //获取活动设置的参与次数 | 
|         Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); | 
|         //获取今日参与次数 | 
|         List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId,new Date()); | 
|         if(CollUtil.isNotEmpty(activityRecords)){ | 
|             if(activityRecords.size() >= wmkcjjh){ | 
|                 luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_NOT); | 
|                 luckyDrawInfoVo.setLuckyDrawTime(0); | 
|             }else{ | 
|                 luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_YES); | 
|                 luckyDrawInfoVo.setLuckyDrawTime(wmkcjjh-activityRecords.size()); | 
|             } | 
|         }else{ | 
|             luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_YES); | 
|             luckyDrawInfoVo.setLuckyDrawTime(wmkcjjh); | 
|         } | 
|   | 
|         //获取用户当前积分 | 
|         int totalScore = scoreVipDetailDao.selectUserTotalScore(userId); | 
|         luckyDrawInfoVo.setTotalScore(totalScore); | 
|         ajaxResult = AjaxResult.buildSuccessInstance(""); | 
|         ajaxResult.setData(luckyDrawInfoVo); | 
|         return ajaxResult; | 
|     } | 
|   | 
|     /** | 
|      * 点击抽奖 | 
|      * | 
|      */ | 
|     @ApiOperation(value = "点击抽奖", notes = "") | 
|     @ApiResponses({ | 
|             @ApiResponse(code = 200, message = "ok", response = LuckyDrawSuccessVo.class) | 
|     }) | 
|   | 
|     @GetMapping(value = "/clickLuckyDraw/{actId}") | 
|     @ResponseBody | 
|     @Transactional | 
|     public AjaxResult clickLuckyDraw(@PathVariable("actId") long actId) { | 
|         SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class); | 
|         Long userId = user.getId(); | 
|         Long companyId = user.getCompanyId(); | 
|         /** | 
|          * 活动是否存在 | 
|          * 活动是否已经开始 | 
|          * 免费抽奖还是积分抽奖 | 
|          *      积分抽奖一次一次换 | 
|          *      减少积分 | 
|          *  是否中奖 | 
|          *      中奖规则 | 
|          *  奖品处理 | 
|          * | 
|          */ | 
|         //活动是否存在 | 
|         ShopActivities shopActivities = shopActivitiesDao.selectById(actId); | 
|         if (ObjectUtil.isEmpty(shopActivities)) { | 
|             return AjaxResult.buildFailInstance("活动不存在"); | 
|         } | 
|         //活动是否已经开始 | 
|         Integer actStatus = shopActivities.getActStatus(); | 
|         if(ShopActivities.ACTSTATUS_STATUS_ING != actStatus) { | 
|             return AjaxResult.buildFailInstance("活动未开始"); | 
|         } | 
|         //获取今日抽奖总次数 | 
|         String actContent = shopActivities.getActContent(); | 
|         LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); | 
|         List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId, DateUtil.date()); | 
|         if(CollUtil.isNotEmpty(activityRecords)){ | 
|             Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); | 
|             Integer jfdhcs = luckyDrawBasicInfoJsonVo.getJfdhcs(); | 
|             if(activityRecords.size() >= (wmkcjjh+jfdhcs)){ | 
|                 return AjaxResult.buildFailInstance("明天再来抽奖吧"); | 
|             } | 
|         } | 
|   | 
|         //生成抽奖记录 | 
|         ActivitySignRecord activitySignRecordAdd = new ActivitySignRecord(); | 
|         activitySignRecordAdd.setCompanyId(companyId); | 
|         activitySignRecordAdd.setCreateBy(user.getVipName()); | 
|         activitySignRecordAdd.setCreateTime(DateUtil.date()); | 
|         activitySignRecordAdd.setUpdateBy(user.getVipName()); | 
|         activitySignRecordAdd.setUpdateTime(DateUtil.date()); | 
|         activitySignRecordAdd.setActivityId(actId); | 
|         activitySignRecordAdd.setSignTime(DateUtil.date()); | 
|         activitySignRecordAdd.setUserId(userId); | 
|         activitySignRecordDao.insert(activitySignRecordAdd); | 
|   | 
|         /** | 
|          获取中奖概率 | 
|          中奖了获取奖品ID | 
|          没有中奖则获取谢谢参与的奖品ID | 
|          每个人最多中奖次数 | 
|          */ | 
|   | 
|         List<LuckyDrawSuccessVo> luckyDrawSuccessVos = new ArrayList<>(); | 
|   | 
|         //获取谢谢参与奖 | 
|         QueryWrapper<ActivitySignAwardSet> queryWrapper = new QueryWrapper<>(); | 
|         queryWrapper.eq("award_rule",ActivitySignAwardSet.AWARDRULE_NORMAL); | 
|         queryWrapper.eq("company_id",companyId); | 
|         queryWrapper.eq("activity_id",actId); | 
|         ActivitySignAwardSet activitySignAwardSetNormal = activitySignAwardSetDao.selectOne(queryWrapper); | 
|         //每个人最多中奖次数 | 
|         Integer zzjcs = luckyDrawBasicInfoJsonVo.getZzjcs(); | 
|         QueryWrapper<ActivitySignReceiveRecord> queryWrapperActivitySignReceiveRecord = new QueryWrapper<>(); | 
|         queryWrapperActivitySignReceiveRecord.eq("company_id", companyId); | 
|         queryWrapperActivitySignReceiveRecord.eq("activity_id", actId); | 
|         queryWrapperActivitySignReceiveRecord.eq("user_id", userId); | 
|         queryWrapperActivitySignReceiveRecord.ne("award_id", activitySignAwardSetNormal.getId()); | 
|         List<ActivitySignReceiveRecord> activitySignReceiveRecordDone = activitySignReceiveRecordDao.selectList(queryWrapperActivitySignReceiveRecord); | 
|         if(CollUtil.isNotEmpty(activitySignReceiveRecordDone)){ | 
|             if(activitySignReceiveRecordDone.size() >= zzjcs){ | 
|                 //生成领取记录 | 
|                 ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); | 
|                 activitySignReceiveRecord.setUserId(userId); | 
|                 activitySignReceiveRecord.setReceiveTime(DateUtil.date()); | 
|                 activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); | 
|                 activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); | 
|                 activitySignReceiveRecord.setActivityId(actId); | 
|                 activitySignReceiveRecord.setCompanyId(companyId); | 
|                 activitySignReceiveRecord.setCreateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setCreateTime(new Date()); | 
|                 activitySignReceiveRecord.setUpdateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setUpdateTime(new Date()); | 
|                 activitySignReceiveRecordDao.insert(activitySignReceiveRecord); | 
|   | 
|                 LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); | 
|                 luckyDrawSuccessVo.setType(1); | 
|                 luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); | 
|                 luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); | 
|                 luckyDrawSuccessVos.add(luckyDrawSuccessVo); | 
|   | 
|                 AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); | 
|                 ajaxResult.setData(luckyDrawSuccessVos); | 
|                 return ajaxResult; | 
|             } | 
|         } | 
|         //总中奖率 | 
|         int zzjl = luckyDrawBasicInfoJsonVo.getZzjl(); | 
|         int randomInt = RandomUtil.randomInt(1, 100); | 
|         //不中奖的分界线 | 
|         int failureScope = 100 - zzjl; | 
|         if(failureScope >= randomInt){ | 
|             //生成领取记录 | 
|             ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); | 
|             activitySignReceiveRecord.setUserId(userId); | 
|             activitySignReceiveRecord.setReceiveTime(DateUtil.date()); | 
|             activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); | 
|             activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); | 
|             activitySignReceiveRecord.setActivityId(actId); | 
|             activitySignReceiveRecord.setCompanyId(companyId); | 
|             activitySignReceiveRecord.setCreateBy(user.getVipName()); | 
|             activitySignReceiveRecord.setCreateTime(new Date()); | 
|             activitySignReceiveRecord.setUpdateBy(user.getVipName()); | 
|             activitySignReceiveRecord.setUpdateTime(new Date()); | 
|             activitySignReceiveRecordDao.insert(activitySignReceiveRecord); | 
|   | 
|             LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); | 
|             luckyDrawSuccessVo.setType(1); | 
|             luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); | 
|             luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); | 
|             luckyDrawSuccessVos.add(luckyDrawSuccessVo); | 
|   | 
|             AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); | 
|             ajaxResult.setData(luckyDrawSuccessVos); | 
|             return ajaxResult; | 
|         } | 
|         //中奖 | 
|         if(failureScope < randomInt){ | 
|             //获取奖品 | 
|             ActivitySignAwardSet activitySignAwardSetCumulativeDay = updateShopActivityAndAwardSet(actId); | 
|   | 
|             if(ObjectUtil.isNotEmpty(activitySignAwardSetCumulativeDay)){ | 
|                 LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); | 
|                 luckyDrawSuccessVo.setType(2); | 
|                 luckyDrawSuccessVo.setAwardType(activitySignAwardSetCumulativeDay.getAwardType()); | 
|                 luckyDrawSuccessVo.setAwardName(activitySignAwardSetCumulativeDay.getAwardName()); | 
|                 luckyDrawSuccessVo.setAwardImg(activitySignAwardSetCumulativeDay.getIntroduceImg()); | 
|                 luckyDrawSuccessVo.setAwardState(activitySignAwardSetCumulativeDay.getAwardState()); | 
|                 //新增奖品领取记录 | 
|                 ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); | 
|                 activitySignReceiveRecord.setUserId(userId); | 
|                 activitySignReceiveRecord.setReceiveTime(DateUtil.date()); | 
|                 activitySignReceiveRecord.setAwardId(activitySignAwardSetCumulativeDay.getId()); | 
|                 activitySignReceiveRecord.setActivityId(actId); | 
|                 activitySignReceiveRecord.setCompanyId(companyId); | 
|                 activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); | 
|                 activitySignReceiveRecord.setCreateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setCreateTime(new Date()); | 
|                 activitySignReceiveRecord.setUpdateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setUpdateTime(new Date()); | 
|                 /** | 
|                  * 奖项类型(1:自定义产品2:积分3:优惠券4:店铺商品) | 
|                  * | 
|                  * todo:4:店铺商品 | 
|                  */ | 
|                 //1:自定义产品 | 
|                 if(ActivitySignAwardSet.AWARDTYPE_CUSTOMIZE == activitySignAwardSetCumulativeDay.getAwardType()) { | 
|                     activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_ING); | 
|                     String randomString = StringUtils.getRandomString(8); | 
|                     activitySignReceiveRecord.setWriteOffCode(randomString); | 
|   | 
|                     /** | 
|                      * 获取对应奖品的领取方式(兑奖方式(1:线下兑换2:物流配送3:客服兑换) | 
|                      */ | 
|                     luckyDrawSuccessVo.setWriteOffCode(randomString); | 
|                     luckyDrawSuccessVo.setAwardWay(activitySignAwardSetCumulativeDay.getAwardWay()); | 
|                     //2:物流配送 | 
|                     luckyDrawSuccessVo.setOperationTip(activitySignAwardSetCumulativeDay.getOperationTip()); | 
|                     //1:线下兑换 | 
|                     if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSetCumulativeDay.getAwardWay()) { | 
|                         luckyDrawSuccessVo.setIntroduceTip(activitySignAwardSetCumulativeDay.getIntroduceTip()); | 
|                         luckyDrawSuccessVo.setPrizeAddress(activitySignAwardSetCumulativeDay.getPrizeAddress()); | 
|                         luckyDrawSuccessVo.setPrizeStartTime(activitySignAwardSetCumulativeDay.getPrizeStartTime()); | 
|                         luckyDrawSuccessVo.setPrizeEndTime(activitySignAwardSetCumulativeDay.getPrizeEndTime()); | 
|                     } | 
|                     //3:客服兑换 | 
|                     if(ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSetCumulativeDay.getAwardWay()) { | 
|                         luckyDrawSuccessVo.setWechatImg(activitySignAwardSetCumulativeDay.getWechatImg()); | 
|                         luckyDrawSuccessVo.setPrizeStartTime(activitySignAwardSetCumulativeDay.getPrizeStartTime()); | 
|                         luckyDrawSuccessVo.setPrizeEndTime(activitySignAwardSetCumulativeDay.getPrizeEndTime()); | 
|                     } | 
|                 } | 
|                 //2:积分 | 
|                 if(ActivitySignAwardSet.AWARDTYPE_SCORE == activitySignAwardSetCumulativeDay.getAwardType()) { | 
|                     luckyDrawSuccessVo.setScoreCnt(activitySignAwardSetCumulativeDay.getScoreCnt()); | 
|                 } | 
|                 //3:优惠券 | 
|                 if(ActivitySignAwardSet.AWARDTYPE_COUPON == activitySignAwardSetCumulativeDay.getAwardType()) { | 
|                     luckyDrawSuccessVo.setCouponName(activitySignAwardSetCumulativeDay.getCouponName()); | 
|                     //获取优惠券 | 
|                     int couponId = Integer.parseInt(activitySignAwardSetCumulativeDay.getCouponId()); | 
|                     ShopCoupon shopCoupon = shopCouponDao.selectById(couponId); | 
|                     // 如果没有找到该优惠券 | 
|                     if (shopCoupon == null) { | 
|                         return new AjaxResult(AjaxResult.STATUS_FAIL, "没有找到该优惠券!"); | 
|                     } | 
|                     // 如果优惠券有数量限制并且已经领完 | 
|                     if (shopCoupon.getMaxQuantity() >= 0 && (shopCoupon.getMaxQuantity() <= shopCoupon.getQuantityReceive())) { | 
|                         return new AjaxResult(AjaxResult.STATUS_FAIL, "优惠券已领完!"); | 
|                     } | 
|                     boolean newPeople = wxShopCouponUtil.verifyIsNewPeople(userId); | 
|                     // 如果改券是新人专属且当前用户不是新人 | 
|                     if (AppConstance.COUPON_GET_LIMT_NEW.equals(shopCoupon.getGetLimit()) && !newPeople) { | 
|                         return new AjaxResult(AjaxResult.STATUS_FAIL, "该优惠券为新人专享优惠券!"); | 
|                     } | 
|                     ShopCouponRecord insertRecord = new ShopCouponRecord(); | 
|                     insertRecord.setCreateBy(AppConstance.SYSTEM_USER); | 
|                     insertRecord.setUpdateBy(AppConstance.SYSTEM_USER); | 
|                     insertRecord.setCId(couponId); | 
|                     insertRecord.setUserId(userId); | 
|                     insertRecord.setIsUsing(2); | 
|                     int i = shopCouponRecordDao.insert(insertRecord); | 
|                     // 如果插入领取记录表失败 | 
|                     if (i < 0) { | 
|                         return new AjaxResult(AjaxResult.STATUS_FAIL, "优惠券领取失败!"); | 
|                     } | 
|                     shopCoupon.setQuantityReceive(shopCoupon.getQuantityReceive() + 1); | 
|                     shopCouponDao.updateByModel(shopCoupon); | 
|                 } | 
|                 activitySignReceiveRecordDao.insert(activitySignReceiveRecord); | 
|                 //累计奖励积分,对应用户积分加减 | 
|                 if(ActivitySignAwardSet.AWARDTYPE_SCORE == activitySignAwardSetCumulativeDay.getAwardType()) { | 
|                     int awardType = activitySignAwardSetCumulativeDay.getAwardType(); | 
|                     if(ActivitySignAwardSet.AWARDTYPE_SCORE == awardType){ | 
|                         int scoreCnt = activitySignAwardSetCumulativeDay.getScoreCnt(); | 
|                         if(scoreCnt > 0){ | 
|                             scoreVipDetailService.addScore(userId,null,null,scoreCnt, | 
|                                     activitySignReceiveRecord.getId(), ScoreVipDetail.SCORE_VIP_TYPE_JOIN_ACTIVE,"积分"); | 
|                         } | 
|                     } | 
|                 } | 
|                 //生成核销记录 | 
|                 if(ActivitySignAwardSet.AWARDTYPE_CUSTOMIZE == activitySignAwardSetCumulativeDay.getAwardType()) { | 
|                     ActivitySignWriteoff activitySignWriteoff = new ActivitySignWriteoff(); | 
|                     //线下兑换和客服兑换 | 
|                     if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSetCumulativeDay.getAwardWay() | 
|                             || ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSetCumulativeDay.getAwardWay()) { | 
|                         activitySignWriteoff.setWriteoffCode(activitySignReceiveRecord.getWriteOffCode()); | 
|                     } | 
|                     activitySignWriteoff.setActId(actId); | 
|                     activitySignWriteoff.setAwardId(activitySignAwardSetCumulativeDay.getId()); | 
|                     activitySignWriteoff.setWinTime(DateUtil.date()); | 
|                     if(ActivitySignAwardSet.AWARDWAY_TWO == activitySignAwardSetCumulativeDay.getAwardWay()) { | 
|                         activitySignWriteoff.setState(ActivitySignWriteoff.STATE_TWO); | 
|                     }else { | 
|                         activitySignWriteoff.setState(ActivitySignWriteoff.STATE_ONE); | 
|                     } | 
|                     activitySignWriteoff.setUserId(userId); | 
|                     activitySignWriteoff.setCompanyId(companyId); | 
|                     activitySignWriteoff.setReceiveId(activitySignReceiveRecord.getId()); | 
|                     activitySignWriteoff.setCreateBy(user.getVipName()); | 
|                     activitySignWriteoff.setCreateTime(new Date()); | 
|                     activitySignWriteoff.setUpdateBy(user.getVipName()); | 
|                     activitySignWriteoff.setUpdateTime(new Date()); | 
|                     activitySignWriteoffDao.insert(activitySignWriteoff); | 
|                 } | 
|                 luckyDrawSuccessVos.add(luckyDrawSuccessVo); | 
|             }else{ | 
|                 //生成领取记录 | 
|                 ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); | 
|                 activitySignReceiveRecord.setUserId(userId); | 
|                 activitySignReceiveRecord.setReceiveTime(DateUtil.date()); | 
|                 activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); | 
|                 activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); | 
|                 activitySignReceiveRecord.setActivityId(actId); | 
|                 activitySignReceiveRecord.setCompanyId(companyId); | 
|                 activitySignReceiveRecord.setCreateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setCreateTime(new Date()); | 
|                 activitySignReceiveRecord.setUpdateBy(user.getVipName()); | 
|                 activitySignReceiveRecord.setUpdateTime(new Date()); | 
|                 activitySignReceiveRecordDao.insert(activitySignReceiveRecord); | 
|   | 
|                 LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); | 
|                 luckyDrawSuccessVo.setType(1); | 
|                 luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); | 
|                 luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); | 
|                 luckyDrawSuccessVos.add(luckyDrawSuccessVo); | 
|   | 
|                 AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); | 
|                 ajaxResult.setData(luckyDrawSuccessVos); | 
|                 return ajaxResult; | 
|             } | 
|         } | 
|         AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); | 
|         ajaxResult.setData(luckyDrawSuccessVos); | 
|         return ajaxResult; | 
|     } | 
|   | 
|     //获取奖品并索引+1 已领取+1 | 
|     public synchronized ActivitySignAwardSet updateShopActivityAndAwardSet(Long actId){ | 
|         //通过活动ID获取对应的活动 | 
|         ShopActivities shopActivities = shopActivitiesDao.selectById(actId); | 
|         String actContent = shopActivities.getActContent(); | 
|         LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); | 
|   | 
|         //中奖索引 | 
|         Integer awrdLineIndex = luckyDrawBasicInfoJsonVo.getAwrdLineIndex(); | 
|         //中奖序列 | 
|         String awardLine = luckyDrawBasicInfoJsonVo.getAwardLine(); | 
|         ActivitySignAwardSet activitySignAwardSet = null; | 
|         if(awardLine.length() > 0) { | 
|             String substring = awardLine.substring(1, awardLine.length() - 1); | 
|             List<String> awardList = StrUtil.splitTrim(substring, ","); | 
|             if(awrdLineIndex < awardList.size()){ | 
|                 //中奖 | 
|                 Long awardId = Long.parseLong(awardList.get(awrdLineIndex + 1)); | 
|                 ActivitySignAwardSet activitySignAwardSetGet = activitySignAwardSetDao.selectById(awardId); | 
|                 //奖项库存数量 | 
|                 int awardInventoryCnt = activitySignAwardSetGet.getAwardInventoryCnt(); | 
|                 //已派发数量 | 
|                 int awardDistributeCnt = activitySignAwardSetGet.getAwardDistributeCnt(); | 
|                 if(awardDistributeCnt < awardInventoryCnt){ | 
|                     activitySignAwardSet = activitySignAwardSetGet; | 
|                     activitySignAwardSetGet.setAwardDistributeCnt(awardDistributeCnt +1); | 
|                     activitySignAwardSetDao.updateById(activitySignAwardSetGet); | 
|   | 
|                     //将基本信息转换成JSON字符串存储到活动主表的act_content字段 | 
|                     luckyDrawBasicInfoJsonVo.setAwrdLineIndex(awrdLineIndex + 1); | 
|                     String json= JSON.toJSONString(luckyDrawBasicInfoJsonVo); | 
|                     shopActivities.setActContent(json); | 
|                     shopActivitiesDao.updateByModel(shopActivities); | 
|                 } | 
|             } | 
|         } | 
|         return activitySignAwardSet; | 
|     } | 
|   | 
|     /** | 
|      * 是否可以积分兑换 | 
|      * | 
|      * @param | 
|      * @return | 
|      */ | 
|     @ApiOperation(value = "是否可以积分兑换", notes = "") | 
|     @GetMapping(value = "scoreLuckyDraw/{actId}") | 
|     @ResponseBody | 
|     public AjaxResult logisticsInsureById(@PathVariable("actId") Long actId) { | 
|         SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class); | 
|         Long userId = loginUser.getId(); | 
|         Long companyId = loginUser.getCompanyId(); | 
|         //获取用户总积分 | 
|         int scoreAll = scoreVipDetailDao.selectUserTotalScore(userId); | 
|         //获取活动的积分换取 | 
|         ShopActivities shopActivities = shopActivitiesDao.selectById(actId); | 
|         String actContent = shopActivities.getActContent(); | 
|         LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); | 
|         Integer dhycjfs = luckyDrawBasicInfoJsonVo.getDhycjfs(); | 
|         if(dhycjfs == 0){ | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "积分兑换不能兑换抽奖次数"); | 
|         } | 
|         if(scoreAll < dhycjfs){ | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "积分不足"); | 
|         } | 
|         //获取今日抽奖总次数 | 
|         List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId, DateUtil.date()); | 
|         if(CollUtil.isNotEmpty(activityRecords)){ | 
|             Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); | 
|             Integer jfdhcs = luckyDrawBasicInfoJsonVo.getJfdhcs(); | 
|             if(activityRecords.size() >= (wmkcjjh+jfdhcs)){ | 
|                 return AjaxResult.buildFailInstance("明天再来抽奖吧"); | 
|             } | 
|         } | 
|         //换取次数,减去积分 | 
|         scoreVipDetailService.deductionScore(userId,null,null,dhycjfs, | 
|                 null, ScoreVipDetail.SCORE_VIP_TYPE_JOIN_ACTIVE,"兑换抽奖机会"); | 
|         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "兑换成功!"); | 
|     } | 
|   | 
|   | 
|   | 
|   | 
|   | 
| } |