diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java index 82f2a12..a0cc688 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java @@ -3,6 +3,8 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.annotation.IgnoreToken; 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.resp.OrderAppRespVO; +import com.ycwl.basic.model.wx.WxPayRespVO; import com.ycwl.basic.service.pc.OrderService; import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; @@ -10,8 +12,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal; - /** * @Author:longbinbin * @Date:2024/12/4 17:16 @@ -35,23 +35,16 @@ public class AppOrderController { @ApiOperation("用户端订单详情查询") @GetMapping("getOrderDetails/{id}") @IgnoreToken - public ApiResponse getOrderDetails(@PathVariable("id") Long id) { + public ApiResponse getOrderDetails(@PathVariable("id") Long id) { return orderService.appDetail(id); } @ApiOperation("用户端订单新增") @PostMapping("/addOrder") - public ApiResponse addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) { - orderService.add(orderAddReq); - return ApiResponse.success(""); + public ApiResponse addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) throws Exception { + return orderService.add(orderAddReq); } - @ApiOperation("/支付接口") - @PostMapping("/buy") - public ApiResponse buy(@RequestBody Object buyData) { - //TODO 处理购买逻辑 - return ApiResponse.success(""); - } @ApiOperation("获取用户订单数量") @GetMapping("/getUserOrderCount") diff --git a/src/main/java/com/ycwl/basic/enums/SourceTypeNameEnum.java b/src/main/java/com/ycwl/basic/enums/SourceTypeNameEnum.java new file mode 100644 index 0000000..a91ca9d --- /dev/null +++ b/src/main/java/com/ycwl/basic/enums/SourceTypeNameEnum.java @@ -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; + } +} diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPriceQueryReq.java b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPriceQueryReq.java index e5b7139..ce0416e 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPriceQueryReq.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/GoodsPriceQueryReq.java @@ -3,11 +3,13 @@ package com.ycwl.basic.model.mobile.goods; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.experimental.Accessors; /** * @Author:longbinbin * @Date:2024/12/5 16:35 */ +@Accessors(chain = true) @Data @ApiModel("查询商品价格请求参数") public class GoodsPriceQueryReq { diff --git a/src/main/java/com/ycwl/basic/model/pc/order/req/OrderItemDTO.java b/src/main/java/com/ycwl/basic/model/pc/order/req/OrderItemDTO.java index 2727d04..3ae3c19 100644 --- a/src/main/java/com/ycwl/basic/model/pc/order/req/OrderItemDTO.java +++ b/src/main/java/com/ycwl/basic/model/pc/order/req/OrderItemDTO.java @@ -20,7 +20,7 @@ public class OrderItemDTO { /** * 商品类型,0其他,1成片,2原片 */ - @ApiModelProperty("商品类型,0其他,1成片,,2源素材") + @ApiModelProperty("商品类型,0其他,1成片,2源素材") private Integer goodsType; /** * 商品ID,goods_type=1关联video.id,=2关联source.id diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java index aaf79f5..82b53f2 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java @@ -1,13 +1,11 @@ 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.SourceMapper; import com.ycwl.basic.mapper.pc.VideoMapper; import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq; import com.ycwl.basic.model.mobile.goods.GoodsReqQuery; 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.source.req.SourceReqQuery; import com.ycwl.basic.model.pc.source.resp.SourceRespVO; @@ -96,7 +94,7 @@ public class GoodsServiceImpl implements GoodsService { } @Override - public ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData) { + public ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData) { Integer goodsType = queryPriceData.getGoodsType(); if(goodsType==1){//成片vlog diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java index 5e1df64..c73eb26 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java @@ -5,7 +5,12 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.constant.NumberConstant; 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.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.req.OrderAddOrUpdateReq; 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.OrderItemVO; 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.utils.ApiResponse; +import com.ycwl.basic.utils.BigDecimalUtil; import com.ycwl.basic.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -36,6 +50,17 @@ public class OrderServiceImpl implements OrderService { @Autowired private OrderMapper orderMapper; + @Autowired + private VideoMapper videoMapper; + @Autowired + private SourceMapper sourceMapper; + @Autowired + private WxPayService wxPayService; + + @Autowired + private AppMemberService memberService; + @Autowired + private GoodsService goodsService; @Override public ApiResponse> pageQuery(OrderReqQuery query) { @@ -57,7 +82,7 @@ public class OrderServiceImpl implements OrderService { @Override @Transactional(rollbackFor = Exception.class) - public ApiResponse add(OrderAddOrUpdateReq order) { + public ApiResponse add(OrderAddOrUpdateReq order) throws Exception { Long orderId = SnowFlakeUtil.getLongId(); order.setId(orderId); int add = orderMapper.add(order); @@ -76,7 +101,30 @@ public class OrderServiceImpl implements OrderService { log.error("订单明细添加失败"); 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)); } } diff --git a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java index 0f3b26a..71ab6a5 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/AppMemberService.java @@ -49,4 +49,7 @@ public interface AppMemberService { * @return */ ApiResponse agreement(); + + + } diff --git a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java index 32aba9e..62469d0 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java +++ b/src/main/java/com/ycwl/basic/service/mobile/GoodsService.java @@ -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.utils.ApiResponse; +import java.math.BigDecimal; import java.util.List; /** @@ -33,5 +34,5 @@ public interface GoodsService { * @param queryPriceData * @return */ - ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData); + ApiResponse queryPrice(GoodsPriceQueryReq queryPriceData); } diff --git a/src/main/java/com/ycwl/basic/service/pc/OrderService.java b/src/main/java/com/ycwl/basic/service/pc/OrderService.java index 8870fbc..faa9d53 100644 --- a/src/main/java/com/ycwl/basic/service/pc/OrderService.java +++ b/src/main/java/com/ycwl/basic/service/pc/OrderService.java @@ -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.resp.OrderAppRespVO; import com.ycwl.basic.model.pc.order.resp.OrderRespVO; +import com.ycwl.basic.model.wx.WxPayRespVO; import com.ycwl.basic.utils.ApiResponse; import java.util.List; @@ -18,7 +19,7 @@ public interface OrderService { ApiResponse> pageQuery(OrderReqQuery query); ApiResponse> list(OrderReqQuery query); ApiResponse detail(Long orderId); - ApiResponse add(OrderAddOrUpdateReq query); + ApiResponse add(OrderAddOrUpdateReq query) throws Exception; ApiResponse update(OrderAddOrUpdateReq query); diff --git a/src/main/java/com/ycwl/basic/utils/BigDecimalUtil.java b/src/main/java/com/ycwl/basic/utils/BigDecimalUtil.java new file mode 100644 index 0000000..c79b5be --- /dev/null +++ b/src/main/java/com/ycwl/basic/utils/BigDecimalUtil.java @@ -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(); + } + +} diff --git a/src/main/resources/jar/wechatpay-java-0.2.15.jar b/src/main/resources/jar/wechatpay-java-0.2.15.jar new file mode 100644 index 0000000..30e5a51 Binary files /dev/null and b/src/main/resources/jar/wechatpay-java-0.2.15.jar differ