package com.matrix.system.shopXcx.action; 
 | 
  
 | 
  
 | 
import com.matrix.core.anotations.RemoveRequestToken; 
 | 
import com.matrix.core.anotations.SaveRequestToken; 
 | 
import com.matrix.core.constance.MatrixConstance; 
 | 
import com.matrix.core.constance.SystemErrorCode; 
 | 
import com.matrix.core.constance.SystemMessageCode; 
 | 
import com.matrix.core.exception.GlobleException; 
 | 
import com.matrix.core.pojo.AjaxResult; 
 | 
import com.matrix.core.pojo.PaginationVO; 
 | 
import com.matrix.core.tools.ModelUtils; 
 | 
import com.matrix.core.tools.StringUtils; 
 | 
import com.matrix.core.tools.WebUtil; 
 | 
import com.matrix.system.common.bean.SysUsers; 
 | 
import com.matrix.system.constance.Dictionary; 
 | 
import com.matrix.system.hive.action.util.QueryUtil; 
 | 
import com.matrix.system.shopXcx.bean.ShopCoupon; 
 | 
import com.matrix.system.shopXcx.bean.ShopProduct; 
 | 
import com.matrix.system.shopXcx.dao.ShopCouponDao; 
 | 
import com.matrix.system.shopXcx.dao.ShopProductDao; 
 | 
import org.apache.commons.collections.CollectionUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Controller; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.web.bind.annotation.RequestMapping; 
 | 
import org.springframework.web.bind.annotation.ResponseBody; 
 | 
import org.springframework.web.servlet.ModelAndView; 
 | 
  
 | 
import java.beans.Transient; 
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * @author jyy 
 | 
 * @description 优惠券 
 | 
 * @date 2019-06-12 15:17 
 | 
 */ 
 | 
@Controller 
 | 
@RequestMapping(value = "admin/shopCoupon") 
 | 
public class ShopCouponAction { 
 | 
  
 | 
    @Autowired 
 | 
    private ShopCouponDao shopCouponDao; 
 | 
  
