From 45d37a6febb87837a6daa65429703a37e437d257 Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期一, 17 七月 2023 19:58:39 +0800 Subject: [PATCH] bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 340 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 316 insertions(+), 24 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 6b2ad45..97aeb2d 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 @@ -46,6 +46,8 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.Function; @@ -152,14 +154,19 @@ BigDecimal orderPayDeposit = new BigDecimal("0.00"); BigDecimal orderPayMoney = new BigDecimal("0.00"); // 遍历购买商品列表 + HashSet<String> userCouponIdSet = new HashSet<>(); for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { appSureOrderGoodsVo = new AppSureOrderGoodsVo(); + discountMoney = BigDecimal.ZERO; useCoupon = 0; goodsId = appBuyGoodsDto.getGoodsId(); buyNum = appBuyGoodsDto.getBuyNum(); memberCouponId = appBuyGoodsDto.getMemberCouponId(); // 获取商品信息 goods = remoteGoodsService.getGoods(goodsId).getData(); + if(goods.getGoodsStatus()!=1){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } // 设置订单商品信息 appSureOrderGoodsVo.setGoodsId(goodsId); appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); @@ -183,7 +190,7 @@ goodsTotalPrice = goodsPrice.multiply(buyNumBig); goodsRealPrice = goodsTotalPrice; // 处理优惠券 - if (memberCouponId != null) { + if (StringUtils.isNotBlank(memberCouponId)) { appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) { couponType = appMemberCouponVo.getCouponType(); @@ -193,18 +200,30 @@ discountMoney = appMemberCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) { discountPercent = appMemberCouponVo.getDiscountPercent(); goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2, BigDecimal.ROUND_HALF_UP); discountMoney = goodsRealPrice.subtract(goodsTotalPrice); useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { discountMoney = appMemberCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + } useCoupon = 1; + userCouponIdSet.add(memberCouponId); + appSureOrderGoodsVo.setMemberCouponId(memberCouponId); } } + } + if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){ + appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); } appSureOrderGoodsVo.setUseCoupon(useCoupon); appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); @@ -220,34 +239,73 @@ couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); + appSureOrderGoodsVoList.add(appSureOrderGoodsVo); + } + //处理优惠券列表 + if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { + for (AppMemberCouponVo entity : appMemberCouponVoList) { + if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){ + entity.setUseFlag(1); + }else{ + entity.setUseFlag(0); + } + } + for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { + sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList); + } + } + /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { // 获取商品关联优惠券 appGoodsMemberCouponVoList = new ArrayList<>(); - if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { + 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 (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { - appGoodsMemberCouponVoList.add(entity); + 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{ - appGoodsMemberCouponVoList.add(entity); + 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(goodsId)) { + } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) { if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) { moneyThreshold = entity.getMoneyThreshold(); - if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) { - appGoodsMemberCouponVoList.add(entity); + 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{ - appGoodsMemberCouponVoList.add(entity); + if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + }else{ + if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){ + appGoodsMemberCouponVoList.add(entity); + } + } } } } - appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); + sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList); } - appSureOrderGoodsVoList.add(appSureOrderGoodsVo); - } + }*/ // 设置订单相关金额 appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney); appSureOrderVo.setCouponDiscount(couponDiscount); @@ -297,6 +355,9 @@ throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); } Goods goods = remoteGoodsService.getGoods(goodsId).getData(); + if(goods.getGoodsStatus()!=1){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } appPanicBuyVo.setGoodsId(goodsId); appPanicBuyVo.setGoodsName(goods.getGoodsName()); appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction()); @@ -913,18 +974,10 @@ */ @Override public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { - List<Long> shopIds = merHomeShopTotalVo.getShopIds(); - if (null != shopIds && shopIds.size() != 0) { - Integer todayShop = userServiceRecordMapper.countShopServicePersons(shopIds); - merHomeShopTotalVo = orderMapper.getMerHomeShopsTotalVo(shopIds); - merHomeShopTotalVo.setTodayShop(todayShop); - }else{ - Long shopId = merHomeShopTotalVo.getShopId(); - Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); - merHomeShopTotalVo.setTodayShop(todayShop); - merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); - - } + Long shopId = merHomeShopTotalVo.getShopId(); + Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); + merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); + merHomeShopTotalVo.setTodayShop(todayShop); return merHomeShopTotalVo; } @@ -3200,4 +3253,243 @@ remoteActivityService.changeActivityTotal(activityTotalChangeDto); } } + + /** + * @description 员工端活动订单统计 + * @author jqs + * @date 2023/7/17 15:25 + * @param staffTotalDto + * @return StaffActivityOrderTotalVo + */ + @Override + public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){ + StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto); + return staffActivityOrderTotalVo; + } + + /** + * @description 员工端活动统计 + * @author jqs + * @date 2023/7/17 15:51 + * @param staffTotalDto + * @return StaffActivityTotalVo + */ + @Override + public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){ + StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); + return staffActivityTotalVo; + } + + /** + * @description 员工端活动统计订单分布 + * @author jqs + * @date 2023/7/17 16:16 + * @param staffTotalDto + * @return MerOrderDistributionTotalVo + */ + @Override + public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){ + MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); + // 获取订单年龄用户列表 + MerTotalDto merTotalDto = new MerTotalDto(); + merTotalDto.setShopId(staffTotalDto.getShopId()); + List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); + // 如果订单年龄用户列表不为空 + if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { + // 定义变量 + Integer ageType; + List<Long> userIdList; + MerOrderAgeUserVo orderAgeUserVo; + MgtMapTotalPlusVo mgtMapTotalPlusVo; + String[] orderTotalKey = new String[5]; + Integer[] orderTotalValue = new Integer[5]; + BigDecimal[] orderMoneyValue = new BigDecimal[5]; + // 遍历订单年龄用户列表 + for (int i = 0; i < orderAgeUserVoList.size(); i++) { + orderAgeUserVo = orderAgeUserVoList.get(i); + ageType = orderAgeUserVo.getAgeType(); + userIdList = orderAgeUserVo.getUserIdList(); + // 根据年龄类型设置订单总数键 + switch (ageType) { + case 1: + orderTotalKey[i] = "<20"; + break; + case 2: + orderTotalKey[i] = "21-30"; + break; + case 3: + orderTotalKey[i] = "31-40"; + break; + case 4: + orderTotalKey[i] = "41-50"; + break; + case 5: + orderTotalKey[i] = ">50"; + break; + } + // 如果用户ID列表不为空 + if (userIdList != null && !userIdList.isEmpty()) { + mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId()); + orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); + orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); + } else { + orderTotalValue[i] = 0; + orderMoneyValue[i] = BigDecimal.ZERO; + } + } + // 设置订单分布总数对象的属性值 + orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); + orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); + orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); + } + // 返回订单分布总数对象 + return orderDistributionTotalVo; + } + + + /** + * @description 员工端活动统计销售占比 + * @author jqs + * @date 2023/7/17 17:03 + * @param staffTotalDto + * @return MerOrderTypeTotalVo + */ + @Override + public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){ + MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo(); + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto); + List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); + List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); + if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { + MgtMapIntTotalVo MgtMapIntTotalVo; + MgtMapBigTotalVo mgtMapBigTotalVo; + // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 + for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { + MgtMapIntTotalVo = new MgtMapIntTotalVo(); + mgtMapBigTotalVo = new MgtMapBigTotalVo(); + MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); + if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { + MgtMapIntTotalVo.setMapKey("周期"); + mgtMapBigTotalVo.setMapKey("周期"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + MgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + MgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + MgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); + } + return orderTypeTotalVo; + } + + /** + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 + * @param staffTotalDto + * @return StaffActivityDateMemberTotalVo + */ + @Override + public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) { + // 创建返回对象 + StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo(); + // 查询数据库获取数据 + List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityGetMemberTotal(staffTotalDto); + // 将查询结果转为Map + Map<String, Integer> map = new HashMap<>(); + if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) { + map = mgtMapIntTotalVoList.stream() + .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); + } + // 获取日期范围 + List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate()); + int size = dateList.size(); + // 创建日期和成员总数的数组 + String[] dateMemberTotalKey = new String[size]; + Integer[] dateMemberTotalValue = new Integer[size]; + // 遍历日期列表,设置日期和成员总数的数组 + String str; + Integer value; + for (int i = 0; i < size; i++) { + str = dateList.get(i); + dateMemberTotalKey[i] = str; + value = map.get(str); + dateMemberTotalValue[i] = (value != null) ? value : 0; + } + // 设置返回对象的日期和成员总数数组 + staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey); + staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue); + // 返回结果对象 + return staffActivityDateMemberTotalVo; + } + + /** + * @description 员工端获客人数 + * @author jqs + * @date 2023/7/17 18:42 + * @param staffTotalDto + * @return StaffActivityDateMemberTotalVo + */ + @Override + public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) { + // 创建返回对象 + StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo(); + // 查询数据库获取数据 + List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityMemberTotal(staffTotalDto); + // 将查询结果转为Map + Map<String, Integer> map = new HashMap<>(); + if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) { + map = mgtMapIntTotalVoList.stream() + .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); + } + // 获取日期范围 + List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate()); + int size = dateList.size(); + // 创建日期和成员总数的数组 + String[] dateMemberTotalKey = new String[size]; + Integer[] dateMemberTotalValue = new Integer[size]; + // 遍历日期列表,设置日期和成员总数的数组 + String str; + Integer value; + for (int i = 0; i < size; i++) { + str = dateList.get(i); + dateMemberTotalKey[i] = str; + value = map.get(str); + dateMemberTotalValue[i] = (value != null) ? value : 0; + } + // 设置返回对象的日期和成员总数数组 + staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey); + staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue); + // 返回结果对象 + return staffActivityDateMemberTotalVo; + } + + /** + * @description 获取时间段日期 + * @author jqs + * @date 2023/7/17 19:11 + * @param startDate + * @param endDate + * @return List<String> + */ + public static List<String> getDateRange(String startDate, String endDate) { + List<String> dateList = new ArrayList<>(); + LocalDate start = LocalDate.parse(startDate); + LocalDate end = LocalDate.parse(endDate); + while (!start.isAfter(end)) { + dateList.add(start.format(DateTimeFormatter.ISO_DATE)); + start = start.plusDays(1); + } + return dateList; + } } -- Gitblit v1.7.1