package com.hongqiang.shop.modules.account.service;
import java.util.List;
import javax.persistence.LockModeType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import com.hongqiang.shop.common.base.persistence.Page;
import com.hongqiang.shop.common.service.BaseService;
import com.hongqiang.shop.common.utils.Pageable;
import com.hongqiang.shop.modules.account.dao.CouponCodeDao;
import com.hongqiang.shop.modules.entity.Coupon;
import com.hongqiang.shop.modules.entity.CouponCode;
import com.hongqiang.shop.modules.entity.Member;
import com.hongqiang.shop.modules.user.dao.MemberDao;
@Service
public class CouponCodeServiceImpl extends BaseService implements
CouponCodeService {
@Autowired
private CouponCodeDao couponCodeDao;
@Autowired
private MemberDao memberDao;
@Transactional(readOnly = true)
public boolean codeExists(String code) {
return this.couponCodeDao.codeExists(code);
}
@Transactional(readOnly = true)
public CouponCode findByCode(String code) {
return this.couponCodeDao.findByCode(code);
}
@Transactional(readOnly = true)
public CouponCode find(Long id) {
return this.couponCodeDao.find(id);
}
@Transactional(readOnly = true)
public Page<CouponCode> findPage(Pageable pageable) {
return this.couponCodeDao.findPage(pageable);
}
public CouponCode build(Coupon coupon, Member member) {
return this.couponCodeDao.build(coupon, member);
}
public List<CouponCode> build(Coupon coupon, Member member, Integer count) {
return this.couponCodeDao.build(coupon, member, count);
}
public CouponCode exchange(Coupon coupon, Member member) {
Assert.notNull(coupon);
Assert.notNull(member);
this.memberDao.lock(member, LockModeType.PESSIMISTIC_WRITE);
member.setPoint(Long.valueOf(member.getPoint().longValue()
- coupon.getPoint().intValue()));
this.memberDao.merge(member);
return this.couponCodeDao.build(coupon, member);
}
@Transactional(readOnly = true)
public Page<CouponCode> findPage(Member member, Pageable pageable) {
return this.couponCodeDao.findPage(member, pageable);
}
@Transactional(readOnly = true)
public Long count(Coupon coupon, Member member, Boolean hasBegun,
Boolean hasExpired, Boolean isUsed) {
return this.couponCodeDao.count(coupon, member, hasBegun, hasExpired,
isUsed);
}
@Transactional(readOnly = true)
public void save(CouponCode couponCode) {
this.couponCodeDao.persist(couponCode);
}
@Transactional(readOnly = true)
public CouponCode update(CouponCode couponCode) {
return (CouponCode) this.couponCodeDao.merge(couponCode);
}
@Transactional(readOnly = true)
public CouponCode update(CouponCode couponCode, String[] ignoreProperties) {
return (CouponCode) this.couponCodeDao.update(couponCode,
ignoreProperties);
}
@Transactional(readOnly = true)
public void delete(Long id) {
this.couponCodeDao.delete(id);
}
@Transactional(readOnly = true)
public void delete(Long[] ids) {
if (ids != null)
for (Long localSerializable : ids)
this.couponCodeDao.delete(localSerializable);
}
@Transactional(readOnly = true)
public void delete(CouponCode couponCode) {
this.couponCodeDao.delete(couponCode);
}
}