Browse Source

添加dsp对接的相关代码

ying.rong 9 years ago
parent
commit
02c1ef1c95

+ 55 - 0
src/main/java/com/cloudcross/ssp/base/service/IDspGenericService.java

@@ -0,0 +1,55 @@
+package com.cloudcross.ssp.base.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.cloudcross.ssp.common.consts.Status;
+import com.cloudcross.ssp.common.utils.Pager;
+
+/**
+ * 通用service定义。
+ * 
+ * @author rongying
+ * @desp 
+ * @param <T>
+ *            实体类型
+ */
+public interface IDspGenericService<T> {
+	
+	/**
+	 * 向数据库中添加一个或多个实体对象<code>T</code>。
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	boolean add(List<T> list);
+
+	/**
+	 * 编辑数据库中一个或多个实体对象<code>T</code>。
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	boolean update(List<T> list);
+	
+	/**
+	 * 根据条件查询数据库中所有符合的实体<code>T</code>对应记录并以列表返回。
+	 * 
+	 * @param map
+	 *            查询条件(dspId 或 advertiserId)
+	 * @return 返回查询到记录列表
+	 */
+	List<T> getAll(Map<String,Object> map);
+
+	/**
+	 * 根据条件查询对应的实体信息。
+	 * 
+	 * @param map
+	 *            查询条件
+	 * @return 返回查询到记录
+	 */
+	List<T> get(Map<String,Object> map);
+	
+}

+ 54 - 0
src/main/java/com/cloudcross/ssp/common/consts/FieldValidate.java

@@ -0,0 +1,54 @@
+package com.cloudcross.ssp.common.consts;
+
+/**
+ * 
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * 校验字段枚举类。
+ * 
+ */
+ 
+public enum FieldValidate {
+	
+	/**
+	 * 传入的参数判断
+	 **/
+	CHECK_DSPID_NOT_EMPTY(100, "dspid不能为空"),
+	
+	CHECK_ADVERTISERID_NOT_EMPTY(101, "广告主id不能为空"),
+	
+	CHECK_BANNERID_NOT_EMPTY(102, "创意id不能为空"),
+	
+	CHECK_TOKEN_NOT_CONFORM(103, "令牌身份不符合"),
+	
+	CHECK_PARAMDATA_EMPTY(104, "传入的参数值为空"),
+	
+	CHECK_PARAMDATA_FORMAT_ERROR(105, "传入的参数格式不是json格式"),
+	
+	CHECK_PARAMDATA_ADD_SUCCESS(200, "插入成功"),
+	
+	CHECK_PARAMDATA_ADD_REPEAT(2001, "插入重复"),
+	
+	CHECK_PARAMDATA_UPDATE_SUCCESS(200, "编辑成功"),
+	
+	CHECK_PARAMDATA_UPDATE_REPEAT(2001, "编辑重复"),
+	
+	/**
+	 * 字段属性校验
+	 **/
+	FIELD_NOT_EMPTY(201, "字段属性为必填"),
+	
+	FIELD_FORMAT_ERROR(202, "字段属性类型不符合"),
+	
+	FIELD_LENGTH_OVER(203, "字段属性长度超出了最大值");
+	
+	public final int code;
+	
+	public final String value;
+
+	private FieldValidate(int code, String value) {
+		this.code = code;
+		this.value = value;
+	}
+	
+}

+ 128 - 0
src/main/java/com/cloudcross/ssp/common/utils/FieldInfo.java

@@ -0,0 +1,128 @@
+package com.cloudcross.ssp.common.utils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.cloudcross.ssp.common.consts.FieldValidate;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * 数据库表字段信息
+ */
+
+@SuppressWarnings("serial")
+public class FieldInfo implements Serializable {
+	
+	private String columnName;//字段名
+
+	private String isNull;//是否为空
+	
+	private String dataType;//数据类型
+	
+	private Integer maxLength;//最大长度
+	
+	private Integer pointNum;//小数点
+	
+	public String getColumnName() {
+		return columnName;
+	}
+
+	public void setColumnName(String columnName) {
+		this.columnName = columnName;
+	}
+
+	public String getIsNull() {
+		return isNull;
+	}
+
+	public void setIsNull(String isNull) {
+		this.isNull = isNull;
+	}
+
+	public String getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+	
+	public Integer getMaxLength() {
+		return maxLength;
+	}
+
+	public void setMaxLength(Integer maxLength) {
+		this.maxLength = maxLength;
+	}
+
+	public Integer getPointNum() {
+		return pointNum;
+	}
+
+	public void setPointNum(Integer pointNum) {
+		this.pointNum = pointNum;
+	}
+	
+	
+	/**
+	 * 校验字段
+	 * @param fieldInfoMap 字段属性集合
+	 * @param fieldName 字段名称
+	 * @param fieldValue 字段值
+	 * @param index 数据的下标,第几条
+	 * @return 错误的信息
+	 */
+	public static Map<String,Object> validateField(Map<String,FieldInfo> fieldInfoMap,String fieldName,Object fieldValue,int index){
+		Map<String,Object> map = new HashMap<String,Object>();
+		if("NO".equals(fieldInfoMap.get(fieldName).getIsNull()) && (fieldValue == null || "".equals(fieldValue))){
+			map = getErrorMessage(FieldValidate.FIELD_NOT_EMPTY, true, fieldName, index,"error");
+		}
+		try{
+			if("String".equals(fieldInfoMap.get(fieldName).getDataType())){
+				String.valueOf(fieldValue);
+			}else if("Long".equals(fieldInfoMap.get(fieldName).getDataType())){
+				Long.valueOf(fieldValue.toString());
+			}
+		}catch(NumberFormatException e){
+			map = getErrorMessage(FieldValidate.FIELD_FORMAT_ERROR, true, fieldName, index,"error");
+		}
+		if(fieldValue.toString().length() > fieldInfoMap.get(fieldName).getMaxLength()){
+			map = getErrorMessage(FieldValidate.FIELD_LENGTH_OVER, true, fieldName, index,"error");
+		}
+		return map;		
+	}
+	
+	/**
+	 * 返回错误类型信息 {"status":2,"error":[["field":id,"index":1,] "code":100,"message":"输入的参数有误"]}
+	 * @param fieldValidate 枚举对应的code,value
+	 * @param flag 是否显示错误的字段
+	 * @param field 错误的字段
+	 * @param index 错误的数据下标
+	 * @param tab 成功或错误的标识
+	 * @return
+	 */
+	public static Map<String,Object> getErrorMessage(FieldValidate fieldValidate,boolean flag,String field,int index,String tab){
+		Map<String,Object> map = new HashMap<String,Object>();
+		Map<String,Object> errormap = new HashMap<String,Object>();
+		if("error".equals(tab)){
+			map.put("status", 1);
+			if(flag){
+				errormap.put("field", field);
+			}
+			if(index != 0){
+				errormap.put("index", index);
+			}
+		}else if("success".equals(tab)){
+			map.put("status", 0);
+			errormap.put("index", index);
+		}
+		errormap.put("code", fieldValidate.code);
+		errormap.put("message", fieldValidate.value);
+		map.put(tab, errormap);
+		return map;
+	}
+
+}
+

+ 204 - 0
src/main/java/com/cloudcross/ssp/model/DspAdvertiser.java

