| | |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.matrix.biz.bean.BizUser; |
| | | import com.matrix.biz.dao.BizUserDao; |
| | | import com.matrix.core.constance.MatrixConstance; |
| | | import com.matrix.core.exception.GlobleException; |
| | | import com.matrix.system.hive.dao.SysVipInfoDao; |
| | | import com.matrix.system.score.dao.ScoreUseRecordDao; |
| | | import com.matrix.system.score.dao.ScoreVipDetailDao; |
| | | import com.matrix.system.score.entity.ScoreUseRecord; |
| | | import com.matrix.system.score.entity.ScoreVipDetail; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | @Autowired |
| | | BizUserDao bizUserDao; |
| | | |
| | | @Autowired |
| | | SysVipInfoDao vipInfoDao; |
| | | |
| | | /** |
| | | * 扣除用户积分 |
| | | * |
| | |
| | | * @param businessId |
| | | * @param type |
| | | */ |
| | | public void deductionScore(String openId, Integer score, Long businessId, int type) { |
| | | BizUser user = bizUserDao.findByOpenId(openId); |
| | | List<ScoreVipDetail> effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(openId); |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deductionScore(String openId, Long vipId, 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必须有一个"); |
| | | } |
| | | |
| | | List<ScoreVipDetail> effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(openId,null); |
| | | |
| | | for (ScoreVipDetail scoreVipDetail : effectiveScoreList) { |
| | | |
| | | ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); |
| | | scoreUseRecord.setPreScore(scoreVipDetail.getRemainScore()); |
| | | |
| | | |
| | | int surplus = scoreVipDetail.getRemainScore() - score; |
| | | int currentDedution = 0; |
| | |
| | | //余额充足 |
| | | currentDedution = score; |
| | | scoreVipDetail.setRemainScore(surplus); |
| | | if(surplus==0){ |
| | | scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); |
| | | } |
| | | scoreVipDetailDao.updateById(scoreVipDetail); |
| | | break; |
| | | score=0; |
| | | } else { |
| | | currentDedution = scoreVipDetail.getRemainScore(); |
| | | scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); |
| | | scoreVipDetail.setRemainScore(0); |
| | | scoreVipDetailDao.updateById(scoreVipDetail); |
| | | score=Math.abs(surplus); |
| | |
| | | scoreUseRecord.setCreateTime(DateTime.now()); |
| | | scoreUseRecord.setUpdateTime(DateTime.now()); |
| | | scoreUseRecord.setNowScore(scoreVipDetail.getRemainScore()); |
| | | scoreUseRecord.setCompanyId(user.getCompanyId()); |
| | | scoreUseRecord.setCompanyId(companyId); |
| | | scoreUseRecord.setScoreVipDetailId(scoreVipDetail.getId()); |
| | | scoreUseRecord.setBusinessId(businessId); |
| | | scoreUseRecord.setRecNum(currentDedution); |
| | | scoreUseRecord.setRecType(type); |
| | | scoreUseRecord.setOpenId(openId); |
| | | scoreUseRecord.setVipId(vipId); |
| | | scoreUseRecordDao.insert(scoreUseRecord); |
| | | |
| | | if(surplus > 0 || surplus == 0){ |
| | | break; |
| | | } |
| | | } |
| | | if(score>0){ |
| | | throw new GlobleException("积分不足"); |
| | | } |
| | | |
| | | } |