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.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 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 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 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 ids = StringUtils.strToCollToString(keys, ","); List 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 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) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); Date now = new Date(); Boolean needUpdate = false; //优惠券处于可用状态 if (shopCoupon.getIsOpen() == 1 && shopCoupon.getBeginTime().before(now) && shopCoupon.getEndTime().after(now)) { //查询优惠券适配的所有产品 List shopProductList = new ArrayList<>(); if (shopCoupon.getIsAll() == 1) { ShopProduct productQuery = new ShopProduct(); productQuery.setDelFlag(2); productQuery.setCompanyId(user.getCompanyId()); 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 pIds = new ArrayList<>(); //根据属性id查询合适的属性 List attrIds = StringUtils.strToColl(shopCoupon.getAttrIds(), ","); for (String attrId : attrIds) { List 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 map = new HashMap<>(); map.put("id", product.getId()); map.put("couponId", shopCoupon.getId()); shopProductDao.updateByMap(map); } } } } else { //清除标签 shopProductDao.removeProductCouponLable(shopCoupon.getId()); } } }