| | |
| | | package com.ruoyi.order.service.impl.order; |
| | | |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.*; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; |
| | | import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; |
| | | import com.github.binarywang.wxpay.config.WxPayConfig; |
| | | import com.github.binarywang.wxpay.exception.WxPayException; |
| | | import com.github.binarywang.wxpay.service.WxPayService; |
| | | import com.google.common.base.Joiner; |
| | | import com.google.gson.Gson; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.CodeFactoryUtil; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.config.WxPayConfiguration; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.pojo.account.OrderPayment; |
| | | import com.ruoyi.order.domain.pojo.account.OrderRefund; |
| | | import com.ruoyi.order.domain.pojo.account.ProfitSharing; |
| | | import com.ruoyi.order.domain.pojo.order.ConsumerGoods; |
| | | import com.ruoyi.order.domain.pojo.order.Order; |
| | | import com.ruoyi.order.domain.pojo.order.OrderGoods; |
| | | import com.ruoyi.order.domain.pojo.order.PayRecord; |
| | | import com.ruoyi.order.domain.vo.*; |
| | | import com.ruoyi.order.enums.RefundStatusEnum; |
| | | import com.ruoyi.order.enums.dict.IDict; |
| | | import com.ruoyi.order.mapper.order.OrderMapper; |
| | | import com.ruoyi.order.service.order.ConsumerGoodsService; |
| | | import com.ruoyi.order.service.order.OrderGoodsService; |
| | | import com.ruoyi.order.service.order.OrderService; |
| | | import com.ruoyi.order.service.order.UserServiceRecordService; |
| | | import com.ruoyi.order.service.account.OrderPaymentService; |
| | | import com.ruoyi.order.service.account.OrderRefundService; |
| | | import com.ruoyi.order.service.account.PaymentMessageService; |
| | | import com.ruoyi.order.service.account.ProfitSharingService; |
| | | import com.ruoyi.order.service.order.*; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.constant.DelayTaskEnum; |
| | | import com.ruoyi.system.api.constant.SecurityConstant; |
| | |
| | | import com.ruoyi.system.api.domain.poji.goods.Goods; |
| | | import com.ruoyi.system.api.domain.poji.goods.GoodsFile; |
| | | import com.ruoyi.system.api.domain.poji.goods.ShopGoods; |
| | | import com.ruoyi.system.api.domain.poji.member.BirthdayCard; |
| | | 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.member.MemberGiftRecord; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.service.*; |
| | | import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.redisson.api.RLock; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | |
| | | * @since 2023-04-25 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService { |
| | | |
| | | @Resource |
| | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | //@Resource |
| | | //@Qualifier("profitsSharingServiceImpl") |
| | | //private ProfitsSharingService profitsSharingService; |
| | | @Resource |
| | | private PayRecordService payRecordService; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private RedissonClient redissonClient; |
| | | |
| | | /** 商户号 */ |
| | | public static String merchantId = ""; |
| | | /** 商户API私钥路径 */ |
| | | public static String privateKeyPath = ""; |
| | | /** 商户证书序列号 */ |
| | | public static String merchantSerialNumber = ""; |
| | | /** 微信支付平台证书路径 */ |
| | | public static String wechatPayCertificatePath = ""; |
| | | /** 微信支付 APIv3 密钥 */ |
| | | public static String apiV3Key = ""; |
| | | /** 微信支付APPID */ |
| | | public static String appId=""; |
| | | /** 微信支付商户ID */ |
| | | public static String mchId=""; |
| | | /** 通知地址 */ |
| | | public static String notifyUrl=""; |
| | | @Resource |
| | | private WxPayService wxService; |
| | | |
| | | @Resource |
| | | private PaymentMessageService paymentMessageService; |
| | | |
| | | @Resource |
| | | private OrderPaymentService orderPaymentService; |
| | | |
| | | @Resource |
| | | private ProfitSharingService profitSharingService; |
| | | |
| | | @Resource |
| | | private OrderRefundService orderRefundService; |
| | | |
| | | /** |
| | | * @description: buyGoods |
| | |
| | | @Override |
| | | public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) { |
| | | Long userId = appSureOrderDto.getUserId(); |
| | | Shop shop = remoteShopService.getShop(appSureOrderDto.getShopId()).getData(); |
| | | if(shop!=null&&shop.getShopStatus()!=1){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_CLOSED); |
| | | } |
| | | // 初始化订单对象 |
| | | AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); |
| | | // 初始化订单商品列表 |
| | |
| | | Map<String, Goods> goodsMap = goodsList.stream() |
| | | .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); |
| | | Boolean haveDeposit = false; |
| | | for(Goods goods : goodsList){ |
| | | if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){ |
| | | for (Goods goods : goodsList) { |
| | | if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { |
| | | haveDeposit = true; |
| | | } |
| | | } |
| | |
| | | |
| | | // 将优惠券列表转换为Map,以优惠券ID为键 |
| | | Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>(); |
| | | if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){ |
| | | if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { |
| | | appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity())); |
| | | } |
| | | AppMemberCouponVo appMemberCouponVo; |
| | |
| | | memberCouponId = appBuyGoodsDto.getMemberCouponId(); |
| | | // 获取商品信息 |
| | | goods = goodsMap.get(goodsId); |
| | | if(goods.getGoodsStatus()!=1){ |
| | | if (goods.getGoodsStatus() != 1) { |
| | | throw new ServiceException(AppErrorConstant.GOODS_DOWN); |
| | | } |
| | | // 设置订单商品信息 |
| | |
| | | appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); |
| | | appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | appSureOrderGoodsVo.setGoodsType(goods.getGoodsType()); |
| | | appSureOrderGoodsVo.setGoodsTag(goods.getGoodsTags()); |
| | | // 获取商品图片 |
| | | goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); |
| | | appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl()); |
| | |
| | | if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { |
| | | moneyThreshold = appMemberCouponVo.getMoneyThreshold(); |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) { |
| | | if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney) > 0) { |
| | | goodsRealPrice = goodsTotalPrice.subtract(discountMoney); |
| | | useCoupon = 1; |
| | | userCouponIdSet.add(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); |
| | | goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); |
| | | discountMoney = goodsTotalPrice.subtract(goodsRealPrice); |
| | | useCoupon = 1; |
| | | userCouponIdSet.add(memberCouponId); |
| | | appSureOrderGoodsVo.setMemberCouponId(memberCouponId); |
| | | } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | if(goodsTotalPrice.compareTo(discountMoney)>0){ |
| | | if (goodsTotalPrice.compareTo(discountMoney) > 0) { |
| | | goodsRealPrice = goodsTotalPrice.subtract(discountMoney); |
| | | if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ |
| | | if (goodsRealPrice.compareTo(BigDecimal.ZERO) < 0) { |
| | | goodsRealPrice = BigDecimal.ZERO; |
| | | } |
| | | useCoupon = 1; |
| | |
| | | appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice); |
| | | appSureOrderGoodsVo.setCouponDiscount(discountMoney); |
| | | appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); |
| | | // 获取商品押金 |
| | | // 获取商品订金 |
| | | goodsDeposit = goods.getSubscription(); |
| | | if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { |
| | | if (goods.getSubscriptionFlag()==1 && goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) { |
| | | goodsDeposit = goodsDeposit.multiply(buyNumBig); |
| | | }else{ |
| | | if(haveDeposit){ |
| | | } else { |
| | | if (haveDeposit) { |
| | | goodsDeposit = goodsRealPrice; |
| | | }else{ |
| | | } else { |
| | | goodsDeposit = new BigDecimal("0.00"); |
| | | } |
| | | } |
| | |
| | | //处理优惠券列表 |
| | | if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) { |
| | | for (AppMemberCouponVo entity : appMemberCouponVoList) { |
| | | if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){ |
| | | if (userCouponIdSet != null && userCouponIdSet.contains(entity.getMemberCouponId())) { |
| | | entity.setUseFlag(1); |
| | | }else{ |
| | | } else { |
| | | entity.setUseFlag(0); |
| | | } |
| | | |
| | |
| | | } |
| | | // 过滤商品优惠券列表 |
| | | List<AppMemberCouponVo> appGoodsMemberCouponVoList; |
| | | for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { |
| | | for (AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) { |
| | | appGoodsMemberCouponVoList = new ArrayList<>(); |
| | | for(AppMemberCouponVo entity : appMemberCouponVoList){ |
| | | if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){ |
| | | if(entity.getCouponType()==1){ |
| | | if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | for (AppMemberCouponVo entity : appMemberCouponVoList) { |
| | | if (StringUtils.isBlank(entity.getRelGoodsIds()) || entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) { |
| | | if (entity.getCouponType() == 1) { |
| | | if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) <= 0) { |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | } |
| | | }else if(entity.getCouponType()==2){ |
| | | /*if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0 && entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) { |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | }*/ |
| | | } else if (entity.getCouponType() == 2) { |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | }else if(entity.getCouponType()==3){ |
| | | if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){ |
| | | } else if (entity.getCouponType() == 3) { |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) { |
| | | appGoodsMemberCouponVoList.add(entity); |
| | | } |
| | | }*/ |
| | | } |
| | | |
| | | } |
| | |
| | | @Override |
| | | public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) { |
| | | Long userId = appPanicBuyDto.getUserId(); |
| | | Shop shop = remoteShopService.getShop(appPanicBuyDto.getShopId()).getData(); |
| | | if(shop!=null&&shop.getShopStatus()!=1){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_CLOSED); |
| | | } |
| | | AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo(); |
| | | String activityId = appPanicBuyDto.getActivityId(); |
| | | String goodsId = appPanicBuyDto.getGoodsId(); |
| | |
| | | if (activityGoodsGetVo.getActivityStatus() == 2) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_END); |
| | | } |
| | | if (activityGoodsGetVo.getAvailableBuyNum() < 1) { |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId); |
| | | if (surpNum == null || surpNum < 1) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); |
| | | } |
| | | if (activityGoodsGetVo.getAvailableBuyNum() < 1) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); |
| | | } |
| | | if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND); |
| | | } |
| | | Goods goods = remoteGoodsService.getGoods(goodsId).getData(); |
| | | if(goods.getGoodsStatus()!=1){ |
| | | if (goods.getGoodsStatus() != 1) { |
| | | throw new ServiceException(AppErrorConstant.GOODS_DOWN); |
| | | } |
| | | appPanicBuyVo.setActivityId(activityId); |
| | | appPanicBuyVo.setGoodsId(goodsId); |
| | | appPanicBuyVo.setGoodsName(goods.getGoodsName()); |
| | | appPanicBuyVo.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | appPanicBuyVo.setGoodsType(goods.getGoodsType()); |
| | | appPanicBuyVo.setGoodsTag(goods.getGoodsTags()); |
| | | //商品图片 |
| | | goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData(); |
| | | appPanicBuyVo.setGoodsPicture(goodsFile.getFileUrl()); |
| | |
| | | appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice); |
| | | appPanicBuyVo.setGoodsRealPrice(goodsRealPrice); |
| | | goodsDeposit = activityGoodsGetVo.getActivitySubscription(); |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { |
| | | goodsDeposit = new BigDecimal("0.00"); |
| | | }else{ |
| | | } else { |
| | | goodsDeposit = goodsDeposit.multiply(buyNumBig); |
| | | } |
| | | appPanicBuyVo.setGoodsDeposit(goodsDeposit); |
| | |
| | | Map<String, Goods> goodsMap = goodsList.stream() |
| | | .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); |
| | | Boolean haveDeposit = false; |
| | | for(Goods goods : goodsList){ |
| | | if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){ |
| | | for (Goods goods : goodsList) { |
| | | if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { |
| | | haveDeposit = true; |
| | | } |
| | | } |
| | |
| | | Integer serviceNum; |
| | | Integer goodsNum = 0; |
| | | String memberCouponId; |
| | | Goods goods; |
| | | Goods goods = null; |
| | | GoodsFile goodsFile; |
| | | BigDecimal goodsPrice; |
| | | BigDecimal goodsTotalPrice; |
| | |
| | | BigDecimal orderPayMoney = new BigDecimal("0.00"); |
| | | // 创建订单ID和订单号 |
| | | String orderId = IdUtils.simpleUUID(); |
| | | |
| | | String orderNo = CodeFactoryUtil.getShopOrderNo(); |
| | | OrderGoods orderGoods; |
| | | String orderGoodsId; |
| | |
| | | HashSet<String> goodsTypeSet = new HashSet<>(); |
| | | //使用优惠券 |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | List<String> goodsNameList = new ArrayList<>(); |
| | | // 遍历购买的商品列表 |
| | | for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { |
| | | appSureOrderGoodsVo = new AppSureOrderGoodsVo(); |
| | |
| | | memberCouponId = appBuyGoodsDto.getMemberCouponId(); |
| | | // 获取商品信息 |
| | | goods = goodsMap.get(goodsId); |
| | | goodsNameList.add(goods.getGoodsName()); |
| | | // 设置商品信息 |
| | | appSureOrderGoodsVo.setGoodsId(goodsId); |
| | | appSureOrderGoodsVo.setGoodsName(goods.getGoodsName()); |
| | |
| | | } |
| | | } 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); |
| | | goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); |
| | | discountMoney = goodsTotalPrice.subtract(goodsRealPrice); |
| | | useCoupon = 1; |
| | | } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | goodsRealPrice = goodsTotalPrice.subtract(discountMoney); |
| | | useCoupon = 1; |
| | | } |
| | | if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ |
| | | goodsRealPrice = BigDecimal.ZERO; |
| | | discountMoney = goodsTotalPrice; |
| | | } |
| | | } |
| | | memberCouponSJ.add(memberCouponId); |
| | |
| | | appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); |
| | | // 获取商品押金 |
| | | goodsDeposit = goods.getSubscription(); |
| | | if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) { |
| | | if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) { |
| | | goodsDeposit = goodsDeposit.multiply(buyNumBig); |
| | | }else{ |
| | | if(haveDeposit){ |
| | | } else { |
| | | if (haveDeposit) { |
| | | goodsDeposit = goodsRealPrice; |
| | | }else{ |
| | | } else { |
| | | goodsDeposit = new BigDecimal("0.00"); |
| | | } |
| | | } |
| | |
| | | orderGoods.setServiceNum(serviceNum); |
| | | orderGoods.setGoodsType(goods.getGoodsType()); |
| | | orderGoods.setGoodsName(goods.getGoodsName()); |
| | | orderGoods.setGoodsTag(goods.getGoodsTags()); |
| | | orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | orderGoods.setGoodsPicture(goodsFile.getFileUrl()); |
| | | // 保存订单商品 |
| | | orderGoodsService.save(orderGoods); |
| | |
| | | order.setDiscountMoney(couponDiscount); |
| | | order.setReceivableMoney(orderPayMoney); |
| | | order.setReceivableDeposit(orderPayDeposit); |
| | | order.setChangeReceivableMoney(orderPayMoney); |
| | | order.setOfflinePayMoney(BigDecimal.ZERO); |
| | | // 根据支付类型计算支付金额 |
| | | if (appPlaceOrderDto.getPayType() == 1) { |
| | | order.setPayMoney(orderPayMoney); |
| | | order.setOnlinePayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setPayMoney(orderPayMoney); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount)); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | } else if (appPlaceOrderDto.getPayType() == 2) { |
| | |
| | | order.setOnlinePayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setPayMoney(orderPayDeposit); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit)); |
| | | order.setPayType(2); |
| | | order.setCloseFlag(0); |
| | | } |
| | | order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); |
| | | order.setGoodsNum(goodsNum); |
| | | order.setCreateTime(new Date()); |
| | | if(appPlaceOrderDto.getNewMemberFlag()!=null&&appPlaceOrderDto.getNewMemberFlag()==1){ |
| | | order.setNewMemberFlag(1); |
| | | } |
| | | // 保存订单 |
| | | this.save(order); |
| | | // 更新用户商品类型 |
| | |
| | | } |
| | | appPlaceOrderVo.setOrderId(orderId); |
| | | appPlaceOrderVo.setOrderNo(orderNo); |
| | | // 调用支付 |
| | | /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest(); |
| | | request.setCombineAppid(); |
| | | request.setCombineMchid(); |
| | | profitsSharingService.combineTransactions(request);*/ |
| | | |
| | | //构建预下单支付对象 |
| | | /*PrepayRequest request = new PrepayRequest(); |
| | | Amount amount = new Amount(); |
| | | amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString())); |
| | | request.setAmount(amount); |
| | | request.setAppid(this.appId); |
| | | request.setMchid(this.mchId); |
| | | request.setDescription(order.getGoodsInfo()); |
| | | request.setNotifyUrl(this.notifyUrl); |
| | | request.setOutTradeNo(order.getOrderId()); |
| | | Payer payer = new Payer(); |
| | | payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********"); |
| | | request.setPayer(payer);*/ |
| | | //返回前端唤醒支付结果信息 |
| | | /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request); |
| | | appPlaceOrderVo.setAppId(this.appId); |
| | | appPlaceOrderVo.setTimeStamp(res.getTimeStamp()); |
| | | appPlaceOrderVo.setNonceStr(res.getNonceStr()); |
| | | appPlaceOrderVo.setPackageStr(res.getPackageVal()); |
| | | appPlaceOrderVo.setTradeType(res.getSignType()); |
| | | appPlaceOrderVo.setPaySign(res.getPaySign());*/ |
| | | |
| | | |
| | | //商品数据 |
| | | String goodsName = ""; |
| | | if (null != goodsNameList) { |
| | | goodsName = String.join(",", goodsNameList); |
| | | } |
| | | //减去优惠券 |
| | | if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){ |
| | | if (StringUtils.isNotBlank(memberCouponSJ.toString())) { |
| | | remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); |
| | | } |
| | | //生成自动取消订单延时任务 |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | String outTradeNo = IdUtils.simpleUUID(); |
| | | // 保存订单 交易流水 |
| | | order.setOutTradeNo(outTradeNo); |
| | | this.saveOrUpdate(order); |
| | | Integer delayTime = 30; |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); |
| | | // 小程序微信下单支付 |
| | | createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, |
| | | orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), |
| | | appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1); |
| | | //生成自动取消订单延时任务 |
| | | String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign(); |
| | | redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES); |
| | | DelayTask delayTask = new DelayTask(); |
| | | delayTask.setDelFlag(0); |
| | | delayTask.setCreateTime(new Date()); |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | }else{ |
| | | order.setOrderStatus(2); |
| | | this.saveOrUpdate(order); |
| | | } |
| | | redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); |
| | | DelayTask delayTask = new DelayTask(); |
| | | delayTask.setDelFlag(0); |
| | | delayTask.setCreateTime(new Date()); |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime)); |
| | | |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | | /** |
| | | * 小程序支付下单API |
| | | * @param appPlaceOrderVo |
| | | * @param userId |
| | | * @param shopId |
| | | * @param goodsName |
| | | * @param outTradeNo |
| | | * @param orderId |
| | | * @param payMoney |
| | | * @param openid |
| | | * @param payerClientIp |
| | | * @param goodsNameList |
| | | */ |
| | | |
| | | private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, |
| | | String goodsName, String outTradeNo, |
| | | String orderId, BigDecimal payMoney, |
| | | String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){ |
| | | try { |
| | | // 创建支付订单 |
| | | R<String> resultMch = remoteShopService.getShopSubMchId(shopId); |
| | | String subMchId = resultMch.getData(); |
| | | if (StringUtils.isEmpty(subMchId)) { |
| | | throw new ServiceException("获取微信商户号失败"); |
| | | } |
| | | WxPayConfig config = wxService.getConfig(); |
| | | config.setSubMchId(subMchId); |
| | | |
| | | PartnerTransactionsRequest request = new PartnerTransactionsRequest(); |
| | | request.setSpAppid(config.getAppId()); |
| | | request.setSpMchid(config.getMchId()); |
| | | request.setSubMchid(config.getSubMchId()); |
| | | // 商品描述 body |
| | | String description = goodsName + "-商品购买"; |
| | | |
| | | request.setDescription(description); |
| | | request.setOutTradeNo(outTradeNo); |
| | | request.setNotifyUrl(config.getNotifyUrl()); |
| | | // 结算信息 |
| | | PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); |
| | | // TODO 分账处理 |
| | | if(orderFrom==2){ |
| | | settleInfo.setProfitSharing(true); |
| | | }else{ |
| | | settleInfo.setProfitSharing(false); |
| | | } |
| | | settleInfo.setSubsidyAmount(BigDecimal.ZERO); |
| | | request.setSettleInfo(settleInfo); |
| | | |
| | | // 订单总金额 |
| | | Integer totalFee = payMoney.multiply(new BigDecimal(100)).intValue(); |
| | | PartnerTransactionsRequest.Amount amount = new PartnerTransactionsRequest.Amount(); |
| | | amount.setTotal(totalFee); |
| | | amount.setCurrency("CNY"); |
| | | request.setAmount(amount); |
| | | Date endTime = appPlaceOrderVo.getEndTime(); |
| | | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); |
| | | String rfc3339Format = formatter.format(endTime); |
| | | request.setTimeExpire(rfc3339Format); |
| | | // 支付者 |
| | | PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer(); |
| | | payer.setSpOpenid(openid); |
| | | request.setPayer(payer); |
| | | |
| | | // 场景信息 |
| | | PartnerTransactionsRequest.SceneInfo sceneInfo = new PartnerTransactionsRequest.SceneInfo(); |
| | | sceneInfo.setPayerClientIp(payerClientIp); |
| | | request.setSceneInfo(sceneInfo); |
| | | |
| | | TransactionsResult.JsapiResult result = wxService.getEcommerceService().partnerTransactions(TradeTypeEnum.JSAPI, request); |
| | | |
| | | // 请求参数 |
| | | Gson gson = new Gson(); |
| | | String payRequestJson = gson.toJson(request); |
| | | // 返回参数 |
| | | String payResponseJson = gson.toJson(result); |
| | | |
| | | // 支付相关信息返回 |
| | | appPlaceOrderVo.setAppId(result.getAppId()); |
| | | appPlaceOrderVo.setMchId(config.getMchId()); |
| | | appPlaceOrderVo.setTimeStamp(result.getTimeStamp()); |
| | | appPlaceOrderVo.setNonceStr(result.getNonceStr()); |
| | | appPlaceOrderVo.setPackageStr(result.getPackageValue()); |
| | | appPlaceOrderVo.setSignType(result.getSignType()); |
| | | appPlaceOrderVo.setPaySign(result.getPaySign()); |
| | | appPlaceOrderVo.setPrepayId(result.getPackageValue()); |
| | | |
| | | // 保存支付订单统一下单日志 |
| | | paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson); |
| | | |
| | | // 保存支付订单统一下单支付记录 |
| | | orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, outTradeNo, payMoney, |
| | | appPlaceOrderVo.getEndTime(), "Y", openid, |
| | | Joiner.on(";").join(goodsNameList), result.getPackageValue()); |
| | | |
| | | } catch (WxPayException e) { |
| | | throw new ServiceException(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | String goodsId = appPlaceActivityDto.getGoodsId(); |
| | | Integer buyNum = appPlaceActivityDto.getBuyNum(); |
| | | //redis库存控制极简版 |
| | | String goodsLock = "goods_lock_"+activityId+"_"+goodsId; |
| | | String goodsLock = "goods_lock_" + activityId + "_" + goodsId; |
| | | RLock redissonLock = redissonClient.getLock(goodsLock); |
| | | try{ |
| | | try { |
| | | redissonLock.lock(30, TimeUnit.SECONDS); |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId); |
| | | if(surpNum==null||surpNum<buyNum){ |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId); |
| | | if (surpNum == null || surpNum < buyNum) { |
| | | throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL); |
| | | }else{ |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum); |
| | | } else { |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum); |
| | | } |
| | | }finally{ |
| | | } finally { |
| | | redissonLock.unlock(); |
| | | } |
| | | // 定义购买数量,服务数量,商品数量 |
| | |
| | | appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice); |
| | | // 获取商品押金 |
| | | goodsDeposit = activityGoodsGetVo.getActivitySubscription(); |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { |
| | | goodsDeposit = new BigDecimal("0.00"); |
| | | }else{ |
| | | } else { |
| | | goodsDeposit = goodsDeposit.multiply(buyNumBig); |
| | | } |
| | | appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit); |
| | |
| | | orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); |
| | | orderGoods.setServiceNum(serviceNum); |
| | | orderGoods.setGoodsType(goods.getGoodsType()); |
| | | orderGoods.setGoodsTag(goods.getGoodsTags()); |
| | | orderGoods.setGoodsName(goods.getGoodsName()); |
| | | orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | orderGoods.setGoodsPicture(goodsFile.getFileUrl()); |
| | | // 保存订单商品 |
| | | orderGoodsService.save(orderGoods); |
| | |
| | | goodsTypeSet.add("单品"); |
| | | } |
| | | String goodsNurse = goods.getGoodsNurses(); |
| | | if(StringUtils.isNotBlank(goodsNurse)){ |
| | | if (StringUtils.isNotBlank(goodsNurse)) { |
| | | String[] goodsNurseArr = goodsNurse.split(","); |
| | | for(String str : goodsNurseArr){ |
| | | for (String str : goodsNurseArr) { |
| | | goodsNurseSet.add(str); |
| | | } |
| | | } |
| | |
| | | order.setDiscountMoney(couponDiscount); |
| | | order.setReceivableMoney(orderPayMoney); |
| | | order.setReceivableDeposit(orderPayDeposit); |
| | | order.setChangeReceivableMoney(orderPayMoney); |
| | | order.setActivityId(activityId); |
| | | order.setActivityName(activityGoodsGetVo.getActivityName()); |
| | | order.setOfflinePayMoney(BigDecimal.ZERO); |
| | | // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志 |
| | | if (appPlaceActivityDto.getPayType() == 1) { |
| | | order.setPayMoney(orderPayMoney); |
| | |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount)); |
| | | } else if (appPlaceActivityDto.getPayType() == 2) { |
| | | order.setPayMoney(orderPayDeposit); |
| | | order.setOnlinePayMoney(orderPayDeposit); |
| | |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | order.setPayType(2); |
| | | order.setCloseFlag(0); |
| | | order.setChangeReceivableMoney(orderGoodsMoney.subtract(couponDiscount).subtract(orderPayDeposit)); |
| | | } |
| | | // 设置订单备注,商品数量,创建时间 |
| | | order.setOrderRemark(appPlaceActivityDto.getOrderRemark()); |
| | | order.setGoodsNum(goodsNum); |
| | | order.setCreateTime(new Date()); |
| | | if(appPlaceActivityDto.getNewMemberFlag()!=null&&appPlaceActivityDto.getNewMemberFlag()==1){ |
| | | order.setNewMemberFlag(1); |
| | | } |
| | | // 保存订单 |
| | | this.save(order); |
| | | // 更新用户商品类型 |
| | | if (goodsTypeSet != null || goodsNurseSet!= null) { |
| | | if (goodsTypeSet != null || goodsNurseSet != null) { |
| | | AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto(); |
| | | appMemberGoodsTypeDto.setUserId(userId); |
| | | appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet); |
| | |
| | | appPlaceOrderVo.setPackageStr(res.getPackageVal()); |
| | | appPlaceOrderVo.setTradeType(res.getSignType()); |
| | | appPlaceOrderVo.setPaySign(res.getPaySign()); |
| | | |
| | | */ |
| | | List<String> goodsNameList = new ArrayList<>(); |
| | | goodsNameList.add(orderGoods.getGoodsName()); |
| | | |
| | | |
| | | if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | |
| | | String outTradeNo = IdUtils.simpleUUID(); |
| | | // 保存订单 交易流水 |
| | | order.setOutTradeNo(outTradeNo); |
| | | this.saveOrUpdate(order); |
| | | Integer delayTime = 30; |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); |
| | | // 小程序微信下单支付 |
| | | createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo, |
| | | orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), |
| | | appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2); |
| | | //生成自动取消订单延时任务 |
| | | String payStr = appPlaceOrderVo.getAppId()+"-"+appPlaceOrderVo.getTimeStamp()+"-"+appPlaceOrderVo.getNonceStr()+"-"+appPlaceOrderVo.getPackageStr()+"-"+appPlaceOrderVo.getSignType()+"-"+appPlaceOrderVo.getPaySign(); |
| | | redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, payStr , delayTime.longValue(), TimeUnit.MINUTES); |
| | | DelayTask delayTask = new DelayTask(); |
| | | delayTask.setDelFlag(0); |
| | | delayTask.setCreateTime(new Date()); |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | |
| | | }else{ |
| | | order.setOrderStatus(2); |
| | | this.saveOrUpdate(order); |
| | | } |
| | | //生成活动参加记录 |
| | | ActivityRecord activityRecord = new ActivityRecord(); |
| | | activityRecord.setDelFlag(0); |
| | |
| | | activityRecord.setGoodsId(orderGoods.getGoodsId()); |
| | | activityRecord.setActivityMoney(activityGoodsGetVo.getActivityPrice()); |
| | | remoteActivityService.addActivityRecord(activityRecord); |
| | | //生成自动取消订单延时任务 |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES); |
| | | DelayTask delayTask = new DelayTask(); |
| | | delayTask.setDelFlag(0); |
| | | delayTask.setCreateTime(new Date()); |
| | | delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime)); |
| | | delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); |
| | | remoteConfigService.addDelayTask(delayTask); |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime)); |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | |
| | | List<AppUserOrderPageVo> appUserOrderPageVoList = orderMapper.pageUserOrder(page, appUserOrderPageDto); |
| | | if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) { |
| | | Long shopId; |
| | | String activityId; |
| | | Shop shop; |
| | | HashSet<Long> set = new HashSet<Long>(); |
| | | HashSet<Long> shopSet = new HashSet<Long>(); |
| | | HashSet<String> activitySet = new HashSet<String>(); |
| | | for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { |
| | | shopId = appUserOrderPageVo.getShopId(); |
| | | set.add(shopId); |
| | | shopSet.add(shopId); |
| | | if(appUserOrderPageVo.getOrderFrom()==2){ |
| | | activityId = appUserOrderPageVo.getActivityId(); |
| | | activitySet.add(activityId); |
| | | } |
| | | } |
| | | Map<Long, Shop> shopMap = new HashMap<>(); |
| | | set.forEach(shopIdLong -> { |
| | | shopSet.forEach(shopIdLong -> { |
| | | Shop shopTemp = remoteShopService.getShop(shopIdLong).getData(); |
| | | shopMap.put(shopIdLong, shopTemp); |
| | | }); |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { |
| | |
| | | appUserOrderPageVo.setSameShop(0); |
| | | } |
| | | appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); |
| | | appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime)); |
| | | appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime)); |
| | | } |
| | | } |
| | | return appUserOrderPageVoList; |
| | |
| | | appUserOrderGetVo.setCouponDiscount(order.getCouponMoney()); |
| | | appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit()); |
| | | appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney()); |
| | | appUserOrderGetVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getOnlinePayMoney())); |
| | | appUserOrderGetVo.setPayType(order.getPayType()); |
| | | appUserOrderGetVo.setPayMoney(order.getPayMoney()); |
| | | appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); |
| | |
| | | appUserOrderGetVo.setShopName(shop.getShopName()); |
| | | appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | appUserOrderGetVo.setVerifyCode("1-" + orderId); |
| | | //生成自动取消订单延时任务 |
| | | Integer delayTime = 30; |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); |
| | | return appUserOrderGetVo; |
| | | } |
| | | |
| | |
| | | @Override |
| | | public void cancelOrder(String orderId) { |
| | | Order order = this.getById(orderId); |
| | | if (order.getOrderStatus() == 1) { |
| | | // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成 |
| | | if (order.getOrderStatus() == 0) { |
| | | throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); |
| | | } else if (order.getOrderStatus() == 1) { |
| | | this.autoCancelOrder(orderId); |
| | | }else if(order.getOrderStatus() == 2){ |
| | | } else if (order.getOrderStatus() == 2) { |
| | | // 2.待核销 -> 订单退款 |
| | | this.refundOrder(orderId); |
| | | }else{ |
| | | } else { |
| | | throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 支付订单 |
| | | * @author jqs |
| | | * @date 2023/8/27 15:26 |
| | | * @param orderId |
| | | * @return AppPlaceOrderVo |
| | | */ |
| | | @Override |
| | | public AppPlaceOrderVo payOrder(String orderId){ |
| | | Order order = this.getById(orderId); |
| | | if(order.getOrderStatus()!=1){ |
| | | throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); |
| | | } |
| | | String payStr = redisService.getCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+ "-"+orderId); |
| | | if(StringUtils.isBlank(payStr)){ |
| | | throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); |
| | | } |
| | | Integer delayTime = 30; |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); |
| | | OrderPayment orderPayment = orderPaymentService.getByUnpaidOrderId(orderId); |
| | | String[] payArr = payStr.split("-"); |
| | | appPlaceOrderVo.setOrderId(order.getOrderId()); |
| | | appPlaceOrderVo.setOrderNo(order.getOrderNo()); |
| | | appPlaceOrderVo.setPayType(order.getPayType()); |
| | | appPlaceOrderVo.setPayMoney(order.getPayMoney()); |
| | | appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney())); |
| | | appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); |
| | | appPlaceOrderVo.setAppId(payArr[0]); |
| | | appPlaceOrderVo.setMchId(orderPayment.getSubMchId()); |
| | | appPlaceOrderVo.setTimeStamp(payArr[1]); |
| | | appPlaceOrderVo.setNonceStr(payArr[2]); |
| | | appPlaceOrderVo.setPackageStr(payArr[3]); |
| | | appPlaceOrderVo.setSignType(payArr[4]); |
| | | appPlaceOrderVo.setPaySign(payArr[5]); |
| | | appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) { |
| | | Long shopId = merHomeShopTotalVo.getShopId(); |
| | | //获取今日到店 |
| | | Integer todayShop = userServiceRecordService.countShopServicePerson(shopId); |
| | | //获取待处理订单和营业额 |
| | | merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId); |
| | | //获取服务统计 |
| | | MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); |
| | | merHomeShopTotalVo.setTodayShop(todayShop); |
| | | merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp()); |
| | | merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp()); |
| | | return merHomeShopTotalVo; |
| | | } |
| | | |
| | |
| | | public MerVerifyOrderVo verifyOrder(String orderId, Long shopId) { |
| | | // 创建返回对象 |
| | | MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); |
| | | if(orderId.contains("+")){ |
| | | orderId = orderId.substring(0, orderId.indexOf("+")); |
| | | } |
| | | // 根据订单ID获取订单信息 |
| | | Order order = this.getById(orderId); |
| | | if (order.getOrderStatus() != 2) { |
| | |
| | | merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); |
| | | merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); |
| | | merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); |
| | | merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); |
| | | if(order.getPayType()==1){ |
| | | merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); |
| | | }else{ |
| | | merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); |
| | | } |
| | | merVerifyOrderVo.setPayMoney(order.getPayMoney()); |
| | | merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); |
| | | merVerifyOrderVo.setCreateTime(order.getCreateTime()); |
| | | merVerifyOrderVo.setPayTime(order.getPayTime()); |
| | | merVerifyOrderVo.setUseTime(order.getUseTime()); |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | merVerifyOrderVo.setPayType(order.getPayType()); |
| | | merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); |
| | | if(order.getPayType()==1){ |
| | | merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); |
| | | }else{ |
| | | if(order.getOfflinePayMoney()!=null){ |
| | | merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); |
| | | }else{ |
| | | merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); |
| | | } |
| | | } |
| | | merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); |
| | | // 根据订单用户ID获取用户信息 |
| | | Member member = remoteMemberService.getMember(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserId(order.getUserId()); |
| | | merVerifyOrderVo.setUserName(member.getRealName()); |
| | | merVerifyOrderVo.setUserMobile(member.getMobile()); |
| | | merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); |
| | |
| | | } |
| | | |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(order.getShopId())){ |
| | | if (!shopRelUserVo.getShopId().equals(order.getShopId())) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | order.setOrderStatus(3); |
| | |
| | | order.setOfflinePayMoney(relPayMoney); |
| | | order.setOffPayTime(nowTime); |
| | | order.setPayMoney(order.getPayMoney().add(relPayMoney)); |
| | | order.setCloseFlag(1); |
| | | order.setChangeReceivableMoney(relReceiveMoney); |
| | | if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { |
| | | order.setCloseFlag(1); |
| | | } else { |
| | | order.setCloseFlag(0); |
| | | } |
| | | this.saveOrUpdate(order); |
| | | //创建服务商品 |
| | | List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); |
| | |
| | | Goods goods; |
| | | List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); |
| | | for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(order.getShopId()); |
| | | consumerGoods.setUserId(order.getUserId()); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); |
| | | consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoodsList.add(consumerGoods); |
| | | Integer buyNum = appUserOrderGoodsPageVo.getBuyNum(); |
| | | if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(order.getShopId()); |
| | | consumerGoods.setUserId(order.getUserId()); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); |
| | | consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); |
| | | consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoods.setSureNum(buyNum); |
| | | consumerGoodsList.add(consumerGoods); |
| | | } else { |
| | | for (int i = 0; i < buyNum; i++) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(order.getShopId()); |
| | | consumerGoods.setUserId(order.getUserId()); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); |
| | | consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); |
| | | consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoodsList.add(consumerGoods); |
| | | } |
| | | } |
| | | } |
| | | consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); |
| | | //生成返回 |
| | |
| | | merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); |
| | | merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); |
| | | merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); |
| | | merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney()); |
| | | if(order.getPayType()==1){ |
| | | merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney())); |
| | | }else{ |
| | | merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); |
| | | } |
| | | merVerifyOrderVo.setPayMoney(order.getPayMoney()); |
| | | merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | merVerifyOrderVo.setCreateTime(order.getCreateTime()); |
| | | merVerifyOrderVo.setPayTime(order.getPayTime()); |
| | | merVerifyOrderVo.setUseTime(order.getUseTime()); |
| | | merVerifyOrderVo.setPayType(order.getPayType()); |
| | | merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); |
| | | if(order.getPayType()==1){ |
| | | merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); |
| | | }else{ |
| | | if(order.getOfflinePayMoney()!=null){ |
| | | merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); |
| | | }else{ |
| | | merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); |
| | | } |
| | | } |
| | | merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); |
| | | Member member = remoteMemberService.getMember(order.getUserId()).getData(); |
| | | merVerifyOrderVo.setUserId(order.getUserId()); |
| | | merVerifyOrderVo.setUserName(member.getRealName()); |
| | | merVerifyOrderVo.setUserMobile(member.getMobile()); |
| | | merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); |
| | | // |
| | | if(order.getOrderFrom()==2){ |
| | | |
| | | //profitsSharingService.applyProfitSharing(); |
| | | // TODO 活动才分账 |
| | | if (order.getOrderFrom() == 2) { |
| | | // 活动才分账 |
| | | submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney()); |
| | | } |
| | | return merVerifyOrderVo; |
| | | |
| | | //创建支付记录 |
| | | if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | PayRecord payRecord = new PayRecord(); |
| | | payRecord.setDelFlag(0); |
| | | payRecord.setOrderId(order.getOrderId()); |
| | | payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney()); |
| | | payRecord.setPayTime(new Date()); |
| | | payRecord.setPayType(merVerifyOrderDto.getPayType()); |
| | | payRecordService.save(payRecord); |
| | | } |
| | | //更新用户消费统计 |
| | | MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); |
| | | memberTotalChangeDto.setConsumeTime(nowTime); |
| | | remoteMemberService.changeMemberTotal(memberTotalChangeDto); |
| | | return merVerifyOrderVo; |
| | | } |
| | | |
| | | private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) { |
| | | String sendMessage = ""; |
| | | String resultMessage = ""; |
| | | try { |
| | | // 核销完成 开始分账(平台收取服务费) |
| | | OrderPayment payment = orderPaymentService.getByOrderId(orderId); |
| | | String transactionId = payment.getTransactionId(); |
| | | |
| | | // 平台特约商户号,用户平台收取服务费 |
| | | String platformTyMacId = WxPayConfiguration.getPlatformTyMacId(); |
| | | |
| | | R<String> resultMch = remoteShopService.getShopSubMchId(shopId); |
| | | String subMchId = resultMch.getData(); |
| | | if (!StringUtils.isEmpty(subMchId)) { |
| | | WxPayConfig config = wxService.getConfig(); |
| | | |
| | | R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId); |
| | | ShopProportionVo shopProportion = resultShopProportion.getData(); |
| | | if (null != shopProportion) { |
| | | ProfitSharingRequest request = new ProfitSharingRequest(); |
| | | request.setAppid(config.getAppId()); |
| | | request.setSubMchid(subMchId); |
| | | request.setTransactionId(transactionId); |
| | | request.setOutOrderNo(IdUtils.simpleUUID()); |
| | | List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>(); |
| | | |
| | | String description = "订单:" + orderNo + " 平台抽取佣金"; |
| | | //获取商户分成 |
| | | BigDecimal proportionPercent = shopProportion.getProportionPercent(); |
| | | if (null == proportionPercent) { |
| | | proportionPercent = BigDecimal.ZERO; |
| | | } |
| | | //平台分成 |
| | | proportionPercent = new BigDecimal("100.00").subtract(proportionPercent); |
| | | if(proportionPercent.compareTo(BigDecimal.ZERO)>0){ |
| | | ProfitSharingResult result = new ProfitSharingResult(); |
| | | result.setOutOrderNo(orderNo); |
| | | result.setStatus("FINISHED"); |
| | | // 计算分成金额 |
| | | int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue(); |
| | | log.info("订单分账:{} 分账金额: {}", orderNo, amount); |
| | | if (amount > 0) { |
| | | // 分账创建 |
| | | ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver(); |
| | | receiver.setType("MERCHANT_ID"); |
| | | receiver.setReceiverAccount(platformTyMacId); |
| | | receiver.setAmount(amount); |
| | | receiver.setDescription(description); |
| | | |
| | | receiverList.add(receiver); |
| | | request.setReceivers(receiverList); |
| | | // 分账完成 |
| | | request.setFinish(true); |
| | | result = wxService.getEcommerceService().profitSharing(request); |
| | | } |
| | | |
| | | // 创建分账记录 |
| | | profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, result); |
| | | |
| | | // 保存请求信息 |
| | | sendMessage = JSONObject.toJSONString(request); |
| | | resultMessage = JSONObject.toJSONString(result); |
| | | } |
| | | } else { |
| | | resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo); |
| | | log.info(resultMessage); |
| | | } |
| | | } else { |
| | | resultMessage = String.format("订单分账:%s 获取微信商户号失败", orderNo); |
| | | log.info(resultMessage); |
| | | } |
| | | } catch (WxPayException e) { |
| | | resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage()); |
| | | log.info(resultMessage); |
| | | throw new ServiceException(resultMessage); |
| | | } |
| | | |
| | | // 保存分账信息 |
| | | paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Transactional |
| | | public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) { |
| | | MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); |
| | | MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | Long userId = verifyCouponGetVo.getUserId(); |
| | | Long shopId = shopRelUserVo.getShopId(); |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | // 调用remoteMemberService的getMember方法获取Member对象 |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | //如果是商户优惠券,验证商户一致 |
| | | if (memberCoupon.getCouponFrom() == 2) { |
| | | if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ |
| | | throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); |
| | | } |
| | | if(!memberCoupon.getShopId().equals(shopId)){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | //如果是平台优惠券,当用户绑定商户时验证商户一致 |
| | | if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) { |
| | | /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ |
| | | throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); |
| | | }*/ |
| | | //判断绑定商户是否和核销商户一致 |
| | | if(!member.getRelationShopId().equals(shopId)){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | memberCoupon.setShopId(shopId); |
| | | // 创建MerVerifyCouponVo对象 |
| | | MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); |
| | | // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 |
| | | List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); |
| | | Long userId = verifyCouponGetVo.getUserId(); |
| | | // 调用remoteMemberService的getMember方法获取Member对象 |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | merVerifyCouponVo.setUserName(member.getRealName()); |
| | | merVerifyCouponVo.setUserMobile(member.getMobile()); |
| | | merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); |
| | | merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); |
| | | merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); |
| | | merVerifyCouponVo.setCouponName(memberCoupon.getCouponName()); |
| | | merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime()); |
| | | // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 |
| | | List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() |
| | | .map(goods -> { |
| | |
| | | .collect(Collectors.toList()); |
| | | // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList |
| | | merVerifyCouponVo.setGoodsList(merCouponGoodsList); |
| | | MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); |
| | | //生成服务 |
| | | ConsumerGoods consumerGoods; |
| | | String consumerGoodsId; |
| | |
| | | appShopGoodsGetDto.setShopId(memberCoupon.getShopId()); |
| | | //获取商户服务次数 |
| | | shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if(shopGoods!=null){ |
| | | if (shopGoods != null) { |
| | | consumerGoods.setServiceNum(shopGoods.getServiceNum()); |
| | | } |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(goods.getGoodsType()); |
| | | consumerGoods.setGoodsTag(goods.getGoodsTags()); |
| | | consumerGoods.setCreateTime(new Date()); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData(); |
| | |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoodsList.add(consumerGoods); |
| | | } |
| | | MerVerifyMemberCouponDto merVerifyMemberCouponDto = new MerVerifyMemberCouponDto(); |
| | | merVerifyMemberCouponDto.setCouponId(memberCoupon.getId()); |
| | | merVerifyMemberCouponDto.setShopId(shopId); |
| | | remoteCouponService.sureMemberCoupon(merVerifyMemberCouponDto); |
| | | consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); |
| | | if (member.getBindingFlag() != 1) { |
| | | AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); |
| | | appMemberBindingDto.setBindingFlag(1); |
| | | appMemberBindingDto.setBindingType(4); |
| | | appMemberBindingDto.setShopId(shop.getShopId()); |
| | | appMemberBindingDto.setShopName(shop.getShopName()); |
| | | appMemberBindingDto.setUserId(memberCoupon.getUserId()); |
| | | remoteMemberService.updateMemberBinding(appMemberBindingDto); |
| | | } |
| | | merVerifyCouponVo.setVerifyStatus(2); |
| | | return merVerifyCouponVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/9 9:54 |
| | | * @param merVerifyPrizeDto |
| | | * @return MerVerifyAwardVo |
| | | * @return MerVerifyAwardVo |
| | | * @description 确认核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/9 9:54 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){ |
| | | public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) { |
| | | MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); |
| | | MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData(); |
| | | if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ |
| | | if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) { |
| | | throw new ServiceException(AppErrorConstant.COUPON_USED); |
| | | } |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData(); |
| | | if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){ |
| | | Long shopId = shopRelUserVo.getShopId(); |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | //平台奖品判断 |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); |
| | | //判断生日活动状态 |
| | | if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ |
| | | shop = remoteShopService.getShop(shopId).getData(); |
| | | //判断指定区域全部店铺 |
| | | if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | //判断指定店铺 |
| | | if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | }else{ |
| | | throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); |
| | | } |
| | | } |
| | | //商户奖品判断 |
| | | if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if(memberGiftRecord.getGiftFrom()==1){ |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | }else{ |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | } |
| | | merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); |
| | | List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>(); |
| | | BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto(); |
| | | switch(memberGiftRecord.getGiftType()){ |
| | | switch (memberGiftRecord.getGiftType()) { |
| | | case 1: |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); |
| | | merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); |
| | |
| | | break; |
| | | } |
| | | merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime()); |
| | | memberGiftRecord.setVerifyStatus(2); |
| | | memberGiftRecord.setVerifyTime(new Date()); |
| | | if(member.getBindingFlag()!=1){ |
| | | MerVerifyPrizeFinalDto merVerifyPrizeFinalDto = new MerVerifyPrizeFinalDto(); |
| | | merVerifyPrizeFinalDto.setPrizeId(memberGiftRecord.getPrizeId()); |
| | | merVerifyPrizeFinalDto.setShopId(shop.getShopId()); |
| | | remoteMemberService.verifyPrize(merVerifyPrizeFinalDto); |
| | | if (member.getBindingFlag() != 1) { |
| | | AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); |
| | | appMemberBindingDto.setBindingFlag(1); |
| | | appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId()); |
| | | Shop shop = remoteShopService.getShop(merVerifyPrizeDto.getShopId()).getData(); |
| | | appMemberBindingDto.setBindingType(5); |
| | | appMemberBindingDto.setShopId(shop.getShopId()); |
| | | appMemberBindingDto.setShopName(shop.getShopName()); |
| | | appMemberBindingDto.setUserId(merVerifyPrizeDto.getUserId()); |
| | | appMemberBindingDto.setUserId(memberGiftRecord.getUserId()); |
| | | remoteMemberService.updateMemberBinding(appMemberBindingDto); |
| | | } |
| | | merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId()); |
| | |
| | | if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { |
| | | BigDecimal zeroBig = new BigDecimal("0.00"); |
| | | for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney())); |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void merCloseOrder(MerCloseOrderDto merCloseOrderDto) { |
| | | Order order = this.getById(merCloseOrderDto.getOrderId()); |
| | | order.setOfflinePayMoney(merCloseOrderDto.getPayMoney()); |
| | | order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney())); |
| | | order.setOffPayTime(new Date()); |
| | | order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney())); |
| | | order.setCloseFlag(1); |
| | | if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { |
| | | order.setCloseFlag(1); |
| | | } else { |
| | | order.setCloseFlag(0); |
| | | } |
| | | this.saveOrUpdate(order); |
| | | //创建支付记录 |
| | | PayRecord payRecord = new PayRecord(); |
| | | payRecord.setDelFlag(0); |
| | | payRecord.setOrderId(order.getOrderId()); |
| | | payRecord.setPayMoney(merCloseOrderDto.getPayMoney()); |
| | | payRecord.setPayTime(new Date()); |
| | | payRecord.setPayType(merCloseOrderDto.getPayType()); |
| | | payRecordService.save(payRecord); |
| | | } |
| | | |
| | | /** |
| | |
| | | sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); |
| | | String password = "hongruitang"; |
| | | sysUser.setPassword(SecurityUtils.encryptPassword(password)); |
| | | log.debug("sysUser" + sysUser.toString()); |
| | | sysUser = remoteUserService.registerUser(sysUser).getData(); |
| | | member = new Member(); |
| | | member.setMemberId(memberId); |
| | |
| | | member.setRealName(name); |
| | | member.setNickName(name); |
| | | member.setBindingFlag(1); |
| | | member.setBindingType(3); |
| | | member.setRelationShopId(shopId); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | remoteMemberService.createNewMember(member); |
| | |
| | | BigDecimal experienceMoney = new BigDecimal("0.00"); |
| | | BigDecimal serviceMoney = new BigDecimal("0.00"); |
| | | BigDecimal goodsMoney = new BigDecimal("0.00"); |
| | | List<OrderGoods> orderGoodsList = new ArrayList<>(); |
| | | ConsumerGoods consumerGoods; |
| | | String consumerGoodsId; |
| | | List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); |
| | | //使用优惠券 |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) { |
| | | goodsId = appBuyGoodsDto.getGoodsId(); |
| | | memberCouponId = appBuyGoodsDto.getMemberCouponId(); |
| | |
| | | } |
| | | } 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); |
| | | goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); |
| | | discountMoney = goodsTotalPrice.subtract(goodsRealPrice); |
| | | } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) { |
| | | discountMoney = appMemberCouponVo.getDiscountMoney(); |
| | | goodsRealPrice = goodsTotalPrice.subtract(discountMoney); |
| | | } |
| | | if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ |
| | | goodsRealPrice = BigDecimal.ZERO; |
| | | discountMoney = goodsTotalPrice.subtract(goodsRealPrice); |
| | | } |
| | | memberCouponSJ.add(memberCouponId); |
| | | } |
| | | } |
| | | |
| | | goodsDeposit = goods.getSubscription(); |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) { |
| | | if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) { |
| | | goodsDeposit = new BigDecimal("0.00"); |
| | | }else{ |
| | | } else { |
| | | goodsDeposit = goodsDeposit.multiply(buyNumBig); |
| | | } |
| | | goodsNum = goodsNum + buyNum; |
| | |
| | | couponDiscount = couponDiscount.add(discountMoney); |
| | | orderPayDeposit = orderPayDeposit.add(goodsDeposit); |
| | | orderPayMoney = orderPayMoney.add(goodsRealPrice); |
| | | |
| | | //创建OrderGoods |
| | | orderGoods = new OrderGoods(); |
| | | orderGoodsId = IdUtils.simpleUUID(); |
| | |
| | | orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); |
| | | orderGoods.setServiceNum(serviceNum); |
| | | orderGoods.setGoodsType(goods.getGoodsType()); |
| | | orderGoods.setGoodsTag(goods.getGoodsTags()); |
| | | orderGoods.setGoodsName(goods.getGoodsName()); |
| | | orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | orderGoods.setGoodsPicture(goodsFile.getFileUrl()); |
| | | orderGoodsService.save(orderGoods); |
| | | orderGoodsList.add(orderGoods); |
| | | |
| | | //创建服务 |
| | | Integer buyGoodsNum = orderGoods.getBuyNum(); |
| | | //判断是否确认次数 |
| | | if (orderGoods.getCycleNumFlag() == 0) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(shopId); |
| | | consumerGoods.setUserId(userId); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(orderGoodsId); |
| | | consumerGoods.setGoodsId(orderGoods.getGoodsId()); |
| | | consumerGoods.setGoodsName(orderGoods.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(orderGoods.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(orderGoods.getGoodsType()); |
| | | consumerGoods.setGoodsTag(orderGoods.getGoodsTag()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoods.setSureNum(buyGoodsNum); |
| | | consumerGoodsList.add(consumerGoods); |
| | | } else { |
| | | for (int i = 0; i < buyGoodsNum; i++) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(shopId); |
| | | consumerGoods.setUserId(userId); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(orderGoodsId); |
| | | consumerGoods.setGoodsId(orderGoods.getGoodsId()); |
| | | consumerGoods.setGoodsName(orderGoods.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(orderGoods.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(orderGoods.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(orderGoods.getGoodsType()); |
| | | consumerGoods.setGoodsTag(orderGoods.getGoodsTag()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(orderGoods.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoodsList.add(consumerGoods); |
| | | } |
| | | } |
| | | |
| | | //商户变更计算 |
| | | switch (orderGoods.getGoodsType()) { |
| | | case 1: |
| | | cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); |
| | |
| | | order.setCouponMoney(couponDiscount); |
| | | order.setDiscountMoney(couponDiscount); |
| | | order.setReceivableMoney(orderPayMoney); |
| | | order.setReceivableDeposit(new BigDecimal("0.00")); |
| | | order.setReceivableDeposit(orderPayDeposit); |
| | | order.setPayType(1); |
| | | //判断实收金额 |
| | | if (merNewOrderDto.getChangeMoney() != null) { |
| | | order.setChangeReceivableMoney(merNewOrderDto.getChangeMoney()); |
| | | } else { |
| | | order.setChangeReceivableMoney(orderPayMoney); |
| | | } |
| | | order.setPayMoney(orderPayMoney); |
| | | order.setOnlinePayMoney(new BigDecimal("0.00")); |
| | | order.setOfflinePayMoney(orderPayMoney); |
| | | order.setCloseFlag(1); |
| | | order.setOrderRemark(merNewOrderDto.getOrderRemark()); |
| | | order.setGoodsNum(goodsNum); |
| | | order.setCreateTime(nowTime); |
| | | order.setPayTime(nowTime); |
| | | order.setUseTime(nowTime); |
| | | order.setUseUserId(merNewOrderDto.getUserId()); |
| | | order.setPayMoney(merNewOrderDto.getPayMoney()); |
| | | order.setOnlinePayMoney(new BigDecimal("0.00")); |
| | | order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); |
| | | order.setPayMoney(merNewOrderDto.getPayMoney()); |
| | | order.setOffPayTime(nowTime); |
| | | order.setPayType(1); |
| | | order.setCloseFlag(1); |
| | | this.save(order); |
| | | //创建服务 |
| | | List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); |
| | | ConsumerGoods consumerGoods; |
| | | String consumerGoodsId; |
| | | for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { |
| | | consumerGoods = new ConsumerGoods(); |
| | | goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData(); |
| | | consumerGoodsId = IdUtils.simpleUUID(); |
| | | consumerGoods.setConsumerGoodsId(consumerGoodsId); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(order.getShopId()); |
| | | consumerGoods.setUserId(order.getUserId()); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(appUserOrderGoodsPageVo.getOrderGoodsId()); |
| | | consumerGoods.setGoodsId(appUserOrderGoodsPageVo.getGoodsId()); |
| | | consumerGoods.setGoodsName(appUserOrderGoodsPageVo.getGoodsName()); |
| | | consumerGoods.setCycleNumFlag(appUserOrderGoodsPageVo.getCycleNumFlag()); |
| | | consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum()); |
| | | consumerGoods.setUsedNum(0); |
| | | consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); |
| | | consumerGoods.setGoodsNurses(goods.getGoodsNurses()); |
| | | consumerGoodsService.save(consumerGoods); |
| | | //判断结清 |
| | | if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { |
| | | order.setCloseFlag(1); |
| | | } else { |
| | | order.setCloseFlag(0); |
| | | } |
| | | //用户未绑定则绑定商户 |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | if (member != null && member.getBindingFlag() != 1) { |
| | | //绑定商户 |
| | |
| | | appMemberBindingDto.setShopName(shop.getShopName()); |
| | | appMemberBindingDto.setUserId(userId); |
| | | appMemberBindingDto.setBindingFlag(1); |
| | | appMemberBindingDto.setBindingType(3); |
| | | remoteMemberService.updateMemberBinding(appMemberBindingDto); |
| | | order.setNewMemberFlag(1); |
| | | } |
| | | ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | //保存订单和服务 |
| | | this.save(order); |
| | | orderGoodsService.saveBatch(orderGoodsList); |
| | | consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); |
| | | //减去优惠券 |
| | | if (StringUtils.isNotBlank(memberCouponSJ.toString())) { |
| | | remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); |
| | | } |
| | | //更新会员消费记录 |
| | | MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); |
| | | memberTotalChangeDto.setConsumeTime(nowTime); |
| | | remoteMemberService.changeMemberTotal(memberTotalChangeDto); |
| | | //更新商户统计 |
| | | /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | shopTotalChangeDto.setShopId(order.getShopId()); |
| | | shopTotalChangeDto.setOrderType(1); |
| | | shopTotalChangeDto.setCycleMoney(cycleMoney); |
| | | shopTotalChangeDto.setServiceMoney(serviceMoney); |
| | | shopTotalChangeDto.setExperienceMoney(experienceMoney); |
| | | shopTotalChangeDto.setGoodsMoney(goodsMoney); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto);*/ |
| | | //创建支付记录 |
| | | PayRecord payRecord = new PayRecord(); |
| | | payRecord.setDelFlag(0); |
| | | payRecord.setOrderId(orderId); |
| | | payRecord.setPayMoney(order.getPayMoney()); |
| | | payRecord.setPayTime(order.getOffPayTime()); |
| | | payRecord.setPayType(merNewOrderDto.getPayType()); |
| | | payRecordService.save(payRecord); |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) { |
| | | if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) { |
| | | // 获取关键字对应的用户ID |
| | | MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto(); |
| | | userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword()); |
| | | MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData(); |
| | | if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) { |
| | | // 将用户ID转换成List<Long>类型 |
| | | List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(",")) |
| | | .map(Long::parseLong) |
| | | .collect(Collectors.toList()); |
| | | merOrderPageDto.setMemberUserIdList(userIdList); |
| | | merOrderPageDto.setMemberUserId(null); |
| | | } |
| | | } |
| | | |
| | | // 获取订单列表 |
| | | List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto); |
| | | if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { |
| | | Long userId; |
| | |
| | | String orderFromDesc; |
| | | BigDecimal zeroBig = new BigDecimal("0.00"); |
| | | StringJoiner userIdSj = new StringJoiner(","); |
| | | // 遍历订单列表 |
| | | for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { |
| | | userId = merOrderPageVo.getUserId(); |
| | | userIdSj.add(userId.toString()); |
| | | orderFrom = merOrderPageVo.getOrderFrom(); |
| | | // 根据订单来源设置订单来源描述 |
| | | if (orderFrom != null) { |
| | | if (orderFrom == 1) { |
| | | orderFromDesc = "商城订单"; |
| | | } else if (orderFrom == 2) { |
| | | orderFromDesc = "平台秒杀活动(" + merOrderPageVo.getActivityName() + ")"; |
| | | } else { |
| | | orderFromDesc = "线下创建"; |
| | | } |
| | |
| | | orderFromDesc = "商城订单"; |
| | | } |
| | | merOrderPageVo.setOrderFromDesc(orderFromDesc); |
| | | merOrderPageVo.setUnPaidMoney(merOrderPageVo.getReceivableMoney().subtract(merOrderPageVo.getPayMoney())); |
| | | // 设置未支付金额为0.00,如果未支付金额小于0,则设置为0.00 |
| | | if (merOrderPageVo.getUnPaidMoney() == null) { |
| | | merOrderPageVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) { |
| | | merOrderPageVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | } |
| | | |
| | | // 根据用户ID列表获取用户信息 |
| | | MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); |
| | | mgtBaseBathDto.setIds(userIdSj.toString()); |
| | | List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); |
| | | Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() |
| | | .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); |
| | | // 遍历订单列表,设置用户信息 |
| | | for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { |
| | | merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getNickName()); |
| | | merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); |
| | | 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() + "缺少用户"); |
| | | } |
| | | } |
| | | } |
| | | return merOrderPageVoList; |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerMemberNoClearOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { |
| | | List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId()); |
| | | public List<MerMemberOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { |
| | | List<MerMemberOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page, merMemberNoClearOrderDto.getMemberUserId(),merMemberNoClearOrderDto.getShopId()); |
| | | if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { |
| | | BigDecimal zeroBig = new BigDecimal("0.00"); |
| | | for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney())); |
| | | for (MerMemberOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | } |
| | |
| | | if (mgtMemberOrderPageVoList != null && !mgtMemberOrderPageVoList.isEmpty()) { |
| | | Long shopId; |
| | | HashSet<String> set = new HashSet<>(); |
| | | BigDecimal zeroBig = new BigDecimal("0.00"); |
| | | // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 |
| | | for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { |
| | | shopId = mgtMemberOrderPageVo.getShopId(); |
| | |
| | | for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { |
| | | shopId = mgtMemberOrderPageVo.getShopId(); |
| | | mgtMemberOrderPageVo.setShopName(map.get(shopId).getShopName()); |
| | | BigDecimal unPaidMoney = mgtMemberOrderPageVo.getReceivableMoney().subtract(mgtMemberOrderPageVo.getPayMoney()); |
| | | mgtMemberOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); |
| | | } |
| | | } |
| | | // 返回MgtMemberOrderPageVoList |
| | |
| | | for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { |
| | | mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); |
| | | if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) { |
| | | mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); |
| | | mgtActivityOrderPageVo.setNickName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); |
| | | mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getRealName()); |
| | | mgtActivityOrderPageVo.setUserMobile(userMap.get(mgtActivityOrderPageVo.getUserId()).getUserMobile()); |
| | | } |
| | | BigDecimal unPaidMoney = mgtActivityOrderPageVo.getReceivableMoney().subtract(mgtActivityOrderPageVo.getPayMoney()); |
| | | mgtActivityOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); |
| | |
| | | } |
| | | } |
| | | MgtOrderTotal mgtOrderTotal = new MgtOrderTotal(); |
| | | MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(); |
| | | MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(mgtShopOrderPageDto); |
| | | MgtOrderTotal mgtOrderTotalSecond = orderMapper.totalOrderSecond(mgtShopOrderPageDto); |
| | | MgtOrderTotal mgtOrderTotalThird = orderMapper.totalOrderThird(mgtShopOrderPageDto); |
| | | mgtOrderTotal.setOrderTotal(mgtOrderTotalFirst.getOrderTotal()); |
| | |
| | | // 遍历列表,设置店铺名称、用户名称和未支付金额 |
| | | for (MgtShopOrderPageVo mgtShopOrderPageVo : shopOrderPageVoList) { |
| | | if (shopMap != null && !shopMap.isEmpty()) { |
| | | mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); |
| | | if(shopMap.get(mgtShopOrderPageVo.getShopId())!=null){ |
| | | mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); |
| | | } |
| | | } |
| | | if (userMap != null && !userMap.isEmpty()) { |
| | | if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) { |
| | | mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); |
| | | mgtShopOrderPageVo.setNickName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); |
| | | mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getRealName()); |
| | | mgtShopOrderPageVo.setUserMobile(userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile()); |
| | | } |
| | | } |
| | | BigDecimal unPaidMoney = mgtShopOrderPageVo.getReceivableMoney().subtract(mgtShopOrderPageVo.getPayMoney()); |
| | |
| | | mgtOrderDetailVo.setCancelTime(order.getCancelTime()); |
| | | mgtOrderDetailVo.setOrderRemark(order.getOrderRemark()); |
| | | mgtOrderDetailVo.setShopId(order.getShopId()); |
| | | mgtOrderDetailVo.setShopName(shop.getShopName()); |
| | | if (shop != null) { |
| | | mgtOrderDetailVo.setShopName(shop.getShopName()); |
| | | } else { |
| | | mgtOrderDetailVo.setShopName("商户已被删除"); |
| | | } |
| | | mgtOrderDetailVo.setVerifyTime(order.getUseTime()); |
| | | //获取支付记录 |
| | | List<MgtOrderPayListVo> orderPayListVoList = payRecordService.listMgtOrderPayVo(orderId); |
| | | mgtOrderDetailVo.setOrderPayListVoList(orderPayListVoList); |
| | | return mgtOrderDetailVo; |
| | | } |
| | | |
| | |
| | | @Override |
| | | public MgtBulletinBoardVo boardOrderTotal() { |
| | | MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal(); |
| | | Integer activityUserTotal = orderMapper.activityUserTotal(); |
| | | mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal); |
| | | return mgtBulletinBoardVo; |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto) { |
| | | //订单数量 订单金额 |
| | | MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto); |
| | | //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto); |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto); |
| | | if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { |
| | | String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; |
| | | Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; |
| | | for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { |
| | | orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); |
| | | orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); |
| | | orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); |
| | | } |
| | | mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); |
| | | mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); |
| | | mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | |
| | | //获取商品分类销售数据 |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto); |
| | | List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); |
| | | List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); |
| | | if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | MgtMapIntTotalVo mgtMapIntTotalVo; |
| | | MgtMapBigTotalVo mgtMapBigTotalVo; |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | MgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | MgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | MgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | MgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(MgtMapIntTotalVo); |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | |
| | | if (orderFromList != null && orderFromList.size() > 0) { |
| | | orderFromList = bigListRemoveNull(orderFromList); |
| | | mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList); |
| | | } |
| | | //订单分布 |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){ |
| | | mgtBaseShopDto.setEndDate(DateUtils.getDate()); |
| | | mgtBaseShopDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto); |
| | | if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { |
| | | String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; |
| | | Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; |
| | | for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { |
| | | orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); |
| | | orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); |
| | | orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); |
| | | } |
| | | mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); |
| | | mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); |
| | | mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | return mgtTotalOrderTotalVo; |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto) { |
| | | //获取基础统计 |
| | | //获取基础统计 总订单数 订单金额 参与人数 |
| | | MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto); |
| | | //获客人数 |
| | | MgtTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getTotalActivityMemberTotal(mgtBaseShopDto); |
| | | totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson()); |
| | | totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson()); |
| | | totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson()); |
| | | totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson()); |
| | | //获取商品分类销售数据 |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto); |
| | | if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { |
| | |
| | | totalActivityTotalVo.setExperienceTotal(0); |
| | | totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO); |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | MgtMapIntTotalVo mgtMapIntTotalVo; |
| | | MgtMapBigTotalVo mgtMapBigTotalVo; |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | MgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | MgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | MgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | MgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(MgtMapIntTotalVo); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | | totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); |
| | | } |
| | | |
| | | //获取订单分布 |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){ |
| | | mgtBaseShopDto.setEndDate(DateUtils.getDate()); |
| | | mgtBaseShopDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto); |
| | | if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { |
| | | String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; |
| | |
| | | totalActivityTotalVo.setOrderTotalValue(orderTotalValue); |
| | | totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | //参与人数 |
| | | List<MgtMapIntTotalVo> joinList = orderMapper.getActivityMemberTotal(mgtBaseShopDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>(); |
| | | if (joinList != null && !joinList.isEmpty()) { |
| | | mgtMapIntTotalVoMap = joinList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 获取日期范围 |
| | | List<String> dateList = getDateRange(mgtBaseShopDto.getStartDate(), mgtBaseShopDto.getEndDate()); |
| | | int size = dateList.size(); |
| | | // 创建日期和成员总数的数组 |
| | | String[] joinMemberTotalKey = new String[size]; |
| | | Integer[] joinMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | String str; |
| | | Integer value; |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | joinMemberTotalKey[i] = str; |
| | | value = mgtMapIntTotalVoMap.get(str); |
| | | joinMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey); |
| | | totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | |
| | | @Override |
| | | public MgtTotalActivityTotalVo getTotalActivityJoinMemberTotal(MgtBaseShopDto mgtBaseShopDto) { |
| | | MgtTotalActivityTotalVo totalActivityTotalVo = new MgtTotalActivityTotalVo(); |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBaseShopDto.getStartDate())){ |
| | | mgtBaseShopDto.setEndDate(DateUtils.getDate()); |
| | | mgtBaseShopDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | if(mgtBaseShopDto.getAgeType()!=null){ |
| | | List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBaseShopDto.getAgeType()).getData(); |
| | | mgtBaseShopDto.setUserIdList(userIdList); |
| | | } |
| | | //参与人数 |
| | | List<MgtMapIntTotalVo> joinList = orderMapper.getActivityMemberTotal(mgtBaseShopDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>(); |
| | | if (joinList != null && !joinList.isEmpty()) { |
| | | mgtMapIntTotalVoMap = joinList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 获取日期范围 |
| | | List<String> dateList = getDateRange(mgtBaseShopDto.getStartDate(), mgtBaseShopDto.getEndDate()); |
| | | int size = dateList.size(); |
| | | // 创建日期和成员总数的数组 |
| | | String[] joinMemberTotalKey = new String[size]; |
| | | Integer[] joinMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | String str; |
| | | Integer value; |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | joinMemberTotalKey[i] = str; |
| | | value = mgtMapIntTotalVoMap.get(str); |
| | | joinMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey); |
| | | totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | |
| | |
| | | * @author jqs |
| | | * @date 2023/6/20 9:56 |
| | | */ |
| | | @Override |
| | | /*@Override |
| | | public MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto) { |
| | | List<Long> userIds = orderMapper.getUserIdAgeRank(mgtActivityAgeDto); |
| | | mgtActivityAgeDto.setUserIds(userIds); |
| | |
| | | totalActivityTotalVo.setActivityAgeKey(activityAgeKey); |
| | | totalActivityTotalVo.setActivityAgeValue(activityAgeValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | }*/ |
| | | |
| | | /** |
| | | * @param mgtBaseShopDto |
| | |
| | | */ |
| | | @Override |
| | | public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) { |
| | | //获取人数统计 |
| | | MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); |
| | | |
| | | //营业额 |
| | | BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto); |
| | | mgtTotalDataTotalVo.setSalesTotal(salesTotal); |
| | | MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); |
| | | // 获取当月时间 |
| | | LocalDate currentDate = LocalDate.now(); |
| | | LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); |
| | | LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | String firstDayOfMonthStr = firstDayOfMonth.format(formatter); |
| | | String lastDayOfMonthStr = lastDayOfMonth.format(formatter); |
| | | mgtBaseShopDto.setStartDate(firstDayOfMonthStr); |
| | | mgtBaseShopDto.setEndDate(lastDayOfMonthStr); |
| | | //总进店人数 体验人数 体验开单人数 没体验开单人数 |
| | | MgtTotalDataTotalVo mgtTotalDataMemberTotalVo = orderMapper.getTotalDataMemberTotal(mgtBaseShopDto); |
| | | mgtTotalDataTotalVo.setOnlyExperiencePerson(mgtTotalDataMemberTotalVo.getOnlyExperiencePerson()); |
| | | mgtTotalDataTotalVo.setExperienceCyclePerson(mgtTotalDataMemberTotalVo.getExperienceCyclePerson()); |
| | | mgtTotalDataTotalVo.setOnlyCyclePerson(mgtTotalDataMemberTotalVo.getOnlyCyclePerson()); |
| | | mgtTotalDataTotalVo.setOrderPerson(mgtTotalDataMemberTotalVo.getOrderPerson()); |
| | | //续单人数 |
| | | Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto); |
| | | mgtTotalDataTotalVo.setReorderPerson(reorderPerson); |
| | | //回头客 |
| | | Integer returnedPerson = orderMapper.getReturnedPerson(mgtBaseShopDto); |
| | | mgtTotalDataTotalVo.setSalesTotal(salesTotal); |
| | | mgtTotalDataTotalVo.setReorderPerson(reorderPerson); |
| | | mgtTotalDataTotalVo.setReturnedPerson(returnedPerson); |
| | | return mgtTotalDataTotalVo; |
| | | } |
| | |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | } |
| | | List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | List<Long> shopIdList = new ArrayList<>(); |
| | | if(mgtBasePlatformDto.getShopId()!=null){ |
| | | shopIdList.add(mgtBasePlatformDto.getShopId()); |
| | | }else{ |
| | | shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | } |
| | | List<MgtTotalDataTotalVo> mgtTotalDataTotalVoList = new ArrayList<>(); |
| | | MgtBaseShopDto mgtBaseShopDto; |
| | | MgtTotalDataTotalVo mgtTotalDataTotalVo; |
| | | MgtSimpleShopVo simpleShopVo; |
| | | HashSet<String> set = new HashSet<>(); |
| | | // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 |
| | | for (Long entity : shopIdList) { |
| | | set.add(entity.toString()); |
| | | } |
| | | String joinedString = String.join(",", set); |
| | | MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); |
| | | mgtBaseBathDto.setIds(joinedString); |
| | | List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); |
| | | // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo |
| | | Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() |
| | | .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); |
| | | if (shopIdList != null && !shopIdList.isEmpty()) { |
| | | for (Long shopId : shopIdList) { |
| | | mgtBaseShopDto = new MgtBaseShopDto(); |
| | |
| | | mgtBaseShopDto.setEndDate(mgtBasePlatformDto.getEndDate()); |
| | | mgtBaseShopDto.setShopId(shopId); |
| | | mgtTotalDataTotalVo = this.getTotalDataTotal(mgtBaseShopDto); |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | mgtTotalDataTotalVo.setShopName(shop.getShopName()); |
| | | simpleShopVo = shopMap.get(shopId); |
| | | if (simpleShopVo!=null) { |
| | | mgtTotalDataTotalVo.setShopName(simpleShopVo.getShopName()); |
| | | } |
| | | mgtTotalDataTotalVoList.add(mgtTotalDataTotalVo); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | if(mgtBasePlatformDto.getShopId()!=null){ |
| | | shopIdList = new ArrayList<>(); |
| | | shopIdList.add(mgtBasePlatformDto.getShopId()); |
| | | } |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | //获取基础统计 |
| | | MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getPlTotalOrderTotalOrderFrom(mgtBasePlatformDto); |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto); |
| | | if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { |
| | | String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; |
| | | Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; |
| | | for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { |
| | | orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); |
| | | orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); |
| | | orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); |
| | | } |
| | | mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); |
| | | mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); |
| | | mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | //获取商品分类销售数据 |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto); |
| | | List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); |
| | |
| | | mgtTotalOrderTotalVo.setExperienceTotal(0); |
| | | mgtTotalOrderTotalVo.setExperienceMoney(BigDecimal.ZERO); |
| | | if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | MgtMapIntTotalVo mgtMapIntTotalVo; |
| | | MgtMapBigTotalVo mgtMapBigTotalVo; |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | MgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | MgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | MgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | MgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(MgtMapIntTotalVo); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | |
| | | orderFromList = bigListRemoveNull(orderFromList); |
| | | mgtTotalOrderTotalVo.setOrderFromRankList(orderFromList); |
| | | } |
| | | //订单分布 |
| | | //日期全部时固定为5天 |
| | | Boolean fillZero = false; |
| | | if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ |
| | | mgtBasePlatformDto.setEndDate(DateUtils.getDate()); |
| | | mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | fillZero = true; |
| | | } |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto); |
| | | if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { |
| | | String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; |
| | | Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; |
| | | for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { |
| | | orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); |
| | | orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); |
| | | orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); |
| | | } |
| | | if(fillZero){ |
| | | MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); |
| | | mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey()); |
| | | mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue()); |
| | | mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue()); |
| | | }else{ |
| | | mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); |
| | | mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); |
| | | mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | |
| | | } |
| | | return mgtTotalOrderTotalVo; |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) { |
| | | if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ |
| | | return new MgtPlTotalActivityTotalVo(); |
| | | } |
| | | //获取需要关联的用户id集合 |
| | | if (mgtBasePlatformDto.getDeptId() != null) { |
| | | /*if (mgtBasePlatformDto.getDeptId() != null) { |
| | | List<Long> userIdList = new ArrayList<>(); |
| | | if (mgtBasePlatformDto.getUserId() != null) { |
| | | userIdList.add(mgtBasePlatformDto.getUserId()); |
| | |
| | | if (!userIdList.isEmpty()) { |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | } |
| | | }*/ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | if(mgtBasePlatformDto.getShopId()!=null){ |
| | | shopIdList = new ArrayList<>(); |
| | | shopIdList.add(mgtBasePlatformDto.getShopId()); |
| | | } |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | //获取基础统计 |
| | | MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto); |
| | | //获客人数 |
| | | MgtPlTotalActivityTotalVo totalActivityMemberTotalVo = orderMapper.getPlTotalActivityMemberTotal(mgtBasePlatformDto); |
| | | totalActivityTotalVo.setOrderPerson(totalActivityMemberTotalVo.getOrderPerson()); |
| | | totalActivityTotalVo.setCyclePerson(totalActivityMemberTotalVo.getCyclePerson()); |
| | | totalActivityTotalVo.setServicePerson(totalActivityMemberTotalVo.getServicePerson()); |
| | | totalActivityTotalVo.setExperiencePerson(totalActivityMemberTotalVo.getExperiencePerson()); |
| | | //获取商品分类销售数据 |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto); |
| | | List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); |
| | |
| | | totalActivityTotalVo.setExperienceTotal(0); |
| | | totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO); |
| | | if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | MgtMapIntTotalVo mgtMapIntTotalVo; |
| | | MgtMapBigTotalVo mgtMapBigTotalVo; |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | MgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | MgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | MgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | MgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | | totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); |
| | | } |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ |
| | | mgtBasePlatformDto.setEndDate(DateUtils.getDate()); |
| | | mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | //获取订单分布 |
| | | List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto); |
| | |
| | | mgtBaseBathDto.setIds(joinedString); |
| | | List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); |
| | | // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo |
| | | Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream() |
| | | Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() |
| | | .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); |
| | | //商户活动次数排名 |
| | | List<MgtMapBigTotalVo> shopActivityRank = orderMapper.listPlTotalShopActivityRank(mgtBasePlatformDto); |
| | | if (shopActivityRank != null && shopActivityRank.size() > 0) { |
| | | shopActivityRank = bigListRemoveNull(shopActivityRank); |
| | | for(MgtMapBigTotalVo mgtMapBigTotalVo : shopActivityRank){ |
| | | if(shopMap.get(mgtMapBigTotalVo.getMapKey())!=null){ |
| | | mgtMapBigTotalVo.setMapKey(shopMap.get(mgtMapBigTotalVo.getMapKey()).getShopName()); |
| | | } |
| | | } |
| | | totalActivityTotalVo.setShopSalesRankList(shopActivityRank); |
| | | } |
| | | //商户活动销售额排名 |
| | | List<MgtMapBigTotalVo> shopActivitySalesRank = orderMapper.listPlTotalShopActivitySalesRank(mgtBasePlatformDto); |
| | | if (shopActivitySalesRank != null && shopActivitySalesRank.size() > 0) { |
| | | shopActivitySalesRank = bigListRemoveNull(shopActivitySalesRank); |
| | | for(MgtMapBigTotalVo mgtMapBigTotalVo : shopActivitySalesRank){ |
| | | if(shopMap.get(mgtMapBigTotalVo.getMapKey())!=null){ |
| | | mgtMapBigTotalVo.setMapKey(shopMap.get(mgtMapBigTotalVo.getMapKey()).getShopName()); |
| | | } |
| | | } |
| | | totalActivityTotalVo.setShopSalesRankList(shopActivitySalesRank); |
| | | } |
| | | //活动销售额排名 |
| | |
| | | activitySalesRank = bigListRemoveNull(activitySalesRank); |
| | | totalActivityTotalVo.setActivitySalesRankList(activitySalesRank); |
| | | } |
| | | MerTotalDto merTotalDto = new MerTotalDto(); |
| | | merTotalDto.setAgeType(mgtBasePlatformDto.getAgeType()); |
| | | if(mgtBasePlatformDto.getAgeType()!=null){ |
| | | List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | //参与人数 |
| | | List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>(); |
| | | if (joinList != null && !joinList.isEmpty()) { |
| | | mgtMapIntTotalVoMap = joinList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 获取日期范围 |
| | | List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate()); |
| | | int size = dateList.size(); |
| | | // 创建日期和成员总数的数组 |
| | | String[] joinMemberTotalKey = new String[size]; |
| | | Integer[] joinMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | String str; |
| | | Integer value; |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | joinMemberTotalKey[i] = str; |
| | | value = mgtMapIntTotalVoMap.get(str); |
| | | joinMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey); |
| | | totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue); |
| | | //获客人数 |
| | | List<MgtMapIntTotalVo> getList = orderMapper.getMgtActivityGetMemberTotal(mgtBasePlatformDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> getMemberMap = new HashMap<>(); |
| | | if (getList != null && !getList.isEmpty()) { |
| | | getMemberMap = getList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 创建日期和成员总数的数组 |
| | | String[] getMemberTotalKey = new String[size]; |
| | | Integer[] getMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | getMemberTotalKey[i] = str; |
| | | value = getMemberMap.get(str); |
| | | getMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey); |
| | | totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public MgtPlTotalActivityTotalVo getPlTotalActivityJoinMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) { |
| | | if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ |
| | | return new MgtPlTotalActivityTotalVo(); |
| | | } |
| | | //获取需要关联的用户id集合 |
| | | /*if (mgtBasePlatformDto.getDeptId() != null) { |
| | | List<Long> userIdList = new ArrayList<>(); |
| | | if (mgtBasePlatformDto.getUserId() != null) { |
| | | userIdList.add(mgtBasePlatformDto.getUserId()); |
| | | } else { |
| | | MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); |
| | | mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); |
| | | mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); |
| | | userIdList = mgtUserIdByDept.getUserIdList(); |
| | | } |
| | | if (!userIdList.isEmpty()) { |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | }*/ |
| | | if(mgtBasePlatformDto.getAgeType()!=null){ |
| | | List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ |
| | | mgtBasePlatformDto.setEndDate(DateUtils.getDate()); |
| | | mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | //参与人数 |
| | | List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> mgtMapIntTotalVoMap = new HashMap<>(); |
| | | if (joinList != null && !joinList.isEmpty()) { |
| | | mgtMapIntTotalVoMap = joinList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 获取日期范围 |
| | | List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate()); |
| | | int size = dateList.size(); |
| | | // 创建日期和成员总数的数组 |
| | | String[] joinMemberTotalKey = new String[size]; |
| | | Integer[] joinMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | String str; |
| | | Integer value; |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | joinMemberTotalKey[i] = str; |
| | | value = mgtMapIntTotalVoMap.get(str); |
| | | joinMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setJoinMemberTotalKey(joinMemberTotalKey); |
| | | totalActivityTotalVo.setJoinMemberTotalValue(joinMemberTotalValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | |
| | | @Override |
| | | public MgtPlTotalActivityTotalVo getPlTotalActivityGetMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) { |
| | | if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ |
| | | return new MgtPlTotalActivityTotalVo(); |
| | | } |
| | | //获取需要关联的用户id集合 |
| | | /*if (mgtBasePlatformDto.getDeptId() != null) { |
| | | List<Long> userIdList = new ArrayList<>(); |
| | | if (mgtBasePlatformDto.getUserId() != null) { |
| | | userIdList.add(mgtBasePlatformDto.getUserId()); |
| | | } else { |
| | | MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); |
| | | mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); |
| | | mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); |
| | | userIdList = mgtUserIdByDept.getUserIdList(); |
| | | } |
| | | if (!userIdList.isEmpty()) { |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | }*/ |
| | | if(mgtBasePlatformDto.getAgeType()!=null){ |
| | | List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); |
| | | mgtBasePlatformDto.setUserIdList(userIdList); |
| | | } |
| | | List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); |
| | | //日期全部时固定为5天 |
| | | if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ |
| | | mgtBasePlatformDto.setEndDate(DateUtils.getDate()); |
| | | mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); |
| | | } |
| | | //获客人数 |
| | | List<MgtMapIntTotalVo> getList = orderMapper.getMgtActivityGetMemberTotal(mgtBasePlatformDto); |
| | | // 将查询结果转为Map |
| | | Map<String, Integer> getMemberMap = new HashMap<>(); |
| | | if (getList != null && !getList.isEmpty()) { |
| | | getMemberMap = getList.stream() |
| | | .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue)); |
| | | } |
| | | // 获取日期范围 |
| | | List<String> dateList = getDateRange(mgtBasePlatformDto.getStartDate(), mgtBasePlatformDto.getEndDate()); |
| | | int size = dateList.size(); |
| | | // 创建日期和成员总数的数组 |
| | | String[] getMemberTotalKey = new String[size]; |
| | | Integer[] getMemberTotalValue = new Integer[size]; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | String str; |
| | | Integer value; |
| | | // 遍历日期列表,设置日期和成员总数的数组 |
| | | for (int i = 0; i < size; i++) { |
| | | str = dateList.get(i); |
| | | getMemberTotalKey[i] = str; |
| | | value = getMemberMap.get(str); |
| | | getMemberTotalValue[i] = (value != null) ? value : 0; |
| | | } |
| | | totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey); |
| | | totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue); |
| | | return totalActivityTotalVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param mgtPlActivityAgeDto |
| | |
| | | * @author jqs |
| | | * @date 2023/6/20 9:56 |
| | | */ |
| | | @Override |
| | | /*@Override |
| | | public MgtPlTotalActivityTotalVo getPlTotalActivityAgeRank(MgtPlActivityAgeDto mgtPlActivityAgeDto) { |
| | | List<Long> userIds = orderMapper.getPlUserIdAgeRank(mgtPlActivityAgeDto); |
| | | MgtActivityAgeDto mgtActivityAgeDto = new MgtActivityAgeDto(); |
| | |
| | | plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey); |
| | | plTotalActivityTotalVo.setActivityAgeValue(activityAgeValue); |
| | | return plTotalActivityTotalVo; |
| | | } |
| | | }*/ |
| | | |
| | | /** |
| | | * @param verifyCode |
| | |
| | | */ |
| | | @Override |
| | | public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) { |
| | | if(verifyCode.contains("+")){ |
| | | verifyCode = verifyCode.substring(0, verifyCode.indexOf("+")); |
| | | } |
| | | // 创建MerVerifyCouponVo对象 |
| | | MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); |
| | | // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 |
| | |
| | | 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); |
| | | } |
| | | if (!memberCoupon.getShopId().equals(shopId)) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | Long userId = verifyCouponGetVo.getUserId(); |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | //如果是商户优惠券,验证商户一致 |
| | | if (memberCoupon.getCouponFrom() == 2) { |
| | | if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ |
| | | throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); |
| | | } |
| | | if(!memberCoupon.getShopId().equals(shopId)){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | //如果是平台优惠券,当用户绑定商户时验证商户一致 |
| | | if (memberCoupon.getCouponFrom() == 1 && member.getBindingFlag() == 1) { |
| | | /*if(!memberCoupon.getShopId().equals(member.getRelationShopId())){ |
| | | throw new ServiceException(AppErrorConstant.BLINDING_VERIFY_SHOP_ERROR); |
| | | }*/ |
| | | //判断绑定商户是否和核销商户一致 |
| | | if(!member.getRelationShopId().equals(shopId)){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); |
| | | Long userId = verifyCouponGetVo.getUserId(); |
| | | // 调用remoteMemberService的getMember方法获取Member对象 |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | merVerifyCouponVo.setUserName(member.getRealName()); |
| | | merVerifyCouponVo.setUserMobile(member.getMobile()); |
| | | merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); |
| | | merVerifyCouponVo.setCouponName(verifyCouponGetVo.getMemberCoupon().getCouponName()); |
| | | merVerifyCouponVo.setCreateTime(verifyCouponGetVo.getMemberCoupon().getReceiveTime()); |
| | | merVerifyCouponVo.setCouponName(memberCoupon.getCouponName()); |
| | | merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime()); |
| | | // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 |
| | | List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() |
| | | .map(goods -> { |
| | | MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); |
| | | merCouponGoods.setGoodsId(goods.getGoodsId()); |
| | | merCouponGoods.setGoodsName(goods.getGoodsName()); |
| | | merCouponGoods.setGoodsNum(1); |
| | | if (goods.getGoodsType() == 1) { |
| | | merCouponGoods.setGoodsType("周期"); |
| | | } else if (goods.getGoodsType() == 2) { |
| | |
| | | // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList |
| | | merVerifyCouponVo.setGoodsList(merCouponGoodsList); |
| | | merVerifyCouponVo.setVerifyStatus(1); |
| | | merVerifyCouponVo.setMemberCouponId(memberCoupon.getId()); |
| | | return merVerifyCouponVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 获取核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/8 17:46 |
| | | * @param verifyCode |
| | | * @param shopId |
| | | * @return MerVerifyAwardVo |
| | | * @return MerVerifyAwardVo |
| | | * @description 获取核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/8 17:46 |
| | | */ |
| | | @Override |
| | | public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){ |
| | | public MerVerifyAwardVo verifyPrize(String verifyCode, Long shopId) { |
| | | MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo(); |
| | | MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData(); |
| | | if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){ |
| | | if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) { |
| | | throw new ServiceException(AppErrorConstant.COUPON_USED); |
| | | } |
| | | if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){ |
| | | Shop shop = null; |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | //判断是否在绑定店铺核销 |
| | | if(member.getBindingFlag()==1){ |
| | | if(!member.getRelationShopId().equals(shopId)){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | //平台奖品判断 |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); |
| | | //判断生日活动状态 |
| | | if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ |
| | | shop = remoteShopService.getShop(shopId).getData(); |
| | | //判断指定区域全部店铺 |
| | | if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | //判断指定店铺 |
| | | if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | }else{ |
| | | throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); |
| | | } |
| | | } |
| | | //商户奖品判断 |
| | | if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if(memberGiftRecord.getGiftFrom()==1){ |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | }else{ |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | } |
| | | |
| | | merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); |
| | | switch(memberGiftRecord.getGiftType()){ |
| | | //礼物类型1优惠券2商品3现金4实物 |
| | | switch (memberGiftRecord.getGiftType()) { |
| | | case 1: |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); |
| | | merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); |
| | |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | //线上线下活动订单 |
| | | MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto); |
| | | //分类型订单 |
| | | MerOrderTotalVo goodsTypeVo = orderMapper.getMerTotalOrderTotalGoodsType(merTotalDto); |
| | | orderTotalVo.setCycleTotal(goodsTypeVo.getCycleTotal()); |
| | | orderTotalVo.setCycleMoney(goodsTypeVo.getCycleMoney()); |
| | |
| | | */ |
| | | @Override |
| | | public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto) { |
| | | //获取查询的商户列表 |
| | | if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) { |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | if(merTotalDto.getGoodsType()!=null&&merTotalDto.getGoodsType()==0){ |
| | | merTotalDto.setGoodsType(null); |
| | | } |
| | | MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); |
| | | // 获取订单年龄用户列表 |
| | | List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); |
| | | //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); |
| | | // 如果订单年龄用户列表不为空 |
| | | if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { |
| | | /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { |
| | | // 定义变量 |
| | | Integer ageType; |
| | | List<Long> userIdList; |
| | |
| | | orderTotalValue[i] = 0; |
| | | orderMoneyValue[i] = BigDecimal.ZERO; |
| | | } |
| | | }*/ |
| | | List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto); |
| | | String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; |
| | | Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; |
| | | //数据为空返回空数组 |
| | | if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { |
| | | MgtMapTotalPlusVo mgtMapTotalPlusVo; |
| | | for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { |
| | | mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); |
| | | orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey(); |
| | | orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); |
| | | orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); |
| | | } |
| | | // 设置订单分布总数对象的属性值 |
| | | //补充日期到近5日 |
| | | orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); |
| | | }else{ |
| | | orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); |
| | | orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); |
| | | orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | |
| | | List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); |
| | | List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); |
| | | if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | MgtMapIntTotalVo mgtMapIntTotalVo; |
| | | MgtMapBigTotalVo mgtMapBigTotalVo; |
| | | Integer intTotal = 0; |
| | | BigDecimal bigTotal = BigDecimal.ZERO; |
| | | for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ |
| | | intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); |
| | | bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); |
| | | } |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | BigDecimal intTotalBig = hundredBig; |
| | | if(intTotal!=0){ |
| | | intTotalBig = new BigDecimal(intTotal.toString()); |
| | | } |
| | | if(bigTotal.compareTo(BigDecimal.ZERO)<1){ |
| | | bigTotal = hundredBig; |
| | | } |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | MgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | MgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | MgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | MgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(MgtMapIntTotalVo); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | |
| | | List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); |
| | | if (goodsRankList != null && goodsRankList.size() > 0) { |
| | | goodsRankList = bigListRemoveNull(goodsRankList); |
| | | Collections.reverse(goodsRankList); |
| | | orderGoodsRankVo.setGoodsRankList(goodsRankList); |
| | | } |
| | | return orderGoodsRankVo; |
| | |
| | | List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); |
| | | if (orderFromList != null && orderFromList.size() > 0) { |
| | | orderFromList = bigListRemoveNull(orderFromList); |
| | | Collections.reverse(orderFromList); |
| | | merOrderFromRankVo.setOrderFromRankList(orderFromList); |
| | | } |
| | | return merOrderFromRankVo; |
| | | } |
| | | |
| | | /** |
| | | * @param merBaseDto |
| | | * @param merOrderPageDto |
| | | * @return MerTotalOrderVo |
| | | * @description 商户端订单管理统计 |
| | | * @author jqs |
| | | * @date 2023/7/4 16:27 |
| | | * @date 2023/7/31 10:53 |
| | | */ |
| | | @Override |
| | | public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) { |
| | | public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) { |
| | | MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo(); |
| | | merTotalOrderVo = orderMapper.totalMerOrder(merBaseDto.getShopId()); |
| | | if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) { |
| | | MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto(); |
| | | userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword()); |
| | | MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData(); |
| | | if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) { |
| | | List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(",")) |
| | | .map(Long::parseLong) |
| | | .collect(Collectors.toList()); |
| | | merOrderPageDto.setMemberUserIdList(userIdList); |
| | | merOrderPageDto.setMemberUserId(null); |
| | | } |
| | | } |
| | | merTotalOrderVo = orderMapper.totalMerOrder(merOrderPageDto); |
| | | return merTotalOrderVo; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 自动取消订单 |
| | | * @author jqs |
| | | * @date 2023/7/13 17:15 |
| | | * @param orderId |
| | | * @return void |
| | | * @return void |
| | | * @description 自动取消订单 |
| | | * @author jqs |
| | | * @date 2023/7/13 17:15 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void autoCancelOrder(String orderId){ |
| | | public void autoCancelOrder(String orderId) { |
| | | //更新订单信息 |
| | | Order order = this.getById(orderId); |
| | | order.setOrderStatus(0); |
| | | order.setCancelTime(new Date()); |
| | | this.saveOrUpdate(order); |
| | | //活动订单回退库存 |
| | | if(order.getOrderFrom()==2){ |
| | | if (order.getOrderFrom() == 2) { |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ |
| | | for(OrderGoods orderGoods : orderGoodsList){ |
| | | if (orderGoodsList != null && !orderGoodsList.isEmpty()) { |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | //redis库存控制极简版 |
| | | String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); |
| | | String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId(); |
| | | RLock redissonLock = redissonClient.getLock(goodsLock); |
| | | try{ |
| | | try { |
| | | redissonLock.lock(30, TimeUnit.SECONDS); |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); |
| | | }finally{ |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); |
| | | } finally { |
| | | redissonLock.unlock(); |
| | | } |
| | | //改变活动库存 |
| | |
| | | remoteActivityService.delActivityRecord(activityRecord); |
| | | } |
| | | } |
| | | }else{ |
| | | if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | } else { |
| | | if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) { |
| | | //回退优惠券 |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { |
| | | if (orderGoodsList != null && !orderGoodsList.isEmpty()) { |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | memberCouponSJ.add(orderGoods.getCouponId()); |
| | | } |
| | | if(memberCouponSJ!=null){ |
| | | if (memberCouponSJ != null) { |
| | | remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 订单支付回调 |
| | | * @author jqs |
| | | * @date 2023/7/13 17:57 |
| | | * @param transaction |
| | | * @return void |
| | | * @return void |
| | | * @description 订单支付回调 |
| | | * @author jqs |
| | | * @date 2023/7/13 17:57 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void payBack(Transaction transaction) { |
| | | // 更新订单状态 |
| | | String orderId=transaction.getOutTradeNo(); |
| | | Order order = this.getById(orderId); |
| | | public void payBack(PartnerTransactionsResult transaction) { |
| | | log.info("订单支付回调---"+transaction.toString()); |
| | | // Order order = this.getById(orderId); |
| | | // 更新订单状态 outTradeNo |
| | | String outTradeNo = transaction.getOutTradeNo(); |
| | | Order order = this.getByOutTradeNo(outTradeNo); |
| | | String orderId = order.getOrderId(); |
| | | order.setOrderStatus(2); |
| | | order.setPayTime(new Date()); |
| | | this.saveOrUpdate(order); |
| | |
| | | goodsTotalChangeDto.setChangeType(1); |
| | | goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); |
| | | goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); |
| | | Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId()); |
| | | if(bugGoodsNum==null||bugGoodsNum<1){ |
| | | Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); |
| | | if (bugGoodsNum == null || bugGoodsNum < 1) { |
| | | goodsTotalChangeDto.setPersonNum(1); |
| | | }else{ |
| | | goodsTotalChangeDto.setPersonNum(0); |
| | | } |
| | | goodsTotalChangeDtoList.add(goodsTotalChangeDto); |
| | | } |
| | | //更新商品统计 |
| | | remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList); |
| | | // 更新商户统计信息 |
| | | ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | shopTotalChangeDto.setShopId(order.getShopId()); |
| | | shopTotalChangeDto.setOrderType(1); |
| | | shopTotalChangeDto.setCycleMoney(cycleMoney); |
| | | shopTotalChangeDto.setServiceMoney(serviceMoney); |
| | | shopTotalChangeDto.setExperienceMoney(experienceMoney); |
| | | shopTotalChangeDto.setGoodsMoney(goodsMoney); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto);*/ |
| | | // 初始化会员统计信息 |
| | | 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.getPayMoney()); |
| | | 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()); |
| | | } |
| | | // 设置会员支付金额和支付时间 |
| | | memberTotalChangeDto.setPayMoney(order.getPayMoney()); |
| | |
| | | } |
| | | if (haveGoods) { |
| | | memberTotalChangeDto.setGoodsOrderChange(1); |
| | | } |
| | | if(order.getOrderFrom()==2){ |
| | | memberTotalChangeDto.setActivityTime(order.getCreateTime()); |
| | | } |
| | | // 更新会员统计信息 |
| | | remoteMemberService.changeMemberTotal(memberTotalChangeDto); |
| | |
| | | request.setTransactionId(transaction.getTransactionId()); |
| | | profitsSharingService.applyProfitSharing(request);*/ |
| | | } |
| | | //生成支付记录 |
| | | OrderPayment orderPayment = new OrderPayment(); |
| | | //修改支付记录生成支付记录 |
| | | orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId()); |
| | | |
| | | PayRecord payRecord = new PayRecord(); |
| | | payRecord.setDelFlag(0); |
| | | payRecord.setOrderId(orderId); |
| | | payRecord.setPayMoney(order.getPayMoney()); |
| | | payRecord.setPayTime(order.getPayTime()); |
| | | payRecord.setPayType(1); |
| | | payRecordService.save(payRecord); |
| | | } |
| | | |
| | | @Override |
| | | public Order getByOrderNo(String orderNo) { |
| | | LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); |
| | | queryWrapper.eq(Order::getOrderNo, orderNo) |
| | | .last(" limit 1 "); |
| | | return this.getOne(queryWrapper); |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public Order getByOutTradeNo(String outTradeNo) { |
| | | LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery(); |
| | | queryWrapper.eq(Order::getOutTradeNo, outTradeNo) |
| | | .last(" limit 1 "); |
| | | return this.getOne(queryWrapper); |
| | | } |
| | | |
| | | /** |
| | | * @description 订单退款 |
| | | * @author jqs |
| | | * @date 2023/7/13 18:36 |
| | | * @param orderId |
| | | * @return void |
| | | * @return void |
| | | * @description 订单退款 |
| | | * @author jqs |
| | | * @date 2023/7/13 18:36 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void refundOrder(String orderId){ |
| | | //更新订单信息 |
| | | public void refundOrder(String orderId) { |
| | | // 更新订单信息 |
| | | Order order = this.getById(orderId); |
| | | order.setOrderStatus(0); |
| | | order.setCancelTime(new Date()); |
| | |
| | | orderRefund.setOrderId(order.getOrderId()); |
| | | orderRefund.setUserId(order.getUserId()); |
| | | orderRefund.setShopId(order.getShopId()); |
| | | orderRefund.setRefundMoney(order.getPayMoney()); |
| | | orderRefund.setRefundMoney(order.getOnlinePayMoney()); |
| | | orderRefund.setOrderMoney(order.getPayMoney()); |
| | | orderRefund.setCreateTime(new Date()); |
| | | // 初始化各类商品的收款金额 |
| | |
| | | Boolean haveService = false; |
| | | Boolean haveExperience = false; |
| | | Boolean haveGoods = false; |
| | | //商品统计回退 |
| | | List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>(); |
| | | GoodsTotalChangeDto goodsTotalChangeDto; |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ |
| | | if (orderGoodsList != null && !orderGoodsList.isEmpty()) { |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | for(OrderGoods orderGoods : orderGoodsList){ |
| | | if(order.getOrderFrom()==2){ |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | if (order.getOrderFrom() == 2) { |
| | | //redis库存控制极简版 |
| | | //活动订单回退库存 |
| | | String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); |
| | | String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId(); |
| | | RLock redissonLock = redissonClient.getLock(goodsLock); |
| | | try{ |
| | | try { |
| | | redissonLock.lock(30, TimeUnit.SECONDS); |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); |
| | | }finally{ |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); |
| | | } finally { |
| | | redissonLock.unlock(); |
| | | } |
| | | //改变活动库存 |
| | |
| | | activityRecord.setUserId(order.getUserId()); |
| | | activityRecord.setOrderTime(order.getCreateTime()); |
| | | remoteActivityService.delActivityRecord(activityRecord); |
| | | }else{ |
| | | } else { |
| | | memberCouponSJ.add(orderGoods.getCouponId()); |
| | | } |
| | | //会员统计更新 |
| | | switch (orderGoods.getGoodsType()) { |
| | | case 1: |
| | | cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); |
| | |
| | | default: |
| | | break; |
| | | } |
| | | //商品统计更新 |
| | | goodsTotalChangeDto = new GoodsTotalChangeDto(); |
| | | goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId()); |
| | | goodsTotalChangeDto.setChangeType(2); |
| | | goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); |
| | | goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); |
| | | Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); |
| | | if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) { |
| | | goodsTotalChangeDto.setPersonNum(1); |
| | | }else{ |
| | | goodsTotalChangeDto.setPersonNum(0); |
| | | } |
| | | goodsTotalChangeDtoList.add(goodsTotalChangeDto); |
| | | } |
| | | remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList); |
| | | //回退优惠券 |
| | | if(memberCouponSJ!=null){ |
| | | if (memberCouponSJ != null) { |
| | | remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); |
| | | } |
| | | } |
| | | // 更新商户统计信息 |
| | | ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); |
| | | shopTotalChangeDto.setOrderType(2); |
| | | shopTotalChangeDto.setShopId(order.getShopId()); |
| | | shopTotalChangeDto.setCycleMoney(cycleMoney); |
| | | shopTotalChangeDto.setServiceMoney(serviceMoney); |
| | | shopTotalChangeDto.setExperienceMoney(experienceMoney); |
| | | shopTotalChangeDto.setGoodsMoney(goodsMoney); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto); |
| | | remoteShopService.changeShopTotal(shopTotalChangeDto);*/ |
| | | // 初始化会员统计信息 |
| | | MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); |
| | | memberTotalChangeDto.setUserId(order.getUserId()); |
| | |
| | | activityTotalChangeDto.setUserId(order.getUserId()); |
| | | remoteActivityService.changeActivityTotal(activityTotalChangeDto); |
| | | } |
| | | |
| | | log.info("用户取消订单退款, 检查退款"); |
| | | // 用户取消订单退款 |
| | | BigDecimal onlinePayMoney = order.getOnlinePayMoney(); |
| | | if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ |
| | | log.info("订单支付金额大于0,可发起退款"); |
| | | // 订单支付金额大于0,可发起退款 |
| | | orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); |
| | | } |
| | | |
| | | orderRefund.setRefundStatus(1); |
| | | orderRefundService.saveOrUpdate(orderRefund); |
| | | } |
| | | |
| | | /** |
| | | * @description 员工端活动订单统计 |
| | | * @author jqs |
| | | * @date 2023/7/17 15:25 |
| | | * 申请退款API |
| | | */ |
| | | private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ |
| | | try { |
| | | // 创建支付订单 |
| | | OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); |
| | | if (null == orderPayment) { |
| | | return; |
| | | } |
| | | |
| | | log.info("调用微信退款---发起退款"); |
| | | |
| | | String subMchId = orderPayment.getSubMchId(); |
| | | WxPayConfig config = wxService.getConfig(); |
| | | |
| | | RefundsRequest request = new RefundsRequest(); |
| | | request.setSpAppid(config.getAppId()); |
| | | request.setSubMchid(subMchId); |
| | | request.setTransactionId(orderPayment.getTransactionId()); |
| | | request.setOutRefundNo(outRefundNo); |
| | | request.setReason("用户取消订单"); |
| | | // 订单金额 |
| | | int total = orderPayment.getPayMoney().multiply(new BigDecimal(100)).intValue(); |
| | | |
| | | RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build(); |
| | | request.setAmount(amount); |
| | | request.setNotifyUrl(config.getNotifyUrl()); |
| | | |
| | | RefundsResult result = wxService.getEcommerceService().refunds(request); |
| | | |
| | | // 微信退款id |
| | | orderRefund.setWxRefundId(result.getRefundId()); |
| | | |
| | | // 请求参数 |
| | | Gson gson = new Gson(); |
| | | String refundRequestJson = gson.toJson(request); |
| | | // 返回参数 |
| | | String refundResponseJson = gson.toJson(result); |
| | | |
| | | log.info("调用微信退款返回参数---{}", refundResponseJson); |
| | | |
| | | // 保存支付订单统一下单日志 |
| | | paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); |
| | | |
| | | } catch (WxPayException e) { |
| | | throw new ServiceException(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param staffTotalDto |
| | | * @return StaffActivityOrderTotalVo |
| | | * @return StaffActivityOrderTotalVo |
| | | * @description 员工端活动订单统计 |
| | | * @author jqs |
| | | * @date 2023/7/17 15:25 |
| | | */ |
| | | @Override |
| | | public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){ |
| | | StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto); |
| | | public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) { |
| | | StaffActivityOrderTotalVo staffActivityOrderTotalVo = new StaffActivityOrderTotalVo(); |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto); |
| | | StaffActivityOrderTotalVo staffActivityOrderGoodsTotalVo = orderMapper.getStaffActivityOrderGoodsTotal(staffTotalDto); |
| | | staffActivityOrderTotalVo.setCycleTotal(staffActivityOrderGoodsTotalVo.getCycleTotal()); |
| | | staffActivityOrderTotalVo.setServiceTotal(staffActivityOrderGoodsTotalVo.getServiceTotal()); |
| | | staffActivityOrderTotalVo.setExperienceTotal(staffActivityOrderGoodsTotalVo.getExperienceTotal()); |
| | | } |
| | | return staffActivityOrderTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 员工端活动统计 |
| | | * @author jqs |
| | | * @date 2023/7/17 15:51 |
| | | * @param staffTotalDto |
| | | * @return StaffActivityTotalVo |
| | | * @return StaffActivityTotalVo |
| | | * @description 员工端活动统计 |
| | | * @author jqs |
| | | * @date 2023/7/17 15:51 |
| | | */ |
| | | @Override |
| | | public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){ |
| | | StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); |
| | | public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) { |
| | | StaffActivityTotalVo staffActivityTotalVo = new StaffActivityTotalVo(); |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); |
| | | } |
| | | return staffActivityTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 员工端活动统计订单分布 |
| | | * @author jqs |
| | | * @date 2023/7/17 16:16 |
| | | * @param staffTotalDto |
| | | * @return MerOrderDistributionTotalVo |
| | | * @return MerOrderDistributionTotalVo |
| | | * @description 员工端活动统计订单分布 |
| | | * @author jqs |
| | | * @date 2023/7/17 16:16 |
| | | */ |
| | | @Override |
| | | public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){ |
| | | public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) { |
| | | if(staffTotalDto.getGoodsType()!=null&&staffTotalDto.getGoodsType()==0){ |
| | | staffTotalDto.setGoodsType(null); |
| | | } |
| | | MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); |
| | | // 获取订单年龄用户列表 |
| | | MerTotalDto merTotalDto = new MerTotalDto(); |
| | | merTotalDto.setShopId(staffTotalDto.getShopId()); |
| | | List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); |
| | | //MerTotalDto merTotalDto = new MerTotalDto(); |
| | | //merTotalDto.setShopId(staffTotalDto.getShopId()); |
| | | //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); |
| | | // 如果订单年龄用户列表不为空 |
| | | if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { |
| | | /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { |
| | | // 定义变量 |
| | | Integer ageType; |
| | | List<Long> userIdList; |
| | |
| | | } |
| | | // 如果用户ID列表不为空 |
| | | if (userIdList != null && !userIdList.isEmpty()) { |
| | | mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId()); |
| | | mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList, staffTotalDto.getShopId(), staffTotalDto.getActivityId()); |
| | | orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); |
| | | orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); |
| | | } else { |
| | |
| | | orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); |
| | | orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); |
| | | orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | }*/ |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto); |
| | | String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; |
| | | Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; |
| | | BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; |
| | | if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { |
| | | MgtMapTotalPlusVo mgtMapTotalPlusVo; |
| | | for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { |
| | | mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); |
| | | orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey(); |
| | | orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); |
| | | orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); |
| | | } |
| | | orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); |
| | | }else{ |
| | | orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); |
| | | orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); |
| | | orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | } |
| | | } |
| | | // 返回订单分布总数对象 |
| | | return orderDistributionTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 补时间 |
| | | * @author jqs |
| | | * @date 2023/8/28 15:03 |
| | | * @param orderTotalKey |
| | | * @param orderTotalValue |
| | | * @param orderMoneyValue |
| | | * @return MerOrderDistributionTotalVo |
| | | */ |
| | | public MerOrderDistributionTotalVo fillOrderTotalKeyAndValuesToRecentFiveDays(String[] orderTotalKey,Integer[] orderTotalValue,BigDecimal[] orderMoneyValue) { |
| | | MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); |
| | | // 获取当前日期 |
| | | LocalDate currentDate = LocalDate.now(); |
| | | |
| | | // 创建最近五天日期列表 |
| | | List<String> recentFiveDays = new ArrayList<>(); |
| | | for (int i = 0; i < 5; i++) { |
| | | LocalDate date = currentDate.minusDays(i); |
| | | recentFiveDays.add(date.toString()); |
| | | } |
| | | |
| | | // 创建新的数组 |
| | | String[] newOrderTotalKey = new String[5]; |
| | | Integer[] newOrderTotalValue = new Integer[5]; |
| | | BigDecimal[] newOrderMoneyValue = new BigDecimal[5]; |
| | | |
| | | // 遍历最近五天日期列表,并补充数据 |
| | | for (int i = 0; i < 5; i++) { |
| | | String day = recentFiveDays.get(i); |
| | | int index = getIndexInOrderTotalKey(day,orderTotalKey); |
| | | if (index != -1) { |
| | | newOrderTotalKey[i] = orderTotalKey[index]; |
| | | newOrderTotalValue[i] = orderTotalValue[index]; |
| | | newOrderMoneyValue[i] = orderMoneyValue[index]; |
| | | } else { |
| | | newOrderTotalKey[i] = day; |
| | | newOrderTotalValue[i] = 0; |
| | | newOrderMoneyValue[i] = BigDecimal.ZERO; |
| | | } |
| | | } |
| | | |
| | | // 更新属性 |
| | | orderTotalKey = newOrderTotalKey; |
| | | orderTotalValue = newOrderTotalValue; |
| | | orderMoneyValue = newOrderMoneyValue; |
| | | orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); |
| | | orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); |
| | | orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); |
| | | return orderDistributionTotalVo; |
| | | } |
| | | |
| | | |
| | | private int getIndexInOrderTotalKey(String day,String[] orderTotalKey) { |
| | | for (int i = 0; i < orderTotalKey.length; i++) { |
| | | if (orderTotalKey[i].equals(day)) { |
| | | return i; |
| | | } |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 员工端活动统计销售占比 |
| | | * @author jqs |
| | | * @date 2023/7/17 17:03 |
| | | * @param staffTotalDto |
| | | * @return MerOrderTypeTotalVo |
| | | * @return MerOrderTypeTotalVo |
| | | * @description 员工端活动统计销售占比 |
| | | * @author jqs |
| | | * @date 2023/7/17 17:03 |
| | | */ |
| | | @Override |
| | | public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){ |
| | | 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("单品"); |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | //获取商品分类销售数据 |
| | | 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; |
| | | Integer intTotal = 0; |
| | | BigDecimal bigTotal = BigDecimal.ZERO; |
| | | for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ |
| | | intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); |
| | | bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); |
| | | } |
| | | goodsTypeTotalList.add(MgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | BigDecimal intTotalBig = hundredBig; |
| | | if(intTotal!=0){ |
| | | intTotalBig = new BigDecimal(intTotal.toString()); |
| | | } |
| | | if(bigTotal.compareTo(BigDecimal.ZERO)<1){ |
| | | bigTotal = hundredBig; |
| | | } |
| | | // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 |
| | | Boolean noCycle = true; |
| | | Boolean noService = true; |
| | | Boolean noExperience = true; |
| | | Boolean noGoods = true; |
| | | for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); |
| | | mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); |
| | | mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); |
| | | mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); |
| | | if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | noCycle= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | noService= false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | noExperience = false; |
| | | } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | noGoods = false; |
| | | } |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | //补充缺少类型 |
| | | if(noCycle){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("周期"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("周期"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noService){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("服务"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("服务"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noExperience){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("体验"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("体验"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | if(noGoods){ |
| | | mgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | mgtMapIntTotalVo.setMapKey("单品"); |
| | | mgtMapIntTotalVo.setMapValue(0); |
| | | goodsTypeTotalList.add(mgtMapIntTotalVo); |
| | | mgtMapBigTotalVo = new MgtMapBigTotalVo(); |
| | | mgtMapBigTotalVo.setMapKey("单品"); |
| | | mgtMapBigTotalVo.setMapValue(BigDecimal.ZERO); |
| | | goodsTypeMoneyList.add(mgtMapBigTotalVo); |
| | | } |
| | | orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | | orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); |
| | | } |
| | | orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); |
| | | orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); |
| | | } |
| | | return orderTypeTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 员工端获客人数 |
| | | * @author jqs |
| | | * @date 2023/7/17 18:42 |
| | | * @param staffTotalDto |
| | | * @return StaffActivityDateMemberTotalVo |
| | | * @return StaffActivityDateMemberTotalVo |
| | | * @description 员工端获客人数 |
| | | * @author jqs |
| | | * @date 2023/7/17 18:42 |
| | | */ |
| | | @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)); |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | // 查询数据库获取数据 |
| | | 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); |
| | | } |
| | | // 获取日期范围 |
| | | 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 |
| | | * @return StaffActivityDateMemberTotalVo |
| | | * @description 员工端获客人数 |
| | | * @author jqs |
| | | * @date 2023/7/17 18:42 |
| | | */ |
| | | @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)); |
| | | if(staffTotalDto.getActivityFrom()==1){ |
| | | MerTotalDto merTotalDto = new MerTotalDto(); |
| | | merTotalDto.setAgeType(staffTotalDto.getAgeType()); |
| | | if(staffTotalDto.getAgeType()!=null){ |
| | | List<Long> userIdList = remoteMemberService.listUserIdByAgeType(staffTotalDto.getAgeType()).getData(); |
| | | staffTotalDto.setUserIdList(userIdList); |
| | | } |
| | | // 查询数据库获取数据 |
| | | 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); |
| | | } |
| | | // 获取日期范围 |
| | | 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> |
| | | * @return List<String> |
| | | * @description 获取时间段日期 |
| | | * @author jqs |
| | | * @date 2023/7/17 19:11 |
| | | */ |
| | | public static List<String> getDateRange(String startDate, String endDate) { |
| | | List<String> dateList = new ArrayList<>(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 检查订单状态定时任务 |
| | | * @author jqs |
| | | * @date 2023/7/25 14:40 |
| | | * @param |
| | | * @return void |
| | | * @return void |
| | | * @description 检查订单状态定时任务 |
| | | * @author jqs |
| | | * @date 2023/7/25 14:40 |
| | | */ |
| | | @Override |
| | | public void checkOrderStatus(){ |
| | | public void checkOrderStatus() { |
| | | Integer delayTime = 30; |
| | | if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){ |
| | | if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { |
| | | delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); |
| | | } |
| | | delayTime = delayTime + 5; |
| | | Date checkTime = DateUtils.addMinutes(new Date(),delayTime); |
| | | Date checkTime = DateUtils.addMinutes(new Date(), -delayTime); |
| | | LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(Order::getDelFlag,0); |
| | | queryWrapper.lt(Order::getCreateTime,checkTime); |
| | | queryWrapper.eq(Order::getOrderStatus,1); |
| | | queryWrapper.eq(Order::getDelFlag, 0); |
| | | queryWrapper.lt(Order::getCreateTime, checkTime); |
| | | queryWrapper.eq(Order::getOrderStatus, 1); |
| | | List<Order> orderList = this.list(queryWrapper); |
| | | if(orderList!=null&&!orderList.isEmpty()){ |
| | | for(Order order: orderList){ |
| | | if (orderList != null && !orderList.isEmpty()) { |
| | | for (Order order : orderList) { |
| | | autoTimeCancelOrder(order); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void autoTimeCancelOrder(Order order){ |
| | | @Override |
| | | public void profitSharingBack(ProfitSharingNotifyResult result) { |
| | | |
| | | try { |
| | | String outOrderNo = result.getOutOrderNo(); |
| | | ProfitSharing profitSharing = profitSharingService.getById(outOrderNo); |
| | | if(null != profitSharing){ |
| | | profitSharing.setWxOrderId(result.getOrderId()); |
| | | profitSharing.setFinishTime(result.getSuccessTime()); |
| | | profitSharing.setFinishFlag(1); |
| | | |
| | | profitSharingService.saveOrUpdate(profitSharing); |
| | | } |
| | | } catch (Exception e){ |
| | | |
| | | log.error("==分账回成功回调操作====【{}】========={}", result.getOutOrderNo(), e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void orderRefundBack(RefundNotifyResult result) { |
| | | try { |
| | | String outRefundNo = result.getOutRefundNo(); |
| | | String refundStatus = result.getRefundStatus(); |
| | | OrderRefund orderRefund = orderRefundService.getById(outRefundNo); |
| | | if(null != orderRefund){ |
| | | orderRefund.setWxRefundId(result.getRefundId()); |
| | | orderRefund.setBackTime(result.getSuccessTime()); |
| | | orderRefund.setRefundStatus(IDict.getCodeByText(RefundStatusEnum.class, refundStatus)); |
| | | orderRefundService.saveOrUpdate(orderRefund); |
| | | } |
| | | } catch (Exception e){ |
| | | |
| | | log.error("==退款回成功回调操作====【{}】========={}", result.getOutRefundNo(), e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | private void autoTimeCancelOrder(Order order) { |
| | | String orderId = order.getOrderId(); |
| | | order.setOrderStatus(0); |
| | | order.setCancelTime(new Date()); |
| | | this.saveOrUpdate(order); |
| | | //活动订单回退库存 |
| | | if(order.getOrderFrom()==2){ |
| | | if (order.getOrderFrom() == 2) { |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){ |
| | | for(OrderGoods orderGoods : orderGoodsList){ |
| | | if (orderGoodsList != null && !orderGoodsList.isEmpty()) { |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | //redis库存控制极简版 |
| | | String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId(); |
| | | String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId(); |
| | | RLock redissonLock = redissonClient.getLock(goodsLock); |
| | | try{ |
| | | try { |
| | | redissonLock.lock(30, TimeUnit.SECONDS); |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum()); |
| | | }finally{ |
| | | Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); |
| | | redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); |
| | | } finally { |
| | | redissonLock.unlock(); |
| | | } |
| | | //改变活动库存 |
| | |
| | | remoteActivityService.delActivityRecord(activityRecord); |
| | | } |
| | | } |
| | | }else{ |
| | | if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){ |
| | | } else { |
| | | if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) { |
| | | //回退优惠券 |
| | | List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId); |
| | | if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) { |
| | | if (orderGoodsList != null && !orderGoodsList.isEmpty()) { |
| | | StringJoiner memberCouponSJ = new StringJoiner(","); |
| | | for (OrderGoods orderGoods : orderGoodsList) { |
| | | memberCouponSJ.add(orderGoods.getCouponId()); |
| | | } |
| | | if(memberCouponSJ!=null){ |
| | | if (memberCouponSJ != null) { |
| | | remoteCouponService.backMemberCoupon(memberCouponSJ.toString()); |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取商户订单统计 |
| | | * @author jqs |
| | | * @date 2023/8/4 10:25 |
| | | * @param mgtShopAllOrderPageDto |
| | | * @return MgtShopAllOrderTotal |
| | | */ |
| | | @Override |
| | | public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopAllOrderPageDto mgtShopAllOrderPageDto){ |
| | | MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopAllOrderPageDto); |
| | | return shopAllOrderTotal; |
| | | } |
| | | |
| | | /** |
| | | * 分页获取会员消费记录 |
| | | * @param merOrderPageDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){ |
| | | List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto); |
| | | if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { |
| | | Long userId; |
| | | Member member; |
| | | Integer orderFrom; |
| | | String orderFromDesc; |
| | | 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){ |
| | | merOrderPageVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | } |
| | | MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); |
| | | mgtBaseBathDto.setIds(userIdSj.toString()); |
| | | List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); |
| | | 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){ |
| | | 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()+"缺少用户"); |
| | | } |
| | | } |
| | | } |
| | | return merOrderPageVoList; |
| | | } |
| | | |
| | | /** |
| | | * @description 获取销售排行 |
| | | * @author jqs |
| | | * @date 2023/8/24 18:00 |
| | | * @param shopIdList |
| | | * @return List<MgtMapIntTotalVo> |
| | | */ |
| | | @Override |
| | | public List<MgtMapBigTotalVo> shopSalesRank(List<Long> shopIdList){ |
| | | return orderMapper.shopSalesRank(shopIdList); |
| | | } |
| | | |
| | | /** |
| | | * @description 获取商户服务统计 |
| | | * @author jqs |
| | | * @date 2023/8/24 18:28 |
| | | * @param shopId |
| | | * @return MerHomeShopTotalVo |
| | | */ |
| | | @Override |
| | | public MerHomeShopTotalVo getShopServiceTotal(Long shopId){ |
| | | MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); |
| | | return serviceTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 获取区域统计 |
| | | * @author jqs |
| | | * @date 2023/8/25 11:49 |
| | | * @param shopIdList |
| | | * @return AgencyTotalVo |
| | | */ |
| | | @Override |
| | | public AgencyTotalVo getAgencyTotalVo(List<Long> shopIdList){ |
| | | AgencyTotalVo agencyTotalVo = orderMapper.getAgencyTotalVo(shopIdList); |
| | | return agencyTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 商户端会员订单统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:39 |
| | | * @param merBaseDto |
| | | * @return MerMemberSimpleTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(MerBaseDto merBaseDto){ |
| | | return orderMapper.getMerMemberSimpleTotalVo(merBaseDto); |
| | | } |
| | | } |