You've already forked FrameTour-BE
补充下单逻辑
This commit is contained in:
@ -3,6 +3,8 @@ package com.ycwl.basic.controller.mobile;
|
|||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
|
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
||||||
|
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
||||||
|
import com.ycwl.basic.model.wx.WxPayRespVO;
|
||||||
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 io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@ -10,8 +12,6 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/4 17:16
|
* @Date:2024/12/4 17:16
|
||||||
@ -35,23 +35,16 @@ public class AppOrderController {
|
|||||||
@ApiOperation("用户端订单详情查询")
|
@ApiOperation("用户端订单详情查询")
|
||||||
@GetMapping("getOrderDetails/{id}")
|
@GetMapping("getOrderDetails/{id}")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse getOrderDetails(@PathVariable("id") Long id) {
|
public ApiResponse<OrderAppRespVO> getOrderDetails(@PathVariable("id") Long id) {
|
||||||
return orderService.appDetail(id);
|
return orderService.appDetail(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("用户端订单新增")
|
@ApiOperation("用户端订单新增")
|
||||||
@PostMapping("/addOrder")
|
@PostMapping("/addOrder")
|
||||||
public ApiResponse addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) {
|
public ApiResponse<WxPayRespVO> addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) throws Exception {
|
||||||
orderService.add(orderAddReq);
|
return orderService.add(orderAddReq);
|
||||||
return ApiResponse.success("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("/支付接口")
|
|
||||||
@PostMapping("/buy")
|
|
||||||
public ApiResponse buy(@RequestBody Object buyData) {
|
|
||||||
//TODO 处理购买逻辑
|
|
||||||
return ApiResponse.success("");
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation("获取用户订单数量")
|
@ApiOperation("获取用户订单数量")
|
||||||
@GetMapping("/getUserOrderCount")
|
@GetMapping("/getUserOrderCount")
|
||||||
|
30
src/main/java/com/ycwl/basic/enums/SourceTypeNameEnum.java
Normal file
30
src/main/java/com/ycwl/basic/enums/SourceTypeNameEnum.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package com.ycwl.basic.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 素材类型
|
||||||
|
*
|
||||||
|
* @author songmingsong
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum SourceTypeNameEnum {
|
||||||
|
ORIGINAL_FILM_SET(1, "原片集"),
|
||||||
|
PHOTO_GALLERY(2, "照片集"),
|
||||||
|
UNKNOWN(-1, "未知");
|
||||||
|
private int type;
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
public static String getRemark(Integer type) {
|
||||||
|
for (SourceTypeNameEnum wechatErrorCodeEnum : SourceTypeNameEnum.values()) {
|
||||||
|
if (wechatErrorCodeEnum.type==type) {
|
||||||
|
return wechatErrorCodeEnum.remark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return UNKNOWN.remark;
|
||||||
|
}
|
||||||
|
}
|
@ -3,11 +3,13 @@ package com.ycwl.basic.model.mobile.goods;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/5 16:35
|
* @Date:2024/12/5 16:35
|
||||||
*/
|
*/
|
||||||
|
@Accessors(chain = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("查询商品价格请求参数")
|
@ApiModel("查询商品价格请求参数")
|
||||||
public class GoodsPriceQueryReq {
|
public class GoodsPriceQueryReq {
|
||||||
|
@ -20,7 +20,7 @@ public class OrderItemDTO {
|
|||||||
/**
|
/**
|
||||||
* 商品类型,0其他,1成片,2原片
|
* 商品类型,0其他,1成片,2原片
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty("商品类型,0其他,1成片,,2源素材")
|
@ApiModelProperty("商品类型,0其他,1成片,2源素材")
|
||||||
private Integer goodsType;
|
private Integer goodsType;
|
||||||
/**
|
/**
|
||||||
* 商品ID,goods_type=1关联video.id,=2关联source.id
|
* 商品ID,goods_type=1关联video.id,=2关联source.id
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
package com.ycwl.basic.service.impl.mobile;
|
package com.ycwl.basic.service.impl.mobile;
|
||||||
|
|
||||||
import com.github.pagehelper.PageInfo;
|
|
||||||
import com.ycwl.basic.mapper.pc.ScenicMapper;
|
import com.ycwl.basic.mapper.pc.ScenicMapper;
|
||||||
import com.ycwl.basic.mapper.pc.SourceMapper;
|
import com.ycwl.basic.mapper.pc.SourceMapper;
|
||||||
import com.ycwl.basic.mapper.pc.VideoMapper;
|
import com.ycwl.basic.mapper.pc.VideoMapper;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsReqQuery;
|
import com.ycwl.basic.model.mobile.goods.GoodsReqQuery;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsVO;
|
import com.ycwl.basic.model.mobile.goods.GoodsVO;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderItemVO;
|
|
||||||
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
||||||
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
|
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
|
||||||
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
||||||
@ -96,7 +94,7 @@ public class GoodsServiceImpl implements GoodsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData) {
|
public ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData) {
|
||||||
Integer goodsType = queryPriceData.getGoodsType();
|
Integer goodsType = queryPriceData.getGoodsType();
|
||||||
|
|
||||||
if(goodsType==1){//成片vlog
|
if(goodsType==1){//成片vlog
|
||||||
|
@ -5,7 +5,12 @@ import com.github.pagehelper.PageHelper;
|
|||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.ycwl.basic.constant.NumberConstant;
|
import com.ycwl.basic.constant.NumberConstant;
|
||||||
import com.ycwl.basic.enums.OrderStateEnum;
|
import com.ycwl.basic.enums.OrderStateEnum;
|
||||||
|
import com.ycwl.basic.enums.SourceTypeNameEnum;
|
||||||
import com.ycwl.basic.mapper.pc.OrderMapper;
|
import com.ycwl.basic.mapper.pc.OrderMapper;
|
||||||
|
import com.ycwl.basic.mapper.pc.SourceMapper;
|
||||||
|
import com.ycwl.basic.mapper.pc.VideoMapper;
|
||||||
|
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
||||||
|
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
|
||||||
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.OrderAddOrUpdateReq;
|
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderItemDTO;
|
import com.ycwl.basic.model.pc.order.req.OrderItemDTO;
|
||||||
@ -13,14 +18,23 @@ import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
|||||||
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderItemVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderItemVO;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
||||||
|
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
||||||
|
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
|
||||||
|
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
|
||||||
|
import com.ycwl.basic.model.wx.WxPayRespVO;
|
||||||
|
import com.ycwl.basic.service.mobile.AppMemberService;
|
||||||
|
import com.ycwl.basic.service.mobile.GoodsService;
|
||||||
|
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.BigDecimalUtil;
|
||||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -36,6 +50,17 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderMapper orderMapper;
|
private OrderMapper orderMapper;
|
||||||
|
@Autowired
|
||||||
|
private VideoMapper videoMapper;
|
||||||
|
@Autowired
|
||||||
|
private SourceMapper sourceMapper;
|
||||||
|
@Autowired
|
||||||
|
private WxPayService wxPayService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AppMemberService memberService;
|
||||||
|
@Autowired
|
||||||
|
private GoodsService goodsService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
|
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
|
||||||
@ -57,7 +82,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public ApiResponse<Integer> add(OrderAddOrUpdateReq order) {
|
public ApiResponse<WxPayRespVO> add(OrderAddOrUpdateReq order) throws Exception {
|
||||||
Long orderId = SnowFlakeUtil.getLongId();
|
Long orderId = SnowFlakeUtil.getLongId();
|
||||||
order.setId(orderId);
|
order.setId(orderId);
|
||||||
int add = orderMapper.add(order);
|
int add = orderMapper.add(order);
|
||||||
@ -76,7 +101,30 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
log.error("订单明细添加失败");
|
log.error("订单明细添加失败");
|
||||||
return ApiResponse.fail("订单添加失败");
|
return ApiResponse.fail("订单添加失败");
|
||||||
}
|
}
|
||||||
return ApiResponse.success(add);
|
|
||||||
|
/* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/
|
||||||
|
GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq();
|
||||||
|
Integer goodsType = order.getOrderItemList().get(NumberConstant.ZERO).getGoodsType();
|
||||||
|
Long goodsId = order.getOrderItemList().get(NumberConstant.ZERO).getGoodsId();
|
||||||
|
|
||||||
|
String goodsName = null;
|
||||||
|
if (goodsType == NumberConstant.ONE) {
|
||||||
|
VideoRespVO videoRespVO = videoMapper.getById(goodsId);
|
||||||
|
goodsName = videoRespVO.getTemplateName();
|
||||||
|
} else if (goodsType == NumberConstant.TWO) {
|
||||||
|
SourceRespVO sourceRespVO = sourceMapper.getById(goodsId);
|
||||||
|
goodsName= SourceTypeNameEnum.getRemark( sourceRespVO.getType());
|
||||||
|
}
|
||||||
|
BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq.setGoodsId(goodsId)
|
||||||
|
.setGoodsType(goodsType)).getData();
|
||||||
|
|
||||||
|
MemberRespVO memberRespVO = memberService.getUserInfo().getData();
|
||||||
|
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();
|
||||||
|
wxPayOrderReqVO.setOpenId(memberRespVO.getOpenId())
|
||||||
|
.setOrderSn(orderId)
|
||||||
|
.setTotalPrice(BigDecimalUtil.convertToCents(price))
|
||||||
|
.setGoodsName(goodsName);
|
||||||
|
return ApiResponse.success(wxPayService.createOrder(wxPayOrderReqVO));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,4 +49,7 @@ public interface AppMemberService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ApiResponse<?> agreement();
|
ApiResponse<?> agreement();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.ycwl.basic.model.mobile.goods.GoodsVO;
|
|||||||
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,5 +34,5 @@ public interface GoodsService {
|
|||||||
* @param queryPriceData
|
* @param queryPriceData
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData);
|
ApiResponse<BigDecimal> queryPrice(GoodsPriceQueryReq queryPriceData);
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
|
|||||||
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
||||||
|
import com.ycwl.basic.model.wx.WxPayRespVO;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -18,7 +19,7 @@ public interface OrderService {
|
|||||||
ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query);
|
ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query);
|
||||||
ApiResponse<List<OrderRespVO>> list(OrderReqQuery query);
|
ApiResponse<List<OrderRespVO>> list(OrderReqQuery query);
|
||||||
ApiResponse<OrderRespVO> detail(Long orderId);
|
ApiResponse<OrderRespVO> detail(Long orderId);
|
||||||
ApiResponse<Integer> add(OrderAddOrUpdateReq query);
|
ApiResponse<WxPayRespVO> add(OrderAddOrUpdateReq query) throws Exception;
|
||||||
ApiResponse<Integer> update(OrderAddOrUpdateReq query);
|
ApiResponse<Integer> update(OrderAddOrUpdateReq query);
|
||||||
|
|
||||||
|
|
||||||
|
24
src/main/java/com/ycwl/basic/utils/BigDecimalUtil.java
Normal file
24
src/main/java/com/ycwl/basic/utils/BigDecimalUtil.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package com.ycwl.basic.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: songmingsong
|
||||||
|
* @CreateTime: 2024-12-06
|
||||||
|
* @Description: 小数转换
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
public class BigDecimalUtil {
|
||||||
|
public static int convertToCents(BigDecimal price) {
|
||||||
|
if (price == null) {
|
||||||
|
throw new IllegalArgumentException("Price cannot be null");
|
||||||
|
}
|
||||||
|
return price
|
||||||
|
.setScale(2, RoundingMode.HALF_UP) // 保留两位小数
|
||||||
|
.multiply(new BigDecimal(100)) // 转换为分
|
||||||
|
.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
BIN
src/main/resources/jar/wechatpay-java-0.2.15.jar
Normal file
BIN
src/main/resources/jar/wechatpay-java-0.2.15.jar
Normal file
Binary file not shown.
Reference in New Issue
Block a user