| | |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.matrix.biz.dao.BizUserDao; |
| | | import com.matrix.core.constance.MatrixConstance; |
| | | import com.matrix.core.exception.GlobleException; |
| | | import com.matrix.core.tools.DateUtil; |
| | | import com.matrix.core.tools.StringUtils; |
| | | import com.matrix.system.common.bean.BusParameterSettings; |
| | | import com.matrix.system.common.dao.BusParameterSettingsDao; |
| | | import com.matrix.system.common.dao.SysUsersDao; |
| | | import com.matrix.system.hive.bean.SysVipInfo; |
| | | import com.matrix.system.hive.dao.SysVipInfoDao; |
| | | import com.matrix.system.score.constant.ScoreSettingConstant; |
| | | import com.matrix.system.score.dao.ScoreUseRecordDao; |
| | |
| | | ScoreUseRecordDao scoreUseRecordDao; |
| | | |
| | | @Autowired |
| | | BizUserDao bizUserDao; |
| | | SysVipInfoDao sysVipInfoDao; |
| | | |
| | | @Autowired |
| | | SysVipInfoDao vipInfoDao; |
| | |
| | | * 扣除用户积分 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deductionScore(String openId, Long vipId,Long shopId, Integer score, Long businessId, int type) { |
| | | Long companyId=null; |
| | | if(openId!=null){ |
| | | companyId= bizUserDao.findByOpenId(openId).getCompanyId(); |
| | | }else if(vipId!=null){ |
| | | companyId= vipInfoDao.selectById(vipId).getCompanyId(); |
| | | }else{ |
| | | throw new IllegalArgumentException("vipId,openId必须有一个"); |
| | | public void deductionScore(Long vipId, Long oprationUserId, Long shopId, Integer score, Long businessId, int type, String remark) { |
| | | Long companyId = vipInfoDao.selectById(vipId).getCompanyId(); |
| | | |
| | | String createBy = MatrixConstance.SYSTEM_USER; |
| | | if (oprationUserId != null) { |
| | | createBy = sysUsersDao.selectById(oprationUserId).getSuName(); |
| | | } |
| | | |
| | | List<ScoreVipDetail> effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(openId,null); |
| | | List<ScoreVipDetail> effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(vipId); |
| | | |
| | | for (ScoreVipDetail scoreVipDetail : effectiveScoreList) { |
| | | |
| | |
| | | //余额充足 |
| | | currentDedution = score; |
| | | scoreVipDetail.setRemainScore(surplus); |
| | | if(surplus==0){ |
| | | if (surplus == 0) { |
| | | scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); |
| | | } |
| | | scoreVipDetailDao.updateById(scoreVipDetail); |
| | | score=0; |
| | | score = 0; |
| | | } else { |
| | | currentDedution = scoreVipDetail.getRemainScore(); |
| | | scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); |
| | | scoreVipDetail.setRemainScore(0); |
| | | scoreVipDetailDao.updateById(scoreVipDetail); |
| | | score=Math.abs(surplus); |
| | | score = Math.abs(surplus); |
| | | } |
| | | |
| | | |
| | | //新增扣除记录 |
| | | scoreUseRecord.setCreateBy(MatrixConstance.SYSTEM_USER); |
| | | scoreUseRecord.setUpdateBy(MatrixConstance.SYSTEM_USER); |
| | | scoreUseRecord.setCreateBy(createBy); |
| | | scoreUseRecord.setUpdateBy(createBy); |
| | | scoreUseRecord.setCreateTime(DateTime.now()); |
| | | scoreUseRecord.setUpdateTime(DateTime.now()); |
| | | scoreUseRecord.setNowScore(scoreVipDetail.getRemainScore()); |
| | |
| | | scoreUseRecord.setRecNum(-currentDedution); |
| | | scoreUseRecord.setType(type); |
| | | scoreUseRecord.setShopId(shopId); |
| | | scoreUseRecord.setOpenId(openId); |
| | | scoreUseRecord.setVipId(vipId); |
| | | scoreUseRecord.setRemarks(remark); |
| | | scoreUseRecord.setOprationUserId(oprationUserId); |
| | | scoreUseRecordDao.insert(scoreUseRecord); |
| | | |
| | | if(surplus > 0 || surplus == 0){ |
| | | if (surplus > 0 || surplus == 0) { |
| | | break; |
| | | } |
| | | } |
| | | if(score>0){ |
| | | if (score > 0) { |
| | | throw new GlobleException("积分不足"); |
| | | } |
| | | } |
| | |
| | | * 新增用户积分 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addScore(String openId, Long vipId, Long oprationUserId,Long shopId, Integer score, Long businessId, int type,String remark) { |
| | | Long companyId=null; |
| | | if(openId!=null){ |
| | | companyId= bizUserDao.findByOpenId(openId).getCompanyId(); |
| | | }else if(vipId!=null){ |
| | | companyId= vipInfoDao.selectById(vipId).getCompanyId(); |
| | | }else{ |
| | | throw new IllegalArgumentException("vipId,openId必须有一个"); |
| | | } |
| | | if(score<0){ |
| | | public void addScore(Long vipId, Long oprationUserId, Long shopId, Integer score, Long businessId, int type, String remark) { |
| | | Long companyId = vipInfoDao.selectById(vipId).getCompanyId(); |
| | | |
| | | if (score < 0) { |
| | | throw new IllegalArgumentException("score必须有为大于零的数"); |
| | | } |
| | | |
| | | String createBy=MatrixConstance.SYSTEM_USER; |
| | | if(oprationUserId!=null){ |
| | | createBy=sysUsersDao.selectById(oprationUserId).getSuName(); |
| | | String createBy = MatrixConstance.SYSTEM_USER; |
| | | if (oprationUserId != null) { |
| | | createBy = sysUsersDao.selectById(oprationUserId).getSuName(); |
| | | } |
| | | |
| | | //计算过期时间 |
| | | BusParameterSettings yxqSetting = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.VALID_PERIOD_POINTS, companyId); |
| | | Calendar cal=Calendar.getInstance(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | int year = cal.get(Calendar.YEAR); |
| | | int sxYear=year+(Integer.parseInt(yxqSetting.getParamValue())-1); |
| | | Date sxys=DateUtil.stringToDate(year+"-12-31 23:59",DateUtil.DATE_FORMAT_MM ); |
| | | int sxYear = year + (Integer.parseInt(yxqSetting.getParamValue()) - 1); |
| | | Date sxys = DateUtil.stringToDate(sxYear + "-12-31 23:59", DateUtil.DATE_FORMAT_MM); |
| | | |
| | | ScoreVipDetail scoreVipDetail=new ScoreVipDetail(); |
| | | ScoreVipDetail scoreVipDetail = new ScoreVipDetail(); |
| | | |
| | | scoreVipDetail.setCreateBy(createBy); |
| | | scoreVipDetail.setUpdateBy(createBy); |
| | |
| | | scoreVipDetail.setUsedScore(0); |
| | | scoreVipDetail.setBusinessId(businessId); |
| | | scoreVipDetail.setValiditeTime(sxys); |
| | | scoreVipDetail.setOpenId(openId); |
| | | scoreVipDetail.setVipId(vipId); |
| | | scoreVipDetail.setGainTime(DateTime.now()); |
| | | scoreVipDetail.setAllScore(score); |
| | |
| | | scoreVipDetailDao.insert(scoreVipDetail); |
| | | |
| | | //新增添加记录 |
| | | ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); |
| | | ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); |
| | | scoreUseRecord.setPreScore(score); |
| | | scoreUseRecord.setCreateBy(createBy); |
| | | scoreUseRecord.setUpdateBy(createBy); |
| | |
| | | scoreUseRecord.setBusinessId(businessId); |
| | | scoreUseRecord.setRecNum(score); |
| | | scoreUseRecord.setType(type); |
| | | scoreUseRecord.setOpenId(openId); |
| | | scoreUseRecord.setVipId(vipId); |
| | | scoreUseRecord.setShopId(shopId); |
| | | scoreUseRecord.setOprationUserId(oprationUserId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 退积分 |
| | | * 根据固定等级规则新增用户积分 |
| | | */ |
| | | public void refundScore(String openId, Long vipId, Integer score, Long oldBusinessId, int type){ |
| | | Long companyId=null; |
| | | if(openId!=null){ |
| | | companyId= bizUserDao.findByOpenId(openId).getCompanyId(); |
| | | }else if(vipId!=null){ |
| | | companyId= vipInfoDao.selectById(vipId).getCompanyId(); |
| | | }else{ |
| | | throw new IllegalArgumentException("vipId,openId必须有一个"); |
| | | } |
| | | if(score<0){ |
| | | throw new IllegalArgumentException("score必须有为大于零的数"); |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addScoreByParamSetting(Long vipId, Long oprationUserId, Long shopId, Integer firstScore, Long businessId, int type, String remark, BusParameterSettings parameterSetting) { |
| | | |
| | | |
| | | SysVipInfo vipInfo = sysVipInfoDao.selectById(vipId); |
| | | |
| | | |
| | | //添加自己的积分 |
| | | if (firstScore > 0) { |
| | | addScore( |
| | | vipInfo.getId(), |
| | | oprationUserId, |
| | | shopId, |
| | | firstScore, |
| | | businessId, |
| | | type, |
| | | remark |
| | | ); |
| | | } |
| | | |
| | | if (StringUtils.isNotBlank(parameterSetting.getParamValue()) |
| | | && vipInfo.getRecommendId() != null) { |
| | | //推荐注册老带新积分奖励 |
| | | SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId()); |
| | | Integer secondScore = new Integer(parameterSetting.getParamValue()); |
| | | if (secondScore > 0) { |
| | | addScore( |
| | | referrerVip.getId(), |
| | | oprationUserId, |
| | | shopId, |
| | | secondScore, |
| | | businessId, |
| | | type, |
| | | remark |
| | | ); |
| | | } |
| | | //推荐注册二级带新积分奖励 |
| | | if (StringUtils.isNotBlank(parameterSetting.getParamValue1()) |
| | | && referrerVip.getRecommendId() != null) { |
| | | Integer threeScore = new Integer(parameterSetting.getParamValue()); |
| | | if (threeScore > 0) { |
| | | addScore( |
| | | referrerVip.getRecommendId(), |
| | | oprationUserId, |
| | | shopId, |
| | | threeScore, |
| | | businessId, |
| | | type, |
| | | remark |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退积分 |
| | | */ |
| | | public void refundScore(Long vipId, Integer score, Long oldBusinessId, int type) { |
| | | |
| | | Long companyId = vipInfoDao.selectById(vipId).getCompanyId(); |
| | | |
| | | if (score < 0) { |
| | | throw new IllegalArgumentException("score必须有为大于零的数"); |
| | | } |
| | | //查询原始使用记录 |
| | | QueryWrapper queryWrapper=new QueryWrapper(); |
| | | queryWrapper.eq("business_id",oldBusinessId); |
| | | queryWrapper.eq("company_id",companyId); |
| | | queryWrapper.eq("type",type); |
| | | QueryWrapper queryWrapper = new QueryWrapper(); |
| | | queryWrapper.eq("business_id", oldBusinessId); |
| | | queryWrapper.eq("company_id", companyId); |
| | | queryWrapper.eq("type", type); |
| | | List<ScoreUseRecord> scoreUseRecordList = scoreUseRecordDao.selectList(queryWrapper); |
| | | scoreUseRecordList.forEach(scoreUseRecord -> { |
| | | ScoreVipDetail scoreVipDetail = scoreVipDetailDao.selectById(scoreUseRecord.getScoreVipDetailId()); |
| | | if(scoreVipDetail!=null){ |
| | | if(DateTime.now().isAfter(scoreVipDetail.getValiditeTime())){ |
| | | if (scoreVipDetail != null) { |
| | | if (DateTime.now().isAfter(scoreVipDetail.getValiditeTime())) { |
| | | //积分还有效 |
| | | scoreVipDetail.setRemainScore( scoreVipDetail.getRemainScore()+score); |
| | | scoreVipDetail.setUsedScore(scoreVipDetail.getUsedScore()-score); |
| | | scoreVipDetail.setRemainScore(scoreVipDetail.getRemainScore() + score); |
| | | scoreVipDetail.setUsedScore(scoreVipDetail.getUsedScore() - score); |
| | | scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_YX); |
| | | scoreVipDetailDao.updateById(scoreVipDetail); |
| | | scoreUseRecordDao.deleteById(scoreUseRecord.getId()); |
| | |
| | | }); |
| | | } |
| | | |
| | | public void removeByBusinessId(String openId, Long vipId, Long oldBusinessId, int type){ |
| | | Long companyId=null; |
| | | if(openId!=null){ |
| | | companyId= bizUserDao.findByOpenId(openId).getCompanyId(); |
| | | }else if(vipId!=null){ |
| | | companyId= vipInfoDao.selectById(vipId).getCompanyId(); |
| | | }else{ |
| | | throw new IllegalArgumentException("vipId,openId必须有一个"); |
| | | } |
| | | if(oldBusinessId==null){ |
| | | public void removeByBusinessId(Long vipId, Long oldBusinessId) { |
| | | Long companyId = vipInfoDao.selectById(vipId).getCompanyId(); |
| | | |
| | | if (oldBusinessId == null) { |
| | | throw new IllegalArgumentException("oldBusinessId必须有"); |
| | | } |
| | | QueryWrapper queryWrapper=new QueryWrapper(); |
| | | queryWrapper.eq("business_id",oldBusinessId); |
| | | queryWrapper.eq("company_id",companyId); |
| | | queryWrapper.eq("type",type); |
| | | QueryWrapper queryWrapper = new QueryWrapper(); |
| | | queryWrapper.eq("business_id", oldBusinessId); |
| | | queryWrapper.eq("company_id", companyId); |
| | | scoreVipDetailDao.delete(queryWrapper); |
| | | scoreUseRecordDao.delete(queryWrapper); |
| | | } |