目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

VideoOrder下单接口

RequestEntity

 1package net.xdclass.online_xdclass.model.request;
 2
 3import com.fasterxml.jackson.annotation.JsonProperty;
 4
 5public class VideoOrderRequest {
 6
 7
 8    @JsonProperty("video_id")
 9    private int videoId;
10
11    public int getVideoId() {
12        return videoId;
13    }
14
15    public void setVideoId(int videoId) {
16        this.videoId = videoId;
17    }
18}
19

Controller

 1package net.xdclass.online_xdclass.controller;
 2
 3import net.xdclass.online_xdclass.model.request.VideoOrderRequest;
 4import net.xdclass.online_xdclass.service.VideoOrderService;
 5import net.xdclass.online_xdclass.utils.JsonData;
 6import org.springframework.beans.factory.annotation.Autowired;
 7import org.springframework.web.bind.annotation.RequestBody;
 8import org.springframework.web.bind.annotation.RequestMapping;
 9import org.springframework.web.bind.annotation.RestController;
10
11import javax.servlet.http.HttpServletRequest;
12
13@RestController
14@RequestMapping("/api/v1/pri/order")
15public class VideoOrderController {
16
17
18    @Autowired
19    private VideoOrderService videoOrderService;
20
21
22    /**
23     * 下单接口
24     * @return
25     */
26    @RequestMapping("save")
27    public JsonData saveOrder(@RequestBody VideoOrderRequest videoOrderRequest, HttpServletRequest request){
28  
29        //从requestyu域中获取user_id信息
30        Integer userId = (Integer) request.getAttribute("user_id");
31
32        //根据 user_id和video_id 完成video_order的下单
33        int rows = videoOrderService.save(userId, videoOrderRequest.getVideoId());
34
35        return rows == 0 ? JsonData.buildError("下单失败"):JsonData.buildSuccess();
36    }
37
38
39}
40

Service

interface

1package net.xdclass.online_xdclass.service;
2
3public interface VideoOrderService {
4
5
6    int save(int userId, int videoId);
7}
8

impl

 1package net.xdclass.online_xdclass.service.impl;
 2
 3import net.xdclass.online_xdclass.mapper.UserMapper;
 4import net.xdclass.online_xdclass.mapper.VideoMapper;
 5import net.xdclass.online_xdclass.mapper.VideoOrderMapper;
 6import net.xdclass.online_xdclass.model.entity.Video;
 7import net.xdclass.online_xdclass.model.entity.VideoOrder;
 8import net.xdclass.online_xdclass.model.request.VideoOrderRequest;
 9import net.xdclass.online_xdclass.service.VideoOrderService;
10import net.xdclass.online_xdclass.service.VideoService;
11import org.springframework.beans.factory.annotation.Autowired;
12import org.springframework.stereotype.Service;
13
14import java.util.Date;
15import java.util.UUID;
16
17
18@Service
19public class VideoOrderServiceImpl implements VideoOrderService {
20
21
22    @Autowired
23    private VideoOrderMapper videoOrderMapper;
24
25
26
27    @Autowired
28    private VideoMapper videoMapper;
29
30
31    /**
32     * 下单操作
33     * 未来版本:优惠券抵扣,风控用户检查,生成订单基础信息,生成支付信息
34     * @param userId
35     * @param videoId
36     * @return
37     */
38    @Override
39    public int save(int userId, int videoId) {
40
41        //判断是否已经购买
42        VideoOrder videoOrder = videoOrderMapper.findByUserIdAndVideoIdAndState(userId,videoId,1);
43
44        //如果已经购买就返回0
45        if(videoOrder!=null){return  0;}
46
47        //根据video_id查询相关的视频信息
48        Video video = videoMapper.findById(videoId);
49
50        //补全video_order的项目信息
51        VideoOrder newVideoOrder = new VideoOrder();
52        newVideoOrder.setCreateTime(new Date());
53        newVideoOrder.setOutTradeNo(UUID.randomUUID().toString());
54        newVideoOrder.setState(1);
55        newVideoOrder.setTotalFee(video.getPrice());
56        newVideoOrder.setUserId(userId);
57
58        newVideoOrder.setVideoId(videoId);
59        newVideoOrder.setVideoImg(video.getCoverImg());
60        newVideoOrder.setVideoTitle(video.getTitle());
61
62        //保存 video_order
63        int rows = videoOrderMapper.saveOrder(newVideoOrder);
64
65
66        return rows;
67    }
68}
69

Dao

mapper

 1package net.xdclass.online_xdclass.mapper;
 2
 3import net.xdclass.online_xdclass.model.entity.VideoOrder;
 4import org.apache.ibatis.annotations.Param;
 5
 6public interface VideoOrderMapper {
 7
 8    /**
 9     * 查询用户是否购买过此商品
10     * @param userId
11     * @param vidoeId
12     * @param state
13     * @return
14     */
15    VideoOrder findByUserIdAndVideoIdAndState(@Param("user_id") int userId, @Param("video_id") int videoId, @Param("state") int state);
16
17
18    /**
19     * 下单
20     * @return
21     */
22    int saveOrder(VideoOrder videoOrder);
23
24
25}
26

mapper.xml

 1<?xml version="1.0" encoding="UTF-8" ?>
 2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3<mapper namespace="net.xdclass.online_xdclass.mapper.VideoOrderMapper">
 4
 5
 6    <select id="findByUserIdAndVideoIdAndState" resultType="VideoOrder">
 7
 8        select * from video_order where  user_id = #{user_id} and video_id = #{video_id} and state = #{state}
 9
10    </select>
11
12
13    <insert id="saveOrder" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
14        INSERT INTO `video_order` (`out_trade_no`, `state`, `create_time`, `total_fee`, `video_id`,
15         `video_title`, `video_img`, `user_id`)
16        VALUES
17        (#{outTradeNo,jdbcType=VARCHAR},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{totalFee,jdbcType=INTEGER},
18        #{videoId,jdbcType=INTEGER},#{videoTitle,jdbcType=VARCHAR},#{videoImg,jdbcType=VARCHAR},#{userId,jdbcType=INTEGER});
19
20    </insert>
21
22
23</mapper>

测试

 1http://localhost:8081/api/v1/pri/order/save
 2
 3POST  Body-raw-JSON
 4
 5{
 6    "video_id":45
 7}
 8
 9Headers
10
11token
12xdclasseyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4ZGNsYXNzIiwiaGVhZF9pbWciOiJodHRwczovL3hkLXZpZGVvLXBjLWltZy5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20veGRjbGFzc19wcm8vZGVmYXVsdC9oZWFkX2ltZy8xNS5qcGVnIiwiaWQiOjgsIm5hbWUiOiJhbGljZSIsImlhdCI6MTYxMDUwMzM5NSwiZXhwIjoxNjExMTA4MTk1fQ.Hru8k9bwXd32t2iQX-6br_30M-HwiYKVerfChv_Recw

作者:Soulboy