Procházet zdrojové kódy

Merge remote-tracking branch 'origin/developer' into developerC

zhijiezhao před 3 roky
rodič
revize
6f99314b9b

+ 9 - 0
src/main/java/com/caimei/modules/hehe/dao/CmHeheCollageDao.java

@@ -4,6 +4,7 @@ import com.caimei.modules.hehe.entity.CmHeheCollageMember;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import com.caimei.modules.hehe.entity.CmHeheCollage;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,4 +19,12 @@ public interface CmHeheCollageDao extends CrudDao<CmHeheCollage> {
     List<Integer> getCollageOrderIds(String collageId);
 
     List<CmHeheCollageMember> findMemberList(CmHeheCollageMember cmHeheCollageMember);
+
+    void completeCollage(String collageId);
+
+    List<Integer> findNoPayCollageOrderIds(String collageId);
+
+    void cancelOrder(@Param("orderId") Integer orderId, @Param("reason") String reason);
+
+    List<String> getMobilesByCollageId(String collageId);
 }

+ 17 - 0
src/main/java/com/caimei/modules/hehe/service/CmHeheCollageService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.caimei.modules.hehe.dao.CmHeheCollageProductDao;
 import com.caimei.modules.hehe.entity.CmHeheCollageMember;
+import com.caimei.modules.sys.utils.SMSUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -59,4 +60,20 @@ public class CmHeheCollageService extends CrudService<CmHeheCollageDao, CmHeheCo
 		memberPage.setList(cmHeheCollageDao.findMemberList(cmHeheCollageMember));
 		return memberPage;
 	}
+
+	@Transactional(readOnly = false)
+    public void complete(CmHeheCollage cmHeheCollage) {
+		// 一键成团
+		String collageId = cmHeheCollage.getId();
+		cmHeheCollageDao.completeCollage(collageId);
+		// 已支付订单手机号
+		List<String> mobileList = cmHeheCollageDao.getMobilesByCollageId(collageId);
+		// 拼团成功短信推送
+		mobileList.forEach(mobile-> SMSUtils.sendSms(mobile, "您的商品已拼团成功,请赶紧登录呵呵商城小程序查看订单吧。"));
+		// 关闭其它未支付拼团订单
+		List<Integer> orderIdList = cmHeheCollageDao.findNoPayCollageOrderIds(collageId);
+		orderIdList.forEach(noPayOrderId->{
+			cmHeheCollageDao.cancelOrder(noPayOrderId, "拼团自动完成关闭其它未支付拼团订单");
+		});
+    }
 }

+ 8 - 0
src/main/java/com/caimei/modules/hehe/web/CmHeheCollageController.java

@@ -82,4 +82,12 @@ public class CmHeheCollageController extends BaseController {
 		return "modules/hehe/cmHeheCollageMemberList";
 	}
 
+	@RequestMapping(value = "complete")
+	public String completeCollage(CmHeheCollage cmHeheCollage, RedirectAttributes redirectAttributes) {
+		cmHeheCollageService.complete(cmHeheCollage);
+		addMessage(redirectAttributes, "一键拼团成功");
+		return "redirect:" + Global.getAdminPath() + "/hehe/cmHeheCollage/?repage";
+	}
+
+
 }

+ 18 - 0
src/main/java/com/caimei/modules/info/entity/Info.java

