From bbe0a2fd03063316e50cf141986bda984599bbda Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Tue, 22 Feb 2022 23:41:42 +0800 Subject: [PATCH] Merge branch 'developer' --- zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java | 277 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 272 insertions(+), 5 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java b/zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java index 44ea832..7c27a80 100644 --- a/zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java +++ b/zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java @@ -1,20 +1,287 @@ package com.matrix.system.score.service; -import com.matrix.system.score.dao.ScoreVipDetailDao; -import com.matrix.system.score.entity.ScoreVipDetail; +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.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; +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.Calendar; +import java.util.Date; +import java.util.List; /** + * @author jyy * @description 客户积分余额 - * @author yourName * @date 2021-02-26 15:26 */ @Service -public class ScoreVipDetailService extends ServiceImpl<ScoreVipDetailDao, ScoreVipDetail>{ +public class ScoreVipDetailService extends ServiceImpl<ScoreVipDetailDao, ScoreVipDetail> { + + @Autowired + ScoreVipDetailDao scoreVipDetailDao; + + @Autowired + ScoreUseRecordDao scoreUseRecordDao; + + @Autowired + SysVipInfoDao sysVipInfoDao; + + @Autowired + SysVipInfoDao vipInfoDao; + + @Autowired + SysUsersDao sysUsersDao; + + @Autowired + BusParameterSettingsDao busParameterSettingsDao; + + /** + * 扣除用户积分 + */ + @Transactional(rollbackFor = Exception.class) + 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(vipId); + + 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); + if (surplus == 0) { + scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); + } + scoreVipDetailDao.updateById(scoreVipDetail); + score = 0; + } else { + currentDedution = scoreVipDetail.getRemainScore(); + scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_WX); + scoreVipDetail.setRemainScore(0); + scoreVipDetailDao.updateById(scoreVipDetail); + score = Math.abs(surplus); + } + //新增扣除记录 + scoreUseRecord.setCreateBy(createBy); + scoreUseRecord.setUpdateBy(createBy); + scoreUseRecord.setCreateTime(DateTime.now()); + scoreUseRecord.setUpdateTime(DateTime.now()); + scoreUseRecord.setNowScore(scoreVipDetail.getRemainScore()); + scoreUseRecord.setCompanyId(companyId); + scoreUseRecord.setScoreVipDetailId(scoreVipDetail.getId()); + scoreUseRecord.setBusinessId(businessId); + scoreUseRecord.setRecNum(-currentDedution); + scoreUseRecord.setType(type); + scoreUseRecord.setShopId(shopId); + scoreUseRecord.setVipId(vipId); + scoreUseRecord.setRemarks(remark); + scoreUseRecord.setOprationUserId(oprationUserId); + scoreUseRecordDao.insert(scoreUseRecord); + + if (surplus > 0 || surplus == 0) { + break; + } + } + if (score > 0) { + throw new GlobleException("积分不足"); + } + } + + /** + * 新增用户积分 + */ + @Transactional(rollbackFor = Exception.class) + 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(); + } + + //计算过期时间 + BusParameterSettings yxqSetting = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.VALID_PERIOD_POINTS, companyId); + Calendar cal = Calendar.getInstance(); + int year = cal.get(Calendar.YEAR); + 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.setCreateBy(createBy); + scoreVipDetail.setUpdateBy(createBy); + scoreVipDetail.setCreateTime(DateTime.now()); + scoreVipDetail.setUpdateTime(DateTime.now()); + scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_YX); + scoreVipDetail.setRemainScore(score); + scoreVipDetail.setUsedScore(0); + scoreVipDetail.setBusinessId(businessId); + scoreVipDetail.setValiditeTime(sxys); + scoreVipDetail.setVipId(vipId); + scoreVipDetail.setGainTime(DateTime.now()); + scoreVipDetail.setAllScore(score); + scoreVipDetail.setType(type); + scoreVipDetail.setCompanyId(companyId); + scoreVipDetailDao.insert(scoreVipDetail); + + //新增添加记录 + ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); + scoreUseRecord.setPreScore(score); + scoreUseRecord.setCreateBy(createBy); + scoreUseRecord.setUpdateBy(createBy); + scoreUseRecord.setCreateTime(DateTime.now()); + scoreUseRecord.setUpdateTime(DateTime.now()); + scoreUseRecord.setNowScore(score); + scoreUseRecord.setCompanyId(companyId); + scoreUseRecord.setScoreVipDetailId(scoreVipDetail.getId()); + scoreUseRecord.setBusinessId(businessId); + scoreUseRecord.setRecNum(score); + scoreUseRecord.setType(type); + scoreUseRecord.setVipId(vipId); + scoreUseRecord.setShopId(shopId); + scoreUseRecord.setOprationUserId(oprationUserId); + scoreUseRecord.setRemarks(remark); + scoreUseRecordDao.insert(scoreUseRecord); - + } + + /** + * 根据固定等级规则新增用户积分 + */ + @Transactional(rollbackFor = Exception.class) + public void addScoreByParamSetting(Long vipId, Long oprationUserId, Long shopId, Long businessId, int type, String remark, BusParameterSettings parameterSetting) { + + if (parameterSetting != null) { + SysVipInfo vipInfo = sysVipInfoDao.selectById(vipId); + //添加自己的积分 + if (StringUtils.isNotBlank(parameterSetting.getParamValue())) { + Integer firstScore = new Integer(parameterSetting.getParamValue()); + if (firstScore > 0) { + addScore( + vipInfo.getId(), + oprationUserId, + shopId, + firstScore, + businessId, + type, + remark + ); + } + } + + if (StringUtils.isNotBlank(parameterSetting.getParamValue1()) + && vipInfo.getRecommendId() != null) { + //推荐注册老带新积分奖励 + SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId()); + Integer secondScore = new Integer(parameterSetting.getParamValue1()); + if (secondScore > 0) { + addScore( + referrerVip.getId(), + oprationUserId, + shopId, + secondScore, + businessId, + type, + remark + ); + } + //推荐注册二级带新积分奖励 + if (StringUtils.isNotBlank(parameterSetting.getParamValue2()) + && referrerVip.getRecommendId() != null) { + Integer threeScore = new Integer(parameterSetting.getParamValue2()); + 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); + List<ScoreUseRecord> scoreUseRecordList = scoreUseRecordDao.selectList(queryWrapper); + scoreUseRecordList.forEach(scoreUseRecord -> { + ScoreVipDetail scoreVipDetail = scoreVipDetailDao.selectById(scoreUseRecord.getScoreVipDetailId()); + if (scoreVipDetail != null) { + if (DateTime.now().isAfter(scoreVipDetail.getValiditeTime())) { + //积分还有效 + 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(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); + scoreVipDetailDao.delete(queryWrapper); + scoreUseRecordDao.delete(queryWrapper); + } } \ No newline at end of file -- Gitblit v1.9.1