积分
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkPointsConfig;
|
||||
|
||||
/**
|
||||
* 积分基本设置 映射层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsConfigMapper extends BaseMapper<MkPointsConfig> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkPointsGoods;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 积分商品设置 映射层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsGoodsMapper extends BaseMapper<MkPointsGoods> {
|
||||
|
||||
List<MkPointsGoods> getPointsGoodsPageByUser(Long shopId, Long userId);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
|
||||
/**
|
||||
* 积分兑换记录 映射层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsGoodsRecordMapper extends BaseMapper<MkPointsGoodsRecord> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkPointsUser;
|
||||
|
||||
/**
|
||||
* 会员积分账户 映射层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsUserMapper extends BaseMapper<MkPointsUser> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkPointsUserRecord;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录 映射层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
public interface MkPointsUserRecordMapper extends BaseMapper<MkPointsUserRecord> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.czg.market.enums.PointsConstant;
|
||||
import com.czg.market.service.MkPointsUserService;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkPointsConfig;
|
||||
import com.czg.market.service.MkPointsConfigService;
|
||||
import com.czg.service.market.mapper.MkPointsConfigMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 积分基本设置 服务层实现。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Service
|
||||
public class MkPointsConfigServiceImpl extends ServiceImpl<MkPointsConfigMapper, MkPointsConfig> implements MkPointsConfigService {
|
||||
|
||||
@Resource
|
||||
private MkPointsUserService mkPointsUserService;
|
||||
|
||||
@Override
|
||||
public void consumeAwardPoints(Long shopUserId, OrderInfo orderInfo) {
|
||||
BigDecimal payAmount = orderInfo.getPayAmount();
|
||||
if (NumberUtil.isLessOrEqual(payAmount, BigDecimal.ZERO)) {
|
||||
return;
|
||||
}
|
||||
MkPointsConfig pointsConfig = getOne(query().eq(MkPointsConfig::getShopId, orderInfo.getShopId()));
|
||||
if (pointsConfig == null) {
|
||||
return;
|
||||
}
|
||||
Integer enableRewards = pointsConfig.getEnableRewards();
|
||||
if (enableRewards == 0) {
|
||||
return;
|
||||
}
|
||||
BigDecimal consumeAmount = pointsConfig.getConsumeAmount();
|
||||
if (consumeAmount == null) {
|
||||
return;
|
||||
}
|
||||
if (NumberUtil.isLessOrEqual(consumeAmount, BigDecimal.ZERO)) {
|
||||
return;
|
||||
}
|
||||
BigDecimal awardPoints = NumberUtil.roundDown(NumberUtil.div(payAmount, consumeAmount), 0);
|
||||
mkPointsUserService.alterPoints(null, shopUserId, orderInfo.getShopId(), PointsConstant.ADD,
|
||||
awardPoints.intValue(), orderInfo.getId().toString(), StrUtil.format("消费¥{}送{}积分", payAmount, awardPoints.intValue()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.czg.account.entity.ShopUser;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.account.service.ShopUserService;
|
||||
import com.czg.account.vo.PointsExchangeSummaryVo;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.dto.MkPointsGoodsRecordDTO;
|
||||
import com.czg.market.dto.MkPointsGoodsRecordQueryDTO;
|
||||
import com.czg.sa.StpKit;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
import com.czg.market.service.MkPointsGoodsRecordService;
|
||||
import com.czg.service.market.mapper.MkPointsGoodsRecordMapper;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 积分兑换记录 服务层实现。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Service
|
||||
public class MkPointsGoodsRecordServiceImpl extends ServiceImpl<MkPointsGoodsRecordMapper, MkPointsGoodsRecord> implements MkPointsGoodsRecordService {
|
||||
|
||||
|
||||
@DubboReference
|
||||
private ShopInfoService shopInfoService;
|
||||
@DubboReference
|
||||
private ShopUserService shopUserService;
|
||||
|
||||
@Override
|
||||
public Page<MkPointsGoodsRecordDTO> getGoodsRecordPage(MkPointsGoodsRecordQueryDTO param) {
|
||||
Long mainIdByShopId = shopInfoService.getMainIdByShopId(param.getShopId());
|
||||
Page<MkPointsGoodsRecordDTO> pages = pageAs(
|
||||
Page.of(param.getPage(), param.getSize())
|
||||
, query().eq(MkPointsGoodsRecord::getShopId, param.getShopId())
|
||||
.eq(MkPointsGoodsRecord::getShopUserId, param.getShopUserId())
|
||||
.eq(MkPointsGoodsRecord::getStatus, param.getStatus())
|
||||
.like(MkPointsGoodsRecord::getPointsGoodsName, param.getPointsGoodsName())
|
||||
.like(MkPointsGoodsRecord::getGoodsCategory, param.getGoodsCategory())
|
||||
, MkPointsGoodsRecordDTO.class);
|
||||
pages.getRecords().forEach(data -> {
|
||||
ShopUser shopUser = shopUserService.getOne(query().eq(ShopUser::getId, data.getShopUserId()).eq(ShopUser::getMainShopId, mainIdByShopId));
|
||||
data.setHeadImg(shopUser.getHeadImg());
|
||||
data.setNickName(shopUser.getNickName());
|
||||
data.setPhone(shopUser.getPhone());
|
||||
});
|
||||
return pages;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PointsExchangeSummaryVo total(MkPointsGoodsRecordQueryDTO param) {
|
||||
QueryWrapper queryWrapper = query().eq(MkPointsGoodsRecord::getShopId, param.getShopId())
|
||||
.between(MkPointsGoodsRecord::getCreateTime, param.getStartTime(), param.getEndTime())
|
||||
.eq(MkPointsGoodsRecord::getShopUserId, param.getShopUserId())
|
||||
.eq(MkPointsGoodsRecord::getStatus, param.getStatus())
|
||||
.like(MkPointsGoodsRecord::getPointsGoodsName, param.getPointsGoodsName())
|
||||
.like(MkPointsGoodsRecord::getGoodsCategory, param.getGoodsCategory());
|
||||
queryWrapper.select("count(*) as count,sum(extra_payment_amount) as totalAmount");
|
||||
return getOneAs(queryWrapper, PointsExchangeSummaryVo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkout(String couponCode, Long shopId) {
|
||||
MkPointsGoodsRecord record = getOne(query().eq(MkPointsGoodsRecord::getCouponCode, couponCode).eq(MkPointsGoodsRecord::getShopId, shopId));
|
||||
if (record == null) {
|
||||
throw new CzgException("未找到该兑换码");
|
||||
}
|
||||
if (!record.getStatus().equals("待核销") && !record.getStatus().equals("退款中")) {
|
||||
throw new CzgException("核销失败,该商品不可核销");
|
||||
}
|
||||
MkPointsGoodsRecord upRecord = new MkPointsGoodsRecord();
|
||||
upRecord.setCheckoutTime(LocalDateTime.now());
|
||||
upRecord.setStatus("已完成");
|
||||
return update(upRecord, query().eq(MkPointsGoodsRecord::getId, record.getId()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import com.czg.BaseQueryParam;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.entity.MkPointsGoodsRecord;
|
||||
import com.czg.market.entity.MkPointsUserRecord;
|
||||
import com.czg.market.service.MkPointsGoodsRecordService;
|
||||
import com.czg.order.dto.PointGoodsRefundDTO;
|
||||
import com.czg.utils.PageUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkPointsGoods;
|
||||
import com.czg.market.service.MkPointsGoodsService;
|
||||
import com.czg.service.market.mapper.MkPointsGoodsMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 积分商品设置 服务层实现。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Service
|
||||
public class MkPointsGoodsServiceImpl extends ServiceImpl<MkPointsGoodsMapper, MkPointsGoods> implements MkPointsGoodsService {
|
||||
|
||||
@Resource
|
||||
private MkPointsGoodsRecordService goodsRecordService;
|
||||
|
||||
@Override
|
||||
public Page<MkPointsGoods> getPointsGoodsPage(BaseQueryParam param, Long shopId) {
|
||||
return page(Page.of(param.getPage(), param.getSize()),
|
||||
query()
|
||||
.eq(MkPointsGoods::getShopId, shopId)
|
||||
.eq(MkPointsGoods::getDelFlag, 0)
|
||||
.orderBy(MkPointsGoods::getSort, false)
|
||||
.orderBy(MkPointsGoods::getId, false)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<MkPointsGoods> getPointsGoodsPageByUser(Integer page, Integer size, Long shopId, Long userId) {
|
||||
PageHelper.startPage(page, size);
|
||||
List<MkPointsGoods> list = mapper.getPointsGoodsPageByUser(shopId, userId);
|
||||
return PageUtil.convert(new PageInfo<>(list));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<MkPointsGoodsRecord> getGoodsRecordPage(Integer page, Integer size, Long shopId, Long userId) {
|
||||
return goodsRecordService.page(Page.of(page, size), query().eq(MkPointsGoodsRecord::getUserId, userId).eq(MkPointsGoodsRecord::getShopId, shopId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyRefund(PointGoodsRefundDTO param, Long userId) {
|
||||
MkPointsGoodsRecord record = new MkPointsGoodsRecord();
|
||||
record.setStatus("退款中");
|
||||
record.setCancelOrRefundReason(param.getReason());
|
||||
record.setCancelOrRefundTime(LocalDateTime.now());
|
||||
|
||||
return goodsRecordService.update(record, query()
|
||||
.eq(MkPointsGoodsRecord::getId, param.getRecordId())
|
||||
.eq(MkPointsGoodsRecord::getOrderNo, param.getOrderNo())
|
||||
.eq(MkPointsGoodsRecord::getUserId, userId)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancelRefund(PointGoodsRefundDTO param, Long userId) {
|
||||
MkPointsGoodsRecord record1 = goodsRecordService.getById(param.getRecordId());
|
||||
if (record1 == null) {
|
||||
throw new CzgException("取消失败,订单不存在");
|
||||
}
|
||||
if (record1.getStatus().equals("退款中")) {
|
||||
throw new CzgException("取消失败,订单不处于退款中");
|
||||
}
|
||||
MkPointsGoodsRecord record = new MkPointsGoodsRecord();
|
||||
if (record1.getCheckoutTime() != null) {
|
||||
record.setStatus("已完成");
|
||||
}else {
|
||||
record.setStatus("待核销");
|
||||
}
|
||||
record.setCancelOrRefundReason(param.getReason());
|
||||
record.setCancelOrRefundTime(LocalDateTime.now());
|
||||
|
||||
return goodsRecordService.update(record, query()
|
||||
.eq(MkPointsGoodsRecord::getId, param.getRecordId())
|
||||
.eq(MkPointsGoodsRecord::getOrderNo, param.getOrderNo())
|
||||
.eq(MkPointsGoodsRecord::getUserId, userId)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean upNumberById(Long id, Integer quantity, Integer totalExchangeCount) {
|
||||
MkPointsGoods goodUp = new MkPointsGoods();
|
||||
goodUp.setQuantity(quantity);
|
||||
goodUp.setTotalExchangeCount(totalExchangeCount);
|
||||
return updateById(goodUp);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import com.czg.account.vo.PointsShopListVO;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkPointsUserRecord;
|
||||
import com.czg.market.service.MkPointsUserRecordService;
|
||||
import com.czg.service.market.mapper.MkPointsUserRecordMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员积分变动记录 服务层实现。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Service
|
||||
public class MkPointsUserRecordServiceImpl extends ServiceImpl<MkPointsUserRecordMapper, MkPointsUserRecord> implements MkPointsUserRecordService {
|
||||
|
||||
@Override
|
||||
public Page<MkPointsUserRecord> pageByPointsUserId(Integer page, Integer size, Long mkPointsUserId) {
|
||||
return page(Page.of(page, size), query().eq(MkPointsUserRecord::getMkPointsUserId, mkPointsUserId).orderBy(MkPointsUserRecord::getCreateTime, false));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.czg.account.entity.ShopInfo;
|
||||
import com.czg.account.entity.ShopUser;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.account.service.ShopUserService;
|
||||
import com.czg.account.vo.PointsShopListVO;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.dto.MkPointsUserDTO;
|
||||
import com.czg.market.entity.MkPointsUserRecord;
|
||||
import com.czg.market.enums.PointsConstant;
|
||||
import com.czg.market.service.MkPointsUserRecordService;
|
||||
import com.czg.sa.StpKit;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkPointsUser;
|
||||
import com.czg.market.service.MkPointsUserService;
|
||||
import com.czg.service.market.mapper.MkPointsUserMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.stringtemplate.v4.ST;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员积分账户 服务层实现。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-08
|
||||
*/
|
||||
@Service
|
||||
public class MkPointsUserServiceImpl extends ServiceImpl<MkPointsUserMapper, MkPointsUser> implements MkPointsUserService {
|
||||
@DubboReference
|
||||
private ShopInfoService shopInfoService;
|
||||
@DubboReference
|
||||
private ShopUserService shopUserService;
|
||||
@Resource
|
||||
private MkPointsUserRecordService pointsUserRecordService;
|
||||
|
||||
@Override
|
||||
public Page<MkPointsUserDTO> getPointsUserPage(String phone, Integer page, Integer size) {
|
||||
Long shopUserId = null;
|
||||
Long mainIdByShopId = shopInfoService.getMainIdByShopId(StpKit.USER.getShopId());
|
||||
if (StrUtil.isBlankIfStr(phone)) {
|
||||
ShopUser one = shopUserService.getOne(query().eq(ShopUser::getPhone, phone).eq(ShopUser::getMainShopId, mainIdByShopId));
|
||||
if (one == null) {
|
||||
return new Page<>();
|
||||
}
|
||||
shopUserId = one.getId();
|
||||
}
|
||||
Page<MkPointsUserDTO> pages = pageAs(Page.of(page, size), query()
|
||||
.eq(MkPointsUser::getShopId, StpKit.USER.getShopId())
|
||||
.eq(MkPointsUser::getShopUserId, shopUserId)
|
||||
.orderBy(MkPointsUser::getUpdateTime, false),
|
||||
MkPointsUserDTO.class);
|
||||
pages.getRecords().forEach(s -> {
|
||||
ShopUser shopUser = shopUserService.getOne(query().eq(ShopUser::getId, s.getShopUserId()).eq(ShopUser::getMainShopId, mainIdByShopId));
|
||||
s.setHeadImg(shopUser.getHeadImg());
|
||||
s.setNickName(shopUser.getNickName());
|
||||
s.setPhone(shopUser.getPhone());
|
||||
});
|
||||
return pages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PointsShopListVO> pointsShopList(Long userId, String shopName) {
|
||||
return listAs(query().select(MkPointsUser::getShopId).select(ShopInfo::getShopName, ShopInfo::getLogo, ShopInfo::getCoverImg)
|
||||
.eq(MkPointsUser::getUserId, userId).leftJoin(ShopInfo.class).on(MkPointsUser::getShopId, ShopInfo::getId),
|
||||
PointsShopListVO.class);
|
||||
}
|
||||
|
||||
public MkPointsUser getPointsUser(Long shopId, Long shopUserId, Long userId) {
|
||||
MkPointsUser pointsUser;
|
||||
if (userId == null && shopUserId == null) {
|
||||
throw new CzgException("积分操作失败,用户ID和店铺用户ID不能同时为空");
|
||||
}
|
||||
if (shopUserId != null) {
|
||||
pointsUser = getOne(query().eq(MkPointsUser::getShopUserId, shopUserId).eq(MkPointsUser::getShopId, shopId));
|
||||
if (pointsUser == null) {
|
||||
ShopUser shopUser = shopUserService.getById(shopUserId);
|
||||
if (shopUser == null) {
|
||||
throw new CzgException("积分操作失败,店铺用户不存在");
|
||||
}
|
||||
pointsUser = MkPointsUser.builder()
|
||||
.userId(userId)
|
||||
.shopId(shopId)
|
||||
.shopUserId(shopUserId)
|
||||
.pointBalance(0L)
|
||||
.build();
|
||||
}
|
||||
} else {
|
||||
pointsUser = getOne(query().eq(MkPointsUser::getUserId, userId).eq(MkPointsUser::getShopId, shopId));
|
||||
if (pointsUser == null) {
|
||||
ShopUser shopUser = shopUserService.getUserInfo(shopId, userId);
|
||||
if (shopUser == null) {
|
||||
throw new CzgException("积分操作失败,店铺用户不存在");
|
||||
}
|
||||
pointsUser = MkPointsUser.builder()
|
||||
.userId(userId)
|
||||
.shopId(shopId)
|
||||
.shopUserId(shopUser.getId())
|
||||
.pointBalance(0L)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
return pointsUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long alterPoints(Long userId, Long shopUserId, Long shopId, PointsConstant floatType, Integer points, String sourceId, String reason) {
|
||||
MkPointsUser pointsUser = getPointsUser(shopId, shopUserId, userId);
|
||||
if (floatType == null) {
|
||||
throw new CzgException("积分变动类型不能为空");
|
||||
}
|
||||
switch (floatType) {
|
||||
case ADD:
|
||||
pointsUser.setPointBalance(pointsUser.getPointBalance() + points);
|
||||
break;
|
||||
case SUB:
|
||||
pointsUser.setPointBalance(pointsUser.getPointBalance() - points);
|
||||
if (pointsUser.getPointBalance() < 0) {
|
||||
throw new CzgException("积分操作失败,积分不足");
|
||||
}
|
||||
points = -points;
|
||||
break;
|
||||
default:
|
||||
throw new CzgException("不支持的积分变动类型:" + floatType);
|
||||
}
|
||||
saveOrUpdate(pointsUser);
|
||||
MkPointsUserRecord record = MkPointsUserRecord.builder()
|
||||
.mkPointsUserId(pointsUser.getId())
|
||||
.floatType(floatType.getValue())
|
||||
.floatPoints(points)
|
||||
.sourceId(sourceId)
|
||||
.content(reason)
|
||||
.build();
|
||||
boolean save = pointsUserRecordService.save(record);
|
||||
if (!save) {
|
||||
throw new CzgException("积分操作失败,积分记录保存失败");
|
||||
}
|
||||
return record.getId();
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO;
|
||||
import com.czg.account.entity.ShopConfig;
|
||||
import com.czg.account.entity.ShopInfo;
|
||||
import com.czg.account.entity.ShopUser;
|
||||
import com.czg.account.service.MemberPointsService;
|
||||
import com.czg.account.service.ShopConfigService;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.account.service.ShopUserService;
|
||||
@@ -16,29 +14,22 @@ import com.czg.exception.CzgException;
|
||||
import com.czg.market.dto.CouponInfoDTO;
|
||||
import com.czg.market.dto.MkRewardCouponDTO;
|
||||
import com.czg.market.dto.MkShopRechargeDTO;
|
||||
import com.czg.market.dto.MkShopRechargeDetailDTO;
|
||||
import com.czg.market.entity.MkShopRechargeDetail;
|
||||
import com.czg.market.entity.ShopCoupon;
|
||||
import com.czg.market.service.MkShopCouponRecordService;
|
||||
import com.czg.market.service.MkShopRechargeDetailService;
|
||||
import com.czg.market.service.ShopCouponService;
|
||||
import com.czg.market.enums.PointsConstant;
|
||||
import com.czg.market.service.*;
|
||||
import com.czg.market.vo.*;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.czg.service.market.enums.OrderStatusEnums;
|
||||
import com.czg.utils.AssertUtil;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkShopRecharge;
|
||||
import com.czg.market.service.MkShopRechargeService;
|
||||
import com.czg.service.market.mapper.MkShopRechargeMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -57,8 +48,8 @@ public class MkShopRechargeServiceImpl extends ServiceImpl<MkShopRechargeMapper,
|
||||
private ShopCouponService shopCouponService;
|
||||
@DubboReference
|
||||
private ShopUserService shopUserService;
|
||||
@DubboReference
|
||||
private MemberPointsService memberPointsService;
|
||||
@Resource
|
||||
private MkPointsUserService pointsUserService;
|
||||
@Resource
|
||||
private MkShopCouponRecordService shopCouponRecordService;
|
||||
@DubboReference
|
||||
@@ -190,11 +181,11 @@ public class MkShopRechargeServiceImpl extends ServiceImpl<MkShopRechargeMapper,
|
||||
.setBizEnum(ShopUserFlowBizEnum.AWARD_IN)
|
||||
.setRelationId(paymentId);
|
||||
shopUserMoneyEditRewardDTO.setMoney(rechargeDetail.getRewardAmount());
|
||||
shopUserService.updateMoney(shopUserMoneyEditRewardDTO);
|
||||
Long editId = shopUserService.updateMoney(shopUserMoneyEditRewardDTO);
|
||||
|
||||
// 发放积分
|
||||
if (rechargeDetail.getRewardPoints() != null) {
|
||||
memberPointsService.addPoints(shopUserId, rechargeDetail.getRewardPoints(), "会员消费送积分", null);
|
||||
pointsUserService.alterPoints(null, shopUserId, shopUser.getMainShopId(), PointsConstant.ADD, rechargeDetail.getRewardPoints(), editId.toString(), "会员充值送积分");
|
||||
}
|
||||
|
||||
// 发放优惠券
|
||||
@@ -205,7 +196,7 @@ public class MkShopRechargeServiceImpl extends ServiceImpl<MkShopRechargeMapper,
|
||||
.setNum(item.getNum())
|
||||
.setUserId(shopUser.getUserId())
|
||||
.setShopId(shopId), "充值赠券");
|
||||
}catch (Exception e) {
|
||||
} catch (Exception e) {
|
||||
log.warn("发放优惠券失败", e);
|
||||
}
|
||||
});
|
||||
@@ -254,7 +245,7 @@ public class MkShopRechargeServiceImpl extends ServiceImpl<MkShopRechargeMapper,
|
||||
});
|
||||
});
|
||||
shopIdList = null;
|
||||
}else {
|
||||
} else {
|
||||
shopIdList.add(shopId);
|
||||
queryWrapper.in(ShopInfo::getId, shopIdList);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.czg.market.dto.*;
|
||||
import com.czg.account.entity.*;
|
||||
import com.czg.account.service.*;
|
||||
import com.czg.market.entity.*;
|
||||
import com.czg.market.enums.PointsConstant;
|
||||
import com.czg.market.service.*;
|
||||
import com.czg.market.vo.*;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
@@ -55,8 +56,8 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
private OrderInfoService orderInfoService;
|
||||
@DubboReference
|
||||
private OrderPaymentService paymentService;
|
||||
@DubboReference
|
||||
private MemberPointsService memberPointsService;
|
||||
@Resource
|
||||
private MkPointsUserService pointsUserService;
|
||||
@Resource
|
||||
private MemberOrderService memberOrderService;
|
||||
@Resource
|
||||
@@ -69,7 +70,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
private ShopConfigService shopConfigService;
|
||||
|
||||
@Override
|
||||
public MemberConfigVO detail(Long shopId) {
|
||||
public MemberConfigVO detail(Long shopId) {
|
||||
shopId = shopInfoService.getMainIdByShopId(shopId);
|
||||
TbMemberConfig memberConfig = getOne(new QueryWrapper().eq(TbMemberConfig::getShopId, shopId));
|
||||
if (memberConfig == null) {
|
||||
@@ -188,8 +189,8 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
memberConfig.setMemberPriceShopIdList(JSONObject.toJSONString(memberDTO.getMemberPriceShopIdList()));
|
||||
}
|
||||
|
||||
shopConfigService.editStatusByShopIdList(memberConfig.getShopId(), memberConfig.getIsOpen().intValue() == 1 && memberConfig.getIsMemberPrice() == 1 ? 1 : 0,false, "is_member_price",
|
||||
"ALL".equals(memberConfig.getMemberPriceShopType()) ? "all" : "part",
|
||||
shopConfigService.editStatusByShopIdList(memberConfig.getShopId(), memberConfig.getIsOpen().intValue() == 1 && memberConfig.getIsMemberPrice() == 1 ? 1 : 0, false, "is_member_price",
|
||||
"ALL".equals(memberConfig.getMemberPriceShopType()) ? "all" : "part",
|
||||
StrUtil.isNotBlank(memberConfig.getMemberPriceShopIdList()) ? JSONArray.parseArray(memberConfig.getMemberPriceShopIdList()).toList(Long.class) : new ArrayList<>());
|
||||
|
||||
return updateById(memberConfig, false);
|
||||
@@ -235,7 +236,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean editLevel(Long shopId, MemberLevelDTO levelDTO) {
|
||||
public Boolean editLevel(Long shopId, MemberLevelDTO levelDTO) {
|
||||
MemberLevelConfig levelConfig = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getId, levelDTO.getId()).eq(MemberLevelConfig::getShopId, shopId));
|
||||
Optional.ofNullable(levelConfig).orElseThrow(() -> new CzgException("会员等级不存在"));
|
||||
Integer oldVal = levelConfig.getExperienceValue();
|
||||
@@ -253,7 +254,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
if (!levelDTO.getExperienceValue().equals(oldVal)) {
|
||||
List<ShopUser> shopUserList = shopUserService.list(new QueryWrapper().eq(ShopUser::getMainShopId, mainShopid));
|
||||
shopUserList.forEach(item -> {
|
||||
MemberLevelConfig configServiceOne = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, mainShopid)
|
||||
MemberLevelConfig configServiceOne = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, mainShopid)
|
||||
.le(MemberLevelConfig::getExperienceValue, item.getExperience()).orderBy(MemberLevelConfig::getExperienceValue, false).limit(1));
|
||||
item.setMemberLevelId(configServiceOne == null ? item.getMemberLevelId() : configServiceOne.getId());
|
||||
});
|
||||
@@ -278,20 +279,6 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
return memberLevelVOS;
|
||||
}
|
||||
|
||||
static void main() {
|
||||
Integer expVal = 10;
|
||||
TableValueConstant.MemberExpFlow.Type type = TableValueConstant.MemberExpFlow.Type.PAY;
|
||||
long exp = 0;
|
||||
switch (type) {
|
||||
case PAY -> {
|
||||
exp = expVal;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(exp);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean deliver(ShopUser shopUser, TableValueConstant.MemberExpFlow.Type type, BigDecimal money, Integer expVal, Long sourceId) {
|
||||
@@ -331,7 +318,8 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
int points = (int) (money.floatValue() / levelVO.getCostRewardPoints());
|
||||
log.info("消费送积分: {}", points);
|
||||
if (points > 0) {
|
||||
memberPointsService.addPoints(shopUser.getId(), points, "会员消费送积分", null);
|
||||
pointsUserService.alterPoints(null, shopUser.getId(), shopUser.getMainShopId(), PointsConstant.ADD, points, sourceId.toString(), "会员消费送积分");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -345,7 +333,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||
if (levelVO.getIsCycleReward() == 1) {
|
||||
if (levelVO.getCycleRewardPoints() != null) {
|
||||
int points = levelVO.getCycleRewardPoints();
|
||||
memberPointsService.addPoints(shopUser.getId(), points, "会员任务奖励", null);
|
||||
pointsUserService.alterPoints(null, shopUser.getId(), shopUser.getMainShopId(), PointsConstant.ADD, points, sourceId.toString(), "会员周奖励");
|
||||
}
|
||||
|
||||
if (levelVO.getCycleRewardCouponList() != null && !levelVO.getCycleRewardCouponList().isEmpty()) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkPointsConfigMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkPointsGoodsMapper">
|
||||
|
||||
<select id="getPointsGoodsPageByUser" resultType="com.czg.market.entity.MkPointsGoods">
|
||||
select goods.*, count(record.id) as boughtCount
|
||||
from mk_points_goods goods
|
||||
left join mk_points_user_record record
|
||||
on record.mk_points_goods_id = goods.id and record.user_id = #{userId} and record.status != '已退款'
|
||||
where goods.shop_id = #{shopId}
|
||||
and goods.del_flag = 0
|
||||
and goods.status = 1
|
||||
order by goods.sort desc, goods.id desc
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkPointsGoodsRecordMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkPointsUserMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkPointsUserRecordMapper">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user