Ver Fonte

超级会员优惠商品1

Aslee há 3 anos atrás
pai
commit
598a69481d

+ 10 - 0
src/main/java/com/caimei/modules/bulkpurchase/entity/CmClub.java

@@ -99,6 +99,8 @@ public class CmClub extends DataEntity<CmClub> {
 	private String city; // 市
 	private String province; //省
 
+	private Integer svipFlag;	//超级会员标识:1是,2不是
+
 
 	public CmClub() {
 		super();
@@ -745,4 +747,12 @@ public class CmClub extends DataEntity<CmClub> {
 	public void setAbleUserMoney(Double ableUserMoney) {
 		this.ableUserMoney = ableUserMoney;
 	}
+
+	public Integer getSvipFlag() {
+		return svipFlag;
+	}
+
+	public void setSvipFlag(Integer svipFlag) {
+		this.svipFlag = svipFlag;
+	}
 }

+ 9 - 0
src/main/java/com/caimei/modules/order/entity/OrderUserInfo.java

@@ -27,6 +27,7 @@ public class OrderUserInfo extends DataEntity<OrderUserInfo> {
 	private String address;		// 收货地址
 	private Double userMoney;	//账户余额
 	private Double ableUserMoney;	//可用余额
+	private Integer svipFlag;	//超级会员标识:1是,2不是
 
 	public OrderUserInfo() {
 		super();
@@ -158,4 +159,12 @@ public class OrderUserInfo extends DataEntity<OrderUserInfo> {
 	public void setAbleUserMoney(Double ableUserMoney) {
 		this.ableUserMoney = ableUserMoney;
 	}
+
+	public Integer getSvipFlag() {
+		return svipFlag;
+	}
+
+	public void setSvipFlag(Integer svipFlag) {
+		this.svipFlag = svipFlag;
+	}
 }

+ 5 - 0
src/main/java/com/caimei/modules/svip/dao/CmSvipProductDao.java

@@ -1,6 +1,7 @@
 package com.caimei.modules.svip.dao;
 
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import com.caimei.modules.svip.entity.CmSvipProduct;
@@ -21,4 +22,8 @@ public interface CmSvipProductDao extends CrudDao<CmSvipProduct> {
     List<Product> findAllProduct(Product product);
 
     void saveSort(@Param("sort") String sort, @Param("id") String id);
+
+    CmSvipProductAdsImage getAdsImage();
+
+    void saveAdsImage(CmSvipProductAdsImage adsImage);
 }

+ 43 - 0
src/main/java/com/caimei/modules/svip/entity/CmSvipProductAdsImage.java

@@ -0,0 +1,43 @@
+package com.caimei.modules.svip.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 超级会员优惠商品Entity
+ * @author Aslee
+ * @version 2021-09-23
+ */
+public class CmSvipProductAdsImage extends DataEntity<CmSvipProductAdsImage> {
+
+	private static final long serialVersionUID = 1L;
+	private String pcImage;
+	private String appletsImage;
+
+	public CmSvipProductAdsImage() {
+		super();
+	}
+
+	public CmSvipProductAdsImage(String id){
+		super(id);
+	}
+
+	public String getPcImage() {
+		return pcImage;
+	}
+
+	public void setPcImage(String pcImage) {
+		this.pcImage = pcImage;
+	}
+
+	public String getAppletsImage() {
+		return appletsImage;
+	}
+
+	public void setAppletsImage(String appletsImage) {
+		this.appletsImage = appletsImage;
+	}
+}

+ 11 - 0
src/main/java/com/caimei/modules/svip/service/CmSvipProductService.java

@@ -1,8 +1,10 @@
 package com.caimei.modules.svip.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
 import com.caimei.utils.AppUtils;
 import com.caimei.utils.StringUtil;
 import com.thinkgem.jeesite.common.config.Global;
@@ -86,4 +88,13 @@ public class CmSvipProductService extends CrudService<CmSvipProductDao, CmSvipPr
 	public void saveSort(String sort, String id) {
 		cmSvipProductDao.saveSort(sort, id);
 	}
+
+	public CmSvipProductAdsImage getAdsImage() {
+		return cmSvipProductDao.getAdsImage();
+	}
+
+	@Transactional(readOnly = false)
+	public void saveAdsImage(CmSvipProductAdsImage adsImage) {
+		cmSvipProductDao.saveAdsImage(adsImage);
+	}
 }

+ 28 - 0
src/main/java/com/caimei/modules/svip/web/CmSvipProductController.java

@@ -3,7 +3,10 @@ package com.caimei.modules.svip.web;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.caimei.modules.live.entity.NewPageLiveAdvertisingImage;
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
+import com.caimei.utils.MathUtil;
 import com.google.common.collect.Maps;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +64,10 @@ public class CmSvipProductController extends BaseController {
 	@RequestMapping(value = "form")
 	public String form(CmSvipProduct cmSvipProduct, Model model) {
 		model.addAttribute("cmSvipProduct", cmSvipProduct);
+		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 "modules/svip/cmSvipProductForm";
 	}
 
@@ -131,4 +138,25 @@ public class CmSvipProductController extends BaseController {
 			return map;
 		}
 	}
+
+	@RequestMapping(value = "adsImageForm")
+	public String adsImageForm(Model model){
+		CmSvipProductAdsImage cmSvipProductAdsImage = cmSvipProductService.getAdsImage();
+		model.addAttribute("adsImage", cmSvipProductAdsImage);
+		return "modules/svip/cmSvipProductAdsImageForm";
+	}
+
+	@RequestMapping(value = "saveAdsImage")
+	public String saveAdsImage(CmSvipProductAdsImage adsImage, Model model, RedirectAttributes redirectAttributes) {
+		if (StringUtils.isEmpty(adsImage.getPcImage())) {
+			model.addAttribute("errorMsg", "请上传PC端宣传图");
+			return adsImageForm(model);
+		} else if (StringUtils.isEmpty(adsImage.getAppletsImage())) {
+			model.addAttribute("errorMsg", "请上传小程序端宣传图");
+			return adsImageForm(model);
+		}
+		cmSvipProductService.saveAdsImage(adsImage);
+		addMessage(redirectAttributes, "保存成功");
+		return "redirect:"+Global.getAdminPath()+"/svip/cmSvipProduct/?repage";
+	}
 }

+ 4 - 2
src/main/resources/mappings/modules/bulkpurchase/CmClubMapper.xml

@@ -128,13 +128,15 @@
 
     <select id="findList" resultType="CmClub">
 		SELECT
-		 <include refid="cmClubColumns"/>
-		,d.name province,c.name city,b.name town,f.userMoney userMoney,f.ableUserMoney ableUserMoney
+		<include refid="cmClubColumns"/>
+		,d.name province,c.name city,b.name town,f.userMoney userMoney,f.ableUserMoney ableUserMoney,
+		if(csu.id is not null,1,0) as svipFlag
 		FROM club a
 		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
 		LEFT JOIN user f on a.userID = f.userID
+		LEFT JOIN cm_svip_user csu on a.userID = csu.userId and now() <![CDATA[ < ]]> csu.endTime and csu.delFlag = '0'
 		<where>
 
             <if test="id != null and id != ''">

+ 2 - 1
src/main/resources/mappings/modules/order/OrderUserInfoMapper.xml

@@ -21,10 +21,11 @@
 
     <select id="findByOrderID" resultType="OrderUserInfo">
         SELECT <include refid="columns"/>,
-			c.userMoney as userMoney,c.ableUserMoney as ableUserMoney
+			c.userMoney as userMoney,c.ableUserMoney as ableUserMoney,if(csu.id is not null,1,0) as svipFlag
         FROM bp_order_userinfo a
 		LEFT JOIN cm_order b on a.orderId = b.orderID
 		LEFT JOIN user c on b.userID = c.userID
+		LEFT JOIN cm_svip_user csu on a.userID = csu.userId and now() <![CDATA[ < ]]> csu.endTime and csu.delFlag = '0'
 		WHERE a.orderId = #{orderID}
     </select>
 

+ 14 - 1
src/main/resources/mappings/modules/svip/CmSvipProductMapper.xml

@@ -88,6 +88,10 @@
         FROM product a
         LEFT JOIN shop s on s.shopID = a.shopID
         <where>
+            a.validFlag = '2' and a.productID not in (
+            select productId from cm_promotions_product cpp left join
+            cm_promotions cp on cpp.promotionsId = cp.id where cp.delFlag != '2')
+            and a.ladderPriceFlag = '0' and price1TextFlag != '1'
             <if test="productID != null">
                 AND a.productID = #{productID}
             </if>
@@ -113,6 +117,9 @@
             </otherwise>
         </choose>
     </select>
+    <select id="getAdsImage" resultType="com.caimei.modules.svip.entity.CmSvipProductAdsImage">
+        select id,pcImage,appletsImage from cm_svip_product_adsimage limit 1
+    </select>
 
     <insert id="insert" parameterType="CmSvipProduct" keyProperty="id" useGeneratedKeys="true">
         INSERT INTO cm_svip_product(productId,
@@ -142,8 +149,14 @@
 			sort = #{sort}
 		WHERE id = #{id}
 	</update>
+    <update id="saveAdsImage">
+        update cm_svip_product_adsimage
+        set pcImage      = #{pcImage},
+            appletsImage = #{appletsImage}
+        where id = 1
+    </update>
 
-	<delete id="delete">
+    <delete id="delete">
         DELETE
         FROM cm_svip_product
         WHERE id = #{id}

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/bulkpurchase/cmClubListBox.jsp

@@ -67,7 +67,7 @@
 					${cmClub.id}
 				</td>
 				<td>
-					${cmClub.name}
+					${cmClub.name}<font color="red" style="margin-left: 10px">${cmClub.svipFlag eq 1?'(超级会员)':''}</font>
 				</td>
 					<td style="display: none"> ${cmClub.defaultAddress.postalCode}</td>
 				<td style="display: none">${cmClub.defaultAddress.address}</td>

+ 2 - 2
src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp

@@ -187,8 +187,8 @@
                 </c:if>
             </td>
         </c:if>
-        <td>机构:${order.buyer}<c:if test="${order.organizeID >= 3}"><label style="margin-left: 20px">门店:${order.organizeStoreName}</label> </c:if></td>
-
+        <td>机构:${order.buyer}<font id="svipFlagLabel" style="margin-left:10px" color="red">${order.bpOrderUserinfo.svipFlag eq 1?'(超级会员)':''}</font>
+            <c:if test="${order.organizeID >= 3}"><label style="margin-left: 20px">门店:${order.organizeStoreName}</label> </c:if></td>
         <td>收货人: ${order.bpOrderUserinfo.shouHuoRen}</td>
     </tr>
     <tr>

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/order/orderForm.jsp

@@ -76,7 +76,7 @@
       <tr>
         <td>买家</td>
         <td>
-          <form:input path="bpOrderUserinfo.name" readonly="true" cssClass="input-xlarge" />
+          <form:input path="bpOrderUserinfo.name" readonly="true" cssClass="input-xlarge" /><font id="svipFlagLabel" style="margin-left:10px" color="red">${newOrder.bpOrderUserinfo.svipFlag eq 1?'(超级会员)':''}</font>
         </td>
         <td>收货人
           <span class="help-inline">

+ 195 - 0
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductAdsImageForm.jsp

@@ -0,0 +1,195 @@
+<%@ 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>
+		.iconBox{
+			font-size: 0;
+		}
+		.controls .conList{
+			display: inline-block;
+			margin-right: 15px;
+		}
+		.conList .btn:nth-of-type(1){
+			margin-left: 25px;
+		}
+		.select2-choice{
+			width: 100px;
+		}
+		.upload-content {
+			margin-top: -70px;
+		}
+		.upload-content .conList .btn:nth-of-type(1) {
+            width: 90px;
+            height: 100px;
+            border: 2px solid #eee;
+            background: #fff;
+            position: relative;
+        }
+		.upload-content .conList .btn:nth-of-type(1)>div {
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+			color: #666;
+		}
+		.upload-content .conList .btn:nth-of-type(1) span {
+			font-size: 35px;
+		}
+		.upload-content .conList .btn:nth-of-type(1) h5 {
+			color: #666;
+		}
+		.cancel-upload {
+			background: transparent;
+			border: none;
+			box-shadow: none;
+			position: relative;
+			top: -38px;
+			left: -25px;
+			cursor: pointer;
+			z-index: 100;
+		}
+		 .upload-content .conList ol li {
+            width: 114px;
+            min-height: 80px;
+            text-align: center;
+            background: #fff;
+            position: relative;
+            top: 120px;
+            margin-left: 2px;
+        }
+		.hide-pic {
+			display: none !important;
+		}
+	</style>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					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);
+					}
+				}
+			});
+		});
+
+
+		//错误提示
+		var errorMsg  = "${errorMsg}";
+		if(errorMsg){
+			alertx(errorMsg);
+		}
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
+		<li class="active"><a href="${ctx}/svip/cmSvipProduct/adsImageForm">宣传图</a></li>
+	</ul><br/>
+	<form:form id="inputForm" modelAttribute="adsImage" action="${ctx}/svip/cmSvipProduct/saveAdsImage" method="post" class="form-horizontal">
+<%--		<form:hidden path="id"/>--%>
+		<sys:message content="${message}"/>
+		<div class="control-group iconBox">
+			<label class="control-label"><font color="red">*</font>PC端宣传图:</label>
+			<div class="controls upload-content" id="pcImageBox">
+				<div class="conList">
+					<form:hidden id="pcImage" path="pcImage" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+					<sys:ckfinder input="pcImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率750px*750px</label>
+				</div>
+			</div>
+		</div>
+		<div class="control-group iconBox">
+			<label class="control-label"><font color="red">*</font>小程序端宣传图:</label>
+			<div class="controls upload-content" id="appletsImageBox">
+				<div class="conList">
+					<form:hidden id="appletsImage" path="appletsImage" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+					<sys:ckfinder input="appletsImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率750px*750px</label>
+				</div>
+			</div>
+		</div>
+		<div class="form-actions">
+			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
+			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+		</div>
+	</form:form>
+	<script>
+		$(function () {
+			$('.upload-content .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');
+			$('.upload-content .conList .btn:nth-of-type(2)').after('<img class="cancel-upload" src="/static/images/close-btn1.png">').remove();
+			$('.upload-content .conList').find('.cancel-upload').hide();
+			var observeEle = document.getElementsByClassName('upload-content')[0];
+			var observeEle1 = document.getElementsByClassName('upload-content')[1];
+			var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
+			var MutationObserverConfig = {
+				childList: true,
+				subtree: true,
+				characterData: true
+			};
+			var observer = new MutationObserver(function (mutations) {
+				$.each(mutations, function (index, item) {
+					if (item.type === 'childList') {
+						// 在创建新的 element 时调用
+						var target = $(item.target),
+								thisWrapper = target.closest('.conList'),
+								nextEle = thisWrapper.next();
+						thisWrapper.find('li').css('z-index', 99);
+						thisWrapper.find('.cancel-upload').show();
+						if (nextEle.hasClass('hide-pic')) {
+							nextEle.removeClass('hide-pic');
+						}
+					}
+				})
+			});
+			observer.observe(observeEle, MutationObserverConfig);
+			observer.observe(observeEle1, MutationObserverConfig);
+
+			$('body').on('click', '.cancel-upload', function () {
+				var wrapper = $(this).closest('.conList');
+				wrapper.find('li').css('z-index', '-1');
+				wrapper.find('input').val('');
+				$(this).hide();
+				wrapper.removeClass("hide-pic");
+				wrapper.parent().append(wrapper.clone());
+				wrapper.remove();
+				$(".conList").each(function (i, ele) {
+					if ($(ele).find("input.input-xlarge").val()) {
+						$(ele).next().removeClass("hide-pic")
+					}
+				})
+			});
+			$(window).on("load", function () {
+				setTimeout(function () {
+					$("#pcImageBox").find("input.input-xlarge").each(function (i, ele) {
+						if ($(ele).val()) {
+							$(ele).next().find("li").css("z-index", "99");
+							$(ele).parents(".conList").find(".cancel-upload").show();
+							$(ele).parents(".conList").next().removeClass("hide-pic")
+						}
+					})
+					$("#appletsImageBox").find("input.input-xlarge").each(function (i, ele) {
+						if ($(ele).val()) {
+							$(ele).next().find("li").css("z-index", "99");
+							$(ele).parents(".conList").find(".cancel-upload").show();
+							$(ele).parents(".conList").next().removeClass("hide-pic")
+						}
+					})
+				}, 200);
+			});
+		});
+	</script>
+</body>
+</html>

