补充下单逻辑

This commit is contained in:
songmingsong
2024-12-06 14:49:42 +08:00
parent 6e343ab42e
commit fcfb46fed7
11 changed files with 120 additions and 20 deletions

View File

@ -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;
/** /**
* @Authorlongbinbin * @Authorlongbinbin
* @Date2024/12/4 17:16 * @Date2024/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")

View 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;
}
}

View File

@ -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;
/** /**
* @Authorlongbinbin * @Authorlongbinbin
* @Date2024/12/5 16:35 * @Date2024/12/5 16:35
*/ */
@Accessors(chain = true)
@Data @Data
@ApiModel("查询商品价格请求参数") @ApiModel("查询商品价格请求参数")
public class GoodsPriceQueryReq { public class GoodsPriceQueryReq {

View File

@ -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;
/** /**
* 商品IDgoods_type=1关联video.id=2关联source.id * 商品IDgoods_type=1关联video.id=2关联source.id

View File

@ -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

View File

@ -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));
} }
} }

View File

@ -49,4 +49,7 @@ public interface AppMemberService {
* @return * @return
*/ */
ApiResponse<?> agreement(); ApiResponse<?> agreement();
} }

View File

@ -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);
} }

View File

@ -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);

View 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();
}
}

Binary file not shown.