package com.matrix.system.score.service; 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.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 java.util.List; /** * @author jyy * @description 客户积分余额 * @date 2021-02-26 15:26 */ @Service public class ScoreVipDetailService extends ServiceImpl { @Autowired ScoreVipDetailDao scoreVipDetailDao; @Autowired ScoreUseRecordDao scoreUseRecordDao; @Autowired BizUserDao bizUserDao; /** * 扣除用户积分 * * @param openId * @param score * @param businessId * @param type */ public void deductionScore(String openId, Integer score, Long businessId, int type) { BizUser user = bizUserDao.findByOpenId(openId); List effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(openId); for (ScoreVipDetail scoreVipDetail : effectiveScoreList) { ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); scoreUseRecord.setPreScore(scoreVipDetail.getRemainScore()); int surplus = scoreVipDetail.getRemainScore() - score; int currentDedution = 0; if (surplus > 0 || surplus == 0) { //余额充足 currentDedution = score; scoreVipDetail.setRemainScore(surplus); scoreVipDetailDao.updateById(scoreVipDetail); break; } else { currentDedution = scoreVipDetail.getRemainScore(); scoreVipDetail.setRemainScore(0); scoreVipDetailDao.updateById(scoreVipDetail); score=Math.abs(surplus); } //新增扣除记录 scoreUseRecord.setCreateBy(MatrixConstance.SYSTEM_USER); scoreUseRecord.setUpdateBy(MatrixConstance.SYSTEM_USER); scoreUseRecord.setCreateTime(DateTime.now()); scoreUseRecord.setUpdateTime(DateTime.now()); scoreUseRecord.setNowScore(scoreVipDetail.getRemainScore()); scoreUseRecord.setCompanyId(user.getCompanyId()); scoreUseRecord.setScoreVipDetailId(scoreVipDetail.getId()); scoreUseRecord.setBusinessId(businessId); scoreUseRecord.setRecNum(currentDedution); scoreUseRecord.setRecType(type); scoreUseRecordDao.insert(scoreUseRecord); } } }