+ 11 - 2
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductForm.jsp

@@ -33,7 +33,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
-		<li class="active"><a href="${ctx}/svip/cmSvipProduct/form?id=${cmSvipProduct.id}">商品<shiro:hasPermission name="svip:cmSvipProduct:edit">${not empty cmSvipProduct.id?'编辑':'添加'}</shiro:hasPermission><shiro:lacksPermission name="svip:cmSvipProduct:edit">查看</shiro:lacksPermission></a></li>
+		<li class="active"><a href="${ctx}/svip/cmSvipProduct/form?id=${cmSvipProduct.id}">商品${not empty cmSvipProduct.id?'编辑':'添加'}</a></li>
 	</ul><br/>
 	<form:form id="inputForm" modelAttribute="cmSvipProduct" action="${ctx}/svip/cmSvipProduct/save" method="post" class="form-horizontal">
 		<form:hidden path="id"/>
@@ -88,10 +88,19 @@
             </div>
 		</div>
 		<div class="control-group" style="display: ${cmSvipProduct.costCheckFlag eq '1'?'none':''}">
+			<label class="control-label">比例成本百分比:</label>
 			<div class="controls">
                 <label class="showLabel">${cmSvipProduct.costProportional}%</label>
             </div>
 		</div>
+		<div class="control-group">
+			<label class="control-label">成本价:</label>
+			<div class="controls">
+				<label class="showLabel">
+					<fmt:formatNumber value="${cmSvipProduct.costPrice}" type="number" pattern="#0.00"/>
+				</label>
+			</div>
+		</div>
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>会员价:</label>
 			<div class="controls">
