添加获取购物车中商品可用优惠券接口
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package com.macro.mall.portal.controller;
|
||||
|
||||
import com.macro.mall.model.SmsCouponHistory;
|
||||
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||
import com.macro.mall.portal.domain.CommonResult;
|
||||
import com.macro.mall.portal.domain.SmsCouponHistoryDetail;
|
||||
import com.macro.mall.portal.service.OmsCartItemService;
|
||||
import com.macro.mall.portal.service.UmsMemberCouponService;
|
||||
import com.macro.mall.portal.service.UmsMemberService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户优惠券管理Controller
|
||||
* Created by macro on 2018/8/29.
|
||||
*/
|
||||
@Controller
|
||||
@Api(tags = "UmsMemberCouponController", description = "用户优惠券管理")
|
||||
@RequestMapping("/member/coupon")
|
||||
public class UmsMemberCouponController {
|
||||
@Autowired
|
||||
private UmsMemberCouponService memberCouponService;
|
||||
@Autowired
|
||||
private OmsCartItemService cartItemService;
|
||||
@Autowired
|
||||
private UmsMemberService memberService;
|
||||
|
||||
@ApiOperation("领取指定优惠券")
|
||||
@RequestMapping(value = "/add/{couponId}", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public Object add(@PathVariable Long couponId) {
|
||||
return memberCouponService.add(couponId);
|
||||
}
|
||||
|
||||
@ApiOperation("获取用户优惠券列表")
|
||||
@ApiImplicitParam(name = "useStatus", value = "优惠券筛选类型:0->未使用;1->已使用;2->已过期",
|
||||
allowableValues = "0,1,2", paramType = "query", dataType = "integer")
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Object list(@RequestParam(value = "useStatus", required = false) Integer useStatus) {
|
||||
List<SmsCouponHistory> couponHistoryList = memberCouponService.list(useStatus);
|
||||
return new CommonResult().success(couponHistoryList);
|
||||
}
|
||||
|
||||
@ApiOperation("获取登录会员购物车的相关优惠券")
|
||||
@ApiImplicitParam(name = "type", value = "使用可用:0->不可用;1->可用",
|
||||
defaultValue = "1", allowableValues = "0,1", paramType = "query", dataType = "integer")
|
||||
@RequestMapping(value = "/list/cart/{type}", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public Object listCart(@PathVariable Integer type) {
|
||||
List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(memberService.getCurrentMember().getId());
|
||||
List<SmsCouponHistoryDetail> couponHistoryList = memberCouponService.listCart(cartPromotionItemList, type);
|
||||
return new CommonResult().success(couponHistoryList);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.macro.mall.portal.dao;
|
||||
|
||||
import com.macro.mall.portal.domain.SmsCouponHistoryDetail;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员优惠券领取历史自定义Dao
|
||||
* Created by macro on 2018/8/29.
|
||||
*/
|
||||
public interface SmsCouponHistoryDao {
|
||||
List<SmsCouponHistoryDetail> getDetailList(@Param("memberId") Long memberId);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.macro.mall.portal.domain;
|
||||
|
||||
import com.macro.mall.model.SmsCoupon;
|
||||
import com.macro.mall.model.SmsCouponHistory;
|
||||
import com.macro.mall.model.SmsCouponProductCategoryRelation;
|
||||
import com.macro.mall.model.SmsCouponProductRelation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 优惠券领取历史详情封装
|
||||
* Created by macro on 2018/8/29.
|
||||
*/
|
||||
public class SmsCouponHistoryDetail extends SmsCouponHistory {
|
||||
//相关优惠券信息
|
||||
private SmsCoupon coupon;
|
||||
//优惠券关联商品
|
||||
private List<SmsCouponProductRelation> productRelationList;
|
||||
//优惠券关联商品分类
|
||||
private List<SmsCouponProductCategoryRelation> categoryRelationList;
|
||||
|
||||
public SmsCoupon getCoupon() {
|
||||
return coupon;
|
||||
}
|
||||
|
||||
public void setCoupon(SmsCoupon coupon) {
|
||||
this.coupon = coupon;
|
||||
}
|
||||
|
||||
public List<SmsCouponProductRelation> getProductRelationList() {
|
||||
return productRelationList;
|
||||
}
|
||||
|
||||
public void setProductRelationList(List<SmsCouponProductRelation> productRelationList) {
|
||||
this.productRelationList = productRelationList;
|
||||
}
|
||||
|
||||
public List<SmsCouponProductCategoryRelation> getCategoryRelationList() {
|
||||
return categoryRelationList;
|
||||
}
|
||||
|
||||
public void setCategoryRelationList(List<SmsCouponProductCategoryRelation> categoryRelationList) {
|
||||
this.categoryRelationList = categoryRelationList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.macro.mall.portal.service;
|
||||
|
||||
import com.macro.mall.model.SmsCouponHistory;
|
||||
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||
import com.macro.mall.portal.domain.CommonResult;
|
||||
import com.macro.mall.portal.domain.SmsCouponHistoryDetail;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户优惠券管理Service
|
||||
* Created by macro on 2018/8/29.
|
||||
*/
|
||||
public interface UmsMemberCouponService {
|
||||
/**
|
||||
* 会员添加优惠券
|
||||
*/
|
||||
@Transactional
|
||||
CommonResult add(Long couponId);
|
||||
|
||||
/**
|
||||
* 获取优惠券列表
|
||||
* @param useStatus 优惠券的使用状态
|
||||
*/
|
||||
List<SmsCouponHistory> list(Integer useStatus);
|
||||
|
||||
/**
|
||||
* 根据购物车信息获取可用优惠券
|
||||
*/
|
||||
List<SmsCouponHistoryDetail> listCart(List<CartPromotionItem> cartItemList, Integer type);
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
package com.macro.mall.portal.service.impl;
|
||||
|
||||
import com.macro.mall.mapper.SmsCouponHistoryMapper;
|
||||
import com.macro.mall.mapper.SmsCouponMapper;
|
||||
import com.macro.mall.model.*;
|
||||
import com.macro.mall.portal.dao.SmsCouponHistoryDao;
|
||||
import com.macro.mall.portal.domain.CartPromotionItem;
|
||||
import com.macro.mall.portal.domain.CommonResult;
|
||||
import com.macro.mall.portal.domain.SmsCouponHistoryDetail;
|
||||
import com.macro.mall.portal.service.UmsMemberCouponService;
|
||||
import com.macro.mall.portal.service.UmsMemberService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员优惠券管理Service实现类
|
||||
* Created by macro on 2018/8/29.
|
||||
*/
|
||||
@Service
|
||||
public class UmsMemberCouponServiceImpl implements UmsMemberCouponService {
|
||||
@Autowired
|
||||
private UmsMemberService memberService;
|
||||
@Autowired
|
||||
private SmsCouponMapper couponMapper;
|
||||
@Autowired
|
||||
private SmsCouponHistoryMapper couponHistoryMapper;
|
||||
@Autowired
|
||||
private SmsCouponHistoryDao couponHistoryDao;
|
||||
@Override
|
||||
public CommonResult add(Long couponId) {
|
||||
UmsMember currentMember = memberService.getCurrentMember();
|
||||
//获取优惠券信息,判断数量
|
||||
SmsCoupon coupon = couponMapper.selectByPrimaryKey(couponId);
|
||||
if(coupon==null){
|
||||
return new CommonResult().failed("优惠券不存在");
|
||||
}
|
||||
if(coupon.getCount()<=0){
|
||||
return new CommonResult().failed("优惠券已经领完了");
|
||||
}
|
||||
Date now = new Date();
|
||||
if(now.before(coupon.getEnableTime())){
|
||||
return new CommonResult().failed("优惠券还没到领取时间");
|
||||
}
|
||||
//判断用户领取的优惠券数量是否超过限制
|
||||
SmsCouponHistoryExample couponHistoryExample = new SmsCouponHistoryExample();
|
||||
couponHistoryExample.createCriteria().andCouponIdEqualTo(couponId).andMemberIdEqualTo(currentMember.getId());
|
||||
int count = couponHistoryMapper.countByExample(couponHistoryExample);
|
||||
if(count>=coupon.getPerLimit()){
|
||||
return new CommonResult().failed("您已经领取过该优惠券");
|
||||
}
|
||||
//生成领取优惠券历史
|
||||
SmsCouponHistory couponHistory = new SmsCouponHistory();
|
||||
couponHistory.setCouponId(couponId);
|
||||
couponHistory.setCouponCode(coupon.getCode());
|
||||
couponHistory.setCreateTime(now);
|
||||
couponHistory.setMemberId(currentMember.getId());
|
||||
couponHistory.setMemberNickname(currentMember.getNickname());
|
||||
//主动领取
|
||||
couponHistory.setGetType(1);
|
||||
//未使用
|
||||
couponHistory.setUseStatus(0);
|
||||
couponHistoryMapper.insert(couponHistory);
|
||||
//修改优惠券表的数量、领取数量
|
||||
coupon.setCount(coupon.getCount()-1);
|
||||
coupon.setReceiveCount(coupon.getReceiveCount()==null?1:coupon.getReceiveCount()+1);
|
||||
couponMapper.updateByPrimaryKey(coupon);
|
||||
return new CommonResult().success("领取成功",null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SmsCouponHistory> list(Integer useStatus) {
|
||||
UmsMember currentMember = memberService.getCurrentMember();
|
||||
SmsCouponHistoryExample couponHistoryExample=new SmsCouponHistoryExample();
|
||||
SmsCouponHistoryExample.Criteria criteria = couponHistoryExample.createCriteria();
|
||||
criteria.andMemberIdEqualTo(currentMember.getId());
|
||||
if(useStatus!=null){
|
||||
criteria.andUseStatusEqualTo(useStatus);
|
||||
}
|
||||
return couponHistoryMapper.selectByExample(couponHistoryExample);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SmsCouponHistoryDetail> listCart(List<CartPromotionItem> cartItemList, Integer type) {
|
||||
UmsMember currentMember = memberService.getCurrentMember();
|
||||
Date now = new Date();
|
||||
//获取该用户所有优惠券
|
||||
List<SmsCouponHistoryDetail> allList = couponHistoryDao.getDetailList(currentMember.getId());
|
||||
//根据优惠券使用类型来判断优惠券是否可用
|
||||
List<SmsCouponHistoryDetail> enableList = new ArrayList<>();
|
||||
List<SmsCouponHistoryDetail> disableList = new ArrayList<>();
|
||||
for (SmsCouponHistoryDetail couponHistoryDetail : allList) {
|
||||
Integer useType = couponHistoryDetail.getCoupon().getUseType();
|
||||
BigDecimal minPoint = couponHistoryDetail.getCoupon().getMinPoint();
|
||||
Date endTime = couponHistoryDetail.getCoupon().getEndTime();
|
||||
if(useType.equals(0)){
|
||||
//0->全场通用
|
||||
//判断是否满足优惠起点
|
||||
//计算购物车商品的总价
|
||||
BigDecimal totalAmount = calcTotalAmount(cartItemList);
|
||||
if(now.before(endTime)&&totalAmount.subtract(minPoint).intValue()>=0){
|
||||
enableList.add(couponHistoryDetail);
|
||||
}else{
|
||||
disableList.add(couponHistoryDetail);
|
||||
}
|
||||
}else if(useType.equals(1)){
|
||||
//1->指定分类
|
||||
//计算指定分类商品的总价
|
||||
List<Long> productCategoryIds = new ArrayList<>();
|
||||
for (SmsCouponProductCategoryRelation categoryRelation : couponHistoryDetail.getCategoryRelationList()) {
|
||||
productCategoryIds.add(categoryRelation.getProductCategoryId());
|
||||
}
|
||||
BigDecimal totalAmount = calcTotalAmountByproductCategoryId(cartItemList,productCategoryIds);
|
||||
if(now.before(endTime)&&totalAmount.intValue()>0&&totalAmount.subtract(minPoint).intValue()>=0){
|
||||
enableList.add(couponHistoryDetail);
|
||||
}else{
|
||||
disableList.add(couponHistoryDetail);
|
||||
}
|
||||
}else if(useType.equals(2)){
|
||||
//2->指定商品
|
||||
//计算指定商品的总价
|
||||
List<Long> productIds = new ArrayList<>();
|
||||
for (SmsCouponProductRelation productRelation : couponHistoryDetail.getProductRelationList()) {
|
||||
productIds.add(productRelation.getProductId());
|
||||
}
|
||||
BigDecimal totalAmount = calcTotalAmountByProductId(cartItemList,productIds);
|
||||
if(now.before(endTime)&&totalAmount.intValue()>0&&totalAmount.subtract(minPoint).intValue()>=0){
|
||||
enableList.add(couponHistoryDetail);
|
||||
}else{
|
||||
disableList.add(couponHistoryDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(type.equals(1)){
|
||||
return enableList;
|
||||
}else{
|
||||
return disableList;
|
||||
}
|
||||
}
|
||||
|
||||
private BigDecimal calcTotalAmount(List<CartPromotionItem> cartItemList) {
|
||||
BigDecimal total = new BigDecimal("0");
|
||||
for (CartPromotionItem item : cartItemList) {
|
||||
BigDecimal realPrice = item.getPrice().subtract(item.getReduceAmount());
|
||||
total=total.add(realPrice.multiply(new BigDecimal(item.getQuantity())));
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
private BigDecimal calcTotalAmountByproductCategoryId(List<CartPromotionItem> cartItemList,List<Long> productCategoryIds) {
|
||||
BigDecimal total = new BigDecimal("0");
|
||||
for (CartPromotionItem item : cartItemList) {
|
||||
if(productCategoryIds.contains(item.getProductCategoryId())){
|
||||
BigDecimal realPrice = item.getPrice().subtract(item.getReduceAmount());
|
||||
total=total.add(realPrice.multiply(new BigDecimal(item.getQuantity())));
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
private BigDecimal calcTotalAmountByProductId(List<CartPromotionItem> cartItemList,List<Long> productIds) {
|
||||
BigDecimal total = new BigDecimal("0");
|
||||
for (CartPromotionItem item : cartItemList) {
|
||||
if(productIds.contains(item.getProductId())){
|
||||
BigDecimal realPrice = item.getPrice().subtract(item.getReduceAmount());
|
||||
total=total.add(realPrice.multiply(new BigDecimal(item.getQuantity())));
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
}
|
||||
35
mall-portal/src/main/resources/dao/SmsCouponHistoryDao.xml
Normal file
35
mall-portal/src/main/resources/dao/SmsCouponHistoryDao.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?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.macro.mall.portal.dao.SmsCouponHistoryDao">
|
||||
<resultMap id="couponHistoryDetailMap" type="com.macro.mall.portal.domain.SmsCouponHistoryDetail"
|
||||
extends="com.macro.mall.mapper.SmsCouponHistoryMapper.BaseResultMap">
|
||||
<association property="coupon" resultMap="com.macro.mall.mapper.SmsCouponMapper.BaseResultMap" columnPrefix="c_">
|
||||
</association>
|
||||
<collection property="productRelationList" columnPrefix="cpr_" resultMap="com.macro.mall.mapper.SmsCouponProductRelationMapper.BaseResultMap">
|
||||
</collection>
|
||||
<collection property="categoryRelationList" columnPrefix="cpcr_" resultMap="com.macro.mall.mapper.SmsCouponProductCategoryRelationMapper.BaseResultMap">
|
||||
</collection>
|
||||
</resultMap>
|
||||
<select id="getDetailList" resultMap="couponHistoryDetailMap">
|
||||
SELECT
|
||||
ch.*,
|
||||
c.id c_id,
|
||||
c.name c_name,
|
||||
c.amount c_amount,
|
||||
c.min_point c_min_point,
|
||||
c.platform c_platform,
|
||||
c.start_time c_start_time,
|
||||
c.end_time c_end_time,
|
||||
c.note c_note,
|
||||
c.use_type c_use_type,
|
||||
c.type c_type,
|
||||
cpr.id cpr_id,cpr.product_id cpr_product_id,
|
||||
cpcr.id cpcr_id,cpcr.product_category_id cpcr_product_category_id
|
||||
FROM
|
||||
sms_coupon_history ch
|
||||
LEFT JOIN sms_coupon c ON ch.coupon_id = c.id
|
||||
LEFT JOIN sms_coupon_product_relation cpr ON cpr.coupon_id = c.id
|
||||
LEFT JOIN sms_coupon_product_category_relation cpcr ON cpcr.coupon_id = c.id
|
||||
WHERE ch.member_id = #{memberId}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user