Browse Source

超级会员

huangzhiguo 2 years ago
parent
commit
a5b1b2d659

+ 51 - 6
src/main/java/com/caimei365/manager/controller/caimei/svip/CmSvipHistoryApi.java

@@ -10,6 +10,8 @@ import com.caimei365.manager.service.caimei.svip.CmSvipHistoryService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 /**
  * Description
  *
@@ -99,13 +101,23 @@ public class CmSvipHistoryApi {
         return historyService.couponList(cmVipCoupon, pageNum, pageSize);
     }
 
+    @RequestMapping(value = "form")
+    public Map<String, Object> form(CmVipCoupon cmVipCoupon) {
+//        cmVipCoupon.setEndTime(cmVipCoupon.getEndTime());
+        // 设置4张券的表单
+        /*SvipCouponForm svipcouponForm = cmVipCouponService.setSvipcouponForms(cmVipCoupon);
+        List<String> useDateList = cmVipCouponService.getAllUseDateList();
+        return "modules/svip/cmSvipCouponForm";*/
+        return null;
+    }
+
     /**
      * 关闭超级会员专属优惠券
      * @param id
      * @return
      */
-    @GetMapping("/closeCoupon")
-    public ResponseJson closeCoupon(Integer id) {
+    @PostMapping("/closeCoupon/{id}")
+    public ResponseJson closeCoupon(@PathVariable("id") Integer id) {
         if (null == id) {
             return ResponseJson.error(-1,"参数为空", null);
         }
@@ -117,8 +129,8 @@ public class CmSvipHistoryApi {
      * @param id
      * @return
      */
-    @GetMapping("/openCoupon")
-    public ResponseJson openCoupon(Integer id) {
+    @PostMapping("/openCoupon/{id}")
+    public ResponseJson openCoupon(@PathVariable("id") Integer id) {
         if (null == id) {
             return ResponseJson.error(-1,"参数为空", null);
         }
@@ -130,8 +142,8 @@ public class CmSvipHistoryApi {
      * @param id
      * @return
      */
-    @GetMapping("/deleteCoupon")
-    public ResponseJson deleteCoupon(Integer id) {
+    @PostMapping("/deleteCoupon/{id}")
+    public ResponseJson deleteCoupon(@PathVariable("id") Integer id) {
         if (null == id) {
             return ResponseJson.error(-1,"参数为空", null);
         }
@@ -182,6 +194,39 @@ public class CmSvipHistoryApi {
         return historyService.findProductList(cmSvipProduct, pageNum, pageSize);
     }
 
+    /**
+     * 编辑超级会员商品
+     * @param productId
+     * @return
+     */
+    @GetMapping("/findSkuList")
+    public ResponseJson findSkuList(Integer productId) {
+        if (null == productId) {
+            return ResponseJson.error(-1,"超级会员商品id不能为空",null);
+        }
+        return historyService.findSkuList(productId);
+    }
+
+    /**
+     * 保存超级会员商品
+     * @param cmSvipProduct
+     * @return
+     */
+    @PostMapping("/saveSvipProduct")
+    public ResponseJson saveSvipProduct(CmSvipProduct cmSvipProduct) {
+        return historyService.saveSvipProduct(cmSvipProduct);
+    }
+
+    /**
+     * 宣传图
+     * @return
+     */
+    @GetMapping("/getAdsImage")
+    public ResponseJson getAdsImage () {
+
+        return historyService.getAdsImage();
+    }
+
     /**
      * 套餐配置
      * @return

+ 29 - 0
src/main/java/com/caimei365/manager/dao/svip/CmSvipHistoryDao.java

@@ -140,6 +140,35 @@ public interface CmSvipHistoryDao {
      */
     List<CmSvipProduct> findProductList(CmSvipProduct svipProduct);
 
+    /**
+     * 超级会员商品编辑数据
+     * @param productId
+     * @return
+     */
+    List<CmSku> findSkuList(Integer productId);
+
+    List<CmLadderPrice> findLadderPriceBySku(Integer skuId);
+
+    CmSku getSvipSku(Integer skuId);
+
+    CmSvipProduct getCmSvipProduct(Integer id);
+
+    void deleteByProductId(Integer productId);
+
+    void insertSkuPrice(CmSku s);
+
+    void insertCmSvipProduct(CmSvipProduct cmSvipProduct);
+
+    void updateCmSvipProduct(CmSvipProduct cmSvipProduct);
+
+    /**
+     * 超级会员宣传图
+     * @return
+     */
+    CmSvipProductAdsImage getAdsImage();
+
+    List<String> getAllUseDateList();
+
     /**
      * 商品sku数据
      * @param productId

+ 1 - 0
src/main/java/com/caimei365/manager/entity/caimei/svip/CmSvipProduct.java

@@ -16,6 +16,7 @@ import java.util.List;
 @Data
 public class CmSvipProduct {
 
+    private Integer id;
     /**
      * 商品id
      */

+ 16 - 0
src/main/java/com/caimei365/manager/entity/caimei/svip/CmSvipProductAdsImage.java

@@ -0,0 +1,16 @@
+package com.caimei365.manager.entity.caimei.svip;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/4/13
+ */
+@Data
+public class CmSvipProductAdsImage {
+
+    private String pcImage;
+    private String appletsImage;
+}

+ 29 - 0
src/main/java/com/caimei365/manager/service/caimei/svip/CmSvipHistoryService.java

@@ -6,6 +6,8 @@ import com.caimei365.manager.entity.caimei.CmUser;
 import com.caimei365.manager.entity.caimei.product.Product;
 import com.caimei365.manager.entity.caimei.svip.*;
 
+import java.util.Map;
+
 /**
  * Description
  *
@@ -57,6 +59,13 @@ public interface CmSvipHistoryService {
      */
     ResponseJson<PaginationVo<CmVipCoupon>> couponList(CmVipCoupon cmVipCoupon, int pageNum, int pageSize);
 
+    /**
+     * 编辑超级会员优惠券
+     * @param cmVipCoupon
+     * @return
+     */
+    Map<String, Object> cmVipCouponForm(CmVipCoupon cmVipCoupon);
+
     /**
      * 关闭超级会员专属优惠券
      * @param id
@@ -103,6 +112,25 @@ public interface CmSvipHistoryService {
      */
     ResponseJson<PaginationVo<CmSvipProduct>> findProductList(CmSvipProduct svipProduct, Integer pageNum, Integer pageSize);
 
+    /**
+     * 编辑超级会员商品
+     * @param productId
+     * @return
+     */
+    ResponseJson findSkuList(Integer productId);
+
+    /**
+     * 保存超级会员商品
+     * @param cmSvipProduct
+     * @return
+     */
+    ResponseJson saveSvipProduct(CmSvipProduct cmSvipProduct);
+
+    /**
+     * 宣传图
+     * @return
+     */
+    ResponseJson getAdsImage();
     /**
      * 套餐配置
      * @return
@@ -115,4 +143,5 @@ public interface CmSvipHistoryService {
      * @return
      */
     ResponseJson updatePrice(CmSvipPackage cmSvipPackage);
+
 }

+ 111 - 0
src/main/java/com/caimei365/manager/service/caimei/svip/impl/CmSvipHistoryServiceImpl.java

@@ -1,6 +1,7 @@
 package com.caimei365.manager.service.caimei.svip.impl;
 
 import com.caimei.utils.AppUtils;
+import com.caimei.utils.MathUtil;
 import com.caimei.utils.StringUtil;
 import com.caimei.utils.StringUtils;
 import com.caimei365.manager.dao.svip.CmSvipHistoryDao;
@@ -248,6 +249,23 @@ public class CmSvipHistoryServiceImpl implements CmSvipHistoryService {
         return ResponseJson.success(page);
     }
 
+    /**
+     * 编辑超级会员优惠券
+     *
+     * @param cmVipCoupon
+     * @return
+     */
+    @Override
+    public Map<String, Object> cmVipCouponForm(CmVipCoupon cmVipCoupon) {
+        Map<String, Object> map = new HashMap<>();
+//        SvipCouponForm svipcouponForm = cmVipCouponService.setSvipcouponForms(cmVipCoupon);
+        List<String> useDateList = historyDao.getAllUseDateList();
+//        map.put("svipcouponForm", svipcouponForm);
+        map.put("useDateList", useDateList);
+
+        return map;
+    }
+
     /**
      * 关闭超级会员专属优惠券
      *
@@ -378,6 +396,81 @@ public class CmSvipHistoryServiceImpl implements CmSvipHistoryService {
         return ResponseJson.success(page);
     }
 
+    /**
+     * 编辑超级会员商品
+     *
+     * @param productId
+     * @return
+     */
+    @Override
+    public ResponseJson findSkuList(Integer productId) {
+        CmSvipProduct cmSvipProduct = getCmSvipProduct(productId);
+        List<CmSku> skus = historyDao.findSkuList(cmSvipProduct.getProductId());
+        skus.forEach(s -> {
+            s.setLadderPriceList(historyDao.findLadderPriceBySku(s.getSkuId()));
+        });
+        if (null != skus && skus.size() > 0) {
+            skus.forEach(s -> {
+                CmSku svipSku = historyDao.getSvipSku(s.getSkuId());
+                if (null != svipSku) {
+                    s.setDiscount(svipSku.getDiscount());
+                    s.setDiscountPrice(svipSku.getDiscountPrice());
+                    s.setPriceType(svipSku.getPriceType());
+                }
+            });
+        }
+        cmSvipProduct.setSkus(skus);
+        if ("2".equals(cmSvipProduct.getCostCheckFlag())) {
+            BigDecimal mul = MathUtil.mul(cmSvipProduct.getPrice(), new BigDecimal(cmSvipProduct.getCostProportional()));
+            cmSvipProduct.setCostPrice(MathUtil.mul(mul, new BigDecimal(0.01d)).toString());
+        }
+        return ResponseJson.success(cmSvipProduct);
+    }
+
+    /**
+     * 保存超级会员商品
+     *
+     * @param cmSvipProduct
+     * @return
+     */
+    @Override
+    public ResponseJson saveSvipProduct(CmSvipProduct cmSvipProduct) {
+        //保存/修改同步处理cm_svip_product_sku表数据
+        if (null != cmSvipProduct.getId()) {
+            cmSvipProduct.setSort(1);
+            cmSvipProduct.setStatus(1);
+        } else {
+            //删除旧sku价格,插入新的
+            historyDao.deleteByProductId(cmSvipProduct.getProductId());
+        }
+        //保存不同sku的优惠折扣
+        List<CmSku> skus = cmSvipProduct.getSkus();
+        if (null != skus && skus.size() > 0) {
+            skus.forEach(s -> {
+                Integer priceType = null == s.getDiscount() || 0 == s.getDiscount() ? 2 : 1;
+                s.setPriceType(priceType);
+                s.setProductId(cmSvipProduct.getProductId());
+                historyDao.insertSkuPrice(s);
+            });
+        }
+        if (null == cmSvipProduct.getId()) {
+            historyDao.insertCmSvipProduct(cmSvipProduct);
+        } else {
+            historyDao.updateCmSvipProduct(cmSvipProduct);
+        }
+        return ResponseJson.success();
+    }
+
+    /**
+     * 宣传图
+     *
+     * @return
+     */
+    @Override
+    public ResponseJson getAdsImage() {
+        return ResponseJson.success(historyDao.getAdsImage());
+    }
+
     @Override
     public ResponseJson<CmSvipPackage> findPackage() {
         // 1 套餐12 、2 套餐3月 、3 套餐1月
@@ -422,6 +515,24 @@ public class CmSvipHistoryServiceImpl implements CmSvipHistoryService {
         return ResponseJson.success(1, "", null);
     }
 
+    /**
+     * 初始化超级会员商品数据
+     * @param id
+     * @return
+     */
+    public CmSvipProduct getCmSvipProduct(Integer id) {
+        CmSvipProduct cmSvipProduct = historyDao.getCmSvipProduct(id);
+        CmSku sku = historyDao.findSku(cmSvipProduct.getProductId());
+        cmSvipProduct.setPrice(BigDecimal.valueOf(sku.getPrice()));
+        cmSvipProduct.setCostCheckFlag(sku.getCostCheckFlag().toString());
+        if (1 == sku.getCostCheckFlag()) {
+            cmSvipProduct.setCostPrice(sku.getCostPrice().toString());
+        } else {
+            cmSvipProduct.setCostProportional(sku.getCostProportional().toString());
+        }
+        return cmSvipProduct;
+    }
+
     private static String strs(String str) {
         if (str.indexOf(".") > 0) {
             // 删掉尾数为0的字符

+ 110 - 0
src/main/resources/mapper/svip/CmSvipHistoryDao.xml

@@ -164,12 +164,40 @@
 		a.qualificationLink,
         a.labelIds
     </sql>
+    <sql id="cmSvipProductColumns">
+        a.id AS "id",
+		a.productId AS "productId",
+		ccs.priceType AS "priceType",
+		ccs.discount AS "discount",
+		ccs.discountPrice AS "discountPrice",
+		a.sort AS "sort",
+		a.addTime AS "addTime",
+        a.status as "status",
+        p.mainImage as "productImage",
+        p.name as "productName",
+		s.name as "shopName",
+        p.includedTax,
+        p.invoiceType,
+        p.taxPoint,
+        p.supplierTaxPoint
+    </sql>
     <sql id="newCmShopJoins">
         LEFT JOIN user u ON u.userID = a.userID
 		LEFT JOIN town b ON b.townID=a.townID
 		LEFT JOIN city c ON c.cityID=b.cityID
 		LEFT JOIN province d ON d.provinceID=c.provinceID
     </sql>
+    <sql id="cmSvipProductJoins">
+        left join product p on a.productId = p.productID
+		left join shop s on s.shopID = p.shopID
+        LEFT JOIN (SELECT csps.priceType,csps.discount,csps.discountPrice,csps.productId
+                    FROM cm_svip_product_sku csps
+                LEFT JOIN cm_sku cs ON csps.skuId=cs.skuId
+                WHERE csps.productId = (SELECT productId FROM cm_svip_product WHERE id= #{id} )
+        ORDER BY cs.price ASC
+        LIMIT 1
+        ) ccs ON a.productId = ccs.productId
+    </sql>
 
     <select id="superFind" resultType="com.caimei365.manager.entity.caimei.svip.CmSvipHistory">
         SELECT u.name as clubName, u.username as linkMan, u.bindMobile as mobile,
@@ -636,6 +664,88 @@
         </where>
                 order by -sort desc,addTime desc
     </select>
+    <select id="findSkuList" resultType="com.caimei365.manager.entity.caimei.svip.CmSku">
+        select cs.skuId,
+               cs.productId,
+               unit,
+               normalPrice,
+               stock,
+               costCheckFlag,
+               costProportional,
+               costPrice,
+               price,
+               ladderPriceFlag,
+               minBuyNumber,
+               cps.touchPrice,
+               csps.discount,
+               csps.discountPrice,
+               csps.priceType
+        from cm_sku cs
+                 left join cm_promotion_sku cps on cs.skuId = cps.skuId
+                 left join cm_svip_product_sku csps on cs.skuId = csps.skuId
+        where cs.productId = #{productId}
+    </select>
+    <select id="findLadderPriceBySku" resultType="com.caimei365.manager.entity.caimei.svip.CmLadderPrice">
+        select skuId, productId, userType, ladderNum, buyNum, buyPrice, delFlag
+        FROM product_ladder_price
+        WHERE userType = 3
+          AND skuId = #{skuId}
+          AND buyNum is NOT null
+          AND buyPrice is NOT null
+          AND delFlag = 0
+        ORDER BY buyNum ASC
+    </select>
+    <select id="getSvipSku" resultType="com.caimei365.manager.entity.caimei.svip.CmSku">
+        SELECT skuId,
+               priceType,
+               discount,
+               discountPrice
+        FROM cm_svip_product_sku
+        where skuId = #{skuId}
+    </select>
+
+    <select id="getCmSvipProduct" resultType="com.caimei365.manager.entity.caimei.svip.CmSvipProduct">
+        SELECT
+        <include refid="cmSvipProductColumns"/>
+        FROM cm_svip_product a
+        <include refid="cmSvipProductJoins"/>
+        WHERE a.id = #{id}
+    </select>
+    <delete id="deleteByProductId">
+        delete
+        from cm_svip_product_sku
+        where productId = #{productId}
+    </delete>
+
+    <insert id="insertSkuPrice">
+        insert into cm_svip_product_sku(skuId, productId, priceType, discount, discountPrice)
+        values (#{skuId}, #{productId}, #{priceType}, #{discount}, #{discountPrice})
+    </insert>
+    <insert id="insertCmSvipProduct" parameterType="com.caimei365.manager.entity.caimei.svip.CmSvipProduct" keyProperty="id" useGeneratedKeys="true">
+        INSERT INTO cm_svip_product(productId,
+                                    sort,
+                                    addTime,
+                                    status)
+        VALUES (#{productId},
+                #{sort},
+                now(),
+                #{status})
+    </insert>
+    <update id="updateCmSvipProduct">
+        UPDATE cm_svip_product
+        SET sort   = #{sort},
+            status = #{status}
+        WHERE id = #{id}
+    </update>
+
+    <select id="getAdsImage" resultType="com.caimei365.manager.entity.caimei.svip.CmSvipProductAdsImage">
+        select id, pcImage, appletsImage
+        from cm_svip_product_adsimage
+        limit 1
+    </select>
+    <select id="getAllUseDateList" resultType="java.lang.String">
+        SELECT DISTINCT useTime FROM cm_svip_coupon_month WHERE delFlag='0'
+    </select>
 
     <select id="findSku" resultType="com.caimei365.manager.entity.caimei.svip.CmSku">
         select price, costPrice, costCheckFlag, costProportional, normalPrice