1. 程式人生 > 實用技巧 >yb課堂之使用者下單模組開發 《十四》

yb課堂之使用者下單模組開發 《十四》

開發使用者下單購買視訊介面

VideoOrder模組下單介面開發

VideoOrderController.java

package net.ybclass.online_ybclass.controller;

import net.ybclass.online_ybclass.model.request.VideoOrderRequest;
import net.ybclass.online_ybclass.service.VideoOrderService;
import net.ybclass.online_ybclass.utils.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping("/api/v1/pri/order") public class VideoOrderController { @Autowired(required
= false) private VideoOrderService videoOrderService; /** * 下單介面 * * @return */ @RequestMapping("save") public JsonData saveOrder(@RequestBody VideoOrderRequest videoOrderRequest, HttpServletRequest request) { Integer userId = (Integer) request.getAttribute("user_id");
int rows = videoOrderService.save(userId, videoOrderRequest.getVideoId()); return rows == 0 ? JsonData.buildError("下單失敗") : JsonData.buildSuccess(); } }

VideoOrderService.java

package net.ybclass.online_ybclass.service;

public interface VideoOrderService {
    int save(int userId, int videoId);
}

VideoOrderServiceImpl.java

package net.ybclass.online_ybclass.service.impl;

import net.ybclass.online_ybclass.mapper.UserMapper;
import net.ybclass.online_ybclass.mapper.VideoMapper;
import net.ybclass.online_ybclass.mapper.VideoOrderMapper;
import net.ybclass.online_ybclass.model.entity.Video;
import net.ybclass.online_ybclass.model.entity.VideoOrder;
import net.ybclass.online_ybclass.service.VideoOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.UUID;

@Service
public class VideoOrderServiceImpl implements VideoOrderService {
    @Autowired(required = false)
    private VideoOrderMapper videoOrderMapper;
    @Autowired(required = false)
    private VideoMapper videoMapper;

    /**
     * 下單操作
     * 未來版本:優惠卷抵扣,風控使用者檢測,生成訂單基礎資訊,生成支付資訊
     *
     * @param userId
     * @param videoId
     * @return
     */
    @Override
    public int save(int userId, int videoId) {
        //判斷是否已經購買
        VideoOrder videoOrder = videoOrderMapper.findByUserIdAndVideoIdAndState(userId, videoId, 1);
        if (videoOrder != null) return 0;
        Video video = videoMapper.findById(videoId);
        VideoOrder newVideoOrder = new VideoOrder();
        newVideoOrder.setCreateTime(new Date());
        newVideoOrder.setOutTradeNo(UUID.randomUUID().toString());
        newVideoOrder.setState(1);
        newVideoOrder.setTotalFee(video.getPrice());
        newVideoOrder.setUserId(userId);
        newVideoOrder.setVideoId(videoId);
        newVideoOrder.setVideoImg(video.getConverImg());
        newVideoOrder.setVideoTitle(video.getTitle());
        int rows = videoOrderMapper.saveOrder(newVideoOrder);
        return rows;
    }
}

VideoOrderMapper.java

package net.ybclass.online_ybclass.mapper;

import net.ybclass.online_ybclass.model.entity.VideoOrder;
import org.apache.ibatis.annotations.Param;

public interface VideoOrderMapper {
    /**
     * 查詢使用者是否購買過此商品
     *
     * @param userId  使用者id
     * @param videoId 視訊id
     * @param state   狀態
     * @return
     */
    VideoOrder findByUserIdAndVideoIdAndState(@Param("user_id") int userId, @Param("video_id") int videoId, @Param("state") int state);

    /**
     * 下單
     *
     * @param videoOrder
     * @return
     */
    int saveOrder(VideoOrder videoOrder);
}

VideoOrderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.ybclass.online_ybclass.mapper.VideoOrderMapper">
    <!-- 查詢使用者是否購買過此商品 -->
    <select id="findByUserIdAndVideoIdAndState" resultType="VideoOrder">
        SELECT * FROM video_order WHERE user_id=#{user_id} AND video_id=#{video_id} AND state=#{state}
    </select>
    <!-- 下單,並返回主鍵值 -->
    <insert id="saveOrder" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO `video_order`( `out_trade_no`, `state`, `create_time`, `total_fee`, `video_id`, `video_title`, `video_img`, `user_id`)
        VALUES (#{outTradeNo,jdbcType=VARCHAR},#{state,jdbcType=INTEGER}
        ,#{createTime,jdbcType=TIMESTAMP},#{totalFee,jdbcType=INTEGER}
        ,#{videoId,jdbcType=INTEGER},#{videoTitle,jdbcType=VARCHAR}
        ,#{videoImg,jdbcType=VARCHAR},#{userId,jdbcType=INTEGER});
    </insert>
</mapper>

演示