目录
一、controller
VideoOrderController
@RestController
@RequestMapping("/api/v1/pri/order")
public class VideoOrderController {
@Autowired
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();
}
}
二、创建VideoOrderRequest
package net.xdclass.online_xdclass.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
public class VideoOrderRequest {
@JsonProperty("video_id")
private int videoId;
public int getVideoId() {
return videoId;
}
public void setVideoId(int videoId) {
this.videoId = videoId;
}
}
三、service层
save()方法的逻辑的就是先根据userID查看订单表中是否有该数据,没有的话,就添加,有的话就不能添加重复订单,返回空
package net.xdclass.online_xdclass.service;
public interface VideoOrderService {
int save(int userId,int videoId);
}
package net.xdclass.online_xdclass.service.impl;
import net.xdclass.online_xdclass.mapper.UserMapper;
import net.xdclass.online_xdclass.mapper.VideoMapper;
import net.xdclass.online_xdclass.mapper.VideoOrderMapper;
import net.xdclass.online_xdclass.model.entity.Video;
import net.xdclass.online_xdclass.model.entity.VideoOrder;
import net.xdclass.online_xdclass.model.request.VideoOrderRequest;
import net.xdclass.online_xdclass.service.VideoOrderService;
import net.xdclass.online_xdclass.service.VideoService;
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
private VideoOrderMapper videoOrderMapper;
@Autowired
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.getCoverImg());
newVideoOrder.setVideoTitle(video.getTitle());
int rows = videoOrderMapper.saveOrder(newVideoOrder);
return rows;
}
}
四、mapper层
videoOrdermapper
package net.xdclass.online_xdclass.mapper;
import net.xdclass.online_xdclass.model.entity.VideoOrder;
import org.apache.ibatis.annotations.Param;
public interface VideoOrderMapper {
/**
* 查询用户是否购买过此商品
* @param userId
* @param state
* @return
*/
VideoOrder findByUserIdAndVideoIdAndState(@Param("user_id") int userId, @Param("video_id") int videoId, @Param("state") int state);
/**
* 下单
* @return
*/
int saveOrder(VideoOrder videoOrder);
}
<?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.xdclass.online_xdclass.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>
videomapper
/**
* 简单查询视频信息
* @param videoId
* @return
*/
Video findById(@Param("video_id") int videoId);
<select id="findById" resultType="Video">
select * from video where id=#{video_id}
</select>
五、测试