@@ -0,0 +1,204 @@
+package com.cloudcross.ssp.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.cloudcross.ssp.common.utils.FieldInfo;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主实体对象
+ */
+
+@SuppressWarnings("serial")
+public class DspAdvertiser implements Serializable {
+	
+	private Long dspId;//DSP厂商ID(t_dsp_agent.id)
+	
+	private Long advertiserId;//对应DSP系统的广告主id
+	
+	private Long industryId;//行业id
+
+	private String name;//广告主名称
+	
+	private String regName;//公司注册名
+	
+	private String homepage;//网址
+	
+	private String tel;//电话
+	
+	private String email;//邮箱
+	
+	private String licencePath;//营业执照路径
+	
+	private String idPath;//法人代表身份证路径
+	
+	private String orgPath;//企业机构代码路径
+	
+	private String cpiPath;//CPI文件路径
+	
+	private Integer state;//状态(0通过,1待检查,2检查未通过)
+	
+	private String memo;//备注
+
+	private Date updated;//最后更新时间
+
+	public Long getDspId() {
+		return dspId;
+	}
+
+	public void setDspId(Long dspId) {
+		this.dspId = dspId;
+	}
+	
+	public Long getAdvertiserId() {
+		return advertiserId;
+	}
+
+	public void setAdvertiserId(Long advertiserId) {
+		this.advertiserId = advertiserId;
+	}
+
+	public Long getIndustryId() {
+		return industryId;
+	}
+
+	public void setIndustryId(Long industryId) {
+		this.industryId = industryId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getRegName() {
+		return regName;
+	}
+
+	public void setRegName(String regName) {
+		this.regName = regName;
+	}
+
+	public String getHomepage() {
+		return homepage;
+	}
+
+	public void setHomepage(String homepage) {
+		this.homepage = homepage;
+	}
+
+	public String getTel() {
+		return tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getLicencePath() {
+		return licencePath;
+	}
+
+	public void setLicencePath(String licencePath) {
+		this.licencePath = licencePath;
+	}
+
+	public String getIdPath() {
+		return idPath;
+	}
+
+	public void setIdPath(String idPath) {
+		this.idPath = idPath;
+	}
+
+	public String getOrgPath() {
+		return orgPath;
+	}
+
+	public void setOrgPath(String orgPath) {
+		this.orgPath = orgPath;
+	}
+
+	public String getCpiPath() {
+		return cpiPath;
+	}
+
+	public void setCpiPath(String cpiPath) {
+		this.cpiPath = cpiPath;
+	}
+
+	public Integer getState() {
+		return state;
+	}
+
+	public void setState(Integer state) {
+		this.state = state;
+	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	@Override
+	public String toString() {
+		return "DspAdvertiser [dspId=" + dspId + ", advertiserId=" + advertiserId + ", industryId="
+				+ industryId + ", name=" + name + ", regName=" + regName + ", "
+				+ "homepage=" + homepage + ", tel=" + tel + ", " + "email=" 
+				+ email + ", licencePath=" + licencePath + ", idPath=" + idPath
+				+ ", orgPath=" + orgPath + ", cpiPath=" + cpiPath + ", state=" + state
+				+ ", memo=" + memo + ", updated=" + updated + "]";
+	}
+	
+	/**
+	 * 组装t_dsp_advertiser表结构
+	 * @return
+	 */
+	public static Map<String,FieldInfo> getFieldInfoForDspAdvertiser(){
+		Map<String,FieldInfo> map = new HashMap<String,FieldInfo>();
+		String[] columnNames = {"dspId","advertiserId","industryId","name","regName","homepage","tel","email","licencePath","idPath","orgPath","cpiPath","state","memo","updated"};
+		String[] isNulls = {"NO","NO","NO","NO","YES","YES","YES","YES","YES","YES","YES","YES","NO","YES","NO"};
+		String[] dataTypes= {"Long","Long","Long","String","String","String","String","String","String","String","String","String","Integer","String","Date"};
+		int[] maxLengths = {11,11,11,255,255,255,255,255,255,255,255,255,3,255,0};
+		for (int i = 0, l = columnNames.length; i<l; i++) {
+			FieldInfo field = new FieldInfo();
+			field.setColumnName(columnNames[i]);
+			field.setIsNull(isNulls[i]);
+			field.setDataType(dataTypes[i]);
+			field.setMaxLength(maxLengths[i]);
+			field.setPointNum(0);
+			map.put(columnNames[i], field);
+		}
+		return map;
+	}
+
+}
+

+ 109 - 0
src/main/java/com/cloudcross/ssp/model/DspAgent.java

@@ -0,0 +1,109 @@
+package com.cloudcross.ssp.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.cloudcross.ssp.common.utils.FieldInfo;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp账户实体对象
+ */
+
+@SuppressWarnings("serial")
+public class DspAgent implements Serializable {
+	
+	private Long id;//dsp账号id
+
+	private String token;//令牌
+	
+	private String name;//dsp账户名
+	
+	private String ip;//ip地址
+	
+	private Long port;//端口
+
+	private Date updated;//最后更新时间
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public Long getPort() {
+		return port;
+	}
+
+	public void setPort(Long port) {
+		this.port = port;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	@Override
+	public String toString() {
+		return "DspAgent [id=" + id + ", token=" + token + ", name=" + name + ","
+				+ " ip=" + ip + ", port=" + port + " updated=" + updated + "]";
+	}
+	
+	/**
+	 * 组装t_dsp_agent表结构
+	 * @return
+	 */
+	public static Map<String,FieldInfo> getFieldInfoForDspAgent(){
+		Map<String,FieldInfo> map = new HashMap<String,FieldInfo>();
+		String[] columnNames = {"id","token","name","ip","port"};
+		String[] dataTypes= {"Long","String","String","String","Long"};
+		int[] maxLengths = {11,255,255,255,11};
+		for (int i = 0, l = columnNames.length; i<l; i++) {
+			FieldInfo field = new FieldInfo();
+			field.setColumnName(columnNames[i]);
+			field.setIsNull("NO");
+			field.setDataType(dataTypes[i]);
+			field.setMaxLength(maxLengths[i]);
+			field.setPointNum(0);
+			map.put(columnNames[i], field);
+		}
+		return map;
+	}
+
+}
+

+ 159 - 0
src/main/java/com/cloudcross/ssp/model/DspBanner.java

@@ -0,0 +1,159 @@
+package com.cloudcross.ssp.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import com.cloudcross.ssp.common.utils.FieldInfo;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主-创意实体对象
+ */
+
+@SuppressWarnings("serial")
+public class DspBanner implements Serializable {
+	
+	private Long id;//创意id
+	
+	private Long dspId;//dspid(t_dsp_agent.id)
+	
+	private Long advertiserId;//广告主id(t_dsp_advertiser.id)
+	
+	private String path;//文件路径
+	
+	private Long height;//高
+	
+	private Long width;//宽
+	
+	private Long rheight;//比率高
+	
+	private Long rwidth;//比率宽
+	
+	private Integer state;//状态(0通过,1待检查,2检查未通过)
+	
+	private String memo;//备注
+
+	private Date updated;//最后更新时间
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getDspId() {
+		return dspId;
+	}
+
+	public void setDspId(Long dspId) {
+		this.dspId = dspId;
+	}
+
+	public Long getAdvertiserId() {
+		return advertiserId;
+	}
+
+	public void setAdvertiserId(Long advertiserId) {
+		this.advertiserId = advertiserId;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public void setPath(String path) {
+		this.path = path;
+	}
+
+	public Long getHeight() {
+		return height;
+	}
+
+	public void setHeight(Long height) {
+		this.height = height;
+	}
+
+	public Long getWidth() {
+		return width;
+	}
+
+	public void setWidth(Long width) {
+		this.width = width;
+	}
+	
+	public Long getRheight() {
+		return rheight;
+	}
+
+	public void setRheight(Long rheight) {
+		this.rheight = rheight;
+	}
+
+	public Long getRwidth() {
+		return rwidth;
+	}
+
+	public void setRwidth(Long rwidth) {
+		this.rwidth = rwidth;
+	}
+
+	public Integer getState() {
+		return state;
+	}
+
+	public void setState(Integer state) {
+		this.state = state;
+	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	@Override
+	public String toString() {
+		return "DspBanner [id=" + id + ", dspId=" + dspId + " advertiserId=" + advertiserId 
+				+ ", path=" + path + ", height=" + height + ", width=" + width + ", "
+				+ ", rheight=" + height + ", rwidth=" + width + ", "
+				+ "state=" + state + ", memo=" + memo + ", " + "updated=" + updated + "]";
+	}
+	
+	/**
+	 * 组装t_dsp_banner表结构
+	 * @return
+	 */
+	public static Map<String,FieldInfo> getFieldInfoForDspBanner(){
+		Map<String,FieldInfo> map = new HashMap<String,FieldInfo>();
+		String[] columnNames = {"id","dspId","advertiserId","path","height","width","rheight","rwidth","state","memo","updated"};
+		String[] isNulls = {"NO","NO","NO","NO","NO","NO","NO","NO","NO","YES","NO"};
+		String[] dataTypes= {"Long","Long","Long","String","Long","Long","Long","Long","Integer","String","Date"};
+		int[] maxLengths = {11,11,11,255,11,11,11,11,3,255,0};
+		for (int i = 0, l = columnNames.length; i<l; i++) {
+			FieldInfo field = new FieldInfo();
+			field.setColumnName(columnNames[i]);
+			field.setIsNull(isNulls[i]);
+			field.setDataType(dataTypes[i]);
+			field.setMaxLength(maxLengths[i]);
+			field.setPointNum(0);
+			map.put(columnNames[i], field);
+		}
+		return map;
+	}
+
+}
+

+ 94 - 0
src/main/java/com/cloudcross/ssp/model/mapper/dspAdvertiser.sql.xml

@@ -0,0 +1,94 @@
+<?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="dspAdvertiserSqlMapper">
+
+	<sql id="base_column">
+		dsp_id as dspId,advertiser_id as advertiserId,industry_id as industryId,name,reg_name as regName,
+		homepage,tel,email,licence_path as licencePath,id_path as idPath,org_path as orgPath,cpi_path as cpiPath,
+		state,memo,updated
+	</sql>
+
+	<insert id="add" parameterType="java.util.List">
+		insert into t_dsp_advertiser(dsp_id,advertiser_id,industry_id,name,reg_name,homepage,tel,email,licence_path,
+		id_path,org_path,cpi_path,state,memo,updated) values
+		<foreach collection="dspAdvertiserList" item="item" index="index" separator=",">
+	    	( #{item.dspId},#{item.advertiserId}, #{item.industryId},#{item.name},#{item.regName},#{item.homepage},#{item.tel},
+	    	 #{item.email}, #{item.licencePath},#{item.idPath}, #{item.orgPath},#{item.cpiPath}, 1,
+	    	 "", NOW() )
+        </foreach>
+	</insert>
+	
+	<update id="update" parameterType="java.util.List">
+	 	<foreach collection="dspAdvertiserList" item="item" index="index" open="" close="" separator=";">
+	        update t_dsp_advertiser set 
+            <trim suffix="" suffixOverrides=",">
+	            <if test="item.industryId != null and item.industryId != '' ">
+	                industry_id = #{item.industryId},
+	            </if>
+	            <if test="item.name != null and item.name != '' ">
+	                name = #{item.name},
+	            </if>
+	           	<if test="item.regName != null and item.regName != '' ">
+	                reg_name = #{item.regName},
+	            </if>
+	            <if test="item.homepage != null and item.homepage != '' ">
+	                homepage = #{item.homepage},
+	            </if>
+	            <if test="item.tel != null and item.tel != '' ">
+	                tel = #{item.tel},
+	            </if>
+	            <if test="item.email != null and item.email != '' ">
+	                email = #{item.email},
+	            </if>
+	            <if test="item.licencePath != null and item.licencePath != '' ">
+	                licence_path = #{item.licencePath},
+	            </if>
+	            <if test="item.idPath != null and item.idPath != '' ">
+	                id_path = #{item.idPath},
+	            </if>
+	            <if test="item.orgPath != null and item.orgPath != '' ">
+	                org_path = #{item.orgPath},
+	            </if>
+	            <if test="item.cpiPath != null and item.cpiPath != '' ">
+	                cpi_path = #{item.cpiPath},
+	            </if>
+	            <if test="item.state != null and item.state != '' ">
+	                state = #{item.state},
+	            </if>
+	            <if test="item.memo != null and item.memo != '' ">
+	                memo = #{item.memo},
+	            </if>
+	            updated = NOW()
+            	where dsp_id = #{item.dspId} and advertiser_id = #{item.advertiserId}
+        	</trim>
+    	</foreach>
+	</update>
+	
+	<select id="getAll" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.DspAdvertiser">
+		select <include refid="base_column"/> from t_dsp_advertiser
+		where dsp_id = #{dspId}
+	</select>
+	
+	<select id="get" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.DspAdvertiser">
+		select 
+		<include refid="base_column"/>
+		from t_dsp_advertiser where advertiser_id in
+		<foreach item="advertiserId" collection="advertiserIdList" open="(" separator="," close=")">
+			#{advertiserId}
+		</foreach>
+		and dsp_id = #{dspId}
+	</select>
+	
+	<select id="queryState" parameterType="java.util.Map" resultType="java.util.Map">
+		select dsp_id as dspId,advertiser_id as advertiserId,state,memo as refuseReason
+		from t_dsp_advertiser where advertiser_id in
+		<foreach item="advertiserId" collection="advertiserIdList" open="(" separator="," close=")">
+			#{advertiserId}
+		</foreach>
+		and dsp_id = #{dspId}
+	</select>
+	
+	<select id="isRepeat" parameterType="java.util.Map" resultType="java.lang.Long">
+		select count(*) from t_dsp_advertiser where dsp_id = #{dspId} and advertiser_id = #{advertiserId}
+	</select>
+</mapper>

+ 47 - 0
src/main/java/com/cloudcross/ssp/model/mapper/dspAgent.sql.xml

@@ -0,0 +1,47 @@
+<?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="dspAgentSqlMapper">
+
+	<sql id="base_column">
+		id,token,name,ip,port,updated
+	</sql>
+
+	<insert id="add" parameterType="java.util.List">
+		insert into t_dsp_agent(token,name,ip,port,updated) values
+		<foreach collection="dspAgentList" item="item" index="index" separator=",">
+	    	( #{item.token},#{item.name}, #{item.ip}, #{item.port}, NOW() )
+        </foreach>
+	</insert>
+	
+	<update id="update" parameterType="java.util.List">
+	 	<foreach collection="dspAgentList" item="item" index="index" open="" close="" separator=";">
+	        update t_dsp_agent set token = #{item.token}, name = #{item.name},ip = #{item.ip},port = #{item.port},updated = NOW()
+	        where id = #{item.id}
+         </foreach>
+	</update>
+	
+	<select id="getAll" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.DspAgent">
+		select <include refid="base_column"/> from t_dsp_agent
+	</select>
+	
+	<select id="get" parameterType="java.util.List" resultType="com.cloudcross.ssp.model.DspAgent">
+		select 
+		<include refid="base_column"/>
+		from t_dsp_agent where id in
+		<foreach item="id" collection="idList" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</select>
+	
+	<select id="isCheck" parameterType="com.cloudcross.ssp.model.DspAgent" resultType="java.lang.Integer">
+		select count(*) from t_dsp_agent where name = #{name} and token = #{token}
+	</select>
+	
+	<select id="selectMaxId" parameterType="java.util.Map" resultType="java.lang.Long">
+		select id from t_dsp_agent where token = #{token} and name = #{name}
+		<if test="dspId != null and dspId != '' ">
+	    	and id != #{dspId}
+	    </if>
+	</select>
+	
+</mapper>

+ 74 - 0
src/main/java/com/cloudcross/ssp/model/mapper/dspBanner.sql.xml

@@ -0,0 +1,74 @@
+<?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="dspBannerSqlMapper">
+
+	<sql id="base_column">
+		id,dsp_id as dspId,advertiser_id as advertiserId,path,height,width,rheight,rwidth,state,memo,updated
+	</sql>
+
+	<insert id="add" parameterType="java.util.List">
+		insert into t_dsp_banner(dsp_id,advertiser_id,path,height,width,rheight,rwidth,state,memo,updated) values
+		<foreach collection="dspBannerList" item="item" index="index" separator=",">
+	    	( #{item.dspId}, #{item.advertiserId}, #{item.path}, #{item.height}, #{item.width}, 
+	    		#{item.rheight}, #{item.rwidth}, 1, "", NOW() )
+        </foreach>
+	</insert>
+	
+	<update id="update" parameterType="java.util.List">
+	 	<foreach collection="dspBannerList" item="item" index="index" open="" close="" separator=";">
+	        update t_dsp_banner set path = #{item.path},height = #{item.height},width = #{item.width},
+	        rheight = #{item.rheight}, rwidth = #{item.rwidth}, state = #{item.state},
+	        <if test="item.memo != null and item.memo != '' ">
+	        	memo = #{item.memo},
+	       	</if>
+	        updated = NOW()
+           	where id=#{item.id} and dsp_id = #{item.dspId} and advertiser_id = #{item.advertiserId}
+    	</foreach>
+	</update>
+	
+	<select id="getAll" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.DspBanner">
+		select <include refid="base_column"/>
+		from t_dsp_banner where advertiser_id in
+		<foreach item="advertiserId" collection="advertiserIdList" open="(" separator="," close=")">
+			#{advertiserId}
+		</foreach>
+		and dsp_id = #{dspId}
+	</select>
+	
+	<select id="get" parameterType="java.util.Map" resultType="com.cloudcross.ssp.model.DspBanner">
+		select 
+		<include refid="base_column"/>
+		from t_dsp_banner where id in
+		<foreach item="bannerId" collection="bannerIdList" open="(" separator="," close=")">
+			#{bannerId}
+		</foreach>
+		<if test="dspId != null and dspId != '' ">
+	    	and dsp_id = #{dspId}
+	    </if>
+	    <if test="advertiserId != null and advertiserId != '' ">
+	    	and advertiser_id = #{advertiserId}
+	    </if>
+	</select>
+	
+	<select id="selectMaxId" parameterType="java.util.Map" resultType="java.lang.Long">
+		select id from t_dsp_banner where dsp_id = #{dspId} and advertiser_id = #{advertiserId}
+		<if test="bannerId != null and bannerId != '' ">
+	    	and id != #{bannerId}
+	    </if>
+	</select>
+	
+	<select id="queryState" parameterType="java.util.Map" resultType="java.util.Map">
+		select id as bannerId,dsp_id as dspId,advertiser_id as advertiserId,state,memo as refuseReason
+		from t_dsp_banner where id in
+		<foreach item="bannerId" collection="bannerIdList" open="(" separator="," close=")">
+			#{bannerId}
+		</foreach>
+		<if test="dspId != null and dspId != '' ">
+	    	and dsp_id = #{dspId}
+	    </if>
+	    <if test="advertiserId != null and advertiserId != '' ">
+	    	and advertiser_id = #{advertiserId}
+	    </if>
+	</select>
+	
+</mapper>

+ 35 - 0
src/main/java/com/cloudcross/ssp/service/IDspAdvertiserService.java

@@ -0,0 +1,35 @@
+package com.cloudcross.ssp.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.cloudcross.ssp.base.service.IDspGenericService;
+import com.cloudcross.ssp.model.DspAdvertiser;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主服务接口
+ */
+
+public interface IDspAdvertiserService extends IDspGenericService<DspAdvertiser>{
+	
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserId
+	 * @return 下一个id的值
+	 */
+	public Long isRepeat(Map<String,Long> paramMap);
+	
+	/**
+	 * 批量查询广告主资质审核状态
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserIds
+	 * @return 符合条件的记录
+	 */
+	public List<Map<String,Object>> queryState(Map<String,Object> paramMap);
+	
+}

+ 34 - 0
src/main/java/com/cloudcross/ssp/service/IDspAgentService.java

@@ -0,0 +1,34 @@
+package com.cloudcross.ssp.service;
+
+import java.util.Map;
+
+import com.cloudcross.ssp.base.service.IDspGenericService;
+import com.cloudcross.ssp.model.DspAgent;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp账户服务接口
+ */
+
+public interface IDspAgentService extends IDspGenericService<DspAgent>{
+	
+	/**
+	 * 验证dsp账户是否符合
+	 * 
+	 * @param dspAgent
+	 * 				实体对象
+	 * @return 0代表不符合,否则代表符合。
+	 */
+	public int isCheck(DspAgent dspAgent);
+	
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				名称和token
+	 * @return 下一个id的值
+	 */
+	public Long selectMaxId(Map<String,Object> paramMap);
+	
+}

+ 35 - 0
src/main/java/com/cloudcross/ssp/service/IDspBannerService.java

@@ -0,0 +1,35 @@
+package com.cloudcross.ssp.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.cloudcross.ssp.base.service.IDspGenericService;
+import com.cloudcross.ssp.model.DspBanner;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主-创意服务接口
+ */
+
+public interface IDspBannerService extends IDspGenericService<DspBanner>{
+	
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserId
+	 * @return 下一个id的值
+	 */
+	public Long selectMaxId(Map<String,Long> paramMap);
+	
+	/**
+	 * 批量查询创意审核的状态
+	 * 
+	 * @param paramMap
+	 * 				bannerIds
+	 * @return 符合条件的记录
+	 */
+	public List<Map<String,Object>> queryState(Map<String,Object> paramMap);
+	
+}

+ 103 - 0
src/main/java/com/cloudcross/ssp/service/impl/DspAdvertiserService.java

@@ -0,0 +1,103 @@
+package com.cloudcross.ssp.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.cloudcross.ssp.base.dao.GenericIBatisDao;
+import com.cloudcross.ssp.common.utils.MapBuilder;
+import com.cloudcross.ssp.model.DspAdvertiser;
+import com.cloudcross.ssp.service.IDspAdvertiserService;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主服务接口实现
+ */
+
+@Service
+public class DspAdvertiserService implements IDspAdvertiserService{
+	
+	@Autowired
+	private GenericIBatisDao myBatisDao;
+
+	/**
+	 * 添加dsp对应的广告主
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean add(List<DspAdvertiser> list) {
+		myBatisDao.save("dspAdvertiserSqlMapper.add", MapBuilder.create(HashMap.class)
+				.add("dspAdvertiserList",list).map());
+		return true;
+	}
+
+	/**
+	 * 编辑dsp对应的广告主
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean update(List<DspAdvertiser> list) {
+		myBatisDao.save("dspAdvertiserSqlMapper.update", MapBuilder.create(HashMap.class)
+				.add("dspAdvertiserList",list).map());
+		return true;
+	}
+
+	/**
+	 * 获取dsp对应的所有广告主
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspAdvertiser> getAll(Map<String, Object> map) {
+		return myBatisDao.getList("dspAdvertiserSqlMapper.getAll", map);
+	}
+
+	/**
+	 * 根据条件获取对应的广告主
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspAdvertiser> get(Map<String, Object> map) {
+		return myBatisDao.getList("dspAdvertiserSqlMapper.get", map);
+	}
+
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserId
+	 * @return 下一个id的值
+	 */
+	@Override
+	public Long isRepeat(Map<String, Long> paramMap) {
+		// TODO Auto-generated method stub
+		return myBatisDao.get("dspAdvertiserSqlMapper.isRepeat",paramMap);
+	}
+	
+	/**
+	 * 批量查询广告主资质审核状态
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserIds
+	 * @return 符合条件的记录
+	 */
+	public List<Map<String,Object>> queryState(Map<String,Object> paramMap){
+		return myBatisDao.getList("dspAdvertiserSqlMapper.queryState",paramMap);
+	}
+
+}

+ 107 - 0
src/main/java/com/cloudcross/ssp/service/impl/DspAgentService.java

@@ -0,0 +1,107 @@
+package com.cloudcross.ssp.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.cloudcross.ssp.base.dao.GenericIBatisDao;
+import com.cloudcross.ssp.common.utils.MapBuilder;
+import com.cloudcross.ssp.model.DspAgent;
+import com.cloudcross.ssp.service.IDspAgentService;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp账户服务接口实现
+ */
+
+@Service
+public class DspAgentService implements IDspAgentService{
+	
+	@Autowired
+	private GenericIBatisDao myBatisDao;
+
+	/**
+	 * 批量添加dsp账户
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean add(List<DspAgent> list) {
+		myBatisDao.save("dspAgentSqlMapper.add", MapBuilder.create(HashMap.class)
+				.add("dspAgentList",list).map());
+		return true;
+	}
+	
+	/**
+	 * 批量编辑dsp账户
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean update(List<DspAgent> list) {
+		myBatisDao.save("dspAgentSqlMapper.update", MapBuilder.create(HashMap.class)
+				.add("dspAgentList",list).map());
+		return true;
+	}
+
+	/**
+	 * 获取所有dsp账户
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspAgent> getAll(Map<String, Object> map) {
+		return myBatisDao.getList("dspAgentSqlMapper.getAll", map);
+	}
+
+	/**
+	 * 根据id获取对应的dsp账户
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspAgent> get(Map<String, Object> map) {
+		@SuppressWarnings("unchecked")
+		List<Long> idList = (List<Long>) map.get("idList");
+		return myBatisDao.getList("dspAgentSqlMapper.get", MapBuilder.create(HashMap.class)
+				.add("idList",idList).map());
+	}
+
+	/**
+	 * 验证dsp账户是否符合
+	 * 
+	 * @param dspAgent
+	 * 				实体对象
+	 * @return 0代表不符合,否则代表符合。
+	 */
+	@Override
+	public int isCheck(DspAgent dspAgent) {
+		return myBatisDao.get("dspAgentSqlMapper.isCheck", dspAgent);
+	}
+
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				名称和token
+	 * @return 下一个id的值
+	 */
+	@Override
+	public Long selectMaxId(Map<String,Object> paramMap) {
+		// TODO Auto-generated method stub
+		return myBatisDao.get("dspAgentSqlMapper.selectMaxId",paramMap);
+	}
+
+}

+ 103 - 0
src/main/java/com/cloudcross/ssp/service/impl/DspBannerService.java

@@ -0,0 +1,103 @@
+package com.cloudcross.ssp.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.cloudcross.ssp.base.dao.GenericIBatisDao;
+import com.cloudcross.ssp.common.utils.MapBuilder;
+import com.cloudcross.ssp.model.DspBanner;
+import com.cloudcross.ssp.service.IDspBannerService;
+
+/**
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ * dsp-广告主-创意服务接口实现
+ */
+
+@Service
+public class DspBannerService implements IDspBannerService{
+	
+	@Autowired
+	private GenericIBatisDao myBatisDao;
+
+	/**
+	 * 添加dsp广告主对应的创意
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean add(List<DspBanner> list) {
+		myBatisDao.save("dspBannerSqlMapper.add", MapBuilder.create(HashMap.class)
+				.add("dspBannerList",list).map());
+		return true;
+	}
+
+	/**
+	 * 编辑dsp广告主对应的创意
+	 * 
+	 * @param list
+	 *            实体对象
+	 * @return <code>true</code>代表成功,否则代表失败。
+	 */
+	@Override
+	public boolean update(List<DspBanner> list) {
+		myBatisDao.save("dspBannerSqlMapper.update", MapBuilder.create(HashMap.class)
+				.add("dspBannerList",list).map());
+		return true;
+	}
+
+	/**
+	 * 获取dsp广告主对应的所有创意
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspBanner> getAll(Map<String, Object> map) {
+		return myBatisDao.getList("dspBannerSqlMapper.getAll", map);
+	}
+
+	/**
+	 * 根据条件获取对应的创意
+	 * 
+	 * @param map
+	 *            实体对象
+	 * @return 符合条件的列表记录
+	 */
+	@Override
+	public List<DspBanner> get(Map<String, Object> map) {
+		return myBatisDao.getList("dspBannerSqlMapper.get", map);
+	}
+	
+	/**
+	 * 查询最大的id - 插入时获取
+	 * 
+	 * @param paramMap
+	 * 				dspId和advertiserId
+	 * @return 下一个id的值
+	 */
+	@Override
+	public Long selectMaxId(Map<String, Long> paramMap) {
+		// TODO Auto-generated method stub
+		return myBatisDao.get("dspBannerSqlMapper.selectMaxId",paramMap);
+	}
+	
+	/**
+	 * 批量查询创意审核的状态
+	 * 
+	 * @param paramMap
+	 * 				bannerIds
+	 * @return 符合条件的记录
+	 */
+	public List<Map<String,Object>> queryState(Map<String,Object> paramMap){
+		return myBatisDao.getList("dspBannerSqlMapper.queryState",paramMap);
+	}
+
+}

+ 329 - 0
src/main/java/com/cloudcross/ssp/web/dsp/DspAdvertiserController.java

@@ -0,0 +1,329 @@
+package com.cloudcross.ssp.web.dsp;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.cloudcross.ssp.base.web.SimpleController;
+import com.cloudcross.ssp.common.consts.FieldValidate;
+import com.cloudcross.ssp.common.utils.Common;
+import com.cloudcross.ssp.common.utils.FieldInfo;
+import com.cloudcross.ssp.model.DspAdvertiser;
+import com.cloudcross.ssp.model.Log;
+import com.cloudcross.ssp.service.IDspAdvertiserService;
+import com.cloudcross.ssp.service.ILogService;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 
+ * 类名称:DspAdvertiserController
+ * 类描述:dsp-广告主
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ *
+ */
+
+@Controller
+@RequestMapping("/dsp/main/dsp-advertiser")
+public class DspAdvertiserController extends SimpleController{
+	
+	@SuppressWarnings("unused")
+	private static final Logger LOG = Logger.getLogger(DspAdvertiserController.class);
+	
+	@Autowired
+	private IDspAdvertiserService dspAdvertiserService;
+	
+	@Autowired
+	private ILogService logService;
+	
+	/**
+	 * 批量添加广告主
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/add")
+	public @ResponseBody List<Map<String,Object>> add(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspAdvertiser> list = new ArrayList<DspAdvertiser>();
+		String dspAdvertiserList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspAdvertiser.getFieldInfoForDspAdvertiser();
+		if(dspAdvertiserList != null && !"".equals(dspAdvertiserList)){
+			Map<String,Object> mapObj = this.getDspAdvertiserList(dspAdvertiserList, result, list, fieldInfoMap,"add");
+			list = (List<DspAdvertiser>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspAdvertiserService.add(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "add");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;		
+	}
+	
+	/**
+	 * 批量编辑广告主
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/update")
+	public @ResponseBody List<Map<String,Object>> update(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspAdvertiser> list = new ArrayList<DspAdvertiser>();
+		String dspAdvertiserList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspAdvertiser.getFieldInfoForDspAdvertiser();
+		if(dspAdvertiserList != null && !"".equals(dspAdvertiserList)){
+			Map<String,Object> mapObj = this.getDspAdvertiserList(dspAdvertiserList, result, list, fieldInfoMap,"edit");
+			list = (List<DspAdvertiser>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspAdvertiserService.update(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "add");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;
+	}
+	
+	/**
+	 * 查询dsp账户下所有广告主
+	 * @param paramMap 参数
+	 * @return
+	 */
+	@RequestMapping("/getAll")
+	public @ResponseBody List<DspAdvertiser> getAll(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspAdvertiser> result = new ArrayList<DspAdvertiser>();
+		if(paramMap.get("dspId") != null && !"".equals(paramMap.get("dspId"))){
+			result = dspAdvertiserService.getAll(paramMap);
+		}
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询广告主账户
+	 * 
+	 * @param paramMap 参数
+	 * 				advertiserIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/get")
+	public @ResponseBody List<DspAdvertiser> get(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspAdvertiser> result = new ArrayList<DspAdvertiser>();
+		if(paramMap.get("dspId") != null && !"".equals(paramMap.get("dspId")) &&
+				paramMap.get("advertiserIds") != null && !"".equals(paramMap.get("advertiserIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("advertiserIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("advertiserIdList", list);
+			result = dspAdvertiserService.get(paramMap);
+		}
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询状态
+	 * 
+	 * @param paramMap 参数
+	 * 				advertiserIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/queryState")
+	public @ResponseBody List<Map<String,Object>> queryState(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		if(paramMap.get("dspId") != null && !"".equals(paramMap.get("dspId")) &&
+				paramMap.get("advertiserIds") != null && !"".equals(paramMap.get("advertiserIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("advertiserIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("advertiserIdList", list);
+			result = dspAdvertiserService.queryState(paramMap);
+			for (int i = 0, l = result.size(); i < l; i++) {
+				Map<String,Object> map = result.get(i);
+				if(Integer.parseInt(map.get("state").toString()) == 0){
+					map.put("stateValue", "通过");
+				}else if(Integer.parseInt(map.get("state").toString()) == 1){
+					map.put("stateValue", "待检查");
+				}else if(Integer.parseInt(map.get("state").toString()) == 2){
+					map.put("stateValue", "检查未通过");
+				}
+			}
+		}
+		return result;		
+	}
+	
+	/**
+	 * 解析传递的数据
+	 * @param dspAdvertiserList 广告主数据集合
+	 * @param result 记录的错误描述结果
+	 * @param list 没有问题的数据集合
+	 * @param fieldInfoMap 字段属性
+	 * @return tab 标识:添加或编辑
+	 */
+	private Map<String,Object> getDspAdvertiserList(String dspAdvertiserList, List<Map<String,Object>> result,
+			List<DspAdvertiser> list, Map<String, FieldInfo> fieldInfoMap, String tab){
+		Map<String,Object> mapObj = new HashMap<String,Object>();
+		try {
+			//解析JSONArray
+			JSONArray jsonArray = JSONArray.fromObject(dspAdvertiserList);
+			for (int i = 0, l = jsonArray.size(); i < l; i++) {
+				boolean flag = false;
+				JSONObject obj = jsonArray.getJSONObject(i);
+				if(!obj.containsKey("dspId")){//没有dspId这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_DSPID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				if(!obj.containsKey("advertiserId")){//没有advertiserId这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_ADVERTISERID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				this.addNotEmptyField(obj);//如果必填字段没有传递,手动添加必填字段,值为空
+				@SuppressWarnings("unchecked")
+				Iterator<String> itt = obj.keys();
+				while (itt.hasNext()) {
+	                String key = itt.next().toString();  
+	                Object value = obj.getString(key);
+	                Map<String,Object> map = FieldInfo.validateField(fieldInfoMap, key, value, (i+1));
+	                if(!map.isEmpty()){
+	                	flag = true;
+	                	result.add(map);
+	                }
+	            }
+				if(!flag){
+					if("add".equals(tab)){
+						Long count = this.getDataMaxId(Long.valueOf(obj.get("dspId").toString()), Long.valueOf(obj.get("advertiserId").toString()));
+						if(count > 0){
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_REPEAT,false,null,(i+1),"error"));
+						}else{
+							list.add((DspAdvertiser)JSONObject.toBean(obj,DspAdvertiser.class));
+	                		result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_SUCCESS,false,null,(i+1),"success"));
+						}
+					}
+					else{
+                		list.add((DspAdvertiser)JSONObject.toBean(obj,DspAdvertiser.class));
+                		result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_SUCCESS,false,null,(i+1),"success"));
+                	}
+				}
+			}
+		}catch (JSONException e) {
+			// TODO Auto-generated catch block
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
+		}
+		mapObj.put("result", result);
+		mapObj.put("list", list);
+		return mapObj;
+	}
+	
+	/**
+	 * 添加操作的日志信息
+	 * @param request
+	 * @param list 数据集合
+	 * @param tab 标识:添加或编辑
+	 */
+	private void addLog(HttpServletRequest request, List<DspAdvertiser> list, String tab){
+		/*** 新增日志 ***/
+		JSONArray jsonArray = JSONArray.fromObject(list);
+		for (int i = 0, l = jsonArray.size(); i < l; i++) {
+			JSONObject obj = jsonArray.getJSONObject(i);
+			Log log = new Log();
+			//对应模块
+			log.setModule("DspAdvertiser");
+			//对应表名
+			log.setTableName("t_dsp_advertiser");
+			//增加对应的id
+			log.setRecordId(Long.valueOf(obj.get("advertiserId").toString()));
+			if("add".equals(tab)){
+				//对应操作类型
+				log.setActionType("新增");
+				//对应的操作
+				log.setAction("新增了一个广告主:" + obj.get("name").toString());
+			}else if("edit".equals(tab)){
+				
+				//对应操作类型
+				log.setActionType("编辑");
+				//对应的操作
+				log.setAction("编辑原有的广告主为:" + obj.get("name").toString());
+			}
+			//下面这几个字段目前后端数据没有得到。所以仅作测试用!
+			log.setActionTime("100");
+			log.setAccountId(new Long(getLoginUser().getId()));
+			log.setUserIp(Common.toIpAddr(request));
+			log.setAccountName(getLoginUser().getAccountName());
+			logService.add(log);
+		}
+	}
+	
+	/**
+	 * 获取最大的id,根据条件查询
+	 * @param dspId
+	 * @param advertiserId
+	 * @return 返回查询的值
+	 */
+	private Long getDataMaxId(Long dspId,Long advertiserId){
+		Map<String,Long> repeatmap = new HashMap<String,Long>();
+    	repeatmap.put("dspId", dspId);
+		repeatmap.put("advertiserId", advertiserId);
+    	Long id = dspAdvertiserService.isRepeat(repeatmap);
+		return id;
+	}
+	
+	/**
+	 * 添加必填字段,以防对方没有传递此参数
+	 * @param obj
+	 */
+	private void addNotEmptyField(JSONObject obj){
+		if(!obj.containsKey("industryId")){
+			obj.put("industryId", "");
+		}
+		if(!obj.containsKey("name")){
+			obj.put("name", "");
+		}
+		if(!obj.containsKey("regName")){
+			obj.put("regName", "");
+		}
+		if(!obj.containsKey("homepage")){
+			obj.put("homepage", "");
+		}
+		if(!obj.containsKey("tel")){
+			obj.put("tel", "");
+		}
+		if(!obj.containsKey("email")){
+			obj.put("email", "");
+		}
+		if(!obj.containsKey("licencePath")){
+			obj.put("licencePath", "");
+		}
+		if(!obj.containsKey("idPath")){
+			obj.put("idPath", "");
+		}
+		if(!obj.containsKey("orgPath")){
+			obj.put("orgPath", "");
+		}
+		if(!obj.containsKey("cpiPath")){
+			obj.put("cpiPath", "");
+		}
+	}
+	
+}

+ 304 - 0
src/main/java/com/cloudcross/ssp/web/dsp/DspAgentController.java

@@ -0,0 +1,304 @@
+package com.cloudcross.ssp.web.dsp;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.cloudcross.ssp.base.web.SimpleController;
+import com.cloudcross.ssp.common.consts.FieldValidate;
+import com.cloudcross.ssp.common.utils.Common;
+import com.cloudcross.ssp.common.utils.FieldInfo;
+import com.cloudcross.ssp.model.DspAgent;
+import com.cloudcross.ssp.model.Log;
+import com.cloudcross.ssp.service.IDspAgentService;
+import com.cloudcross.ssp.service.ILogService;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 
+ * 类名称:DspAgentController
+ * 类描述:dsp账户
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ *
+ */
+
+@Controller
+@RequestMapping("/dsp/main/dsp-agent")
+public class DspAgentController extends SimpleController{
+	
+	@SuppressWarnings("unused")
+	private static final Logger LOG = Logger.getLogger(DspAgentController.class);
+	
+	@Autowired
+	private IDspAgentService dspAgentService;
+	
+	@Autowired
+	private ILogService logService;
+	
+	/**
+	 * 批量添加dsp账户
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/add")
+	public @ResponseBody List<Map<String,Object>> add(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspAgent> list = new ArrayList<DspAgent>();
+		String dspAgentList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspAgent.getFieldInfoForDspAgent();
+		if(dspAgentList != null && !"".equals(dspAgentList)){
+			Map<String,Object> mapObj = this.getDspAgentList(dspAgentList, result, list, fieldInfoMap,"add");
+			list = (List<DspAgent>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspAgentService.add(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "add");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;
+	}
+	
+	/**
+	 * 批量编辑dsp账户
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/update")
+	public @ResponseBody List<Map<String,Object>> update(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspAgent> list = new ArrayList<DspAgent>();
+		String dspAgentList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspAgent.getFieldInfoForDspAgent();
+		if(dspAgentList != null && !"".equals(dspAgentList)){
+			Map<String,Object> mapObj = this.getDspAgentList(dspAgentList, result, list, fieldInfoMap,"edit");
+			list = (List<DspAgent>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspAgentService.add(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "edit");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;
+	}
+	
+	/**
+	 * 查询所有dsp账户
+	 * @param paramMap 参数
+	 * @return
+	 */
+	@RequestMapping("/getAll")
+	public @ResponseBody List<DspAgent> getAll(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspAgent> result = new ArrayList<DspAgent>();
+		result = dspAgentService.getAll(paramMap);
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询dsp账户
+	 * 
+	 * @param paramMap 参数
+	 * 				dspIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/get")
+	public @ResponseBody List<DspAgent> get(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspAgent> result = new ArrayList<DspAgent>();
+		if(paramMap.get("dspIds") != null && !"".equals(paramMap.get("dspIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("dspIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("idList", list);
+			result = dspAgentService.get(paramMap);
+		}
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询dsp账户
+	 * 
+	 * @param paramMap 参数
+	 * 				dspIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/isCheck")
+	public @ResponseBody boolean isCheck(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		boolean success = false;
+		if(paramMap.get("name") != null && !"".equals(paramMap.get("name")) &&
+				paramMap.get("token") != null && !"".equals(paramMap.get("token"))){
+			DspAgent dspAgent = new DspAgent();
+			dspAgent.setName(String.valueOf(paramMap.get("name")));
+			dspAgent.setToken(String.valueOf(paramMap.get("token")));
+			int count = dspAgentService.isCheck(dspAgent);
+			if(count > 0){
+				success = true;
+			}else{
+				success = false;
+			}
+		}
+		return success;		
+	}
+	
+	/**
+	 * 解析传递的数据
+	 * @param dspAdvertiserList 广告主数据集合
+	 * @param result 记录的错误描述结果
+	 * @param list 没有问题的数据集合
+	 * @param fieldInfoMap 字段属性
+	 * @return tab 标识:添加或编辑
+	 */
+	private Map<String,Object> getDspAgentList(String dspAgentList, List<Map<String,Object>> result,
+			List<DspAgent> list, Map<String, FieldInfo> fieldInfoMap, String tab){
+		Map<String,Object> mapObj = new HashMap<String,Object>();
+		try {
+			//解析JSONArray
+			JSONArray jsonArray = JSONArray.fromObject(dspAgentList);
+			for (int i = 0, l = jsonArray.size(); i < l; i++) {
+				boolean flag = false;
+				JSONObject obj = jsonArray.getJSONObject(i);
+				if(!obj.containsKey("id") && "edit".equals(tab)){//编辑时,没有id这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_DSPID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				this.addNotEmptyField(obj);//如果必填字段没有传递,手动添加必填字段,值为空
+				@SuppressWarnings("unchecked")
+				Iterator<String> itt = obj.keys();
+				while (itt.hasNext()) {
+	                String key = itt.next().toString();  
+	                Object value = obj.getString(key);
+	                Map<String,Object> map = FieldInfo.validateField(fieldInfoMap, key, value, (i+1));
+	                if(!map.isEmpty()){
+	                	flag = true;
+	                	result.add(map);
+	                }
+	            }
+				if(!flag){
+					Long dspId = null;
+					if("edit".equals(tab)){
+						dspId = Long.valueOf(obj.get("id").toString());
+					}
+					Long id = this.getDataMaxId(obj.get("token").toString(), obj.get("name").toString(), dspId);
+                	if(id != null && id != 0){
+                		if("add".equals(tab)){
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_REPEAT,false,null,(i+1),"error"));
+                		}else{
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_REPEAT,false,null,(i+1),"error"));
+                		}
+                	}else{
+                		list.add((DspAgent)JSONObject.toBean(obj,DspAgent.class));
+                		if("add".equals(tab)){
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_SUCCESS,false,null,(i+1),"success"));
+                		}else{
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_SUCCESS,false,null,(i+1),"success"));
+                		}
+                	}
+				}
+			}
+			mapObj.put("result", result);
+			mapObj.put("list", list);
+		}catch (JSONException e) {
+			// TODO Auto-generated catch block
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
+		}
+		mapObj.put("result", result);
+		mapObj.put("list", list);
+		return mapObj;
+	}
+	
+	/**
+	 * 添加操作的日志信息
+	 * @param request
+	 * @param list 数据集合
+	 * @param tab 标识:添加或编辑
+	 */
+	private void addLog(HttpServletRequest request, List<DspAgent> list, String tab){
+		/*** 新增日志 ***/
+		JSONArray jsonArray = JSONArray.fromObject(list);
+		for (int i = 0, l = jsonArray.size(); i < l; i++) {
+			JSONObject obj = jsonArray.getJSONObject(i);
+			Log log = new Log();
+			//对应模块
+			log.setModule("DspAgent");
+			//对应表名
+			log.setTableName("t_dsp_agent");
+			if("add".equals(tab)){
+				Long id = this.getDataMaxId(obj.get("token").toString(), obj.get("name").toString(), null);
+            	//增加对应的id
+				log.setRecordId(id);
+				//对应操作类型
+				log.setActionType("新增");
+				//对应的操作
+				log.setAction("新增了一个dsp账户:" + obj.get("name").toString());
+			}else if("edit".equals(tab)){
+				//增加对应的id
+				log.setRecordId(Long.valueOf(obj.get("id").toString()));
+				//对应操作类型
+				log.setActionType("编辑");
+				//对应的操作
+				log.setAction("编辑原来的dsp账户为:" + obj.get("name").toString());
+			}
+			//下面这几个字段目前后端数据没有得到。所以仅作测试用!
+			log.setActionTime("100");
+			log.setAccountId(new Long(getLoginUser().getId()));
+			log.setUserIp(Common.toIpAddr(request));
+			log.setAccountName(getLoginUser().getAccountName());
+			logService.add(log);
+		}
+	}
+	
+	/**
+	 * 获取最大的id,根据条件查询
+	 * @param token
+	 * @param name
+	 * @return 返回查询的值
+	 */
+	private Long getDataMaxId(String token, String name, Long dspId){
+		Map<String,Object> repeatmap = new HashMap<String,Object>();
+		repeatmap.put("token", token);
+		repeatmap.put("name", name);
+		repeatmap.put("dspId", dspId);
+    	Long id = dspAgentService.selectMaxId(repeatmap);
+		return id;
+	}
+	
+	/**
+	 * 添加必填字段,以防对方没有传递此参数
+	 * @param obj
+	 */
+	private void addNotEmptyField(JSONObject obj){
+		if(!obj.containsKey("token")){
+			obj.put("token", "");
+		}
+		if(!obj.containsKey("name")){
+			obj.put("name", "");
+		}
+		if(!obj.containsKey("ip")){
+			obj.put("ip", "");
+		}
+		if(!obj.containsKey("port")){
+			obj.put("port", "");
+		}
+	}
+	
+}

+ 334 - 0
src/main/java/com/cloudcross/ssp/web/dsp/DspBannerController.java

@@ -0,0 +1,334 @@
+package com.cloudcross.ssp.web.dsp;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.cloudcross.ssp.base.web.SimpleController;
+import com.cloudcross.ssp.common.consts.FieldValidate;
+import com.cloudcross.ssp.common.utils.Common;
+import com.cloudcross.ssp.common.utils.FieldInfo;
+import com.cloudcross.ssp.model.DspAdvertiser;
+import com.cloudcross.ssp.model.DspAgent;
+import com.cloudcross.ssp.model.DspBanner;
+import com.cloudcross.ssp.model.Log;
+import com.cloudcross.ssp.service.IDspBannerService;
+import com.cloudcross.ssp.service.ILogService;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 
+ * 类名称:DspBannerController
+ * 类描述:dsp-广告主-创意
+ * 创建人:rongying
+ * 创建时间:2015.12.11
+ *
+ */
+
+@Controller
+@RequestMapping("/dsp/main/dsp-banner")
+public class DspBannerController extends SimpleController{
+	
+	@SuppressWarnings("unused")
+	private static final Logger LOG = Logger.getLogger(DspBannerController.class);
+	
+	@Autowired
+	private IDspBannerService dspBannerService;
+	
+	@Autowired
+	private ILogService logService;
+	
+	/**
+	 * 批量添加创意
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/add")
+	public @ResponseBody List<Map<String,Object>> add(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspBanner> list = new ArrayList<DspBanner>();
+		String dspBannerList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspBanner.getFieldInfoForDspBanner();
+		if(dspBannerList != null && !"".equals(dspBannerList)){
+			Map<String,Object> mapObj = this.getDspBannerList(dspBannerList, result, list, fieldInfoMap,"add");
+			list = (List<DspBanner>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspBannerService.add(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "add");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;		
+	}
+	
+	/**
+	 * 批量编辑创意
+	 * @param paramMap 参数,json数组
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	@RequestMapping("/update")
+	public @ResponseBody List<Map<String,Object>> update(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		List<DspBanner> list = new ArrayList<DspBanner>();
+		String dspBannerList = (String) paramMap.get("request");
+		Map<String, FieldInfo> fieldInfoMap = DspBanner.getFieldInfoForDspBanner();
+		if(dspBannerList != null && !"".equals(dspBannerList)){
+			Map<String,Object> mapObj = this.getDspBannerList(dspBannerList, result, list, fieldInfoMap,"edit");
+			list = (List<DspBanner>) mapObj.get("list");
+			result = (List<Map<String,Object>>) mapObj.get("result");
+			if(!list.isEmpty()){
+				dspBannerService.update(list);
+				/*** 新增日志 ***/
+				this.addLog(request, list, "add");
+			}
+		}else{
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
+		}
+		return result;
+	}
+	
+	/**
+	 * 查询dsp账户-广告主-下的所有创意
+	 * @param paramMap 参数
+	 * @return
+	 */
+	@RequestMapping("/getAll")
+	public @ResponseBody List<DspBanner> getAll(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspBanner> result = new ArrayList<DspBanner>();
+		if(paramMap.get("dspId") != null && !"".equals(paramMap.get("dspId")) &&
+				paramMap.get("advertiserIds") != null && !"".equals(paramMap.get("advertiserIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("advertiserIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("advertiserIdList", list);
+			result = dspBannerService.getAll(paramMap);
+		}
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询创意
+	 * 
+	 * @param paramMap 参数
+	 * 				bannerIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/get")
+	public @ResponseBody List<DspBanner> get(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<DspBanner> result = new ArrayList<DspBanner>();
+		if(paramMap.get("bannerIds") != null && !"".equals(paramMap.get("bannerIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("bannerIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("bannerIdList", list);
+			result = dspBannerService.get(paramMap);
+		}
+		return result;		
+	}
+	
+	/**
+	 * 根据id,批量查询状态
+	 * 
+	 * @param paramMap 参数
+	 * 				advertiserIds:"1,2"  以逗号分隔的字符串
+	 * @return
+	 */
+	@RequestMapping("/queryState")
+	public @ResponseBody List<Map<String,Object>> queryState(HttpServletRequest request,@RequestParam Map<String,Object> paramMap){
+		List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+		if(paramMap.get("bannerIds") != null && !"".equals(paramMap.get("bannerIds"))){
+			List<Long> list = new ArrayList<Long>();
+			String[] ids = paramMap.get("bannerIds").toString().split(",");
+			for (int i = 0, l = ids.length; i < l; i++) {
+				list.add(Long.valueOf(ids[i]));
+			}
+			paramMap.put("bannerIdList", list);
+			result = dspBannerService.queryState(paramMap);
+			for (int i = 0, l = result.size(); i < l; i++) {
+				Map<String,Object> map = result.get(i);
+				if(Integer.parseInt(map.get("state").toString()) == 0){
+					map.put("stateValue", "通过");
+				}else if(Integer.parseInt(map.get("state").toString()) == 1){
+					map.put("stateValue", "待检查");
+				}else if(Integer.parseInt(map.get("state").toString()) == 2){
+					map.put("stateValue", "检查未通过");
+				}
+			}
+		}
+		return result;		
+	}
+	
+	/**
+	 * 解析传递的数据
+	 * @param dspBannerList 广告主数据集合
+	 * @param result 记录的错误描述结果
+	 * @param list 没有问题的数据集合
+	 * @param fieldInfoMap 字段属性
+	 * @return tab 标识:添加或编辑
+	 */
+	private Map<String,Object> getDspBannerList(String dspBannerList, List<Map<String,Object>> result,
+			List<DspBanner> list, Map<String, FieldInfo> fieldInfoMap, String tab){
+		Map<String,Object> mapObj = new HashMap<String,Object>();
+		try {
+			//解析JSONArray
+			JSONArray jsonArray = JSONArray.fromObject(dspBannerList);
+			for (int i = 0, l = jsonArray.size(); i < l; i++) {
+				boolean flag = false;
+				JSONObject obj = jsonArray.getJSONObject(i);
+				if(!obj.containsKey("id") && "edit".equals(tab)){//编辑时,没有id这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_BANNERID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				if(!obj.containsKey("dspId")){//没有dspId这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_DSPID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				if(!obj.containsKey("advertiserId")){//没有advertiserId这下面的代码不需要执行
+					result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_ADVERTISERID_NOT_EMPTY,false,null,(i+1),"error"));
+					continue;
+				}
+				this.addNotEmptyField(obj);//如果必填字段没有传递,手动添加必填字段,值为空
+				@SuppressWarnings("unchecked")
+				Iterator<String> itt = obj.keys();
+				while (itt.hasNext()) {
+	                String key = itt.next().toString();  
+	                Object value = obj.getString(key);
+	                Map<String,Object> map = FieldInfo.validateField(fieldInfoMap, key, value, (i+1));
+	                if(!map.isEmpty()){
+	                	flag = true;
+	                	result.add(map);
+	                }
+	            }
+				if(!flag){
+					Long bannerId = null;
+					if("edit".equals(tab)){
+						bannerId = Long.valueOf(obj.get("id").toString());
+					}
+					Long id = this.getDataMaxId(Long.valueOf(obj.get("dspId").toString()), Long.valueOf(obj.get("advertiserId").toString()), bannerId);
+                	if(id != null && id != 0){
+                		if("add".equals(tab)){
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_REPEAT,false,null,(i+1),"error"));
+                		}else{
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_REPEAT,false,null,(i+1),"error"));
+                		}
+                	}else{
+                		list.add((DspBanner)JSONObject.toBean(obj,DspBanner.class));
+                		if("add".equals(tab)){
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_SUCCESS,false,null,(i+1),"success"));
+                		}else{
+                			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_SUCCESS,false,null,(i+1),"success"));
+                		}
+                	}
+				}
+			}
+		}catch (JSONException e) {
+			// TODO Auto-generated catch block
+			result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
+		}
+		mapObj.put("result", result);
+		mapObj.put("list", list);
+		return mapObj;
+	}
+	
+	/**
+	 * 添加操作的日志信息
+	 * @param request
+	 * @param list 数据集合
+	 * @param tab 标识:添加或编辑
+	 */
+	private void addLog(HttpServletRequest request, List<DspBanner> list, String tab){
+		/*** 新增日志 ***/
+		JSONArray jsonArray = JSONArray.fromObject(list);
+		for (int i = 0, l = jsonArray.size(); i < l; i++) {
+			JSONObject obj = jsonArray.getJSONObject(i);
+			Log log = new Log();
+			//对应模块
+			log.setModule("DspBanner");
+			//对应表名
+			log.setTableName("t_dsp_banner");
+			if("add".equals(tab)){
+				//增加对应的id
+				Long id = this.getDataMaxId(Long.valueOf(obj.get("dspId").toString()), Long.valueOf(obj.get("advertiserId").toString()), null);
+				log.setRecordId(id);
+				//对应操作类型
+				log.setActionType("新增");
+				//对应的操作
+				log.setAction("新增了一个创意,路径为:" + obj.get("path").toString());
+			}else if("edit".equals(tab)){
+				//增加对应的id
+				log.setRecordId(Long.valueOf(obj.get("id").toString()));
+				//对应操作类型
+				log.setActionType("编辑");
+				//对应的操作
+				log.setAction("编辑原来的创意,路径为:" + obj.get("path").toString());
+			}
+			//下面这几个字段目前后端数据没有得到。所以仅作测试用!
+			log.setActionTime("100");
+			log.setAccountId(new Long(getLoginUser().getId()));
+			log.setUserIp(Common.toIpAddr(request));
+			log.setAccountName(getLoginUser().getAccountName());
+			logService.add(log);
+		}
+	}
+	
+	/**
+	 * 获取最大的id,根据条件查询
+	 * @param dspId
+	 * @param advertiserId
+	 * @param bannerId
+	 * @return 返回查询的值
+	 */
+	private Long getDataMaxId(Long dspId,Long advertiserId,Long bannerId){
+		Map<String,Long> repeatmap = new HashMap<String,Long>();
+    	repeatmap.put("dspId", dspId);
+		repeatmap.put("advertiserId", advertiserId);
+		repeatmap.put("bannerId", bannerId);
+    	Long id = dspBannerService.selectMaxId(repeatmap);
+		return id;
+	}
+	
+	/**
+	 * 添加必填字段,以防对方没有传递此参数
+	 */
+	private void addNotEmptyField(JSONObject obj){
+		if(!obj.containsKey("path")){
+			obj.put("path", "");
+		}
+		if(!obj.containsKey("height")){
+			obj.put("height", "");
+		}
+		if(!obj.containsKey("width")){
+			obj.put("width", "");
+		}
+		if(!obj.containsKey("rheight")){
+			obj.put("rheight", "");
+		}
+		if(!obj.containsKey("rwidth")){
+			obj.put("rwidth", "");
+		}
+	}
+	
+}