瀏覽代碼

兑换码优惠券

plf 3 年之前
父節點
當前提交
14a3671c24
共有 19 個文件被更改,包括 730 次插入202 次删除
  1. 8 1
      src/main/java/com/caimei/modules/coupon/dao/CmCouponDao.java
  2. 23 15
      src/main/java/com/caimei/modules/coupon/entity/CmCoupon.java
  3. 69 0
      src/main/java/com/caimei/modules/coupon/entity/CmCouponRedemptionCode.java
  4. 57 34
      src/main/java/com/caimei/modules/coupon/service/CmCouponService.java
  5. 50 3
      src/main/java/com/caimei/modules/coupon/web/CmCouponController.java
  6. 0 9
      src/main/java/com/caimei/modules/user/entity/NewCmShop.java
  7. 66 20
      src/main/resources/mappings/modules/coupon/CmCouponMapper.xml
  8. 4 4
      src/main/webapp/WEB-INF/views/modules/coupon/cmCouponForm.jsp
  9. 4 4
      src/main/webapp/WEB-INF/views/modules/coupon/couponCategoryForm.jsp
  10. 4 4
      src/main/webapp/WEB-INF/views/modules/coupon/couponNewUserForm.jsp
  11. 28 57
      src/main/webapp/WEB-INF/views/modules/coupon/couponShopForm.jsp
  12. 1 3
      src/main/webapp/WEB-INF/views/modules/coupon/couponShopList.jsp
  13. 4 4
      src/main/webapp/WEB-INF/views/modules/coupon/couponUserExclusiveForm.jsp
  14. 168 0
      src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeCouponForm.jsp
  15. 136 0
      src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeCouponList.jsp
  16. 96 0
      src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeList.jsp
  17. 0 3
      src/main/webapp/WEB-INF/views/modules/coupon/toAddClub.jsp
  18. 0 3
      src/main/webapp/WEB-INF/views/modules/coupon/toAddProduct.jsp
  19. 12 38
      src/main/webapp/WEB-INF/views/modules/coupon/toAddShop.jsp

+ 8 - 1
src/main/java/com/caimei/modules/coupon/dao/CmCouponDao.java

@@ -3,6 +3,7 @@ package com.caimei.modules.coupon.dao;
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
 import com.caimei.modules.coupon.entity.CmCouponClub;
 import com.caimei.modules.coupon.entity.CmCouponClub;
+import com.caimei.modules.coupon.entity.CmCouponRedemptionCode;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmShop;
 import com.caimei.modules.user.entity.NewCmShop;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
@@ -39,5 +40,11 @@ public interface CmCouponDao extends CrudDao<CmCoupon> {
 
 
     List<NewCmShop> findShopList(NewCmShop newCmShop);
     List<NewCmShop> findShopList(NewCmShop newCmShop);
 
 
-    List<NewCmShop> findCouponShop(String couponId);
+    Integer findRedemptionCodeNum(String couponId);
+
+    CmCouponRedemptionCode findByRedemptionCode(String redemptionCode);
+
+    void insertRedemptionCode(CmCouponRedemptionCode code);
+
+    List<CmCouponRedemptionCode> findRedemptionCode(CmCouponRedemptionCode redemptionCode);
 }
 }

+ 23 - 15
src/main/java/com/caimei/modules/coupon/entity/CmCoupon.java

