Просмотр исходного кода

[修改]增加优惠券使用期限

liying 7 лет назад
Родитель
Сommit
49df80a015

+ 17 - 0
src/main/java/com/example/cinema/bl/CouponService.java

@@ -0,0 +1,17 @@
+package com.example.cinema.bl;
+
+import com.example.cinema.vo.CouponForm;
+import com.example.cinema.vo.ResponseVO;
+
+/**
+ * Created by liying on 2019/4/17.
+ */
+public interface CouponService {
+
+    ResponseVO getCouponsByUser(int userId);
+
+    ResponseVO addCoupon(CouponForm couponForm);
+
+    ResponseVO issueCoupon(int couponId,int userId);
+
+}

+ 2 - 2
src/main/java/com/example/cinema/bl/TicketService.java

@@ -11,13 +11,13 @@ import com.example.cinema.vo.TicketForm;
 public interface TicketService {
     ResponseVO addTicket(TicketForm ticketForm);
 
-    ResponseVO completeTicket(int id);
+    ResponseVO completeTicket(int id,int couponId);
 
     ResponseVO getBySchedule(int scheduleId);
 
     ResponseVO getTicketByUser(int userId);
 
-    ResponseVO completeByVIPCard(int ticketId);
+    ResponseVO completeByVIPCard(int ticketId,int couponId);
 
     ResponseVO cancelTicket(int ticketId);
 

+ 59 - 0
src/main/java/com/example/cinema/blImpl/CouponServiceImpl.java

@@ -0,0 +1,59 @@
+package com.example.cinema.blImpl;
+
+import com.example.cinema.bl.CouponService;
+import com.example.cinema.data.CouponMapper;
+import com.example.cinema.po.Coupon;
+import com.example.cinema.vo.CouponForm;
+import com.example.cinema.vo.ResponseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by liying on 2019/4/17.
+ */
+@Service
+public class CouponServiceImpl implements CouponService {
+
+    @Autowired
+    CouponMapper couponMapper;
+
+    @Override
+    public ResponseVO getCouponsByUser(int userId) {
+        try {
+            return ResponseVO.buildSuccess(couponMapper.selectCouponByUser(userId));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
+
+    @Override
+    public ResponseVO addCoupon(CouponForm couponForm) {
+        try {
+            Coupon coupon=new Coupon();
+            coupon.setName(couponForm.getName());
+            coupon.setDescription(couponForm.getDescription());
+            coupon.setTargetAmount(couponForm.getTargetAmount());
+            coupon.setDiscountAmount(couponForm.getDiscountAmount());
+            coupon.setStartTime(couponForm.getStartTime());
+            coupon.setEndTime(couponForm.getEndTime());
+            couponMapper.insertCoupon(coupon);
+            return ResponseVO.buildSuccess(coupon);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
+
+    @Override
+    public ResponseVO issueCoupon(int couponId, int userId) {
+        try {
+            couponMapper.insertCouponUser(couponId,userId);
+            return ResponseVO.buildSuccess();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+
+    }
+}

+ 19 - 5
src/main/java/com/example/cinema/blImpl/TicketServiceImpl.java

@@ -1,9 +1,12 @@
 package com.example.cinema.blImpl;
 
+import com.example.cinema.bl.CouponService;
 import com.example.cinema.bl.TicketService;
+import com.example.cinema.data.CouponMapper;
 import com.example.cinema.data.ScheduleMapper;
 import com.example.cinema.data.TicketMapper;
 import com.example.cinema.data.VIPCardMapper;
+import com.example.cinema.po.Coupon;
 import com.example.cinema.po.Ticket;
 import com.example.cinema.po.VIPCard;
 import com.example.cinema.vo.*;
@@ -26,6 +29,8 @@ public class TicketServiceImpl implements TicketService {
     VIPCardMapper vipCardMapper;
     @Autowired
     ScheduleMapper scheduleMapper;
+    @Autowired
+    CouponMapper couponMapper;
 
     @Override
     public ResponseVO addTicket(TicketForm ticketForm) {
@@ -49,10 +54,15 @@ public class TicketServiceImpl implements TicketService {
     }
 
     @Override
-    public ResponseVO completeTicket(int id) {
+    @Transactional
+    public ResponseVO completeTicket(int id,int couponId) {
         try {
             ticketMapper.updateTicketState(id, 1);
-            return ResponseVO.buildSuccess(ticketMapper.selectTicketById(id).getVO());
+            Ticket ticket=ticketMapper.selectTicketById(id);
+            if(couponId!=0) {
+                couponMapper.deleteCouponUser(couponId, ticket.getUserId());
+            }
+            return ResponseVO.buildSuccess(ticket.getVO());
         } catch (Exception e) {
             e.printStackTrace();
             return ResponseVO.buildFailure("失败");
@@ -90,18 +100,22 @@ public class TicketServiceImpl implements TicketService {
 
     @Override
     @Transactional
-    public ResponseVO completeByVIPCard(int ticketId) {
+    public ResponseVO completeByVIPCard(int ticketId,int couponId) {
         try {
             Ticket ticket=ticketMapper.selectTicketById(ticketId);
             VIPCard vipCard = vipCardMapper.selectCardByUserId(ticket.getUserId());
             ScheduleItem scheduleItem = scheduleMapper.selectScheduleById(ticket.getScheduleId());
-            //todo 优惠券
+            //todo 优惠券门槛校验
             double balance = vipCard.getBalance() - scheduleItem.getFare();
+            if(couponId!=0) {
+                Coupon coupon=couponMapper.selectById(couponId);
+                balance+=coupon.getDiscountAmount();
+            }
             if (balance < 0) {
                 return ResponseVO.buildFailure("会员卡余额不足");
             }
             vipCardMapper.updateCardBalance(vipCard.getId(), balance);
-            completeTicket(ticketId);
+            completeTicket(ticketId,couponId);
             ticket.setState(1);
             return ResponseVO.buildSuccess(ticket.getVO());
         } catch (Exception e) {

+ 4 - 10
src/main/java/com/example/cinema/controller/TicketController.java

@@ -17,8 +17,8 @@ public class TicketController {
     TicketService ticketService;
 
     @PostMapping("/vip/buy")
-    public ResponseVO buyTicketByVIPCard(@RequestParam int ticketId){
-        return ticketService.completeByVIPCard(ticketId);
+    public ResponseVO buyTicketByVIPCard(@RequestParam int ticketId,@RequestParam int couponId){
+        return ticketService.completeByVIPCard(ticketId,couponId);
     }
 
     @PostMapping("/lockSeat")
@@ -26,15 +26,9 @@ public class TicketController {
         return ticketService.addTicket(ticketForm);
     }
     @PostMapping("/buy")
-    public ResponseVO buyTicket(@RequestParam int ticketId){
-        return ticketService.completeTicket(ticketId);
+    public ResponseVO buyTicket(@RequestParam int ticketId,@RequestParam int couponId){
+        return ticketService.completeTicket(ticketId,couponId);
     }
-
-    @PostMapping("/{ticketId}/complete")
-    public ResponseVO completeOrder (@PathVariable  int ticketId){
-        return ticketService.completeTicket(ticketId);
-    }
-
     @GetMapping("/get/{userId}")
     public ResponseVO getTicketByUserId(@PathVariable int userId){
         return ticketService.getTicketByUser(userId);

+ 36 - 0
src/main/java/com/example/cinema/data/CoupnMapper.xml

@@ -0,0 +1,36 @@
+<?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="com.example.cinema.data.CouponMapper">
+    <insert id="insertCoupon" parameterType="com.example.cinema.po.Coupon"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into coupon(description,name,target_amount,discount_amount,start_time,end_time)
+        values(#{description},#{name},#{targetAmount},#{discountAmount},#{startTime},#{endTime})
+    </insert>
+    <insert id="insertCouponUser">
+        insert into coupon_user(coupon_id,user_id)
+        values(#{couponId},#{userId})
+    </insert>
+    <delete id="insertCouponUser">
+        delete from coupon_user where coupon_id=#{couponId} and user_id =#{userId}
+    </delete>
+
+    <select id="selectById" resultMap="Coupon">
+        select * from coupon where id=#{id}
+    </select>
+
+    <select id="selectCouponByUser" resultMap="Coupon">
+        select * from coupon c left join coupon_user  cu on c.id=cu.coupon_id where cu.user_id=#{userId}
+
+    </select>
+
+    <resultMap id="Coupon" type="com.example.cinema.po.Coupon">
+        <result column="description" property="description"></result>
+        <result column="id" property="id"></result>
+        <result column="name" property="name"></result>
+        <result column="target_amount" property="targetAmount"></result>
+        <result column="discount_amount" property="discountAmount"></result>
+        <result column="start_time" property="startTime"></result>
+        <result column="end_time" property="endTime"></result>
+    </resultMap>
+
+</mapper>

+ 24 - 0
src/main/java/com/example/cinema/data/CouponMapper.java

@@ -0,0 +1,24 @@
+package com.example.cinema.data;
+
+import com.example.cinema.po.Coupon;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Created by liying on 2019/4/17.
+ */
+@Mapper
+public interface CouponMapper {
+
+    int insertCoupon(Coupon coupon);
+
+    List<Coupon> selectCouponByUser(int userId);
+
+    Coupon selectById(int id);
+
+    void insertCouponUser(@Param("couponId") int couponId,@Param("userId")int userId);
+
+    void deleteCouponUser(@Param("couponId") int couponId,@Param("userId")int userId);
+}

+ 26 - 0
src/main/java/com/example/cinema/po/Coupon.java

@@ -1,5 +1,7 @@
 package com.example.cinema.po;
 
+import java.sql.Timestamp;
+
 /**
  * Created by liying on 2019/4/16.
  */
@@ -24,6 +26,30 @@ public class Coupon {
      * 优惠券优惠金额
      */
     private double discountAmount;
+    /**
+     * 可用时间
+     */
+    private Timestamp startTime;
+    /**
+     * 失效时间
+     */
+    private Timestamp endTime;
+
+    public Timestamp getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Timestamp startTime) {
+        this.startTime = startTime;
+    }
+
+    public Timestamp getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Timestamp endTime) {
+        this.endTime = endTime;
+    }
 
     public int getId() {
         return id;

+ 84 - 0
src/main/java/com/example/cinema/vo/CouponForm.java

@@ -0,0 +1,84 @@
+package com.example.cinema.vo;
+
+import java.sql.Timestamp;
+
+/**
+ * Created by liying on 2019/4/16.
+ */
+public class CouponForm {
+    /**
+     * 优惠券描述
+     */
+    private String description;
+    /**
+     * 优惠券名称
+     */
+    private String name;
+    /**
+     * 优惠券使用门槛
+     */
+    private double targetAmount;
+    /**
+     * 优惠券优惠金额
+     */
+    private double discountAmount;
+    /**
+     * 可用时间
+     */
+    private Timestamp startTime;
+    /**
+     * 失效时间
+     */
+    private Timestamp endTime;
+
+    public Timestamp getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Timestamp startTime) {
+        this.startTime = startTime;
+    }
+
+    public Timestamp getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Timestamp endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public double getTargetAmount() {
+        return targetAmount;
+    }
+
+    public void setTargetAmount(double targetAmount) {
+        this.targetAmount = targetAmount;
+    }
+
+    public double getDiscountAmount() {
+        return discountAmount;
+    }
+
+    public void setDiscountAmount(double discountAmount) {
+        this.discountAmount = discountAmount;
+    }
+
+    public CouponForm() {
+    }
+}

+ 1 - 12
src/main/java/com/example/cinema/vo/TicketForm.java

@@ -22,20 +22,9 @@ public class TicketForm {
      */
     private int rowIndex;
 
-    /**
-     * 优惠券id
-     */
-    private int couponId;
 
-    public TicketForm() {
-    }
 
-    public int getCouponId() {
-        return couponId;
-    }
-
-    public void setCouponId(int couponId) {
-        this.couponId = couponId;
+    public TicketForm() {
     }
 
     public int getUserId() {