From da837b5a0e23b47bc1d038547702cab3cecce577 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期六, 26 八月 2023 17:51:59 +0800
Subject: [PATCH] Merge branch 'master' of ssh://120.76.84.145:20202/java/HongRuiTang into master
---
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 3132 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 2,843 insertions(+), 289 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 c2de81f..ef83ce7 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
@@ -1,41 +1,76 @@
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.core.utils.uuid.IdUtils;
+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.dto.*;
+import com.ruoyi.system.api.domain.poji.activity.ActivityRecord;
+import com.ruoyi.system.api.domain.poji.config.DelayTask;
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 lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
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.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -48,6 +83,7 @@
* @since 2023-04-25
*/
@Service
+@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Resource
@@ -83,6 +119,32 @@
@Resource
private RemoteCouponService remoteCouponService;
+ @Resource
+ private RemoteActivityService remoteActivityService;
+
+ @Resource
+ private RedisService redisService;
+
+ @Resource
+ private PayRecordService payRecordService;
+
+ @Resource
+ private RedissonClient redissonClient;
+
+ @Resource
+ private WxPayService wxService;
+
+ @Resource
+ private PaymentMessageService paymentMessageService;
+
+ @Resource
+ private OrderPaymentService orderPaymentService;
+
+ @Resource
+ private ProfitSharingService profitSharingService;
+
+ @Resource
+ private OrderRefundService orderRefundService;
/**
* @description: buyGoods
@@ -94,10 +156,27 @@
@Override
public AppSureOrderVo buyGoods(AppSureOrderDto appSureOrderDto) {
Long userId = appSureOrderDto.getUserId();
+ // 初始化订单对象
AppSureOrderVo appSureOrderVo = new AppSureOrderVo();
+ // 初始化订单商品列表
List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>();
AppSureOrderGoodsVo appSureOrderGoodsVo;
+ // 获取购买商品列表
List<AppBuyGoodsDto> appBuyGoodsDtoList = appSureOrderDto.getAppBuyGoodsDtoList();
+ //获取商品列表
+ StringJoiner goodsIdSJ = new StringJoiner(",");
+ for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
+ goodsIdSJ.add(appBuyGoodsDto.getGoodsId());
+ }
+ List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData();
+ Map<String, Goods> goodsMap = goodsList.stream()
+ .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
+ Boolean haveDeposit = false;
+ for (Goods goods : goodsList) {
+ if (goods.getSubscriptionFlag()==1&&goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
+ haveDeposit = true;
+ }
+ }
String goodsId;
Integer buyNum;
BigDecimal buyNumBig;
@@ -106,9 +185,17 @@
BigDecimal goodsPrice;
BigDecimal goodsTotalPrice;
BigDecimal goodsRealPrice;
- List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
- List<AppMemberCouponVo> appGoodsMemberCouponVoList;
- Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+ MerBaseDto merBaseDto = new MerBaseDto();
+ merBaseDto.setUserId(userId);
+ merBaseDto.setShopId(appSureOrderDto.getShopId());
+ // 获取用户优惠券列表
+ List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
+
+ // 将优惠券列表转换为Map,以优惠券ID为键
+ Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
+ if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
+ appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
+ }
AppMemberCouponVo appMemberCouponVo;
Integer couponType;
BigDecimal moneyThreshold;
@@ -117,28 +204,37 @@
BigDecimal goodsDeposit;
GoodsFile goodsFile;
Integer useCoupon;
+ // 初始化订单相关金额
BigDecimal orderGoodsMoney = new BigDecimal("0.00");
BigDecimal couponDiscount = new BigDecimal("0.00");
BigDecimal orderPayDeposit = new BigDecimal("0.00");
BigDecimal orderPayMoney = new BigDecimal("0.00");
+ // 遍历购买商品列表
+ HashSet<String> userCouponIdSet = new HashSet<>();
for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
appSureOrderGoodsVo = new AppSureOrderGoodsVo();
+ discountMoney = BigDecimal.ZERO;
useCoupon = 0;
goodsId = appBuyGoodsDto.getGoodsId();
buyNum = appBuyGoodsDto.getBuyNum();
memberCouponId = appBuyGoodsDto.getMemberCouponId();
- goods = remoteGoodsService.getGoods(goodsId).getData();
+ // 获取商品信息
+ goods = goodsMap.get(goodsId);
+ if (goods.getGoodsStatus() != 1) {
+ throw new ServiceException(AppErrorConstant.GOODS_DOWN);
+ }
+ // 设置订单商品信息
appSureOrderGoodsVo.setGoodsId(goodsId);
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());
- buyNum = appBuyGoodsDto.getBuyNum();
appSureOrderGoodsVo.setBuyNum(buyNum);
goodsPrice = goods.getSalesPrice();
- //商户定制价格
+ // 获取商户定制价格
AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId());
@@ -150,26 +246,38 @@
buyNumBig = BigDecimal.valueOf(buyNum);
goodsTotalPrice = goodsPrice.multiply(buyNumBig);
goodsRealPrice = goodsTotalPrice;
- if (memberCouponId != null) {
+ // 处理优惠券
+ if (StringUtils.isNotBlank(memberCouponId)) {
appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId);
if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) {
couponType = appMemberCouponVo.getCouponType();
if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
moneyThreshold = appMemberCouponVo.getMoneyThreshold();
- if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
- discountMoney = appMemberCouponVo.getDiscountMoney();
+ discountMoney = appMemberCouponVo.getDiscountMoney();
+ if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney) > 0) {
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
useCoupon = 1;
+ userCouponIdSet.add(memberCouponId);
+ appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
}
} else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
discountPercent = appMemberCouponVo.getDiscountPercent();
- goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2, BigDecimal.ROUND_HALF_UP);
- discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
+ 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();
- goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
- useCoupon = 1;
+ if (goodsTotalPrice.compareTo(discountMoney) > 0) {
+ goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
+ if (goodsRealPrice.compareTo(BigDecimal.ZERO) < 0) {
+ goodsRealPrice = BigDecimal.ZERO;
+ }
+ useCoupon = 1;
+ userCouponIdSet.add(memberCouponId);
+ appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
+ }
}
}
}
@@ -177,35 +285,215 @@
appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
appSureOrderGoodsVo.setCouponDiscount(discountMoney);
appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
+ // 获取商品订金
goodsDeposit = goods.getSubscription();
- if (goodsDeposit == null) {
- goodsDeposit = new BigDecimal("0.00");
+ if (goods.getSubscriptionFlag()==1 && goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
+ goodsDeposit = goodsDeposit.multiply(buyNumBig);
+ } else {
+ if (haveDeposit) {
+ goodsDeposit = goodsRealPrice;
+ } else {
+ goodsDeposit = new BigDecimal("0.00");
+ }
}
appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
+ // 计算订单总金额
orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
couponDiscount = couponDiscount.add(discountMoney);
orderPayDeposit = orderPayDeposit.add(goodsDeposit);
orderPayMoney = orderPayMoney.add(goodsRealPrice);
- //商品关联优惠券
- appGoodsMemberCouponVoList = new ArrayList<>();
- if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
- for (AppMemberCouponVo entity : appMemberCouponVoList) {
- if (StringUtils.isBlank(entity.getRelGoodsIds())) {
- appGoodsMemberCouponVoList.add(entity);
- } else if (entity.getRelGoodsIds().contains(goodsId)) {
- appGoodsMemberCouponVoList.add(entity);
- }
- }
- appSureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
- }
appSureOrderGoodsVoList.add(appSureOrderGoodsVo);
}
+ //处理优惠券列表
+ if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
+ for (AppMemberCouponVo entity : appMemberCouponVoList) {
+ if (userCouponIdSet != null && userCouponIdSet.contains(entity.getMemberCouponId())) {
+ entity.setUseFlag(1);
+ } else {
+ entity.setUseFlag(0);
+ }
+
+
+ }
+ // 过滤商品优惠券列表
+ List<AppMemberCouponVo> appGoodsMemberCouponVoList;
+ 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) {
+ 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) {
+ appGoodsMemberCouponVoList.add(entity);
+ /*if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
+ appGoodsMemberCouponVoList.add(entity);
+ }*/
+ }
+
+ }
+ }
+ sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
+ }
+ }
+ /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
+ // 获取商品关联优惠券
+ appGoodsMemberCouponVoList = new ArrayList<>();
+ for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList){
+ for (AppMemberCouponVo entity : appMemberCouponVoList) {
+ if (StringUtils.isBlank(entity.getRelGoodsIds())) {
+ if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) {
+ moneyThreshold = entity.getMoneyThreshold();
+ if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) {
+ if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }else{
+ if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }
+ }
+ }
+ }else{
+ if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }else{
+ if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }
+ }
+ }
+ } else if (entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) {
+ if (entity.getCouponType() == 1 && entity.getMoneyThreshold() != null && entity.getDiscountMoney() != null) {
+ moneyThreshold = entity.getMoneyThreshold();
+ if (sureOrderGoodsVo.getGoodsTotalPrice().compareTo(moneyThreshold) >= 0) {
+ if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }else{
+ if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }
+ }
+ }
+ }else{
+ if(userCouponIdSet==null||!userCouponIdSet.contains(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }else{
+ if(sureOrderGoodsVo.getMemberCouponId()!=null&&sureOrderGoodsVo.getMemberCouponId().equals(entity.getMemberCouponId())){
+ appGoodsMemberCouponVoList.add(entity);
+ }
+ }
+ }
+ }
+ }
+ sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
+ }
+ }*/
+ // 设置订单相关金额
appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney);
appSureOrderVo.setCouponDiscount(couponDiscount);
appSureOrderVo.setOrderPayDeposit(orderPayDeposit);
appSureOrderVo.setOrderPayMoney(orderPayMoney);
+ // 设置订单商品列表
appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList);
return appSureOrderVo;
+ }
+
+ /**
+ * @param appPanicBuyDto
+ * @return AppSureOrderVo
+ * @description 抢购商品
+ * @author jqs
+ * @date 2023/7/6 11:45
+ */
+ @Override
+ public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) {
+ Long userId = appPanicBuyDto.getUserId();
+ AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo();
+ String activityId = appPanicBuyDto.getActivityId();
+ String goodsId = appPanicBuyDto.getGoodsId();
+ Integer buyNum = appPanicBuyDto.getBuyNum();
+ BigDecimal buyNumBig;
+ BigDecimal goodsPrice;
+ BigDecimal goodsTotalPrice;
+ BigDecimal goodsRealPrice;
+ BigDecimal goodsDeposit;
+ BigDecimal goodsActivityPrice;
+ GoodsFile goodsFile;
+ BigDecimal orderGoodsMoney = new BigDecimal("0.00");
+ BigDecimal orderPayDeposit = new BigDecimal("0.00");
+ BigDecimal orderPayMoney = new BigDecimal("0.00");
+ ActivityGoodsGetDto activityGoodsGetDto = new ActivityGoodsGetDto();
+ activityGoodsGetDto.setActivityId(activityId);
+ activityGoodsGetDto.setGoodsId(goodsId);
+ activityGoodsGetDto.setUserId(userId);
+ ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData();
+ if (activityGoodsGetVo.getActivityStatus() == 0) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START);
+ }
+ if (activityGoodsGetVo.getActivityStatus() == 2) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_END);
+ }
+ 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) {
+ 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.setBuyNum(buyNum);
+ goodsPrice = goods.getSalesPrice();
+ //商户定制价格
+ AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
+ appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
+ appShopGoodsGetDto.setShopId(appPanicBuyDto.getShopId());
+ ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
+ if (shopGoods != null) {
+ goodsPrice = shopGoods.getSalesPrice();
+ }
+ appPanicBuyVo.setGoodsPrice(goodsPrice);
+ buyNumBig = BigDecimal.valueOf(buyNum);
+ goodsActivityPrice = activityGoodsGetVo.getActivityPrice();
+ goodsTotalPrice = goodsActivityPrice.multiply(buyNumBig);
+ goodsRealPrice = goodsTotalPrice;
+ appPanicBuyVo.setActivityPrice(goodsActivityPrice);
+ appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice);
+ appPanicBuyVo.setGoodsRealPrice(goodsRealPrice);
+ goodsDeposit = activityGoodsGetVo.getActivitySubscription();
+ if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
+ goodsDeposit = new BigDecimal("0.00");
+ } else {
+ goodsDeposit = goodsDeposit.multiply(buyNumBig);
+ }
+ appPanicBuyVo.setGoodsDeposit(goodsDeposit);
+ orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
+ orderPayDeposit = orderPayDeposit.add(goodsDeposit);
+ orderPayMoney = orderPayMoney.add(goodsRealPrice);
+ appPanicBuyVo.setOrderGoodsMoney(orderGoodsMoney);
+ appPanicBuyVo.setOrderPayDeposit(orderPayDeposit);
+ appPanicBuyVo.setOrderPayMoney(orderPayMoney);
+ return appPanicBuyVo;
}
/**
@@ -215,23 +503,49 @@
* @return
*/
@Override
+ @Transactional
public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
+ // 获取用户ID
Long userId = appPlaceOrderDto.getUserId();
+ // 创建下单视图对象
AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
+ // 创建商品列表
List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>();
AppSureOrderGoodsVo appSureOrderGoodsVo;
+ // 获取购买的商品列表
List<AppBuyGoodsDto> appBuyGoodsDtoList = appPlaceOrderDto.getAppBuyGoodsDtoList();
+ StringJoiner goodsIdSJ = new StringJoiner(",");
+ for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
+ goodsIdSJ.add(appBuyGoodsDto.getGoodsId());
+ }
+ //获取商品列表
+ List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIdSJ.toString()).getData();
+ 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) {
+ haveDeposit = true;
+ }
+ }
+ // 初始化变量
String goodsId;
Integer buyNum;
BigDecimal buyNumBig;
Integer serviceNum;
Integer goodsNum = 0;
String memberCouponId;
- Goods goods;
+ Goods goods = null;
+ GoodsFile goodsFile;
BigDecimal goodsPrice;
BigDecimal goodsTotalPrice;
BigDecimal goodsRealPrice;
- List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
+ MerBaseDto merBaseDto = new MerBaseDto();
+ merBaseDto.setUserId(userId);
+ merBaseDto.setShopId(appPlaceOrderDto.getShopId());
+ // 获取用户优惠券列表
+ List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
+ // 将用户优惠券列表转换为Map,方便后续查找
Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
AppMemberCouponVo appMemberCouponVo;
Integer couponType;
@@ -239,51 +553,68 @@
BigDecimal discountMoney = new BigDecimal("0.00");
BigDecimal discountPercent;
BigDecimal goodsDeposit;
- GoodsFile goodsFile;
Integer useCoupon;
BigDecimal orderGoodsMoney = new BigDecimal("0.00");
BigDecimal couponDiscount = new BigDecimal("0.00");
BigDecimal orderPayDeposit = new BigDecimal("0.00");
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();
useCoupon = 0;
+ // 获取商品ID和优惠券ID
goodsId = appBuyGoodsDto.getGoodsId();
memberCouponId = appBuyGoodsDto.getMemberCouponId();
- goods = remoteGoodsService.getGoods(goodsId).getData();
+ // 获取商品信息
+ goods = goodsMap.get(goodsId);
+ goodsNameList.add(goods.getGoodsName());
+ // 设置商品信息
appSureOrderGoodsVo.setGoodsId(goodsId);
appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
- //商品图片
+ // 获取商品图片
goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
+ // 获取购买数量
buyNum = appBuyGoodsDto.getBuyNum();
appSureOrderGoodsVo.setBuyNum(buyNum);
+ // 获取商品价格和服务数量
goodsPrice = goods.getSalesPrice();
serviceNum = goods.getServiceNum();
- //商户定制价格
+ // 获取商户定制价格
AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
appShopGoodsGetDto.setShopId(appPlaceOrderDto.getShopId());
ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
+ // 如果商户定制价格存在,则使用商户定制价格和服务数量
if (shopGoods != null) {
goodsPrice = shopGoods.getSalesPrice();
serviceNum = shopGoods.getServiceNum();
}
appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
+ // 计算商品总价
buyNumBig = BigDecimal.valueOf(buyNum);
goodsTotalPrice = goodsPrice.multiply(buyNumBig);
goodsRealPrice = goodsTotalPrice;
+ // 如果使用了优惠券,计算优惠后的价格
if (memberCouponId != null) {
appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId);
+ // 如果优惠券适用于该商品
if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) {
couponType = appMemberCouponVo.getCouponType();
+ // 根据优惠券类型计算优惠后的价格
if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
moneyThreshold = appMemberCouponVo.getMoneyThreshold();
if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
@@ -293,31 +624,44 @@
}
} 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.setUseCoupon(useCoupon);
appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
appSureOrderGoodsVo.setCouponDiscount(discountMoney);
appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
+ // 获取商品押金
goodsDeposit = goods.getSubscription();
- if (goodsDeposit == null) {
- goodsDeposit = new BigDecimal("0.00");
+ if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
+ goodsDeposit = goodsDeposit.multiply(buyNumBig);
+ } else {
+ if (haveDeposit) {
+ goodsDeposit = goodsRealPrice;
+ } else {
+ goodsDeposit = new BigDecimal("0.00");
+ }
}
appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
+ // 计算商品总数量、商品总价、优惠总金额、支付押金、支付金额
goodsNum = goodsNum + buyNum;
orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
couponDiscount = couponDiscount.add(discountMoney);
orderPayDeposit = orderPayDeposit.add(goodsDeposit);
orderPayMoney = orderPayMoney.add(goodsRealPrice);
- //创建OrderGoods
+ // 创建订单商品
orderGoods = new OrderGoods();
orderGoodsId = IdUtils.simpleUUID();
orderGoods.setOrderGoodsId(orderGoodsId);
@@ -329,17 +673,24 @@
orderGoods.setCouponId(memberCouponId.toString());
}
orderGoods.setGoodsPrice(goodsPrice);
+ orderGoods.setGoodsDeposit(goodsDeposit);
orderGoods.setGoodsTotalMoney(orderGoodsMoney);
orderGoods.setGoodsReceivableMoney(goodsRealPrice);
orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
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);
- //清空购物车
+ // 清空购物车
AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto();
appShoppingCartDelDto.setGoodsId(goodsId);
appShoppingCartDelDto.setUserId(userId);
remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto);
+ // 记录商品类型
if (goods.getGoodsType() == 1) {
goodsTypeSet.add("周期");
} else if (goods.getGoodsType() == 2) {
@@ -350,10 +701,10 @@
goodsTypeSet.add("单品");
}
}
+ // 创建订单
Order order = new Order();
order.setOrderId(orderId);
order.setDelFlag(0);
- //为对接支付 直接付款成功
order.setOrderStatus(1);
order.setOrderNo(orderNo);
order.setOrderFrom(1);
@@ -364,26 +715,34 @@
order.setDiscountMoney(couponDiscount);
order.setReceivableMoney(orderPayMoney);
order.setReceivableDeposit(orderPayDeposit);
- order.setChangeReceivableMoney(orderPayMoney);
- order.setPayType(appPlaceOrderDto.getPayType());
- if (order.getPayType() == 1) {
+ 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 (order.getPayType() == 2) {
+ } else if (appPlaceOrderDto.getPayType() == 2) {
order.setPayMoney(orderPayDeposit);
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);
- //更新用户商品类型
+ // 更新用户商品类型
if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
appMemberGoodsTypeDto.setUserId(userId);
@@ -393,11 +752,452 @@
appPlaceOrderVo.setOrderId(orderId);
appPlaceOrderVo.setOrderNo(orderNo);
- //调用支付
+ String goodsName = "";
+ if (null != goodsNameList) {
+ goodsName = String.join(",", 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())) {
+ remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
+ }
+ //生成自动取消订单延时任务
+ 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;
}
+
+ /**
+ * 小程序支付下单API
+ * @param appPlaceOrderVo
+ * @param userId
+ * @param shopId
+ * @param goodsName
+ * @param outTradeNo
+ * @param orderId
+ * @param payMoney
+ * @param openid
+ * @param payerClientIp
+ * @param goodsNameList
+ */
+ public 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);
+
+ // 支付者
+ 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());
+ }
+ }
+
+
+ /**
+ * @param appPlaceActivityDto
+ * @return AppPlaceOrderVo
+ * @description 创建活动订单
+ * @author jqs
+ * @date 2023/7/6 17:59
+ */
+ @Override
+ @Transactional
+ public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
+ Long userId = appPlaceActivityDto.getUserId();
+ // 创建订单对象
+ AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
+ // 定义商品订单对象
+ AppSureOrderGoodsVo appSureOrderGoodsVo;
+ // 获取活动ID,商品ID,购买数量
+ String activityId = appPlaceActivityDto.getActivityId();
+ String goodsId = appPlaceActivityDto.getGoodsId();
+ Integer buyNum = appPlaceActivityDto.getBuyNum();
+ //redis库存控制极简版
+ String goodsLock = "goods_lock_" + activityId + "_" + goodsId;
+ RLock redissonLock = redissonClient.getLock(goodsLock);
+ try {
+ redissonLock.lock(30, TimeUnit.SECONDS);
+ 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);
+ }
+ } finally {
+ redissonLock.unlock();
+ }
+ // 定义购买数量,服务数量,商品数量
+ BigDecimal buyNumBig;
+ Integer serviceNum;
+ Integer goodsNum = 0;
+ // 定义商品,商品文件,商品价格,商品总价,商品实际价格,折扣金额,折扣百分比,商品押金,使用优惠券,订单商品金额,优惠券折扣,订单支付押金,订单支付金额
+ Goods goods;
+ GoodsFile goodsFile;
+ BigDecimal goodsPrice;
+ BigDecimal goodsTotalPrice;
+ BigDecimal goodsRealPrice;
+ BigDecimal discountMoney = new BigDecimal("0.00");
+ BigDecimal discountPercent;
+ BigDecimal goodsDeposit;
+ Integer useCoupon;
+ BigDecimal orderGoodsMoney = new BigDecimal("0.00");
+ BigDecimal couponDiscount = new BigDecimal("0.00");
+ BigDecimal orderPayDeposit = new BigDecimal("0.00");
+ BigDecimal orderPayMoney = new BigDecimal("0.00");
+ // 创建活动商品对象,并设置活动ID,商品ID,用户ID
+ ActivityGoodsGetDto activityGoodsGetDto = new ActivityGoodsGetDto();
+ activityGoodsGetDto.setActivityId(activityId);
+ activityGoodsGetDto.setGoodsId(goodsId);
+ activityGoodsGetDto.setUserId(userId);
+ // 获取用户活动商品
+ ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData();
+ // 检查活动状态
+ if (activityGoodsGetVo.getActivityStatus() == 0) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START);
+ }
+ if (activityGoodsGetVo.getActivityStatus() == 2) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_END);
+ }
+ if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
+ }
+ if (activityGoodsGetVo.getAvailableBuyNum() < buyNum) {
+ throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
+ }
+ // 创建订单ID和订单号
+ String orderId = IdUtils.simpleUUID();
+ String orderNo = CodeFactoryUtil.getShopOrderNo();
+ // 创建订单商品对象和订单商品ID
+ OrderGoods orderGoods;
+ String orderGoodsId;
+ // 创建商品类型集合
+ HashSet<String> goodsTypeSet = new HashSet<>();
+ HashSet<String> goodsNurseSet = new HashSet<>();
+ // 创建商品订单对象,并设置商品ID,商品名称,商品介绍,商品类型
+ appSureOrderGoodsVo = new AppSureOrderGoodsVo();
+ useCoupon = 0;
+ goodsId = appPlaceActivityDto.getGoodsId();
+ goods = remoteGoodsService.getGoods(goodsId).getData();
+ appSureOrderGoodsVo.setGoodsId(goodsId);
+ appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
+ appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
+ appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
+ // 获取商品图片
+ goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
+ appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
+ // 设置购买数量,商品价格,服务数量
+ appSureOrderGoodsVo.setBuyNum(buyNum);
+ goodsPrice = goods.getSalesPrice();
+ serviceNum = goods.getServiceNum();
+ // 获取活动价格
+ goodsPrice = activityGoodsGetVo.getActivityPrice();
+ appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
+ // 计算商品总价,商品实际价格
+ buyNumBig = BigDecimal.valueOf(buyNum);
+ goodsTotalPrice = goodsPrice.multiply(buyNumBig);
+ goodsRealPrice = goodsTotalPrice;
+ // 设置使用优惠券,商品总价,优惠券折扣,商品实际价格
+ appSureOrderGoodsVo.setUseCoupon(useCoupon);
+ appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
+ appSureOrderGoodsVo.setCouponDiscount(discountMoney);
+ appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
+ // 获取商品押金
+ goodsDeposit = activityGoodsGetVo.getActivitySubscription();
+ if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
+ goodsDeposit = new BigDecimal("0.00");
+ } else {
+ goodsDeposit = goodsDeposit.multiply(buyNumBig);
+ }
+ appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
+ // 计算商品数量,订单商品金额,优惠券折扣,订单支付押金,订单支付金额
+ goodsNum = goodsNum + buyNum;
+ orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
+ couponDiscount = couponDiscount.add(discountMoney);
+ orderPayDeposit = orderPayDeposit.add(goodsDeposit);
+ orderPayMoney = orderPayMoney.add(goodsRealPrice);
+ // 创建订单商品,并设置订单商品ID,删除标志,订单ID,商品ID,购买数量,商品价格,商品押金,商品总金额,商品应收金额,周期数量标志,服务数量,商品类型,商品名称,商品图片
+ orderGoods = new OrderGoods();
+ orderGoodsId = IdUtils.simpleUUID();
+ orderGoods.setOrderGoodsId(orderGoodsId);
+ orderGoods.setDelFlag(0);
+ orderGoods.setOrderId(orderId);
+ orderGoods.setGoodsId(goodsId);
+ orderGoods.setBuyNum(buyNum);
+ orderGoods.setGoodsPrice(goodsPrice);
+ orderGoods.setGoodsDeposit(goodsDeposit);
+ orderGoods.setGoodsTotalMoney(orderGoodsMoney);
+ orderGoods.setGoodsReceivableMoney(goodsRealPrice);
+ 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);
+ // 清空购物车
+ AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto();
+ appShoppingCartDelDto.setGoodsId(goodsId);
+ appShoppingCartDelDto.setUserId(userId);
+ remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto);
+ // 根据商品类型添加到商品类型集合中
+ if (goods.getGoodsType() == 1) {
+ goodsTypeSet.add("周期");
+ } else if (goods.getGoodsType() == 2) {
+ goodsTypeSet.add("服务");
+ } else if (goods.getGoodsType() == 3) {
+ goodsTypeSet.add("体验");
+ } else if (goods.getGoodsType() == 4) {
+ goodsTypeSet.add("单品");
+ }
+ String goodsNurse = goods.getGoodsNurses();
+ if (StringUtils.isNotBlank(goodsNurse)) {
+ String[] goodsNurseArr = goodsNurse.split(",");
+ for (String str : goodsNurseArr) {
+ goodsNurseSet.add(str);
+ }
+ }
+ // 创建订单,并设置订单ID,删除标志,订单状态,订单号,订单来源,店铺ID,用户ID,订单金额,优惠券金额,折扣金额,应收金额,应收押金,变动应收金额,支付类型
+ Order order = new Order();
+ order.setOrderId(orderId);
+ order.setDelFlag(0);
+ order.setOrderStatus(1);
+ order.setOrderNo(orderNo);
+ order.setOrderFrom(2);
+ order.setShopId(appPlaceActivityDto.getShopId());
+ order.setUserId(userId);
+ order.setOrderMoney(orderGoodsMoney);
+ order.setCouponMoney(couponDiscount);
+ order.setDiscountMoney(couponDiscount);
+ order.setReceivableMoney(orderPayMoney);
+ order.setReceivableDeposit(orderPayDeposit);
+ order.setActivityId(activityId);
+ order.setActivityName(activityGoodsGetVo.getActivityName());
+ order.setOfflinePayMoney(BigDecimal.ZERO);
+ // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
+ if (appPlaceActivityDto.getPayType() == 1) {
+ order.setPayMoney(orderPayMoney);
+ order.setOnlinePayMoney(orderPayMoney);
+ appPlaceOrderVo.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.setPayMoney(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) {
+ AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
+ appMemberGoodsTypeDto.setUserId(userId);
+ appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
+ appMemberGoodsTypeDto.setGoodsNurseSet(goodsNurseSet);
+ remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
+ }
+ // 设置订单ID和订单号
+ appPlaceOrderVo.setOrderId(orderId);
+ appPlaceOrderVo.setOrderNo(orderNo);
+ //改变活动库存
+ AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
+ agStockChangeDto.setActivityId(activityId);
+ agStockChangeDto.setGoodsId(goodsId);
+ agStockChangeDto.setChangeType(2);
+ agStockChangeDto.setChangeNum(buyNum);
+ agStockChangeDto.setShopId(order.getShopId());
+ agStockChangeDto.setUserId(order.getUserId());
+ remoteActivityService.changeActivityStock(agStockChangeDto);
+ // 调用支付
+ /*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();
+ // TODO 获取openID
+ payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
+
+ request.setPayer(payer);*/
+
+ //设置订单允许分账 秒杀活动才允许分账
+ /*if(order.getOrderFrom()==2){
+ SettleInfo settleInfo=new SettleInfo();
+ settleInfo.setProfitSharing(true);
+ request.setSettleInfo(settleInfo);
+ }*/
+
+
+ //返回前端唤醒支付结果信息
+ /*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());
+
+*/
+ 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);
+ activityRecord.setActivityId(activityId);
+ activityRecord.setUserId(userId);
+ activityRecord.setOrderTime(order.getCreateTime());
+ activityRecord.setOrderMoney(order.getOrderMoney());
+ activityRecord.setOrderId(orderId);
+ activityRecord.setCreateTime(new Date());
+ activityRecord.setBuyNum(orderGoods.getBuyNum());
+ 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;
+ }
+
/**
* 分页获取用户订单
@@ -422,6 +1222,10 @@
Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
shopMap.put(shopIdLong, shopTemp);
});
+ Integer delayTime = 30;
+ if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
+ delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
+ }
for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
shop = shopMap.get(appUserOrderPageVo.getShopId());
appUserOrderPageVo.setShopName(shop.getShopName());
@@ -432,6 +1236,7 @@
appUserOrderPageVo.setSameShop(0);
}
appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
+ appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime));
}
}
return appUserOrderPageVoList;
@@ -456,6 +1261,8 @@
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.setShopId(order.getShopId());
@@ -468,6 +1275,12 @@
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;
}
@@ -479,12 +1292,17 @@
@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) {
+ // 2.待核销 -> 订单退款
+ this.refundOrder(orderId);
+ } else {
throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
}
- order.setOrderStatus(0);
- order.setCancelTime(new Date());
- this.saveOrUpdate(order);
}
/**
@@ -516,9 +1334,15 @@
@Override
public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo) {
Long shopId = merHomeShopTotalVo.getShopId();
+ //获取今日到店
Integer todayShop = userServiceRecordService.countShopServicePerson(shopId);
- merHomeShopTotalVo.setTodayShop(todayShop);
+ //获取待处理订单和营业额
merHomeShopTotalVo = orderMapper.getMerHomeShopTotalVo(shopId);
+ //获取服务统计
+ MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId);
+ merHomeShopTotalVo.setTodayShop(todayShop);
+ merHomeShopTotalVo.setCycleSurp(serviceTotalVo.getCycleSurp());
+ merHomeShopTotalVo.setExplorationSurp(serviceTotalVo.getExplorationSurp());
return merHomeShopTotalVo;
}
@@ -529,15 +1353,18 @@
* @return
*/
@Override
- public MerVerifyOrderVo verifyOrder(String orderId,Long shopId) {
+ 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){
+ if (order.getOrderStatus() != 2) {
throw new ServiceException(AppErrorConstant.VERIFY_USED);
}
- if(!order.getShopId().equals(shopId)){
+ if (!order.getShopId().equals(shopId)) {
throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
}
// 根据订单ID获取订单商品列表
@@ -550,17 +1377,34 @@
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获取用户信息
- SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
- merVerifyOrderVo.setUserName(sysUser.getNickName());
- merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
+ Member member = remoteMemberService.getMember(order.getUserId()).getData();
+ merVerifyOrderVo.setUserId(order.getUserId());
+ merVerifyOrderVo.setUserName(member.getRealName());
+ merVerifyOrderVo.setUserMobile(member.getMobile());
merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
// 返回结果
return merVerifyOrderVo;
@@ -573,6 +1417,7 @@
* @return
*/
@Override
+ @Transactional
public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto) {
String orderId = merVerifyOrderDto.getOrderId();
BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
@@ -580,8 +1425,13 @@
Date nowTime = new Date();
//更新订单信息
Order order = this.getById(orderId);
- if(order.getOrderStatus()!=2){
+ if (order.getOrderStatus() != 2) {
throw new ServiceException(AppErrorConstant.VERIFY_USED);
+ }
+
+ ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData();
+ if (!shopRelUserVo.getShopId().equals(order.getShopId())) {
+ throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
}
order.setOrderStatus(3);
order.setUseTime(nowTime);
@@ -589,8 +1439,12 @@
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);
@@ -605,65 +1459,63 @@
ConsumerGoods consumerGoods;
String consumerGoodsId;
Goods goods;
- Integer serviceCount = 0;
- Integer cycleService = 0;
- Integer cyclePerson = 0;
- Integer serviceService = 0;
- Integer servicePerson = 0;
- Integer experienceService = 0;
- Integer experiencePerson = 0;
- MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = consumerGoodsService.getMemberConsumerGoodsTotalVo(order.getUserId(), order.getShopId());
+ 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);
- consumerGoodsService.save(consumerGoods);
- //处理商品服务次数
- if (consumerGoods.getCycleNumFlag() == 1) {
- switch (goods.getGoodsType()) {
- case 1:
- cycleService = cycleService + appUserOrderGoodsPageVo.getServiceNum();
- break;
- case 2:
- serviceService = serviceService + appUserOrderGoodsPageVo.getServiceNum();
- break;
- case 3:
- experienceService = experienceService + appUserOrderGoodsPageVo.getServiceNum();
- break;
- default:
- break;
+ 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);
}
}
}
- //判断是否加人
- if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
- cyclePerson = 1;
- }
- if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
- servicePerson = 1;
- }
- if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
- experiencePerson = 1;
- }
- serviceCount = cycleService + serviceService + experienceService;
+ consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
//生成返回
MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
merVerifyOrderVo.setOrderId(orderId);
@@ -673,35 +1525,130 @@
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());
- SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
- merVerifyOrderVo.setUserName(sysUser.getNickName());
- merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
- //更新商户和会员服务统计
- MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
- memberTotalChangeDto.setUserId(order.getUserId());
- memberTotalChangeDto.setTypeService(1);
- memberTotalChangeDto.setServiceCount(serviceCount);
- remoteMemberService.changeMemberTotal(memberTotalChangeDto);
- ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
- shopTotalChangeDto.setShopId(order.getShopId());
- shopTotalChangeDto.setTypeCycleService(1);
- shopTotalChangeDto.setCycleService(cycleService);
- shopTotalChangeDto.setCyclePerson(cyclePerson);
- shopTotalChangeDto.setTypeServiceService(1);
- shopTotalChangeDto.setServiceService(serviceService);
- shopTotalChangeDto.setServicePerson(servicePerson);
- shopTotalChangeDto.setTypeExperienceService(1);
- shopTotalChangeDto.setExperienceService(experienceService);
- shopTotalChangeDto.setExperiencePerson(experiencePerson);
- remoteShopService.changeShopTotal(shopTotalChangeDto);
+ 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());
+ // TODO 活动才分账
+ //if (order.getOrderFrom() == 2) {
+ // 活动才分账
+ submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
+ //}
+
+ //创建支付记录
+ 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);
+ }
+
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;
+ }
+
+ 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);
+ e.printStackTrace();
+ }
+
+ // 保存分账信息
+ paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
}
/**
@@ -712,35 +1659,73 @@
* @date 2023/6/28 11:26
*/
@Override
+ @Transactional
public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
+ MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
+ ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData();
+ 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.getNickName());
+ merVerifyCouponVo.setUserName(member.getRealName());
merVerifyCouponVo.setUserMobile(member.getMobile());
merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
+ 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());
+ if (goods.getGoodsType() == 1) {
+ merCouponGoods.setGoodsType("周期");
+ } else if (goods.getGoodsType() == 2) {
+ merCouponGoods.setGoodsType("服务");
+ } else if (goods.getGoodsType() == 3) {
+ merCouponGoods.setGoodsType("体验");
+ } else if (goods.getGoodsType() == 4) {
+ merCouponGoods.setGoodsType("单品");
+ }
// 设置其他属性
return merCouponGoods;
})
.collect(Collectors.toList());
// 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
merVerifyCouponVo.setGoodsList(merCouponGoodsList);
- MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
//生成服务
ConsumerGoods consumerGoods;
String consumerGoodsId;
GoodsFile goodsFile;
+ AppShopGoodsGetDto appShopGoodsGetDto;
+ ShopGoods shopGoods;
+ List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
for (Goods goods : goodsList) {
consumerGoods = new ConsumerGoods();
consumerGoodsId = IdUtils.simpleUUID();
@@ -755,18 +1740,161 @@
consumerGoods.setGoodsName(goods.getGoodsName());
consumerGoods.setCycleNumFlag(goods.getCycleNumFlag());
consumerGoods.setServiceNum(goods.getServiceNum());
+ appShopGoodsGetDto = new AppShopGoodsGetDto();
+ appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
+ appShopGoodsGetDto.setShopId(memberCoupon.getShopId());
+ //获取商户服务次数
+ shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
+ 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.setGoodsPicture(goodsFile.getFileUrl());
consumerGoods.setGoodsNurses(goods.getGoodsNurses());
consumerGoods.setSourceFrom(1);
- consumerGoodsService.save(consumerGoods);
+ 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;
}
+
+
+ /**
+ * @param merVerifyPrizeDto
+ * @return MerVerifyAwardVo
+ * @description 确认核销奖品
+ * @author jqs
+ * @date 2023/7/9 9:54
+ */
+ @Override
+ @Transactional
+ public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) {
+ MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
+ MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
+ if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
+ throw new ServiceException(AppErrorConstant.COUPON_USED);
+ }
+ ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData();
+ 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) {
+ merVerifyAwardVo.setGiftFrom("平台生日卡");
+ } else {
+ merVerifyAwardVo.setGiftFrom("商户生日卡");
+ }
+ merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
+ List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
+ BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
+ switch (memberGiftRecord.getGiftType()) {
+ case 1:
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
+ birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
+ birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
+ birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
+ birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
+ birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
+ birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
+ giftSendDtoList.add(birthdayGiftSendDto);
+ remoteCouponService.sendCouponGift(giftSendDtoList);
+ break;
+ case 2:
+ Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
+ if (goods.getGoodsType() == 1) {
+ merVerifyAwardVo.setGiftRemark("周期");
+ } else if (goods.getGoodsType() == 2) {
+ merVerifyAwardVo.setGiftRemark("服务");
+ } else if (goods.getGoodsType() == 3) {
+ merVerifyAwardVo.setGiftRemark("体验");
+ } else if (goods.getGoodsType() == 4) {
+ merVerifyAwardVo.setGiftRemark("单品");
+ }
+ birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
+ birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
+ birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
+ birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
+ birthdayGiftSendDto.setGoodsId(memberGiftRecord.getGoodsId());
+ birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber());
+ giftSendDtoList.add(birthdayGiftSendDto);
+ consumerGoodsService.sendGoodsGift(giftSendDtoList);
+ break;
+ case 3:
+ merVerifyAwardVo.setGiftName("现金");
+ merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
+ break;
+ case 4:
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
+ break;
+ default:
+ break;
+ }
+ merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
+ 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.setBindingType(5);
+ appMemberBindingDto.setShopId(shop.getShopId());
+ appMemberBindingDto.setShopName(shop.getShopName());
+ appMemberBindingDto.setUserId(memberGiftRecord.getUserId());
+ remoteMemberService.updateMemberBinding(appMemberBindingDto);
+ }
+ merVerifyAwardVo.setPrizeId(merVerifyPrizeDto.getPrizeId());
+ merVerifyAwardVo.setVerifyStatus(2);
+ return merVerifyAwardVo;
+ }
+
/**
* 收银未结清订单列表
@@ -781,8 +1909,10 @@
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);
}
}
@@ -798,11 +1928,23 @@
@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);
}
/**
@@ -814,6 +1956,8 @@
public void createNewOrder(MerNewOrderDto merNewOrderDto) {
Long userId = merNewOrderDto.getBuyUserId();
Date nowTime = new Date();
+ Long shopId = merNewOrderDto.getShopId();
+ Shop shop = remoteShopService.getShop(shopId).getData();
//如果非指定用户判断是否需要通过手机号创建新用户
if (userId == null) {
String name = merNewOrderDto.getName();
@@ -833,7 +1977,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);
@@ -841,6 +1984,10 @@
member.setMobile(mobile);
member.setRealName(name);
member.setNickName(name);
+ member.setBindingFlag(1);
+ member.setBindingType(3);
+ member.setRelationShopId(shopId);
+ member.setRelationShopName(shop.getShopName());
remoteMemberService.createNewMember(member);
}
userId = sysUser.getUserId();
@@ -857,9 +2004,10 @@
BigDecimal goodsPrice;
BigDecimal goodsTotalPrice;
BigDecimal goodsRealPrice;
- Long shopId = merNewOrderDto.getShopId();
- Shop shop = remoteShopService.getShop(shopId).getData();
- List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
+ MerBaseDto merBaseDto = new MerBaseDto();
+ merBaseDto.setUserId(userId);
+ merBaseDto.setShopId(shopId);
+ List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(merBaseDto).getData();
Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
if (null != appMemberCouponVoList) {
appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
@@ -878,14 +2026,22 @@
String orderNo = CodeFactoryUtil.getShopOrderNo();
OrderGoods orderGoods;
String orderGoodsId;
+ GoodsFile goodsFile;
BigDecimal cycleMoney = new BigDecimal("0.00");
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();
goods = remoteGoodsService.getGoods(goodsId).getData();
+ goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
buyNum = appBuyGoodsDto.getBuyNum();
goodsPrice = goods.getSalesPrice();
serviceNum = goods.getServiceNum();
@@ -914,24 +2070,31 @@
}
} 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) {
+ if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
goodsDeposit = new BigDecimal("0.00");
+ } else {
+ goodsDeposit = goodsDeposit.multiply(buyNumBig);
}
goodsNum = goodsNum + buyNum;
orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
couponDiscount = couponDiscount.add(discountMoney);
orderPayDeposit = orderPayDeposit.add(goodsDeposit);
orderPayMoney = orderPayMoney.add(goodsRealPrice);
+
//创建OrderGoods
orderGoods = new OrderGoods();
orderGoodsId = IdUtils.simpleUUID();
@@ -949,8 +2112,68 @@
orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
orderGoods.setServiceNum(serviceNum);
orderGoods.setGoodsType(goods.getGoodsType());
- orderGoodsService.save(orderGoods);
- switch(orderGoods.getGoodsType()){
+ orderGoods.setGoodsTag(goods.getGoodsTags());
+ orderGoods.setGoodsName(goods.getGoodsName());
+ orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
+ orderGoods.setGoodsPicture(goodsFile.getFileUrl());
+ 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());
break;
@@ -980,56 +2203,32 @@
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){
+ //判断实收金额
+ if (merNewOrderDto.getChangeMoney() != null) {
order.setChangeReceivableMoney(merNewOrderDto.getChangeMoney());
- }else{
+ } 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.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);
+ order.setPayType(1);
+ //判断结清
+ 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) {
//绑定商户
@@ -1038,15 +2237,36 @@
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.getOffPayTime());
+ payRecord.setPayType(merNewOrderDto.getPayType());
+ payRecordService.save(payRecord);
}
@@ -1056,6 +2276,22 @@
*/
@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;
@@ -1064,13 +2300,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 {
orderFromDesc = "线下创建";
}
@@ -1078,19 +2318,30 @@
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;
@@ -1102,13 +2353,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);
}
}
@@ -1143,6 +2396,7 @@
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();
@@ -1161,6 +2415,8 @@
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
@@ -1228,7 +2484,9 @@
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);
@@ -1268,7 +2526,7 @@
}
}
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());
@@ -1352,7 +2610,9 @@
}
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());
@@ -1361,7 +2621,7 @@
//处理商品信息
List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList;
String goodsString;
- for(MgtShopOrderPageVo entity : shopOrderPageVoList){
+ for (MgtShopOrderPageVo entity : shopOrderPageVoList) {
mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList();
goodsString = mgtOrderGoodsVoList.stream()
.map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum())
@@ -1449,8 +2709,15 @@
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;
}
@@ -1464,6 +2731,8 @@
@Override
public MgtBulletinBoardVo boardOrderTotal() {
MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal();
+ Integer activityUserTotal = orderMapper.activityUserTotal();
+ mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal);
return mgtBulletinBoardVo;
}
@@ -1588,6 +2857,12 @@
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) {
@@ -1648,6 +2923,8 @@
totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue);
}
+ //参与人数
+
return totalActivityTotalVo;
}
@@ -1691,13 +2968,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;
}
@@ -1886,6 +3181,12 @@
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<>();
@@ -1975,6 +3276,57 @@
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);
+ joinMemberTotalKey[i] = str;
+ value = getMemberMap.get(str);
+ joinMemberTotalValue[i] = (value != null) ? value : 0;
+ }
+ totalActivityTotalVo.setGetMemberTotalKey(getMemberTotalKey);
+ totalActivityTotalVo.setGetMemberTotalValue(getMemberTotalValue);
return totalActivityTotalVo;
}
@@ -2019,7 +3371,10 @@
* @date 2023/6/27 11:10
*/
@Override
- public MerVerifyCouponVo verifyCoupon(String verifyCode,Long shopId) {
+ public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) {
+ if(verifyCode.contains("+")){
+ verifyCode = verifyCode.substring(0, verifyCode.indexOf("+"));
+ }
// 创建MerVerifyCouponVo对象
MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
// 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
@@ -2031,90 +3386,218 @@
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.getNickName());
+ merVerifyCouponVo.setUserName(member.getRealName());
merVerifyCouponVo.setUserMobile(member.getMobile());
merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
+ 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) {
+ merCouponGoods.setGoodsType("服务");
+ } else if (goods.getGoodsType() == 3) {
+ merCouponGoods.setGoodsType("体验");
+ } else if (goods.getGoodsType() == 4) {
+ merCouponGoods.setGoodsType("单品");
+ }
// 设置其他属性
return merCouponGoods;
})
.collect(Collectors.toList());
// 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
merVerifyCouponVo.setGoodsList(merCouponGoodsList);
+ merVerifyCouponVo.setVerifyStatus(1);
+ merVerifyCouponVo.setMemberCouponId(memberCoupon.getId());
return merVerifyCouponVo;
}
/**
- * @description 获取用户未支付金额
- * @author jqs
- * @date 2023/6/29 18:00
- * @param merBaseDto
- * @return BigDecimal
+ * @param verifyCode
+ * @param shopId
+ * @return MerVerifyAwardVo
+ * @description 获取核销奖品
+ * @author jqs
+ * @date 2023/7/8 17:46
*/
@Override
- public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto){
+ public MerVerifyAwardVo verifyPrize(String verifyCode, Long shopId) {
+ MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
+ MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData();
+ 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);
+ }
+
+ merVerifyAwardVo.setUserName(member.getRealName());
+ merVerifyAwardVo.setUserMobile(member.getMobile());
+ if (memberGiftRecord.getGiftFrom() == 1) {
+ merVerifyAwardVo.setGiftFrom("平台生日卡");
+ } else {
+ merVerifyAwardVo.setGiftFrom("商户生日卡");
+ }
+ merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
+ //礼物类型1优惠券2商品3现金4实物
+ switch (memberGiftRecord.getGiftType()) {
+ case 1:
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
+ break;
+ case 2:
+ Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
+ if (goods.getGoodsType() == 1) {
+ merVerifyAwardVo.setGiftRemark("周期");
+ } else if (goods.getGoodsType() == 2) {
+ merVerifyAwardVo.setGiftRemark("服务");
+ } else if (goods.getGoodsType() == 3) {
+ merVerifyAwardVo.setGiftRemark("体验");
+ } else if (goods.getGoodsType() == 4) {
+ merVerifyAwardVo.setGiftRemark("单品");
+ }
+ break;
+ case 3:
+ merVerifyAwardVo.setGiftName("现金");
+ merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
+ break;
+ case 4:
+ merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
+ merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
+ break;
+ default:
+ break;
+ }
+ merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
+ merVerifyAwardVo.setVerifyStatus(1);
+ merVerifyAwardVo.setPrizeId(verifyCode);
+ return merVerifyAwardVo;
+ }
+
+ /**
+ * @param merBaseDto
+ * @return BigDecimal
+ * @description 获取用户未支付金额
+ * @author jqs
+ * @date 2023/6/29 18:00
+ */
+ @Override
+ public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto) {
BigDecimal unpaidMoney = orderMapper.getMemberUnpaidOrder(merBaseDto);
return unpaidMoney;
}
/**
- * @description 商户获取订单统计
- * @author jqs
- * @date 2023/7/3 19:29
* @param merTotalDto
- * @return MerOrderTotalVo
+ * @return MerOrderTotalVo
+ * @description 商户获取订单统计
+ * @author jqs
+ * @date 2023/7/3 19:29
*/
@Override
- public MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto){
- if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+ public MerOrderTotalVo getMerOrderTotal(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.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());
+ orderTotalVo.setExperienceTotal(goodsTypeVo.getExperienceTotal());
+ orderTotalVo.setExperienceMoney(goodsTypeVo.getExperienceMoney());
+ orderTotalVo.setServiceTotal(goodsTypeVo.getServiceTotal());
+ orderTotalVo.setServiceMoney(goodsTypeVo.getServiceMoney());
return orderTotalVo;
}
/**
- * @description
- * @author jqs
- * @date 2023/7/4 9:29
* @param merTotalDto
- * @return MerOrderDistributionTotalVo
+ * @return MerOrderDistributionTotalVo
+ * @description
+ * @author jqs
+ * @date 2023/7/4 9:29
*/
@Override
- public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto){
- if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+ 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;
@@ -2155,8 +3638,21 @@
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();
}
- // 设置订单分布总数对象的属性值
+ orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
+ }else{
orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
@@ -2166,15 +3662,15 @@
}
/**
- * @description 商户获取销售占比统计
- * @author jqs
- * @date 2023/7/4 13:58
* @param merTotalDto
- * @return MerOrderTypeTotalVo
+ * @return MerOrderTypeTotalVo
+ * @description 商户获取销售占比统计
+ * @author jqs
+ * @date 2023/7/4 13:58
*/
@Override
- public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto){
- if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+ public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto) {
+ if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
merTotalDto.setShopIdList(shopIdList);
merTotalDto.setShopId(null);
@@ -2185,28 +3681,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);
@@ -2217,15 +3729,15 @@
/**
- * @description 商户端获取销售排行
- * @author jqs
- * @date 2023/7/4 14:23
* @param merTotalDto
- * @return MerOrderGoodsRankVo
+ * @return MerOrderGoodsRankVo
+ * @description 商户端获取销售排行
+ * @author jqs
+ * @date 2023/7/4 14:23
*/
@Override
- public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto){
- if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+ public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto) {
+ if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
merTotalDto.setShopIdList(shopIdList);
merTotalDto.setShopId(null);
@@ -2234,6 +3746,7 @@
List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto);
if (goodsRankList != null && goodsRankList.size() > 0) {
goodsRankList = bigListRemoveNull(goodsRankList);
+ Collections.reverse(goodsRankList);
orderGoodsRankVo.setGoodsRankList(goodsRankList);
}
return orderGoodsRankVo;
@@ -2241,15 +3754,15 @@
/**
- * @description 商户端获取渠道排行
- * @author jqs
- * @date 2023/7/4 14:51
* @param merTotalDto
- * @return MerOrderFromRankVo
+ * @return MerOrderFromRankVo
+ * @description 商户端获取渠道排行
+ * @author jqs
+ * @date 2023/7/4 14:51
*/
@Override
- public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto){
- if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
+ public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto) {
+ if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
merTotalDto.setShopIdList(shopIdList);
merTotalDto.setShopId(null);
@@ -2259,35 +3772,50 @@
List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto);
if (orderFromList != null && orderFromList.size() > 0) {
orderFromList = bigListRemoveNull(orderFromList);
+ Collections.reverse(orderFromList);
merOrderFromRankVo.setOrderFromRankList(orderFromList);
}
return merOrderFromRankVo;
}
/**
- * @description 商户端订单管理统计
- * @author jqs
- * @date 2023/7/4 16:27
- * @param merBaseDto
- * @return MerTotalOrderVo
+ * @param merOrderPageDto
+ * @return MerTotalOrderVo
+ * @description 商户端订单管理统计
+ * @author jqs
+ * @date 2023/7/31 10:53
*/
@Override
- public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto){
- return orderMapper.totalMerOrder(merBaseDto.getShopId());
+ public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) {
+ MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo();
+ 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/5 20:17
* @param page
* @param mgtShopAllOrderPageDto
- * @return List<MgtShopAllOrderPageVo>
+ * @return List<MgtShopAllOrderPageVo>
+ * @description 平台获取商户订单记录
+ * @author jqs
+ * @date 2023/7/5 20:17
*/
@Override
- public List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto){
+ public List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto) {
List<MgtShopAllOrderPageVo> shopAllOrderPageVoList = orderMapper.pageMgtShopAllOrder(page, mgtShopAllOrderPageDto);
- if(!shopAllOrderPageVoList.isEmpty()){
+ if (!shopAllOrderPageVoList.isEmpty()) {
// 定义变量
HashSet<Long> userIdSet = new HashSet<>();
BigDecimal zeroBig = new BigDecimal("0.00");
@@ -2306,17 +3834,24 @@
.collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
}
// 遍历列表,设置店铺名称、用户名称和未支付金额
+ String userInfo;
+ String mobile;
for (MgtShopAllOrderPageVo mgtShopOrderPageVo : shopAllOrderPageVoList) {
if (userMap != null && !userMap.isEmpty()) {
if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) {
- mgtShopOrderPageVo.setUserInfo(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()+"("+userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile()+")");
+ userInfo = userMap.get(mgtShopOrderPageVo.getUserId()).getNickName();
+ mobile = userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile();
+ if (StringUtils.isNotBlank(mobile)) {
+ userInfo = userInfo + "(" + mobile + ")";
+ }
+ mgtShopOrderPageVo.setUserInfo(userInfo);
}
}
}
//处理商品信息
List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList;
String goodsString;
- for(MgtShopAllOrderPageVo entity : shopAllOrderPageVoList){
+ for (MgtShopAllOrderPageVo entity : shopAllOrderPageVoList) {
mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList();
goodsString = mgtOrderGoodsVoList.stream()
.map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum())
@@ -2326,4 +3861,1023 @@
}
return shopAllOrderPageVoList;
}
+
+ /**
+ * @param orderId
+ * @return void
+ * @description 自动取消订单
+ * @author jqs
+ * @date 2023/7/13 17:15
+ */
+ @Override
+ @Transactional
+ public void autoCancelOrder(String orderId) {
+ //更新订单信息
+ Order order = this.getById(orderId);
+ order.setOrderStatus(0);
+ order.setCancelTime(new Date());
+ this.saveOrUpdate(order);
+ //活动订单回退库存
+ if (order.getOrderFrom() == 2) {
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+ for (OrderGoods orderGoods : orderGoodsList) {
+ //redis库存控制极简版
+ String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
+ RLock redissonLock = redissonClient.getLock(goodsLock);
+ 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 {
+ redissonLock.unlock();
+ }
+ //改变活动库存
+ AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
+ agStockChangeDto.setActivityId(order.getActivityId());
+ agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
+ agStockChangeDto.setChangeType(1);
+ agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
+ agStockChangeDto.setShopId(order.getShopId());
+ agStockChangeDto.setUserId(order.getUserId());
+ remoteActivityService.changeActivityStock(agStockChangeDto);
+ //删除活动记录
+ ActivityRecord activityRecord = new ActivityRecord();
+ activityRecord.setActivityId(order.getActivityId());
+ activityRecord.setGoodsId(orderGoods.getGoodsId());
+ activityRecord.setUserId(order.getUserId());
+ activityRecord.setOrderTime(order.getCreateTime());
+ remoteActivityService.delActivityRecord(activityRecord);
+ }
+ }
+ } else {
+ if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
+ //回退优惠券
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+ StringJoiner memberCouponSJ = new StringJoiner(",");
+ for (OrderGoods orderGoods : orderGoodsList) {
+ memberCouponSJ.add(orderGoods.getCouponId());
+ }
+ if (memberCouponSJ != null) {
+ remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
+
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @param transaction
+ * @return void
+ * @description 订单支付回调
+ * @author jqs
+ * @date 2023/7/13 17:57
+ */
+ @Override
+ @Transactional
+ public void payBack(PartnerTransactionsResult transaction) {
+
+ // 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);
+ // 初始化各类商品的收款金额
+ BigDecimal cycleMoney = new BigDecimal("0.00");
+ BigDecimal experienceMoney = new BigDecimal("0.00");
+ BigDecimal serviceMoney = new BigDecimal("0.00");
+ BigDecimal goodsMoney = new BigDecimal("0.00");
+ // 初始化各类商品的存在状态
+ Boolean haveCycle = false;
+ Boolean haveService = false;
+ Boolean haveExperience = false;
+ Boolean haveGoods = false;
+ // 获取订单中的所有商品
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
+ GoodsTotalChangeDto goodsTotalChangeDto;
+ // 遍历订单中的所有商品,根据商品类型累加收款金额,并标记商品存在状态
+ for (OrderGoods orderGoods : orderGoodsList) {
+ switch (orderGoods.getGoodsType()) {
+ case 1:
+ cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveCycle = true;
+ break;
+ case 2:
+ serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveService = true;
+ break;
+ case 3:
+ experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveExperience = true;
+ break;
+ case 4:
+ goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveGoods = true;
+ break;
+ default:
+ break;
+ }
+ goodsTotalChangeDto = new GoodsTotalChangeDto();
+ goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId());
+ goodsTotalChangeDto.setChangeType(1);
+ goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
+ goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
+ Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
+ if (bugGoodsNum == null || bugGoodsNum < 1) {
+ goodsTotalChangeDto.setPersonNum(1);
+ }
+ goodsTotalChangeDtoList.add(goodsTotalChangeDto);
+ }
+ //更新商品统计
+ remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList);
+ // 更新商户统计信息
+ /*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);*/
+ // 初始化会员统计信息
+ 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()).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());
+ memberTotalChangeDto.setPayTime(new Date());
+ // 根据商品存在状态,设置会员统计信息
+ if (haveCycle) {
+ memberTotalChangeDto.setCycleOrderChange(1);
+ }
+ if (haveService) {
+ memberTotalChangeDto.setServiceOrderChange(1);
+ }
+ if (haveExperience) {
+ memberTotalChangeDto.setExperienceOrderChange(1);
+ }
+ if (haveGoods) {
+ memberTotalChangeDto.setGoodsOrderChange(1);
+ }
+ if(order.getOrderFrom()==2){
+ memberTotalChangeDto.setActivityTime(order.getCreateTime());
+ }
+ // 更新会员统计信息
+ remoteMemberService.changeMemberTotal(memberTotalChangeDto);
+ // 如果订单来源于活动,则更新活动统计信息
+ if (order.getOrderFrom() == 2) {
+ ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto();
+ activityTotalChangeDto.setActivityId(order.getActivityId());
+ activityTotalChangeDto.setChangeType(1);
+ activityTotalChangeDto.setChangeNum(1);
+ activityTotalChangeDto.setMoney(order.getPayMoney());
+ Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
+ if (userActivityNum == 1) {
+ activityTotalChangeDto.setPersonNum(1);
+ } else {
+ activityTotalChangeDto.setPersonNum(0);
+ }
+ activityTotalChangeDto.setUserId(order.getUserId());
+ remoteActivityService.changeActivityTotal(activityTotalChangeDto);
+
+
+ //活动订单进行分账
+ /*ProfitSharingApplyRequest request=new ProfitSharingApplyRequest();
+ request.setAppid(this.appId);
+ request.setSubMchid("");
+ request.setTransactionId(transaction.getTransactionId());
+ profitsSharingService.applyProfitSharing(request);*/
+ }
+ //修改支付记录生成支付记录
+ 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);
+ }
+
+ /**
+ * @param orderId
+ * @return void
+ * @description 订单退款
+ * @author jqs
+ * @date 2023/7/13 18:36
+ */
+ @Override
+ @Transactional
+ public void refundOrder(String orderId) {
+ // 更新订单信息
+ Order order = this.getById(orderId);
+ order.setOrderStatus(0);
+ order.setCancelTime(new Date());
+ this.saveOrUpdate(order);
+ OrderRefund orderRefund = new OrderRefund();
+ String refundId = IdUtils.simpleUUID();
+ orderRefund.setRefundId(refundId);
+ orderRefund.setDelFlag(0);
+ orderRefund.setRefundType(1);
+ orderRefund.setOrderId(order.getOrderId());
+ orderRefund.setUserId(order.getUserId());
+ orderRefund.setShopId(order.getShopId());
+ orderRefund.setRefundMoney(order.getOnlinePayMoney());
+ orderRefund.setOrderMoney(order.getPayMoney());
+ orderRefund.setCreateTime(new Date());
+ // 初始化各类商品的收款金额
+ BigDecimal cycleMoney = new BigDecimal("0.00");
+ BigDecimal experienceMoney = new BigDecimal("0.00");
+ BigDecimal serviceMoney = new BigDecimal("0.00");
+ BigDecimal goodsMoney = new BigDecimal("0.00");
+ // 初始化各类商品的存在状态
+ Boolean haveCycle = false;
+ Boolean haveService = false;
+ Boolean haveExperience = false;
+ Boolean haveGoods = false;
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+ StringJoiner memberCouponSJ = new StringJoiner(",");
+ for (OrderGoods orderGoods : orderGoodsList) {
+ if (order.getOrderFrom() == 2) {
+ //redis库存控制极简版
+ //活动订单回退库存
+ String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
+ RLock redissonLock = redissonClient.getLock(goodsLock);
+ 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 {
+ redissonLock.unlock();
+ }
+ //改变活动库存
+ AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
+ agStockChangeDto.setActivityId(order.getActivityId());
+ agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
+ agStockChangeDto.setChangeType(1);
+ agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
+ agStockChangeDto.setShopId(order.getShopId());
+ agStockChangeDto.setUserId(order.getUserId());
+ remoteActivityService.changeActivityStock(agStockChangeDto);
+ //删除活动记录
+ ActivityRecord activityRecord = new ActivityRecord();
+ activityRecord.setActivityId(order.getActivityId());
+ activityRecord.setGoodsId(orderGoods.getGoodsId());
+ activityRecord.setUserId(order.getUserId());
+ activityRecord.setOrderTime(order.getCreateTime());
+ remoteActivityService.delActivityRecord(activityRecord);
+ } else {
+ memberCouponSJ.add(orderGoods.getCouponId());
+ }
+ switch (orderGoods.getGoodsType()) {
+ case 1:
+ cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveCycle = true;
+ break;
+ case 2:
+ serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveService = true;
+ break;
+ case 3:
+ experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveExperience = true;
+ break;
+ case 4:
+ goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney());
+ haveGoods = true;
+ break;
+ default:
+ break;
+ }
+ }
+ //回退优惠券
+ if (memberCouponSJ != null) {
+ remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
+ }
+ }
+ // 更新商户统计信息
+ /*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);*/
+ // 初始化会员统计信息
+ 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());
+ Integer integral = Integer.valueOf(integralBig.toString());
+ memberTotalChangeDto.setChangeIntegral(integral);
+ memberTotalChangeDto.setTypeIntegral(2);
+ }*/
+ // 设置会员支付金额和支付时间
+ memberTotalChangeDto.setPayMoney(order.getPayMoney().negate());
+ // 根据商品存在状态,设置会员统计信息
+ if (haveCycle) {
+ memberTotalChangeDto.setCycleOrderChange(-1);
+ }
+ if (haveService) {
+ memberTotalChangeDto.setServiceOrderChange(-1);
+ }
+ if (haveExperience) {
+ memberTotalChangeDto.setExperienceOrderChange(-1);
+ }
+ if (haveGoods) {
+ memberTotalChangeDto.setGoodsOrderChange(-1);
+ }
+ // 更新会员统计信息
+ remoteMemberService.changeMemberTotal(memberTotalChangeDto);
+ // 如果订单来源于活动,则更新活动统计信息
+ if (order.getOrderFrom() == 2) {
+ ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto();
+ activityTotalChangeDto.setActivityId(order.getActivityId());
+ activityTotalChangeDto.setChangeType(2);
+ activityTotalChangeDto.setChangeNum(1);
+ activityTotalChangeDto.setRefundNum(1);
+ activityTotalChangeDto.setMoney(order.getPayMoney());
+ Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
+ if (userActivityNum > 0) {
+ activityTotalChangeDto.setPersonNum(1);
+ } else {
+ activityTotalChangeDto.setPersonNum(0);
+ }
+ 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);
+ }
+
+ /**
+ * 申请退款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
+ * @description 员工端活动订单统计
+ * @author jqs
+ * @date 2023/7/17 15:25
+ */
+ @Override
+ 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;
+ }
+
+ /**
+ * @param staffTotalDto
+ * @return StaffActivityTotalVo
+ * @description 员工端活动统计
+ * @author jqs
+ * @date 2023/7/17 15:51
+ */
+ @Override
+ public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) {
+ StaffActivityTotalVo staffActivityTotalVo = new StaffActivityTotalVo();
+ if(staffTotalDto.getActivityFrom()==1){
+ staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
+ }
+ return staffActivityTotalVo;
+ }
+
+ /**
+ * @param staffTotalDto
+ * @return MerOrderDistributionTotalVo
+ * @description 员工端活动统计订单分布
+ * @author jqs
+ * @date 2023/7/17 16: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();
+ // 如果订单年龄用户列表不为空
+ /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
+ // 定义变量
+ Integer ageType;
+ List<Long> userIdList;
+ MerOrderAgeUserVo orderAgeUserVo;
+ MgtMapTotalPlusVo mgtMapTotalPlusVo;
+ String[] orderTotalKey = new String[5];
+ Integer[] orderTotalValue = new Integer[5];
+ BigDecimal[] orderMoneyValue = new BigDecimal[5];
+ // 遍历订单年龄用户列表
+ for (int i = 0; i < orderAgeUserVoList.size(); i++) {
+ orderAgeUserVo = orderAgeUserVoList.get(i);
+ ageType = orderAgeUserVo.getAgeType();
+ userIdList = orderAgeUserVo.getUserIdList();
+ // 根据年龄类型设置订单总数键
+ switch (ageType) {
+ case 1:
+ orderTotalKey[i] = "<20";
+ break;
+ case 2:
+ orderTotalKey[i] = "21-30";
+ break;
+ case 3:
+ orderTotalKey[i] = "31-40";
+ break;
+ case 4:
+ orderTotalKey[i] = "41-50";
+ break;
+ case 5:
+ orderTotalKey[i] = ">50";
+ break;
+ }
+ // 如果用户ID列表不为空
+ if (userIdList != null && !userIdList.isEmpty()) {
+ mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList, staffTotalDto.getShopId(), staffTotalDto.getActivityId());
+ orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
+ orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
+ } else {
+ orderTotalValue[i] = 0;
+ orderMoneyValue[i] = BigDecimal.ZERO;
+ }
+ }
+ // 设置订单分布总数对象的属性值
+ orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
+ orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
+ orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
+ }*/
+ 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;
+ }
+
+
+ /**
+ * @param staffTotalDto
+ * @return MerOrderTypeTotalVo
+ * @description 员工端活动统计销售占比
+ * @author jqs
+ * @date 2023/7/17 17:03
+ */
+ @Override
+ public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto) {
+ MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
+ 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());
+ }
+ 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);
+ }
+ }
+ return orderTypeTotalVo;
+ }
+
+ /**
+ * @param staffTotalDto
+ * @return StaffActivityDateMemberTotalVo
+ * @description 员工端获客人数
+ * @author jqs
+ * @date 2023/7/17 18:42
+ */
+ @Override
+ public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) {
+ // 创建返回对象
+ StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
+ 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);
+ }
+ // 返回结果对象
+ return staffActivityDateMemberTotalVo;
+ }
+
+ /**
+ * @param staffTotalDto
+ * @return StaffActivityDateMemberTotalVo
+ * @description 员工端获客人数
+ * @author jqs
+ * @date 2023/7/17 18:42
+ */
+ @Override
+ public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
+ // 创建返回对象
+ StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
+ 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);
+ }
+ // 返回结果对象
+ return staffActivityDateMemberTotalVo;
+ }
+
+ /**
+ * @param startDate
+ * @param endDate
+ * @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<>();
+ LocalDate start = LocalDate.parse(startDate);
+ LocalDate end = LocalDate.parse(endDate);
+ while (!start.isAfter(end)) {
+ dateList.add(start.format(DateTimeFormatter.ISO_DATE));
+ start = start.plusDays(1);
+ }
+ return dateList;
+ }
+
+ /**
+ * @param
+ * @return void
+ * @description 检查订单状态定时任务
+ * @author jqs
+ * @date 2023/7/25 14:40
+ */
+ @Override
+ public void checkOrderStatus() {
+ Integer delayTime = 30;
+ 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);
+ LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
+ 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) {
+ autoTimeCancelOrder(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) {
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+ for (OrderGoods orderGoods : orderGoodsList) {
+ //redis库存控制极简版
+ String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
+ RLock redissonLock = redissonClient.getLock(goodsLock);
+ 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 {
+ redissonLock.unlock();
+ }
+ //改变活动库存
+ AGStockChangeDto agStockChangeDto = new AGStockChangeDto();
+ agStockChangeDto.setActivityId(order.getActivityId());
+ agStockChangeDto.setGoodsId(orderGoods.getGoodsId());
+ agStockChangeDto.setChangeType(1);
+ agStockChangeDto.setChangeNum(orderGoods.getBuyNum());
+ agStockChangeDto.setShopId(order.getShopId());
+ agStockChangeDto.setUserId(order.getUserId());
+ remoteActivityService.changeActivityStock(agStockChangeDto);
+ //删除活动记录
+ ActivityRecord activityRecord = new ActivityRecord();
+ activityRecord.setActivityId(order.getActivityId());
+ activityRecord.setGoodsId(orderGoods.getGoodsId());
+ activityRecord.setUserId(order.getUserId());
+ activityRecord.setOrderTime(order.getCreateTime());
+ remoteActivityService.delActivityRecord(activityRecord);
+ }
+ }
+ } else {
+ if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
+ //回退优惠券
+ List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
+ if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
+ StringJoiner memberCouponSJ = new StringJoiner(",");
+ for (OrderGoods orderGoods : orderGoodsList) {
+ memberCouponSJ.add(orderGoods.getCouponId());
+ }
+ 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());
+ orderFrom = merOrderPageVo.getOrderFrom();
+ if (orderFrom != null) {
+ if (orderFrom == 1) {
+ orderFromDesc = "商城订单";
+ } else {
+ orderFromDesc = "线下创建";
+ }
+ } else {
+ orderFromDesc = "商城订单";
+ }
+ merOrderPageVo.setOrderFromDesc(orderFromDesc);
+ 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;
+ }
}
--
Gitblit v1.7.1