@@ -7,7 +7,6 @@ import org.hibernate.validator.constraints.Length;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
-import java.util.List;
 
 
 /**
 /**
  * 优惠券管理Entity
  * 优惠券管理Entity
@@ -26,6 +25,7 @@ public class CmCoupon extends DataEntity<CmCoupon> {
     private String status;        // 状态 0未生效 1已生效 2已关闭 3已失效
     private String status;        // 状态 0未生效 1已生效 2已关闭 3已失效
     private Integer couponType;        // 劵类型 0活动券 1品类券 2用户专享券 3店铺券 4新用户券
     private Integer couponType;        // 劵类型 0活动券 1品类券 2用户专享券 3店铺券 4新用户券
     private Integer userId;     //机构用户id(用户专享券有效)
     private Integer userId;     //机构用户id(用户专享券有效)
+    private Integer shopId;     //供应商id(店铺券有效)
     private String productType;        // 优惠商品:1全商城商品 2指定商品(活动券有效)
     private String productType;        // 优惠商品:1全商城商品 2指定商品(活动券有效)
     private String pcBanner;        //网站活动页banner
     private String pcBanner;        //网站活动页banner
     private String appletsBanner;       //小程序活动页banner
     private String appletsBanner;       //小程序活动页banner
@@ -36,10 +36,10 @@ public class CmCoupon extends DataEntity<CmCoupon> {
     private String claimStatus;         //领取状态:1未领取 2已领取
     private String claimStatus;         //领取状态:1未领取 2已领取
     private String useStatus;       //使用状态 1未使用 2已使用
     private String useStatus;       //使用状态 1未使用 2已使用
     private String source;      //领取渠道:1小程序 2网站 3订单退回
     private String source;      //领取渠道:1小程序 2网站 3订单退回
-    private String shopInfo;     //供应商ids
     private String shopName;        //供应商名称
     private String shopName;        //供应商名称
+    private Integer codeNum;       //兑换码数量
     private CmCouponClub couponClub;
     private CmCouponClub couponClub;
-    private List<NewCmShop> shopList;
+    private NewCmShop shop;
 
 
     public CmCoupon() {
     public CmCoupon() {
         super();
         super();
@@ -208,27 +208,35 @@ public class CmCoupon extends DataEntity<CmCoupon> {
         this.userId = userId;
         this.userId = userId;
     }
     }
 
 
-    public String getShopInfo() {
-        return shopInfo;
+    public String getShopName() {
+        return shopName;
     }
     }
 
 
-    public void setShopInfo(String shopInfo) {
-        this.shopInfo = shopInfo;
+    public void setShopName(String shopName) {
+        this.shopName = shopName;
     }
     }
 
 
-    public List<NewCmShop> getShopList() {
-        return shopList;
+    public Integer getCodeNum() {
+        return codeNum;
     }
     }
 
 
-    public void setShopList(List<NewCmShop> shopList) {
-        this.shopList = shopList;
+    public void setCodeNum(Integer codeNum) {
+        this.codeNum = codeNum;
     }
     }
 
 
-    public String getShopName() {
-        return shopName;
+    public Integer getShopId() {
+        return shopId;
     }
     }
 
 
-    public void setShopName(String shopName) {
-        this.shopName = shopName;
+    public void setShopId(Integer shopId) {
+        this.shopId = shopId;
+    }
+
+    public NewCmShop getShop() {
+        return shop;
+    }
+
+    public void setShop(NewCmShop shop) {
+        this.shop = shop;
     }
     }
 }
 }

+ 69 - 0
src/main/java/com/caimei/modules/coupon/entity/CmCouponRedemptionCode.java

@@ -0,0 +1,69 @@
+package com.caimei.modules.coupon.entity;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * cm_coupon_redemption_code
+ *
+ * @author : plf
+ * @date : 2021/8/11
+ */
+public class CmCouponRedemptionCode extends DataEntity<CmCouponRedemptionCode> {
+    private Integer couponId;       //优惠券id
+    private Integer userId;         //机构用户id
+    private String redemptionCode;      //兑换码(16位)
+    private String status;      //兑换状态:1未兑换 2已兑换
+    private Date redemptionTime;     //兑换时间
+    private Date addTime;        //添加时间
+
+    public Integer getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Integer couponId) {
+        this.couponId = couponId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getRedemptionCode() {
+        return redemptionCode;
+    }
+
+    public void setRedemptionCode(String redemptionCode) {
+        this.redemptionCode = redemptionCode;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getRedemptionTime() {
+        return redemptionTime;
+    }
+
+    public void setRedemptionTime(Date redemptionTime) {
+        this.redemptionTime = redemptionTime;
+    }
+
+    public Date getAddTime() {
+        return addTime;
+    }
+
+    public void setAddTime(Date addTime) {
+        this.addTime = addTime;
+    }
+}

+ 57 - 34
src/main/java/com/caimei/modules/coupon/service/CmCouponService.java

@@ -5,9 +5,12 @@ import com.caimei.modules.coupon.dao.CmCouponDao;
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
 import com.caimei.modules.coupon.entity.CmCouponClub;
 import com.caimei.modules.coupon.entity.CmCouponClub;
+import com.caimei.modules.coupon.entity.CmCouponRedemptionCode;
 import com.caimei.modules.miniprogram.utils.UploadPicUtils;
 import com.caimei.modules.miniprogram.utils.UploadPicUtils;
+import com.caimei.modules.order.utils.RandomCode;
 import com.caimei.modules.product.dao.ProductDao;
 import com.caimei.modules.product.dao.ProductDao;
 import com.caimei.modules.product.entity.Product;
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.user.dao.NewCmShopDao;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmShop;
 import com.caimei.modules.user.entity.NewCmShop;
 import com.caimei.utils.AppUtils;
 import com.caimei.utils.AppUtils;
@@ -34,14 +37,20 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
     private CmCouponDao cmCouponDao;
     private CmCouponDao cmCouponDao;
     @Autowired
     @Autowired
     private ProductDao productDao;
     private ProductDao productDao;
+    @Autowired
+    private NewCmShopDao newCmShopDao;
 
 
     public CmCoupon get(String id) {
     public CmCoupon get(String id) {
         CmCoupon coupon = super.get(id);
         CmCoupon coupon = super.get(id);
         setCouponStatus(coupon, new Date());
         setCouponStatus(coupon, new Date());
-        if (coupon.getCouponType() == 3) {
+        if (coupon.getCouponType() == 3 && coupon.getShopId() != null) {
             //店铺券
             //店铺券
-            List<NewCmShop> shopList = cmCouponDao.findCouponShop(coupon.getId());
-            coupon.setShopList(shopList);
+            NewCmShop shop = newCmShopDao.get(coupon.getShopId().toString());
+            coupon.setShop(shop);
+        }
+        if ("1".equals(coupon.getCouponsMode())) {
+            Integer codeNum = cmCouponDao.findRedemptionCodeNum(coupon.getId());
+            coupon.setCodeNum(codeNum);
         }
         }
         return coupon;
         return coupon;
     }
     }
@@ -56,7 +65,7 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
         Date date = new Date();
         Date date = new Date();
         couponList.forEach(coupon -> {
         couponList.forEach(coupon -> {
             setCouponStatus(coupon, date);
             setCouponStatus(coupon, date);
-            if (2 == cmCoupon.getCouponType()) {
+            if (2 == coupon.getCouponType()) {
                 //用户专享劵
                 //用户专享劵
                 CmCouponClub couponClub = cmCouponDao.findCouponClub(coupon.getId());
                 CmCouponClub couponClub = cmCouponDao.findCouponClub(coupon.getId());
                 if (couponClub == null) {
                 if (couponClub == null) {
@@ -65,10 +74,6 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
                     coupon.setClaimStatus("2");
                     coupon.setClaimStatus("2");
                 }
                 }
                 coupon.setCouponClub(couponClub);
                 coupon.setCouponClub(couponClub);
-            } else if (3 == cmCoupon.getCouponType()) {
-                //店铺券
-                List<NewCmShop> shopList = cmCouponDao.findCouponShop(coupon.getId());
-                coupon.setShopList(shopList);
             }
             }
         });
         });
         return couponPage;
         return couponPage;
@@ -103,9 +108,7 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
         Date date = new Date();
         Date date = new Date();
         cmCoupon.setCreateDate(date);
         cmCoupon.setCreateDate(date);
         setCouponStatus(cmCoupon, date);
         setCouponStatus(cmCoupon, date);
-        if (StringUtils.isBlank(cmCoupon.getCouponsMode())) {
-            cmCoupon.setCouponsMode("0");
-        }
+        cmCoupon.setCouponsMode("0");
         super.save(cmCoupon);
         super.save(cmCoupon);
         List<Integer> associateIds = cmCouponDao.findByCouponId(cmCoupon.getId());
         List<Integer> associateIds = cmCouponDao.findByCouponId(cmCoupon.getId());
         if (0 == cmCoupon.getCouponType()) {
         if (0 == cmCoupon.getCouponType()) {
@@ -124,21 +127,6 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
                     }
                     }
                 });
                 });
             }
             }
