From 8444084e6aa11efa23287e7f82474ac22378a5c4 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 01 四月 2025 16:03:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 261 +++++++++++++++++++++++++-------------------------- 1 files changed, 128 insertions(+), 133 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 3c3cb57..65d1676 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -16,10 +16,15 @@ import com.github.binarywang.wxpay.service.WxPayService; import com.google.common.collect.Lists; import com.google.gson.Gson; +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.enums.UserStatus; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; @@ -60,6 +65,8 @@ import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; +import com.ruoyi.system.api.model.QwH5LoginVo; +import com.ruoyi.system.api.model.QwUserDetailDto; import com.ruoyi.system.api.service.*; import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.log4j.Log4j2; @@ -156,6 +163,7 @@ @Value("${wx.pay.callbackPath}") private String callbackPath; + /** @@ -196,7 +204,7 @@ String goodsId; Integer buyNum; BigDecimal buyNumBig; - String memberCouponId; + Long memberCouponId; Goods goods; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; @@ -226,7 +234,7 @@ BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); // 遍历购买商品列表 - HashSet<String> userCouponIdSet = new HashSet<>(); + HashSet<Long> userCouponIdSet = new HashSet<>(); for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); discountMoney = BigDecimal.ZERO; @@ -263,8 +271,11 @@ goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; // 处理优惠券 - if (StringUtils.isNotBlank(memberCouponId)) { - appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); + if (null != memberCouponId) { + appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId.toString()); + System.err.println(JSON.toJSONString(appMemberCouponVoMap)); + System.err.println(memberCouponId); + System.err.println(JSON.toJSONString(appMemberCouponVo)); if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { couponType = appMemberCouponVo.getCouponType(); if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { @@ -274,7 +285,7 @@ goodsRealPrice = goodsTotalPrice.subtract(discountMoney); useCoupon = 1; userCouponIdSet.add(memberCouponId); - appSureOrderGoodsVo.setMemberCouponId(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId.toString()); } } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) { discountPercent = appMemberCouponVo.getDiscountPercent(); @@ -282,7 +293,7 @@ discountMoney = goodsTotalPrice.subtract(goodsRealPrice); useCoupon = 1; userCouponIdSet.add(memberCouponId); - appSureOrderGoodsVo.setMemberCouponId(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId.toString()); } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { discountMoney = appMemberCouponVo.getDiscountMoney(); if (goodsTotalPrice.compareTo(discountMoney) > 0) { @@ -292,7 +303,7 @@ } useCoupon = 1; userCouponIdSet.add(memberCouponId); - appSureOrderGoodsVo.setMemberCouponId(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId.toString()); } } } @@ -356,58 +367,6 @@ sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } } - /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { - // 获取商品关联优惠券 - appGoodsMemberCouponVoList = new ArrayList<>(); - for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList){ - for (AppMemberCouponVo entity : appMemberCouponVoList) { - if (StringUtils.isBlank(entity.getRelGoodsIds())) { - if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { - moneyThreshold = entity.getMoneyThreshold(); - if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) { - if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - }else{ - if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - } - } - } - }else{ - if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - }else{ - if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - } - } - } - } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) { - if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { - moneyThreshold = entity.getMoneyThreshold(); - if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) { - if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - }else{ - if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - } - } - } - }else{ - if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - }else{ - if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ - appGoodsMemberCouponVoList.add(entity); - } - } - } - } - } - sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); - } - }*/ // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); @@ -559,7 +518,7 @@ BigDecimal buyNumBig; Integer serviceNum; Integer goodsNum = 0; - String memberCouponId; + Long memberCouponId; Goods goods = null; GoodsFile goodsFile; BigDecimal goodsPrice; @@ -636,7 +595,10 @@ goodsRealPrice = goodsTotalPrice; // 如果使用了优惠券,计算优惠后的价格 if (memberCouponId != null) { - appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); + appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId.toString()); + if(null == appMemberCouponVo){ + throw new ServiceException("优惠券已使用"); + } // 如果优惠券适用于该商品 if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { couponType = appMemberCouponVo.getCouponType(); @@ -663,7 +625,7 @@ discountMoney = goodsTotalPrice; } } - memberCouponSJ.add(memberCouponId); + memberCouponSJ.add(memberCouponId + ""); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); @@ -1613,7 +1575,64 @@ */ @Override public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { - Long shopId = merHomeShopTotalVo.getShopId(); + // 查询用户信息 + QwUserDetailDto qwUserDetail = new QwUserDetailDto(); + Long userId = SecurityUtils.getUserId(); + qwUserDetail.setUserid(userId.toString()); + // 查询用户信息 + R<QwH5LoginVo> userResult = remoteShopService.qwH5Login(qwUserDetail); + if(userResult==null){ + throw new ServiceException(AppErrorConstant.USER_NO_SHOP); + } + if (R.FAIL == userResult.getCode()) + { + throw new ServiceException(userResult.getMsg()); + } + if (401 == userResult.getCode()) + { + throw new ServiceException("商户已被冻结,请联系管理员",401); + } + QwH5LoginVo userInfo = userResult.getData(); + SysUser user = userInfo.getSysUser(); + String username = user.getUserName(); + // IP黑名单校验 + String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + throw new ServiceException("对不起,您的账号:" + username + " 已停用"); + } + // 查询用户商户 + R<ShopRelUserVo> shopResult = remoteShopService.getShopByUserId(user.getUserId()); + if (R.FAIL == userResult.getCode()) { + throw new ServiceException(userResult.getMsg()); + } + ShopRelUserVo shopInfo = shopResult.getData(); + if(null == shopInfo){ + throw new ServiceException("未查询到商户信息"); + } + Long shopId = shopInfo.getShopId(); + Shop shop = remoteShopService.getShop(shopId).getData(); + if(-1 == shop.getShopStatus()){ + throw new ServiceException("对应商户已删除,请联系管理员"); + } + if(0 == shop.getShopStatus()){ + throw new ServiceException("对应商户已冻结,请联系管理员"); + } + if(2 == shop.getShopStatus()){ + throw new ServiceException("对应商户已终止合作,请联系管理员"); + } + + + shopId = merHomeShopTotalVo.getShopId(); + //获取今日到店 Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); //获取待处理订单和营业额 @@ -2237,7 +2256,11 @@ @Transactional @GlobalTransactional(rollbackFor = Exception.class) public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { - MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); + R<MerVerifyCouponGetVo> verifyCoupon = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()); + if(verifyCoupon.getCode() != 200){ + throw new ServiceException(verifyCoupon.getMsg()); + } + MerVerifyCouponGetVo verifyCouponGetVo = verifyCoupon.getData(); MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData(); Long userId = verifyCouponGetVo.getUserId(); @@ -2591,7 +2614,7 @@ BigDecimal buyNumBig; Integer serviceNum; Integer goodsNum = 0; - String memberCouponId; + Long memberCouponId; Goods goods; BigDecimal goodsPrice; BigDecimal goodsTotalPrice; @@ -2647,8 +2670,12 @@ goodsRealPrice = goodsTotalPrice; //优惠券计算 if (memberCouponId != null) { - appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); + log.info("使用优惠券:{}", memberCouponId); + appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId.toString()); + log.info("匹配的优惠券:{}", JSON.toJSONString(appMemberCouponVo)); if (null != appMemberCouponVo && (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId))) { + log.info("可以使用优惠券:{}", JSON.toJSONString(appMemberCouponVo)); + couponType = appMemberCouponVo.getCouponType(); couponType = appMemberCouponVo.getCouponType(); if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { moneyThreshold = appMemberCouponVo.getMoneyThreshold(); @@ -2668,7 +2695,7 @@ goodsRealPrice = BigDecimal.ZERO; discountMoney = goodsTotalPrice.subtract(goodsRealPrice); } - memberCouponSJ.add(memberCouponId); + memberCouponSJ.add(memberCouponId + ","); } } goodsDeposit = goods.getSubscription(); @@ -2818,6 +2845,7 @@ consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { + log.info("修改优惠券使用状态:{}", JSON.toJSONString(memberCouponSJ)); remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); } //更新会员消费记录 @@ -3870,7 +3898,7 @@ userIdList.add(mgtBasePlatformDto.getUserId()); } else { MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); - mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); + mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getDeptId()); mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); userIdList = mgtUserIdByDept.getUserIdList(); } @@ -3903,8 +3931,10 @@ MgtSimpleShopVo simpleShopVo; HashSet<String> set = new HashSet<>(); // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 - for (Long entity : shopIdList) { - set.add(entity.toString()); + if(null != shopIdList){ + for (Long entity : shopIdList) { + set.add(entity.toString()); + } } String joinedString = String.join(",", set); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); @@ -3944,63 +3974,25 @@ List<Long> userIdList = new ArrayList<>(); if (mgtBasePlatformDto.getUserId() != null) { userIdList.add(mgtBasePlatformDto.getUserId()); - } - else { - // 如果当前登陆人的可视权限是仅个人 只选择了部门也只能看自己的数据 - SysUser sysUser = SecurityUtils.getSysUser(); - if (sysUser.getDataScope().equals("5")){ - userIdList.add(sysUser.getUserId()); - }else{ - MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); - mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getDeptId()); - mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); - userIdList = mgtUserIdByDept.getUserIdList(); - } + } else { + List<SysUser> data = remoteUserService.getUsersByDeptId(mgtBasePlatformDto.getDeptId()).getData(); + userIdList.addAll(data.stream().map(SysUser::getUserId).collect(Collectors.toList())); } if (!userIdList.isEmpty()) { mgtBasePlatformDto.setUserIdList(userIdList); - } - }else{ - // 没有选择筛选部门和员工 获取当前登陆人的可视权限 - SysUser sysUser = SecurityUtils.getSysUser(); - // 如果当前登陆人是查看个人数据 - Long userId1 = null; - // 如果当前登陆人权限是查看部门数据 - List<Long> userList = new ArrayList<>(); - if (sysUser!=null){ - String dataScope = sysUser.getDataScope(); - if (!sysUser.getUserName().equals("admin")){ - if (org.springframework.util.StringUtils.hasLength(dataScope)){ - switch (dataScope){ - case "3": - // 本部门数据 查询当前登陆人属于哪个部门 查询这个部门下所有员工关联的所有店铺 - MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); - mgtUserIdByDept.setDeptId(sysUser.getDeptId()); - mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); - userList = mgtUserIdByDept.getUserIdList(); - mgtBasePlatformDto.setDeptId(sysUser.getDeptId()); - mgtBasePlatformDto.setUserIdList(userList); - case "5": - // 仅个人数据 查询当前登陆人关联店铺下的用户 - userId1 = sysUser.getUserId(); - userList.add(userId1); - mgtBasePlatformDto.setDeptId(sysUser.getDeptId()); - mgtBasePlatformDto.setUserIdList(userList); - break; - } - } - } } } //数据权限 List<Long> userIdList = mgtBasePlatformDto.getUserIdList(); List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId(); - if(null != userIdList){ - userIdList.addAll(userIds); - }else{ - userIdList = userIds; + if(null != userIds){ + if(null != userIdList){ + userIdList.addAll(userIds); + }else{ + userIdList = userIds; + } + mgtBasePlatformDto.setUserIdList(userIdList); } - mgtBasePlatformDto.setUserIdList(userIdList); MgtTotalOrderTotalVo mgtTotalOrderTotalVo = new MgtTotalOrderTotalVo(); @@ -4232,6 +4224,17 @@ return totalActivityTotalVo; } + //数据权限 + List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId(); + if(null != userIds){ + List<Long> userIdList = mgtBasePlatformDto.getUserIdList(); + if(null == userIdList){ + userIdList = new ArrayList<>(); + } + userIdList.addAll(userIds); + mgtBasePlatformDto.setUserIdList(userIdList); + } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { if(shopIdList==null||shopIdList.isEmpty()){ @@ -4242,20 +4245,8 @@ shopIdList = new ArrayList<>(); shopIdList.add(mgtBasePlatformDto.getShopId()); } - //数据权限 - List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId(); - if(null != userIds){ - BoardMemberTotalDto boardMemberTotalDto = new BoardMemberTotalDto(); - boardMemberTotalDto.setUserIds(userIds); - List<Shop> shopList = remoteShopService.getShopBySysUserIds(boardMemberTotalDto); - List<Long> collect = shopList.stream().map(Shop::getShopId).collect(Collectors.toList()); - if(null != shopIdList){ - shopIdList.addAll(collect); - }else{ - shopIdList = collect; - } - mgtBasePlatformDto.setShopIdList(shopIdList); - } + mgtBasePlatformDto.setShopIdList(shopIdList); + //获取基础统计 MgtPlTotalActivityTotalVo mgtTotalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto); totalActivityTotalVo.setOrderTotal(mgtTotalActivityTotalVo.getOrderTotal()); @@ -4636,7 +4627,11 @@ // 创建MerVerifyCouponVo对象 MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 - MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(verifyCode).getData(); + R<MerVerifyCouponGetVo> verifyCoupon = remoteCouponService.getVerifyCoupon(Long.valueOf(verifyCode)); + if(verifyCoupon.getCode() != 200){ + throw new ServiceException(verifyCoupon.getMsg()); + } + MerVerifyCouponGetVo verifyCouponGetVo = verifyCoupon.getData(); MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); // 检查优惠券状态 int couponStatus = memberCoupon.getCouponStatus(); -- Gitblit v1.7.1