From b879982d29cb2dbfe72482b46c8f6f2064d663a2 Mon Sep 17 00:00:00 2001 From: zhanglin8526 <852614290@qq.com> Date: 星期六, 26 八月 2023 15:27:29 +0800 Subject: [PATCH] 支付调整 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 956 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 683 insertions(+), 273 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 791b67c..0971266 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -5,9 +5,15 @@ 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.PartnerTransactionsResult; -import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; +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; @@ -41,6 +47,7 @@ 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; @@ -51,7 +58,6 @@ 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; @@ -118,11 +124,11 @@ @Resource private PayRecordService payRecordService; - @Autowired + @Resource private RedissonClient redissonClient; - /*@Autowired - private WxPayService wxService;*/ + @Resource + private WxPayService wxService; @Resource private PaymentMessageService paymentMessageService; @@ -163,7 +169,7 @@ .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); Boolean haveDeposit = false; for (Goods goods : goodsList) { - if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { + if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) { haveDeposit = true; } } @@ -218,6 +224,7 @@ 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()); @@ -274,9 +281,9 @@ 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) { @@ -311,15 +318,19 @@ 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) { + if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) <= 0) { appGoodsMemberCouponVoList.add(entity); } + /*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) { + appGoodsMemberCouponVoList.add(entity); + /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) { appGoodsMemberCouponVoList.add(entity); - } + }*/ } } @@ -443,6 +454,7 @@ 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()); @@ -544,6 +556,7 @@ BigDecimal orderPayMoney = new BigDecimal("0.00"); // 创建订单ID和订单号 String orderId = IdUtils.simpleUUID(); + String orderNo = CodeFactoryUtil.getShopOrderNo(); OrderGoods orderGoods; String orderGoodsId; @@ -614,6 +627,10 @@ discountMoney = appMemberCouponVo.getDiscountMoney(); goodsRealPrice = goodsTotalPrice.subtract(discountMoney); useCoupon = 1; + } + if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){ + goodsRealPrice = BigDecimal.ZERO; + discountMoney = goodsTotalPrice; } } memberCouponSJ.add(memberCouponId); @@ -694,13 +711,14 @@ 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) { @@ -708,12 +726,16 @@ 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); // 更新用户商品类型 @@ -727,15 +749,22 @@ appPlaceOrderVo.setOrderNo(orderNo); String goodsName = ""; - if (null != goods) { - goodsName = goods.getGoodsName(); + if (null != goodsNameList) { + goodsName = String.join(",", goodsNameList); } - // 小程序微信下单支付 - /*createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, - orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), - appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);*/ + if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ + String outTradeNo = IdUtils.simpleUUID(); + // 保存订单 交易流水 + order.setOutTradeNo(outTradeNo); + this.saveOrUpdate(order); + + // 小程序微信下单支付 + createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, + orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), + appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1); + } //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { @@ -764,17 +793,17 @@ * @param userId * @param shopId * @param goodsName - * @param orderNo + * @param outTradeNo * @param orderId * @param payMoney * @param openid * @param payerClientIp * @param goodsNameList */ - /*private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, - String goodsName, String orderNo, + public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, + String goodsName, String outTradeNo, String orderId, BigDecimal payMoney, - String openid, String payerClientIp, List<String> goodsNameList){ + String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){ try { // 创建支付订单 R<String> resultMch = remoteShopService.getShopSubMchId(shopId); @@ -793,11 +822,15 @@ String description = goodsName + "-商品购买"; request.setDescription(description); - request.setOutTradeNo(orderNo); + request.setOutTradeNo(outTradeNo); request.setNotifyUrl(config.getNotifyUrl()); // 结算信息 PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); - settleInfo.setProfitSharing(true); + if(orderFrom==2){ + settleInfo.setProfitSharing(true); + }else{ + settleInfo.setProfitSharing(false); + } settleInfo.setSubsidyAmount(BigDecimal.ZERO); request.setSettleInfo(settleInfo); @@ -840,13 +873,14 @@ paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson); // 保存支付订单统一下单支付记录 - orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, payMoney, + 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()); } - }*/ + } /** @@ -1028,9 +1062,9 @@ 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); @@ -1039,6 +1073,7 @@ 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); @@ -1046,11 +1081,15 @@ 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); // 更新用户商品类型 @@ -1106,7 +1145,25 @@ 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.TEN)<0){ + + String outTradeNo = IdUtils.simpleUUID(); + + // 保存订单 交易流水 + order.setOutTradeNo(outTradeNo); + this.saveOrUpdate(order); + + // 小程序微信下单支付 + createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo, + orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), + appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2); + } //生成活动参加记录 ActivityRecord activityRecord = new ActivityRecord(); activityRecord.setDelFlag(0); @@ -1272,9 +1329,15 @@ @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; } @@ -1288,6 +1351,9 @@ 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) { @@ -1306,7 +1372,11 @@ 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()); @@ -1324,7 +1394,7 @@ merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); } } - merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(order.getReceivableMoney())); + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); // 根据订单用户ID获取用户信息 Member member = remoteMemberService.getMember(order.getUserId()).getData(); merVerifyOrderVo.setUserId(order.getUserId()); @@ -1450,7 +1520,11 @@ 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); @@ -1468,7 +1542,7 @@ merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); } } - merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(order.getReceivableMoney())); + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); Member member = remoteMemberService.getMember(order.getUserId()).getData(); merVerifyOrderVo.setUserId(order.getUserId()); merVerifyOrderVo.setUserName(member.getRealName()); @@ -1480,14 +1554,15 @@ } //创建支付记录 - 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); - + 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); + } //submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney()); return merVerifyOrderVo; @@ -1581,22 +1656,42 @@ @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 -> { @@ -1618,7 +1713,6 @@ .collect(Collectors.toList()); // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); - MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); //生成服务 ConsumerGoods consumerGoods; String consumerGoodsId; @@ -1659,7 +1753,20 @@ 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; } @@ -1681,10 +1788,32 @@ 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) { @@ -1742,15 +1871,17 @@ break; } merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime()); - memberGiftRecord.setVerifyStatus(2); - memberGiftRecord.setVerifyTime(new Date()); + 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()); @@ -1769,15 +1900,17 @@ @Override public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId()); - /*if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { + 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); + } } - }*/ + } return merMemberNoClearOrderVoList; } @@ -1793,9 +1926,9 @@ order.setOffPayTime(new Date()); order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney())); if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { - order.setCloseFlag(0); - } else { order.setCloseFlag(1); + } else { + order.setCloseFlag(0); } this.saveOrUpdate(order); //创建支付记录 @@ -1838,7 +1971,6 @@ 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); @@ -1847,6 +1979,7 @@ member.setRealName(name); member.setNickName(name); member.setBindingFlag(1); + member.setBindingType(3); member.setRelationShopId(shopId); member.setRelationShopName(shop.getShopName()); remoteMemberService.createNewMember(member); @@ -1892,6 +2025,12 @@ 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(); @@ -1926,14 +2065,18 @@ } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) { discountPercent = appMemberCouponVo.getDiscountPercent(); goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP); - discountMoney = goodsRealPrice.subtract(goodsTotalPrice); + 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) { goodsDeposit = new BigDecimal("0.00"); @@ -1945,6 +2088,7 @@ couponDiscount = couponDiscount.add(discountMoney); orderPayDeposit = orderPayDeposit.add(goodsDeposit); orderPayMoney = orderPayMoney.add(goodsRealPrice); + //创建OrderGoods orderGoods = new OrderGoods(); orderGoodsId = IdUtils.simpleUUID(); @@ -1966,7 +2110,63 @@ 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()); @@ -1997,16 +2197,14 @@ 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.setOrderRemark(merNewOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(nowTime); @@ -2015,75 +2213,16 @@ order.setPayMoney(merNewOrderDto.getPayMoney()); order.setOnlinePayMoney(new BigDecimal("0.00")); order.setOfflinePayMoney(merNewOrderDto.getPayMoney()); + order.setPayMoney(merNewOrderDto.getPayMoney()); order.setOffPayTime(nowTime); order.setPayType(1); + //判断结清 if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { - order.setCloseFlag(0); - } else { order.setCloseFlag(1); + } else { + order.setCloseFlag(0); } - this.save(order); - //创建服务 - List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); - ConsumerGoods consumerGoods; - String consumerGoodsId; - List<ConsumerGoods> consumerGoodsList = new ArrayList<>(); - for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { - Integer buyGoodsNum = appUserOrderGoodsPageVo.getBuyNum(); - if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) { - 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.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag()); - consumerGoods.setCreateTime(nowTime); - consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); - consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.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(); - 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.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); + //用户未绑定则绑定商户 Member member = remoteMemberService.getMember(userId).getData(); if (member != null && member.getBindingFlag() != 1) { //绑定商户 @@ -2092,23 +2231,35 @@ 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()); + } + + //更新商户统计 + /*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.getPayTime()); - payRecord.setPayType(2); + payRecord.setPayTime(order.getOffPayTime()); + payRecord.setPayType(merNewOrderDto.getPayType()); payRecordService.save(payRecord); } @@ -2120,10 +2271,12 @@ @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()); @@ -2131,6 +2284,8 @@ merOrderPageDto.setMemberUserId(null); } } + + // 获取订单列表 List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto); if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { Long userId; @@ -2139,16 +2294,17 @@ 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 if (orderFrom == 2) { + orderFromDesc = "店铺砍价活动(" + merOrderPageVo.getActivityName() + ")"; } else { orderFromDesc = "线下创建"; } @@ -2156,16 +2312,22 @@ orderFromDesc = "商城订单"; } merOrderPageVo.setOrderFromDesc(orderFromDesc); - merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney())); + // 设置未支付金额为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) { if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) { merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); @@ -2185,13 +2347,15 @@ * @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); } } @@ -2790,13 +2954,31 @@ */ @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; } @@ -3119,6 +3301,9 @@ */ @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对象 @@ -3133,28 +3318,41 @@ } else if (couponStatus != 1) { throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); } - if (memberCoupon.getCouponFrom() == 2 && !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 && memberCoupon.getShopId() == null) { - memberCoupon.setShopId(shopId); + //如果是平台优惠券,当用户绑定商户时验证商户一致 + 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) { @@ -3171,6 +3369,7 @@ // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); merVerifyCouponVo.setVerifyStatus(1); + merVerifyCouponVo.setMemberCouponId(memberCoupon.getId()); return merVerifyCouponVo; } @@ -3189,10 +3388,37 @@ if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) { throw new ServiceException(AppErrorConstant.COUPON_USED); } + 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) { @@ -3200,8 +3426,8 @@ } else { merVerifyAwardVo.setGiftFrom("商户生日卡"); } - merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); + //礼物类型1优惠券2商品3现金4实物 switch (memberGiftRecord.getGiftType()) { case 1: merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); @@ -3265,12 +3491,9 @@ 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()); @@ -3295,6 +3518,9 @@ 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(); // 获取订单年龄用户列表 @@ -3343,10 +3569,10 @@ } }*/ 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()) { - String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; - Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; - BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); @@ -3354,6 +3580,8 @@ orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } + orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); + }else{ orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); @@ -3382,28 +3610,44 @@ 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; + } // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 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("周期"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { - MgtMapIntTotalVo.setMapKey("服务"); + mgtMapIntTotalVo.setMapKey("服务"); mgtMapBigTotalVo.setMapKey("服务"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { - MgtMapIntTotalVo.setMapKey("体验"); + mgtMapIntTotalVo.setMapKey("体验"); mgtMapBigTotalVo.setMapKey("体验"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { - MgtMapIntTotalVo.setMapKey("单品"); + mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); } - goodsTypeTotalList.add(MgtMapIntTotalVo); + goodsTypeTotalList.add(mgtMapIntTotalVo); goodsTypeMoneyList.add(mgtMapBigTotalVo); } orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); @@ -3431,6 +3675,7 @@ List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); if (goodsRankList != null && goodsRankList.size() > 0) { goodsRankList = bigListRemoveNull(goodsRankList); + Collections.reverse(goodsRankList); orderGoodsRankVo.setGoodsRankList(goodsRankList); } return orderGoodsRankVo; @@ -3456,6 +3701,7 @@ List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); if (orderFromList != null && orderFromList.size() > 0) { orderFromList = bigListRemoveNull(orderFromList); + Collections.reverse(orderFromList); merOrderFromRankVo.setOrderFromRankList(orderFromList); } return merOrderFromRankVo; @@ -3621,9 +3867,12 @@ @Override @Transactional public void payBack(PartnerTransactionsResult transaction) { - // 更新订单状态 - String orderId = transaction.getOutTradeNo(); - Order order = this.getById(orderId); + + // Order order = this.getById(orderId); + // 更新订单状态 订单编号,就是 微信outTradeNo + String orderNo = transaction.getOutTradeNo(); + Order order = this.getByOrderNo(orderNo); + String orderId = order.getOrderId(); order.setOrderStatus(2); order.setPayTime(new Date()); this.saveOrUpdate(order); @@ -3675,15 +3924,16 @@ 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()); @@ -3695,6 +3945,8 @@ Integer integral = Integer.valueOf(integralBig.toString()); memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); } // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney()); @@ -3741,8 +3993,9 @@ 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); @@ -3750,6 +4003,14 @@ 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); } /** @@ -3850,14 +4111,14 @@ } } // 更新商户统计信息 - 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()); @@ -3909,7 +4170,7 @@ BigDecimal onlinePayMoney = order.getOnlinePayMoney(); if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ // 订单支付金额大于0,可发起退款 - //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); + orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); } orderRefund.setRefundStatus(1); @@ -3919,7 +4180,7 @@ /** * 申请退款API */ - /*private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ + private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ try { // 创建支付订单 OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); @@ -3958,7 +4219,7 @@ } catch (WxPayException e) { throw new ServiceException(e.getMessage()); } - }*/ + } /** * @param staffTotalDto @@ -3969,7 +4230,14 @@ */ @Override public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) { - StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(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; } @@ -3982,7 +4250,10 @@ */ @Override public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) { - StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); + StaffActivityTotalVo staffActivityTotalVo = new StaffActivityTotalVo(); + if(staffTotalDto.getActivityFrom()==1){ + staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto); + } return staffActivityTotalVo; } @@ -3995,13 +4266,16 @@ */ @Override 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; @@ -4047,9 +4321,80 @@ 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; + } + + 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; } @@ -4063,37 +4408,55 @@ @Override public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto) { MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo(); - //获取商品分类销售数据 - List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto); - List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); - List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); - if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { - MgtMapIntTotalVo MgtMapIntTotalVo; - MgtMapBigTotalVo mgtMapBigTotalVo; - // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 - for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { - MgtMapIntTotalVo = new MgtMapIntTotalVo(); - mgtMapBigTotalVo = new MgtMapBigTotalVo(); - MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); - mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); - if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { - MgtMapIntTotalVo.setMapKey("周期"); - mgtMapBigTotalVo.setMapKey("周期"); - } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { - MgtMapIntTotalVo.setMapKey("服务"); - mgtMapBigTotalVo.setMapKey("服务"); - } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { - MgtMapIntTotalVo.setMapKey("体验"); - mgtMapBigTotalVo.setMapKey("体验"); - } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { - MgtMapIntTotalVo.setMapKey("单品"); - mgtMapBigTotalVo.setMapKey("单品"); + 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; + } + // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 + 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("周期"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { + mgtMapIntTotalVo.setMapKey("服务"); + mgtMapBigTotalVo.setMapKey("服务"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { + mgtMapIntTotalVo.setMapKey("体验"); + mgtMapBigTotalVo.setMapKey("体验"); + } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { + mgtMapIntTotalVo.setMapKey("单品"); + mgtMapBigTotalVo.setMapKey("单品"); + } + goodsTypeTotalList.add(mgtMapIntTotalVo); + goodsTypeMoneyList.add(mgtMapBigTotalVo); + } + orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); + orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); } - orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); - orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); } return orderTypeTotalVo; } @@ -4109,32 +4472,34 @@ 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; } @@ -4150,32 +4515,40 @@ 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; } @@ -4361,8 +4734,7 @@ orderFromDesc = "商城订单"; } merOrderPageVo.setOrderFromDesc(orderFromDesc); - merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney())); - if (merOrderPageVo.getUnPaidMoney() == null) { + if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){ merOrderPageVo.setUnPaidMoney(zeroBig); } } @@ -4383,4 +4755,42 @@ } 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; + } } -- Gitblit v1.7.1