package com.caimei.modules.coupon.web; import com.caimei.modules.coupon.entity.CmCoupon; import com.caimei.modules.coupon.entity.CmCouponAssociate; import com.caimei.modules.coupon.entity.CmCouponRedemptionCode; import com.caimei.modules.coupon.service.AsyncService; import com.caimei.modules.coupon.service.CmCouponService; import com.caimei.modules.order.dao.NewShopOrderDao; import com.caimei.modules.order.service.NewOrderService; import com.caimei.modules.order.service.WeChatService; import com.caimei.modules.product.entity.Product; import com.caimei.modules.product.service.ProductService; import com.caimei.modules.sys.utils.SMSUtils; import com.caimei.modules.user.dao.CmUserDao; import com.caimei.modules.user.dao.MessageCenterDao; import com.caimei.modules.user.dao.NewCmClubDao; import com.caimei.modules.user.entity.CmUser; import com.caimei.modules.user.entity.MessageCenter; import com.caimei.modules.user.entity.NewCmClub; import com.caimei.modules.user.entity.NewCmShop; import com.caimei.po.User; import com.caimei.utils.AppUtils; import com.thinkgem.jeesite.common.config.Global; import com.thinkgem.jeesite.common.persistence.Page; import com.thinkgem.jeesite.common.utils.StringUtils; import com.thinkgem.jeesite.common.web.BaseController; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 优惠券管理Controller * * @author plf * @version 2021-08-02 */ @Controller @RequestMapping(value = "${adminPath}/coupon/cmCoupon") public class CmCouponController extends BaseController { @Autowired private CmCouponService cmCouponService; @Autowired private CmUserDao cmUserDao; @Autowired private NewCmClubDao newCmClubDao; @Autowired private ProductService productService; @Autowired private MessageCenterDao messageCenterDao; @Autowired private NewOrderService newOrderService; @Autowired private NewShopOrderDao newShopOrderDao; @Autowired private WeChatService weChatService; @Value("${wwwServer}") private String domain; @Autowired private AsyncService asyncService; @ModelAttribute public CmCoupon get(@RequestParam(required = false) String id) { CmCoupon entity = null; if (StringUtils.isNotBlank(id)) { entity = cmCouponService.get(id); } if (entity == null) { entity = new CmCoupon(); } return entity; } @RequiresPermissions("coupon:cmCoupon:view") @RequestMapping(value = {"list", ""}) public String list(CmCoupon cmCoupon, HttpServletRequest request, HttpServletResponse response, Model model) { cmCoupon.setCouponsMode("0"); if (null == cmCoupon.getMoneyCouponFlag()) { cmCoupon.setMoneyCouponFlag(2); } Page page = cmCouponService.findPage(new Page(request, response), cmCoupon); model.addAttribute("page", page); if (0 == cmCoupon.getCouponType()) { //活动券 return "modules/coupon/cmCouponList"; } else if (1 == cmCoupon.getCouponType()) { //品类券 return "modules/coupon/couponCategoryList"; } else if (2 == cmCoupon.getCouponType()) { //用户专享券 return "modules/coupon/couponUserExclusiveList"; } else if (3 == cmCoupon.getCouponType()) { //店铺券 return "modules/coupon/couponShopList"; } else if (4 == cmCoupon.getCouponType()) { //新用户券 return "modules/coupon/couponNewUserList"; } else if (1 == cmCoupon.getMoneyCouponFlag()) { //价值优惠券 return "modules/coupon/cmMoneyCouponList"; } return null; } @RequiresPermissions("coupon:cmCoupon:view") @RequestMapping(value = "form") public String form(CmCoupon cmCoupon, Model model) { model.addAttribute("cmCoupon", cmCoupon); if (0 == cmCoupon.getCouponType()) { List associateList = new ArrayList<>(); if (StringUtils.isNotBlank(cmCoupon.getId()) && "2".equals(cmCoupon.getProductType())) { associateList = cmCouponService.findByProductType(cmCoupon); } model.addAttribute("associateList", associateList); return "modules/coupon/cmCouponForm"; } else if (1 == cmCoupon.getCouponType()) { return "modules/coupon/couponCategoryForm"; } else if (2 == cmCoupon.getCouponType()) { CmUser cmUser = null; if (cmCoupon.getUserId() != null) { cmUser = cmUserDao.get(cmCoupon.getUserId().toString()); NewCmClub club = newCmClubDao.getclubByUserId(cmCoupon.getUserId()); cmUser.setShortName(club.getSname()); } model.addAttribute("cmUser", cmUser); return "modules/coupon/couponUserExclusiveForm"; } else if (3 == cmCoupon.getCouponType()) { return "modules/coupon/couponShopForm"; } else { return "modules/coupon/couponNewUserForm"; } } @RequestMapping(value = "save") public String save(CmCoupon cmCoupon, Model model, RedirectAttributes redirectAttributes) { if (!beanValidator(model, cmCoupon)) { return form(cmCoupon, model); } //等于空就是添加否则是修改 if ("".equals(cmCoupon.getId())) { asyncService.consumer(cmCoupon); } cmCouponService.save(cmCoupon); addMessage(redirectAttributes, "保存优惠券成功"); return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?couponType=" + cmCoupon.getCouponType(); } @RequestMapping(value = "delete") public String delete(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) { cmCouponService.delete(cmCoupon); addMessage(redirectAttributes, "删除优惠券成功"); if ("1".equals(cmCoupon.getCouponsMode())) { return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/codeCouponList"; } if (null != cmCoupon.getMoneyCouponFlag() && 1 == (cmCoupon.getMoneyCouponFlag())) { return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?moneyCouponFlag=1&&couponType=5"; } return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?couponType=" + cmCoupon.getCouponType(); } /** * 选择商品页面 */ @RequestMapping(value = "toAddProduct") public String toAddProduct(Product product, Model model, HttpServletRequest request, HttpServletResponse response) { //todo 当前版本限制死为仅选取综合供应商的商品 Page page = cmCouponService.findProductList(new Page(request, response), product); model.addAttribute("page", page); model.addAttribute("productIds", product.getProductIds()); return "/modules/coupon/toAddProduct"; } /** * 关闭优惠券 */ @RequestMapping("close") public String close(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) { cmCouponService.close(cmCoupon); addMessage(redirectAttributes, "关闭优惠券成功"); if ("1".equals(cmCoupon.getCouponsMode())) { return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/codeCouponList"; } return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?couponType=" + cmCoupon.getCouponType(); } /** * 开启优惠券 */ @RequestMapping("open") public String open(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) { cmCouponService.open(cmCoupon); addMessage(redirectAttributes, "开启优惠券成功"); if ("1".equals(cmCoupon.getCouponsMode())) { return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/codeCouponList"; } return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?couponType=" + cmCoupon.getCouponType(); } /** * 选择机构页面 */ @RequestMapping("toAddClub") public String toAddClub(CmUser cmUser, Model model, HttpServletRequest request, HttpServletResponse response) { Page page = cmCouponService.findUserList(new Page(request, response), cmUser); model.addAttribute("page", page); return "/modules/coupon/toAddClub"; } /** * 选择供应商页面 */ @RequestMapping("toAddShop") public String toAddShop(NewCmShop newCmShop, Model model, HttpServletRequest request, HttpServletResponse response) { Page page = cmCouponService.findShopList(new Page(request, response), newCmShop); model.addAttribute("page", page); return "/modules/coupon/toAddShop"; } /** * 兑换码优惠券列表 */ @RequestMapping("codeCouponList") public String redemptionCodeCouponList(CmCoupon cmCoupon, HttpServletRequest request, HttpServletResponse response, Model model) { cmCoupon.setCouponsMode("1"); Page page = cmCouponService.findPage(new Page(request, response), cmCoupon); model.addAttribute("page", page); return "/modules/coupon/redemptionCodeCouponList"; } /** * 兑换码优惠券-添加编辑页面 */ @RequestMapping("codeCouponForm") public String redemptionCodeCouponForm(CmCoupon cmCoupon, Model model) { model.addAttribute("cmCoupon", cmCoupon); if (cmCoupon != null && cmCoupon.getCouponType() != null) { if (0 == cmCoupon.getCouponType()) { List associateList = new ArrayList<>(); if (StringUtils.isNotBlank(cmCoupon.getId()) && "2".equals(cmCoupon.getProductType())) { associateList = cmCouponService.findByProductType(cmCoupon); } model.addAttribute("associateList", associateList); } else if (2 == cmCoupon.getCouponType()) { CmUser cmUser = null; if (cmCoupon.getUserId() != null) { cmUser = cmUserDao.get(cmCoupon.getUserId().toString()); NewCmClub club = newCmClubDao.getclubByUserId(cmCoupon.getUserId()); cmUser.setShortName(club.getSname()); } model.addAttribute("cmUser", cmUser); } } return "/modules/coupon/redemptionCodeCouponForm"; } //价值优惠券 @RequestMapping("moneyCouponForm") public String moneyCouponForm(CmCoupon cmCoupon, Model model) { model.addAttribute("cmCoupon", cmCoupon); if (cmCoupon != null && cmCoupon.getCouponType() != null) { if (0 == cmCoupon.getCouponType()) { List associateList = new ArrayList<>(); if (StringUtils.isNotBlank(cmCoupon.getId()) && "2".equals(cmCoupon.getProductType())) { associateList = cmCouponService.findByProductType(cmCoupon); } model.addAttribute("associateList", associateList); } else if (2 == cmCoupon.getCouponType()) { CmUser cmUser = null; if (cmCoupon.getUserId() != null) { cmUser = cmUserDao.get(cmCoupon.getUserId().toString()); NewCmClub club = newCmClubDao.getclubByUserId(cmCoupon.getUserId()); cmUser.setShortName(club.getSname()); } model.addAttribute("cmUser", cmUser); } } return "/modules/coupon/MoneyCouponForm"; } /** * 兑换码优惠券-保存 */ @RequestMapping("codeCouponSave") public String redemptionCodeCouponSave(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) { cmCouponService.redemptionCodeCouponSave(cmCoupon); addMessage(redirectAttributes, "保存兑换优惠券成功"); return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/codeCouponList"; } /** * 价值优惠券保存 * * @param cmCoupon * @param redirectAttributes * @return */ @RequestMapping("moneyCouponSave") public String moneyCouponSave(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) { cmCouponService.moneyCouponSave(cmCoupon); addMessage(redirectAttributes, "保存价值优惠券成功"); return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/list?moneyCouponFlag=1&&couponType=5"; } /** * 查看兑换码页面 */ @RequestMapping("redemptionCode") public String redemptionCodeList(CmCouponRedemptionCode redemptionCode, HttpServletRequest request, HttpServletResponse response, Model model) { Page page = cmCouponService.redemptionCodeList(new Page(request, response), redemptionCode); model.addAttribute("page", page); model.addAttribute("redemptionCode", redemptionCode); return "/modules/coupon/redemptionCodeList"; } /** * 查看商品优惠券详情 */ @RequestMapping("productDetails") public String productCouponDetails(Integer productId, Integer userId, Model model) { Product product = productService.get(productId.toString()); String wwwServer = Global.getConfig("wwwServer"); product.setMainImage(AppUtils.getImageURL("product", product.getMainImage(), 0, wwwServer)); //展示全部可用普通优惠券,不包含已领取兑换优惠券 List ordinaryCoupons = cmCouponService.findClubCouponList(product, userId, 2); //展示全部可用兑换优惠券 List redeemCoupons = cmCouponService.findNotRedeemedCoupon(product); //展示全部可用价值优惠券 List moneyCoupons = cmCouponService.findClubCouponList(product, userId, 1); model.addAttribute("product", product); model.addAttribute("ordinaryCoupons", ordinaryCoupons); model.addAttribute("redeemCoupons", redeemCoupons); model.addAttribute("moneyCoupons", moneyCoupons); return "/modules/coupon/productCouponDetails"; } }