订单改改改
This commit is contained in:
parent
3b65094c2d
commit
294f9b6690
@ -30,14 +30,14 @@ public class OrderBiz {
|
|||||||
|
|
||||||
public PriceObj queryPrice(int goodsType, Long goodsId) {
|
public PriceObj queryPrice(int goodsType, Long goodsId) {
|
||||||
PriceObj priceObj = new PriceObj();
|
PriceObj priceObj = new PriceObj();
|
||||||
|
priceObj.setGoodsType(goodsType);
|
||||||
|
priceObj.setGoodsId(goodsId);
|
||||||
switch (goodsType) {
|
switch (goodsType) {
|
||||||
case 0: // video
|
case 0: // video
|
||||||
VideoRespVO video = videoMapper.getById(goodsId);
|
VideoRespVO video = videoMapper.getById(goodsId);
|
||||||
if (video == null) {
|
if (video == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
priceObj.setGoodsId(goodsId);
|
|
||||||
priceObj.setGoodsType(goodsType);
|
|
||||||
TemplateRespVO template = templateRepository.getTemplate(video.getTemplateId());
|
TemplateRespVO template = templateRepository.getTemplate(video.getTemplateId());
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
return priceObj;
|
return priceObj;
|
||||||
@ -85,6 +85,8 @@ public class OrderBiz {
|
|||||||
if (priceObj == null) {
|
if (priceObj == null) {
|
||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
|
respVO.setGoodsType(goodsType);
|
||||||
|
respVO.setGoodsId(goodsId);
|
||||||
respVO.setPrice(priceObj.getPrice());
|
respVO.setPrice(priceObj.getPrice());
|
||||||
respVO.setSlashPrice(priceObj.getSlashPrice());
|
respVO.setSlashPrice(priceObj.getSlashPrice());
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,12 @@ package com.ycwl.basic.controller.mobile;
|
|||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.ycwl.basic.biz.OrderBiz;
|
import com.ycwl.basic.biz.OrderBiz;
|
||||||
import com.ycwl.basic.constant.BaseContextHandler;
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
||||||
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
|
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
|
||||||
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
||||||
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
||||||
|
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
||||||
import com.ycwl.basic.model.wx.WxPayRespVO;
|
import com.ycwl.basic.model.wx.WxPayRespVO;
|
||||||
@ -14,6 +16,7 @@ import com.ycwl.basic.repository.OrderRepository;
|
|||||||
import com.ycwl.basic.service.mobile.GoodsService;
|
import com.ycwl.basic.service.mobile.GoodsService;
|
||||||
import com.ycwl.basic.service.pc.OrderService;
|
import com.ycwl.basic.service.pc.OrderService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
import com.ycwl.basic.utils.JwtTokenUtil;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -51,8 +54,9 @@ public class AppOrderController {
|
|||||||
|
|
||||||
@ApiOperation("用户端订单新增")
|
@ApiOperation("用户端订单新增")
|
||||||
@PostMapping("/addOrder")
|
@PostMapping("/addOrder")
|
||||||
public ApiResponse<WxPayRespVO> addOrder(@RequestBody OrderAddReq orderAddReq) throws Exception {
|
public ApiResponse<WxPayRespVO> addOrder(@RequestBody CreateOrderReqVO orderAddReq) throws Exception {
|
||||||
return orderService.add(orderAddReq);
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
|
return orderService.createOrder(worker.getUserId(), orderAddReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ import java.util.List;
|
|||||||
public interface OrderMapper {
|
public interface OrderMapper {
|
||||||
List<OrderRespVO> list(OrderReqQuery orderReqQuery);
|
List<OrderRespVO> list(OrderReqQuery orderReqQuery);
|
||||||
OrderRespVO getById(Long id);
|
OrderRespVO getById(Long id);
|
||||||
int add(OrderAddReq order);
|
int add(OrderEntity order);
|
||||||
// int deleteById(Long id);
|
// int deleteById(Long id);
|
||||||
int update(OrderUpdateReq order);
|
int update(OrderUpdateReq order);
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ import java.util.Date;
|
|||||||
public class OrderEntity {
|
public class OrderEntity {
|
||||||
@TableId
|
@TableId
|
||||||
private Long id;
|
private Long id;
|
||||||
|
private Long scenicId;
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.ycwl.basic.model.pc.order.req;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CreateOrderReqVO {
|
||||||
|
private Long scenicId;
|
||||||
|
private Integer goodsType;
|
||||||
|
private Long goodsId;
|
||||||
|
private String brokerCode;
|
||||||
|
private Long couponId;
|
||||||
|
}
|
@ -18,6 +18,7 @@ import java.io.Serializable;
|
|||||||
public class WxPayRespVO implements Serializable {
|
public class WxPayRespVO implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
private boolean needPay = true;
|
||||||
/**
|
/**
|
||||||
* 预支付交易会话标识小程序下单接口返回的prepay_id参数值
|
* 预支付交易会话标识小程序下单接口返回的prepay_id参数值
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,6 @@ import com.aliyuncs.utils.StringUtils;
|
|||||||
import com.wechat.pay.java.core.Config;
|
import com.wechat.pay.java.core.Config;
|
||||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||||
import com.wechat.pay.java.core.exception.ServiceException;
|
import com.wechat.pay.java.core.exception.ServiceException;
|
||||||
import com.wechat.pay.java.core.http.HttpMethod;
|
|
||||||
import com.wechat.pay.java.core.notification.NotificationConfig;
|
import com.wechat.pay.java.core.notification.NotificationConfig;
|
||||||
import com.wechat.pay.java.core.notification.NotificationParser;
|
import com.wechat.pay.java.core.notification.NotificationParser;
|
||||||
import com.wechat.pay.java.core.notification.RequestParam;
|
import com.wechat.pay.java.core.notification.RequestParam;
|
||||||
@ -46,7 +45,6 @@ import com.ycwl.basic.service.HttpService;
|
|||||||
import com.ycwl.basic.service.mobile.WxPayService;
|
import com.ycwl.basic.service.mobile.WxPayService;
|
||||||
import com.ycwl.basic.service.pc.OrderService;
|
import com.ycwl.basic.service.pc.OrderService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import com.ycwl.basic.utils.DateUtils;
|
|
||||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||||
import com.ycwl.basic.utils.WXPayUtil;
|
import com.ycwl.basic.utils.WXPayUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -204,42 +202,7 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
if (Objects.nonNull(OrderStateEnum)) {
|
if (Objects.nonNull(OrderStateEnum)) {
|
||||||
long orderId = Long.parseLong(parse.getOutTradeNo());
|
long orderId = Long.parseLong(parse.getOutTradeNo());
|
||||||
try {
|
notifyOrderSuccess(orderId);
|
||||||
orderService.updateOrderState(orderId, OrderStateEnum, null);
|
|
||||||
// 添加统计数据
|
|
||||||
statisticsHandler(orderId);
|
|
||||||
}catch (Exception e) {
|
|
||||||
log.error("[微信支付回调]更新订单状态失败", e);
|
|
||||||
}
|
|
||||||
OrderRespVO byId = orderMapper.getById(orderId);
|
|
||||||
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
|
|
||||||
orderItemList.forEach(orderItemVO -> {
|
|
||||||
orderRepository.clearUserBuyItemCache(byId.getMemberId(), orderItemVO.getGoodsType(), orderItemVO.getGoodsId());
|
|
||||||
switch (orderItemVO.getGoodsType()) {
|
|
||||||
case 0: // 成片
|
|
||||||
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
|
|
||||||
memberVideoEntity.setMemberId(byId.getMemberId());
|
|
||||||
memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
|
|
||||||
memberVideoEntity.setIsBuy(1);
|
|
||||||
memberVideoEntity.setOrderId(orderId);
|
|
||||||
videoMapper.updateRelation(memberVideoEntity);
|
|
||||||
break;
|
|
||||||
case 1: // 源视频
|
|
||||||
case 2: // 源素材
|
|
||||||
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
|
|
||||||
memberSourceEntity.setMemberId(byId.getMemberId());
|
|
||||||
// 源素材的goodsId是人脸ID
|
|
||||||
memberSourceEntity.setFaceId(orderItemVO.getGoodsId());
|
|
||||||
memberSourceEntity.setType(orderItemVO.getGoodsType());
|
|
||||||
memberSourceEntity.setIsBuy(1);
|
|
||||||
memberSourceEntity.setOrderId(orderId);
|
|
||||||
sourceMapper.updateRelation(memberSourceEntity);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -247,6 +210,45 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyOrderSuccess(Long orderId) {
|
||||||
|
try {
|
||||||
|
orderService.updateOrderState(orderId, OrderStateEnum.PAID, null);
|
||||||
|
// 添加统计数据
|
||||||
|
statisticsHandler(orderId);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error("[微信支付回调]更新订单状态失败", e);
|
||||||
|
}
|
||||||
|
OrderRespVO byId = orderMapper.getById(orderId);
|
||||||
|
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
|
||||||
|
orderItemList.forEach(orderItemVO -> {
|
||||||
|
orderRepository.clearUserBuyItemCache(byId.getMemberId(), orderItemVO.getGoodsType(), orderItemVO.getGoodsId());
|
||||||
|
switch (orderItemVO.getGoodsType()) {
|
||||||
|
case 0: // 成片
|
||||||
|
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
|
||||||
|
memberVideoEntity.setMemberId(byId.getMemberId());
|
||||||
|
memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
|
||||||
|
memberVideoEntity.setIsBuy(1);
|
||||||
|
memberVideoEntity.setOrderId(orderId);
|
||||||
|
videoMapper.updateRelation(memberVideoEntity);
|
||||||
|
break;
|
||||||
|
case 1: // 源视频
|
||||||
|
case 2: // 源素材
|
||||||
|
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
|
||||||
|
memberSourceEntity.setMemberId(byId.getMemberId());
|
||||||
|
// 源素材的goodsId是人脸ID
|
||||||
|
memberSourceEntity.setFaceId(orderItemVO.getGoodsId());
|
||||||
|
memberSourceEntity.setType(orderItemVO.getGoodsType());
|
||||||
|
memberSourceEntity.setIsBuy(1);
|
||||||
|
memberSourceEntity.setOrderId(orderId);
|
||||||
|
sourceMapper.updateRelation(memberSourceEntity);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
private void statisticsHandler(Long orderId) {
|
private void statisticsHandler(Long orderId) {
|
||||||
ApiResponse<OrderRespVO> orderDetail = orderService.detail(orderId);
|
ApiResponse<OrderRespVO> orderDetail = orderService.detail(orderId);
|
||||||
|
@ -2,6 +2,7 @@ package com.ycwl.basic.service.impl.pc;
|
|||||||
|
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import com.ycwl.basic.biz.OrderBiz;
|
||||||
import com.ycwl.basic.constant.BaseContextHandler;
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
import com.ycwl.basic.constant.NumberConstant;
|
import com.ycwl.basic.constant.NumberConstant;
|
||||||
import com.ycwl.basic.enums.*;
|
import com.ycwl.basic.enums.*;
|
||||||
@ -11,11 +12,13 @@ import com.ycwl.basic.model.jwt.JwtInfo;
|
|||||||
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
|
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
||||||
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
||||||
|
import com.ycwl.basic.model.mobile.order.PriceObj;
|
||||||
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
||||||
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
|
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
|
||||||
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
|
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
|
||||||
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
|
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
|
||||||
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
|
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
|
||||||
|
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
|
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
||||||
@ -70,6 +73,8 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
private OrderOperationMapper orderOperationMapper;
|
private OrderOperationMapper orderOperationMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private StatisticsMapper statisticsMapper;
|
private StatisticsMapper statisticsMapper;
|
||||||
|
@Autowired
|
||||||
|
private OrderBiz orderBiz;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
|
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
|
||||||
@ -89,92 +94,39 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
return ApiResponse.success(orderMapper.getById(orderId));
|
return ApiResponse.success(orderMapper.getById(orderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public ApiResponse<WxPayRespVO> add(OrderAddReq order) throws Exception {
|
|
||||||
Long orderId = SnowFlakeUtil.getLongId();
|
|
||||||
order.setId(orderId);
|
|
||||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
|
||||||
Long userId = worker.getUserId();
|
|
||||||
MemberRespVO memberRespVO = memberMapper.getById(userId);
|
|
||||||
order.setMemberId(userId);
|
|
||||||
order.setOpenid(memberRespVO.getOpenId());
|
|
||||||
|
|
||||||
/* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/
|
|
||||||
List<GoodsDetailVO> goodsItemList = order.getGoodsItemList();
|
|
||||||
GoodsDetailVO goodsDetailVO = goodsItemList.get(NumberConstant.ZERO);
|
|
||||||
if (order.getGoodsType() == null) {
|
|
||||||
order.setGoodsType(goodsDetailVO.getGoodsType());
|
|
||||||
}
|
|
||||||
GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq();
|
|
||||||
goodsPriceQueryReq.setGoodsId(goodsDetailVO.getGoodsId());
|
|
||||||
goodsPriceQueryReq.setGoodsType(order.getGoodsType());
|
|
||||||
goodsPriceQueryReq.setScenicId(order.getScenicId());
|
|
||||||
BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq).getData();
|
|
||||||
order.setPrice(price);
|
|
||||||
order.setPayPrice(price);
|
|
||||||
|
|
||||||
int add = orderMapper.add(order);
|
|
||||||
if (add == NumberConstant.ZERO) {
|
|
||||||
return ApiResponse.fail("订单添加失败");
|
|
||||||
} else {
|
|
||||||
Integer goodsType = order.getGoodsType();
|
|
||||||
List<OrderItemEntity> orderItems = new ArrayList<>();
|
|
||||||
goodsItemList.forEach(goodsDto -> {
|
|
||||||
Long goodsId = goodsDto.getGoodsId();
|
|
||||||
OrderItemEntity orderItemEntity = new OrderItemEntity();
|
|
||||||
orderItemEntity.setId(SnowFlakeUtil.getLongId());
|
|
||||||
orderItemEntity.setOrderId(orderId);
|
|
||||||
orderItemEntity.setGoodsType(goodsType);
|
|
||||||
orderItemEntity.setGoodsId(goodsId);
|
|
||||||
orderItems.add(orderItemEntity);
|
|
||||||
});
|
|
||||||
int addOrderItems = orderMapper.addOrderItems(orderItems);
|
|
||||||
if (addOrderItems == NumberConstant.ZERO) {
|
|
||||||
log.error("订单明细添加失败");
|
|
||||||
return ApiResponse.fail("订单添加失败");
|
|
||||||
}
|
|
||||||
//点击支付按钮统计
|
|
||||||
OrderRespVO orderRespVO = orderMapper.getById(orderId);
|
|
||||||
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
|
||||||
statisticsRecordAddReq.setMemberId(orderRespVO.getMemberId());
|
|
||||||
statisticsRecordAddReq.setType(StatisticEnum.CLICK_ON_PAYMENT.code);
|
|
||||||
statisticsRecordAddReq.setScenicId(orderRespVO.getScenicId());
|
|
||||||
statisticsRecordAddReq.setMorphId(orderId);
|
|
||||||
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
|
||||||
|
|
||||||
|
|
||||||
WxPayRespVO wxPayRespVO = initiatePayment(order, goodsDetailVO);
|
|
||||||
return ApiResponse.success(wxPayRespVO);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起支付
|
* 发起支付
|
||||||
* @param order 订单
|
* @param order 订单
|
||||||
* @param goodsDetailVO 商品详情
|
* @param orderItems 商品详情
|
||||||
* @return 支付请求结果
|
* @return 支付请求结果
|
||||||
*/
|
*/
|
||||||
private WxPayRespVO initiatePayment(OrderAddReq order,GoodsDetailVO goodsDetailVO) throws Exception {
|
private WxPayRespVO initiatePayment(OrderEntity order, List<OrderItemEntity> orderItems) throws Exception {
|
||||||
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();
|
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();
|
||||||
Integer goodsType = order.getGoodsType();
|
|
||||||
|
|
||||||
String goodsName = null;
|
String goodsName = null;
|
||||||
if (goodsType == NumberConstant.ONE) {
|
if (orderItems.size() > 1) {
|
||||||
goodsName = goodsDetailVO.getGoodsName();
|
goodsName = "多项景区VLOG商品";
|
||||||
} else if (goodsType == NumberConstant.TWO) {
|
} else {
|
||||||
Integer sourceType = goodsDetailVO.getSourceType();
|
int type = orderItems.get(NumberConstant.ZERO).getGoodsType();
|
||||||
goodsName = SourceTypeNameEnum.getRemark(sourceType);
|
if (type == NumberConstant.ZERO) {
|
||||||
|
goodsName = "景区VLog视频";
|
||||||
|
} else if (type == NumberConstant.ONE) {
|
||||||
|
goodsName = "景区原片包";
|
||||||
|
} else if (type == NumberConstant.TWO) {
|
||||||
|
goodsName = "景区照片包";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
|
||||||
wxPayOrderReqVO.setOpenId(order.getOpenid())
|
// 0元支付
|
||||||
|
WxPayRespVO wxPayRespVO = new WxPayRespVO();
|
||||||
|
wxPayRespVO.setNeedPay(false);
|
||||||
|
return wxPayRespVO;
|
||||||
|
}
|
||||||
|
wxPayOrderReqVO.setOpenId(order.getOpenId())
|
||||||
.setMemberId(order.getMemberId())
|
.setMemberId(order.getMemberId())
|
||||||
.setOrderSn(order.getId())
|
.setOrderSn(order.getId())
|
||||||
.setTotalPrice(BigDecimalUtil.convertToCents(order.getPrice()))
|
.setTotalPrice(BigDecimalUtil.convertToCents(order.getPrice()))
|
||||||
.setGoodsName(goodsName)
|
.setGoodsName(goodsName)
|
||||||
.setDescription("VLOG视频支付");
|
.setDescription(goodsName);
|
||||||
|
|
||||||
return wxPayService.createOrder(wxPayOrderReqVO);
|
return wxPayService.createOrder(wxPayOrderReqVO);
|
||||||
}
|
}
|
||||||
@ -319,4 +271,46 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
return ApiResponse.success(pageInfo);
|
return ApiResponse.success(pageInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO createOrderReqVO) throws Exception {
|
||||||
|
OrderEntity order = new OrderEntity();
|
||||||
|
Long orderId = SnowFlakeUtil.getLongId();
|
||||||
|
order.setId(orderId);
|
||||||
|
order.setMemberId(userId);
|
||||||
|
MemberRespVO member = memberMapper.getById(userId);
|
||||||
|
order.setOpenId(member.getOpenId());
|
||||||
|
order.setScenicId(createOrderReqVO.getScenicId());
|
||||||
|
List<OrderItemEntity> orderItems = new ArrayList<>();
|
||||||
|
OrderItemEntity orderItem = new OrderItemEntity();
|
||||||
|
orderItem.setGoodsId(createOrderReqVO.getGoodsId());
|
||||||
|
orderItem.setGoodsType(createOrderReqVO.getGoodsType());
|
||||||
|
orderItem.setOrderId(orderId);
|
||||||
|
orderItems.add(orderItem);
|
||||||
|
PriceObj priceObj = orderBiz.queryPrice(createOrderReqVO.getGoodsType(), createOrderReqVO.getGoodsId());
|
||||||
|
order.setPrice(priceObj.getPrice());
|
||||||
|
// promo code
|
||||||
|
// coupon
|
||||||
|
order.setPayPrice(priceObj.getPrice());
|
||||||
|
order.setStatus(OrderStateEnum.UNPAID.getState());
|
||||||
|
orderMapper.add(order);
|
||||||
|
int addOrderItems = orderMapper.addOrderItems(orderItems);
|
||||||
|
if (addOrderItems == NumberConstant.ZERO) {
|
||||||
|
log.error("订单明细添加失败");
|
||||||
|
return ApiResponse.fail("订单添加失败");
|
||||||
|
}
|
||||||
|
//点击支付按钮统计
|
||||||
|
OrderRespVO orderRespVO = orderMapper.getById(orderId);
|
||||||
|
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
||||||
|
statisticsRecordAddReq.setMemberId(orderRespVO.getMemberId());
|
||||||
|
statisticsRecordAddReq.setType(StatisticEnum.CLICK_ON_PAYMENT.code);
|
||||||
|
statisticsRecordAddReq.setScenicId(orderRespVO.getScenicId());
|
||||||
|
statisticsRecordAddReq.setMorphId(orderId);
|
||||||
|
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
||||||
|
|
||||||
|
|
||||||
|
WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems);
|
||||||
|
return ApiResponse.success(wxPayRespVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ public interface WxPayService {
|
|||||||
*/
|
*/
|
||||||
void payNotify(HttpServletRequest xml);
|
void payNotify(HttpServletRequest xml);
|
||||||
|
|
||||||
|
void notifyOrderSuccess(Long orderId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付结果查询
|
* 微信支付结果查询
|
||||||
*/
|
*/
|
||||||
|
@ -5,6 +5,7 @@ import com.ycwl.basic.enums.OrderStateEnum;
|
|||||||
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
||||||
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
||||||
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
|
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
|
||||||
|
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
|
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
||||||
@ -26,7 +27,7 @@ public interface OrderService {
|
|||||||
|
|
||||||
ApiResponse<OrderRespVO> detail(Long orderId);
|
ApiResponse<OrderRespVO> detail(Long orderId);
|
||||||
|
|
||||||
ApiResponse<WxPayRespVO> add(OrderAddReq query) throws Exception;
|
// ApiResponse<WxPayRespVO> add(OrderAddReq query) throws Exception;
|
||||||
|
|
||||||
ApiResponse<Integer> update(OrderUpdateReq query);
|
ApiResponse<Integer> update(OrderUpdateReq query);
|
||||||
|
|
||||||
@ -59,4 +60,6 @@ public interface OrderService {
|
|||||||
void remarkOrder(Long orderId, OrderEntity query);
|
void remarkOrder(Long orderId, OrderEntity query);
|
||||||
|
|
||||||
ApiResponse<PageInfo<OrderRespVO>> refundPageQuery(OrderReqQuery query);
|
ApiResponse<PageInfo<OrderRespVO>> refundPageQuery(OrderReqQuery query);
|
||||||
|
|
||||||
|
ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO orderAddReq) throws Exception;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
<result column="remark" property="remark"/>
|
<result column="remark" property="remark"/>
|
||||||
<result column="broker_id" property="brokerId"/>
|
<result column="broker_id" property="brokerId"/>
|
||||||
<result column="promo_code" property="promoCode"/>
|
<result column="promo_code" property="promoCode"/>
|
||||||
<result column="goods_type" property="goodsType"/>
|
|
||||||
<result column="refund_reason" property="refundReason"/>
|
<result column="refund_reason" property="refundReason"/>
|
||||||
<result column="refund_status" property="refundStatus"/>
|
<result column="refund_status" property="refundStatus"/>
|
||||||
<result column="status" property="status"/>
|
<result column="status" property="status"/>
|
||||||
@ -40,7 +39,6 @@
|
|||||||
<result column="price" property="price"/>
|
<result column="price" property="price"/>
|
||||||
<result column="pay_price" property="payPrice"/>
|
<result column="pay_price" property="payPrice"/>
|
||||||
<result column="remark" property="remark"/>
|
<result column="remark" property="remark"/>
|
||||||
<result column="goods_type" property="goodsType"/>
|
|
||||||
<result column="refund_reason" property="refundReason"/>
|
<result column="refund_reason" property="refundReason"/>
|
||||||
<result column="refund_status" property="refundStatus"/>
|
<result column="refund_status" property="refundStatus"/>
|
||||||
<result column="status" property="status"/>
|
<result column="status" property="status"/>
|
||||||
@ -113,13 +111,13 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="add">
|
<insert id="add">
|
||||||
insert into `order`(id, member_id, openid,price, pay_price, remark, broker_id, promo_code,goods_type,scenic_id)
|
insert into `order`(id, member_id, openid, price, pay_price, remark, broker_id, promo_code, scenic_id)
|
||||||
VALUES (#{id}, #{memberId}, #{openid},#{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode},#{goodsType},#{scenicId})
|
VALUES (#{id}, #{memberId}, #{openId}, #{price}, #{payPrice}, #{remark}, #{brokerId}, #{promoCode}, #{scenicId})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="addOrderItems">
|
<insert id="addOrderItems">
|
||||||
insert into order_item(id, order_id,goods_type, goods_id) VALUES
|
insert into order_item(order_id,goods_type, goods_id) VALUES
|
||||||
<foreach collection="orderItems" item="item" index="index" separator=",">
|
<foreach collection="orderItems" item="item" index="index" separator=",">
|
||||||
(#{item.id}, #{item.orderId}, #{item.goodsType},#{item.goodsId})
|
(#{item.orderId}, #{item.goodsType},#{item.goodsId})
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</insert>
|
||||||
<update id="update">
|
<update id="update">
|
||||||
@ -160,13 +158,11 @@
|
|||||||
</delete>
|
</delete>
|
||||||
<select id="list" resultMap="PCBaseResultMap">
|
<select id="list" resultMap="PCBaseResultMap">
|
||||||
select distinct o.id, o.scenic_id, s.name as scenic_name, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
select distinct o.id, o.scenic_id, s.name as scenic_name, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
||||||
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id, o.create_at
|
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, oi.goods_id, o.create_at
|
||||||
from `order` AS o
|
from `order` AS o
|
||||||
left join member m on o.member_id = m.id
|
left join member m on o.member_id = m.id
|
||||||
left join scenic s on o.scenic_id = s.id
|
left join scenic s on o.scenic_id = s.id
|
||||||
left join order_item oi on o.id = oi.order_id
|
left join order_item oi on o.id = oi.order_id
|
||||||
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
|
|
||||||
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
|
|
||||||
<where>
|
<where>
|
||||||
<if test="id!= null ">
|
<if test="id!= null ">
|
||||||
and o.id = #{id}
|
and o.id = #{id}
|
||||||
@ -247,7 +243,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<select id="appList" resultMap="AppBaseResultMap">
|
<select id="appList" resultMap="AppBaseResultMap">
|
||||||
select DISTINCT o.id, o.member_id,o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
select DISTINCT o.id, o.member_id,o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
||||||
refund_reason, refund_status, o.`status`, o.create_at, refund_at, pay_at, cancel_at, o.goods_type,
|
refund_reason, refund_status, o.`status`, o.create_at, refund_at, pay_at, cancel_at,
|
||||||
sc.name scenicName
|
sc.name scenicName
|
||||||
from `order` AS o
|
from `order` AS o
|
||||||
left join scenic sc on o.scenic_id = sc.id
|
left join scenic sc on o.scenic_id = sc.id
|
||||||
@ -255,15 +251,12 @@
|
|||||||
<if test="memberId!=null">
|
<if test="memberId!=null">
|
||||||
and o.member_id=#{memberId}
|
and o.member_id=#{memberId}
|
||||||
</if>
|
</if>
|
||||||
<if test="type!= null ">
|
|
||||||
and o.goods_type = #{type}
|
|
||||||
</if>
|
|
||||||
</where>
|
</where>
|
||||||
order by o.create_at desc
|
order by o.create_at desc
|
||||||
</select>
|
</select>
|
||||||
<select id="appDetail" resultMap="AppBaseResultMap">
|
<select id="appDetail" resultMap="AppBaseResultMap">
|
||||||
select distinct o.id, o.member_id,o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
select distinct o.id, o.member_id,o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
||||||
refund_reason, refund_status, o.`status`, o.create_at, refund_at, pay_at, cancel_at, o.goods_type,
|
refund_reason, refund_status, o.`status`, o.create_at, refund_at, pay_at, cancel_at,
|
||||||
o.scenic_id, sc.name scenicName
|
o.scenic_id, sc.name scenicName
|
||||||
from `order` AS o
|
from `order` AS o
|
||||||
left join member m on o.member_id = m.id
|
left join member m on o.member_id = m.id
|
||||||
@ -272,13 +265,11 @@
|
|||||||
</select>
|
</select>
|
||||||
<select id="refundList" resultType="com.ycwl.basic.model.pc.order.resp.OrderRespVO">
|
<select id="refundList" resultType="com.ycwl.basic.model.pc.order.resp.OrderRespVO">
|
||||||
select distinct o.id, o.scenic_id, s.name as scenic_name, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
select distinct o.id, o.scenic_id, s.name as scenic_name, o.member_id,m.nickname ,m.real_name , o.openid, o.price, pay_price, remark, o.broker_id, o.promo_code,
|
||||||
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, o.goods_type, oi.goods_id, o.create_at
|
refund_reason, refund_status, o.`status`, refund_at, pay_at, cancel_at,oi.id oiId, oi.goods_id, o.create_at
|
||||||
from `order` AS o
|
from `order` AS o
|
||||||
left join member m on o.member_id = m.id
|
left join member m on o.member_id = m.id
|
||||||
left join scenic s on o.scenic_id = s.id
|
left join scenic s on o.scenic_id = s.id
|
||||||
left join order_item oi on o.id = oi.order_id
|
left join order_item oi on o.id = oi.order_id
|
||||||
left join source sr on o.goods_type='2' and oi.goods_id = sr.id
|
|
||||||
left join video vd on o.goods_type='1' and oi.goods_id = vd.id
|
|
||||||
<where>
|
<where>
|
||||||
o.refund_status != 0
|
o.refund_status != 0
|
||||||
<if test="id!= null ">
|
<if test="id!= null ">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user