@@ -112,7 +121,7 @@
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>排序值:</label>
 			<div class="controls">
-				<form:input path="sort" htmlEscape="false" class="input-xlarge required"/>
+				<form:input path="sort" htmlEscape="false" placeholder="请填写排序值" class="input-xlarge required"/>
 			</div>
 		</div>
 		<div class="form-actions">

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductList.jsp

@@ -37,7 +37,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li class="active"><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
-<%--		<shiro:hasPermission name="svip:cmSvipProduct:edit"><li><a href="${ctx}/svip/cmSvipProduct/form">商品添加</a></li></shiro:hasPermission>--%>
+		<li><a href="${ctx}/svip/cmSvipProduct/adsImageForm">宣传图</a></li>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmSvipProduct" action="${ctx}/svip/cmSvipProduct/" method="post" class="breadcrumb form-search">
 		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>

+ 1 - 0
src/main/webapp/static/modules/bulkpurchase/orderForm.js

@@ -298,6 +298,7 @@ function setSingleSelect(items) {
     $("#inputForm").find("[name*='bpOrderUserinfo.shouHuoRen']").val(info.linkMan1);
     $("#inputForm").find("[name*='bpOrderUserinfo.phonee']").val(info.contractPhone1);
     $("#inputForm").find("[name*='bpOrderUserinfo.mobile']").val(info.contractMobile1);
+    $("#svipFlagLabel").text(1 == info.svipFlag ? '(超级会员)' : '');
     $("#availableBalance").html(info.ableUserMoney);
 
     //设置添加商品可见(会所添加添加运费订单公用此方法但是添加运费订单不需要添加商品)