-        } else if (3 == cmCoupon.getCouponType()) {
-            //店铺券
-            if (StringUtils.isNotBlank(cmCoupon.getShopInfo())) {
-                List<CmCouponAssociate> associateList = JSON.parseArray(cmCoupon.getShopInfo(), CmCouponAssociate.class);
-                associateList.forEach(a -> {
-                    if (a.getId() == null) {
-                        a.setDelFlag("0");
-                        a.setCouponId(Integer.valueOf(cmCoupon.getId()));
-                        a.setAddTime(date);
-                        cmCouponDao.insertCouponAssociate(a);
-                    } else {
-                        associateIds.removeIf(id -> id.equals(a.getId()));
-                    }
-                });
-            }
         }
         }
         if (associateIds != null && associateIds.size() > 0) {
         if (associateIds != null && associateIds.size() > 0) {
             associateIds.forEach(id -> {
             associateIds.forEach(id -> {
@@ -194,17 +182,52 @@ public class CmCouponService extends CrudService<CmCouponDao, CmCoupon> {
         return userPage;
         return userPage;
     }
     }
 
 
-    public Page<NewCmShop> findShopList(Page<NewCmShop> newCmShopPage, NewCmShop newCmShop, String shopIds) {
+    public Page<NewCmShop> findShopList(Page<NewCmShop> newCmShopPage, NewCmShop newCmShop) {
         newCmShop.setPage(newCmShopPage);
         newCmShop.setPage(newCmShopPage);
         List<NewCmShop> shopList = cmCouponDao.findShopList(newCmShop);
         List<NewCmShop> shopList = cmCouponDao.findShopList(newCmShop);
-        if (StringUtils.isNotBlank(shopIds)) {
-            shopList.forEach(s -> {
-                if (shopIds.contains(s.getShopID().toString())) {
-                    s.setChoose(true);
-                }
-            });
-        }
         newCmShopPage.setList(shopList);
         newCmShopPage.setList(shopList);
         return newCmShopPage;
         return newCmShopPage;
     }
     }
+
+    @Transactional(readOnly = false)
+    public void redemptionCodeCouponSave(CmCoupon cmCoupon) {
+        Date date = new Date();
+        cmCoupon.setCreateDate(date);
+        setCouponStatus(cmCoupon, date);
+        cmCoupon.setCouponsMode("1");
+        super.save(cmCoupon);
+        if (cmCoupon.getCodeNum() != null && cmCoupon.getCodeNum() > 0) {
+            Integer codeNum = cmCouponDao.findRedemptionCodeNum(cmCoupon.getId());
+            int num = cmCoupon.getCodeNum() - codeNum;
+            CmCouponRedemptionCode code = new CmCouponRedemptionCode();
+            code.setAddTime(new Date());
+            code.setCouponId(Integer.valueOf(cmCoupon.getId()));
+            code.setStatus("1");
+            for (int i = 0; i < num; i++) {
+                //生成对应数量兑换码
+                String redemptionCode = generateRedemptionCode();
+                code.setRedemptionCode(redemptionCode);
+                cmCouponDao.insertRedemptionCode(code);
+            }
+        }
+    }
+
+    /**
+     * 生成不重复的兑换码
+     */
+    public String generateRedemptionCode() {
+        String redemptionCode = RandomCode.generateShortLink(16);
+        CmCouponRedemptionCode code = cmCouponDao.findByRedemptionCode(redemptionCode);
+        if (code != null) {
+            generateRedemptionCode();
+        }
+        return redemptionCode;
+    }
+
+    public Page<CmCouponRedemptionCode> redemptionCodeList(Page<CmCouponRedemptionCode> codePage, CmCouponRedemptionCode redemptionCode) {
+        redemptionCode.setPage(codePage);
+        List<CmCouponRedemptionCode> redemptionCodeList = cmCouponDao.findRedemptionCode(redemptionCode);
+        codePage.setList(redemptionCodeList);
+        return codePage;
+    }
 }
 }

+ 50 - 3
src/main/java/com/caimei/modules/coupon/web/CmCouponController.java

@@ -2,6 +2,7 @@ package com.caimei.modules.coupon.web;
 
 
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCoupon;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
 import com.caimei.modules.coupon.entity.CmCouponAssociate;
+import com.caimei.modules.coupon.entity.CmCouponRedemptionCode;
 import com.caimei.modules.coupon.service.CmCouponService;
 import com.caimei.modules.coupon.service.CmCouponService;
 import com.caimei.modules.product.entity.Product;
 import com.caimei.modules.product.entity.Product;
 import com.caimei.modules.user.dao.CmUserDao;
 import com.caimei.modules.user.dao.CmUserDao;
@@ -59,17 +60,23 @@ public class CmCouponController extends BaseController {
     @RequiresPermissions("coupon:cmCoupon:view")
     @RequiresPermissions("coupon:cmCoupon:view")
     @RequestMapping(value = {"list", ""})
     @RequestMapping(value = {"list", ""})
     public String list(CmCoupon cmCoupon, HttpServletRequest request, HttpServletResponse response, Model model) {
     public String list(CmCoupon cmCoupon, HttpServletRequest request, HttpServletResponse response, Model model) {
+        cmCoupon.setCouponsMode("0");
         Page<CmCoupon> page = cmCouponService.findPage(new Page<CmCoupon>(request, response), cmCoupon);
         Page<CmCoupon> page = cmCouponService.findPage(new Page<CmCoupon>(request, response), cmCoupon);
         model.addAttribute("page", page);
         model.addAttribute("page", page);
         if (0 == cmCoupon.getCouponType()) {
         if (0 == cmCoupon.getCouponType()) {
+            //活动券
             return "modules/coupon/cmCouponList";
             return "modules/coupon/cmCouponList";
         } else if (1 == cmCoupon.getCouponType()) {
         } else if (1 == cmCoupon.getCouponType()) {
+            //品类券
             return "modules/coupon/couponCategoryList";
             return "modules/coupon/couponCategoryList";
         } else if (2 == cmCoupon.getCouponType()) {
         } else if (2 == cmCoupon.getCouponType()) {
+            //用户专享券
             return "modules/coupon/couponUserExclusiveList";
             return "modules/coupon/couponUserExclusiveList";
         } else if (3 == cmCoupon.getCouponType()) {
         } else if (3 == cmCoupon.getCouponType()) {
+            //店铺券
             return "modules/coupon/couponShopList";
             return "modules/coupon/couponShopList";
         } else {
         } else {
+            //新用户券
             return "modules/coupon/couponNewUserList";
             return "modules/coupon/couponNewUserList";
         }
         }
     }
     }
@@ -155,10 +162,50 @@ public class CmCouponController extends BaseController {
      * 选择供应商页面
      * 选择供应商页面
      */
      */
     @RequestMapping("toAddShop")
     @RequestMapping("toAddShop")
-    public String toAddShop(NewCmShop newCmShop, String shopIds, Model model, HttpServletRequest request, HttpServletResponse response) {
-        Page<NewCmShop> page = cmCouponService.findShopList(new Page<NewCmShop>(request, response), newCmShop, shopIds);
-        model.addAttribute("shopIds", shopIds);
+    public String toAddShop(NewCmShop newCmShop, Model model, HttpServletRequest request, HttpServletResponse response) {
+        Page<NewCmShop> page = cmCouponService.findShopList(new Page<NewCmShop>(request, response), newCmShop);
         model.addAttribute("page", page);
         model.addAttribute("page", page);
         return "/modules/coupon/toAddShop";
         return "/modules/coupon/toAddShop";
     }
     }
+
+    /**
+     * 兑换码优惠券列表
+     */
+    @RequestMapping("codeCouponList")
+    public String redemptionCodeCouponList(CmCoupon cmCoupon, HttpServletRequest request, HttpServletResponse response, Model model) {
+        cmCoupon.setCouponsMode("1");
+        Page<CmCoupon> page = cmCouponService.findPage(new Page<CmCoupon>(request, response), cmCoupon);
+        model.addAttribute("page", page);
+        return "/modules/coupon/redemptionCodeCouponList";
+    }
+
+    /**
+     * 兑换码优惠券-添加编辑页面
+     */
+    @RequestMapping("codeCouponForm")
+    public String redemptionCodeCouponForm(CmCoupon cmCoupon, Model model) {
+        model.addAttribute("cmCoupon", cmCoupon);
+        return "/modules/coupon/redemptionCodeCouponForm";
+    }
+
+    /**
+     * 兑换码优惠券-保存
+     */
+    @RequestMapping("codeCouponSave")
+    public String redemptionCodeCouponSave(CmCoupon cmCoupon, RedirectAttributes redirectAttributes) {
+        cmCouponService.redemptionCodeCouponSave(cmCoupon);
+        addMessage(redirectAttributes, "保存兑换优惠券成功");
+        return "redirect:" + Global.getAdminPath() + "/coupon/cmCoupon/codeCouponList";
+    }
+
+    /**
+     * 查看兑换码页面
+     */
+    @RequestMapping("redemptionCode")
+    public String redemptionCodeList(CmCouponRedemptionCode redemptionCode, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<CmCouponRedemptionCode> page = cmCouponService.redemptionCodeList(new Page<CmCouponRedemptionCode>(request, response), redemptionCode);
+        model.addAttribute("page", page);
+        model.addAttribute("redemptionCode",redemptionCode);
+        return "/modules/coupon/redemptionCodeList";
+    }
 }
 }

+ 0 - 9
src/main/java/com/caimei/modules/user/entity/NewCmShop.java

@@ -127,7 +127,6 @@ public class NewCmShop extends DataEntity<NewCmShop> {
     private String endTime;        //注册时间结束  查询条件
     private String endTime;        //注册时间结束  查询条件
     private String editStatus;//1编辑,2审核
     private String editStatus;//1编辑,2审核
     private String source; //注册来源: 0网站 1小程序
     private String source; //注册来源: 0网站 1小程序
-    private boolean choose = false; //选择框是否置灰
 
 
 
 
     public NewCmShop() {
     public NewCmShop() {
@@ -1048,12 +1047,4 @@ public class NewCmShop extends DataEntity<NewCmShop> {
     public void setWxApplets(String wxApplets) {
     public void setWxApplets(String wxApplets) {
         this.wxApplets = wxApplets;
         this.wxApplets = wxApplets;
     }
     }
-
-    public boolean isChoose() {
-        return choose;
-    }
-
-    public void setChoose(boolean choose) {
-        this.choose = choose;
-    }
 }
 }

+ 66 - 20
src/main/resources/mappings/modules/coupon/CmCouponMapper.xml

@@ -12,6 +12,7 @@
 		a.status AS "status",
 		a.status AS "status",
 		a.couponType AS "couponType",
 		a.couponType AS "couponType",
 		a.userId AS "userId",
 		a.userId AS "userId",
+		a.shopId AS "shopId",
 		a.productType AS "productType",
 		a.productType AS "productType",
 		a.pcBanner AS "pcBanner",
 		a.pcBanner AS "pcBanner",
 		a.appletsBanner AS "appletsBanner",
 		a.appletsBanner AS "appletsBanner",
@@ -34,12 +35,13 @@
 	
 	
 	<select id="findList" resultType="CmCoupon">
 	<select id="findList" resultType="CmCoupon">
 		SELECT 
 		SELECT 
-			<include refid="cmCouponColumns"/>,u.name AS clubName
+			<include refid="cmCouponColumns"/>,
+			u.name AS "clubName",
+			s.name AS "shopName"
 		FROM cm_coupon a
 		FROM cm_coupon a
-		LEFT JOIN cm_coupon_associate cca ON cca.couponId = a.id
 		LEFT JOIN cm_coupon_club ccc ON ccc.couponId = a.id
 		LEFT JOIN cm_coupon_club ccc ON ccc.couponId = a.id
 		LEFT JOIN USER u ON u.userID = a.userId
 		LEFT JOIN USER u ON u.userID = a.userId
-		LEFT JOIN shop s ON s.shopID = cca.shopId
+		LEFT JOIN shop s ON s.shopID = a.shopId
 		<include refid="cmCouponJoins"/>
 		<include refid="cmCouponJoins"/>
 		<where>
 		<where>
 			AND a.delFlag = 0
 			AND a.delFlag = 0
@@ -92,6 +94,9 @@
 			<if test="shopName != null and shopName != ''">
 			<if test="shopName != null and shopName != ''">
 				AND s.name LIKE concat('%',#{shopName},'%')
 				AND s.name LIKE concat('%',#{shopName},'%')
 			</if>
 			</if>
+			<if test="couponsMode != null and couponsMode != ''">
+				AND a.couponsMode = #{couponsMode}
+			</if>
 		</where>
 		</where>
 			GROUP BY a.id
 			GROUP BY a.id
 		<choose>
 		<choose>
@@ -131,6 +136,7 @@
 			status,
 			status,
 			couponType,
 			couponType,
 			userId,
 			userId,
+			shopId,
 			productType,
 			productType,
 			pcBanner,
 			pcBanner,
 			appletsBanner,
 			appletsBanner,
@@ -147,6 +153,7 @@
 			#{status},
 			#{status},
 			#{couponType},
 			#{couponType},
 			#{userId},
 			#{userId},
+			#{shopId},
 			#{productType},
 			#{productType},
 			#{pcBanner},
 			#{pcBanner},
 			#{appletsBanner},
 			#{appletsBanner},
@@ -167,6 +174,7 @@
 			status = #{status},
 			status = #{status},
 			couponType = #{couponType},
 			couponType = #{couponType},
 			userId = #{userId},
 			userId = #{userId},
+			shopId = #{shopId},
 			productType = #{productType},
 			productType = #{productType},
 			pcBanner = #{pcBanner},
 			pcBanner = #{pcBanner},
 			appletsBanner = #{appletsBanner},
 			appletsBanner = #{appletsBanner},
@@ -187,7 +195,6 @@
 		  cca.productId,
 		  cca.productId,
 		  cca.pcStatus,
 		  cca.pcStatus,
 		  cca.appletsStatus,
 		  cca.appletsStatus,
-		  cca.shopId,
 		  cca.sort,
 		  cca.sort,
 		  cca.addTime,
 		  cca.addTime,
 		  cca.delFlag,
 		  cca.delFlag,
@@ -208,13 +215,13 @@
 	<insert id="insertCouponAssociate">
 	<insert id="insertCouponAssociate">
 		INSERT INTO `cm_coupon_associate` (
 		INSERT INTO `cm_coupon_associate` (
 		  `couponId`, `productId`, `pcStatus`,
 		  `couponId`, `productId`, `pcStatus`,
-		  `appletsStatus`, `shopId`,
+		  `appletsStatus`,
 		  `sort`, `addTime`, `delFlag`
 		  `sort`, `addTime`, `delFlag`
 		)
 		)
 		VALUES
 		VALUES
 		  (
 		  (
 			#{couponId}, #{productId}, #{pcStatus},
 			#{couponId}, #{productId}, #{pcStatus},
-			#{appletsStatus}, #{shopId},
+			#{appletsStatus},
 			#{sort}, #{addTime}, #{delFlag}
 			#{sort}, #{addTime}, #{delFlag}
 		  )
 		  )
 	</insert>
 	</insert>
@@ -325,24 +332,63 @@
 		  s.shopID
 		  s.shopID
 	</select>
 	</select>
 
 
-	<select id="findCouponShop" resultType="com.caimei.modules.user.entity.NewCmShop">
+	<select id="findRedemptionCodeNum" resultType="integer">
+		SELECT COUNT(id) FROM cm_coupon_redemption_code WHERE couponId = #{couponId}
+	</select>
+	
+	<select id="findByRedemptionCode" resultType="com.caimei.modules.coupon.entity.CmCouponRedemptionCode">
 		SELECT
 		SELECT
-		  cca.id,
-		  s.shopID,
-		  s.userID,
-		  IFNULL(s.name, u.name) AS NAME,
-		  IFNULL(s.sname, u.realName) AS sname,
-		  IFNULL(s.contractMobile, u.bindMobile) AS contractMobile,
-		  IFNULL(s.linkMan, u.userName) AS linkMan
+		  `id`,
+		  `couponId`,
+		  `userId`,
+		  `redemptionCode`,
+		  `status`,
+		  `redemptionTime`,
+		  `addTime`
 		FROM
 		FROM
-		  cm_coupon_associate cca
-		  LEFT JOIN shop s ON s.shopID = cca.shopId
-		  LEFT JOIN USER u ON u.shopID = s.shopID
+		  cm_coupon_redemption_code
+		WHERE
+		  redemptionCode =	#{redemptionCode}
+	</select>
+
+	<insert id="insertRedemptionCode">
+		INSERT INTO `cm_coupon_redemption_code` (
+		  `couponId`,
+		  `userId`,
+		  `redemptionCode`,
+		  `status`,
+		  `redemptionTime`,
+		  `addTime`
+		)
+		VALUES
+		  (
+			#{couponId},
+			#{userId},
+			#{redemptionCode},
+			#{status},
+			#{redemptionTime},
+			#{addTime}
+		  )
+	</insert>
+
+	<select id="findRedemptionCode" resultType="com.caimei.modules.coupon.entity.CmCouponRedemptionCode">
+		SELECT
+		  `id`,
+		  `couponId`,
+		  `userId`,
+		  `redemptionCode`,
+		  `status`,
+		  `redemptionTime`,
+		  `addTime`
+		FROM
+		  cm_coupon_redemption_code
 		WHERE
 		WHERE
-		  cca.delFlag = 0
-		  AND couponId = #{couponId}
+		  couponId = #{couponId}
+		  <if test="status != null and status != ''">
+			  AND status = #{status}
+		  </if>
 		ORDER BY
 		ORDER BY
-		  cca.addTime DESC
+		  addTime DESC
 	</select>
 	</select>
 	
 	
 </mapper>
 </mapper>

+ 4 - 4
src/main/webapp/WEB-INF/views/modules/coupon/cmCouponForm.jsp

@@ -133,16 +133,16 @@
 			<label class="control-label"><font color="red">*</font>开始时间:</label>
 			<label class="control-label"><font color="red">*</font>开始时间:</label>
 			<div class="controls">
 			<div class="controls">
 				<input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
 				<input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-					value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+					value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+					onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
 			</div>
 			</div>
 		</div>
 		</div>
 		<div class="control-group">
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>结束时间:</label>
 			<label class="control-label"><font color="red">*</font>结束时间:</label>
 			<div class="controls">
 			<div class="controls">
 				<input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
 				<input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-					value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+					value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+					onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
 			</div>
 			</div>
 		</div>
 		</div>
 		<div class="control-group">
 		<div class="control-group">

+ 4 - 4
src/main/webapp/WEB-INF/views/modules/coupon/couponCategoryForm.jsp

@@ -78,16 +78,16 @@
         <label class="control-label"><font color="red">*</font>开始时间:</label>
         <label class="control-label"><font color="red">*</font>开始时间:</label>
         <div class="controls">
         <div class="controls">
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
         <label class="control-label"><font color="red">*</font>结束时间:</label>
         <label class="control-label"><font color="red">*</font>结束时间:</label>
         <div class="controls">
         <div class="controls">
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">

+ 4 - 4
src/main/webapp/WEB-INF/views/modules/coupon/couponNewUserForm.jsp

@@ -65,16 +65,16 @@
         <label class="control-label"><font color="red">*</font>开始时间:</label>
         <label class="control-label"><font color="red">*</font>开始时间:</label>
         <div class="controls">
         <div class="controls">
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
         <label class="control-label"><font color="red">*</font>结束时间:</label>
         <label class="control-label"><font color="red">*</font>结束时间:</label>
         <div class="controls">
         <div class="controls">
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">

+ 28 - 57
src/main/webapp/WEB-INF/views/modules/coupon/couponShopForm.jsp

@@ -9,10 +9,7 @@
         $(document).ready(function () {
         $(document).ready(function () {
             $("#inputForm").validate({
             $("#inputForm").validate({
                 submitHandler: function (form) {
                 submitHandler: function (form) {
-                    if (imageList.length > 0) {
-                        var shopInfo = JSON.stringify(imageList);
-                        $('#shopInfo').val(shopInfo);
-                    } else {
+                    if ($("#shopId").val() == ''){
                         alertx("请选择供应商");
                         alertx("请选择供应商");
                         return false;
                         return false;
                     }
                     }
@@ -55,7 +52,7 @@
 <font style="color: red;margin-left: 20px">店铺券适合给特定的供应商做活动时创建,并且适用于供应商的全部商品。</font><br><br>
 <font style="color: red;margin-left: 20px">店铺券适合给特定的供应商做活动时创建,并且适用于供应商的全部商品。</font><br><br>
 <form:form id="inputForm" modelAttribute="cmCoupon" action="${ctx}/coupon/cmCoupon/save" method="post" class="form-horizontal">
 <form:form id="inputForm" modelAttribute="cmCoupon" action="${ctx}/coupon/cmCoupon/save" method="post" class="form-horizontal">
     <form:hidden path="id"/>
     <form:hidden path="id"/>
-    <form:hidden path="shopInfo" id="shopInfo"/>
+    <form:hidden path="shopId" id="shopId"/>
     <input type="hidden" name="couponType" value="3"/>
     <input type="hidden" name="couponType" value="3"/>
     <sys:message content="${message}"/>
     <sys:message content="${message}"/>
     <div class="control-group">
     <div class="control-group">
@@ -67,7 +64,7 @@
     <div class="control-group">
     <div class="control-group">
         <label class="control-label"><font color="red">*</font>供应商:</label>
         <label class="control-label"><font color="red">*</font>供应商:</label>
         <div class="controls">
         <div class="controls">
-            <a href="javascript:void(0);" onclick="showSelect()" id="chooseClub">请选择供应商</a>
+            <a href="javascript:void(0);" onclick="showSelect()" id="chooseShop">请选择供应商</a>
             <table id="contentTable" class="table table-striped table-bordered table-condensed" hidden="hidden">
             <table id="contentTable" class="table table-striped table-bordered table-condensed" hidden="hidden">
                 <thead>
                 <thead>
                 <tr>
                 <tr>
@@ -101,8 +98,8 @@
         <div class="controls">
         <div class="controls">
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20"
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20"
                    class="input-medium Wdate "
                    class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
@@ -110,8 +107,8 @@
         <div class="controls">
         <div class="controls">
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20"
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20"
                    class="input-medium Wdate "
                    class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
@@ -145,29 +142,22 @@
     </div>
     </div>
 </form:form>
 </form:form>
 <script>
 <script>
-    var shopIds = '';
-    var imageList = [];
-
     $(function () {
     $(function () {
-        <c:forEach items="${cmCoupon.shopList}" var="shop" varStatus="index">
-            imageList.push({
-                "id": "${shop.id}",
-                "shopId": "${shop.shopID}",
-                "name": "${shop.name}",
-                "sname": "${shop.sname}",
-                "linkMan": "${shop.linkMan}",
-                "contractMobile": "${shop.contractMobile}"
-            });
-        </c:forEach>
-        if (imageList.length > 0) {
-            $('#contentTable').show();
-            insertHtml(imageList);
+        if (${not empty cmCoupon.shop}) {
+            var shop = {
+                "shopId": "${cmCoupon.shop.shopID}",
+                "name": "${cmCoupon.shop.name}",
+                "sname": "${cmCoupon.shop.sname}",
+                "linkMan": "${cmCoupon.shop.linkMan}",
+                "contractMobile": "${cmCoupon.shop.contractMobile}"
+            }
+            appendShopOrderHead(shop);
         }
         }
     });
     });
 
 
 
 
-    function appendShopOrderHead(data, index) {
-        var html = '<tr id ="ai' + index + '">' +
+    function appendShopOrderHead(data) {
+        var html = '<tr>' +
             '<td>' +
             '<td>' +
             data.name +
             data.name +
             '</td>' +
             '</td>' +
@@ -181,20 +171,13 @@
             data.contractMobile +
             data.contractMobile +
             '</td>' +
             '</td>' +
             '<td>' +
             '<td>' +
-            '<a href="javascript:;" onclick="delect(' + index + ')">删除</a>' +
+            '<a href="javascript:;" onclick="delect()">删除</a>' +
             '</td>' +
             '</td>' +
             '</tr>';
             '</tr>';
-        return html;
-    }
-
-    function insertHtml(list) {
-        var html = '';
-        shopIds = '';
-        list.forEach(function (item, index) {
-            html += appendShopOrderHead(item, index);
-            shopIds += "," + item.shopId;
-        });
         $("#hotSearch").html(html);
         $("#hotSearch").html(html);
+        $("#chooseShop").hide();
+        $('#contentTable').show();
+        $("#shopId").val(data.shopId);
     }
     }
 
 
 
 
@@ -212,7 +195,7 @@
 
 
     //点击添加
     //点击添加
     function showSelect() {
     function showSelect() {
-        var url = "${ctx}/coupon/cmCoupon/toAddShop?shopIds=" + shopIds;
+        var url = "${ctx}/coupon/cmCoupon/toAddShop";
         var title = '';
         var title = '';
         title = "选择供应商";
         title = "选择供应商";
         top.$.jBox("iframe:" + url, {
         top.$.jBox("iframe:" + url, {
@@ -229,13 +212,7 @@
                 if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
                 if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
                     var items = $jboxFrame[0].contentWindow.getCheckedItems();
                     var items = $jboxFrame[0].contentWindow.getCheckedItems();
                     console.log(items);
                     console.log(items);
-                    console.log(items[0]);
-                    for (var i = 0; i < items.length; i++) {
-                        console.log(items[i]);
-                        imageList.push(items[i]);
-                        $('#contentTable').show();
-                    }
-                    insertHtml(imageList);
+                    appendShopOrderHead(items);
                 }
                 }
                 return true;
                 return true;
             }
             }
@@ -245,17 +222,11 @@
     /**
     /**
      * 删除操作
      * 删除操作
      */
      */
-    function delect(index) {
+    function delect() {
         return confirmx("确定删除吗?", function () {
         return confirmx("确定删除吗?", function () {
-            var image = imageList[index];
-            if (image.shopId != '') {
-                shopIds = shopIds.replace(image.shopId,"");
-            }
-            imageList.splice(index, 1);
-            insertHtml(imageList);
-            if (imageList.length == 0) {
-                $('#contentTable').hide();
-            }
+            $("#chooseShop").show();
+            $('#contentTable').hide();
+            $("#shopId").val("");
         });
         });
     }
     }
 
 

+ 1 - 3
src/main/webapp/WEB-INF/views/modules/coupon/couponShopList.jsp

@@ -83,9 +83,7 @@
                     ${cmCoupon.name}
                     ${cmCoupon.name}
             </td>
             </td>
             <td>
             <td>
-                <c:forEach items="${cmCoupon.shopList}" var="shop">
-                    ${shop.name}<br>
-                </c:forEach>
+                    ${cmCoupon.shopName}
             </td>
             </td>
             <td>
             <td>
                     ${cmCoupon.couponAmount}
                     ${cmCoupon.couponAmount}

+ 4 - 4
src/main/webapp/WEB-INF/views/modules/coupon/couponUserExclusiveForm.jsp

@@ -95,8 +95,8 @@
         <div class="controls">
         <div class="controls">
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20"
             <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20"
                    class="input-medium Wdate "
                    class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
@@ -104,8 +104,8 @@
         <div class="controls">
         <div class="controls">
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20"
             <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20"
                    class="input-medium Wdate "
                    class="input-medium Wdate "
-                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">

+ 168 - 0
src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeCouponForm.jsp

@@ -0,0 +1,168 @@
+<%@ page import="java.util.Date" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+    <title>优惠券管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            $("#inputForm").validate({
+                submitHandler: function(form){
+                    var couponAmount = $("#couponAmount").val();
+                    var touchPrice = $("#touchPrice").val();
+                    if (couponAmount >= touchPrice) {
+                        alertx("优惠券金额必须小于优惠条件金额");
+                        return false;
+                    }
+                    var startDate = $("#startDate").val();
+                    var endDate = $("#endDate").val();
+                    if (startDate >= endDate) {
+                        alertx("结束时间不能早于开始时间");
+                        return false;
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/coupon/cmCoupon/codeCouponList">兑换码优惠券</a></li>
+    <li class="active"><a href="${ctx}/coupon/cmCoupon/codeCouponForm">${not empty cmCoupon.id?'编辑':'添加'}</a></li>
+</ul><br/>
+<form:form id="inputForm" modelAttribute="cmCoupon" action="${ctx}/coupon/cmCoupon/codeCouponSave" method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>活动主题:</label>
+        <div class="controls">
+            <form:input path="name" htmlEscape="false" maxlength="30" placeholder="30个汉字以内" class="input-xlarge required"/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>优惠券金额:</label>
+        <div class="controls">
+            <input type="number" id="couponAmount" name="couponAmount" value="${cmCoupon.couponAmount}" min="0" required>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>优惠条件:</label>
+        <div class="controls">
+            订单商品总额满&nbsp;&nbsp;&nbsp;&nbsp;<input type="number" name="touchPrice" id="touchPrice" value="${cmCoupon.touchPrice}" min="0" required>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>开始时间:</label>
+        <div class="controls">
+            <input name="startDate" id="startDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
+                   value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd 00:00:00"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 00:00:00',isShowClear:false});"/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>结束时间:</label>
+        <div class="controls">
+            <input name="endDate" id="endDate" type="text" required readonly="readonly" maxlength="20" class="input-medium Wdate "
+                   value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd 23:59:59"/>"
+                   onclick="WdatePicker({dateFmt:'yyyy-MM-dd 23:59:59',isShowClear:false});"/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>优惠状态:</label>
+        <div class="controls">
+            <label id="initializeShow">
+                <c:if test="${empty cmCoupon.status || cmCoupon.status eq 0}">
+                    <font color="#800080">未生效</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 1}">
+                    <font color="#00CC66">已生效</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 2}">
+                    <font color="red">已关闭</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 3}">
+                    <font color="#FF6600">已失效</font>
+                </c:if>
+            </label>
+            <label id="closeShow" style="display: none">
+                <font color="red">已关闭</font>
+            </label>
+            <input type="hidden" id="hiddenStatus" name="status" value="">
+            <input type="checkbox" id="status" name="status" value="2" ${cmCoupon.status eq "2" ? "checked" : ""} onclick="statusShow()" />关闭
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>兑换码数量:</label>
+        <div class="controls">
+            <input type="number" name="codeNum" value="${cmCoupon.codeNum}" min="${empty cmCoupon.codeNum ? 0:cmCoupon.codeNum}" required>
+            &nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="showSelect(${cmCoupon.id})">查看兑换码</a>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label"><font color="red">*</font>优惠券类型:</label>
+        <div class="controls">
+            <form:radiobutton path="couponType" value="0" label="活动券" class="required"/>
+            <form:radiobutton path="couponType" value="1" label="品类券" class="required"/>
+            <form:radiobutton path="couponType" value="2" label="用户专享券" class="required"/>
+            <form:radiobutton path="couponType" value="3" label="店铺券" class="required"/>
+            <form:radiobutton path="couponType" value="4" label="新用户券" class="required"/>
+        </div>
+    </div>
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+<script>
+    function statusShow() {
+        var status = $("input[name='status']:checked").val();
+        if (status == 2) {
+            $("#initializeShow").hide();
+            $("#closeShow").show();
+        } else {
+            $("#initializeShow").show();
+            $("#closeShow").hide();
+            $("#hiddenStatus").val(0);
+        }
+    }
+
+    function showSelect(couponId) {
+        if (couponId == null){
+            alertx("暂未生成兑换码");
+            return false;
+        }
+        var url = "${ctx}/coupon/cmCoupon/redemptionCode?couponId=" + couponId;
+        var title = '';
+        title = "查看兑换码";
+        top.$.jBox("iframe:" + url, {
+            iframeScrolling: 'yes',
+            width: $(top.document).width() - 750,
+            height: $(top.document).height() - 300,
+            persistent: true,
+            title: title,
+            buttons: {"确定": '1'}
+        });
+    }
+
+    /**
+     * @param obj
+     * jquery控制input只能输入数字
+     */
+    function onlynum(obj) {
+        obj.value = obj.value.replace(/[^\d]/g, ""); //清除"数字"以外的字符
+    }
+</script>
+</body>
+</html>

+ 136 - 0
src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeCouponList.jsp

@@ -0,0 +1,136 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+    <title>兑换码优惠券</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        .table th{text-align: center;}
+        .table td{text-align: center;}
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+
+        });
+        function page(n,s){
+            $("#pageNo").val(n);
+            $("#pageSize").val(s);
+            $("#searchForm").submit();
+            return false;
+        }
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li class="active"><a href="${ctx}/coupon/cmCoupon/codeCouponList">兑换码优惠券</a></li>
+</ul>
+<form:form id="searchForm" modelAttribute="cmCoupon" action="${ctx}/coupon/cmCoupon/codeCouponList" method="post" class="breadcrumb form-search">
+    <input type="hidden" name="couponType" value="0"/>
+    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <div class="ul-form">
+        <label>活动主题:</label>
+        <form:input path="name" htmlEscape="false" maxlength="50" class="input-medium"/>
+        <label>优惠状态:</label>
+        <form:select path="status" class="input-medium required">
+            <form:option value="" label="所有"/>
+            <form:option value="0" label="未生效"/>
+            <form:option value="1" label="已生效"/>
+            <form:option value="2" label="已关闭"/>
+            <form:option value="3" label="已失效"/>
+        </form:select>
+        <label>优惠时间:</label>
+        <input name="startDate" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate"
+               value="<fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+               onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/> -
+        <input name="endDate" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate"
+               value="<fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+               onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+        &nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        <input class="btn btn-primary" style="width: 120px" onclick="window.location='${ctx}/coupon/cmCoupon/codeCouponForm'" value="添加兑换码优惠券"/>
+        <div class="clearfix"></div>
+    </div>
+</form:form>
+<sys:message content="${message}"/>
+<table id="contentTable" class="table table-striped table-bordered table-condensed">
+    <thead>
+    <tr>
+        <th>ID</th>
+        <th>活动主题</th>
+        <th>优惠券金额</th>
+        <th>优惠条件</th>
+        <th>优惠状态</th>
+        <th>已兑换数量</th>
+        <th>开始时间</th>
+        <th>结束时间</th>
+        <th>添加时间</th>
+        <th>操作</th>
+    </tr>
+    </thead>
+    <tbody>
+    <c:forEach items="${page.list}" var="cmCoupon">
+        <tr>
+            <td>
+                    ${cmCoupon.id}
+            </td>
+            <td>
+                    ${cmCoupon.name}
+            </td>
+            <td>
+                    ${cmCoupon.couponAmount}
+            </td>
+            <td>
+                满${cmCoupon.touchPrice}
+            </td>
+            <td>
+                <c:if test="${cmCoupon.status eq 0}">
+                    <font color="#800080">未生效</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 1}">
+                    <font color="#00CC66">已生效</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 2}">
+                    <font color="red">已关闭</font>
+                </c:if>
+                <c:if test="${cmCoupon.status eq 3}">
+                    <font color="#FF6600">已失效</font>
+                </c:if>
+            </td>
+            <td></td>
+            <td>
+                <fmt:formatDate value="${cmCoupon.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+            </td>
+            <td>
+                <fmt:formatDate value="${cmCoupon.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+            </td>
+            <td>
+                <fmt:formatDate value="${cmCoupon.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+            </td>
+            <td>
+                <a href="${ctx}/coupon/cmCoupon/codeCouponForm?id=${cmCoupon.id}">编辑</a>
+                <a href="${ctx}/coupon/cmCoupon/close?id=${cmCoupon.id}" onclick="return confirmx('确定关闭该优惠券吗?', this.href)">关闭</a>
+                <a href="${ctx}/coupon/cmCoupon/delete?id=${cmCoupon.id}" onclick="return confirmx('确定删除该优惠券吗?', this.href)">删除</a>
+                <a href="javascript:void(0);" onclick="showSelect(${cmCoupon.id})">查看兑换码</a>
+            </td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+<script>
+    function showSelect(couponId) {
+        var url = "${ctx}/coupon/cmCoupon/redemptionCode?couponId=" + couponId;
+        var title = '';
+        title = "查看兑换码";
+        top.$.jBox("iframe:" + url, {
+            iframeScrolling: 'yes',
+            width: $(top.document).width() - 750,
+            height: $(top.document).height() - 300,
+            persistent: true,
+            title: title,
+            buttons: {"确定": '1'}
+        });
+    }
+</script>
+<div class="pagination">${page}</div>
+</body>
+</html>

+ 96 - 0
src/main/webapp/WEB-INF/views/modules/coupon/redemptionCodeList.jsp

@@ -0,0 +1,96 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: Administrator
+  Date: 2020/4/9
+  Time: 19:54
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>查看兑换码</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        .table td i {
+            margin: 0 2px;
+        }
+    </style>
+
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $("#searchForm").validate({
+                submitHandler: function (form) {
+                    form.submit();
+                }
+            })
+        });
+    </script>
+</head>
+<body>
+<br/>
+<form:form id="searchForm" modelAttribute="cmCouponRedemptionCode" action="${ctx}/coupon/cmCoupon/redemptionCode" method="post" class="breadcrumb form-search">
+    <input name="couponId" type="hidden" value="${redemptionCode.couponId}"/>
+    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <div class="ul-form">
+        <label>兑换状态:</label>
+        <form:select path="status" class="input-medium">
+            <form:option value="" label="全部"/>
+            <form:option value="1" label="未兑换"/>
+            <form:option value="2" label="已兑换"/>
+        </form:select>
+        &nbsp;&nbsp; <input id="btnSubmit" class="btn btn-primary" type="submit" value="搜索"/>
+        <div class="clearfix"></div>
+    </div>
+</form:form>
+<sys:message content="${message}"/>
+<table class="table table-striped table-bordered table-condensed table-hover">
+    <tr>
+        <th>序号</th>
+        <th>兑换码</th>
+        <th>兑换状态</th>
+        <th>兑换时间</th>
+    </tr>
+    <tbody>
+    <c:if test="${not empty page.list}">
+        <c:forEach items="${page.list}" var="item" varStatus="index">
+            <tr>
+                <td>${(page.pageNo-1)*page.pageSize+index.index+1}</td>
+                <td>${item.redemptionCode}</td>
+                <td>${item.status eq '1' ? "未兑换" : "已兑换"}</td>
+                <td><fmt:formatDate value="${item.redemptionTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+            </tr>
+        </c:forEach>
+    </c:if>
+    </tbody>
+</table>
+<c:if test="${empty  page.list}">
+    <p style="text-align: center;"><font color="#1e90ff">暂无数据……</font></p>
+</c:if>
+<div class="pagination">${page}</div>
+<script type="text/javascript">
+    $(document).ready(function () {
+        //弹出框去滚动条
+        top.$('#jbox-content').css("overflow-y", "hidden");
+        show_title(30);
+    });
+
+    function page(n, s) {
+        $("#pageNo").val(n);
+        $("#pageSize").val(s);
+        $("#searchForm").submit();
+        return false;
+    }
+
+    /**
+     * @param obj
+     * jquery控制input只能输入数字
+     */
+    function onlynum(obj) {
+        obj.value = obj.value.replace(/[^\d]/g, ""); //清除"数字"以外的字符
+    }
+</script>
+</body>
+</html>
+

+ 0 - 3
src/main/webapp/WEB-INF/views/modules/coupon/toAddClub.jsp

@@ -28,9 +28,6 @@
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
-<ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/coupon/cmCoupon/toAddClub">添加商品</a></li>
-</ul>
 <br/>
 <br/>
 <form:form id="searchForm" modelAttribute="cmUser" action="${ctx}/coupon/cmCoupon/toAddClub" method="post" class="breadcrumb form-search">
 <form:form id="searchForm" modelAttribute="cmUser" action="${ctx}/coupon/cmCoupon/toAddClub" method="post" class="breadcrumb form-search">
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>

+ 0 - 3
src/main/webapp/WEB-INF/views/modules/coupon/toAddProduct.jsp

@@ -82,9 +82,6 @@
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
-<ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/coupon/cmCoupon/toAddProduct?productIds=${productIds}">商品列表</a></li>
-</ul>
 <form:form id="searchForm" modelAttribute="product" action="${ctx}/coupon/cmCoupon/toAddProduct?productIds=${productIds}" method="post" class="breadcrumb form-search">
 <form:form id="searchForm" modelAttribute="product" action="${ctx}/coupon/cmCoupon/toAddProduct?productIds=${productIds}" method="post" class="breadcrumb form-search">
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
     <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
     <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>

+ 12 - 38
src/main/webapp/WEB-INF/views/modules/coupon/toAddShop.jsp

@@ -1,4 +1,3 @@
-<%@ page import="java.util.Date" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <html>
@@ -13,19 +12,6 @@
             //弹出框去滚动条
             //弹出框去滚动条
             top.$('#jbox-content').css("overflow-y","hidden");
             top.$('#jbox-content').css("overflow-y","hidden");
             show_title(30);
             show_title(30);
-
-//			反选
-            $('body').on('click','input[name="info"]',function() {
-                var allInputLength = $('input[name="info"]').length - $('input[name="info"]:disabled').length,
-                    allInputCheckedLength = $('input[name="info"]:checked').length,
-                    checkAllEle= $('.check-all');
-//			    判断选中长度和总长度,如果相等就是全选否则取消全选
-                if(allInputLength === allInputCheckedLength) {
-                    checkAllEle.attr('checked', true);
-                } else {
-                    checkAllEle.attr('checked', false);
-                }
-            })
         });
         });
         function page(n,s){
         function page(n,s){
             $("#pageNo").val(n);
             $("#pageNo").val(n);
@@ -34,28 +20,19 @@
             return false;
             return false;
         }
         }
 
 
-        function getCheckedItems(){
-            var items = [];
-            var $items = $('.check-item:checked');
-            $items.each(function(){
-                var shop = JSON.parse($(this).val());
-                items.push({
-                    "id": "",
-                    "shopId": shop.shopID,
-                    "name": shop.name,
-                    "sname": shop.sname,
-                    "linkMan": shop.linkMan,
-                    "contractMobile": shop.contractMobile
-                })
-            });
+        function getCheckedItems() {
+            var item = $('.check-item:checked').val();
+            var shop = JSON.parse(item);
+            var items = {
+                "shopId": shop.shopID,
+                "name": shop.name,
+                "sname": shop.sname,
+                "linkMan": shop.linkMan,
+                "contractMobile": shop.contractMobile
+            };
             return items;
             return items;
         }
         }
 
 
-        function allCkbfun(ckb){
-            var isChecked = ckb.checked;
-            $(".check-item").attr('checked', isChecked);
-        }
-
         /**
         /**
          * @param obj
          * @param obj
          * jquery控制input只能输入数字
          * jquery控制input只能输入数字
@@ -79,9 +56,6 @@
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
-<ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/coupon/cmCoupon/toAddShop?shopIds=${shopIds}">供应商列表</a></li>
-</ul>
 <form:form id="searchForm" modelAttribute="newCmShop" action="${ctx}/coupon/cmCoupon/toAddShop" method="post" class="breadcrumb form-search">
 <form:form id="searchForm" modelAttribute="newCmShop" action="${ctx}/coupon/cmCoupon/toAddShop" method="post" class="breadcrumb form-search">
     <input type="hidden" name="shopIds" value="${shopIds}">
     <input type="hidden" name="shopIds" value="${shopIds}">
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
@@ -100,7 +74,7 @@
 <sys:message content="${message}"/>
 <sys:message content="${message}"/>
 <table class="table table-striped table-bordered table-condensed table-hover">
 <table class="table table-striped table-bordered table-condensed table-hover">
     <tr>
     <tr>
-        <th style="width:20px;"><input class="check-all" type="checkbox" onclick="allCkbfun(this);"/></th>
+        <th style="width:20px;"></th>
         <th>供应商ID</th>
         <th>供应商ID</th>
         <th>供应商名称</th>
         <th>供应商名称</th>
         <th>供应商简称</th>
         <th>供应商简称</th>
@@ -113,7 +87,7 @@
             <tr id="${item.shopID}" class="itemtr">
             <tr id="${item.shopID}" class="itemtr">
                     <%--已过滤添加过的商品和未上架的商品--%>
                     <%--已过滤添加过的商品和未上架的商品--%>
                 <th>
                 <th>
-                    <input class="check-item" type="checkbox" ${item.choose ? "disabled":""}  name="info" value='${fns:toJson(item)}'/>
+                    <input class="check-item" type="radio" name="info" value='${fns:toJson(item)}'/>
                 </th>
                 </th>
                 <td>${item.shopID}</td>
                 <td>${item.shopID}</td>
                 <td>${item.name}</td>
                 <td>${item.name}</td>