package com.ruoyi.order.service.impl;
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.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.AuditStatusEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.common.core.enums.CouponUseEnum;
import com.ruoyi.common.core.enums.GroupStatusEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.common.core.enums.OrderTypeEnum;
import com.ruoyi.common.core.enums.PaymentMethodEnum;
import com.ruoyi.common.core.enums.PointStatusEnum;
import com.ruoyi.common.core.enums.RequestTypeEnum;
import com.ruoyi.common.core.enums.ReturnRequestStatusEnum;
import com.ruoyi.common.core.enums.StartStatusEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.CollUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO;
import com.ruoyi.order.controller.management.dto.MgtOrderQuery;
import com.ruoyi.order.controller.management.vo.MgtOrderReturnRequestVO;
import com.ruoyi.order.controller.management.vo.MgtOrderVO;
import com.ruoyi.order.domain.OrderReturnRequest;
import com.ruoyi.order.domain.Paylog;
import com.ruoyi.order.mapper.OrderAuctionBondMapper;
import com.ruoyi.order.mapper.OrderMapper;
import com.ruoyi.order.service.ILogisticsService;
import com.ruoyi.order.service.IOrderReturnRequestService;
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.order.service.IPaylogService;
import com.ruoyi.order.util.OrderUtil;
import com.ruoyi.order.util.SinataUtil;
import com.ruoyi.order.vo.HomeGoodsSkuDTO1;
import com.ruoyi.order.vo.WdOrderVO;
import com.ruoyi.system.api.constants.DelayTaskEnum;
import com.ruoyi.system.api.domain.AuctionSalesroom;
import com.ruoyi.system.api.domain.CouponMember;
import com.ruoyi.system.api.domain.CustomConfig;
import com.ruoyi.system.api.domain.DelayTask;
import com.ruoyi.system.api.domain.GoodsGroupPurchase;
import com.ruoyi.system.api.domain.GoodsGroupPurchaseInfo;
import com.ruoyi.system.api.domain.GoodsSeckill;
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.MemberAddress;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.PromotionWishRecommend;
import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
import com.ruoyi.system.api.domain.dto.LogisticsDTO;
import com.ruoyi.system.api.domain.dto.MemberDTO;
import com.ruoyi.system.api.domain.dto.MemberOrderDTO;
import com.ruoyi.system.api.domain.dto.MemberOrderListDTO;
import com.ruoyi.system.api.domain.dto.MemberPointsDTO;
import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.domain.dto.updMembeOneDTO;
import com.ruoyi.system.api.domain.vo.Express100VO;
import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
import com.ruoyi.system.api.domain.vo.OrderVO;
import com.ruoyi.system.api.feignClient.AuctionClient;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import com.ruoyi.system.api.feignClient.MemberClient;
import com.ruoyi.system.api.feignClient.PromotionClient;
import com.ruoyi.system.api.feignClient.SysUserClient;
import io.seata.spring.annotation.GlobalTransactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.map.HashedMap;
import org.jetbrains.annotations.NotNull;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* 订单表 服务实现类
*
*
* @author mitao
* @since 2024-05-16
*/
@Slf4j
@Service
@SuppressWarnings("unchecked")
public class OrderServiceImpl extends ServiceImpl implements IOrderService {
@Resource
private GoodsSkuClient goodsSkuClient;
@Resource
private MemberClient memberClient;
@Resource
private PromotionClient promotionClient;
@Resource
private OrderAuctionBondMapper orderAuctionBondMapper;
@Resource
private IPaylogService iPaylogService;
@Resource
private PaylogServiceImpl paylogService;
@Resource
private SysUserClient sysUserClient;
@Resource
private IOrderReturnRequestService orderReturnRequestService;
@Resource
private RedissonClient redissonClient;
@Resource
private RedisService redisService;
@Resource
private ILogisticsService logisticsService;
@Resource
private AuctionClient auctionClient;
@Resource
private GoodsSkuClient GoodsSkuClient;
@Override
public void saveOrderOne(OrderDTO OrderDTO) {
Order order=new Order();
if (OrderDTO.getOrderFrom().getCode()==1){
order.setOrderFrom(OrderFromEnum.COMMODITY_ORDER);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("SP"));
order.setIsOrder(1);
}
if (OrderDTO.getOrderFrom().getCode()==2){
order.setOrderFrom(OrderFromEnum.SNAP_ORDERS);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("MS"));
order.setIsOrder(1);
}
if (OrderDTO.getOrderFrom().getCode()==3){
order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("TG"));
order.setIsOrder(2);
}if (OrderDTO.getOrderFrom().getCode()==4){
order.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("PM"));
order.setIsOrder(1);
if (OrderDTO.getAuctionType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS)) {
order.setAuctionSalesroomId(OrderDTO.getAuctionSalesroomId());
}
}
order.setOrderTime(OrderDTO.getOrderTime());
order.setOrderFrom(OrderDTO.getOrderFrom());
order.setAuctionOrderType(OrderDTO.getAuctionType());
order.setGoodsSkuId(OrderDTO.getGoodsSkuId());
order.setMemberId(OrderDTO.getMemberId());
order.setTotalAmount(OrderDTO.getTotalAmount());
order.setOrderStatus(OrderStatusEnum.TO_PLAY);
order.setPoints(OrderDTO.getPoints());
order.setGoodsQuantity(1);
order.setReceiverName(OrderDTO.getReceiverName());
order.setReceiverPhone(OrderDTO.getReceiverphone());
order.setReceiverCity(OrderDTO.getReceiverCity());
order.setReceiverDetailAddress(OrderDTO.getReceiverDetailAddress());
order.setBound(OrderDTO.getBound());
order.setSkuName(OrderDTO.getSkuName());
order.setPrice(OrderDTO.getPrice());
order.setCoverPic(OrderDTO.getCoverPic());
order.setOrderTimeSx(OrderDTO.getOrderTimeSx());
order.setGoodsId(OrderDTO.getGoodsId());
this.save(order);
if (OrderDTO.getOrderFrom().getCode()==4){
if (OrderDTO.getAuctionType().getCode()==1){
LambdaQueryWrapper wrapper= Wrappers.lambdaQuery();
wrapper.eq(OrderAuctionBond::getMemberId,OrderDTO.getMemberId());
wrapper.eq(OrderAuctionBond::getAuctionGoodsId,OrderDTO.getGoodsSkuId());
wrapper.eq(OrderAuctionBond::getBoundStatus,2);
wrapper.eq(OrderAuctionBond::getBondType,1);
OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper);
orderAuctionBond.setOrderId(order.getId());
orderAuctionBondMapper.updateById(orderAuctionBond);
}
if (OrderDTO.getAuctionType().getCode()==2){
LambdaQueryWrapper wrapper= Wrappers.lambdaQuery();
wrapper.eq(OrderAuctionBond::getMemberId,OrderDTO.getMemberId());
wrapper.eq(OrderAuctionBond::getBoundStatus,2);
wrapper.eq(OrderAuctionBond::getAuctionSalesroomId,OrderDTO.getAuctionSalesroomId());
wrapper.eq(OrderAuctionBond::getBondType,2);
OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper);
if (orderAuctionBond!=null){
orderAuctionBond.setOrderId(order.getId());
orderAuctionBondMapper.updateById(orderAuctionBond);
}
}
}
}
/**
* 获取某个商品的已购会员数
*
* @param id 秒杀商品id
* @return 已购会员数
*/
@Override
public Integer getSeckillMembers(Long id) {
return baseMapper.getSeckillMembers(id);
}
/**
* 获取团购商品已购数量
*
* @param id 团购商品id
* @return 团购商品已购数量
*/
@Override
public Integer getGroupPurchasesGoodsNum(Long id) {
List list = this.lambdaQuery().eq(Order::getGoodsSkuId, id)
.in(Order::getOrderStatus, OrderStatusEnum.TO_BE_SHIPPED,
OrderStatusEnum.GOODS_TO_BE_RECEIVED, OrderStatusEnum.FINISHED).list();
return list.stream().map(Order::getGoodsQuantity).reduce(0, Integer::sum);
}
/**
* 根据团购商品id获取团购商品订单
*
* @param id 团购商品id
* @return 订单列表
*/
@Override
public List getOrderByGroupPurchaseId(Long id) {
return baseMapper.getOrderByGroupPurchaseId(id);
}
@Override
public Order getOrderByGroupPurchaseMemberId(HomeGoodsSkuDTO homeGoodsSkuDTO) {
return baseMapper.getOrderByGroupPurchaseMemberId(homeGoodsSkuDTO);
}
@Override
public Order getOrderByGroupPurchaseMemberId1(HomeGoodsSkuDTO homeGoodsSkuDTO) {
return baseMapper.getOrderByGroupPurchaseMemberId1(homeGoodsSkuDTO);
}
@Override
public Order getOrderByGroupPurchaseMemberId2(HomeGoodsSkuDTO homeGoodsSkuDTO) {
return baseMapper.getOrderByGroupPurchaseMemberId2(homeGoodsSkuDTO);
}
@Override
public List getOrderByGroupPurchaseMemberList(HomeGoodsSkuDTO homeGoodsSkuDTO) {
return baseMapper.getOrderByGroupPurchaseMemberList(homeGoodsSkuDTO);
}
@Override
public List getOrderByGroupPurchaseMemberList1(HomeGoodsSkuDTO homeGoodsSkuDTO) {
return null;
}
@Override
@Synchronized
public MemberTiOrderVO saveMemberOrder(MemberOrderDTO memberOrderDTO) {
MemberTiOrderVO memberOrderVO=new MemberTiOrderVO();
BigDecimal pice=new BigDecimal(0);
Order order=new Order();
order.setMemberId(memberOrderDTO.getMemberId());
if (memberOrderDTO.getOrderFrom()==1){
order.setOrderFrom(OrderFromEnum.COMMODITY_ORDER);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("SP"));
}
if (memberOrderDTO.getOrderFrom()==2){
order.setOrderFrom(OrderFromEnum.SNAP_ORDERS);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("MS"));
}
if (memberOrderDTO.getOrderFrom()==3){
order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("TG"));
order.setIsOrder(2);
}
if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
order.setOrderFrom(OrderFromEnum.WISH_ORDER);
order.setOrderNo(OrderUtil.getOrderNoForPrefix("QG"));
}
if (memberOrderDTO.getPaymentMethod()==1){
order.setPaymentMethod(PaymentMethodEnum.WECHAT);
}if (memberOrderDTO.getPaymentMethod()==2){
order.setPaymentMethod(PaymentMethodEnum.ALIPAY);
}
if (memberOrderDTO.getOrderFrom()==1){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData();
if (goodsSku.getListingStatus().getCode()==1){
throw new ServiceException("该商品已经下架");
}
if (goodsSku.getStock()data.getGroupSize()){
throw new ServiceException("对不起,大成团人数");
}*/
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
memberOrderVO.setPrice(data.getGroupPurchasePrice());
memberOrderVO.setSjPrice(goodsSku.getPrice());
memberOrderVO.setCoverPic(goodsSku.getCoverPic());
memberOrderVO.setSkuName(goodsSku.getSkuName());
memberOrderVO.setYouhiPrice(data.getGroupPurchasePrice());
pice=data.getGroupPurchasePrice();
order.setSkuName(goodsSku.getSkuName());
order.setPrice(data.getGroupPurchasePrice());
order.setCoverPic(goodsSku.getCoverPic());
order.setSjPrice(goodsSku.getPrice());
order.setGoodsId(goodsSku.getId());
}
if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
// 远程调用营销服务,获取推荐商品信息
PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
memberOrderDTO.getGoodsSkuId(),
SecurityConstants.INNER).getData();
if (Objects.isNull(recommend)) {
throw new ServiceException("推荐商品不存在");
}
if (recommend.getExpireTime().isBefore(LocalDateTime.now())) {
throw new ServiceException("推荐商品已过期");
}
if (recommend.getAvailableNum().compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
throw new ServiceException("推荐商品可购数量不足");
}
// 远程调用,更新可购数量
Integer res = promotionClient.subRecommendAvailableNum(
memberOrderDTO.getGoodsQuantity(),
recommend.getId(), SecurityConstants.INNER).getData();
if (res == 0) {
throw new ServiceException("推荐商品可购数量不足");
}
memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
memberOrderVO.setPrice(recommend.getSellingPrice());
memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
memberOrderVO.setSkuName(recommend.getGoodsName());
pice = recommend.getSellingPrice();
}
order.setOrderRemark(memberOrderDTO.getOrderRemark());
order.setMemberId(memberOrderDTO.getMemberId());
order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
order.setOrderTime(LocalDateTime.now());
order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
order.setTotalAmount(pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData();
CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData();
BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
BigDecimal divide = pic.divide(new BigDecimal(memberPointsMoney.getConfigValue()));
BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN);
BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue()));
order.setPoints(aDouble.intValue());
order.setOrderStatus(OrderStatusEnum.TO_PLAY);
MemberAddress data = memberClient.getMemberAddressOne(
memberOrderDTO.getMemberId(), SecurityConstants.INNER).getData();
if (StringUtils.isNotNull(data)) {
order.setReceiverName(data.getRecipientName());
order.setReceiverCity(data.getReceiverCity());
order.setReceiverDetailAddress(data.getDetailedAddress());
order.setReceiverPhone(data.getRecipientPhone());
memberOrderVO.setReceiverName(data.getRecipientName());
memberOrderVO.setReceiverCity(data.getReceiverCity());
memberOrderVO.setReceiverDetailAddress(data.getDetailedAddress());
memberOrderVO.setReceiverphone(data.getRecipientPhone());
} else {
order.setReceiverName(memberOrderDTO.getReceiverName());
order.setReceiverCity(memberOrderDTO.getReceiverCity());
order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress());
order.setReceiverPhone(memberOrderDTO.getReceiverphone());
memberOrderVO.setReceiverName(memberOrderDTO.getReceiverName());
memberOrderVO.setReceiverCity(memberOrderDTO.getReceiverCity());
memberOrderVO.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress());
memberOrderVO.setReceiverphone(memberOrderDTO.getReceiverphone());
}
order.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
baseMapper.insert(order);
memberOrderVO.setId(order.getId());
memberOrderVO.setOrderStatus(OrderStatusEnum.TO_PLAY);
memberOrderVO.setOrderNo(order.getOrderNo());
memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
memberOrderVO.setOrderTime(order.getOrderTime());
memberOrderVO.setOrderFrom(order.getOrderFrom());
memberOrderVO.setMemberId(memberOrderDTO.getMemberId());
memberOrderVO.setPaymentMethod(order.getPaymentMethod());
memberOrderVO.setTotalAmount(order.getTotalAmount());
memberOrderVO.setOrderStatus(order.getOrderStatus());
memberOrderVO.setGoodsQuantity(order.getGoodsQuantity());
memberOrderVO.setReceiverName(order.getReceiverName());
memberOrderVO.setReceiverCity(order.getReceiverCity());
memberOrderVO.setReceiverDetailAddress(order.getReceiverDetailAddress());
memberOrderVO.setReceiverphone(order.getReceiverPhone());
Integer delayTime = 30;
redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES);
DelayTask delayTask = new DelayTask();
delayTask.setDelFlag(0);
delayTask.setCreateTime(LocalDateTime.now());
delayTask.setExecuteTime(LocalDateTime.now().plusMinutes(30));
delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getId());
sysUserClient.addDelayTask(delayTask, SecurityConstants.INNER);
return memberOrderVO;
}
@Override
public MemberTiOrderVO updMemberOrder(MemberOrderDTO memberOrderDTO) {
Order order = baseMapper.selectById(memberOrderDTO.getId());
if(memberOrderDTO.getOrderRemark()!=null){
order.setOrderRemark(memberOrderDTO.getOrderRemark());
}
MemberTiOrderVO memberOrderVO=new MemberTiOrderVO();
if (memberOrderDTO.getReceiverDetailAddress()!=null){
order.setReceiverName(memberOrderDTO.getReceiverName());
order.setReceiverCity(memberOrderDTO.getReceiverCity());
order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress());
order.setReceiverPhone(memberOrderDTO.getReceiverphone());
baseMapper.updateById(order);
}
if (memberOrderDTO.getOrderRemark()!=null){
order.setOrderRemark(memberOrderDTO.getOrderRemark());
}if (memberOrderDTO.getGoodsQuantity()!=null){
if (order.getOrderFrom().getCode()==1){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
if (goodsSku.getStock()+order.getGoodsQuantity() 0) {
// 远程调用,更新可购数量
Integer res = promotionClient.subRecommendAvailableNum(
memberOrderDTO.getGoodsQuantity() - order.getGoodsQuantity(),
recommend.getId(), SecurityConstants.INNER).getData();
if (res == 0) {
throw new ServiceException("推荐商品可购数量不足");
}
} else {
promotionClient.addRecommendAvailableNum(
order.getGoodsQuantity() - memberOrderDTO.getGoodsQuantity(),
recommend.getId(), SecurityConstants.INNER);
}
order.setTotalAmount(recommend.getSellingPrice()
.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
memberOrderVO.setPrice(recommend.getSellingPrice());
memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
memberOrderVO.setSkuName(recommend.getGoodsName());
}
}
if (memberOrderDTO.getGoodsQuantity()!=null){
BigDecimal pice=order.getPrice().multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
if (memberOrderDTO.getCouponId()!=null){
CouponMemberDTO couponMemberDTO=new CouponMemberDTO();
couponMemberDTO.setId(memberOrderDTO.getCouponId());
CouponMember data = promotionClient.getCouponMember(couponMemberDTO, SecurityConstants.INNER).getData();
if (order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setId(memberOrderDTO.getCouponId());
couponMemberDTO1.setCouponStatus(0);
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
order.setCouponId(data.getId());
if (data.getCouponType().getCode()==1){
if (pice.doubleValue()>=data.getFullReductionAmount().doubleValue()){
pice=pice.subtract(data.getReductionAmount());
order.setDiscountMoney(data.getReductionAmount());
}else{
order.setDiscountMoney(pice);
pice=new BigDecimal(0);
}
}
if (data.getCouponType().getCode()==2){
pice= order.getTotalAmount();
if(pice.compareTo(data.getVoucherAmount())<0){
order.setDiscountMoney(pice);
pice=new BigDecimal(0);
}else{
pice=pice.subtract(data.getVoucherAmount());
order.setDiscountMoney(data.getVoucherAmount());
}
}
if (data.getCouponType().getCode()==3){
pice= order.getTotalAmount();
BigDecimal pice1=new BigDecimal(data.getDiscountRate());
BigDecimal pice2=new BigDecimal(0.1);
BigDecimal pice3=pice.multiply(pice1.multiply(pice2));
if (data.getMaxDiscount()!=null){
if (pice3.compareTo(new BigDecimal(data.getMaxDiscount().doubleValue()))>0){
pice3=new BigDecimal(data.getMaxDiscount().doubleValue());
}
}
if(pice.compareTo(pice3)>0){
BigDecimal pice4= pice.subtract(pice3);
if (data.getMaxDiscount()!=null){
if (pice4.doubleValue()>data.getMaxDiscount().doubleValue()){
pice=pice.subtract(data.getMaxDiscount());
order.setDiscountMoney(data.getMaxDiscount());
}else{
order.setDiscountMoney(pice4);
pice=pice3;
}
}else{
order.setDiscountMoney(pice.subtract(pice3));
pice=pice3;
}
}else{
order.setDiscountMoney(pice);
pice=new BigDecimal(0);
}
}
order.setCouponId(memberOrderDTO.getCouponId());
CouponMemberDTO couponMemberDTO2=new CouponMemberDTO();
couponMemberDTO2.setId(memberOrderDTO.getCouponId());
couponMemberDTO2.setCouponStatus(1);
promotionClient.updCouponMember(couponMemberDTO2, SecurityConstants.INNER);
}else{
if (order.getCouponId()!=null&&order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setCouponStatus(0);
couponMemberDTO1.setId(order.getCouponId());
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
order.setCouponId(0L);
order.setDiscountMoney(new BigDecimal(0));
}
order.setTotalAmount(pice);
CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData();
CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData();
if (pice.doubleValue()>0){
BigDecimal divide = pice.divide(new BigDecimal(memberPointsMoney.getConfigValue()));
BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN);
BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue()));
order.setPoints(aDouble.intValue());
}else{
order.setPoints(0);
}
baseMapper.updateById(order);
}
memberOrderVO.setId(order.getId());
memberOrderVO.setOrderStatus(OrderStatusEnum.TO_PLAY);
memberOrderVO.setOrderNo(order.getOrderNo());
memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
memberOrderVO.setOrderTime(order.getOrderTime());
memberOrderVO.setOrderFrom(order.getOrderFrom());
memberOrderVO.setMemberId(memberOrderDTO.getMemberId());
memberOrderVO.setPaymentMethod(order.getPaymentMethod());
memberOrderVO.setTotalAmount(order.getTotalAmount());
memberOrderVO.setOrderStatus(order.getOrderStatus());
memberOrderVO.setGoodsQuantity(order.getGoodsQuantity());
memberOrderVO.setReceiverName(order.getReceiverName());
memberOrderVO.setReceiverCity(order.getReceiverCity());
memberOrderVO.setReceiverDetailAddress(order.getReceiverDetailAddress());
memberOrderVO.setReceiverphone(order.getReceiverPhone());
memberOrderVO.setDiscountMoney(order.getDiscountMoney());
return memberOrderVO;
}
@Override
public void updMemberOrderbz(MemberOrderDTO memberOrderDTO) {
Order order = baseMapper.selectById(memberOrderDTO.getId());
if(memberOrderDTO.getOrderRemark()!=null){
order.setOrderRemark(memberOrderDTO.getOrderRemark());
}
baseMapper.updateById(order);
}
@Override
public PageDTO MemberrderList(MemberOrderListDTO memberOrderListDTO) {
Page page = new Page<>(memberOrderListDTO.getPageCurr(), memberOrderListDTO.getPageSize());
LambdaQueryWrapper wrapper= Wrappers.lambdaQuery();
wrapper.eq(Order::getMemberId,memberOrderListDTO.getMemberId());
if(memberOrderListDTO.getGoodsSkuName()!=null&&memberOrderListDTO.getGoodsSkuName()!=""){
wrapper.like(Order::getSkuName,memberOrderListDTO.getGoodsSkuName());
}
if(memberOrderListDTO.getOrderNo()!=null){
wrapper.like(Order::getOrderNo,memberOrderListDTO.getOrderNo());
}
if(memberOrderListDTO.getOrderStatus()!=null){
wrapper.eq(Order::getOrderStatus,memberOrderListDTO.getOrderStatus().getCode()-1);
}
if(memberOrderListDTO.getIsRequest()!=null){
wrapper.eq(Order::getIsRequest,memberOrderListDTO.getIsRequest());
}
wrapper.eq(Order::getIsOrder,1);
wrapper.eq(Order::getDelFlag,0);
wrapper.orderByDesc(Order::getCreateTime);
Page page1 = this.page(page, wrapper);
PageDTO memberOrderListVOPageDTO = PageDTO.of(page1, MemberOrderListVO.class);
List list = memberOrderListVOPageDTO.getList();
Map goodsUnitMap = getGoodsUnitMap(list);
for (MemberOrderListVO MemberOrderList:list){
if (MemberOrderList.getOrderStatus().getCode()==1){
if (MemberOrderList.getOrderFrom().getCode() == 1
|| MemberOrderList.getOrderFrom().getCode() == 2
|| MemberOrderList.getOrderFrom().getCode() == 3
|| MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
LocalDateTime localDateTime = MemberOrderList.getOrderTime().plusMinutes(30);
if (LocalDateTime.now().isAfter(localDateTime)) {
// dateTime1 在 dateTime2 之后
MemberOrderList.setOrderStatus(OrderStatusEnum.CANCELED);
Order order = this.getOrder(MemberOrderList.getId());
order.setOrderStatus(OrderStatusEnum.CANCELED);
if (order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setId(order.getCouponId());
couponMemberDTO1.setCouponStatus(0);
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
if(order.getOrderNo().contains("SP")){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity());
if (goodsSku.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(goodsSku.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1,SecurityConstants.INNER);
}
if(order.getOrderNo().contains("MS")){
GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(data.getSeckillStock()+order.getGoodsQuantity());
if (data.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(data.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
}
// 恢复推荐商品可购数量
if (MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
promotionClient.addRecommendAvailableNum(
MemberOrderList.getGoodsQuantity(),
MemberOrderList.getGoodsSkuId(), SecurityConstants.INNER);
}
this.updateById(order);
}
}
}
OrderReturnRequest orderReturnRequest = orderReturnRequestService.getOne(
Wrappers.lambdaQuery(OrderReturnRequest.class)
.eq(OrderReturnRequest::getOrderId,
MemberOrderList.getId()).last("limit 1"));
if (StringUtils.isNotNull(orderReturnRequest)
&& orderReturnRequest.getStatus() != ReturnRequestStatusEnum.QX) {
MemberOrderList.setStatus(orderReturnRequest.getStatus());
MemberOrderList.setRequestId(orderReturnRequest.getId());
MemberOrderList.setIsRequest(2);
}else{
MemberOrderList.setIsRequest(1);
}
LambdaQueryWrapper wrapper3= Wrappers.lambdaQuery();
wrapper3.eq(OrderAuctionBond::getOrderId,MemberOrderList.getId());
OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper3);
if (orderAuctionBond!=null){
if (orderAuctionBond.getBoundStatus().getCode()==1||orderAuctionBond.getBoundStatus().getCode()==2){
MemberOrderList.setIsAuctionBond(1);
}else{
MemberOrderList.setIsAuctionBond(2);
}
}else {
MemberOrderList.setIsAuctionBond(1);
}
CustomConfig memberPointsPoints = sysUserClient.getconfig("MALL_ORDER_DESCRIPTION").getData();
MemberOrderList.setOrderShuoMin(memberPointsPoints.getConfigValue());
CustomConfig ReturnCycle = sysUserClient.getconfig("RETURN_CYCLE").getData();
MemberOrderList.setOrderZq(Integer.valueOf(ReturnCycle.getConfigValue()));
GoodsSku goodsSku =
Objects.nonNull(goodsUnitMap.get(MemberOrderList.getGoodsId()))
? goodsUnitMap.get(MemberOrderList.getGoodsId())
: goodsUnitMap.get(MemberOrderList.getGoodsSkuId());
if (Objects.nonNull(goodsSku)) {
MemberOrderList.setUnit(goodsSku.getUnit());
MemberOrderList.setSpec(goodsSku.getSpec());
MemberOrderList.setSpecUnit(goodsSku.getSpecUnit());
}
}
return memberOrderListVOPageDTO;
}
@NotNull
private Map getGoodsUnitMap(List list) {
Map goodsSkuMap = new HashedMap();
Set goodsSkuIdSet = list.stream()
.filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
.map(MemberOrderListVO::getGoodsSkuId)
.collect(Collectors.toSet());
if (CollUtils.isNotEmpty(goodsSkuIdSet)) {
goodsSkuMap = goodsSkuClient.getGoodsListByIds(goodsSkuIdSet,
SecurityConstants.INNER).getData().stream()
.collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
}
Set seckillIdSet = list.stream()
.filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
.map(MemberOrderListVO::getGoodsSkuId)
.collect(Collectors.toSet());
if (CollUtils.isNotEmpty(seckillIdSet)) {
Map goodsSkuMap2 = goodsSkuClient.getGoodsSkuBySeckillIdSet(
seckillIdSet,
SecurityConstants.INNER).getData().stream()
.collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
// 将goodsSkuMap2合并到goodsSkuMap中
goodsSkuMap.putAll(goodsSkuMap2);
}
Set groupPurchaseIdSet = list.stream()
.filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS))
.map(MemberOrderListVO::getGoodsSkuId)
.collect(Collectors.toSet());
if (CollUtils.isNotEmpty(groupPurchaseIdSet)) {
Map goodsSkuMap3 = goodsSkuClient.getGoodsSkuByGroupPurchaseIdSet(
groupPurchaseIdSet,
SecurityConstants.INNER).getData().stream()
.collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
goodsSkuMap.putAll(goodsSkuMap3);
}
Set auctionGoodsIdSet = list.stream()
.filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
&& vo.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS))
.map(MemberOrderListVO::getGoodsSkuId)
.collect(Collectors.toSet());
if (CollUtils.isNotEmpty(auctionGoodsIdSet)) {
Map goodsSkuMap4 = auctionClient.getGoodsSkuByAuctionGoodsIdSet(
auctionGoodsIdSet,
SecurityConstants.INNER).getData().stream()
.collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
goodsSkuMap.putAll(goodsSkuMap4);
}
Set auctionSalesroomGoodsSet = list.stream()
.filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)
&& vo.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS))
.map(MemberOrderListVO::getGoodsSkuId)
.collect(Collectors.toSet());
if (CollUtils.isNotEmpty(auctionSalesroomGoodsSet)) {
Map goodsSkuMap5 = auctionClient.getGoodsSkuByAuctionSalesroomGoodsSet(
auctionSalesroomGoodsSet,
SecurityConstants.INNER).getData().stream()
.collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
goodsSkuMap.putAll(goodsSkuMap5);
}
return goodsSkuMap;
}
@Override
public OrderVO MemberOrderOne(MemberOrderListDTO memberOrderListDTO) {
Order order = baseMapper.selectById(memberOrderListDTO.getId());
OrderVO orderVO=new OrderVO();
orderVO = BeanUtils.copyBean(order, OrderVO.class);
orderVO.setAuctionType(order.getAuctionOrderType());
orderVO.setCouponId(order.getCouponId());
orderVO.setBound(order.getBound());
orderVO.setIsRequest(order.getIsRequest());
if (orderVO.getOrderFrom().getCode() == 3) {
GoodsGroupPurchase data = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(
order.getGoodsSkuId(), SecurityConstants.INNER).getData();
orderVO.setGroupTime(data.getGroupTime());
orderVO.setSkuId(data.getGoodsSkuId());
}
LambdaQueryWrapper wrapper3 = Wrappers.lambdaQuery();
wrapper3.eq(OrderAuctionBond::getOrderId, order.getId());
OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper3);
if (orderAuctionBond != null) {
if (orderAuctionBond.getBoundStatus().getCode() == 1
|| orderAuctionBond.getBoundStatus().getCode() == 2) {
orderVO.setIsAuctionBond(1);
} else {
orderVO.setIsAuctionBond(2);
}
} else {
orderVO.setIsAuctionBond(1);
}
if (order.getTotalAmount()==null){
order.setTotalAmount(new BigDecimal(0));
}
GoodsSku goodsSku = getGoodsSku(orderVO);
if (Objects.nonNull(goodsSku)) {
orderVO.setUnit(goodsSku.getUnit());
orderVO.setSpec(goodsSku.getSpec());
orderVO.setSpecUnit(goodsSku.getSpecUnit());
}
CustomConfig memberPointsPoints = sysUserClient.getconfig("MALL_ORDER_DESCRIPTION").getData();
orderVO.setOrderShuoMin(memberPointsPoints.getConfigValue());
CustomConfig ReturnCycle = sysUserClient.getconfig("RETURN_CYCLE").getData();
orderVO.setOrderZq(Integer.valueOf(ReturnCycle.getConfigValue()));
// 查询售后记录
Optional orderReturnRequestOpt = orderReturnRequestService.lambdaQuery()
.eq(OrderReturnRequest::getOrderId, order.getId()).oneOpt();
if (orderReturnRequestOpt.isPresent()) {
OrderReturnRequest orderReturnRequest = orderReturnRequestOpt.get();
orderVO.setStatus(orderReturnRequest.getStatus());
}
return orderVO;
}
private GoodsSku getGoodsSku(OrderVO orderVO) {
GoodsSku goodsSku = null;
switch (orderVO.getOrderFrom()) {
case COMMODITY_ORDER:
goodsSku = goodsSkuClient.getGoodsSkuOne(orderVO.getGoodsSkuId(),
SecurityConstants.INNER).getData();
break;
case SNAP_ORDERS:
List skuList = goodsSkuClient.getGoodsSkuBySeckillIdSet(
Sets.newHashSet(orderVO.getGoodsSkuId()),
SecurityConstants.INNER).getData();
if (CollUtils.isNotEmpty(skuList)) {
goodsSku = skuList.get(0);
}
break;
case GROUP_PURCHASE_ORDERS:
List data = goodsSkuClient.getGoodsSkuByGroupPurchaseIdSet(
Sets.newHashSet(orderVO.getGoodsSkuId()),
SecurityConstants.INNER).getData();
if (CollUtils.isNotEmpty(data)) {
goodsSku = data.get(0);
}
break;
case AUCTION_ORDERS:
List goodsSkuList;
if (orderVO.getAuctionType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS)) {
goodsSkuList = auctionClient.getGoodsSkuByAuctionGoodsIdSet(
Sets.newHashSet(orderVO.getGoodsSkuId()),
SecurityConstants.INNER).getData();
if (CollUtils.isNotEmpty(goodsSkuList)) {
goodsSku = goodsSkuList.get(0);
}
} else {
goodsSkuList = auctionClient.getGoodsSkuByAuctionSalesroomGoodsSet(
Sets.newHashSet(orderVO.getGoodsSkuId()),
SecurityConstants.INNER).getData();
}
if (CollUtils.isNotEmpty(goodsSkuList)) {
goodsSku = goodsSkuList.get(0);
}
break;
}
return goodsSku;
}
@Override
public void CancelOrderOne(MemberOrderListDTO memberOrderListDTO) {
Order order = baseMapper.selectById(memberOrderListDTO.getId());
if (order.getOrderStatus().getCode() == 1) {
order.setOrderStatus(OrderStatusEnum.CANCELED);
order.setCancelTime(LocalDateTime.now());
baseMapper.updateById(order);
if (order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setId(order.getCouponId());
couponMemberDTO1.setCouponStatus(0);
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
if(order.getOrderNo().contains("SP")){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity());
if (goodsSku.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(goodsSku.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1,SecurityConstants.INNER);
}
if(order.getOrderNo().contains("MS")){
GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(data.getSeckillStock()+order.getGoodsQuantity());
if (data.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(data.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
if (data.getStartStatus().equals(StartStatusEnum.ENDED)) {
GoodsStockUpdDTO dto = new GoodsStockUpdDTO();
dto.setGoodsSkuId(data.getGoodsSkuId());
dto.setAuctionStock(order.getGoodsQuantity());
goodsSkuClient.updGoodsStock(Lists.newArrayList(dto), SecurityConstants.INNER);
}
}
if(order.getOrderNo().contains("TG")){
GoodsGroupPurchaseInfo goodsGroupPurchaseInfo =new GoodsGroupPurchaseInfo();
goodsGroupPurchaseInfo.setGroupPurchaseId(order.getGoodsSkuId());
goodsGroupPurchaseInfo.setMubre(order.getGroupNo());
GoodsGroupPurchaseInfo goodsSeckiGoodsGroupPurchaseInfo = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseInfo2(order.getGroupNo(), SecurityConstants.INNER).getData();
if (goodsSeckiGoodsGroupPurchaseInfo!=null){
goodsSeckiGoodsGroupPurchaseInfo.setPurchaseNum(order.getGoodsQuantity());
GoodsSkuClient.updgoodsGroupPurchaseInfo1(goodsSeckiGoodsGroupPurchaseInfo, SecurityConstants.INNER);
}
}
// 恢复可购数量
if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
promotionClient.addRecommendAvailableNum(
order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
}
}
if (order.getOrderStatus().getCode() == 2) {
order.setOrderStatus(OrderStatusEnum.CANCELED);
order.setCancelTime(LocalDateTime.now());
baseMapper.updateById(order);
if(order.getOrderNo().contains("SP")){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity());
if (goodsSku.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(goodsSku.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1,SecurityConstants.INNER);
}
if(order.getOrderNo().contains("MS")){
GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(data.getSeckillStock()+order.getGoodsQuantity());
if (data.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(data.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
}
if(order.getOrderNo().contains("TG")){
GoodsGroupPurchaseInfo goodsGroupPurchaseInfo =new GoodsGroupPurchaseInfo();
goodsGroupPurchaseInfo.setMubre(order.getGroupNo());
GoodsGroupPurchaseInfo goodsSeckiGoodsGroupPurchaseInfo = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseInfo2(order.getGroupNo(), SecurityConstants.INNER).getData();
if (goodsSeckiGoodsGroupPurchaseInfo!=null){
goodsSeckiGoodsGroupPurchaseInfo.setPurchaseNum(order.getGoodsQuantity());
GoodsSkuClient.updgoodsGroupPurchaseInfo1(goodsSeckiGoodsGroupPurchaseInfo, SecurityConstants.INNER);
}
}
// 恢复可购数量
if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
promotionClient.addRecommendAvailableNum(
order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
}
if (order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setId(order.getCouponId());
couponMemberDTO1.setCouponStatus(0);
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
updMembeOneDTO MembeOneDTO = new updMembeOneDTO();
MembeOneDTO.setType(2);
MembeOneDTO.setMemberId(order.getMemberId());
MembeOneDTO.setMoney(order.getTotalAmount());
MembeOneDTO.setTotalPoints(order.getPoints());
memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER);
MemberPointsDTO memberPointsDTO = new MemberPointsDTO();
memberPointsDTO.setMemberId(order.getMemberId());
memberPointsDTO.setPointsType(2);
memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE);
memberPointsDTO.setPoints(order.getPoints());
memberClient.addMemberPoints(memberPointsDTO);
if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {//支付宝
//获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, order.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
if (paylog != null) {
boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney());
if (!bo) {
System.out.println("支付宝退款失败");
}
}
} else if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 1) {//微信
//获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, order.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
if (paylog != null) {
String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer refundFee = Integer.parseInt(refundMoney.substring(0, refundMoney.length() - 3));
String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
refundFee = Integer.parseInt(money.substring(0, money.length() - 3));
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(order.getOrderNo());
String ma = m.replaceAll("").trim();
boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "2");
if (!bo) {
System.out.println("微信退款失败");
}
}
}
}
if (order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)) {
refundBond(order);
}
}
@Override
public void delOrderOne(MemberOrderListDTO memberOrderListDTO) {
Order byId = this.getById(memberOrderListDTO.getId());
if (byId.getOrderNo().contains("TG") && StringUtils.isNotBlank(byId.getGroupNo())) {
GoodsGroupPurchaseInfo goodsSeckiGoodsGroupPurchaseInfo = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseInfo2(byId.getGroupNo(), SecurityConstants.INNER).getData();
if (goodsSeckiGoodsGroupPurchaseInfo!=null){
goodsSeckiGoodsGroupPurchaseInfo.setPurchaseNum(byId.getGoodsQuantity());
GoodsSkuClient.updgoodsGroupPurchaseInfo1(goodsSeckiGoodsGroupPurchaseInfo, SecurityConstants.INNER);
}
}
this.removeById(memberOrderListDTO.getId());
if (byId.getOrderStatus().getCode() == 2) {
updMembeOneDTO MembeOneDTO = new updMembeOneDTO();
MembeOneDTO.setType(2);
MembeOneDTO.setMemberId(byId.getMemberId());
MembeOneDTO.setMoney(byId.getTotalAmount());
MembeOneDTO.setTotalPoints(byId.getPoints());
memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER);
if (byId.getPaymentMethod() != null && byId.getPaymentMethod().getCode() == 2) {//支付宝
//获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, byId.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
if (paylog != null) {
boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney());
if (!bo) {
System.out.println("支付宝退款失败");
}
}
} else if (byId.getPaymentMethod() != null && byId.getPaymentMethod().getCode() == 1) {//微信
//获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, byId.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
if (paylog != null) {
String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer refundFee = Integer.parseInt(refundMoney.substring(0, refundMoney.length() - 3));
String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
refundFee = Integer.parseInt(money.substring(0, money.length() - 3));
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(byId.getOrderNo());
String ma = m.replaceAll("").trim();
boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "2");
if (!bo) {
System.out.println("微信退款失败");
}
}
}
}
}
@Override
public void AffirmOrderOne(MemberOrderListDTO memberOrderListDTO) {
Order order = baseMapper.selectById(memberOrderListDTO.getId());
if (order.getOrderFrom().getCode()==4){
order.setOrderStatus(OrderStatusEnum.FINISHED);
order.setReceiveTime(LocalDateTime.now());
baseMapper.updateById(order);
if (order.getAuctionOrderType().getCode()==1){
}else{
}
refundBond(order);
} else {
order.setOrderStatus(OrderStatusEnum.FINISHED);
order.setReceiveTime(LocalDateTime.now());
baseMapper.updateById(order);
}
}
private void refundBond(Order order) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS),
OrderAuctionBond::getAuctionSalesroomId, order.getAuctionSalesroomId());
wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS),
OrderAuctionBond::getAuctionGoodsId, order.getGoodsSkuId());
wrapper.eq(OrderAuctionBond::getMemberId, order.getMemberId());
wrapper.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID);
OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper);
if (orderAuctionBond != null && orderAuctionBond.getBond() != null) {
if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {// 支付宝
// 获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(),
paylog.getTradeNo(), paylog.getPayMoney());
if (!bo) {
System.out.println("支付宝退款失败");
} else {
orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED);
}
} else if (order.getPaymentMethod() != null
&& order.getPaymentMethod().getCode() == 1) {// 微信
// 获取支付信息
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo());
Paylog paylog = iPaylogService.getOne(paylogEntityWrapper);
String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer refundFee = Integer.parseInt(
refundMoney.substring(0, refundMoney.length() - 3));
String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
refundFee = 1;
String refundNo = OrderUtil.getOrderNoForPrefix("R");
boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(),
paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "2");
if (!bo) {
System.out.println("微信退款失败");
} else {
orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED);
}
}
orderAuctionBondMapper.updateById(orderAuctionBond);
}
}
@Override
public MemberOrderNumVO MemberOrderNum(MemberOrderListDTO memberOrderListDTO) {
LambdaQueryWrapper wrapper1= Wrappers.lambdaQuery();
wrapper1.eq(Order::getMemberId,memberOrderListDTO.getMemberId());
wrapper1.eq(Order::getOrderStatus,1);
wrapper1.eq(Order::getIsOrder,1);
wrapper1.eq(Order::getDelFlag,0);
wrapper1.orderByDesc(Order::getCancelTime);
List page2 = this.list(wrapper1);
for (Order MemberOrderList:page2) {
if (MemberOrderList.getOrderStatus().getCode() == 1) {
if (MemberOrderList.getOrderFrom().getCode() == 1 || MemberOrderList.getOrderFrom().getCode() == 2 || MemberOrderList.getOrderFrom().getCode() == 3) {
LocalDateTime localDateTime = MemberOrderList.getOrderTime().plusMinutes(30);
if (LocalDateTime.now().isAfter(localDateTime)) {
// dateTime1 在 dateTime2 之后
MemberOrderList.setOrderStatus(OrderStatusEnum.CANCELED);
Order order = this.getById(MemberOrderList.getId());
order.setOrderStatus(OrderStatusEnum.CANCELED);
this.updateById(order);
if (order.getCouponId()!=0){
CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
couponMemberDTO1.setId(order.getCouponId());
couponMemberDTO1.setCouponStatus(0);
promotionClient.updCouponMember(couponMemberDTO1, SecurityConstants.INNER);
}
if(order.getOrderNo().contains("SP")){
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
if (Objects.nonNull(goodsSku)) {
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(
goodsSku.getStock() + order.getGoodsQuantity());
if (goodsSku.getSoldQuantity() - order.getGoodsQuantity() < 0) {
goodsStockUpdDTO1.setSoldQuantity(0);
} else {
goodsStockUpdDTO1.setSoldQuantity(
goodsSku.getSoldQuantity() - order.getGoodsQuantity());
}
goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1,
SecurityConstants.INNER);
}
}
if(order.getOrderNo().contains("MS")){
GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO();
goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId());
goodsStockUpdDTO1.setAuctionStock(data.getSeckillStock()+order.getGoodsQuantity());
if (data.getSoldQuantity()-order.getGoodsQuantity()<0){
goodsStockUpdDTO1.setSoldQuantity(0);
}else {
goodsStockUpdDTO1.setSoldQuantity(data.getSoldQuantity()-order.getGoodsQuantity());
}
goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
}
}
}
}
}
MemberOrderNumVO vo=new MemberOrderNumVO();
LambdaQueryWrapper paylogEntityWrapper = Wrappers.lambdaQuery();
paylogEntityWrapper.eq(Order::getMemberId, memberOrderListDTO.getMemberId());
paylogEntityWrapper.eq(Order::getOrderStatus,1);
paylogEntityWrapper.eq(Order::getDelFlag,0);
paylogEntityWrapper.eq(Order::getIsOrder,1);
List list = this.list(paylogEntityWrapper);
vo.setDzforderNo(list.size());
LambdaQueryWrapper paylogEntityWrapper1 = Wrappers.lambdaQuery();
paylogEntityWrapper1.eq(Order::getMemberId, memberOrderListDTO.getMemberId());
paylogEntityWrapper1.eq(Order::getOrderStatus,2);
paylogEntityWrapper1.eq(Order::getDelFlag,0);
paylogEntityWrapper1.eq(Order::getIsOrder,1);
List list1 = this.list(paylogEntityWrapper1);
vo.setDfhorderNo(list1.size());
LambdaQueryWrapper paylogEntityWrapper2 = Wrappers.lambdaQuery();
paylogEntityWrapper2.eq(Order::getMemberId, memberOrderListDTO.getMemberId());
paylogEntityWrapper2.eq(Order::getOrderStatus,3);
paylogEntityWrapper2.eq(Order::getDelFlag,0);
paylogEntityWrapper2.eq(Order::getIsOrder,1);
List list2 = this.list(paylogEntityWrapper2);
vo.setDshorderNo(list2.size());
LambdaQueryWrapper paylogEntityWrapper3 = Wrappers.lambdaQuery();
paylogEntityWrapper3.eq(Order::getMemberId, memberOrderListDTO.getMemberId());
paylogEntityWrapper3.eq(Order::getIsRequest,2);
paylogEntityWrapper3.eq(Order::getDelFlag,0);
paylogEntityWrapper3.eq(Order::getIsOrder,1);
List list3 = this.list(paylogEntityWrapper3);
vo.setShorderNo(list3.size());
return vo;
}
@Override
public PageDTO CtjlGoodsGroupPurchase(HomeGoodsSkuDTO1 homeGoodsSkuDTO1) {
LambdaQueryWrapper< Order> wrapper1= Wrappers.lambdaQuery();
if (homeGoodsSkuDTO1.getSkuName()!=null&&homeGoodsSkuDTO1.getSkuName()!=""){
wrapper1.like(Order::getSkuName,homeGoodsSkuDTO1.getSkuName());
}
wrapper1.eq(Order::getMemberId,homeGoodsSkuDTO1.getMemberId());
wrapper1.eq(Order::getOrderFrom,3);
wrapper1.eq(Order::getDelFlag,0);
wrapper1.orderByDesc(Order::getCreateTime);
Page page = new Page<>(homeGoodsSkuDTO1.getPageCurr(), homeGoodsSkuDTO1.getPageSize());
Page< Order> page1 = this.page(page, wrapper1);
PageDTO HomeGoodsSeckillVOPageDTO = PageDTO.of(page1, WdOrderVO.class);
List list2 = HomeGoodsSeckillVOPageDTO.getList();
for (WdOrderVO goodsGroupPurchaseeVO1:list2) {
Order byId1 = this.getById(goodsGroupPurchaseeVO1.getId());
GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(byId1.getGoodsSkuId(), SecurityConstants.INNER).getData();
if (Objects.nonNull(data)) {
BeanUtils.copyProperties(data, goodsGroupPurchaseeVO1);
GoodsSku byId = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(),
SecurityConstants.INNER).getData();
goodsGroupPurchaseeVO1.setGoodsSkuName(byId.getSkuName());
goodsGroupPurchaseeVO1.setCoverPic(byId.getCoverPic());
goodsGroupPurchaseeVO1.setPrice(byId.getPrice());
goodsGroupPurchaseeVO1.setYears(String.valueOf(byId.getYears().getYear()));
goodsGroupPurchaseeVO1.setIsGoodsGroupPurchase(2);
if (byId1.getGroupNo() != null) {
GoodsGroupPurchaseInfo one1 = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseInfo2(
byId1.getGroupNo(), SecurityConstants.INNER).getData();
if (one1 != null) {
goodsGroupPurchaseeVO1.setCurrentNumber(one1.getCurrentNumber());
if (one1.getGroupStatus() == 0) {
if (one1.getGroupSize() - one1.getCurrentNumber() < 5) {
goodsGroupPurchaseeVO1.setGroupStatus(GroupStatusEnum.MS_FAILURE);
} else {
goodsGroupPurchaseeVO1.setGroupStatus(
GroupStatusEnum.TO_FORM_A_GROUP);
}
}
if (one1.getGroupStatus() == 1) {
goodsGroupPurchaseeVO1.setGroupStatus(
GroupStatusEnum.FORMED_INTO_A_GROUP);
}
if (one1.getGroupStatus() == 2) {
goodsGroupPurchaseeVO1.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
}
} else {
if (data.getGroupStatus().getCode() == 1) {
goodsGroupPurchaseeVO1.setGroupStatus(GroupStatusEnum.TO_FORM_A_GROUP);
}
if (data.getGroupStatus().getCode() == 2) {
goodsGroupPurchaseeVO1.setGroupStatus(
GroupStatusEnum.FORMED_INTO_A_GROUP);
}
if (data.getGroupStatus().getCode() == 3) {
goodsGroupPurchaseeVO1.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
}
}
}
}
}
return HomeGoodsSeckillVOPageDTO;
}
/**
* 根据优惠券id集合查询订单列表
*
* @param couponIds 优惠券id集合
* @return List
*/
@Override
public List getOrderByCouponIds(Collection couponIds) {
return this.lambdaQuery().in(Order::getCouponId, couponIds)
.ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).eq(Order::getIsRequest, 1)
.list();
}
/**
* 商城订单分页列表
*
* @param query 商城订单查询对象
* @return PageDTO
*/
@Override
public PageDTO getOrderPage(MgtOrderQuery query) {
PageDTO pageVO;
// 封装会员条件查询对象
MemberDTO memberDTO = null;
Set memberIdSet = null;
Page page = new Page<>(query.getPageCurr(), query.getPageSize());
if (StringUtils.isNotBlank(query.getNickname()) || StringUtils.isNotBlank(
query.getPhone())) {
memberDTO = new MemberDTO();
memberDTO.setNickname(query.getNickname());
memberDTO.setPhone(query.getPhone());
}
if (StringUtils.isNotNull(memberDTO)) {
// 远程调用会员服务进行条件查询
List memberList = memberClient.getMemberListByCondition(memberDTO,
SecurityConstants.INNER).getData();
if (StringUtils.isEmpty(memberList)) {
return PageDTO.empty(page);
}
memberIdSet = memberList.stream().map(Member::getId)
.collect(Collectors.toSet());
}
page = this.lambdaQuery()
.in(StringUtils.isNotEmpty(memberIdSet), Order::getMemberId, memberIdSet)
.ne(StringUtils.isNotNull(query.getQueryType()) && query.getQueryType()
.equals(OrderTypeEnum.MALL_ODER), Order::getOrderFrom,
OrderFromEnum.AUCTION_ORDERS)
.eq(StringUtils.isNotNull(query.getQueryType()) && query.getQueryType()
.equals(OrderTypeEnum.AUCTION_ORDER), Order::getOrderFrom,
OrderFromEnum.AUCTION_ORDERS)
.like(StringUtils.isNotBlank(query.getOrderNo()), Order::getOrderNo,
query.getOrderNo())
.eq(StringUtils.isNotNull(query.getOrderFrom()) && query.getQueryType()
.equals(OrderTypeEnum.MALL_ODER), Order::getOrderFrom,
query.getOrderFrom())
.like(StringUtils.isNotBlank(query.getSkuName()), Order::getSkuName,
query.getSkuName())
.eq(StringUtils.isNotNull(query.getOrderStatus()), Order::getOrderStatus,
query.getOrderStatus())
.eq(StringUtils.isNotNull(query.getOrderStatus()) && query.getOrderStatus()
.equals(OrderStatusEnum.FINISHED), Order::getIsRequest, 1)
.orderByDesc(Order::getCreateTime)
.page(new Page<>(query.getPageCurr(), query.getPageSize()));
if (StringUtils.isEmpty(page.getRecords())) {
pageVO = PageDTO.empty(page);
}
pageVO = PageDTO.of(page, MgtOrderVO.class);
List voList = pageVO.getList();
List orderIdList = voList.stream().filter(order -> order.getIsRequest().equals(2))
.map(MgtOrderVO::getId).collect(
Collectors.toList());
if (CollUtils.isNotEmpty(orderIdList)) {
List orderReturnRequestList = orderReturnRequestService.lambdaQuery()
.in(OrderReturnRequest::getOrderId, orderIdList)
.eq(OrderReturnRequest::getStatus, ReturnRequestStatusEnum.COMPLETED)
.eq(OrderReturnRequest::getAuditStatus, AuditStatusEnum.PASSED).list();
List orderReturnRequestPassedIds = orderReturnRequestList.stream()
.map(OrderReturnRequest::getOrderId)
.collect(Collectors.toList());
for (MgtOrderVO order : voList) {
if (orderReturnRequestPassedIds.contains(order.getId())) {
order.setIsRequest(3);
}
}
}
if (query.getQueryType() == OrderTypeEnum.AUCTION_ORDER) {
List list = voList;
// 封装参数查询拍卖会
Set auctionSalesroomGoodsIdSet = list.stream()
.filter(order -> order.getAuctionOrderType()
== AuctionOrderTypeEnum.AUCTION_ITEMS)
.map(MgtOrderVO::getGoodsSkuId).collect(Collectors.toSet());
List auctionSalesroomList = auctionClient.getAuctionSalesroomByIds(
auctionSalesroomGoodsIdSet, SecurityConstants.INNER)
.getData();
Map salesroomMap = new HashedMap();
Set auctionSalesroomSet = new HashSet<>();
if (CollUtils.isNotEmpty(auctionSalesroomList)) {
salesroomMap = auctionSalesroomList.stream()
.collect(Collectors.toMap(AuctionSalesroom::getId,
AuctionSalesroom::getSalesroomName));
}
// 封装参数查询拍卖订单保证金
Set auctionGoodsIdSet = list.stream()
.filter(order -> order.getAuctionOrderType()
== AuctionOrderTypeEnum.REGULAR_ITEMS)
.map(MgtOrderVO::getGoodsSkuId)
.collect(Collectors.toSet());
List auctionSalesroomBondList = orderAuctionBondMapper.selectList(
Wrappers.lambdaQuery(OrderAuctionBond.class)
.in(CollUtils.isNotEmpty(auctionSalesroomSet),
OrderAuctionBond::getAuctionSalesroomId, auctionSalesroomSet)
.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)
.groupBy(OrderAuctionBond::getAuctionSalesroomId,
OrderAuctionBond::getMemberId));
List auctionGoodsBondList = orderAuctionBondMapper.selectList(
Wrappers.lambdaQuery(OrderAuctionBond.class)
.in(CollUtils.isNotEmpty(auctionGoodsIdSet),
OrderAuctionBond::getAuctionGoodsId, auctionGoodsIdSet)
.eq(OrderAuctionBond::getBoundStatus,
BondStatusEnum.PAID)
.groupBy(OrderAuctionBond::getAuctionGoodsId,
OrderAuctionBond::getMemberId));
Map auctionSalesroomBondMap = auctionSalesroomBondList.stream()
.filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.AUCTION_ITEMS)
.collect(Collectors.toMap(
bond -> bond.getAuctionSalesroomId() + "-" + bond.getMemberId(),
Function.identity()));
Map auctionSalesroomGoodsBondMap = auctionGoodsBondList.stream()
.filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.REGULAR_ITEMS)
.collect(Collectors.toMap(
bond -> bond.getAuctionGoodsId() + "-" + bond.getMemberId(),
Function.identity()));
for (MgtOrderVO order : list) {
if (order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) {
order.setSalesroomName(
StringUtils.isNotBlank(salesroomMap.get(order.getAuctionSalesroomId()))
? salesroomMap.get(order.getAuctionSalesroomId()) : "无");
order.setBoundStatus(
StringUtils.isNotNull(auctionSalesroomBondMap.get(
order.getAuctionSalesroomId() + "-" + order.getMemberId()))
? auctionSalesroomBondMap.get(
order.getAuctionSalesroomId() + "-" + order.getMemberId())
.getBoundStatus()
: null);
}
if (order.getAuctionOrderType() == AuctionOrderTypeEnum.REGULAR_ITEMS) {
order.setSalesroomName("无");
order.setBoundStatus(
StringUtils.isNotNull(auctionSalesroomGoodsBondMap.get(
order.getGoodsSkuId() + "-" + order.getMemberId()))
? auctionSalesroomGoodsBondMap.get(
order.getGoodsSkuId() + "-" + order.getMemberId())
.getBoundStatus()
: null);
}
}
}
Set memberVoIdSet = voList.stream().map(MgtOrderVO::getMemberId)
.collect(Collectors.toSet());
List data = memberClient.getMemberListByIds(memberVoIdSet, SecurityConstants.INNER)
.getData();
if (CollUtils.isNotEmpty(data)) {
Map memberMap = data.stream()
.collect(Collectors.toMap(Member::getId, e -> e));
voList = voList.stream().peek(order -> {
Member member = memberMap.get(order.getMemberId());
if (StringUtils.isNotNull(member)) {
order.setNickname(member.getNickname());
order.setPhone(member.getPhone());
}
}).collect(Collectors.toList());
}
return pageVO;
}
/**
* 获取商城订单详情
*
* @param id 订单id
* @return MgtMallOrderVO
*/
@Override
public MgtOrderVO getOrderDetail(Long id) {
Order order = this.getById(id);
MgtOrderVO mgtOrderVO = BeanUtils.copyBean(order, MgtOrderVO.class);
// 查询用户信息
Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER)
.getData();
if (StringUtils.isNotNull(member)) {
mgtOrderVO.setNickname(member.getNickname());
mgtOrderVO.setPhone(member.getPhone());
}
// 拍卖订单查询拍卖会信息
if (order.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS && (order.getAuctionOrderType()
== AuctionOrderTypeEnum.AUCTION_ITEMS)) {
List auctionSalesroom = auctionClient.getAuctionSalesroomByIds(
Lists.newArrayList(order.getGoodsSkuId())
, SecurityConstants.INNER).getData();
if (StringUtils.isNotNull(auctionSalesroom)) {
mgtOrderVO.setSalesroomName(auctionSalesroom.get(0).getSalesroomName());
}
}
// 查询售后信息
if (order.getIsRequest() == 2) {
OrderReturnRequest orderReturnRequest = orderReturnRequestService.getOne(
Wrappers.lambdaQuery(OrderReturnRequest.class)
.eq(OrderReturnRequest::getOrderId,
order.getId()).last("limit 1"));
if (StringUtils.isNotNull(orderReturnRequest)) {
mgtOrderVO.setReturnRequestVO(BeanUtils.copyBean(orderReturnRequest,
MgtOrderReturnRequestVO.class));
}
}
// 如果订单状态为已发货、已完成、售后, 查询物流信息
if (order.getOrderStatus() == OrderStatusEnum.GOODS_TO_BE_RECEIVED
|| order.getOrderStatus() == OrderStatusEnum.FINISHED
|| order.getOrderStatus() == OrderStatusEnum.AFTER_SALE) {
LogisticsDTO logisticsDTO = new LogisticsDTO();
logisticsDTO.setCompany(order.getLogisticsNum());
logisticsDTO.setPostid(order.getCourierNumber());
Express100VO logisticsList = logisticsService.getLogisticsList(logisticsDTO);
if (StringUtils.isNotNull(logisticsList)) {
mgtOrderVO.setExpress100VO(logisticsList);
}
}
if (order.getOrderFrom() == OrderFromEnum.SNAP_ORDERS) {
GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(order.getGoodsSkuId(),
SecurityConstants.INNER).getData();
mgtOrderVO.setSeckillPrice(data.getSeckillPrice());
} else if (order.getOrderFrom() == OrderFromEnum.GROUP_PURCHASE_ORDERS) {
GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(
order.getGoodsSkuId(),
SecurityConstants.INNER).getData();
mgtOrderVO.setGroupPurchasesPrice(data.getGroupPurchasePrice());
}
return mgtOrderVO;
}
/**
* 确认发货
*
* @param dto 确认发货请求对象
*/
@Override
public void confirmShipmentOrder(MgtOrderConfirmShipmentDTO dto) {
Order order = getOrder(dto.getId());
order.setOrderStatus(OrderStatusEnum.GOODS_TO_BE_RECEIVED);
order.setDeliveryTime(LocalDateTime.now());
order.setCourierNumber(dto.getCourierNumber());
order.setLogisticsNum(dto.getLogisticsNum());
this.updateById(order);
}
/**
* 已收货
*
* @param id 订单id
*/
@Override
public void receivedGoods(Long id) {
Order order = getOrder(id);
if (order.getOrderStatus() == OrderStatusEnum.GOODS_TO_BE_RECEIVED) {
order.setOrderStatus(OrderStatusEnum.FINISHED);
order.setReceiveTime(LocalDateTime.now());
this.updateById(order);
// 拍卖订单退保证金
if (order.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS) {
refundBond(id);
}
}
}
/**
* 退款
*
* @param id 订单id
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional
public void refund(Long id) {
Order order = getOrder(id);
if (order.getIsRequest() == 2) {
throw new ServiceException("该订单已是售后状态");
}
String orderNo = order.getOrderNo();
Optional paylogOpt = iPaylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo)
.last("limit 1").oneOpt();
PaymentMethodEnum paymentMethod = order.getPaymentMethod();
if (paylogOpt.isPresent()) {
Paylog paylog = paylogOpt.get();
boolean result = handleRefund(paymentMethod, paylog, orderNo);
if (result) {
paylog.setState(3);// 已退款
iPaylogService.updateById(paylog);
}
}
order.setIsRequest(2);
this.updateById(order);
// 生成售后记录
OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
orderReturnRequest.setOrderId(id);
orderReturnRequest.setRequestTime(LocalDateTime.now());
orderReturnRequest.setRequestType(RequestTypeEnum.REFUND);
orderReturnRequest.setRequestReason("管理后台退款");
orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED);
orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
orderReturnRequest.setAuditTime(LocalDateTime.now());
orderReturnRequestService.save(orderReturnRequest);
// 扣除订单积分
Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER)
.getData();
if (StringUtils.isNotNull(member)) {
MemberPointsDTO memberPointsDTO = new MemberPointsDTO();
memberPointsDTO.setMemberId(order.getMemberId());
memberPointsDTO.setPointsType(2);
memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE);
memberPointsDTO.setPoints(order.getPoints());
memberClient.addMemberPoints(memberPointsDTO);
updMembeOneDTO updMembeOneDTO = new updMembeOneDTO();
updMembeOneDTO.setMemberId(order.getMemberId());
updMembeOneDTO.setType(2);
updMembeOneDTO.setTotalPoints(Math.max(member.getTotalPoints() - order.getPoints(), 0));
memberClient.updMembeOne(updMembeOneDTO, SecurityConstants.INNER);
}
if (Objects.nonNull(order.getCouponId())) {
CouponMemberDTO dto = new CouponMemberDTO();
dto.setId(order.getCouponId());
dto.setCouponStatus(CouponUseEnum.UNUSED.getCode());
promotionClient.updCouponMember(dto, SecurityConstants.INNER);
}
}
private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) {
boolean result = false;
if (paymentMethod == PaymentMethodEnum.WECHAT) {
String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100D);
int refundFee = Integer.parseInt(
refundMoney.substring(0, refundMoney.length() - 3));
String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100D);
Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
String refundNo = OrderUtil.getOrderNoForPrefix("R");
result = paylogService.refundForWxpay(2, paylog.getTradeNo(),
paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "4");
} else if (paymentMethod == PaymentMethodEnum.ALIPAY) {
result = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(),
paylog.getPayMoney());
}
return result;
}
/**
* 退款退货
*
* @param id 订单id
*/
@Override
public void refundReturn(Long id) {
Order order = getOrder(id);
if (order.getIsRequest() == 2) {
throw new ServiceException("该订单已是售后状态");
}
if (order.getOrderStatus() == OrderStatusEnum.FINISHED) {
OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
order.setIsRequest(2);
this.updateById(order);
MgtAfterSaleSettingDTO data = sysUserClient.getAfterSaleSetting().getData();
if (StringUtils.isNull(data)) {
throw new ServiceException("获取售后退货信息失败");
}
orderReturnRequest.setRecipientName(data.getReceiverName());
orderReturnRequest.setRecipientPhone(data.getReceiverPhone());
orderReturnRequest.setDetailedAddress(data.getReceiverAddress());
orderReturnRequest.setOrderId(id);
orderReturnRequest.setRequestTime(LocalDateTime.now());
orderReturnRequest.setRequestType(RequestTypeEnum.REFUNDS_AND_RETURNS);
orderReturnRequest.setRequestReason("管理后台退款退货");
orderReturnRequest.setStatus(ReturnRequestStatusEnum.TO_BE_RETURNED);
orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
orderReturnRequest.setAuditTime(LocalDateTime.now());
orderReturnRequestService.save(orderReturnRequest);
}
}
private Order getOrder(Long id) {
Order order = this.getById(id);
if (StringUtils.isNull(order)) {
throw new ServiceException("订单不存在");
}
return order;
}
/**
* 拍卖订单退保证金
*
* @param id 订单id
*/
@Override
public void refundBond(Long id) {
Order order = getOrder(id);
OrderAuctionBond orderAuctionBond;
if (order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) {
orderAuctionBond = orderAuctionBondMapper.selectOne(
Wrappers.lambdaQuery(OrderAuctionBond.class)
.eq(OrderAuctionBond::getAuctionSalesroomId,
order.getAuctionSalesroomId())
.eq(OrderAuctionBond::getMemberId, order.getMemberId())
.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID));
} else {
orderAuctionBond = orderAuctionBondMapper.selectOne(
Wrappers.lambdaQuery(OrderAuctionBond.class)
.eq(OrderAuctionBond::getAuctionGoodsId,
order.getGoodsSkuId())
.eq(OrderAuctionBond::getMemberId, order.getMemberId())
.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID));
}
if (StringUtils.isNotNull(orderAuctionBond)) {
Optional paylogOpt = iPaylogService.lambdaQuery()
.in(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo())
.oneOpt();
if (paylogOpt.isPresent()) {
Paylog paylog = paylogOpt.get();
boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog,
orderAuctionBond.getOrderNo());
if (result) {
paylog.setState(3);// 已退款
orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED);
iPaylogService.updateById(paylog);
orderAuctionBondMapper.updateById(orderAuctionBond);
}
}
}
}
/**
* 查询统计订单列表
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return List
*/
@Override
public List getStaticsOrderList(LocalDateTime startTime, LocalDateTime endTime) {
return baseMapper.getStaticsOrderList(startTime, endTime);
}
@Override
public List getOrderListByMubres(List mubres) {
return this.lambdaQuery().in(Order::getGroupNo, mubres).list();
}
@Override
public void updateOrderStatusByMubres(List formedGroupMubres) {
this.lambdaUpdate().set(Order::getIsOrder, 1).in(Order::getGroupNo, formedGroupMubres)
.update();
}
@Override
public void updateOrderStatusByMubres1(String formedGroupMubres) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
wrapper.eq(Order::getGroupNo, formedGroupMubres);
List page1 = this.list(wrapper);
log.info("开始更新订单,已成团的团购订单:{}", page1);
for (Order p:page1){
p.setIsOrder(1);
this.updateById(p);
}
}
@Override
public List updateOrderStatusByMubres2(String formedGroupMubres) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
wrapper.eq(Order::getGroupNo, formedGroupMubres);
List page1 = this.list(wrapper);
return page1;
}
/**
* 根据skuId获取心愿求购详情数据
*
* @param id
* @return
*/
@Override
public MgtPromotionWishRecommendVO getWishDataBySkuId(Long id) {
MgtPromotionWishRecommendVO vo = null;
List list = this.lambdaQuery().eq(Order::getGoodsSkuId, id)
.eq(Order::getOrderFrom, OrderFromEnum.WISH_ORDER)
.ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).list();
if (CollUtils.isNotEmpty(list)) {
vo = new MgtPromotionWishRecommendVO();
Integer purchasedNum = list.stream().map(Order::getGoodsQuantity)
.reduce(0, Integer::sum);
String orderNo = list.stream().map(Order::getOrderNo).collect(Collectors.joining(","));
vo.setPurchasedNum(purchasedNum);
vo.setOrderNo(orderNo);
}
return vo;
}
}