package com.ruoyi.order.service.impl.order;
|
|
|
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.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.uuid.IdUtils;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.order.domain.dto.*;
|
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.vo.*;
|
import com.ruoyi.order.service.order.ConsumerGoodsService;
|
import com.ruoyi.order.service.order.OrderGoodsService;
|
import com.ruoyi.order.util.CodeFactoryUtil;
|
import com.ruoyi.system.api.domain.dto.*;
|
import com.ruoyi.system.api.service.*;
|
import com.ruoyi.system.api.constant.AppErrorConstant;
|
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.Member;
|
import com.ruoyi.system.api.domain.poji.shop.Shop;
|
import com.ruoyi.system.api.domain.poji.sys.SysUser;
|
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
|
import com.ruoyi.system.api.domain.vo.AppUserCouponVo;
|
import com.ruoyi.order.mapper.order.OrderMapper;
|
import com.ruoyi.order.service.order.OrderService;
|
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 订单 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-04-25
|
*/
|
@Service
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Resource
|
private OrderMapper orderMapper;
|
|
@Resource
|
private RemoteMemberService remoteMemberService;
|
|
@Resource
|
private OrderGoodsService orderGoodsService;
|
|
@Resource
|
private RemoteShopService remoteShopService;
|
|
@Resource
|
private RemoteUserService remoteUserService;
|
|
@Resource
|
private ConsumerGoodsService consumerGoodsService;
|
|
@Resource
|
private RemoteGoodsService remoteGoodsService;
|
|
@Resource
|
private RemoteShoppingCartService remoteShoppingCartService;
|
|
|
/**
|
* @description: buyGoods
|
* @param: appSureOrderDto
|
* @return: AppSureOrderVo
|
* @author jqs34
|
* @date: 2023/5/3 0:07
|
*/
|
@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();
|
String goodsId;
|
Integer buyNum;
|
BigDecimal buyNumBig;
|
Long userCouponId;
|
Goods goods;
|
BigDecimal goodsPrice;
|
BigDecimal goodsTotalPrice;
|
BigDecimal goodsRealPrice;
|
List<AppUserCouponVo> appUserCouponVoList = remoteMemberService.listVoUserCouponByUserId(userId).getData();
|
List<AppUserCouponVo> appGoodsUserCouponVoList;
|
Map<Long,AppUserCouponVo> appUserCouponVoMap = appUserCouponVoList.stream().collect(Collectors.toMap(AppUserCouponVo::getUserCouponId, Function.identity()));
|
AppUserCouponVo appUserCouponVo;
|
Integer couponType;
|
BigDecimal moneyThreshold;
|
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");
|
for(AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList){
|
appSureOrderGoodsVo = new AppSureOrderGoodsVo();
|
useCoupon = 0;
|
goodsId = appBuyGoodsDto.getGoodsId();
|
buyNum = appBuyGoodsDto.getBuyNum();
|
userCouponId = appBuyGoodsDto.getUserCouponId();
|
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());
|
buyNum = appBuyGoodsDto.getBuyNum();
|
appSureOrderGoodsVo.setBuyNum(buyNum);
|
goodsPrice = goods.getSalesPrice();
|
//商户定制价格
|
AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
|
appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
|
appShopGoodsGetDto.setShopId(appSureOrderDto.getShopId());
|
ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
|
if(shopGoods!=null){
|
goodsPrice = shopGoods.getSalesPrice();
|
}
|
appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
|
buyNumBig = BigDecimal.valueOf(buyNum);
|
goodsTotalPrice = goodsPrice.multiply(buyNumBig);
|
goodsRealPrice = goodsTotalPrice;
|
if(userCouponId!=null){
|
appUserCouponVo = appUserCouponVoMap.get(userCouponId);
|
if(StringUtils.isBlank(appUserCouponVo.getRelGoodsIds()) || appUserCouponVo.getRelGoodsIds().contains(goodsId)){
|
couponType = appUserCouponVo.getCouponType();
|
if(couponType == 1 && appUserCouponVo.getMoneyThreshold()!=null && appUserCouponVo.getDiscountMoney()!=null){
|
moneyThreshold = appUserCouponVo.getMoneyThreshold();
|
if(goodsTotalPrice.compareTo(moneyThreshold)>=0){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}else if(couponType == 2 && appUserCouponVo.getDiscountPercent()!=null){
|
discountPercent = appUserCouponVo.getDiscountPercent();
|
goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2,BigDecimal.ROUND_HALF_UP);
|
discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
|
useCoupon = 1;
|
}else if(couponType == 3 && appUserCouponVo.getDiscountMoney()!=null){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}
|
}
|
appSureOrderGoodsVo.setUseCoupon(useCoupon);
|
appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
|
appSureOrderGoodsVo.setCouponDiscount(discountMoney);
|
appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
|
goodsDeposit = goods.getSubscription();
|
if(goodsDeposit == null){
|
goodsDeposit = new BigDecimal("0.00");
|
}
|
appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
|
orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
|
couponDiscount = couponDiscount.add(discountMoney);
|
orderPayDeposit = orderPayDeposit.add(goodsDeposit);
|
orderPayMoney = orderPayMoney.add(goodsRealPrice);
|
//商品关联优惠券
|
appGoodsUserCouponVoList = new ArrayList<>();
|
if(appUserCouponVoList!=null && !appUserCouponVoList.isEmpty()){
|
for(AppUserCouponVo entity : appUserCouponVoList){
|
if(StringUtils.isBlank(entity.getRelGoodsIds())){
|
appGoodsUserCouponVoList.add(entity);
|
}else if(entity.getRelGoodsIds().contains(goodsId)){
|
appGoodsUserCouponVoList.add(entity);
|
}
|
}
|
appSureOrderGoodsVo.setAppUserCouponVoList(appGoodsUserCouponVoList);
|
}
|
appSureOrderGoodsVoList.add(appSureOrderGoodsVo);
|
}
|
appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney);
|
appSureOrderVo.setCouponDiscount(couponDiscount);
|
appSureOrderVo.setOrderPayDeposit(orderPayDeposit);
|
appSureOrderVo.setOrderPayMoney(orderPayMoney);
|
appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList);
|
return appSureOrderVo;
|
}
|
|
/**
|
* 创建订单
|
* @param appPlaceOrderDto
|
* @return
|
*/
|
@Override
|
public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto){
|
Long userId = appPlaceOrderDto.getUserId();
|
AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
|
List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>();
|
AppSureOrderGoodsVo appSureOrderGoodsVo;
|
List<AppBuyGoodsDto> appBuyGoodsDtoList = appPlaceOrderDto.getAppBuyGoodsDtoList();
|
String goodsId;
|
Integer buyNum;
|
BigDecimal buyNumBig;
|
Integer serviceNum;
|
Integer goodsNum = 0;
|
Long userCouponId;
|
Goods goods;
|
BigDecimal goodsPrice;
|
BigDecimal goodsTotalPrice;
|
BigDecimal goodsRealPrice;
|
List<AppUserCouponVo> appUserCouponVoList = remoteMemberService.listVoUserCouponByUserId(userId).getData();
|
Map<Long,AppUserCouponVo> appUserCouponVoMap = appUserCouponVoList.stream().collect(Collectors.toMap(AppUserCouponVo::getUserCouponId, Function.identity()));
|
AppUserCouponVo appUserCouponVo;
|
Integer couponType;
|
BigDecimal moneyThreshold;
|
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");
|
String orderId = IdUtils.simpleUUID();
|
String orderNo = CodeFactoryUtil.getShopOrderNo();
|
OrderGoods orderGoods;
|
String orderGoodsId;
|
HashSet<String> goodsTypeSet = new HashSet<>();
|
for(AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList){
|
appSureOrderGoodsVo = new AppSureOrderGoodsVo();
|
useCoupon = 0;
|
goodsId = appBuyGoodsDto.getGoodsId();
|
userCouponId = appBuyGoodsDto.getUserCouponId();
|
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());
|
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(userCouponId!=null){
|
appUserCouponVo = appUserCouponVoMap.get(userCouponId);
|
if(StringUtils.isBlank(appUserCouponVo.getRelGoodsIds()) || appUserCouponVo.getRelGoodsIds().contains(goodsId)){
|
couponType = appUserCouponVo.getCouponType();
|
if(couponType == 1 && appUserCouponVo.getMoneyThreshold()!=null && appUserCouponVo.getDiscountMoney()!=null){
|
moneyThreshold = appUserCouponVo.getMoneyThreshold();
|
if(goodsTotalPrice.compareTo(moneyThreshold)>=0){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}else if(couponType == 2 && appUserCouponVo.getDiscountPercent()!=null){
|
discountPercent = appUserCouponVo.getDiscountPercent();
|
goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2,BigDecimal.ROUND_HALF_UP);
|
discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
|
useCoupon = 1;
|
}else if(couponType == 3 && appUserCouponVo.getDiscountMoney()!=null){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
useCoupon = 1;
|
}
|
}
|
}
|
appSureOrderGoodsVo.setUseCoupon(useCoupon);
|
appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
|
appSureOrderGoodsVo.setCouponDiscount(discountMoney);
|
appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
|
goodsDeposit = goods.getSubscription();
|
if(goodsDeposit == null){
|
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);
|
orderGoods.setDelFlag(0);
|
orderGoods.setOrderId(orderId);
|
orderGoods.setGoodsId(goodsId);
|
orderGoods.setBuyNum(buyNum);
|
if(userCouponId!=null){
|
orderGoods.setCouponId(userCouponId.toString());
|
}
|
orderGoods.setGoodsPrice(goodsPrice);
|
orderGoods.setGoodsTotalMoney(orderGoodsMoney);
|
orderGoods.setGoodsReceivableMoney(goodsRealPrice);
|
orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
|
orderGoods.setServiceNum(serviceNum);
|
orderGoods.setGoodsType(goods.getGoodsType());
|
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("单品");
|
}
|
}
|
Order order = new Order();
|
order.setOrderId(orderId);
|
order.setDelFlag(0);
|
//为对接支付 直接付款成功
|
order.setOrderStatus(2);
|
order.setOrderNo(orderNo);
|
order.setOrderFrom(1);
|
order.setShopId(appPlaceOrderDto.getShopId());
|
order.setUserId(userId);
|
order.setOrderMoney(orderGoodsMoney);
|
order.setCouponMoney(couponDiscount);
|
order.setDiscountMoney(couponDiscount);
|
order.setReceivableMoney(orderPayMoney);
|
order.setReceivableDeposit(orderPayDeposit);
|
order.setPayType(appPlaceOrderDto.getPayType());
|
if(order.getPayType()==1){
|
order.setPayMoney(orderPayMoney);
|
order.setOnlinePayMoney(orderPayMoney);
|
appPlaceOrderVo.setPayMoney(orderPayMoney);
|
appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
|
order.setCloseFlag(1);
|
}else if(order.getPayType()==2){
|
order.setPayMoney(orderPayDeposit);
|
order.setOnlinePayMoney(orderPayDeposit);
|
appPlaceOrderVo.setPayMoney(orderPayDeposit);
|
appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
|
order.setCloseFlag(0);
|
}
|
order.setOrderRemark(appPlaceOrderDto.getOrderRemark());
|
order.setGoodsNum(goodsNum);
|
order.setCreateTime(new Date());
|
this.save(order);
|
//更新用户商品类型
|
if(goodsTypeSet!=null&&goodsTypeSet.size()>0){
|
AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
|
appMemberGoodsTypeDto.setUserId(userId);
|
appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
|
remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
|
}
|
appPlaceOrderVo.setOrderId(orderId);
|
appPlaceOrderVo.setOrderNo(orderNo);
|
|
//调用支付
|
|
|
return appPlaceOrderVo;
|
}
|
|
/**
|
* 分页获取用户订单
|
* @param page
|
* @param appUserOrderPageDto
|
* @return
|
*/
|
@Override
|
public List<AppUserOrderPageVo> pageUserOrder(Page page, AppUserOrderPageDto appUserOrderPageDto){
|
List<AppUserOrderPageVo> appUserOrderPageVoList = orderMapper.pageUserOrder(page,appUserOrderPageDto);
|
if(appUserOrderPageVoList!=null&&!appUserOrderPageVoList.isEmpty()){
|
Long shopId;
|
Shop shop;
|
HashSet<Long> set=new HashSet<Long>();
|
for(AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList){
|
shopId = appUserOrderPageVo.getShopId();
|
set.add(shopId);
|
}
|
Map<Long, Shop> shopMap = new HashMap<>();
|
set.forEach(shopIdLong -> {
|
Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
|
shopMap.put(shopIdLong, shopTemp);
|
});
|
for(AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList){
|
shop = shopMap.get(appUserOrderPageVo.getShopId());
|
appUserOrderPageVo.setShopName(shop.getShopName());
|
appUserOrderPageVo.setShopServicePhone(shop.getShopServicePhone());
|
if(appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())){
|
appUserOrderPageVo.setSameShop(1);
|
}else{
|
appUserOrderPageVo.setSameShop(0);
|
}
|
appUserOrderPageVo.setVerifyCode("1-"+appUserOrderPageVo.getOrderId());
|
}
|
}
|
return appUserOrderPageVoList;
|
}
|
|
|
/**
|
*
|
* @param appBaseGetDto
|
* @return
|
*/
|
@Override
|
public AppUserOrderGetVo getAppOrderDetail(AppBaseGetDto appBaseGetDto){
|
String orderId = appBaseGetDto.getId();
|
Order order = this.getById(orderId);
|
List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId);
|
AppUserOrderGetVo appUserOrderGetVo = new AppUserOrderGetVo();
|
appUserOrderGetVo.setOrderId(orderId);
|
appUserOrderGetVo.setOrderNo(order.getOrderNo());
|
appUserOrderGetVo.setOrderStatus(order.getOrderStatus());
|
appUserOrderGetVo.setOrderFrom(order.getOrderFrom());
|
appUserOrderGetVo.setOrderGoodsMoney(order.getOrderMoney());
|
appUserOrderGetVo.setCouponDiscount(order.getCouponMoney());
|
appUserOrderGetVo.setReceivableDeposit(order.getReceivableDeposit());
|
appUserOrderGetVo.setReceivableMoney(order.getReceivableMoney());
|
appUserOrderGetVo.setPayMoney(order.getPayMoney());
|
appUserOrderGetVo.setOrderRemark(order.getOrderRemark());
|
appUserOrderGetVo.setShopId(order.getShopId());
|
appUserOrderGetVo.setCreateTime(order.getCreateTime());
|
appUserOrderGetVo.setPayTime(order.getCreateTime());
|
appUserOrderGetVo.setUseTime(order.getUseTime());
|
appUserOrderGetVo.setCancelTime(order.getCancelTime());
|
appUserOrderGetVo.setOrderRemark(order.getOrderRemark());
|
Shop shop = remoteShopService.getShop(order.getShopId()).getData();
|
appUserOrderGetVo.setShopName(shop.getShopName());
|
appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
|
appUserOrderGetVo.setVerifyCode("1-"+orderId);
|
return appUserOrderGetVo;
|
}
|
|
/**
|
* 取消订单
|
* @param orderId
|
*/
|
@Override
|
public void cancelOrder(String orderId){
|
Order order = this.getById(orderId);
|
if(order.getOrderStatus()!=1){
|
throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
|
}
|
order.setOrderStatus(0);
|
order.setCancelTime(new Date());
|
this.saveOrUpdate(order);
|
}
|
|
/**
|
* 获取用户订单统计
|
* @param userId
|
* @return
|
*/
|
@Override
|
public AppOrderTotalVo getAppOrderTotal(Long userId) {
|
LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
|
queryWrapper.eq(Order::getDelFlag, 0).eq(Order::getUserId, userId).eq(Order::getOrderStatus, 1);
|
Integer noPayCount = Integer.valueOf((int) this.count(queryWrapper));
|
queryWrapper = Wrappers.lambdaQuery();
|
queryWrapper.eq(Order::getDelFlag, 0).eq(Order::getUserId, userId).eq(Order::getOrderStatus, 2);
|
Integer noUseCount = Integer.valueOf((int) this.count(queryWrapper));
|
AppOrderTotalVo appOrderTotalVo = new AppOrderTotalVo();
|
appOrderTotalVo.setNoPayCount(noPayCount);
|
appOrderTotalVo.setNoUseCount(noUseCount);
|
return appOrderTotalVo;
|
}
|
|
/**
|
* 获取B端首页统计
|
* @param merHomeShopTotalVo
|
* @return
|
*/
|
@Override
|
public MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo){
|
Long shopId = merHomeShopTotalVo.getShopId();
|
Integer todayShop = 0;
|
Integer unHandleOrder = 0;
|
BigDecimal shopTurnover = new BigDecimal("0.00");
|
Integer cycleSurp = 0;
|
Integer explorationSurp = 0;
|
merHomeShopTotalVo.setTodayShop(todayShop);
|
merHomeShopTotalVo.setUnHandleOrder(unHandleOrder);
|
merHomeShopTotalVo.setShopTurnover(shopTurnover);
|
merHomeShopTotalVo.setCycleSurp(cycleSurp);
|
merHomeShopTotalVo.setExplorationSurp(explorationSurp);
|
return merHomeShopTotalVo;
|
}
|
|
/**
|
* 核销订单
|
* @param orderId
|
* @return
|
*/
|
@Override
|
public MerVerifyOrderVo verifyOrder(String orderId){
|
MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
|
Order order = this.getById(orderId);
|
List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId);
|
merVerifyOrderVo.setOrderId(orderId);
|
merVerifyOrderVo.setOrderNo(order.getOrderNo());
|
merVerifyOrderVo.setOrderStatus(order.getOrderStatus());
|
merVerifyOrderVo.setOrderFrom(order.getOrderFrom());
|
merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
|
merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
|
merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
|
merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney());
|
merVerifyOrderVo.setPayMoney(order.getPayMoney());
|
merVerifyOrderVo.setOrderRemark(order.getOrderRemark());
|
merVerifyOrderVo.setCreateTime(order.getCreateTime());
|
merVerifyOrderVo.setPayTime(order.getPayTime());
|
merVerifyOrderVo.setUseTime(order.getUseTime());
|
merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
|
SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
|
merVerifyOrderVo.setUserName(sysUser.getNickName());
|
merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
|
merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
|
return merVerifyOrderVo;
|
}
|
|
/**
|
* 确认核销订单
|
* @param merVerifyOrderDto
|
* @return
|
*/
|
@Override
|
public MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto){
|
String orderId = merVerifyOrderDto.getOrderId();
|
BigDecimal relReceiveMoney = merVerifyOrderDto.getRelReceiveMoney();
|
BigDecimal relPayMoney = merVerifyOrderDto.getRelPayMoney();
|
Date nowTime = new Date();
|
//更新订单信息
|
Order order = this.getById(orderId);
|
order.setOrderStatus(3);
|
order.setUseTime(nowTime);
|
order.setUseUserId(merVerifyOrderDto.getUserId());
|
order.setOfflinePayMoney(relPayMoney);
|
order.setPayMoney(relReceiveMoney.add(relPayMoney));
|
order.setCloseFlag(1);
|
this.saveOrUpdate(order);
|
//创建服务商品
|
List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId);
|
ConsumerGoods consumerGoods;
|
String consumerGoodsId;
|
for(AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList){
|
consumerGoods = new ConsumerGoods();
|
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);
|
consumerGoodsService.save(consumerGoods);
|
}
|
//生成返回
|
MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
|
merVerifyOrderVo.setOrderId(orderId);
|
merVerifyOrderVo.setOrderNo(order.getOrderNo());
|
merVerifyOrderVo.setOrderStatus(order.getOrderStatus());
|
merVerifyOrderVo.setOrderFrom(order.getOrderFrom());
|
merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney());
|
merVerifyOrderVo.setCouponDiscount(order.getCouponMoney());
|
merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit());
|
merVerifyOrderVo.setReceivableMoney(order.getReceivableMoney());
|
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());
|
return merVerifyOrderVo;
|
}
|
|
/**
|
* 收银未结清订单列表
|
* @param page
|
* @param merMemberNoClearOrderDto
|
* @return
|
*/
|
@Override
|
public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto){
|
List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page,merMemberNoClearOrderDto.getMemberUserId());
|
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);
|
}
|
}
|
}
|
return merMemberNoClearOrderVoList;
|
}
|
|
/**
|
* 结清订单
|
* @param merCloseOrderDto
|
*/
|
@Override
|
public void merCloseOrder(MerCloseOrderDto merCloseOrderDto){
|
Order order = this.getById(merCloseOrderDto.getOrderId());
|
order.setOfflinePayMoney(merCloseOrderDto.getPayMoney());
|
order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney()));
|
order.setCloseFlag(1);
|
this.saveOrUpdate(order);
|
}
|
|
/**
|
* 创建新订单
|
* @param merNewOrderDto
|
*/
|
@Override
|
public void createNewOrder(MerNewOrderDto merNewOrderDto){
|
Long userId = merNewOrderDto.getBuyUserId();
|
if(userId==null){
|
String name = merNewOrderDto.getName();
|
String mobile = merNewOrderDto.getMobile();
|
SysUser sysUser = remoteUserService.getSysUserByMobile(mobile).getData();
|
if(sysUser==null){
|
//创建新用户
|
String memberId = IdUtils.simpleUUID();
|
sysUser = new SysUser();
|
sysUser.setUserName(mobile);
|
sysUser.setUserType("03");
|
sysUser.setNickName(name);
|
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();
|
userId = sysUser.getUserId();
|
}else{
|
userId = sysUser.getUserId();
|
}
|
}
|
//创建订单
|
List<AppBuyGoodsDto> appBuyGoodsDtoList = merNewOrderDto.getAppBuyGoodsDtoList();
|
String goodsId;
|
Integer buyNum;
|
BigDecimal buyNumBig;
|
Integer serviceNum;
|
Integer goodsNum = 0;
|
Long userCouponId;
|
Goods goods;
|
BigDecimal goodsPrice;
|
BigDecimal goodsTotalPrice;
|
BigDecimal goodsRealPrice;
|
List<AppUserCouponVo> appUserCouponVoList = remoteMemberService.listVoUserCouponByUserId(userId).getData();
|
Map<Long,AppUserCouponVo> appUserCouponVoMap = new HashMap<>();
|
if(null != appUserCouponVoList){
|
appUserCouponVoMap = appUserCouponVoList.stream().collect(Collectors.toMap(AppUserCouponVo::getUserCouponId, Function.identity()));
|
}
|
|
AppUserCouponVo appUserCouponVo;
|
Integer couponType;
|
BigDecimal moneyThreshold;
|
BigDecimal discountMoney = new BigDecimal("0.00");
|
BigDecimal discountPercent;
|
BigDecimal goodsDeposit;
|
BigDecimal orderGoodsMoney = new BigDecimal("0.00");
|
BigDecimal couponDiscount = new BigDecimal("0.00");
|
BigDecimal orderPayDeposit = new BigDecimal("0.00");
|
BigDecimal orderPayMoney = new BigDecimal("0.00");
|
String orderId = IdUtils.simpleUUID();
|
String orderNo = CodeFactoryUtil.getShopOrderNo();
|
OrderGoods orderGoods;
|
String orderGoodsId;
|
for(AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList){
|
goodsId = appBuyGoodsDto.getGoodsId();
|
userCouponId = appBuyGoodsDto.getUserCouponId();
|
goods = remoteGoodsService.getGoods(goodsId).getData();
|
buyNum = appBuyGoodsDto.getBuyNum();
|
goodsPrice = goods.getSalesPrice();
|
serviceNum = goods.getServiceNum();
|
//商户定制价格
|
AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
|
appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
|
appShopGoodsGetDto.setShopId(merNewOrderDto.getShopId());
|
ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
|
if(shopGoods!=null){
|
goodsPrice = shopGoods.getSalesPrice();
|
serviceNum = shopGoods.getServiceNum();
|
}
|
buyNumBig = BigDecimal.valueOf(buyNum);
|
goodsTotalPrice = goodsPrice.multiply(buyNumBig);
|
goodsRealPrice = goodsTotalPrice;
|
if(userCouponId!=null){
|
appUserCouponVo = appUserCouponVoMap.get(userCouponId);
|
if(null != appUserCouponVo && (StringUtils.isBlank(appUserCouponVo.getRelGoodsIds()) || appUserCouponVo.getRelGoodsIds().contains(goodsId))){
|
couponType = appUserCouponVo.getCouponType();
|
if(couponType == 1 && appUserCouponVo.getMoneyThreshold()!=null && appUserCouponVo.getDiscountMoney()!=null){
|
moneyThreshold = appUserCouponVo.getMoneyThreshold();
|
if(goodsTotalPrice.compareTo(moneyThreshold)>=0){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
}
|
}else if(couponType == 2 && appUserCouponVo.getDiscountPercent()!=null){
|
discountPercent = appUserCouponVo.getDiscountPercent();
|
goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN).setScale(2,BigDecimal.ROUND_HALF_UP);
|
discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
|
}else if(couponType == 3 && appUserCouponVo.getDiscountMoney()!=null){
|
discountMoney = appUserCouponVo.getDiscountMoney();
|
goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
|
}
|
}
|
}
|
|
goodsDeposit = goods.getSubscription();
|
if(goodsDeposit == null){
|
goodsDeposit = new BigDecimal("0.00");
|
}
|
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);
|
orderGoods.setDelFlag(0);
|
orderGoods.setOrderId(orderId);
|
orderGoods.setGoodsId(goodsId);
|
orderGoods.setBuyNum(buyNum);
|
if(null != userCouponId){
|
orderGoods.setCouponId(userCouponId.toString());
|
}
|
orderGoods.setGoodsPrice(goodsPrice);
|
orderGoods.setGoodsTotalMoney(orderGoodsMoney);
|
orderGoods.setGoodsReceivableMoney(goodsRealPrice);
|
orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
|
orderGoods.setServiceNum(serviceNum);
|
orderGoods.setGoodsType(goods.getGoodsType());
|
orderGoodsService.save(orderGoods);
|
}
|
Order order = new Order();
|
order.setOrderId(orderId);
|
order.setDelFlag(0);
|
order.setOrderStatus(3);
|
order.setOrderNo(orderNo);
|
order.setOrderFrom(3);
|
order.setShopId(merNewOrderDto.getShopId());
|
order.setUserId(userId);
|
order.setOrderMoney(orderGoodsMoney);
|
order.setCouponMoney(couponDiscount);
|
order.setDiscountMoney(couponDiscount);
|
order.setReceivableMoney(orderPayMoney);
|
order.setReceivableDeposit(new BigDecimal("0.00"));
|
order.setPayType(1);
|
if(order.getPayType()==1){
|
order.setPayMoney(orderPayMoney);
|
order.setOnlinePayMoney(orderPayMoney);
|
order.setCloseFlag(1);
|
}else if(order.getPayType()==2){
|
order.setPayMoney(orderPayDeposit);
|
order.setOnlinePayMoney(orderPayDeposit);
|
order.setCloseFlag(0);
|
}
|
order.setOrderRemark(merNewOrderDto.getOrderRemark());
|
order.setGoodsNum(goodsNum);
|
order.setCreateTime(new Date());
|
order.setPayTime(new Date());
|
order.setUseTime(new Date());
|
order.setUseUserId(merNewOrderDto.getUserId());
|
order.setPayMoney(merNewOrderDto.getPayMoney());
|
order.setOnlinePayMoney(new BigDecimal("0.00"));
|
order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
|
order.setCloseFlag(1);
|
this.save(order);
|
//创建服务
|
List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listVoByOrderId(orderId);
|
ConsumerGoods consumerGoods;
|
String consumerGoodsId;
|
for(AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList){
|
consumerGoods = new ConsumerGoods();
|
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(new Date());
|
consumerGoodsService.save(consumerGoods);
|
}
|
Member member = remoteMemberService.getMember(userId).getData();
|
if(member!=null&&member.getBindingFlag()!=1){
|
//绑定商户
|
AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
|
appMemberBindingDto.setShopId(merNewOrderDto.getShopId());
|
appMemberBindingDto.setUserId(userId);
|
appMemberBindingDto.setBindingFlag(1);
|
remoteMemberService.updateMemberBinding(appMemberBindingDto);
|
}
|
}
|
|
|
/**
|
*
|
* @param merOrderPageDto
|
* @return
|
*/
|
@Override
|
public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto){
|
List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto);
|
if(merOrderPageVoList!=null&&!merOrderPageVoList.isEmpty()){
|
Long userId;
|
Member member;
|
Integer orderFrom;
|
String orderFromDesc;
|
BigDecimal zeroBig = new BigDecimal("0.00");
|
for(MerOrderPageVo merOrderPageVo : merOrderPageVoList){
|
userId = merOrderPageVo.getUserId();
|
member = remoteMemberService.getMember(userId).getData();
|
if(member!=null){
|
if(StringUtils.isNotBlank(member.getNickName())){
|
merOrderPageVo.setUserName(member.getNickName());
|
}
|
merOrderPageVo.setUserMobile(member.getMobile());
|
}else{
|
SysUser sysUser = remoteUserService.getSysUser(userId).getData();
|
if(StringUtils.isNotBlank(sysUser.getNickName())){
|
merOrderPageVo.setUserName(sysUser.getNickName());
|
}
|
merOrderPageVo.setUserMobile(sysUser.getPhonenumber());
|
}
|
orderFrom = merOrderPageVo.getOrderFrom();
|
if(orderFrom!=null){
|
if(orderFrom == 1){
|
orderFromDesc = "商城订单";
|
}else{
|
orderFromDesc = "线下创建";
|
}
|
}else{
|
orderFromDesc = "商城订单";
|
}
|
merOrderPageVo.setOrderFromDesc(orderFromDesc);
|
merOrderPageVo.setUnPaidMoney(merOrderPageVo.getReceivableMoney().subtract(merOrderPageVo.getPayMoney()));
|
if(merOrderPageVo.getUnPaidMoney()==null){
|
merOrderPageVo.setUnPaidMoney(zeroBig);
|
}
|
}
|
}
|
return merOrderPageVoList;
|
}
|
|
/**
|
*
|
* @param page
|
* @param merMemberNoClearOrderDto
|
* @return
|
*/
|
@Override
|
public List<MerMemberNoClearOrderVo> pageMerMemberOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto){
|
List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberOrder(page,merMemberNoClearOrderDto.getMemberUserId());
|
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);
|
}
|
}
|
}
|
return merMemberNoClearOrderVoList;
|
}
|
}
|