Browse Source

媒体自投

jun.zhou 9 years ago
parent
commit
04e185ac61

+ 6 - 0
src/main/java/com/cloudcross/ssp/model/mapper/adgroup-zone.sql.xml

@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="adgroupZoneSqlMapper">
+	<sql id="column">
+		id,adgroup_id as adgroupId,zone_id as zoneId,status,supdated
+	</sql>
+	
 	<!-- 批量插入 -->
 	<insert id="addAdgroupZoneBatch">
 		insert into t_adgroup_zone 
@@ -10,4 +14,6 @@
 			(#{adgroupZone.adgroupId},#{zoneId},#{adgroupZone.status},#{adgroupZone.supdated})
 		</foreach>
 	</insert>
+	
+	
 </mapper>

+ 9 - 1
src/main/java/com/cloudcross/ssp/model/mapper/wifiGroupInfo.sql.xml

@@ -42,6 +42,14 @@
 	</select>
 	
 	<select id="queryWifiGroupInfoByCondition" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.WifiGroupInfo">
-		select <include refid="column"/> from t_wifi_group_info where operator_id = #{operatorId} and name = #{name} and status != -1
+		select <include refid="column"/> from t_wifi_group_info where status = 0 and operator_id = #{operatorId} 
+		<if test="name != null">
+			and name = #{name} 
+		</if>
+	</select>
+	
+	<select id="queryWifiGroupInfoByadgroupId" parameterType="java.lang.Long" resultType="com.cloudcross.ssp.model.WifiGroupInfo">
+		select twgi.id id,twgi.name name  from t_wifi_group_info twgi,t_adgroup_wifigroup taw where twgi.id = taw.wifigroup_id 
+		and taw.status = 0 and twgi.status = 0 and taw.adgroup_id=#{adgroupId}
 	</select>
 </mapper>

+ 15 - 5
src/main/java/com/cloudcross/ssp/model/mapper/zone.sql.xml

@@ -212,11 +212,21 @@
            from t_zone where operator_id = #{operatorId}
       </select>
       
-      <!-- zhoujun -->
+      
+     
+     <!-- 根据广告位的位置查询广告位 -->
       <select id="queryZoneByCondition" resultType="com.cloudcross.ssp.model.Zone" parameterType="java.util.Map">
-      	select id,name from t_zone where operator_id = #{operatorId} 
-      	<if test="position != null">
-      		position = #{position}
+      	select id,name from t_zone where status = 0 and operator_id = #{operatorId} 
+      	<if test="positionList != null">
+      		and position in
+      		<foreach item="position" collection="positionList"  open="(" separator="," close=")">
+		 		#{position}
+			</foreach>
       	</if>
-      </select>
+     </select>
+     
+     <!-- 根据投放查询广告位 -->
+     <select id="queryZoneByAdgroupId" parameterType="java.lang.Long" resultType="com.cloudcross.ssp.model.Zone" >
+     	select tz.id id,tz.name as name from t_zone tz,t_adgroup_zone taz where tz.id=taz.zone_id and taz.status=0 and tz.status=0 and taz.adgroup_id = #{adgroupId}
+     </select>
 </mapper>

+ 2 - 1
src/main/java/com/cloudcross/ssp/service/IWifiGroupInfoService.java

@@ -19,5 +19,6 @@ import com.cloudcross.ssp.model.WifiGroupInfo;
  *
  */
 public interface IWifiGroupInfoService extends IGenericService<WifiGroupInfo>{
-	public List<WifiGroupInfo>queryWifiGroupInfoByCondition(Map<String,Object>condition);
+	public List<WifiGroupInfo> queryWifiGroupInfoByCondition(Map<String,Object>condition);
+	public List<WifiGroupInfo> queryWifiGroupInfoByadgroupId(Long adgroupId);
 }

+ 1 - 1
src/main/java/com/cloudcross/ssp/service/IZoneService.java

@@ -31,6 +31,6 @@ public interface IZoneService extends IGenericService<Zone> {
 	
 	//根据媒体ID查询广告位
 	List<Zone> queryZoneByCondition(Map<String,Object>conditon);
-	
+	List<Zone> queryZoneByAdgroupId(Long adgroupId);
 	
 }

+ 2 - 1
src/main/java/com/cloudcross/ssp/service/impl/AdGroupService.java

@@ -524,9 +524,10 @@ public void commonSaveDriect(Map<String,Object> targetParamsMap,Map<String,Objec
 		public boolean saveAll(AdGroup adGroup, Map<String,Object> condition) {
 			//添加投放,时间定向,地域定向
 			save(adGroup,condition);
+			
 			Long adgroupId = adGroup.getId();
 			Long supdated = new Date().getTime()/1000;
-			//添加土方与广告位对应关系
+			//添加投放与广告位对应关系
 			List<Long> zoneIdList = adGroup.getZoneIdList();
 			if(zoneIdList != null && zoneIdList.size()>0){
 				AdgroupZone adgroupZone = new AdgroupZone();

+ 4 - 1
src/main/java/com/cloudcross/ssp/service/impl/WifiGroupInfoService.java

@@ -67,5 +67,8 @@ public class WifiGroupInfoService implements IWifiGroupInfoService{
 	public List<WifiGroupInfo> queryWifiGroupInfoByCondition(Map<String, Object> condition) {
 		return myBatisDao.getList("wifiGroupInfoSqlMapper.queryWifiGroupInfoByCondition",condition);
 	}
-
+	
+	public List<WifiGroupInfo> queryWifiGroupInfoByadgroupId(Long adgroupId){
+		return myBatisDao.getList("wifiGroupInfoSqlMapper.queryWifiGroupInfoByadgroupId",adgroupId);
+	}
 }

+ 5 - 0
src/main/java/com/cloudcross/ssp/service/impl/ZoneService.java

@@ -190,6 +190,11 @@ import com.cloudcross.ssp.web.widget.SelectorController.ISelectorProvider;
 	public List<Zone> queryZoneByCondition(Map<String,Object>condition) {
 		return myBatisDao.getList("zoneSqlMapper.queryZoneByCondition", condition);
 	}
+
+	@Override
+	public List<Zone> queryZoneByAdgroupId(Long adgroupId) {
+		return myBatisDao.getList("zoneSqlMapper.queryZoneByAdgroupId", adgroupId);
+	}
 	
 
 }

+ 357 - 7
src/main/java/com/cloudcross/ssp/web/advertiser/main/ad/target/OperatorAdGroupController.java

@@ -1,5 +1,7 @@
 package com.cloudcross.ssp.web.advertiser.main.ad.target;
 
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -8,11 +10,14 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.log4j.Logger;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -28,8 +33,10 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import com.cloudcross.ssp.base.utils.freemarker.FreemarkerTemplateProcessor;
 import com.cloudcross.ssp.base.web.SimpleController;
 import com.cloudcross.ssp.common.consts.DirectType;
+import com.cloudcross.ssp.common.consts.Status;
 import com.cloudcross.ssp.common.utils.AdvertiserSortByDate;
 import com.cloudcross.ssp.common.utils.Common;
+import com.cloudcross.ssp.common.utils.LangUtil;
 import com.cloudcross.ssp.common.utils.Pager;
 import com.cloudcross.ssp.common.utils.SqlHelper;
 import com.cloudcross.ssp.model.Account;
@@ -210,15 +217,23 @@ public class OperatorAdGroupController extends SimpleController{
 	}
 	
 	/**
-	 *  
+	 *  页面传position拼接的字符串,已逗号隔开
 	 * @param position 根据广告位的位置选择广告位
 	 * @return
 	 */
 	@RequestMapping("/zonelist")
 	@ResponseBody
-	public List<Zone> queryZoneByPosition(Integer position){
+	public List<Zone> queryZoneByPosition(String position){
 		Map<String,Object>condition = new HashMap<String,Object>();
-		condition.put("position", position);
+		List<Integer> positionList = new ArrayList<Integer>();
+		if(position != null && position != ""){
+			String posStr[] = position.split(",");
+			for(int i=0;i<posStr.length;i++){
+				positionList.add(Integer.parseInt(posStr[i]));
+			}
+		}
+		
+		condition.put("positionList", positionList);
 		condition.put("operatorId", getLoginUser().getOperatorId());
 		return this.zoneService.queryZoneByCondition(condition);
 	}
@@ -251,8 +266,10 @@ public class OperatorAdGroupController extends SimpleController{
 	 * @return
 	 */
 	@RequestMapping("/edit")
-	public String edit(Model model,Long adGroupId) {
-		AdGroup adGroup = adGroupService.findById(adGroupId);
+	public String edit(Model model,Long id) {
+		
+		
+		AdGroup adGroup = adGroupService.findById(id);
 		
 		//找到这个投放对应的活动,然后保存活动预算
 		Campaign campaign = campaignService.findById(adGroup.getCampaignId());
@@ -261,6 +278,22 @@ public class OperatorAdGroupController extends SimpleController{
 		//找到所有的场景,并且显示出来
 		List<Place> placeList = placeService.findAll();
 		
+		//已选广告位
+		List<Zone> selectZoneList =  this.zoneService.queryZoneByAdgroupId(id);;
+		//未选广告位
+		List<Zone> unselectZoneList = getUnSelectZoneList(selectZoneList);
+		model.addAttribute("selectZoneList", selectZoneList);
+		model.addAttribute("unselectZoneList", unselectZoneList);
+		
+		//已选分组
+		List<WifiGroupInfo> selectWifiGroupInfoList = this.wifiGroupInfoService.queryWifiGroupInfoByadgroupId(id);;
+		//全部分组
+		Map<String,Object>condition = new HashMap<String,Object>();
+		condition.put("operatorId", getLoginUser().getOperatorId());
+		List<WifiGroupInfo> allWifiGroupInfoList = this.wifiGroupInfoService.queryWifiGroupInfoByCondition(condition);
+		model.addAttribute("selectWifiGroupInfoList", selectWifiGroupInfoList);
+		model.addAttribute("allWifiGroupInfoList", allWifiGroupInfoList);
+		
 		//获取所有已选择的场景并且用,分割存放到place里面
 		String place = "0,";
 		List<AdGroupPlace> adGroupPlaceList = adGroupPlaceService.findAll(adGroup.getId());
@@ -316,7 +349,7 @@ public class OperatorAdGroupController extends SimpleController{
 			areas = locationDirect.getBackShow();
 		}
 		//批量查询
-		List<Direct> directs = directService.findByBatch(adGroupId);				
+		List<Direct> directs = directService.findByBatch(id);				
 		Long campaignId = adGroup.getCampaignId();
 		model.addAttribute("campaignId", campaignId);			
 		if(directs!=null){
@@ -339,6 +372,323 @@ public class OperatorAdGroupController extends SimpleController{
 		model.addAttribute("adGroupPlaceList",adGroupPlaceList);
 		return page("edit");
 	}
+	
+	/**
+	 * 
+	 * @param all   全部广告位
+	 * @param select 已选广告位
+	 * @return  未选广告位
+	 */
+	List<Zone> getUnSelectZoneList(List<Zone> select){
+		Map<String,Object> condition = new HashMap<String,Object>();
+		condition.put("operatorId", getLoginUser().getOperatorId());
+		//全部广告位
+		List<Zone> allZoneList = zoneService.queryZoneByCondition(condition);
+		allZoneList.removeAll(select);
+		return allZoneList;
+	}
+	
+	
+	@RequestMapping("/enable")
+	@ResponseBody
+	public String enable(HttpServletRequest request,Long[] id) {
+	
+		if (ArrayUtils.isNotEmpty(id)) {
+			//循环得到投放名称
+			List<String> adGroupNameList = new ArrayList<String>();
+			
+			for(int i = 0; i < id.length; i++) {
+				AdGroup adGroup = adGroupService.findById(id[i]);
+				adGroupNameList.add(adGroup.getAdGroupName());
+			}
+		
+			//如果开启成功,则增加对应的修改记录
+			if(adGroupService.updateStatus(LangUtil.array2List(id),Status.enable.value)) {
+				for(int i = 0; i < id.length; i++) {
+					Log log = new Log();
+					//对应模块,这里应该是投放模块
+					log.setModule("AdGroup");
+					//对应的表名,这里是t_adgroup
+					log.setTableName("t_adgroup");
+					//对应的投放id
+					log.setRecordId(id[i]);
+					//对应的操作类型
+					log.setActionType("开启");
+					//变更详情
+					log.setAction("开启了投放:" + adGroupNameList.get(i));
+					log.setActionTime("100");
+					log.setAccountId(new Long(getLoginUser().getId()));
+					log.setUserIp(Common.toIpAddr(request));
+					log.setAccountName(getLoginUser().getAccountName());
+					logService.add(log);
+				}
+			}
+		}
+		return OK;
+	}
+
+	@RequestMapping("/disable")
+	@ResponseBody 
+	String disable(HttpServletRequest request,Long[] id) {
+		if (ArrayUtils.isNotEmpty(id)) {
+			//循环得到投放名称
+			List<String> adGroupNameList = new ArrayList<String>();
+			
+			for(int i = 0; i < id.length; i++) {
+				AdGroup adGroup = adGroupService.findById(id[i]);
+				adGroupNameList.add(adGroup.getAdGroupName());
+			}
+			
+			//如果停用成功,则增加对应的修改记录
+			if(adGroupService.updateStatus(LangUtil.array2List(id),Status.disable.value)) {	
+				for(int i = 0; i < id.length; i++) {
+					Log log = new Log();
+					//对应模块,这里应该是投放模块
+					log.setModule("AdGroup");
+					//对应的表名,这里是t_adgroup
+					log.setTableName("t_adgroup");
+					//对应的投放id
+					log.setRecordId(id[i]);
+					//对应的操作类型
+					log.setActionType("停用");
+					//变更详情
+					log.setAction("停用了投放:" + adGroupNameList.get(i));
+					//下面这几个字段目前后端数据没有得到。所以仅作测试用!
+					log.setActionTime("100");
+					log.setAccountId(new Long(getLoginUser().getId()));
+					log.setUserIp(Common.toIpAddr(request));
+					log.setAccountName(getLoginUser().getAccountName());
+					logService.add(log);
+				}
+			}
+		}
+		return OK;
+	}
+
+	/**
+	 * 批量删除时只是把这些选中的行的状态改为-1,并没有把它从表里面删掉
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping("/delete")
+	@ResponseBody
+	public String delete(HttpServletRequest request, Long[] id) {
+		if (ArrayUtils.isNotEmpty(id)) {
+			//循环得到投放名称
+			List<String> adGroupNameList = new ArrayList<String>();
+			
+			for(int i = 0; i < id.length; i++) {
+				AdGroup adGroup = adGroupService.findById(id[i]);
+				adGroupNameList.add(adGroup.getAdGroupName());
+			}
+			
+			//如果删除成功则添加修改记录
+			if(adGroupService.updateStatusAll(LangUtil.array2List(id),Status.delete.value)) {
+				
+				for(int i = 0; i < id.length; i++) {
+					Log log = new Log();
+					//对应模块,这里应该是投放模块
+					log.setModule("AdGroup");
+					//对应的表名,这里是t_adgroup
+					log.setTableName("t_adgroup");
+					//对应的投放id
+					log.setRecordId(id[i]);
+					//对应的操作类型
+					log.setActionType("删除");
+					//变更详情
+					log.setAction("删除了投放:" + adGroupNameList.get(i));
+					//下面这几个字段目前后端数据没有得到。所以仅作测试用!
+					log.setActionTime("100");
+					log.setAccountId(new Long(getLoginUser().getId()));
+					log.setUserIp(Common.toIpAddr(request));
+					log.setAccountName(getLoginUser().getAccountName());
+					logService.add(log);
+				}
+			}
+			
+		}
+		return OK;
+	}
+	
+	@RequestMapping("/getLocations")
+	public String getLocations(Model model) {
+		ArrayList<Location> list = (ArrayList) locationService.findAll("中国");
+		LinkedHashMap<String, ArrayList<Location>> hashMap = new LinkedHashMap<String, ArrayList<Location>>();
+		// 用来保存省份和对应的编码
+		LinkedHashMap<String, String> hashCode = new LinkedHashMap<String, String>();
+		ArrayList<Location> tmpList;
+		for (Location locate : list) {
+			if (hashMap.containsKey(locate.getCn())) {
+				hashMap.get(locate.getCn()).add(locate);
+			} else {
+				tmpList = new ArrayList<Location>();
+				tmpList.add(locate);
+				hashMap.put(locate.getCn(), tmpList);
+				hashCode.put(locate.getCn(),
+						locate.getLocation1() + locate.getLocation2());
+			}
+		}
+		model.addAttribute("hashMap", hashMap);
+		model.addAttribute("hashCode", hashCode);
+		return page("locations");
+	}
+	
+	/**
+	 * 有时间重写方法
+	 * @param request
+	 * @param response
+	 * @param selectedStatus
+	 * @param paramMap
+	 */
+	@RequestMapping("/exportAdGroupExcel")
+	public void exportOtherReportExcel(HttpServletRequest request,
+			HttpServletResponse response,
+			@RequestParam(defaultValue = "0") int selectedStatus,
+			@RequestParam Map<String, Object> paramMap) {
+		
+		Long campaignId = null;
+		Long orderId = null;
+		Long advertiserId = null;
+		/**
+		 * 对传入的数据做处理
+		 * 第一:如果传入的活动id值为空值或者空字符串或者是-1的话则表明这个活动id代表的是全部的活动,这时让它的值设为-1,并且加上一个活动标志它的值设为全部(它用在sql语句的判断上)
+		 * 第二:如果传入的订单id值为空值或者空字符串或者是-1的话,这时不能够直接认为它是全部的订单,要对活动id进行判断一下,如果活动id是全部活动的话,那么这时就是全部的订单,订单
+		 * id就设为-1并且加上一个订单标志值设为全部,否则订单id的值为通过活动id查找到的订单id值
+		 * 第三:如果传入的广告主id值为空值或者空字符串或者是-1的话则,这时也不能够直接认为它是全部的广告主,要对订单id进行判断,如果订单id是全部订单的话,那么这是就是全部广告主
+		 * 这时广告主id的值为-1,同时通过当前登录账号得到代理商的id,使查出来的信息是该登录账号下的全部广告主,否则广告主id的值为通过订单id查找到的广告主id值
+		 * 
+		 */
+		if(null == paramMap.get("campaignId") || "".equals(paramMap.get("campaignId")) 
+				|| "-1".equals(paramMap.get("campaignId"))) {
+			paramMap.put("campaignMark", "全部");
+			paramMap.put("campaignId", -1l);
+			paramMap.put("selectedcampaignName", "全部活动");
+		} else {
+			//将前端传过来的campaignId变成Long型
+			campaignId = Long.parseLong(String.valueOf(paramMap.get("campaignId")));
+			paramMap.put("campaignId", campaignId);
+			Campaign campaignObj = campaignService.findById(Long.valueOf(paramMap.get("campaignId").toString()));
+			paramMap.put("selectedcampaignName", campaignObj.getName());
+		}
+		
+		
+		if(null == paramMap.get("orderId") || "".equals(paramMap.get("orderId")) 
+				|| "-1".equals(paramMap.get("orderId"))) {
+			
+			if(campaignId == null) {
+				paramMap.put("orderMark", "全部");
+				paramMap.put("orderId", -1l);
+				paramMap.put("selectedorderName", "全部订单");
+			} else {
+				Campaign campaign = campaignService.findById(campaignId);
+				orderId = campaign.getOrderId();
+				paramMap.put("orderId", orderId);
+				String orderName = orderService.selectOrderNameById(orderId);
+				paramMap.put("selectedorderName", orderName);
+			}
+			
+		} else {
+			
+			//将前端传过来的orderId变成Long型
+			orderId = Long.parseLong(String.valueOf(paramMap.get("orderId")));
+			paramMap.put("orderId", orderId);
+			String orderName = orderService.selectOrderNameById(orderId);
+			paramMap.put("selectedorderName", orderName);
+		}
+		
+		
+		if(null == paramMap.get("advertiserId") || "".equals(paramMap.get("advertiserId")) 
+				|| "-1".equals(paramMap.get("advertiserId"))) {
+			
+			if(orderId == null) {
+				paramMap.put("agentId", getLoginUser().getAgentId());
+				paramMap.put("advertiserId", -1l);
+				paramMap.put("selectedadvertiserName", "全部广告主");
+			} else {
+				paramMap.put("agentId", null);
+				Order order = orderService.findById(orderId);
+				advertiserId = order.getAdvertiserId();
+				paramMap.put("advertiserId", advertiserId);
+				String advertiserName = advertiserService.selectAdvertiserNameById(advertiserId);
+				paramMap.put("selectedadvertiserName", advertiserName);
+			}
+			
+		} else {
+			paramMap.put("agentId", null);
+			//将前端传过来的advertiserId变成Long型
+			advertiserId = Long.parseLong(String.valueOf(paramMap.get("advertiserId")));
+			paramMap.put("advertiserId", advertiserId);
+			String advertiserName = advertiserService.selectAdvertiserNameById(advertiserId);
+			paramMap.put("selectedadvertiserName", advertiserName);
+		}
+		
+		// 这里的搜索只是对投放名称进行搜索
+		String adGroupName = null;
+		if (null != paramMap.get("searchValue")) {
+			try {
+				adGroupName = new String((String.valueOf(paramMap
+						.get("searchValue"))).getBytes("ISO-8859-1"), "UTF-8");
+			} catch (UnsupportedEncodingException e) {
+				e.printStackTrace();
+			}
+			adGroupName = SqlHelper.doLike(adGroupName);
+		}
+
+		paramMap.put("adGroupName", adGroupName);
+		
+		/**
+		 * 根据状态来进行查询
+		 * 设置0-表示全部,1-表示投放中,2-表示未投放,3-投放结束,4-停用
+		 * 没选默认时status应该是为0
+		 * 实现思想:这里如果是选择的是0(全部的)话那就不用加什么条件,那如果选择的是1的话,就在paramMap上加上一个键值对
+		 * key的名字就设置为selectedStatus1,那这样就可以在mapper文件中对key值进行判断,然后增加相应的条件,下面的就以此
+		 * 类推
+		 */
+		switch(selectedStatus) {
+		//当所选择的状态是0表示全部时就不用添加什么条件了,只要把所有的都找出来就行
+		case 0:break;
+		//当选择的状态是1时表示的是投放中,那这时找的就应该是当前时间处于投放开始时间和投放结束时间之间并且应该是开启的状态
+		case 1:paramMap.put("selectedStatus1", selectedStatus);break;
+		//当选择的状态是2时表示的是未投放,那这时就应该是投放开始时间要大于当前时间
+		case 2:paramMap.put("selectedStatus2", selectedStatus);break;
+		//当选择的状态是3时表示的是投放结束,那这时就应该是投放的结束时间小于当前时间
+		case 3:paramMap.put("selectedStatus3", selectedStatus);break;
+		//当选择的状态是4时表示的是停用,那这时只要在写数据库查询时加上它的投放表中的status字段等于1就行了
+		case 4:paramMap.put("selectedStatus4", selectedStatus);break;
+		}
+		
+		List<AdGroup> adGroupList = adGroupService.findByParams(paramMap);
+		
+		response.reset();
+		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
+		response.setContentType("application/vnd.ms-excel;charset=utf8");
+		// 设置excel文件名称
+		SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmss");
+		String fileName = "report" + df2.format(new Date());
+		response.setHeader("Content-Disposition", "attachment;filename="
+				+ fileName + ".xls");
+		// 需要对excel的列和行的总数进行指定
+		int column = 6;
+		paramMap.put("dataList", adGroupList);
+		paramMap.put("dataSize", (adGroupList.size() + 100));
+		paramMap.put("column", column);
+		String excelTemplate = templateProcessor.processTemplate(
+				"excel/adGroup.ftl", paramMap);
+		try {
+			PrintWriter out = response.getWriter();
+			out.write(excelTemplate);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		
+	}
+	
+	
+
 	/**
 	 * 媒体自投保存
 	 * @param request
@@ -351,7 +701,7 @@ public class OperatorAdGroupController extends SimpleController{
 	 * @param paramMap
 	 * @return
 	 */
-	@RequestMapping("/saveAdGroup")
+	@RequestMapping("/save")
 	public String saveAdGroup(HttpServletRequest request, Model model,@ModelAttribute("form") AdGroup adGroup
 			,@RequestParam String place
 			,@RequestParam String areas

+ 1 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/campaign/list.ftl

@@ -87,6 +87,7 @@
 								<td class="tbodyTd">${campaign.name!}</td>
 								<td class="tbodyTd">${campaign.totalBudget!}</td>
 								<td class="tbodyTd">
+									<#--operatorId=0,到投放页面,operatorID>0,到自投页面-->
 									<a href="${ctx}/advertiser/main/ad/target/ad-group/list?campaignId=${campaign.id!}&orderId=${orderId!}&advertiserId=${advertiserId!}" class="tableTdStyle">${campaign.groupNumber!}个投放</a>
 									<#--<a href="${ctx}/advertiser/main/ad/target/operator-ad-group/list?campaignId=${campaign.id!}&orderId=${orderId!}&advertiserId=${advertiserId!}" class="tableTdStyle">${campaign.groupNumber!}个投放</a>-->
 								</td>

+ 1 - 1
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/operator-ad-group/create.ftl

@@ -18,7 +18,7 @@
 <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=2767a619003d806b2dba379e3e023dfd"></script> 
 <script type="text/javascript" src="${ctx}/assets/js/common/validate.js"></script>
 <script type="text/javascript" src="${ctx}/assets/js/wifi.js"></script>
-<script type="text/javascript" src="${ctx}/assets/js/advertiser/adGroup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradGroup.js"></script>
 
 </@override>	
 <@override name="body">

+ 26 - 26
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/operator-ad-group/edit.ftl

@@ -18,7 +18,7 @@
 <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=2767a619003d806b2dba379e3e023dfd"></script> 
 <script type="text/javascript" src="${ctx}/assets/js/common/validate.js"></script>
 <script type="text/javascript" src="${ctx}/assets/js/wifi.js"></script>
-<script type="text/javascript" src="${ctx}/assets/js/advertiser/adGroup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradGroup.js"></script>
 
 </@override>	
 <@override name="body">
@@ -54,58 +54,58 @@
 				<input type="hidden" name="selectedwifi" id="selectedwifi" value=""/>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>投放名称:</label>
-					<input class="input-text" tabindex="1" id="adGroupName" name="adGroupName" type="text" value="" verify="unspecial/255/1/0"/><span class="spanVaildate"></span>
+					<input class="input-text" tabindex="1" readonly="readonly" id="adGroupName" name="adGroupName" type="text" value="${adGroup.adGroupName!}" verify="unspecial/255/1/0"/><span class="spanVaildate"></span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>活动周期:</label>
 					<span id="input-calendar">
 						<i class="icon-calendar"></i>   
-						<input type="text" tabindex="2" name="activeTime" id="dateRangePicker" value="" verify="date-to/24/1/0"/><span class="spanVaildate"></span>
+						<input type="text" tabindex="2" readonly="readonly" name="activeTime" id="dateRangePicker" value="${activeTime!}" verify="date-to/24/1/0"/><span class="spanVaildate"></span>
 					</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>总预算:</label>
 					<input name="budget" type="hidden" id="budget" value="${budget!}"/>
-					<input class="input-text" tabindex="3" id="totalBudget" name="totalBudget" type="text" value="" verify="float/11/1/2"/>
+					<input class="input-text" tabindex="3" id="totalBudget" name="totalBudget" type="text" value="${adGroup.totalBudget!}" verify="float/11/1/2"/>
 					<span class="input-span">元</span><span class="help-inline">总预算不能大于订单总预算</span><span class="spanVaildate"></span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>投放模式:</label>
-					<input class="input-radio" name="mode" type="radio" value="1" checked="checked"><span class="input-radio-span otherspan">CPM</span>
-					<input class="input-radio" name="mode" type="radio" value="2"><span class="input-radio-span otherspan">CPC</span>
+					<input class="input-radio" name="mode" type="radio" value="1" <#if adGroup.mode==1>checked</#if> ><span class="input-radio-span otherspan">CPM</span>
+					<input class="input-radio" name="mode" type="radio" value="2" <#if adGroup.mode==2>checked</#if> ><span class="input-radio-span otherspan">CPC</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>单价(CPM):</label>
-					<input class="input-text" tabindex="4" id="price" name="price" type="text" value="" verify="float/11/1/2"/><span class="spanVaildate"></span>
+					<input class="input-text" tabindex="4" id="price" name="price" type="text" value="${adGroup.price!}" verify="float/11/1/2"/><span class="spanVaildate"></span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>曝光总上限:</label>
-					<input class="input-text" tabindex="6" id="maxImpression" name="maxImpression" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="6" id="maxImpression" name="maxImpression" type="text" value="${adGroup.maxImpression!}" verify="number/11/0/0"/>
 					<span class="input-span">千次</span><span class="help-inline">整个投放期,广告最多被曝光多少千次,-1代表不限</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>点击总上限:</label>
-					<input class="input-text" tabindex="7" id="maxClick" name="maxClick" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="7" id="maxClick" name="maxClick" type="text" value="${adGroup.maxClick!}" verify="number/11/0/0"/>
 					<span class="input-span">次</span><span class="help-inline">整个投放期,广告最多被点击多少次,-1代表不限</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>转化总上限:</label>
-					<input class="input-text" tabindex="8" id="maxConversion" name="maxConversion" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="8" id="maxConversion" name="maxConversion" type="text" value="${adGroup.maxConversion!}" verify="number/11/0/0"/>
 					<span class="input-span">次</span><span class="help-inline">整个投放期,广告最多被曝光多少千次,-1代表不限</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>每日曝光总上限:</label>
-					<input class="input-text" tabindex="9" id="dailyMaxImpression" name="dailyMaxImpression" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="9" id="dailyMaxImpression" name="dailyMaxImpression" type="text" value="${adGroup.dailyMaxImpression!}" verify="number/11/0/0"/>
 					<span class="input-span">千次</span><span class="help-inline">每天,广告最多被曝光多少千次</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>每日点击总上限:</label>
-					<input class="input-text" tabindex="10" id="dailyMaxClick" name="dailyMaxClick" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="10" id="dailyMaxClick" name="dailyMaxClick" type="text" value="${adGroup.dailyMaxClick!}" verify="number/11/0/0"/>
 					<span class="input-span">次</span><span class="help-inline">每天,广告最多被点击多少次</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>每日转化总上限:</label>
-					<input class="input-text" tabindex="11" id="dailyMaxConversion" name="dailyMaxConversion" type="text" value="" verify="number/11/0/0"/>
+					<input class="input-text" tabindex="11" id="dailyMaxConversion" name="dailyMaxConversion" type="text" value="${adGroup.dailyMaxImpression!}" verify="number/11/0/0"/>
 					<span class="input-span">次</span><span class="help-inline">每天,广告最多被转换多少次</span>
 				</div>
 				<div class="input-group">
@@ -120,8 +120,8 @@
 							</ul>
 						</li>
 					</ul>
-					<input id="perClickType" name="perClickType" type="hidden" value="" />
-					<input class="input-text-small" tabindex="12" id="perClick" name="perClick" type="text" value="" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
+					<input id="perClickType" name="perClickType" type="hidden" value="${adGroup.perClickType!}" />
+					<input class="input-text-small" tabindex="12" id="perClick" name="perClick" type="text" value="${adGroup.perClick!}" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>单人曝光频次:</label>
@@ -135,12 +135,12 @@
 							</ul>
 						</li>
 					</ul>
-					<input id="perImpressionType" name="perImpressionType" type="hidden" value="" />
-					<input class="input-text-small" tabindex="13" id="perImpression" name="perImpression" type="text" value="" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
+					<input id="perImpressionType" name="perImpressionType" type="hidden" value="${adGroup.perImpressionType!}" />
+					<input class="input-text-small" tabindex="13" id="perImpression" name="perImpression" type="text" value="${adGroup.perImpression!}" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
 				</div>
 				<div class="input-group" id="areasDiv">
 					<label class="input-label-other"><span class="lbl-no"></span>地域定向:</label>
-					<input class="ignore" type="hidden" id="areas" name="areas" value=""/>
+					<input class="ignore" type="hidden" id="areas" name="areas" value="${areas!}"/>
 					<a id="btn-areas" class="btn2">地域设定</a>
 		            <label id="geo-selected-areas"><span class="area-direct"></span><span>您已经设定了<strong id="count-areas">0</strong>个地域条件</span></label>
 		            <label id="geo-all-areas"><span class="area-direct"></span><span class="default_text">不限</span></label>
@@ -152,7 +152,7 @@
 					    	<p>开始时间</p>
 					        <p>结束时间</p>
 					    </div>
-					    <input type="hidden" name="sdayParting" id="sdayParting" value=""/>
+					    <input type="hidden" name="sdayParting" id="sdayParting" value="${time!}"/>
 					    <div class="clear"></div>
 					    <div class="time_box"></div>
 					    <div class="time_add"><p id="setting_list" class="dateRangePicker" href="">新增时间段</p></div>
@@ -160,13 +160,13 @@
 			  	</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-yes">*</span>操作系统:</label>
-					<input class="input-radio" name="os" type="radio" value="1" checked="checked"><span class="input-radio-span otherspan">iOS</span>
-					<input class="input-radio" name="os" type="radio" value="2"><span class="input-radio-span otherspan">Android</span>
-					<input class="input-radio" name="os" type="radio" value="3"><span class="input-radio-span otherspan">WP</span>
-					<input class="input-radio" name="os" type="radio" value="4"><span class="input-radio-span otherspan">Symbian</span>
-					<input class="input-radio" name="os" type="radio" value="5"><span class="input-radio-span otherspan">MAC OS</span>
-					<input class="input-radio" name="os" type="radio" value="6"><span class="input-radio-span otherspan">Windows</span>
-					<input class="input-radio" name="os" type="radio" value="7"><span class="input-radio-span otherspan">其他</span>
+					<input class="input-radio" name="os" type="radio" value="1" <#if adGroup.os==1>checked</#if> ><span class="input-radio-span otherspan">iOS</span>
+					<input class="input-radio" name="os" type="radio" value="2" <#if adGroup.os==2>checked</#if> ><span class="input-radio-span otherspan">Android</span>
+					<input class="input-radio" name="os" type="radio" value="3" <#if adGroup.os==3>checked</#if> ><span class="input-radio-span otherspan">WP</span>
+					<input class="input-radio" name="os" type="radio" value="4" <#if adGroup.os==4>checked</#if> ><span class="input-radio-span otherspan">Symbian</span>
+					<input class="input-radio" name="os" type="radio" value="5" <#if adGroup.os==5>checked</#if> ><span class="input-radio-span otherspan">MAC OS</span>
+					<input class="input-radio" name="os" type="radio" value="6" <#if adGroup.os==6>checked</#if> ><span class="input-radio-span otherspan">Windows</span>
+					<input class="input-radio" name="os" type="radio" value="7" <#if adGroup.os==7>checked</#if> ><span class="input-radio-span otherspan">其他</span>
 				</div>
 				<div class="input-group">
 					<label class="input-label-other"><span class="lbl-no"></span>广告位:</label>

+ 2 - 2
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/operator-ad-group/list.ftl

@@ -4,7 +4,7 @@
 <script type="text/javascript" src="${ctx}/assets/js/lib/bootbox.js"></script>
 <script type="text/javascript" src="${ctx}/assets/js/common/table.js"></script>
 <script type="text/javascript" src="${ctx}/assets/js/common/dropDownList.js"></script>
-<script type="text/javascript" src="${ctx}/assets/js/advertiser/adGroup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradGroup.js"></script>
 </@override> 
 <@override name="body">
 <div id=content_bg>
@@ -27,7 +27,7 @@
 				    <li class="navDiv_currentLi">投放管理</li>
 				</ul>  
  			</div>
- 			<form id="myform" action="${ctx}/advertiser/main/ad/target/ad-group/list?campaignId=${campaignId!}&orderId=${orderId!}&advertiserId=${advertiserId!}" method="post">
+ 			<form id="myform" action="${ctx}/advertiser/main/ad/target/operator-ad-group/list?campaignId=${campaignId!}&orderId=${orderId!}&advertiserId=${advertiserId!}" method="post">
  				<input type="hidden" id="status" name="selectedStatus" value="${selectedStatus!}"/>
  				<div id="selectuls">
 					<ul id="main_advertiserul">

+ 501 - 0
src/main/webapp/assets/js/advertiser/operatoradGroup.js

@@ -0,0 +1,501 @@
+$(document).ready(function(){
+	var ctx = $("#ctx").val();//获取服务器地址
+	
+	/***************************    活动列表页    ***************************/
+	
+	$("#btn-create").click(function(){
+		if($("#campaignId").val() == "" || $("#campaignId").val() == -1){
+			$(this).attr("href","javascript:void(0);");
+			bootbox.alert("请选择活动!");
+			$(this).attr("title","请选择活动");
+			return false;
+		}
+	});
+
+	$('ul#campaignul_son_ul li').live("click",function(){
+		$("#myform").attr("action",ctx+"/advertiser/main/ad/target/operator-ad-group/list?campaignId="+$("#campaignId").val()+"&orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val());
+		refreshData();
+	});
+	
+ 	//状态全部、开启、停用
+ 	if($("#status").val() == 0 || $("#status").val() == ""){
+ 		$("#selectBar_status a:first").addClass("selectBar_change");
+ 		$("#status").val(0);
+	}
+ 	$("#selectBar_status a").each(function(){
+ 		var value = $(this).attr("value");
+ 		if($("#status").val() == value){
+ 			$(this).addClass("selectBar_change").siblings('.selectBar_change').removeClass('selectBar_change');
+ 		}
+ 	});
+ 	$("#selectBar_status a").click(function(){
+ 		$("#status").val($(this).attr("value"));
+ 		refreshData();
+ 	});
+ 
+	//开启,暂停
+	$("#btn-enable,#btn-disable,#btn-delete").click(function(){
+		if($(this).attr("id") == "btn-enable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/enable";
+		}else if($(this).attr("id") == "btn-disable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/disable";
+		}else if($(this).attr("id") == "btn-delete"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/delete";
+		}
+		singleOper($(this),url);
+	});
+			
+	//批量开启,批量暂停
+	$("#all-btn-enable,#all-btn-disable,#all-btn-delete").click(function(){
+		if($(this).attr("id") == "all-btn-enable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/enable";
+		}else if($(this).attr("id") == "all-btn-disable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/disable";
+		}else if($(this).attr("id") == "all-btn-delete"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/delete";
+		}
+		batchOpear($(this),url);
+	});
+	
+	/***************************    创建,编辑投放    ***************************/
+	
+	//请选择点击类型
+ 	if($("#main_perClickul").html()){
+ 		if($("#perClickType").val() == 0 || $("#perClickType").val() == ""){
+ 			$("#perClickul_span").text("请选择点击类型");
+ 		}
+ 		$('ul#perClick_son_ul li').each(function(){
+ 			if($(this).attr("value") == $("#perClickType").val()){
+ 				$("#perClickul_span").text($(this).text());
+ 			}
+ 		});
+ 		$("#perClick_son_ul").hide();
+ 		$('ul#perClick_son_ul li').live("click",function(){
+ 			$(this).parents('li').find('span').text($(this).html());
+ 			$("#perClickType").val($(this).attr("value"));
+ 			$("#perClickTypeName").val($(this).text());
+ 			$('#perClick_son_ul').hide(); //ul隐藏
+ 		});
+ 		$("#perClickul_span").on("click",function(){
+ 	 		$('#perClick_son_ul').show(); //ul显示
+ 	 	});
+ 		$("#perClickul_box").mouseleave(function(){
+ 	 		$('#perClick_son_ul').hide(); //ul隐藏
+ 	 	});
+ 	}
+ 	
+ 	//请选择曝光类型
+ 	if($("#main_perImpressionul").html()){
+ 		if($("#perImpressionType").val() == 0 || $("#perImpressionType").val() == ""){
+ 			$("#perImpressionul_span").text("请选择曝光类型");
+ 		}
+ 		$('ul#perImpression_son_ul li').each(function(){
+ 			if($(this).attr("value") == $("#perImpressionType").val()){
+ 				$("#perImpressionul_span").text($(this).text());
+ 			}
+ 		});
+ 		$("#perImpression_son_ul").hide();
+ 		$('ul#perImpression_son_ul li').live("click",function(){
+ 			$(this).parents('li').find('span').text($(this).html());
+ 			$("#perImpressionType").val($(this).attr("value"));
+ 			$("#perImpressionTypeName").val($(this).html());
+ 			$('#perImpression_son_ul').hide(); //ul隐藏
+ 		});
+ 		$("#perImpressionul_span").on("click",function(){
+ 	 		$('#perImpression_son_ul').show(); //ul显示
+ 	 	});
+ 		$("#perImpressionul_box").mouseleave(function(){
+ 	 		$('#perImpression_son_ul').hide(); //ul隐藏
+ 	 	});
+ 	}
+	
+	if($("#areasDiv").html()){
+		var areasgeoPopup = $("#areas_popup")[0];
+		var GEO_list;
+		$('#btn-areas').click(function () {
+			if (!areasgeoPopup) {
+	            areasgeoPopup = new areasPopup({
+	                width: '746px',
+	                height: '435px',
+	                title: '地域定向设定'
+	     		});
+	            var defaultValue = "不限";
+	            var input = $('#areas').trigger('change');
+	            var selectedIds = input.val() ? input.val().split(',') : null;
+	            $('#areasconfirm').click(function(){
+	                var pop= areasgeoPopup;
+	                areasgeoPopup.hide();
+	                input.val(Area.save());
+	                var id = 'areas',selected = Area.save();
+	                parent.$('#'+id).val(selected);
+	                if (selected && $('input[type=checkbox]:not(:checked)').length) {
+	                    //有选择 且 非全选的
+	                    parent.$('#count-'+id)[0].innerHTML = selected.split(',').length;
+	                    parent.$('#geo-all-'+id).hide();
+	                    parent.$('#geo-selected-'+id).show();
+	                }else{
+	                    if(!$('input[type=checkbox]:not(:checked)').length){
+	                        parent.$('#geo-all-'+id).find('.default_text')[0].innerHTML=defaultValue;
+	                    }else{
+	                        var val = defaultValue;
+	                        parent.$('#geo-all-'+id).find('.default_text')[0].innerHTML=decodeURIComponent(val);
+	                    }
+	                    parent.$('#geo-all-'+id).show();
+	                    parent.$('#geo-selected-'+id).hide();
+	                }
+	                parent.$(parent.document).trigger('setData');
+				
+	            });
+	            //Area.init(GEO_LIST,selectedIds);
+	            $.ajax({
+	            	url: ctx+'/advertiser/main/ad/target/operator-ad-group/getLocations',
+	            	dataType:'json',
+	            	success:function(GEO_LIST){
+	            		Area.init(GEO_LIST,selectedIds);
+	            		areasgeoPopup.show();
+	            		GEO_list = GEO_LIST;
+	            	},
+	            	error:function(){
+	            		alert('数据拉取失败,请检查您的网络连接是否可用');
+	            	}
+	            });
+    		}else{
+    			areasgeoPopup.show();
+            }
+        });
+        
+        $('#count-areas').click(function () {
+            $('#btn-areas').trigger('click');
+        });
+        
+        if ($('#areas').val()) {
+            $('#geo-selected-areas').show();
+            $('#geo-all-areas').hide();
+            $('#count-areas')[0].innerHTML = $('#areas').val().split(',').length;
+        } else {
+            $('#geo-selected-areas').hide();
+            $('#geo-all-areas').show();
+        }
+	
+	}
+	
+	//时间定向
+	$('#setting_list').unbind("mousedown").bind("mousedown",function(){
+	 	var date = $("#dateRangePicker").val().split('to');
+		var s_date = date[0];
+		var e_date = date[1];
+		var len_box = $(".time_box").find(".time_item").length;
+		if(len_box > 6){
+			bootbox.alert("最多只能添加6个时段");
+		}else{
+			if(s_date!=""&&e_date!=""){
+				var datePickerOptions = {
+					"startDate":s_date,
+					"endDate":e_date
+				}
+				$("#quantum_list1").find("p").removeClass("pitchon");
+				$('#setting_list').unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+					var date = $("#dateRangePicker").val().split('to');
+				    var s_date = date[0];
+					var e_date = date[1];
+					var checked_date = new Array();
+					var len = $(".setting .time_item").length;
+					for(var i=0;i<len;i++){
+						var json_check = {"startDate":$(".time_item").eq(i).find(".start_date").val(),"endDate":$(".time_item").eq(i).find(".end_date").val()};
+						checked_date.push(json_check);
+					}
+					var startDate = obj.value.split('to')[0];
+			   		var endDate = obj.value.split('to')[1];
+					var flag = true;
+			   		for(var j=0;j<checked_date.length;j++){
+			   			if(startDate < checked_date[j].startDate && endDate < checked_date[j].startDate){
+			   				console.log(startDate+":"+endDate)
+			   				console.log(flag+":1");
+			   			}else if(startDate > checked_date[j].endDate && endDate > checked_date[j].endDate){
+			   				console.log(flag+":2");
+			   			}else{
+			   				flag=false;
+			   			}
+			   		}
+			   		if(flag){
+				   		var obj = $("#quantum_list1");
+				   		if(obj.find(".pitchon").length){
+				           	var timeData = obj.find(".pitchon").map(function(i,span){
+				        		return $(span).attr("title");
+				        	}).toArray().join(',');
+				        }else{
+				           	var timeData = -1;
+				        }
+				   		var html = '<div class="time_item"><p class="tr_data"><span class="inp"><input type="" class="start_date edit_time" readonly="readonly" value="'+startDate+'"></span><span class="inp"><input type="" class="end_date edit_time" readonly="readonly" value = "'+endDate+'"></span></p><button class="btn_del">删除</button><input class="json_date" type="hidden" value = "'+timeData+'"></div>';
+				   		$(".setting .time_box").append(html);
+				   		$(".time_box .time_item .btn_del").bind("click",function(e){
+				   			$(this).parents(".time_item").remove();
+				   		});
+				   		$(".setting .tr_data").unbind("mousedown").bind("mousedown",function(){
+				   				var obj_tr = $(this);
+				   				var datePickerOptions_td = {
+									"startDate":s_date,
+									"endDate":e_date,
+									getValue: function(){
+										if (obj_tr.find(".start_date").val() && obj_tr.find(".end_date").val() )
+											return obj_tr.find(".start_date").val() + ' to ' + obj_tr.find(".end_date").val();
+										else
+											return '';
+									},
+									setValue: function(s,s1,s2){
+										obj_tr.find(".start_date").val(s1);
+										obj_tr.find(".end_date").val(s2);
+									}
+								}
+								obj_tr.unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+										var date = $("#dateRangePicker").val().split('to');
+									    var s_date = date[0];
+										var e_date = date[1];
+										var checked_date = new Array();
+										var other_box =obj_tr.parent().siblings();
+										var len = other_box.length;
+										for(var i=0;i<len;i++){
+											var json_check = {"startDate":other_box.eq(i).find(".start_date").val(),"endDate":other_box.eq(i).find(".end_date").val()};
+											checked_date.push(json_check);
+										}
+										console.log(checked_date);									
+										var startDate = obj.value.split('to')[0];
+			   							var endDate = obj.value.split('to')[1];
+			   							var flag = true;
+							   			console.log(checked_date);
+							   			
+							   			if(flag){
+							   				var obj = $("#quantum_list1");
+								   			if(obj.find(".pitchon")){
+								            	var timeData = obj.find(".pitchon").map(function(i,span){
+								        			return $(span).attr("title");
+								        		}).toArray().join(',');
+								            }else{
+								            	var timeData = -1;
+								            }
+								   			obj_tr.find(".start_date").val(startDate);
+									   		obj_tr.find(".end_date").val(endDate);
+									   		console.log(timeData);
+									   		console.log(obj_tr);
+									   		obj_tr.parent().find(".json_date").val(timeData);
+							   			}else{bootbox.alert("请选择正确时间!");}
+						        });
+						        obj_tr.dateRangePicker1(datePickerOptions_td);
+						        $("#quantum_list1").find("p").removeClass("pitchon");
+						        var chose_time = obj_tr.parent().find(".json_date").val();
+					        	console.log(chose_time);
+					        	if(chose_time!=-1&&chose_time!=""){
+					        		var chose_arr = chose_time.split(",");
+					        		for(var n=0;n<chose_arr.length;n++){
+					        			$("#quantum_list1 p").eq(chose_arr[n]).addClass("pitchon");
+					        		}
+					        	}
+			   				})
+			   		}else{
+			   			bootbox.alert("请选择正确时间!");
+			    	}
+				});
+				$('#setting_list').dateRangePicker1(datePickerOptions);
+			}else{
+				bootbox.alert("请选择活动周期,在进行操作!");
+			}
+		}
+	});
+	
+	if($("#divLBS").html()){
+		$('#city_custom').cxSelect({
+			selects: ['prov', 'city'],
+			required: true,
+			url:ctx+'/advertiser/main/ad/target/operator-ad-group/getLocations'
+		});
+	}
+	
+	//初始校验表单
+ 	if($("#validateForm").html()){
+ 		$('#dateRangePicker').dateRangePicker();
+ 		$("#validateForm").autovalidate();
+ 		$(".input-text").focus(function(){
+ 			$(this).parent("div.input-group").find("span.help-inline").text("").removeClass("help-inline").addClass("spanVaildate");
+ 		});
+ 	}
+	
+ 	$("#create-btn-save,#edit-btn-save").click(function(){
+ 		$("div.input-group").find("span.help-inline").text("").removeClass("help-inline").addClass("spanVaildate");
+ 		if (!$("#validateForm").validate()) {
+			return false;
+		}
+ 		var checked_date = new Array();
+		var len = $(".setting .time_item").length;
+		var jsondata = "[";
+		for(var i=0;i<len;i++){
+			if(i == 0){
+				jsondata += '{"startDate":\"'+$(".time_item").eq(i).find(".start_date").val()+'\","endDate":\"'+$(".time_item").eq(i).find(".end_date").val()+'\","dehours":\"'+$(".time_item").eq(i).find(".json_date").val()+'\"}';
+			}else{
+				jsondata += ',{"startDate":\"'+$(".time_item").eq(i).find(".start_date").val()+'\","endDate":\"'+$(".time_item").eq(i).find(".end_date").val()+'\","dehours":\"'+$(".time_item").eq(i).find(".json_date").val()+'\"}';
+			}
+		}
+		jsondata += "]";
+		$("#sdayParting").val(jsondata);
+		var falg = validateMoney();
+		if(falg == false){
+			return false;
+		}
+		//提示场景选择
+		var placelist = $("#placeDiv input[type='checkbox']:checked");
+		if(placelist.length == 0){
+			bootbox.alert("场景为必填项,请选择!");
+			return false;
+		}
+		$("#validateForm").submit();
+		return false;
+	});
+	
+	$("#create-btn-cancel,#edit-btn-cancel").click(function(){
+		window.location.href = ctx+"/advertiser/main/ad/target/operator-ad-group/list?campaignId="+$("#campaignId").val()+"&orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val();
+	});
+	
+	$("#totalBudget").blur(function(){
+		validateMoney();
+	});
+	
+	//场景
+	if($(".place-edit").html()){
+		savewifi();//获取保存的WiFi
+		setting_date();//获取排期时间
+		var place = $("#edit-place").val();
+		var authArr = place.split(",");
+		var checkboxs = $("#placeDiv input[type='checkbox']");
+		checkboxs.each(function(i){
+			for(var i = 0;i<authArr.length;i++){
+				if($(this).val() == authArr[i]){
+					$(this).attr("checked","true");
+				}
+			}
+		});
+	}
+	
+	//位置
+	if($(".position-edit").html()){
+		var position = $("#edit-position").val();
+		var authArr = position.split(",");
+		var checkboxs = $("#positionDiv input[type='checkbox']");
+		checkboxs.each(function(i){
+			for(var i = 0;i<authArr.length;i++){
+				if($(this).val() == authArr[i]){
+					$(this).attr("checked","true");
+				}
+			}
+		});
+	}
+});
+		
+function exportExcel_list(){
+	var searchValue = $("#searchValue").val();
+	if(searchValue == "请输入关键字"){
+		searchValue = "";
+	}
+	var param = "?orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val()+"&status="+$("#status").val()+"&searchValue="+searchValue;
+	$("#exportExcel").attr("href",$("#ctx").val()+"/advertiser/main/ad/target/campaign/exportDataReportExcel"+param);
+	return false;
+}
+
+function validateMoney(){
+	var reg=/^\d{1,8}\.?\d{0,2}$/;
+	var $this = $("#totalBudget");
+	if($this.val().match(reg)!=null){
+		if(($this.val().indexOf('.') == -1 && $this.val().length > 8) || $this.val() <= 0){
+			$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算金额整数位最多8位');
+			$this.parent("div").find("span.spanVaildate").html("总预算金额整数位最多8位");
+			return false;
+		}else if($this.val() > parseInt($("#budget").val())){
+			$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算不能大于订单总预算');
+			$this.parent("div").find("span.spanVaildate").html("总预算不能大于订单总预算");
+			return false;
+		}else{
+			$this.css("box-shadow","none").attr('title','');
+			$this.parent("div").find("span.spanVaildate").html("");
+		}
+	}else{
+		$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算金额整数位最多8位且最多有2位小数');
+		$this.parent("div").find("span.spanVaildate").html("总预算金额整数位最多8位且最多有2位小数");
+		return false;
+	}
+}
+
+function setting_date(){
+	var str_date = $("#sdayParting").val();
+	console.log(str_date);  
+	if(str_date!=""){
+		var js_date = $.parseJSON(str_date);
+		var html="";
+		for(var i=0;i<js_date.length;i++){
+			console.log(js_date[i].dehours);
+			html += '<div class="time_item"><p class="tr_data"><span class="inp"><input type="text" class="start_date edit_time" readonly="readonly" value="'+js_date[i].startDate+'"></span><span class="inp"><input type="text" class="end_date edit_time" readonly="readonly" value = "'+js_date[i].endDate+'"></span></p><button class="btn_del">删除</button><input class="json_date" type="hidden" value = "'+js_date[i].dehours+'"></div>'; 
+		}
+		$(".setting .time_box").append(html);
+		$(".time_box .time_item .btn_del").bind("click",function(e){
+				$(this).parents(".time_item").remove();
+			});
+		var date = $("#id-date-picker-1").val().split('to');
+		var s_date = date[0];
+		var e_date = date[1];
+		$(".setting .tr_data").unbind("mousedown").bind("mousedown",function(){
+				var obj_tr = $(this);
+				var th_date_s = $(this).find(".start_date").val();
+				var th_date_e = $(this).find(".end_date").val();
+				var datePickerOptions_td = {
+				"startDate":th_date_s,
+				"endDate":th_date_e,
+				getValue: function(){
+					if (obj_tr.find(".start_date").val() && obj_tr.find(".end_date").val() )
+						return obj_tr.find(".start_date").val() + ' to ' + obj_tr.find(".end_date").val();
+					else
+						return '';
+				},
+				setValue: function(s,s1,s2){
+					obj_tr.find(".start_date").val(s1);
+					obj_tr.find(".end_date").val(s2);
+				}
+			}
+			obj_tr.unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+				var date = $("#id-date-picker-1").val().split('to');
+				var s_date = date[0];
+				var e_date = date[1];
+				var checked_date = new Array();
+				var other_box =obj_tr.parent().siblings();
+				var len = other_box.length;
+				for(var i=0;i<len;i++){
+					var json_check = {"startDate":other_box.eq(i).find(".start_date").val(),"endDate":other_box.eq(i).find(".end_date").val()};
+					checked_date.push(json_check);
+				}
+				console.log(checked_date);									
+				var startDate = obj.value.split('to')[0];
+			   	var endDate = obj.value.split('to')[1];
+		   		var flag = true;
+		   		if(flag){
+					var obj = $("#quantum_list1");
+					if(obj.find(".pitchon")){
+						var timeData = obj.find(".pitchon").map(function(i,span){
+							return $(span).attr("title");
+						}).toArray().join(',');
+					}else{
+						var timeData = -1;
+					}
+					obj_tr.find(".start_date").val(startDate);
+					obj_tr.find(".end_date").val(endDate);
+					obj_tr.parent().find(".json_date").val(timeData);
+				}else{alert("请选择正确时间!");}
+			});
+			obj_tr.dateRangePicker1(datePickerOptions_td);
+			$("#quantum_list1").find("p").removeClass("pitchon");
+			var chose_time = obj_tr.parent().find(".json_date").val();
+			console.log(chose_time);
+			if(chose_time!=-1&&chose_time!=""){
+				var chose_arr = chose_time.split(",");
+				for(var n=0;n<chose_arr.length;n++){
+					$("#quantum_list1 p").eq(chose_arr[n]).addClass("pitchon");
+				}
+			}
+		});
+	}
+}