package com.hongqiang.shop.modules.account.dao;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.persistence.FlushModeType;
import org.springframework.stereotype.Repository;
import com.hongqiang.shop.common.base.persistence.BaseDaoImpl;
import com.hongqiang.shop.common.base.persistence.Page;
import com.hongqiang.shop.common.utils.Pageable;
import com.hongqiang.shop.modules.entity.Coupon;
import com.hongqiang.shop.modules.entity.CouponCode;
import com.hongqiang.shop.modules.entity.Member;
@Repository
public class CouponCodeDaoImpl extends BaseDaoImpl<CouponCode,Long> implements
CouponCodeDaoCustom {
@Override
public boolean codeExists(String code) {
if (code == null)
return false;
String str = "select count(*) from CouponCode couponCode where lower(couponCode.code) = lower(:code)";
Long localLong = (Long) this.getEntityManager()
.createQuery(str, Long.class)
.setFlushMode(FlushModeType.COMMIT).setParameter("code", code)
.getSingleResult();
return localLong.longValue() > 0L;
}
@Override
public CouponCode build(Coupon coupon, Member member) {
CouponCode couponCode = new CouponCode();
String random = UUID.randomUUID().toString().toUpperCase();
couponCode.setCode(coupon.getPrefix() + random.substring(0, 8)
+ random.substring(9, 13) + random.substring(14, 18)
+ random.substring(19, 23) + random.substring(24));
couponCode.setIsUsed(Boolean.valueOf(false));
couponCode.setCoupon(coupon);
couponCode.setMember(member);
super.persist(couponCode);
return couponCode;
}
@Override
public List<CouponCode> build(Coupon coupon, Member member, Integer count) {
List<CouponCode> couponCodes = new ArrayList<CouponCode>();
for (int i = 0; i < count.intValue(); i++) {
CouponCode localCouponCode = build(coupon, member);
couponCodes.add(localCouponCode);
}
super.flush();
super.clear();
return couponCodes;
}
@Override
public Page<CouponCode> findPage(Member member, Pageable pageable) {
String sqlString = " select couponCode from CouponCode couponCode where 1=1 ";
List<Object> params = new ArrayList<Object>();
if (member != null) {
sqlString += " and couponCode.member = ? ";
params.add(member);
}
return super.findPage(sqlString, params, pageable);
}
@Override
public Page<CouponCode> findPage(Pageable pageable) {
String qlString = "select couponCode from CouponCode couponCode where 1=1 ";
List<Object> parameter = new ArrayList<Object>();
return super.findPage(qlString, parameter, pageable);
}
@Override
public Long count(Coupon coupon, Member member, Boolean hasBegun,
Boolean hasExpired, Boolean isUsed) {
String sqlString = " select couponCode from CouponCode couponCode where 1=1 ";
List<Object> params = new ArrayList<Object>();
if (coupon != null) {
sqlString += " and couponCode.coupon = ? ";
params.add(coupon);
}
if (member != null) {
sqlString += " and couponCode.member = ? ";
params.add(member);
}
Date nowaday = new Date();
if (hasBegun != null) {
if (hasBegun.booleanValue()) {
sqlString += " and (couponCode.coupon.beginDate != null or couponCode.coupon.beginDate <= ?) ";
params.add(nowaday);
} else {
sqlString += " and (couponCode.coupon.beginDate != null and couponCode.coupon.beginDate > ?) ";
params.add(nowaday);
}
}
if (hasExpired != null) {
if (hasExpired.booleanValue()) {
sqlString += " and (couponCode.coupon.endDate != null and couponCode.coupon.beginDate < ?) ";
params.add(nowaday);
} else {
sqlString += " and (couponCode.coupon.endDate != null or couponCode.coupon.beginDate >= ?) ";
params.add(nowaday);
}
}
if (isUsed != null) {
sqlString += " and couponCode.isUsed = ? ";
params.add(isUsed);
}
StringBuilder stringBuilder = new StringBuilder(sqlString);
return super.count(stringBuilder, null, params);
}
}