From 2e7f787f8e0859d0a9a6ff1eab6aeadac7934c50 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期一, 25 九月 2023 12:55:18 +0800
Subject: [PATCH] bug
---
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java | 149 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 118 insertions(+), 31 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 74b1e5d..5fbb003 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
@@ -6,6 +6,7 @@
import com.ruoyi.common.core.exception.ServiceException;
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.vo.AppMemberCouponPageVo;
import com.ruoyi.member.mapper.member.MemberCouponMapper;
@@ -14,6 +15,7 @@
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;
@@ -22,8 +24,11 @@
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -81,7 +86,7 @@
throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
} else if (couponStatus == 2) {
throw new ServiceException(AppErrorConstant.COUPON_USED);
- } else if (couponStatus != 0) {
+ } else if (couponStatus != 1) {
throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
}
// 检查优惠券类型
@@ -123,7 +128,7 @@
throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
}else if(memberCoupon.getCouponStatus()==2){
throw new ServiceException(AppErrorConstant.COUPON_USED);
- }else if(memberCoupon.getCouponStatus()==-1){
+ }else if(memberCoupon.getCouponStatus()!=1){
throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
}
if(memberCoupon.getCouponType()!=4){
@@ -176,13 +181,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());
@@ -190,33 +195,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());
}
@@ -245,6 +280,7 @@
* @return void
*/
@Override
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
public void useMemberCoupon(String memberCouponIds){
memberCouponMapper.useMemberCoupon(memberCouponIds);
}
@@ -270,6 +306,57 @@
*/
@Override
public List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(MerGoodsCouponListDto merGoodsCouponListDto){
- return memberCouponMapper.listMerShopGoodsMemberCoupon(merGoodsCouponListDto);
+ 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<>();
+ Boolean checkSelect = false;
+ if(merGoodsCouponListDto.getGoodsCpuponList()!=null&&merGoodsCouponListDto.getGoodsCpuponList().size()>0) {
+ for (MemberSelectCouponDto couponDto : goodsCpuponList) {
+ selectCouponList.add(couponDto.getMemberCouponId());
+ selectCouponMap.put(couponDto.getMemberCouponId(), couponDto.getGoodsId());
+ }
+ checkSelect = true;
+ }
+ Iterator<MerMemberCouponVo> iterator = merMemberCouponVoList.iterator();
+ while (iterator.hasNext()) {
+ MerMemberCouponVo couponVo = iterator.next();
+ //处理已选择优惠券过滤
+ if(checkSelect){
+ if (selectCouponList.contains(couponVo.getMemberCouponId()) && selectCouponMap.containsKey(couponVo.getMemberCouponId())) {
+ String goodsId = selectCouponMap.get(couponVo.getMemberCouponId());
+ if (!merGoodsCouponListDto.getGoodsId().equals(goodsId)) {
+ iterator.remove();
+ continue;
+ }
+ }
+ }
+ //处理满减卷门槛过滤
+ if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){
+ if(couponVo.getCouponType()==1){
+ BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString()));
+ if(goodsMoney.compareTo(couponVo.getMoneyThreshold())<0){
+ iterator.remove();
+ }
+ }
+ }
+ }
+ }
+ return merMemberCouponVoList;
+ }
+
+
+ /**
+ * @description 确认核销优惠券
+ * @author jqs
+ * @date 2023/8/15 11:21
+ * @param memberCouponId
+ * @param shopId
+ * @return void
+ */
+ @Override
+ public void sureMemberCoupon(String memberCouponId,Long shopId){
+ memberCouponMapper.sureMemberCoupon(memberCouponId, shopId);
}
}
--
Gitblit v1.7.1