| | |
| | | |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | 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(); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | */ |
| | | @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; |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |