diff --git a/src/main/java/com/ycwl/basic/enums/BizCodeEnum.java b/src/main/java/com/ycwl/basic/enums/BizCodeEnum.java index f5e889c..bbd87cf 100644 --- a/src/main/java/com/ycwl/basic/enums/BizCodeEnum.java +++ b/src/main/java/com/ycwl/basic/enums/BizCodeEnum.java @@ -426,7 +426,7 @@ public enum BizCodeEnum { ADVANCE_PAYMENT_REFUND_FAILED(2003, "退款失败"), ADVANCE_PAYMENT_CALLBACK_REFUND_FAILED(2004, "退款回调失败"), REQUEST_WECHAT_FAIL(2005, "请求微信服务器发生异常"), - ; + GOODS_NOT_EXIST(2006, "商品不存在"); BizCodeEnum(Integer code, String message) { diff --git a/src/main/java/com/ycwl/basic/enums/GoodsTypeEnum.java b/src/main/java/com/ycwl/basic/enums/GoodsTypeEnum.java new file mode 100644 index 0000000..ea31d57 --- /dev/null +++ b/src/main/java/com/ycwl/basic/enums/GoodsTypeEnum.java @@ -0,0 +1,69 @@ +package com.ycwl.basic.enums; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author:longbinbin + * @Date:2024/12/6 16:46 + */ +public enum GoodsTypeEnum { + VIDEO(1,"成片"), + SOURCE(2,"源素材") + ; + + + public Integer code; + + private String value; + public static final Map cacheMap; + + static { + cacheMap = new HashMap<>(GoodsTypeEnum.values().length); + for (GoodsTypeEnum value : GoodsTypeEnum.values()) { + cacheMap.put(value.code, value); + } + } + public static final java.util.Map valueMap; + + static { + valueMap = new HashMap<>(GoodsTypeEnum.values().length); + for (GoodsTypeEnum value : GoodsTypeEnum.values()) { + valueMap.put(value.value, value); + } + } + + GoodsTypeEnum(Integer code, String value) { + this.code = code; + this.value = value; + } + + /** + * 获取value值 + */ + public static String getValue(Integer noticeMethod) { + if (noticeMethod == null) { + return null; + } + + GoodsTypeEnum GoodsTypeEnum = cacheMap.get(noticeMethod); + if (GoodsTypeEnum == null) { + return null; + } + return GoodsTypeEnum.value; + } + /** + * 获取code值 + */ + public static Integer getCode(String noticeMethod) { + if (noticeMethod == null) { + return -1; + } + + GoodsTypeEnum GoodsTypeEnum = valueMap.get(noticeMethod); + if (GoodsTypeEnum == null) { + return -1; + } + return GoodsTypeEnum.code; + } +} 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 fc6a1c3..5088051 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,6 +5,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.constant.NumberConstant; import com.ycwl.basic.enums.BizCodeEnum; +import com.ycwl.basic.enums.GoodsTypeEnum; import com.ycwl.basic.enums.OrderStateEnum; import com.ycwl.basic.enums.SourceTypeNameEnum; import com.ycwl.basic.exception.AppException; @@ -22,7 +23,9 @@ 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.entity.SourceEntity; import com.ycwl.basic.model.pc.source.resp.SourceRespVO; +import com.ycwl.basic.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.pc.video.resp.VideoRespVO; import com.ycwl.basic.model.wx.WXPayOrderReqVO; import com.ycwl.basic.model.wx.WxPayRespVO; @@ -94,14 +97,30 @@ public class OrderServiceImpl implements OrderService { return ApiResponse.fail("订单添加失败"); } else { List goodsItemList = order.getGoodsItemList(); + GoodsDetailVO goodsDetailVO = goodsItemList.get(NumberConstant.ZERO); + Integer goodsType = goodsDetailVO.getGoodsType(); List orderItems = new ArrayList<>(); goodsItemList.forEach(goodsDto -> { + Long goodsId = goodsDto.getGoodsId(); OrderItemEntity orderItemEntity = new OrderItemEntity(); orderItemEntity.setId(SnowFlakeUtil.getLongId()); orderItemEntity.setOrderId(orderId); orderItemEntity.setGoodsType(goodsDto.getGoodsType()); - orderItemEntity.setGoodsId(goodsDto.getGoodsId()); + orderItemEntity.setGoodsId(goodsId); orderItems.add(orderItemEntity); + + //修改商品状态 + if (Objects.equals(goodsType, GoodsTypeEnum.VIDEO.code)) { + VideoEntity videoEntity = new VideoEntity(); + videoEntity.setId(goodsId); + videoEntity.setIsBuy(1); + videoMapper.update(videoEntity); + }else if (Objects.equals(goodsType, GoodsTypeEnum.SOURCE.code)) { + SourceEntity sourceEntity = new SourceEntity(); + sourceEntity.setId(goodsId); + sourceEntity.setIsBuy(1); + sourceMapper.update(sourceEntity); + } }); int addOrderItems = orderMapper.addOrderItems(orderItems); if (addOrderItems == NumberConstant.ZERO) { @@ -109,35 +128,49 @@ public class OrderServiceImpl implements OrderService { return ApiResponse.fail("订单添加失败"); } - GoodsDetailVO goodsDetailVO = goodsItemList.get(NumberConstant.ZERO); - Integer goodsType = goodsDetailVO.getGoodsType(); - Long goodsId = goodsDetailVO.getGoodsId(); - - String goodsName = null; - if (goodsType == NumberConstant.ONE) { - goodsName = goodsDetailVO.getGoodsName(); - } else if (goodsType == NumberConstant.TWO) { - Integer sourceType = goodsDetailVO.getSourceType(); - goodsName = SourceTypeNameEnum.getRemark(sourceType); - } - - /* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/ - GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq(); - goodsPriceQueryReq.setGoodsId(goodsId); - goodsPriceQueryReq.setGoodsType(goodsType); - goodsPriceQueryReq.setScenicId(goodsDetailVO.getScenicId()); - BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq).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)); + //封装微信支付请求 + WxPayRespVO wxPayRespVO = initiatePayment(orderId, goodsDetailVO); + return ApiResponse.success(wxPayRespVO); } } + /** + * 发起支付 + * @param orderId 订单id + * @param goodsDetailVO 商品详情 + * @return 支付请求结果 + */ + private WxPayRespVO initiatePayment(Long orderId,GoodsDetailVO goodsDetailVO) throws Exception { + WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO(); + + Integer goodsType = goodsDetailVO.getGoodsType(); + Long goodsId = goodsDetailVO.getGoodsId(); + + String goodsName = null; + if (goodsType == NumberConstant.ONE) { + goodsName = goodsDetailVO.getGoodsName(); + } else if (goodsType == NumberConstant.TWO) { + Integer sourceType = goodsDetailVO.getSourceType(); + goodsName = SourceTypeNameEnum.getRemark(sourceType); + } + + /* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/ + GoodsPriceQueryReq goodsPriceQueryReq = new GoodsPriceQueryReq(); + goodsPriceQueryReq.setGoodsId(goodsId); + goodsPriceQueryReq.setGoodsType(goodsType); + goodsPriceQueryReq.setScenicId(goodsDetailVO.getScenicId()); + BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq).getData(); + + MemberRespVO memberRespVO = memberService.getUserInfo().getData(); + + wxPayOrderReqVO.setOpenId(memberRespVO.getOpenId()) + .setOrderSn(orderId) + .setTotalPrice(BigDecimalUtil.convertToCents(price)) + .setGoodsName(goodsName); + + return wxPayService.createOrder(wxPayOrderReqVO); + } + @Override public ApiResponse update(OrderAddOrUpdateReq query) { int update = orderMapper.update(query); diff --git a/src/main/resources/mapper/pc/VideoMapper.xml b/src/main/resources/mapper/pc/VideoMapper.xml index 2d545cd..25c2761 100644 --- a/src/main/resources/mapper/pc/VideoMapper.xml +++ b/src/main/resources/mapper/pc/VideoMapper.xml @@ -14,6 +14,7 @@ task_id = #{taskId}, worker_id = #{workerId}, video_url = #{videoUrl}, + is_buy = #{isBuy}, where id = #{id} @@ -42,7 +43,7 @@