From 21573e8e02dc47202ca3e1f7d4705795a09c1b60 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 29 七月 2025 09:11:36 +0800
Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/HongRuiTang into 2.0
---
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java | 242 +++++++++++++++++++++++++++++++++++++-----------
1 files changed, 187 insertions(+), 55 deletions(-)
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
index a291caa..14e1a02 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -1,20 +1,28 @@
package com.ruoyi.member.service.impl.member;
+import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.member.domain.dto.AppMemberCouponPageDto;
import com.ruoyi.member.domain.dto.MemberSelectCouponDto;
import com.ruoyi.member.domain.dto.MerGoodsCouponListDto;
+import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
+import com.ruoyi.member.mapper.coupon.CouponMapper;
import com.ruoyi.member.mapper.member.MemberCouponMapper;
+import com.ruoyi.member.service.coupon.CouponService;
+import com.ruoyi.member.service.coupon.MemberCouponRecordService;
import com.ruoyi.member.service.member.MemberCouponService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
+import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerMemberCouponVo;
@@ -41,18 +49,28 @@
* @since 2023-04-25
*/
@Service
+@DS("sharding")
public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, MemberCoupon> implements MemberCouponService {
-
+
@Resource
private MemberCouponMapper memberCouponMapper;
-
+
@Resource
private RemoteGoodsService remoteGoodsService;
-
+
@Resource
private RemoteShopService remoteShopService;
-
-
+
+ @Resource
+ private CouponService couponService;
+
+ @Resource
+ private MemberCouponRecordService memberCouponRecordService;
+
+ @Resource
+ private CouponMapper couponMapper;
+
+
/**
* @description: TODO
* @author jqs34
@@ -60,11 +78,11 @@
* @version 1.0
*/
@Override
- public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto){
+ public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto) {
List<AppMemberCouponVo> appMemberCouponVoList = memberCouponMapper.listVoMemberCouponByUserId(merBaseDto);
return appMemberCouponVoList;
}
-
+
/**
* @description 核销优惠券
* @author jqs
@@ -73,7 +91,7 @@
* @return void
*/
@Override
- public MerVerifyCouponGetVo getVerifyCoupon(String verifyCoupon){
+ public MerVerifyCouponGetVo getVerifyCoupon(Long verifyCoupon){
MemberCoupon memberCoupon = this.getById(verifyCoupon);
// 检查是否存在该优惠券
if (memberCoupon == null) {
@@ -109,7 +127,7 @@
merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
return merVerifyCouponGetVo;
}
-
+
/**
* @description 核销优惠券
* @author jqs
@@ -118,7 +136,7 @@
* @return MerVerifyCouponGetVo
*/
@Override
- public MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId){
+ public MerVerifyCouponGetVo sureVerifyCoupon(Long memberCouponId){
MemberCoupon memberCoupon = this.getById(memberCouponId);
if(memberCoupon==null||memberCoupon.getDelFlag()==1){
throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
@@ -147,13 +165,13 @@
merVerifyCouponGetVo.setCouponFrom("平台");
}
memberCoupon.setCouponStatus(2);
-
+
memberCoupon.setUseTime(new Date());
this.saveOrUpdate(memberCoupon);
merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
return merVerifyCouponGetVo;
}
-
+
/**
* @description
* @author jqs
@@ -170,7 +188,7 @@
Integer total = this.count(queryWrapper);
return total;
}
-
+
/**
* @description 用户分页获取已领取优惠券列表
* @author jqs
@@ -180,13 +198,13 @@
* @return List<AppMemberCouponPageVo>
*/
@Override
- public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto){
+ public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto, Member member){
List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponMapper.pageAppUserGetCoupon(page, appMemberCouponPageDto);
if(!memberCouponPageVoList.isEmpty()){
String relGoodsIds;
- List<Goods> goodsList;
- List<String> goodsLimitList = null;
HashSet<Long> shopIdSet = new HashSet<>();
+ HashSet<String> goodsIdSet = new HashSet<>();
+ String[] goodsIdArr;
for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
if(appGetAbleCouponPageVo.getShopId()!=null){
shopIdSet.add(appGetAbleCouponPageVo.getShopId());
@@ -194,33 +212,63 @@
if(appGetAbleCouponPageVo.getCouponType()==4){
appGetAbleCouponPageVo.setVerifyCode("2-"+appGetAbleCouponPageVo.getMemberCouponId());
}
- }
- String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
- MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
- mgtBaseBathDto.setIds(shopJoinedString);
- List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
- Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
- .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
- for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
- relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
- if(StringUtils.isNotBlank(relGoodsIds)){
- goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
- if(goodsList!=null&&!goodsList.isEmpty()){
- goodsLimitList = goodsList.stream().map(goods -> {
- String goodsName = goods.getGoodsName();
- goodsName = "限制" + goodsName + "适用";
- return goodsName;
- }).collect(Collectors.toList());
- }
- }else{
- goodsLimitList = new ArrayList<>();
- if(appGetAbleCouponPageVo.getShopId()!=null){
- goodsLimitList.add(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"通用");
- }else{
- goodsLimitList.add("全场通用");
+ if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())){
+ relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
+ goodsIdArr = relGoodsIds.split(",");
+ for(String str : goodsIdArr){
+ goodsIdSet.add(str);
}
}
- appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
+ }
+ //获取关联商户和商品信息并转换为Map
+ String shopJoinedString;
+ Map<Long, MgtSimpleShopVo> shopMap = null;
+ if(shopIdSet!=null&&!shopIdSet.isEmpty()) {
+ shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
+ MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
+ mgtBaseBathDto.setIds(shopJoinedString);
+ List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
+ shopMap = simpleShopVoList.stream()
+ .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
+ }
+ String goodsJoinedString = null;
+ if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){
+ goodsJoinedString = String.join(",", goodsIdSet.stream().map(Object::toString).collect(Collectors.toList()));
+ }
+ Map<String, Goods> goodsMap = null;
+ if(goodsJoinedString!=null){
+ List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsJoinedString).getData();
+ goodsMap = goodsList.stream()
+ .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
+ }
+ //处理返回信息
+ String shopLimit = "全门店通用";
+ String goodsLimit;
+ StringJoiner goodsNameSj;
+ for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
+ goodsLimit = null;
+ goodsNameSj = new StringJoiner(",");
+ //商户限制
+ if(appGetAbleCouponPageVo.getShopId()!=null){
+ shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用";
+ }
+ appGetAbleCouponPageVo.setShopLimit(shopLimit);
+ //商品限制
+ relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
+ if(StringUtils.isNotBlank(relGoodsIds)){
+ relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
+ goodsIdArr = relGoodsIds.split(",");
+ for(String goodsIs : goodsIdArr){
+ if(goodsMap.get(goodsIs)!=null){
+ goodsNameSj.add(goodsMap.get(goodsIs).getGoodsName());
+ }else{
+ log.debug("用户优惠券未找到关联商品"+appGetAbleCouponPageVo.getMemberCouponId()+"-"+appGetAbleCouponPageVo.getRelGoodsIds());
+ }
+ }
+ goodsLimit = goodsNameSj.toString();
+ }
+ appGetAbleCouponPageVo.setGoodsLimit(goodsLimit);
+ //核销商店
if(appGetAbleCouponPageVo.getShopId()!=null){
appGetAbleCouponPageVo.setVerifyShopName(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName());
}
@@ -228,7 +276,7 @@
}
return memberCouponPageVoList;
}
-
+
/**
* @description 定时检查优惠券过期
* @author jqs
@@ -240,7 +288,7 @@
public void timingCheckMemberCoupon(){
memberCouponMapper.timingCheckMemberCoupon();
}
-
+
/**
* @description 使用优惠券
* @author jqs
@@ -253,7 +301,7 @@
public void useMemberCoupon(String memberCouponIds){
memberCouponMapper.useMemberCoupon(memberCouponIds);
}
-
+
/**
* @description 使用优惠券
* @author jqs
@@ -265,7 +313,7 @@
public void backMemberCoupon(String memberCouponIds){
memberCouponMapper.backMemberCoupon(memberCouponIds);
}
-
+
/**
* @description
* @author jqs
@@ -278,8 +326,8 @@
List<MerMemberCouponVo> merMemberCouponVoList = memberCouponMapper.listMerShopGoodsMemberCoupon(merGoodsCouponListDto);
if(merMemberCouponVoList!=null&&merMemberCouponVoList.size()>0){
List<MemberSelectCouponDto> goodsCpuponList = merGoodsCouponListDto.getGoodsCpuponList();
- List<String> selectCouponList = new ArrayList<>();
- Map<String, String> selectCouponMap = new HashMap<>();
+ List<Long> selectCouponList = new ArrayList<>();
+ Map<Long, String> selectCouponMap = new HashMap<>();
Boolean checkSelect = false;
if(merGoodsCouponListDto.getGoodsCpuponList()!=null&&merGoodsCouponListDto.getGoodsCpuponList().size()>0) {
for (MemberSelectCouponDto couponDto : goodsCpuponList) {
@@ -291,7 +339,7 @@
Iterator<MerMemberCouponVo> iterator = merMemberCouponVoList.iterator();
while (iterator.hasNext()) {
MerMemberCouponVo couponVo = iterator.next();
- log.debug("couponVo"+couponVo.toString());
+ //处理已选择优惠券过滤
if(checkSelect){
if (selectCouponList.contains(couponVo.getMemberCouponId()) && selectCouponMap.containsKey(couponVo.getMemberCouponId())) {
String goodsId = selectCouponMap.get(couponVo.getMemberCouponId());
@@ -301,6 +349,7 @@
}
}
}
+ //处理满减卷门槛过滤
if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){
if(couponVo.getCouponType()==1){
BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString()));
@@ -313,18 +362,101 @@
}
return merMemberCouponVoList;
}
-
-
+
+
/**
- * @description 确认核销优惠券
- * @author jqs
- * @date 2023/8/15 11:21
* @param memberCouponId
* @param shopId
- * @return void
+ * @return void
+ * @description 确认核销优惠券
+ * @author jqs
+ * @date 2023/8/15 11:21
*/
@Override
- public void sureMemberCoupon(String memberCouponId,Long shopId){
+ public void sureMemberCoupon(Long memberCouponId, Long shopId) {
memberCouponMapper.sureMemberCoupon(memberCouponId, shopId);
}
+
+ @Override
+ @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+ public void insert(MemberCoupon memberCoupon) {
+ this.baseMapper.insert(memberCoupon);
+ }
+
+
+ /**
+ * 手动添加用户优惠券
+ *
+ * @param couponId
+ * @param number
+ * @return
+ */
+ @Override
+ public R addMemberCoupon(String couponId, Integer number, Long userId) {
+ Coupon coupon = couponService.getById(couponId);
+ if (null == coupon) {
+ return R.fail("优惠券不存在");
+ }
+ List<MemberCoupon> memberCouponList = new ArrayList<>();
+ MemberCoupon memberCoupon;
+ Integer sendTotal = 0;
+ Integer sendPerson = 0;
+ Integer sendUserTotal;
+ for (int i = 0; i < number; i++) {
+ memberCoupon = new MemberCoupon();
+ memberCoupon.setDelFlag(0);
+ memberCoupon.setCouponId(coupon.getCouponId());
+ memberCoupon.setUserId(userId);
+ memberCoupon.setShopId(coupon.getShopId());
+ memberCoupon.setCouponType(coupon.getCouponType());
+ if (coupon.getCouponType() == 1) {
+ memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
+ memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
+ } else if (coupon.getCouponType() == 2) {
+ memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
+ } else if (coupon.getCouponType() == 3) {
+ memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
+ } else {
+ memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
+ }
+ memberCoupon.setCouponStatus(coupon.getCouponStatus());
+ memberCoupon.setCouponName(coupon.getCouponName());
+ memberCoupon.setSendType(coupon.getSendType());
+ memberCoupon.setSendTarget(coupon.getSendTarget());
+ memberCoupon.setSendTimeType(coupon.getSendTimeType());
+ memberCoupon.setSendTime(coupon.getSendTime());
+ memberCoupon.setUseScope(coupon.getUseScope());
+ if (memberCoupon.getUseScope() == 2) {
+ memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
+ }
+ memberCoupon.setValidTimeType(coupon.getValidTimeType());
+ memberCoupon.setValidStartTime(coupon.getValidStartTime());
+ memberCoupon.setValidEndTime(coupon.getValidEndTime());
+ memberCoupon.setValidDay(coupon.getValidDay());
+ memberCoupon.setCouponFrom(coupon.getCouponFrom());
+ memberCoupon.setReceiveTime(new Date());
+ //有效期处理1.时间段2.领取之日起
+ if (coupon.getValidTimeType() == 1) {
+ memberCoupon.setDeadlineTime(coupon.getValidEndTime());
+ } else if (coupon.getValidTimeType() == 2) {
+ memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(), coupon.getValidDay()));
+ }
+ memberCouponList.add(memberCoupon);
+ sendTotal = sendTotal + 1;
+ if (coupon.getSendType() == 1) {
+ sendUserTotal = this.totalMemberCouponByUserAndCoupon(userId, coupon.getCouponId());
+ if (sendUserTotal != null && sendUserTotal > 0) {
+ } else {
+ sendPerson = sendPerson + 1;
+ }
+ }
+ memberCouponRecordService.updateMemberCouponRecord(coupon, userId, 1);
+ }
+ this.saveBatch(memberCouponList);
+ //处理优惠券统计
+ if (sendTotal > 0) {
+ couponMapper.updateCouponTotal(coupon.getCouponId(), sendTotal, sendPerson);
+ }
+ return R.ok();
+ }
}
--
Gitblit v1.7.1