@@ -38,6 +38,8 @@ public class Info extends DataEntity<Info> {
 	private String topFlag;	//虚拟字段,是否置顶标识:0否,1是
 
 	private String shopName;	// 供应商名称
+	private String startPubDate;		// 发布时间
+	private String endPubDate;		// 发布时间
 
 	public Info() {
 		super();
@@ -247,4 +249,20 @@ public class Info extends DataEntity<Info> {
 	public void setFailReason(String failReason) {
 		this.failReason = failReason;
 	}
+
+	public String getStartPubDate() {
+		return startPubDate;
+	}
+
+	public void setStartPubDate(String startPubDate) {
+		this.startPubDate = startPubDate;
+	}
+
+	public String getEndPubDate() {
+		return endPubDate;
+	}
+
+	public void setEndPubDate(String endPubDate) {
+		this.endPubDate = endPubDate;
+	}
 }

+ 8 - 0
src/main/java/com/caimei/modules/info/web/InfoController.java

@@ -70,6 +70,14 @@ public class InfoController extends BaseController {
 	@RequiresPermissions("info:info:view")
 	@RequestMapping(value = {"list", ""})
 	public String list(Info info, HttpServletRequest request, HttpServletResponse response, Model model) {
+		if (null != info.getStartPubDate() && !"".equals(info.getStartPubDate()) && !info.getStartPubDate().endsWith("00:00:00")) {
+			model.addAttribute("startConfirmTime", info.getStartPubDate());
+			info.setStartPubDate(info.getStartPubDate().trim() + " 00:00:00");
+		}
+		if (null != info.getEndPubDate() && !"".equals(info.getEndPubDate()) && !info.getEndPubDate().endsWith("23:59:59")) {
+			model.addAttribute("endConfirmTime", info.getEndPubDate());
+			info.setEndPubDate(info.getEndPubDate().trim() + " 23:59:59");
+		}
 		Page<Info> page = infoService.findPage(new Page<Info>(request, response), info);
 		List<Info> list = page.getList();
 		if(CollectionUtils.isNotEmpty(list)){

+ 33 - 4
src/main/resources/mappings/modules/hehe/CmHeheCollageMapper.xml

@@ -35,7 +35,7 @@
 		FROM cm_hehe_collage a
 		<include refid="cmHeheCollageJoins"/>
 		<where>
-			a.status != 0
+			a.status != 0 and a.status != 3
 			<if test="id != null and id != ''">
 				AND a.id = #{id}
 			</if>
@@ -97,6 +97,16 @@
 		</if>
 		order by cm.id
 	</select>
+	<select id="findNoPayCollageOrderIds" resultType="java.lang.Integer">
+		select co.orderID from cm_hehe_collage_member chcm left join cm_order co on chcm.orderId = co.orderID
+		where co.receiptStatus = 1 and chcm.collageId = #{collageId}
+	</select>
+	<select id="getMobilesByCollageId" resultType="java.lang.String">
+		select chu.mobile from cm_hehe_collage_member chcm
+								   left join cm_order co on chcm.orderId = co.orderID
+								   left join cm_hehe_user chu on chcm.userId = chu.userId
+		where collageId = #{collageId} and co.receiptStatus = 3
+	</select>
 
 	<insert id="insert" parameterType="CmHeheCollage"  keyProperty="id" useGeneratedKeys="true">
 		INSERT INTO cm_hehe_collage(
@@ -114,10 +124,29 @@
 			price = #{price}
 		WHERE id = #{id}
 	</update>
-	
-	<delete id="delete">
+    <update id="completeCollage">
+		update cm_hehe_collage
+		set status       = 2,
+			completeTime = NOW(),
+			remarks      = '后台一键完成拼团'
+		where id = #{collageId}
+	</update>
+
+    <delete id="delete">
 		DELETE FROM cm_hehe_collage
 		WHERE id = #{id}
 	</delete>
-	
+
+	<delete id="cancelOrder">
+		UPDATE
+			cm_order
+		SET
+			STATUS = 6,
+			updateDate = NOW(),
+			closeReason = #{reason},
+			closeTime = NOW()
+		WHERE
+			orderID = #{orderId}
+	</delete>
+
 </mapper>

+ 6 - 0
src/main/resources/mappings/modules/info/InfoMapper.xml

@@ -112,6 +112,12 @@
 			</if>
 			<if test="shopName != null and shopName != ''">
 				AND s.name LIKE concat('%',#{shopName},'%')
+			</if>
+			<if test="startPubDate != null and startPubDate != ''">
+				AND a.pubdate <![CDATA[  >=  ]]> #{startPubDate}
+			</if>
+			<if test="endPubDate != null and endPubDate != ''">
+				AND a.pubdate <![CDATA[   <=  ]]> #{endPubDate}
 			</if>
 				<!--  AND b.enabledStatus='1' -->
 		</where>

+ 74 - 125
src/main/webapp/WEB-INF/views/modules/baike/cmBaikeProductForm.jsp

@@ -154,57 +154,6 @@
 			//$("#name").focus();
 			$("#inputForm").validate({
 				submitHandler: function(form){
-					var commodityType = '${commodityType}';
-					var mainImage = $("#image").val();
-					var authImage0 = $("#authImage0").val() == undefined?'':$("#authImage0").val();
-					var displayImage0 = $("#displayImage0").val() == undefined?'':$("#authImage0").val();
-					if (mainImage === '') {
-						alertx("请上传" + commodityType + "图片");
-						return false;
-					}
-					if (authImage0 === '' ) {
-						alertx("请上传" + commodityType + "认证图片");
-						return false;
-					}
-					if (displayImage0 === '') {
-						alertx("请上传" + commodityType + "效果展示图片");
-						return false;
-					}
-					var discription = $("#discription").val().trim();
-					var advantage = $("#advantage").val().trim();
-					var disadvantage = $("#disadvantage").val().trim();
-					var principle = $("#principle").val().trim();
-					var adaptiveMan = $("#adaptiveMan").val().trim();
-					var unAdaptiveMan = $("#unAdaptiveMan").val().trim();
-					var aroundOperation = $("#aroundOperation").val().trim();
-					if (discription === '') {
-						alertx("请输入" + commodityType + "概述");
-						return false;
-					}
-					if (advantage === '') {
-						alertx("请输入" + commodityType + "优点");
-						return false;
-					}
-					if (disadvantage === '') {
-						alertx("请输入" + commodityType + "缺点");
-						return false;
-					}
-					if (principle === '') {
-						alertx("请输入" + commodityType + "原理");
-						return false;
-					}
-					if (adaptiveMan === '') {
-						alertx("请输入适应人群");
-						return false;
-					}
-					if (unAdaptiveMan === '') {
-						alertx("请输入不适应人群");
-						return false;
-					}
-					if (aroundOperation === '') {
-						alertx("请输入术前术后");
-						return false;
-					}
 					loading('正在提交,请稍等...');
 					form.submit();
 				},
@@ -231,38 +180,38 @@
 		<form:hidden path="commodityType"/>
 		<sys:message content="${message}"/>
 		<div class="control-group">
-			<label class="control-label titleClass"><font color="red">*</font>${commodityType}简述</label>
+			<label class="control-label titleClass">${commodityType}简述</label>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>${commodityType}名称:</label>
+			<label class="control-label">${commodityType}名称:</label>
 			<div class="controls">
-				<form:input path="name" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
+				<form:input path="name" htmlEscape="false" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>${commodityType}别名:</label>
+			<label class="control-label">${commodityType}别名:</label>
 			<div class="controls">
-				<form:input path="alias" htmlEscape="false" maxlength="50" class="input-xlarge required" placeholder="输入英文名或者其他名称"/>
+				<form:input path="alias" htmlEscape="false" class="input-xlarge " placeholder="输入英文名或者其他名称"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>${commodityType}概述:</label>
+			<label class="control-label">${commodityType}概述:</label>
 			<div class="controls" style="width:812px">
-                <textarea type="text" name="discription" style="position: relative;height: 100px; width: 450px;" maxlength="300" required >${cmBaikeProduct.discription}</textarea>
+                <textarea type="text" id="discription" name="discription" style="position: relative;height: 100px; width: 450px;"  >${cmBaikeProduct.discription}</textarea>
             </div>
 		</div>
         <div class="control-group">
             <label class="control-label">SEO关键词:</label>
             <div class="controls">
-                <form:input path="seoKeyword" htmlEscape="false" style="position: relative" maxlength="50" class="input-xlarge"/>
+                <form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
             </div>
         </div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>${commodityType}图片:</label>
+			<label class="control-label">${commodityType}图片:</label>
             <div class="main-image-list" style="display: flex;flex-wrap: wrap">
                 <div class="controls upload-content iconBox mainImageBox" id="mainImageBox">
                     <div class="conList">
-                        <form:hidden id="image" path="image" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+                        <form:hidden id="image" path="image" htmlEscape="false" maxlength="255" class="input-xlarge "/>
                         <sys:ckfinder input="image" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
                                       maxHeight="100"/>
                         <br>
@@ -286,7 +235,7 @@
 				<div class="auth-qrCode-list" style="display: flex;flex-wrap: wrap">
 					<div class="controls upload-content iconBox authQrCodeBox" id="authQrCodeBox">
 						<div class="conList">
-							<form:hidden id="authQrCode" path="authQrCode" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+							<form:hidden id="authQrCode" path="authQrCode" htmlEscape="false" maxlength="255" class="input-xlarge "/>
 							<sys:ckfinder input="authQrCode" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
 										  maxHeight="100"/>
 							<br>
@@ -297,117 +246,117 @@
 			</div>
         </div>
 		<div class="control-group paramList">
-			<label class="control-label titleClass"><font color="red">*</font>${commodityType}参数</label>
+			<label class="control-label titleClass">${commodityType}参数</label>
 			<button class="btn btn-primary" type="button" style="margin-left: 500px" onclick="addParam()">添加参数</button>
 			<div class="controls paramRow" id="paramRow0">
-				<input name="paramList[0].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[0].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:型号">
-				<input name="paramList[0].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[0].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 			</div>
 			<div class="controls paramRow" id="paramRow1">
-				<input name="paramList[1].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[1].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:性质类型">
-				<input name="paramList[1].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[1].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 				<a onclick="deleteParam(1)" style="cursor: pointer">删除</a>
 			</div>
 			<div class="controls paramRow" id="paramRow2">
-				<input name="paramList[2].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[2].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:成分">
-				<input name="paramList[2].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[2].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 				<a onclick="deleteParam(2)" style="cursor: pointer">删除</a>
 			</div>
 			<div class="controls paramRow" id="paramRow3">
-				<input name="paramList[3].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[3].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:规格">
-				<input name="paramList[3].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[3].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 				<a onclick="deleteParam(3)" style="cursor: pointer">删除</a>
 			</div>
 			<div class="controls paramRow" id="paramRow4">
-				<input name="paramList[4].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[4].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:性质类型">
-				<input name="paramList[4].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[4].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 				<a onclick="deleteParam(4)" style="cursor: pointer">删除</a>
 			</div>
 			<div class="controls paramRow" id="paramRow5">
-				<input name="paramList[5].name" htmlEscape="false" class="input-small required" maxlength="15"
+				<input name="paramList[5].name" htmlEscape="false" class="input-small "
 					   placeholder="例如:性质类型">
-				<input name="paramList[5].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+				<input name="paramList[5].content" htmlEscape="false" class="input-xlarge "
 					   placeholder="输入参数信息">
 				<a onclick="deleteParam(5)" style="cursor: pointer">删除</a>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>${commodityType}优点:</label>
+			<label class="control-label keyClass">${commodityType}优点:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="advantage" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="advantage" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="advantageEditor" class="contentEditor">${cmBaikeProduct.advantage}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>${commodityType}缺点:</label>
+			<label class="control-label keyClass">${commodityType}缺点:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="disadvantage" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="disadvantage" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="disadvantageEditor" class="contentEditor">${cmBaikeProduct.disadvantage}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>${commodityType}原理:</label>
+			<label class="control-label keyClass">${commodityType}原理:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="principle" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="principle" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="principleEditor" class="contentEditor">${cmBaikeProduct.principle}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label titleClass"><font color="red">*</font>${commodityType}档案</label>
+			<label class="control-label titleClass">${commodityType}档案</label>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>品牌:</label>
+			<label class="control-label">品牌:</label>
 			<div class="controls">
-				<form:input path="brand" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
+				<form:input path="brand" htmlEscape="false" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>产地:</label>
+			<label class="control-label">产地:</label>
 			<div class="controls">
-				<form:input path="producePlace" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
+				<form:input path="producePlace" htmlEscape="false" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>上市时间:</label>
+			<label class="control-label">上市时间:</label>
 			<div class="controls">
-				<input name="marketTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate required"
+				<input name="marketTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
 					value="<fmt:formatDate value="${cmBaikeProduct.marketTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
 					onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label"><font color="red">*</font>公司/厂商:</label>
+			<label class="control-label">公司/厂商:</label>
 			<div class="controls">
-				<form:input path="company" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
+				<form:input path="company" htmlEscape="false" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group" style="position: relative">
-			<label class="control-label"><font color="red">*</font>NMPA认证时间:</label>
+			<label class="control-label">NMPA认证时间:</label>
 			<div class="controls">
-				<input name="nmpaTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate required"
+				<input name="nmpaTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
 					value="<fmt:formatDate value="${cmBaikeProduct.nmpaTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
 					onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
 			</div>
 		</div>
 		<div class="control-group" style="width: 1000px">
-			<label class="control-label keyClass"><font color="red">*</font>${commodityType}认证:</label>
+			<label class="control-label keyClass">${commodityType}认证:</label>
 			<div class="auth-image-list" style="display: flex;flex-wrap: wrap">
 				<c:forEach items="${cmBaikeProduct.authImageList}" var="authImage" varStatus="index">
 					<div class="controls upload-content iconBox" id="authImageBox${index.index}">
 						<div class="conList">
 							<form:hidden id="authImage${index.index}" path="authImageList[${index.index}]" htmlEscape="false"
 										 maxlength="255"
-										 class="input-xlarge required"/>
+										 class="input-xlarge "/>
 							<sys:ckfinder input="authImage${index.index}" type="images" uploadPath="/photo"
 										  selectMultiple="false"
 										  maxWidth="100" maxHeight="100"/><br>
@@ -420,7 +369,7 @@
 						<div class="conList">
 							<form:hidden id="authImage${emptyIndex}" path="authImageList[${emptyIndex}]" htmlEscape="false"
 										 maxlength="255"
-										 class="input-xlarge required"/>
+										 class="input-xlarge "/>
 							<sys:ckfinder input="authImage${emptyIndex}" type="images" uploadPath="/photo"
 										  selectMultiple="false"
 										  maxWidth="100" maxHeight="100"/><br>
@@ -430,35 +379,35 @@
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>适应人群:</label>
+			<label class="control-label keyClass">适应人群:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="adaptiveMan" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="adaptiveMan" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="adaptiveManEditor" class="contentEditor">${cmBaikeProduct.adaptiveMan}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>不适应人群:</label>
+			<label class="control-label keyClass">不适应人群:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="unAdaptiveMan" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="unAdaptiveMan" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="unAdaptiveManEditor" class="contentEditor">${cmBaikeProduct.unAdaptiveMan}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>术前术后:</label>
+			<label class="control-label keyClass">术前术后:</label>
 			<div class="controls" style="width:812px">
-				<form:textarea path="aroundOperation" htmlEscape="false" class="input-xlarge required hide" />
+				<form:textarea path="aroundOperation" htmlEscape="false" class="input-xlarge  hide" />
 				<div id="aroundOperationEditor" class="contentEditor">${cmBaikeProduct.aroundOperation}</div>
 			</div>
 		</div>
 		<div class="control-group" style="width: 1000px">
-			<label class="control-label keyClass"><font color="red">*</font>效果展示:</label>
+			<label class="control-label keyClass">效果展示:</label>
 			<div class="display-image-list" style="display: flex;flex-wrap: wrap">
 				<c:forEach items="${cmBaikeProduct.displayImageList}" var="displayImage" varStatus="index">
 					<div class="controls upload-content iconBox" id="displayImageBox${index.index}">
 						<div class="conList">
 							<form:hidden id="displayImage${index.index}" path="displayImageList[${index.index}]" htmlEscape="false"
 										 maxlength="255"
-										 class="input-xlarge required"/>
+										 class="input-xlarge "/>
 							<sys:ckfinder input="displayImage${index.index}" type="images" uploadPath="/photo"
 										  selectMultiple="false"
 										  maxWidth="100" maxHeight="100"/><br>
@@ -471,7 +420,7 @@
 						<div class="conList">
 							<form:hidden id="displayImage${emptyIndex}" path="displayImageList[${emptyIndex}]" htmlEscape="false"
 										 maxlength="255"
-										 class="input-xlarge required"/>
+										 class="input-xlarge "/>
 							<sys:ckfinder input="displayImage${emptyIndex}" type="images" uploadPath="/photo"
 										  selectMultiple="false"
 										  maxWidth="100" maxHeight="100"/><br>
@@ -482,48 +431,48 @@
 		</div>
         <div class="questionList">
             <div class="control-group">
-                <label class="control-label keyClass"><font color="red">*</font>常见问题:</label>
+                <label class="control-label keyClass">常见问题:</label>
                 <button class="btn btn-primary" type="button" style="margin-left: 500px" onclick="addQuestion()">添加问题</button>
             </div>
             <div class="control-group" id="questionRow0">
-                <label class="control-label"><font color="red">*</font>问题1:</label>
+                <label class="control-label">问题1:</label>
                 <div class="controls">
-                    <input name="questionList[0].question" style="width: 550px" htmlEscape="false" class="input-xlarge required" maxlength="150">
+                    <input name="questionList[0].question" style="width: 550px" htmlEscape="false" class="input-xlarge ">
                 </div>
             </div>
             <div class="control-group" id="answerRow0">
-                <label class="control-label"><font color="red">*</font>答:</label>
+                <label class="control-label">答:</label>
                 <div class="controls">
-                    <input name="questionList[0].answer" style="width: 550px" htmlEscape="false" class="input-xlarge required" maxlength="150">
+                    <input name="questionList[0].answer" style="width: 550px" htmlEscape="false" class="input-xlarge ">
                 </div>
             </div>
             <div class="control-group" id="questionRow1">
-                <label class="control-label"><font color="red">*</font>问题2:</label>
+                <label class="control-label">问题2:</label>
                 <div class="controls">
-                    <input name="questionList[1].question" style="width: 550px" htmlEscape="false" class="input-xlarge required questionInput" maxlength="150">
+                    <input name="questionList[1].question" style="width: 550px" htmlEscape="false" class="input-xlarge  questionInput">
                     <a id="questionDelBtn1" onclick="deleteQuestion(1)" style="cursor: pointer">删除</a>
                 </div>
             </div>
             <div class="control-group" id="answerRow1">
-                <label class="control-label"><font color="red">*</font>答:</label>
+                <label class="control-label">答:</label>
                 <div class="controls">
-                    <input name="questionList[1].answer" style="width: 550px" htmlEscape="false" class="input-xlarge required questionInput" maxlength="150">
+                    <input name="questionList[1].answer" style="width: 550px" htmlEscape="false" class="input-xlarge  questionInput">
                 </div>
             </div>
         </div>
 
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>发布时间:</label>
+			<label class="control-label keyClass">发布时间:</label>
 			<div class="controls">
-				<input name="publishTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate required"
+				<input name="publishTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
 					value="<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
 					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass"><font color="red">*</font>基础浏览量:</label>
+			<label class="control-label keyClass">基础浏览量:</label>
 			<div class="controls">
-				<form:input path="basePv" htmlEscape="false" onkeyup="onlynum(this)" class="input-xlarge  digits required"/>
+				<form:input path="basePv" htmlEscape="false" onkeyup="onlynum(this)" class="input-xlarge  digits "/>
 			</div>
 		</div>
 		<div class="control-group">
@@ -669,8 +618,8 @@
 			var index = 6;
 			while (index < paramListSize) {
 				$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + index + "\">\n" +
-						"\t\t\t\t<input name=\"paramList[" + index + "].name\" htmlEscape=\"false\" class=\"input-small required\" maxlength=\"15\" placeholder=\"参数名称\">\n" +
-						"\t\t\t\t<input name=\"paramList[" + index + "].content\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"50\" placeholder=\"输入参数信息\">\n" +
+						"\t\t\t\t<input name=\"paramList[" + index + "].name\" htmlEscape=\"false\" class=\"input-small \" placeholder=\"参数名称\">\n" +
+						"\t\t\t\t<input name=\"paramList[" + index + "].content\" htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"输入参数信息\">\n" +
 						"\t\t\t\t<a onclick=\"deleteParam(" + index + ")\" style=\"cursor: pointer\">删除</a>\n" +
 						"            </div>");
 				index = index + 1;
@@ -705,14 +654,14 @@
 						"<div class=\"control-group\" id=\"questionRow" + index + "\">\n" +
 						"                <label class=\"control-label\"><font color=\"red\">*</font>问题" + (index+1) + ":</label>\n" +
 						"                <div class=\"controls\">\n" +
-						"                    <input name=\"questionList[" + index + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+						"                    <input name=\"questionList[" + index + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
 						"\t\t\t\t<a id=\"questionDelBtn" + index + "\" onclick=\"deleteQuestion(" + index + ")\" style=\"cursor: pointer\">删除</a>\n" +
 						"                </div>\n" +
 						"            </div>\n" +
 						"            <div class=\"control-group\" id=\"answerRow" + index + "\">\n" +
 						"                <label class=\"control-label\"><font color=\"red\">*</font>答:</label>\n" +
 						"                <div class=\"controls\">\n" +
-						"                    <input name=\"questionList[" + index + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+						"                    <input name=\"questionList[" + index + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
 						"                </div>\n" +
 						"            </div>");
 				index = index + 1;
@@ -746,8 +695,8 @@
 	//添加参数
 	function addParam() {
 		$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + paramIndex + "\">\n" +
-				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].name\" htmlEscape=\"false\" class=\"input-small required\" maxlength=\"10\" placeholder=\"例如:性质类型\">\n" +
-				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].content\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"50\" placeholder=\"输入参数信息\">\n" +
+				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].name\" htmlEscape=\"false\" class=\"input-small \" placeholder=\"例如:性质类型\">\n" +
+				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].content\" htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"输入参数信息\">\n" +
 				"\t\t\t\t<a onclick=\"deleteParam(" + paramIndex + ")\" style=\"cursor: pointer\">删除</a>\n" +
 				"            </div>")
 		paramIndex = paramIndex + 1;
@@ -767,14 +716,14 @@
             "<div class=\"control-group\" id=\"questionRow" + questionIndex + "\">\n" +
             "                <label class=\"control-label\"><font color=\"red\">*</font>问题" + (questionIndex+1) + ":</label>\n" +
             "                <div class=\"controls\">\n" +
-            "                    <input name=\"questionList[" + questionIndex + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+            "                    <input name=\"questionList[" + questionIndex + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
             "\t\t\t\t<a id=\"questionDelBtn" + questionIndex + "\" onclick=\"deleteQuestion(" + questionIndex + ")\" style=\"cursor: pointer\">删除</a>\n" +
             "                </div>\n" +
             "            </div>\n" +
             "            <div class=\"control-group\" id=\"answerRow" + questionIndex + "\">\n" +
             "                <label class=\"control-label\"><font color=\"red\">*</font>答:</label>\n" +
             "                <div class=\"controls\">\n" +
-            "                    <input name=\"questionList[" + questionIndex + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+            "                    <input name=\"questionList[" + questionIndex + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
             "                </div>\n" +
             "            </div>")
         $("#questionDelBtn" + (questionIndex - 1)).attr("style", "display:none;cursor: pointer");

+ 3 - 0
src/main/webapp/WEB-INF/views/modules/hehe/cmHeheCollageList.jsp

@@ -112,6 +112,9 @@
 					</c:if>
 				</td>
 				<td>
+					<c:if test="${cmHeheCollage.status eq 1}">
+						<a href="${ctx}/hehe/cmHeheCollage/complete?id=${cmHeheCollage.id}">一键成团<a>
+					</c:if>
 					<a href="${ctx}/hehe/cmHeheCollage/memberList?collageId=${cmHeheCollage.id}">拼团成员</a>
 				</td>
 			</tr>

+ 8 - 0
src/main/webapp/WEB-INF/views/modules/info/infoList.jsp

@@ -185,6 +185,14 @@
 				<form:input path="title" htmlEscape="false" maxlength="100" class="input-medium"/>
 			 <label>发布人:</label>
 				<form:input path="publisher" htmlEscape="false" maxlength="50" class="input-medium"/>
+			 <label>发布时间:</label>
+				<form:input path="startPubDate" type="text" maxlength="10" class="input-medium Wdate"
+							value="${startPubDate}"
+							onclick="WdatePicker({dateFmt:'yyyy-MM-dd ',isShowClear:false});"/>
+				至
+				<form:input path="endPubDate" type="text" maxlength="10" class="input-medium Wdate"
+							value="${startPubDate}"
+							onclick="WdatePicker({dateFmt:'yyyy-MM-dd ',isShowClear:false});"/>
 				<br> <br>
 			  <label>文章分类:</label>
 				<form:select path="infoType.id" class="input-small">