package com.medusa.gruul.order.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.medusa.gruul.account.api.entity.MiniAccountAddress;
import com.medusa.gruul.account.api.enums.BlacklistEnum;
import com.medusa.gruul.account.api.feign.RemoteMiniAccountService;
import com.medusa.gruul.account.api.model.*;
import com.medusa.gruul.afs.api.entity.AfsOrder;
import com.medusa.gruul.afs.api.enums.AfsOrderStatusEnum;
import com.medusa.gruul.common.core.constant.TimeConstants;
import com.medusa.gruul.common.core.exception.ServiceException;
import com.medusa.gruul.common.core.util.*;
import com.medusa.gruul.common.data.tenant.ShopContextHolder;
import com.medusa.gruul.common.data.tenant.TenantContextHolder;
import com.medusa.gruul.common.dto.CurShopInfoDto;
import com.medusa.gruul.common.dto.CurUserDto;
import com.medusa.gruul.goods.api.constant.GoodsSkuStockRedisKey;
import com.medusa.gruul.goods.api.entity.SkuStock;
import com.medusa.gruul.goods.api.feign.RemoteGoodsService;
import com.medusa.gruul.goods.api.model.vo.manager.ItemVo;
import com.medusa.gruul.goods.api.param.OperateStockDto;
import com.medusa.gruul.logistics.api.feign.RemoteLogisticsFeginService;
import com.medusa.gruul.logistics.model.dto.manager.CountCostDto;
import com.medusa.gruul.logistics.model.dto.manager.LogisticsFreightDto;
import com.medusa.gruul.order.api.constant.OrderCode;
import com.medusa.gruul.order.api.constant.OrderConstant;
import com.medusa.gruul.order.api.constant.OrderFailedRedisKey;
import com.medusa.gruul.order.api.constant.OrderQueueEnum;
import com.medusa.gruul.order.api.entity.*;
import com.medusa.gruul.order.api.enums.DeliverTypeEnum;
import com.medusa.gruul.order.api.enums.OrderStatusEnum;
import com.medusa.gruul.order.api.enums.OrderTypeEnum;
import com.medusa.gruul.order.api.enums.PayTypeEnum;
import com.medusa.gruul.order.api.model.*;
import com.medusa.gruul.order.mapper.*;
import com.medusa.gruul.order.model.*;
import com.medusa.gruul.order.mq.Sender;
import com.medusa.gruul.order.service.IMiniOrderService;
import com.medusa.gruul.order.service.IOrderShareSettingService;
import com.medusa.gruul.payment.api.feign.RemotePaymentService;
import com.medusa.gruul.payment.api.model.dto.PayRequestDto;
import com.medusa.gruul.payment.api.model.dto.PayResultDto;
import com.medusa.gruul.payment.api.model.dto.RefundNotifyResultDto;
import com.medusa.gruul.platform.api.feign.RemoteMiniInfoService;
import com.medusa.gruul.platform.api.model.dto.ShopConfigDto;
import com.medusa.gruul.platform.api.model.vo.PayInfoVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 订单表 服务实现类
* </p>
*
* @author alan
* @since 2019 -09-02
*/
@Slf4j
@Service
public class MiniOrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IMiniOrderService {
@Resource
private RemoteGoodsService remoteGoodsService;
@Resource
private RemotePaymentService remotePaymentService;
@Resource
private RemoteMiniAccountService remoteMiniAccountService;
@Resource
private RemoteLogisticsFeginService remoteLogisticsFeginService;
@Resource
private IOrderShareSettingService orderShareSettingService;
@Resource
private OrderDeliveryMapper orderDeliveryMapper;
@Resource
private OrderSettingMapper orderSettingMapper;
@Resource
private OrderItemMapper orderItemMapper;
@Resource
private OrderEvaluateMapper orderEvaluateMapper;
@Resource
private OrderProductEvaluateMapper productEvaluateMapper;
@Resource
private Sender sender;
@Resource
private RemoteMiniInfoService remoteMiniInfoService;
@Resource
private AfsOrderMapper afsOrderMapper;
/**
* 根据用户选择的商品返回结算页需要的数据
*
* @param dto
* @return com.medusa.gruul.order.model.ConfirmOrderVo
* @author alan
* @date 2020/7/26 14:19
*/
@Override
public ConfirmOrderVo getConfirmOrder(ConfirmOrderDto dto) {
TimeInterval timer = DateUtil.timer();
CurUserDto curUserDto = CurUserUtil.getHttpCurUser();
if (ObjectUtil.isNull(curUserDto)) {
throw new ServiceException(SystemCode.UNAUTHORIZED);
}
log.info("当前用户信息:" + curUserDto.toString());
ConfirmOrderVo result = new ConfirmOrderVo();
GoodsSkuStockRedisKey redisStock = new GoodsSkuStockRedisKey();
//查询商品库存情况
List<ItemVo> itemVoList = remoteGoodsService.findItemVoByIds(dto.getItemSkuIds());
if (CollUtil.isEmpty(itemVoList)) {
throw new ServiceException(OrderCode.DATA_HAS_BEEN_UPDATED);
}
Map<Long, ItemVo> itemVoMap = itemVoList.stream().collect(Collectors.toMap(ItemVo::getProductSkuId, v -> v));
for (ItemDto item : dto.getItems()) {
ItemVo itemVo = itemVoMap.get(item.getSkuId());
itemVo.setProductQuantity(item.getNumber());
String stock = redisStock.get(item.getSkuId().toString());
if (ObjectUtil.isNull(stock)) {
throw new ServiceException(OrderCode.THIRD_PARTY_SERVICE_EXCEPTION);
}
if (Integer.parseInt(stock) > item.getNumber()) {
//库存状态:0->有库存
itemVo.setStatus(0);
} else {
//库存状态:1->无库存
itemVo.setStatus(1);
}
}
result.setItemVoList(itemVoList);
log.info(ObjectUtil.isNotNull(itemVoList) ? itemVoList.toString() : "");
log.info("查询商品耗时{}ms", timer.intervalRestart());
//查询用户持有的积分、收货地址
AccountInfoDto accountInfoDto = remoteMiniAccountService.accountInfo(curUserDto.getUserId(), Arrays.asList(2,
3, 5));
result.setMiniAccountAddress(accountInfoDto.getMiniAccountAddress());
log.info(ObjectUtil.isNotNull(accountInfoDto) ? accountInfoDto.toString() : "");
log.info("查询用户耗时{}ms", timer.intervalRestart());
//Todo 查询用户的会员情况
//Todo 查询积分使用规则
//Todo 查询满减活动信息
//Todo 查询单个客户优惠劵信息
return result;
}
/**
* 获取运费的参数包装类,将参数包装成需要的格式
*
* @param miniAccountAddress
* @param deliverType
* @param itemDtoList
* @return com.medusa.gruul.shipping.model.dto.CountCostDto
* @author alan
* @date 2020/7/26 14:32
*/
private CountCostDto getFreightAmount(MiniAccountAddress miniAccountAddress,
DeliverTypeEnum deliverType,
List<ItemDto> itemDtoList) {
//查询运费
log.info("miniAccountAddress is {}", JSONUtil.toJsonStr(miniAccountAddress));
log.info("deliverType is {}", deliverType.getDesc());
CountCostDto countCostDto;
GetCostDto getCostDto = new GetC
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目介绍 Smart Shop是一款基于 Spring Cloud +MybatisPlus+XXL-JOB+redis+Vue的前后端分离、分布式、微服务架构的Java商城系统,采用稳定框架开发及优化核心,减少依赖,具备出色的执行效率,扩展性、稳定性高,H5/小程序/APP三端合一数据打通,Smart shop将持续收集大家反馈不断更新迭代,并经过了生产环境反复线上论证和大量真实用户数据使用的考验。 项目介绍 Smart Shop是一款基于 Spring Cloud +MybatisPlus+XXL-JOB+redis+Vue的前后端分离、分布式、微服务架构的Java商城系统,采用稳定框架开发及优化核心,减少依赖,具备出色的执行效率,扩展性、稳定性高,H5/小程序/APP三端合一数据打通,Smart shop将持续收集大家反馈不断更新迭代,并经过了生产环境反复线上论证和大量真实用户数据使用的考验。 项目介绍 Smart Shop是一款基于 Spring Cloud +MybatisPlus+XXL-JOB+redis+Vue的前后端分离、分布式、微服务架构的Java商城系统,采用
资源详情
资源评论
资源推荐
收起资源包目录
SpringCloud+MybatisPlus+XXL-JOB+redis+Vue前后端分离、分布式、微服务架构Java商城系统 (2000个子文件)
index.css 95KB
local.css 74KB
local.css 74KB
ueditor.css 43KB
ueditor.min.css 34KB
video-js.css 21KB
image.css 18KB
video.css 15KB
attachment.css 14KB
video-js.min.css 11KB
index.css 10KB
index.css 10KB
m-layout.css 8KB
shCoreDefault.css 7KB
index.css 6KB
index.css 6KB
base.css 5KB
base.css 5KB
new_mmenu.css 5KB
scrawl.css 4KB
animation.css 4KB
animation.css 4KB
index.css 3KB
index.css 3KB
index.css 3KB
index.css 3KB
codemirror.css 3KB
charts.css 3KB
index.css 3KB
index.css 3KB
index.css 3KB
index.css 3KB
index.css 2KB
index.css 2KB
background.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
emotion.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
dialogbase.css 2KB
music.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 2KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
reset.css 1KB
reset.css 1KB
edittable.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
index.css 1KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
「已注销」
- 粉丝: 842
- 资源: 3601
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java游戏设计打飞机程序(源代码+论文).rar
- java作业管理系统设计(源代码+论文).rar
- 超市综合管理信息系统.rar
- 基于JAVA CS远程监控系统软件的实现(源代码+论文).rar
- 基于Java ME无线网络移动端的俄罗斯方块游戏的实现(论文,源代码).rar
- 基于Java的两个通用安全模块的设计与实现.rar
- 助力学子成长:SSM 架构下 JSP 驱动的勤工助学系统设计与落地
- 基于JAVA的RSA文件加密软件的设计与实现(源代码+论文).rar
- “非学勿扰”学习交流平台_zzq3d3h3.zip
- 高校师生工作室管理系统的设计与实现_1x1z4lu8.zip
- 多彩吉安红色旅游网站的设计与实现_e8803ewy.zip
- 基于JAVA的网络通讯系统设计与实现(论文+系统).rar
- 基于Java的在线购物系统的设计与实现(源代码+论文).rar
- 基于Java的五子棋游戏的设计(源代码+论文).rar
- 基于Misty1算法的加密软件(JAVA)的实现(源代码+论文).rar
- 家庭理财系统(java+applet).rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4