Commit 91a10df5 by unknown

add the vipmember price check

parent f24e03dc
......@@ -4,6 +4,7 @@
package com.ctrip.fun.golf.dao.user;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import org.hibernate.Criteria;
......@@ -33,5 +34,17 @@ public class VipMemberDiscountDao extends GenericHibernateDao<VipMemberDiscount,
return null;
}
}
public VipMemberDiscount getVipmemberDiscount(String uid, BigDecimal rate) {
Criteria criteria = this.getCriteria();
criteria.add(Restrictions.eq("uid", uid));
criteria.add(Restrictions.eq("discountRate", rate));
List<VipMemberDiscount> list = criteria.list();
if (list != null && list.size() > 0) {
return list.get(0);
} else {
return null;
}
}
}
......@@ -127,6 +127,14 @@ public class AsmCourseresource implements java.io.Serializable {
*/
private Double commission;
/**vip会员首次优惠*/
private Double vipFirstReduction;
/**vip会员随机最低优惠*/
private Double vipMinRandom;
/**vip会员随机最高优惠*/
private Double vipMaxRandom;
@Id
@Column(name = "id", unique = true, nullable = false)
......@@ -754,7 +762,29 @@ public class AsmCourseresource implements java.io.Serializable {
public void setCommission(Double commission) {
this.commission = commission;
}
public Double getVipFirstReduction() {
return vipFirstReduction;
}
public void setVipFirstReduction(Double vipFirstReduction) {
this.vipFirstReduction = vipFirstReduction;
}
public Double getVipMinRandom() {
return vipMinRandom;
}
public void setVipMinRandom(Double vipMinRandom) {
this.vipMinRandom = vipMinRandom;
}
public Double getVipMaxRandom() {
return vipMaxRandom;
}
public void setVipMaxRandom(Double vipMaxRandom) {
this.vipMaxRandom = vipMaxRandom;
}
}
......@@ -608,6 +608,9 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
}
this.checkVourcher(abstractOrderBean);
this.checkInsurance(abstractOrderBean);
//add by caosy
this.checkVipMemberInfo(abstractOrderBean);
this.checkOrderItem(abstractOrderBean);
this.checkTotalAmount(abstractOrderBean);
if (this.getTotalVoucherAmount(abstractOrderBean.getVoucherList()).compareTo(abstractOrderBean.getVoucherAmount()) != 0) {
......@@ -673,6 +676,12 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
return totAmount;
}
protected void checkVipMemberInfo(H abstractOrderBean) {
}
/**
* @param abstractOrderBean
*/
......
......@@ -62,6 +62,8 @@ import com.ctrip.fun.golf.dao.product.CourseProductDao;
import com.ctrip.fun.golf.dao.product.CourseResourceDao;
import com.ctrip.fun.golf.dao.product.FlashSaleDao;
import com.ctrip.fun.golf.dao.product.ResourcePriceDao;
import com.ctrip.fun.golf.dao.user.UserExtDao;
import com.ctrip.fun.golf.dao.user.VipMemberDiscountDao;
import com.ctrip.fun.golf.domain.advert.CampaignBill;
import com.ctrip.fun.golf.domain.assemble.AsmCourseresource;
import com.ctrip.fun.golf.domain.basic.Voucher;
......@@ -74,10 +76,13 @@ import com.ctrip.fun.golf.domain.product.CourseProduct;
import com.ctrip.fun.golf.domain.product.CourseResource;
import com.ctrip.fun.golf.domain.product.FlashSale;
import com.ctrip.fun.golf.domain.product.ResourcePrice;
import com.ctrip.fun.golf.domain.user.UserExt;
import com.ctrip.fun.golf.domain.user.VipMemberDiscount;
import com.ctrip.fun.golf.exceptions.OrderException;
import com.ctrip.fun.golf.service.basic.OperationMessageService;
import com.ctrip.fun.golf.service.game.GameApplyService;
import com.ctrip.fun.golf.service.product.CourseResourceService;
import com.ctrip.fun.golf.service.user.UserExtService;
import com.ctrip.fun.golf.service.user.UserService;
import com.ctrip.fun.golf.utils.JobUtil;
import com.ctrip.fun.golf.vo.PagedEntityBean;
......@@ -143,6 +148,8 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
private CampaignStatsDao campaignStatsDao = null;
private OperationMessageService operationMessageService;
private VipMemberDiscountDao vipmemberDiscountDao;
public Order findByResourceId(String uid, int resourceId, Date playDate) {
List<OrderItem> orderItemList = orderItemDao.queryOrderItemLastest(resourceId, playDate);
......@@ -571,12 +578,91 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
throw new OrderException(-5, "返现金额有误");
}
}
checkVipMemberResPrice(asmCourseresource, resourceInfo);
}
}
}
/**
private void checkVipMemberResPrice(AsmCourseresource asmCourseresource, CourseOrderResourceBean resourceInfo){
if(resourceInfo == null || asmCourseresource == null) return;
boolean isError=false;
//判断资源
if(asmCourseresource.getVipFirstReduction() != null && asmCourseresource.getVipFirstReduction().compareTo(resourceInfo.getVipFirstReduction()) != 0){
isError = true;
}
if(asmCourseresource.getVipMaxRandom() != null && asmCourseresource.getVipMaxRandom().compareTo(resourceInfo.getVipMaxRandom()) != 0){
isError = true;
}
if(asmCourseresource.getVipMinRandom() != null && asmCourseresource.getVipMinRandom().compareTo(resourceInfo.getVipMinRandom()) != 0){
isError = true;
}
if(isError){
throw new OrderException(-6, "该球场资源出错,请退出重试!");
}
}
@Override
protected void checkVipMemberInfo(CourseOrderBean courseOrderBean) {
if(courseOrderBean.getVipmemberDiscount() == null || courseOrderBean.getVipmemberDiscountRate() == null || courseOrderBean.getVipmemberDiscount().compareTo(BigDecimal.ZERO) == 0){
return;
}
boolean isError=false;
//判断vip折扣比例
BigDecimal vipmemberDiscountRate = courseOrderBean.getVipmemberDiscountRate();
if (vipmemberDiscountRate != null) {
VipMemberDiscount discount = vipmemberDiscountDao.getVipmemberDiscount(courseOrderBean.getUid(), vipmemberDiscountRate);
if(discount == null){
isError = true;
}
}
if(isError){
throw new OrderException(-7, "用户优惠折扣出错,请退出登陆重试!");
}
//判断vip优惠总额
List<CustomerInfoBean> customers = courseOrderBean.getCustomerInfoList();
List<CourseOrderResourceBean> resourceList = courseOrderBean.getResourceList();
CourseOrderResourceBean resBean = resourceList.get(0);
Double vipFirstReduction = resBean.getVipFirstReduction()==null? 0:resBean.getVipFirstReduction();
Double vipMaxRandom = resBean.getVipMaxRandom()== null? 0 : resBean.getVipMaxRandom();
Double vipMinRandom = resBean.getVipMinRandom()==null? 0:resBean.getVipMinRandom();
if(vipFirstReduction == 0 || vipMaxRandom == 0 || vipMinRandom == 0){
return;
}
BigDecimal vipRandomD = new BigDecimal(vipMaxRandom.doubleValue()).subtract(new BigDecimal(vipMinRandom.doubleValue())) ;
BigDecimal vipRandomDiscount = new BigDecimal(vipMinRandom.doubleValue()).add(vipmemberDiscountRate.multiply(vipRandomD));
BigDecimal totalDiscountAmount = new BigDecimal(0);
for (CustomerInfoBean customerInfoBean : customers) {
boolean isVipMember = false;
if(customerInfoBean.getOneselfFlag()){
//本人
isVipMember = getUserExtService().isVipMember(courseOrderBean.getUid());
UserExt user = getUserExtDao().getByUid(courseOrderBean.getUid());
if(isVipMember){
if(user.getVipmemberDiscounted() == 0){
//新用户
totalDiscountAmount.add(new BigDecimal(vipFirstReduction.doubleValue()));
}else{
totalDiscountAmount.add(vipRandomDiscount);
}
}
}else{
isVipMember = getUserExtService().isVipMemberByPhone(customerInfoBean.getMobileNo());
if(isVipMember){
totalDiscountAmount.add(vipRandomDiscount);
}
}
}
if(totalDiscountAmount.compareTo(courseOrderBean.getVipmemberDiscount()) != 0){
isError = true;
}
if(isError){
throw new OrderException(-8, "vip会员优惠价格出错 ,请退出重试!");
}
}
/**
* @param findById
* @return
*/
......@@ -1174,6 +1260,14 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
this.operationMessageService = operationMessageService;
}
public VipMemberDiscountDao getVipmemberDiscountDao() {
return vipmemberDiscountDao;
}
public void setVipmemberDiscountDao(VipMemberDiscountDao vipmemberDiscountDao) {
this.vipmemberDiscountDao = vipmemberDiscountDao;
}
@Override
protected void checkVourcherConditionBean(
MultipleCourseConditionBean multipleCourseConditionBean,
......
......@@ -120,6 +120,18 @@ public class UserExtService extends GenericService<UserExtDao, UserExt, Integer,
return vipGrade;
}
public boolean isVipMember(String uid){
UserExt user = this.userExtDao.getByUid(uid);
int vipGrade = updateUserIdentity(user);
return (vipGrade & VipGradeEnum.VIP4.getKey()) == VipGradeEnum.VIP4.getKey();
}
public boolean isVipMemberByPhone(String phone){
UserExt user = this.userExtDao.GetUserExtInfoByPhone(phone);
int vipGrade = updateUserIdentity(user);
return (vipGrade & VipGradeEnum.VIP4.getKey()) == VipGradeEnum.VIP4.getKey();
}
public Integer updateBlockFlag(UserExt bean) {
return userExtDao.updateBlockFlag(bean);
}
......
......@@ -137,6 +137,7 @@
<property name="gameApplyService" ref="gameApplyService"></property>
<property name="courseBaseNotifyUrl" value="${payment.courseBaseNotifyUrl}"></property>
<property name="operationMessageService" ref="operationMessageService"></property>
<property name="vipmemberDiscountDao" ref="vipmemberDiscountDao"></property>
</bean>
<bean name="eventActivityOrderService" class="com.ctrip.fun.golf.service.order.EventActivityOrderService" parent="abstractOrderService">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment