ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
@@ -73,10 +73,11 @@ public R<Page<AppMemberCouponPageVo>> pageAppUserGetCoupon(@RequestBody AppMemberCouponPageDto appMemberCouponPageDto) { Long userId = SecurityUtils.getUserId(); appMemberCouponPageDto.setUserId(userId); Member member = memberService.getByUserId(userId); Page<AppMemberCouponPageVo> page = new Page<>(); page.setSize(appMemberCouponPageDto.getPageSize()); page.setCurrent(appMemberCouponPageDto.getPageNum()); List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto); List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto, member); return R.ok(page.setRecords(memberCouponPageVoList)); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java
@@ -76,4 +76,10 @@ @ApiModelProperty(value = "宣传海报") private String propagandaPoster; @ApiModelProperty(value = "发放限制数量") private Integer sendLimitNumber; @ApiModelProperty(value = "发放限制0否1是") private Integer sendLimitFlag; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerGoodsCouponListDto.java
@@ -20,15 +20,17 @@ @ApiModelProperty(value = "会员用户id") private Long memberUserId; @ApiModelProperty(value = "商品id") @ApiModelProperty(value = "商品id 可不传 传了只获取对应商品可用优惠券") private String goodsId; @ApiModelProperty(value = "购买数量") @ApiModelProperty(value = "已选优惠券表 可不传 和goodsId关联 传了自动过滤非本goodsId已选优惠券") private List<MemberSelectCouponDto> goodsCpuponList; @ApiModelProperty(value = "购买数量 可不传 和salesPrice关联 传了自动过滤不满足金额门槛的优惠券") private Integer buyNum; @ApiModelProperty(value = "商品售价") @ApiModelProperty(value = "商品售价 可不传 和buyNum关联 传了自动过滤不满足金额门槛的满减优惠券") private BigDecimal salesPrice; @ApiModelProperty(value = "已选优惠券表") private List<MemberSelectCouponDto> goodsCpuponList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
@@ -89,8 +89,8 @@ private String propagandaPoster; @ApiModelProperty(value = "发放限制数量") private String sendLimitNumber; private Integer sendLimitNumber; @ApiModelProperty(value = "发放限制0否1是") private String sendLimitFlag; private Integer sendLimitFlag; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/coupon/Coupon.java
@@ -195,12 +195,12 @@ * 发放限制数量 */ @TableField("send_limit_number") private String sendLimitNumber; private Integer sendLimitNumber; /** * 发放限制0否1是 */ @TableField("send_limit_flag") private String sendLimitFlag; private Integer sendLimitFlag; @Override ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java
@@ -4,7 +4,6 @@ import lombok.Data; import java.math.BigDecimal; import java.util.List; /** * @ClassName AppUnGetCouponPageVo @@ -32,8 +31,11 @@ @ApiModelProperty(value ="优惠券关联商品",hidden = true) private String relGoodsIds; @ApiModelProperty(value = "使用限制") private List<String> goodsLimitList; @ApiModelProperty(value = "商户限制") private String shopLimit; @ApiModelProperty(value = "商品限制") private String goodsLimit; @ApiModelProperty(value = "门槛金额") private BigDecimal moneyThreshold; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppMemberCouponPageVo.java
@@ -6,7 +6,6 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @ClassName AppMemberCouponPageVo @@ -33,8 +32,11 @@ @ApiModelProperty(value ="优惠券关联商品",hidden = true) private String relGoodsIds; @ApiModelProperty(value = "使用限制") private List<String> goodsLimitList; @ApiModelProperty(value = "商户限制") private String shopLimit; @ApiModelProperty(value = "商品限制") private String goodsLimit; @ApiModelProperty(value = "门槛金额") private BigDecimal moneyThreshold; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
@@ -80,4 +80,10 @@ @ApiModelProperty(value = "宣传海报") private String propagandaPoster; @ApiModelProperty(value = "发放限制数量") private Integer sendLimitNumber; @ApiModelProperty(value = "发放限制0否1是") private Integer sendLimitFlag; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
@@ -83,8 +83,8 @@ private String propagandaPoster; @ApiModelProperty(value = "发放限制数量") private String sendLimitNumber; private Integer sendLimitNumber; @ApiModelProperty(value = "发放限制0否1是") private String sendLimitFlag; private Integer sendLimitFlag; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -95,6 +95,15 @@ /** * @description 获取不能获取的优惠券id * @author jqs * @date 2023/7/9 18:06 * @return List<Long> */ List<String> listUnGetCoupon(); /** * @description 可领取优惠券列表 * @author jqs * @date 2023/7/11 10:32 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -23,7 +23,6 @@ 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.poji.shop.Shop; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; import com.ruoyi.system.api.service.RemoteActivityService; @@ -120,7 +119,6 @@ useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元"; } if(couponType.equals("折扣")){ moneyThreshold = mgtCouponPageVo.getMoneyThreshold(); discountPercent = mgtCouponPageVo.getDiscountPercent(); useLimit = discountPercent.toString() + "折"; } @@ -301,6 +299,8 @@ coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType()); coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId()); coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster()); coupon.setSendLimitNumber(mgtCouponEditDto.getSendLimitNumber()); coupon.setSendLimitFlag(mgtCouponEditDto.getSendLimitFlag()); //判断是否指定商品 if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){ List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList(); @@ -986,6 +986,7 @@ couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId()); coupon.setCouponStatus(1); }else{ //初始化新优惠券 coupon = new Coupon(); String couponId = IdUtils.simpleUUID(); coupon.setCouponId(couponId); @@ -1026,6 +1027,8 @@ coupon.setUpdateUserId(merCouponEditDto.getUserId()); coupon.setRelationType(1); coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster()); coupon.setSendLimitNumber(merCouponEditDto.getSendLimitNumber()); coupon.setSendLimitFlag(merCouponEditDto.getSendLimitFlag()); //判断是否指定商品 if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){ List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList(); @@ -1089,19 +1092,27 @@ */ @Override public void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList){ // 获取第一个用户和商店的ID Long userId = giftSendDtoList.get(0).getUserId(); Long shopId = giftSendDtoList.get(0).getShopId(); // 初始化变量 String couponId; Coupon coupon; List<MemberCoupon> memberCouponList = new ArrayList<>(); MemberCoupon memberCoupon; String memberCouponId; // 遍历生日礼物发送DTO列表 for(BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList){ // 获取优惠券ID并查询优惠券信息 couponId = birthdayGiftSendDto.getCouponId(); coupon = this.getById(couponId); // 判断优惠券是否存在或已失效 if(coupon==null||coupon.getCouponStatus()!=1){ throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR); } // 根据优惠券数量生成会员优惠券列表 for(int i=0;i<birthdayGiftSendDto.getCouponNumber();i++){ memberCoupon = new MemberCoupon(); memberCouponId = IdUtils.simpleUUID(); @@ -1110,6 +1121,7 @@ memberCoupon.setCouponId(couponId); memberCoupon.setUserId(userId); memberCoupon.setShopId(shopId); // 根据优惠券类型设置会员优惠券信息 if(coupon.getCouponType()==1){ memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); @@ -1127,6 +1139,7 @@ memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); memberCoupon.setUseScope(coupon.getUseScope()); // 如果优惠券适用范围为指定商品,则设置关联商品ID if(memberCoupon.getUseScope()==2){ memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); } @@ -1136,7 +1149,7 @@ 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){ @@ -1144,8 +1157,10 @@ } memberCouponList.add(memberCoupon); } // 更新会员优惠券记录 memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber()); } // 批量保存会员优惠券列表 memberCouponService.saveBatch(memberCouponList); } @@ -1159,41 +1174,64 @@ */ @Override public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Member member){ //获取用户当前已领取完优惠券 List<String> unUserGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId()); //获取当前已领取完优惠券 List<String> unGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId()); List<String> unGetList = couponMapper.listUnGetCoupon(); //合并不可领取优惠券列表 HashSet<String> mergedList = new HashSet<>(); mergedList.addAll(unUserGetList); mergedList.addAll(unGetList); unGetList = new ArrayList<>(mergedList); List<AppGetAbleCouponPageVo> getAbleCouponPageVoList = couponMapper.getAbleCouponPageVoList(page, member.getRelationShopId(),member.getUserId(),member.getBindingFlag(), unGetList); //处理商品限制 if(!getAbleCouponPageVoList.isEmpty()){ String relGoodsIds; List<Goods> goodsList; List<String> goodsLimitList = null; Shop shop = null; for(AppGetAbleCouponPageVo appGetAbleCouponPageVo : getAbleCouponPageVoList){ 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){ if(shop!=null&&shop.getShopId().equals(appGetAbleCouponPageVo.getShopId())){ }else{ shop = remoteShopService.getShop(appGetAbleCouponPageVo.getShopId()).getData(); } goodsLimitList.add(shop.getShopName()+"通用"); }else{ goodsLimitList.add("全场通用"); HashSet<Long> shopIdSet = new HashSet<>(); HashSet<Long> goodsIdSet = new HashSet<>(); for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){ if(getAbleCouponPageVo.getShopId()!=null){ shopIdSet.add(getAbleCouponPageVo.getShopId()); } if(StringUtils.isNotBlank(getAbleCouponPageVo.getRelGoodsIds())&&!getAbleCouponPageVo.getRelGoodsIds().contains(",")){ goodsIdSet.add(Long.valueOf(getAbleCouponPageVo.getRelGoodsIds())); } } //获取关联商户和商品信息并转换为Map String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); String goodsJoinedString = null; if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){ goodsJoinedString = String.join(",", goodsIdSet.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())); 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 = null; for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){ //商户限制 if(getAbleCouponPageVo.getShopId()!=null){ if(!member.getRelationShopId().equals(getAbleCouponPageVo.getShopId())){ shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用"; } } appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList); getAbleCouponPageVo.setShopLimit(shopLimit); //商品限制 relGoodsIds = getAbleCouponPageVo.getRelGoodsIds(); if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){ goodsLimit = goodsMap.get(relGoodsIds).getGoodsName(); } getAbleCouponPageVo.setGoodsLimit(goodsLimit); } } return getAbleCouponPageVoList; } @@ -1212,13 +1250,23 @@ @Override public void appGetCoupon(String couponId,Long userId,Long shopId){ Coupon coupon = this.getById(couponId); //判断优惠券状态 if(coupon==null||coupon.getDelFlag()==1||coupon.getCouponStatus()!=1||coupon.getSendType()!=1){ throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR); } //判断优惠券用户领取状态 MemberCouponRecord memberCouponRecord = memberCouponRecordService.getByCouponIdAndUserId(couponId,userId); if(memberCouponRecord!=null&&memberCouponRecord.getLimitFlag()==1){ throw new ServiceException(AppErrorConstant.COUPON_GET_ALL); } //判断优惠券发放状态 if(coupon.getSendLimitFlag()==1&&coupon.getSendLimitNumber()>0){ CouponTotal couponTotal = couponTotalService.getById(couponId); if(couponTotal.getSendCount()>=coupon.getSendLimitNumber()){ throw new ServiceException(AppErrorConstant.COUPON_GET_ALL); } } //生成用户优惠券 MemberCoupon memberCoupon = new MemberCoupon(); String memberCouponId = IdUtils.simpleUUID(); memberCoupon.setId(memberCouponId); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -15,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; @@ -180,13 +181,12 @@ * @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<Long> goodsIdSet = new HashSet<>(); for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){ if(appGetAbleCouponPageVo.getShopId()!=null){ shopIdSet.add(appGetAbleCouponPageVo.getShopId()); @@ -194,33 +194,45 @@ if(appGetAbleCouponPageVo.getCouponType()==4){ appGetAbleCouponPageVo.setVerifyCode("2-"+appGetAbleCouponPageVo.getMemberCouponId()); } if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())&&!appGetAbleCouponPageVo.getRelGoodsIds().contains(",")){ goodsIdSet.add(Long.valueOf(appGetAbleCouponPageVo.getRelGoodsIds())); } } //获取关联商户和商品信息并转换为Map String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); String goodsJoinedString = null; if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){ goodsJoinedString = String.join(",", goodsIdSet.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())); 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 = null; 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(appGetAbleCouponPageVo.getShopId()!=null){ if(!member.getRelationShopId().equals(appGetAbleCouponPageVo.getShopId())){ shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用"; } } appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList); appGetAbleCouponPageVo.setShopLimit(shopLimit); //商品限制 relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds(); if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){ goodsLimit = goodsMap.get(relGoodsIds).getGoodsName(); } appGetAbleCouponPageVo.setGoodsLimit(goodsLimit); //核销商店 if(appGetAbleCouponPageVo.getShopId()!=null){ appGetAbleCouponPageVo.setVerifyShopName(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()); } @@ -291,7 +303,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 +313,7 @@ } } } //处理满减卷门槛过滤 if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){ if(couponVo.getCouponType()==1){ BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString())); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -292,7 +292,6 @@ } public static String getMobileByWX(String accessToken, String code) throws Exception { String method = "POST"; Map<String, String> headers = new HashMap<>(16); headers.put("Content-Type", "application/json"); headers.put("Accept", "application/json"); @@ -321,6 +320,7 @@ appUserInfoVo.setNickName(member.getNickName()); appUserInfoVo.setRealName(member.getRealName()); appUserInfoVo.setPhonenumber(member.getMobile()); //绑定会员显示绑定店铺 if (member.getRelationShopId() != null && member.getBindingFlag() == 1) { appUserInfoVo.setRelationShopId(member.getRelationShopId()); Shop shop = shopService.getShop(member.getRelationShopId()).getData(); @@ -330,9 +330,11 @@ appUserInfoVo.setBirthday(member.getBirthday()); appUserInfoVo.setGender(member.getGender()); appUserInfoVo.setAvatar(member.getAvatar()); //待支付待核销统计 AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData(); appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount()); appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount()); //积分 MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); appUserInfoVo.setIntegral(memberTotal.getUseableIntegral()); return appUserInfoVo; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -6,6 +6,7 @@ import com.ruoyi.member.domain.dto.MerGoodsCouponListDto; import com.ruoyi.member.domain.vo.AppMemberCouponPageVo; import com.ruoyi.system.api.domain.dto.MerBaseDto; 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; @@ -68,7 +69,7 @@ * @param appMemberCouponPageDto * @return List<AppMemberCouponPageVo> */ List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto); List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto, Member member); /** * @description 定时检查优惠券过期 ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -279,7 +279,7 @@ WHEN 1 THEN '手动获取' ELSE '指定发放' END sendType, CASE tc.send_type CASE tc.send_target WHEN 2 THEN '全部用户' WHEN 3 THEN '会员用户' WHEN 4 THEN '非会员用户' @@ -314,7 +314,7 @@ WHEN 1 THEN '手动获取' ELSE '指定发放' END sendType, CASE tc.send_type CASE tc.send_target WHEN 2 THEN '全部用户' WHEN 3 THEN '会员用户' WHEN 4 THEN '非会员用户' @@ -344,6 +344,13 @@ WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status=2 AND tc.send_type = 1 AND tmcr.limit_flag = 1 </select> <select id="listUnGetCoupon" resultType="java.lang.String"> SELECT tc.coupon_id FROM t_coupon tc INNER JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status=2 AND tc.send_limit_flag = 1 AND tc.send_limit_number <= tct.send_count </select> <select id="getAbleCouponPageVoList" resultType="com.ruoyi.member.domain.vo.AppGetAbleCouponPageVo"> SELECT @@ -353,7 +360,7 @@ tc.money_threshold moneyThreshold, tc.discount_money discountMoney, tc.discount_percent discountPercent, tc.rel_goods_ids relGoodsIds CASE WHEN tc.coupon_type = 4 THEN tc.rel_goods_ids WHEN tc.use_scope = 2 THEN tc.rel_goods_ids ELSE NULL END relGoodsIds FROM t_coupon tc WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status = 2 AND tc.send_type = 1 AND (tc.coupon_from = 1 OR (tc.coupon_from = 2 AND tc.shop_id = #{shopId})) AND (tc.send_target = 2 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml
@@ -175,7 +175,7 @@ tuc.money_threshold moneyThreshold, tuc.discount_money discountMoney, tuc.discount_percent discountPercent, tuc.rel_goods_ids relGoodsIds, CASE WHEN tuc.coupon_type = 4 THEN tuc.rel_goods_ids WHEN tuc.use_scope = 2 THEN tuc.rel_goods_ids ELSE NULL END relGoodsIds, tuc.shop_id shopId, IFNULL(tuc.valid_start_time,tuc.receive_time) validStartTime, tuc.deadline_time deadlineTime, ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -634,7 +634,8 @@ <if test="param.endDate!=null and param.endDate!=''"> AND Date(create_time) <= #{param.endDate} </if> GROUP BY level GROUP BY mapKey ORDER BY mapValue DESC </select> <select id="getPlTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1211,9 +1211,9 @@ if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) { Long shopId; String activityId; Shop shop; HashSet<Long> shopSet = new HashSet<Long>(); HashSet<String> activitySet = new HashSet<String>(); // 遍历订单列表,获取店铺ID和活动ID for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { shopId = appUserOrderPageVo.getShopId(); shopSet.add(shopId); @@ -1222,22 +1222,25 @@ activitySet.add(activityId); } } Map<Long, Shop> shopMap = new HashMap<>(); shopSet.forEach(shopIdLong -> { Shop shopTemp = remoteShopService.getShop(shopIdLong).getData(); shopMap.put(shopIdLong, shopTemp); }); String shopJoinedString = String.join(",", shopSet.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())); MgtSimpleShopVo simpleShopVo; Integer delayTime = 30; if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } //处理订单回显 for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { if(member.getBindingFlag()==0&&appUserOrderPageVo.getOrderFrom()==2){ appUserOrderPageVo.setShopName("全部店铺"); }else{ shop = shopMap.get(appUserOrderPageVo.getShopId()); appUserOrderPageVo.setShopName(shop.getShopName()); appUserOrderPageVo.setShopServicePhone(shop.getShopServicePhone()); simpleShopVo = shopMap.get(appUserOrderPageVo.getShopId()); appUserOrderPageVo.setShopName(simpleShopVo.getShopName()); appUserOrderPageVo.setShopServicePhone(simpleShopVo.getShopServicePhone()); if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) { appUserOrderPageVo.setSameShop(1); } else { @@ -1830,8 +1833,23 @@ payRecord.setPayType(merVerifyOrderDto.getPayType()); payRecordService.save(payRecord); } //更新用户消费统计 //更新用户积分和消费统计 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); // 如果存在积分兑换比例,则计算积分 if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP); Integer integral = Integer.valueOf(integralBig.toString()); if(integral>0){ memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); memberTotalChangeDto.setOrderId(orderId); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } } //更新消费时间 memberTotalChangeDto.setConsumeTime(nowTime); remoteMemberService.changeMemberTotal(memberTotalChangeDto); return merVerifyOrderVo; @@ -1992,8 +2010,7 @@ } // 设置其他属性 return merCouponGoods; }) .collect(Collectors.toList()); }).collect(Collectors.toList()); // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); //生成服务 @@ -4963,17 +4980,19 @@ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); // 如果存在积分兑换比例,则计算积分 if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分 /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP); Integer integral = Integer.valueOf(integralBig.toString()); memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); memberTotalChangeDto.setOrderId(orderId); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } if(integral>0){ memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); memberTotalChangeDto.setOrderId(orderId); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } }*/ // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney()); memberTotalChangeDto.setPayTime(new Date()); @@ -5003,6 +5022,7 @@ activityTotalChangeDto.setChangeNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); //判断用户是否下过单 如果只有当前订单则为1 if (userActivityNum == 1) { activityTotalChangeDto.setPersonNum(1); } else { @@ -5175,7 +5195,7 @@ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); // 如果存在积分兑换比例,则计算积分 // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分 /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); @@ -5202,7 +5222,6 @@ // 更新会员统计信息 remoteMemberService.changeMemberTotal(memberTotalChangeDto); // 如果订单来源于活动,则更新活动统计信息 //TODO 可考虑改成定时任务统一查询后增加 减少服务器压力但会增加延后性 if (order.getOrderFrom() == 2) { ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto(); activityTotalChangeDto.setActivityId(order.getActivityId()); @@ -5211,10 +5230,11 @@ activityTotalChangeDto.setRefundNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); //判断用户是否还有活动订单 无则减少人数 if (userActivityNum > 0) { activityTotalChangeDto.setPersonNum(1); } else { activityTotalChangeDto.setPersonNum(0); } else { activityTotalChangeDto.setPersonNum(1); } activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); @@ -5834,30 +5854,39 @@ */ @Override public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){ // 获取订单列表 List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto); // 如果订单列表不为空 if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { Long userId; BigDecimal zeroBig = new BigDecimal("0.00"); StringJoiner userIdSj = new StringJoiner(","); // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { userId = merOrderPageVo.getUserId(); userIdSj.add(userId.toString()); if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){ // 如果未支付金额小于零,则设置为零 if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) { merOrderPageVo.setUnPaidMoney(zeroBig); } } // 获取用户列表 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); // 将用户列表转换为Map,以便根据用户ID快速查找用户信息 Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){ // 如果订单的用户ID不为空,并且用户Map中存在对应的用户信息 if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) { // 设置订单的用户名、昵称和手机号 merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName()); merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); }else{ log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户"); } else { log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户"); } } } @@ -5918,7 +5947,6 @@ public ProfitSharingResult queryBill(String orderId) throws WxPayException { OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); ProfitSharing profitSharing = profitSharingService.getByOrderId(orderId); ProfitSharingQueryRequest request = new ProfitSharingQueryRequest(); request.setSubMchid("1650744551"); request.setTransactionId(orderPayment.getTransactionId()); ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -154,7 +154,7 @@ <collection property="mgtOrderGoodsPageVoList" ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo" select="listAllSimpleOrderGoodsByOrderId" column="{orderId=orderId"> column="{orderId=orderId}"> <result column="goodsName" property="goodsName"/> <result column="buyNum" property="buyNum"/> </collection> @@ -1957,7 +1957,7 @@ COUNT(DISTINCT toc.user_id) AS mapValue FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3 WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3) <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> @@ -1983,7 +1983,7 @@ COUNT(DISTINCT toc.user_id) AS mapValue FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status = 3 WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status IN (2,3) <if test="param.activityId!=null and param.activityId!=''"> AND toc.activity_id = #{param.activityId} </if> @@ -2017,7 +2017,7 @@ COUNT(DISTINCT toc.user_id) AS mapValue FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status = 3 WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status IN (2,3) <if test="param.shopId != null and param.shopId != ''"> AND toc.shop_id = #{param.shopId} </if> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopTaskPageVo.java
@@ -43,6 +43,9 @@ @ApiModelProperty(value = "用户头像") private String userPicture; @ApiModelProperty(value = "用户岗位") private String userPosition; @ApiModelProperty(value="跟进时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date followTime; ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -226,7 +226,6 @@ shopRelTagService.deleteByShopId(shop.getShopId()); shopRelUserService.deleteByShopId(shop.getShopId()); //清空归属 shopRelUserService.deleteByShopId(shop.getShopId()); shopStaffService.clearShopStaffRelation(shop.getShopId()); if(!shop.getShopName().equals(mgtEditShopDto.getShopName())){ MgtMemberShopNameDto mgtMemberShopNameDto = new MgtMemberShopNameDto(); @@ -716,7 +715,6 @@ shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId()); shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark()); shopTransferRecordService.save(shopTransferRecord); shopRelUserService.deleteByUserId(shop.getBelongUserId()); } shop.setBelongUserId(mgtTransferShopDto.getTransferUserId()); this.saveOrUpdate(shop); ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -7,21 +7,24 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.shop.domain.dto.*; import com.ruoyi.shop.domain.pojo.task.*; import com.ruoyi.shop.domain.pojo.task.ShopTask; import com.ruoyi.shop.domain.pojo.task.ShopTaskRecord; import com.ruoyi.shop.domain.pojo.task.TaskFile; import com.ruoyi.shop.domain.vo.StaffShopTaskPageVo; import com.ruoyi.shop.mapper.task.ShopTaskMapper; import com.ruoyi.shop.service.task.ShopTaskRecordService; import com.ruoyi.shop.service.task.ShopTaskService; import com.ruoyi.shop.service.task.TaskFileService; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.poji.sys.SysStaff; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * <p> @@ -45,6 +48,9 @@ @Resource private RemoteUserService remoteUserService; @Resource private RemoteConfigService remoteConfigService; /** * 平台跟进商户 @@ -156,14 +162,23 @@ List<StaffShopTaskPageVo> shopTaskPageVoList = shopTaskMapper.pageStaffShopTask(page, staffShopTaskPageDto); if(shopTaskPageVoList!=null&&shopTaskPageVoList.size()>0){ Long userId; SysUser sysUser; SysStaff sysStaff; HashSet<Long> userIdSet = new HashSet<>(); for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){ userIdSet.add(staffShopTaskPageVo.getUserId()); } List<Long> useIdList = new ArrayList<>(userIdSet); List<SysStaff> sysStaffList = remoteConfigService.listSysStaffByIds(useIdList).getData(); Map<Long,SysStaff> sysStaffMap = sysStaffList.stream() .collect(Collectors.toMap(SysStaff::getUserId, Function.identity())); for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){ //获取任务用户信息 userId = staffShopTaskPageVo.getUserId(); if(userId!=null){ sysUser = remoteUserService.getSysUser(userId).getData(); staffShopTaskPageVo.setUserName(sysUser.getNickName()); staffShopTaskPageVo.setUserPicture(sysUser.getAvatar()); sysStaff = sysStaffMap.get(userId); staffShopTaskPageVo.setUserName(sysStaff.getStaffName()); staffShopTaskPageVo.setUserPicture(sysStaff.getStaffAvatar()); staffShopTaskPageVo.setUserPosition(sysStaff.getStaffPost()); } } } ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -811,7 +811,7 @@ ts.sign_time signTime, ts.shop_name shopName, ts.shop_tags shopTags, CONCAT(ts.cooperation_start_time,'-',ts.cooperation_end_time) cooperationTime, ts.cooperation_end_time cooperationTime, CONCAT(ts.shop_area_name,ts.shop_address) shopAddress, ts.shopowner_name shopownerName, ts.shopowner_phone shopownerPhone,