 | 
    @Autowired 
 | 
    private ShopProductDao shopProductDao; 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    //记录编辑前的值Before_Edit_Value 
 | 
    public static final String BEV = "ShopCoupon_BEV"; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 列表显示 
 | 
     */ 
 | 
    @RequestMapping(value = "/showList") 
 | 
    public @ResponseBody 
 | 
    AjaxResult showList(ShopCoupon shopCoupon, PaginationVO pageVo) { 
 | 
  
 | 
        pageVo.setSort("update_time"); 
 | 
        pageVo.setOrder("desc"); 
 | 
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 
 | 
        if (!user.getShopRole().equals(Dictionary.FLAG_YES_Y)) { 
 | 
            shopCoupon.setShopId(user.getShopId()); 
 | 
        } 
 | 
        shopCoupon.setCompanyId(user.getCompanyId()); 
 | 
        List<ShopCoupon> dataList = shopCouponDao.selectInPage(shopCoupon, pageVo); 
 | 
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, shopCouponDao.selectTotalRecord(shopCoupon)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增 
 | 
     */ 
 | 
    @RemoveRequestToken 
 | 
    @RequestMapping(value = "/addShopCoupon") 
 | 
    @Transient 
 | 
    public @ResponseBody 
 | 
    AjaxResult addShopCoupon(ShopCoupon shopCoupon) { 
 | 
        //如果结束时间早于开始时间 
 | 
        if (shopCoupon.getBeginTime().after(shopCoupon.getEndTime())) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_FAIL, "结束时间不得早于开始时间!"); 
 | 
        } 
 | 
        //如果抵消金额大于最低消费金额 
 | 
        if (shopCoupon.getOffsetAmount().compareTo(shopCoupon.getMinAmount()) == 1) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_FAIL, "抵消金额不能大于最低消费金额(满减)!"); 
 | 
        } 
 | 
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 
 | 
        shopCoupon.setCreateBy(user.getSuName()); 
 | 
        shopCoupon.setUpdateBy(user.getSuName()); 
 | 
        shopCoupon.setQuantityReceive(0); 
 | 
        //设置为未开始状态 
 | 
        shopCoupon.setCouponStatus(1); 
 | 
        //如果是全部产品可以使用 
 | 
        if (shopCoupon.getIsAll() == 1) { 
 | 
            shopCoupon.setProductIds(""); 
 | 
            shopCoupon.setAttrIds(""); 
 | 
        } 
 | 
        // @TODO wzy增加 
 | 
        shopCoupon.setShopId(user.getShopId()); 
 | 
        shopCoupon.setCompanyId(user.getCompanyId()); 
 | 
        int i = shopCouponDao.insert(shopCoupon); 
 | 
  
 | 
        productLabeling(shopCoupon); 
 | 
  
 | 
        if (i > 0) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.ADD_SUCCES, "优惠券"); 
 | 
        } else { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_ADD_FAIL); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 修改 
 | 
     */ 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    @RequestMapping(value = "/modifyShopCoupon") 
 | 
    public @ResponseBody 
 | 
    AjaxResult modifyShopCoupon(ShopCoupon newShopCoupon) { 
 | 
        //如果结束时间早于开始时间 
 | 
        if (newShopCoupon.getBeginTime().after(newShopCoupon.getEndTime())) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_FAIL, "结束时间不得早于开始时间!"); 
 | 
        } 
 | 
        //如果抵消金额大于最低消费金额 
 | 
        if (newShopCoupon.getOffsetAmount().compareTo(newShopCoupon.getMinAmount()) == 1) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_FAIL, "抵消金额不能大于最低消费金额(满减)!"); 
 | 
        } 
 | 
        //如果所有产品都优惠或没有选择产品 
 | 
        if (newShopCoupon.getIsAll() == 1 || newShopCoupon.getProductIds() == null) { 
 | 
            newShopCoupon.setProductIds(""); 
 | 
        } 
 | 
        //如果所有产品都优惠或没有选择属性 
 | 
        if (newShopCoupon.getIsAll() == 1 || newShopCoupon.getAttrIds() == null) { 
 | 
            newShopCoupon.setAttrIds(""); 
 | 
        } 
 | 
        ShopCoupon oldShopCoupon = WebUtil.getSessionAttribute(BEV); 
 | 
        int i = 0; 
 | 
        Map<String, Object> modifyMap = null; 
 | 
        try { 
 | 
            if (!ModelUtils.isModified(oldShopCoupon, newShopCoupon)) { 
 | 
                i = MatrixConstance.DML_SUCCESSS; 
 | 
            } 
 | 
            modifyMap = ModelUtils.comparePojo2Map(oldShopCoupon, newShopCoupon); 
 | 
        } catch (Exception e) { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL, e, newShopCoupon); 
 | 
        } 
 | 
        if (modifyMap.size() > 0) { 
 | 
            modifyMap.put("id", oldShopCoupon.getId()); 
 | 
            shopCouponDao.updateByMap(modifyMap); 
 | 
        } 
 | 
        i = MatrixConstance.DML_SUCCESSS; 
 | 
        WebUtil.removeSessionAttribute(BEV); 
 | 
        if (i > 0) { 
 | 
            shopCouponDao.updateCouponStatusById(newShopCoupon.getId()); 
 | 
            if (newShopCoupon.getKind() == 2) { 
 | 
                // @TODO wzy增加 
 | 
                SysUsers users  = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); 
 | 
                newShopCoupon.setShopId(users.getShopId()); 
 | 
  
 | 
                //更新产品标签 
 | 
                shopProductDao.removeProductCouponLable(newShopCoupon.getId()); 
 | 
                productLabeling(newShopCoupon); 
 | 
  
 | 
            } 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.UPDATE_SUCCES, "优惠券"); 
 | 
        } else { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 进入修改界面 
 | 
     */ 
 | 
    @SaveRequestToken 
 | 
    @RequestMapping(value = "/editForm") 
 | 
    public ModelAndView editForm(Integer id) { 
 | 
        ShopCoupon shopCoupon = new ShopCoupon(); 
 | 
        ModelAndView modelAndView = new ModelAndView("admin/shop/shopCoupon-form"); 
 | 
        if (id != null) { 
 | 
            shopCoupon = shopCouponDao.selectById(id); 
 | 
            WebUtil.setSessionAttribute(BEV, shopCoupon); 
 | 
        } 
 | 
        modelAndView.addObject("obj", shopCoupon); 
 | 
        return modelAndView; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 删除 
 | 
     */ 
 | 
    @RequestMapping(value = "/del") 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public @ResponseBody 
 | 
    AjaxResult del(String keys) { 
 | 
        List<String> ids = StringUtils.strToCollToString(keys, ","); 
 | 
        int i = shopCouponDao.deleteByIds(ids); 
 | 
        for (String couponId : ids) { 
 | 
            shopProductDao.removeProductCouponLable(Integer.valueOf(couponId)); 
 | 
        } 
 | 
        if (i > 0) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.DELETE_SUCCES, i); 
 | 
        } else { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_DELETE_FAIL); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量启用 
 | 
     */ 
 | 
    @RequestMapping(value = "/startUsing") 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public @ResponseBody 
 | 
    AjaxResult startUsing(String keys) { 
 | 
        List<String> ids = StringUtils.strToCollToString(keys, ","); 
 | 
        List<String> newIds = new ArrayList<>(); 
 | 
        Date now = new Date(); 
 | 
        //如果结束已经晚于当前时间则跳过不开启 
 | 
        for (String couponId : ids) { 
 | 
            Integer id = Integer.valueOf(couponId); 
 | 
            ShopCoupon shopCoupon = shopCouponDao.selectById(id); 
 | 
            if (shopCoupon.getEndTime().after(now)) { 
 | 
                newIds.add(couponId); 
 | 
                //更新产品标签 
 | 
                if (shopCoupon.getKind() == 2) { 
 | 
                    //更新产品标签 
 | 
                    productLabeling(shopCoupon); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        int i = 0; 
 | 
        if (CollectionUtils.isNotEmpty(newIds)) { 
 | 
            i = shopCouponDao.updateStateByStateAndIds(newIds, 1); 
 | 
        } 
 | 
        if (i > 0) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.UPDATE_SUCCES, i); 
 | 
        } else { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量停用 
 | 
     */ 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    @RequestMapping(value = "/blockUp") 
 | 
    public @ResponseBody 
 | 
    AjaxResult blockUp(String keys) { 
 | 
        List<String> ids = StringUtils.strToCollToString(keys, ","); 
 | 
        int i = shopCouponDao.updateStateByStateAndIds(ids, 2); 
 | 
        for (String couponId : ids) { 
 | 
            shopProductDao.removeProductCouponLable(Integer.valueOf(couponId)); 
 | 
        } 
 | 
        if (i > 0) { 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, SystemMessageCode.UPDATE_SUCCES, i); 
 | 
        } else { 
 | 
            throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 给产品打上合适的标签 
 | 
     * 
 | 
     * @param shopCoupon 
 | 
     */ 
 | 
    private void productLabeling(ShopCoupon shopCoupon) { 
 | 
        Date now = new Date(); 
 | 
        Boolean needUpdate = false; 
 | 
        //优惠券处于可用状态 
 | 
        if (shopCoupon.getIsOpen() == 1 && shopCoupon.getBeginTime().before(now) && 
 | 
                shopCoupon.getEndTime().after(now)) { 
 | 
            //查询优惠券适配的所有产品 
 | 
            List<ShopProduct> shopProductList = new ArrayList<>(); 
 | 
            if (shopCoupon.getIsAll() == 1) { 
 | 
                ShopProduct productQuery = new ShopProduct(); 
 | 
                productQuery.setDelFlag(2); 
 | 
                shopProductList = shopProductDao.selectByModel(productQuery); 
 | 
            } else { 
 | 
                if (StringUtils.isNotBlank(shopCoupon.getProductIds())) { 
 | 
                    //根据产品id查询,合适的产品 
 | 
                    shopProductList.addAll(shopProductDao.selectProductByIds(shopCoupon.getProductIds(), shopCoupon.getShopId())); 
 | 
                } 
 | 
                if (StringUtils.isNotBlank(shopCoupon.getAttrIds())) { 
 | 
                    List<Integer> pIds = new ArrayList<>(); 
 | 
                    //根据属性id查询合适的属性 
 | 
                    List<String> attrIds = StringUtils.strToColl(shopCoupon.getAttrIds(), ","); 
 | 
                    for (String attrId : attrIds) { 
 | 
                        List<ShopProduct> tempList = shopProductDao.selectProductByAttrid(attrId, shopCoupon.getShopId()); 
 | 
                        for (ShopProduct product : tempList) { 
 | 
                            if (!pIds.contains(product.getId())) { 
 | 
                                shopProductList.add(product); 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            //更新优惠券标签 
 | 
            if (CollectionUtils.isNotEmpty(shopProductList)) { 
 | 
                for (ShopProduct product : shopProductList) { 
 | 
                    if (product.getCouponId() != null) { 
 | 
                        ShopCoupon coupon = shopCouponDao.selectById(product.getCouponId()); 
 | 
                        //之前的活动存在,且正在进行中 
 | 
                        if (coupon != null && coupon.getCouponStatus() == 2) { 
 | 
                            //比较活动金额 
 | 
                            if (coupon.getMinAmount().compareTo(shopCoupon.getMinAmount()) <= 0) { 
 | 
                                //当前优惠活动力度大则更新 
 | 
                                needUpdate = true; 
 | 
                            } 
 | 
                        } else { 
 | 
                            needUpdate = true; 
 | 
                        } 
 | 
                    } else { 
 | 
                        needUpdate = true; 
 | 
                    } 
 | 
                    if (needUpdate) { 
 | 
                        Map<String, Object> map = new HashMap<>(); 
 | 
                        map.put("id", product.getId()); 
 | 
                        map.put("couponId", shopCoupon.getId()); 
 | 
                        shopProductDao.updateByMap(map); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } else { 
 | 
            //清除标签 
 | 
            shopProductDao.removeProductCouponLable(shopCoupon.getId()); 
 | 
        } 
 | 
    } 
 | 
} 
 |