package com.caimei.modules.coupon.service; import com.caimei.modules.coupon.dao.CmCouponDao; import com.caimei.modules.coupon.dao.CmCouponVipDao; import com.caimei.modules.coupon.entity.*; import com.caimei.modules.user.entity.NewCmShop; import com.caimei.modules.utils.DateUtil; import com.thinkgem.jeesite.common.persistence.Page; import com.thinkgem.jeesite.common.service.CrudService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author zzj */ @Service @Transactional(readOnly = true) public class CmVipCouponService extends CrudService { @Autowired private CmCouponService cmCouponService; @Autowired private CmCouponVipDao cmCouponVipDao; @Autowired private CmCouponDao cmCouponDao; @Override public CmVipCoupon get(String id) { CmVipCoupon vipCoupon = super.get(id); if (null != vipCoupon) { setVipCouponStatus(vipCoupon); List couponList = new ArrayList<>(); List bindCoupons = cmCouponVipDao.getBindCoupons(id); for (String s : bindCoupons) { CmCoupon cmCoupon = cmCouponService.get(s); couponList.add(cmCoupon); } vipCoupon.setCouponList(couponList); } return vipCoupon; } @Override public Page findPage(Page page, CmVipCoupon cmVipCoupon) { Page vipPage = super.findPage(page, cmVipCoupon); List cmVipCouponList = vipPage.getList(); cmVipCouponList.forEach(vipCoupon -> { setVipCouponStatus(vipCoupon); List bindCoupons = cmCouponVipDao.getBindCoupons(vipCoupon.getId()); List couponList = cmCouponVipDao.getCouponListByIds(bindCoupons, cmVipCoupon.getCouponType(), cmVipCoupon.getStatus()); Date date = new Date(); couponList.forEach(coupon -> { cmCouponService.setCouponStatus(coupon, date); if ("1".equals(coupon.getCouponsMode())) { //兑换码券 Integer num = cmCouponDao.findQuantityRedeemed(coupon.getId()); coupon.setCodeNum(num); } else { if (2 == coupon.getCouponType()) { //用户专享劵 CmCouponClub couponClub = cmCouponDao.findCouponClub(coupon.getId()); if (couponClub == null) { coupon.setClaimStatus("1"); } else { coupon.setClaimStatus("2"); } coupon.setCouponClub(couponClub); } } }); vipCoupon.setCouponList(couponList); }); return vipPage; } /** * 设置会员优惠生效状态 */ private void setVipCouponStatus(CmVipCoupon vipCoupon) { if (!"2".equals(vipCoupon.getStatus())) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM"); String current = df.format(new Date()); String useTime = vipCoupon.getUseTime(); // 0未生效 1已生效 2已关闭 3已失效 if (df.parse(useTime).after(df.parse(current))) { // 未生效 vipCoupon.setStatus("0"); } else if (df.parse(useTime).before(df.parse(current))) { // 已失效 vipCoupon.setStatus("3"); } else { // 生效 vipCoupon.setStatus("1"); } } catch (ParseException e) { e.printStackTrace(); } } } /** * 设置4张券的表单数据 */ public SvipCouponForm setSvipcouponForms(CmVipCoupon cmVipCoupon){ SvipCouponForm svipcouponForm = new SvipCouponForm(); svipcouponForm.setMonth(cmVipCoupon.getUseTime()); if (null != cmVipCoupon.getCouponList()){ List couponList = cmVipCoupon.getCouponList(); for (int i = 0; i < couponList.size(); i++) { setSvipcouponForm(svipcouponForm, i, couponList.get(i)); } } return svipcouponForm; }; private SvipCouponForm setSvipcouponForm(SvipCouponForm svipcouponForm, int index, CmCoupon cmCoupon){ if (index==0) { svipcouponForm.setCouponId1(cmCoupon.getId()); svipcouponForm.setCouponAmount1(cmCoupon.getCouponAmount()); svipcouponForm.setTouchPrice1(cmCoupon.getTouchPrice()); svipcouponForm.setCouponType1(cmCoupon.getCouponType().toString()); svipcouponForm.setCategoryType1(cmCoupon.getCategoryType()); svipcouponForm.setProductType1(cmCoupon.getProductType()); svipcouponForm.setShopId1(cmCoupon.getShopId()); if (cmCoupon.getCouponType() == 0) { // 活动券,查询活动商品 if ("2".equals(cmCoupon.getProductType())) { List associateList = cmCouponService.findByProductType(cmCoupon); svipcouponForm.setAssociateList1(associateList); } } if (cmCoupon.getCouponType() == 3) { // 店铺券 NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId()); svipcouponForm.setShopName1(shop.getName()); svipcouponForm.setShop1(shop); } } else if (index==1){ svipcouponForm.setCouponId2(cmCoupon.getId()); svipcouponForm.setCouponAmount2(cmCoupon.getCouponAmount()); svipcouponForm.setTouchPrice2(cmCoupon.getTouchPrice()); svipcouponForm.setCouponType2(cmCoupon.getCouponType().toString()); svipcouponForm.setCategoryType2(cmCoupon.getCategoryType()); svipcouponForm.setProductType2(cmCoupon.getProductType()); svipcouponForm.setShopId2(cmCoupon.getShopId()); if (cmCoupon.getCouponType() == 0) { // 活动券,查询活动商品 if ("2".equals(cmCoupon.getProductType())) { List associateList = cmCouponService.findByProductType(cmCoupon); svipcouponForm.setAssociateList2(associateList); } } if (cmCoupon.getCouponType() == 3) { // 店铺券 NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId()); svipcouponForm.setShopName2(shop.getName()); svipcouponForm.setShop2(shop); } } else if (index==2){ svipcouponForm.setCouponId3(cmCoupon.getId()); svipcouponForm.setCouponAmount3(cmCoupon.getCouponAmount()); svipcouponForm.setTouchPrice3(cmCoupon.getTouchPrice()); svipcouponForm.setCouponType3(cmCoupon.getCouponType().toString()); svipcouponForm.setCategoryType3(cmCoupon.getCategoryType()); svipcouponForm.setProductType3(cmCoupon.getProductType()); svipcouponForm.setShopId3(cmCoupon.getShopId()); if (cmCoupon.getCouponType() == 0) { // 活动券,查询活动商品 if ("2".equals(cmCoupon.getProductType())) { List associateList = cmCouponService.findByProductType(cmCoupon); svipcouponForm.setAssociateList3(associateList); } } if (cmCoupon.getCouponType() == 3) { // 店铺券 NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId()); svipcouponForm.setShopName3(shop.getName()); svipcouponForm.setShop3(shop); } } else if (index==3){ svipcouponForm.setCouponId4(cmCoupon.getId()); svipcouponForm.setCouponAmount4(cmCoupon.getCouponAmount()); svipcouponForm.setTouchPrice4(cmCoupon.getTouchPrice()); svipcouponForm.setCouponType4(cmCoupon.getCouponType().toString()); svipcouponForm.setCategoryType4(cmCoupon.getCategoryType()); svipcouponForm.setProductType4(cmCoupon.getProductType()); svipcouponForm.setShopId4(cmCoupon.getShopId()); if (cmCoupon.getCouponType() == 0) { // 活动券,查询活动商品 if ("2".equals(cmCoupon.getProductType())) { List associateList = cmCouponService.findByProductType(cmCoupon); svipcouponForm.setAssociateList4(associateList); } } if (cmCoupon.getCouponType() == 3) { // 店铺券 NewCmShop shop = cmCouponVipDao.getShopInfoByShopId(cmCoupon.getShopId()); svipcouponForm.setShopName4(shop.getName()); svipcouponForm.setShop4(shop); } } return svipcouponForm; } /** * 保存4张券的表单数据 * @param svipcouponForm */ @Transactional(readOnly = false) public void saveVipCoupon(SvipCouponForm svipcouponForm){ CmVipCoupon cmVipCoupon = new CmVipCoupon(); cmVipCoupon.setId(svipcouponForm.getId()); cmVipCoupon.setUseTime(svipcouponForm.getMonth()); cmVipCoupon.setUpdateTime(new Date()); cmVipCoupon.setStatus("1"); cmVipCoupon.setDelFlag("0"); // 解析 svipcouponForm -> 组装 CmCoupon 列表 保存 CmCoupon coupon1 = new CmCoupon(); CmCoupon coupon2 = new CmCoupon(); CmCoupon coupon3 = new CmCoupon(); CmCoupon coupon4 = new CmCoupon(); boolean flag = false; if(StringUtils.isNotBlank(cmVipCoupon.getId())){ // 修改 coupon1.setId(svipcouponForm.getCouponId1()); coupon2.setId(svipcouponForm.getCouponId2()); coupon3.setId(svipcouponForm.getCouponId3()); coupon4.setId(svipcouponForm.getCouponId4()); cmCouponVipDao.updateVipCouponMonth(cmVipCoupon); } else { flag = true; cmCouponVipDao.insertVipCouponMonth(cmVipCoupon); } Date beginTime = DateUtil.getMinDay(svipcouponForm.getMonth()); Date endTime = DateUtil.getMaxDay(svipcouponForm.getMonth()); /* * 第1张券 */ coupon1.setName("超级会员专属优惠券"); coupon1.setStartDate(beginTime); coupon1.setEndDate(endTime); coupon1.setCouponAmount(svipcouponForm.getCouponAmount1()); coupon1.setTouchPrice(svipcouponForm.getTouchPrice1()); coupon1.setStatus("1"); // 0活动券 1品类券 3店铺券 if ("0".equals(svipcouponForm.getCouponType1())){ coupon1.setCouponType(0); coupon1.setProductType(svipcouponForm.getProductType1()); if ("2".equals(svipcouponForm.getProductType1())){ // 指定商品 coupon1.setProductInfo(svipcouponForm.getProductInfo1()); } } else if ("1".equals(svipcouponForm.getCouponType1())) { coupon1.setCategoryType(svipcouponForm.getCategoryType1()); coupon1.setCouponType(1); } else if ("3".equals(svipcouponForm.getCouponType1())) { coupon1.setShopId(svipcouponForm.getShopId1()); coupon1.setCouponType(3); } cmCouponService.save(coupon1); /* * 第2张券 */ coupon2.setName("超级会员专属优惠券"); coupon2.setStartDate(beginTime); coupon2.setEndDate(endTime); coupon2.setCouponAmount(svipcouponForm.getCouponAmount2()); coupon2.setTouchPrice(svipcouponForm.getTouchPrice2()); coupon2.setStatus("1"); // 0活动券 1品类券 3店铺券 if ("0".equals(svipcouponForm.getCouponType2())){ coupon2.setCouponType(0); coupon2.setProductType(svipcouponForm.getProductType2()); if ("2".equals(svipcouponForm.getProductType2())){ // 指定商品 coupon2.setProductInfo(svipcouponForm.getProductInfo2()); } } else if ("1".equals(svipcouponForm.getCouponType2())) { coupon2.setCategoryType(svipcouponForm.getCategoryType2()); coupon2.setCouponType(1); } else if ("3".equals(svipcouponForm.getCouponType2())) { coupon2.setShopId(svipcouponForm.getShopId2()); coupon2.setCouponType(3); } cmCouponService.save(coupon2); /* * 第3张券 */ coupon3.setName("超级会员专属优惠券"); coupon3.setStartDate(beginTime); coupon3.setEndDate(endTime); coupon3.setCouponAmount(svipcouponForm.getCouponAmount3()); coupon3.setTouchPrice(svipcouponForm.getTouchPrice3()); coupon3.setStatus("1"); // 0活动券 1品类券 3店铺券 if ("0".equals(svipcouponForm.getCouponType3())){ coupon3.setCouponType(0); coupon3.setProductType(svipcouponForm.getProductType3()); if ("2".equals(svipcouponForm.getProductType3())){ // 指定商品 coupon3.setProductInfo(svipcouponForm.getProductInfo3()); } } else if ("1".equals(svipcouponForm.getCouponType3())) { coupon3.setCategoryType(svipcouponForm.getCategoryType3()); coupon3.setCouponType(1); } else if ("3".equals(svipcouponForm.getCouponType3())) { coupon3.setShopId(svipcouponForm.getShopId3()); coupon3.setCouponType(3); } cmCouponService.save(coupon3); /* * 第4张券 */ coupon4.setName("超级会员专属优惠券"); coupon4.setStartDate(beginTime); coupon4.setEndDate(endTime); coupon4.setCouponAmount(svipcouponForm.getCouponAmount4()); coupon4.setTouchPrice(svipcouponForm.getTouchPrice4()); coupon4.setStatus("1"); // 0活动券 1品类券 3店铺券 if ("0".equals(svipcouponForm.getCouponType4())){ coupon4.setCouponType(0); coupon4.setProductType(svipcouponForm.getProductType4()); if ("2".equals(svipcouponForm.getProductType4())){ // 指定商品 coupon4.setProductInfo(svipcouponForm.getProductInfo4()); } } else if ("1".equals(svipcouponForm.getCouponType4())) { coupon4.setCategoryType(svipcouponForm.getCategoryType4()); coupon4.setCouponType(1); } else if ("3".equals(svipcouponForm.getCouponType4())) { coupon4.setShopId(svipcouponForm.getShopId4()); coupon4.setCouponType(3); } cmCouponService.save(coupon4); /* * vip优惠券月份关系 */ CmVipCouponRelation relation1 = new CmVipCouponRelation(); CmVipCouponRelation relation2 = new CmVipCouponRelation(); CmVipCouponRelation relation3 = new CmVipCouponRelation(); CmVipCouponRelation relation4 = new CmVipCouponRelation(); relation1.setMontId(cmVipCoupon.getId()); relation2.setMontId(cmVipCoupon.getId()); relation3.setMontId(cmVipCoupon.getId()); relation4.setMontId(cmVipCoupon.getId()); relation1.setCouponId(coupon1.getId()); relation2.setCouponId(coupon2.getId()); relation3.setCouponId(coupon3.getId()); relation4.setCouponId(coupon4.getId()); relation1.setUpdateTime(new Date()); relation2.setUpdateTime(new Date()); relation3.setUpdateTime(new Date()); relation4.setUpdateTime(new Date()); relation1.setDelFlag("0"); relation2.setDelFlag("0"); relation3.setDelFlag("0"); relation4.setDelFlag("0"); if (flag) { // 新增 cmCouponVipDao.insertVipCouponRelation(relation1); cmCouponVipDao.insertVipCouponRelation(relation2); cmCouponVipDao.insertVipCouponRelation(relation3); cmCouponVipDao.insertVipCouponRelation(relation4); } else { // 修改 cmCouponVipDao.updateVipCouponRelation(relation1); cmCouponVipDao.updateVipCouponRelation(relation2); cmCouponVipDao.updateVipCouponRelation(relation3); cmCouponVipDao.updateVipCouponRelation(relation4); } } @Override @Transactional(readOnly = false) public void delete(CmVipCoupon cmVipCoupon) { cmVipCoupon.setDelFlag("1"); List couponList = cmVipCoupon.getCouponList(); for (CmCoupon coupon : couponList) { coupon.setDelFlag("1"); // 逻辑删除 cmCouponService.delete(coupon); } cmCouponVipDao.updateVipCouponMonth(cmVipCoupon); // 逻辑删除关系表 cmCouponVipDao.deleteByMonthId(cmVipCoupon.getId()); } @Transactional(readOnly = false) public void close(CmVipCoupon cmVipCoupon) { cmVipCoupon.setStatus("2"); List couponList = cmVipCoupon.getCouponList(); for (CmCoupon coupon : couponList) { coupon.setStatus("2"); cmCouponService.save(coupon); } cmCouponVipDao.updateVipCouponMonth(cmVipCoupon); } @Transactional(readOnly = false) public void open(CmVipCoupon cmVipCoupon) { cmVipCoupon.setStatus("1"); List couponList = cmVipCoupon.getCouponList(); for (CmCoupon coupon : couponList) { coupon.setStatus("1"); cmCouponService.save(coupon); } cmCouponVipDao.updateVipCouponMonth(cmVipCoupon); } }