DspBannerController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package com.cloudcross.ssp.web.dsp;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import net.sf.json.JSONArray;
  8. import net.sf.json.JSONException;
  9. import net.sf.json.JSONObject;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.apache.log4j.Logger;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import com.cloudcross.ssp.base.web.SimpleController;
  17. import com.cloudcross.ssp.common.consts.FieldValidate;
  18. import com.cloudcross.ssp.common.utils.Common;
  19. import com.cloudcross.ssp.common.utils.FieldInfo;
  20. import com.cloudcross.ssp.model.DspBanner;
  21. import com.cloudcross.ssp.model.Log;
  22. import com.cloudcross.ssp.service.IDspAgentService;
  23. import com.cloudcross.ssp.service.IDspBannerService;
  24. import com.cloudcross.ssp.service.ILogService;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. /**
  28. *
  29. * 类名称:DspBannerController
  30. * 类描述:dsp-广告主-创意
  31. * 创建人:rongying
  32. * 创建时间:2015.12.11
  33. *
  34. */
  35. @Controller
  36. @RequestMapping("/dsp/main/dsp-banner")
  37. public class DspBannerController extends SimpleController{
  38. @SuppressWarnings("unused")
  39. private static final Logger LOG = Logger.getLogger(DspBannerController.class);
  40. @Autowired
  41. private IDspBannerService dspBannerService;
  42. @Autowired
  43. private IDspAgentService dspAgentService;
  44. @Autowired
  45. private ILogService logService;
  46. /**
  47. * 批量添加创意
  48. * @param paramMap 参数,json数组
  49. * @return
  50. */
  51. @SuppressWarnings("unchecked")
  52. @RequestMapping("/add")
  53. public @ResponseBody List<Map<String,Object>> add(HttpServletRequest request,
  54. HttpServletResponse response,@RequestParam Map<String,Object> paramMap){
  55. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  56. /** 跨域问题 ,校验身份 **/
  57. result = this.checkIdentityAndCros(response, result, paramMap);
  58. if(result.isEmpty()){
  59. List<DspBanner> list = new ArrayList<DspBanner>();
  60. String dspBannerList = (String) paramMap.get("request");
  61. Map<String, FieldInfo> fieldInfoMap = DspBanner.getFieldInfoForDspBanner();
  62. if(dspBannerList != null && !"".equals(dspBannerList)){
  63. Map<String,Object> mapObj = this.getDspBannerList(dspBannerList, result, list, fieldInfoMap,"add",
  64. Long.valueOf(paramMap.get("dspId").toString()));
  65. list = (List<DspBanner>) mapObj.get("list");
  66. result = (List<Map<String,Object>>) mapObj.get("result");
  67. if(!list.isEmpty()){
  68. dspBannerService.add(list);
  69. /*** 新增日志 ***/
  70. this.addLog(request, list, "add");
  71. }
  72. }else{
  73. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
  74. }
  75. }
  76. return result;
  77. }
  78. /**
  79. * 批量编辑创意
  80. * @param paramMap 参数,json数组
  81. * @return
  82. */
  83. @SuppressWarnings("unchecked")
  84. @RequestMapping("/update")
  85. public @ResponseBody List<Map<String,Object>> update(HttpServletRequest request,
  86. HttpServletResponse response,@RequestParam Map<String,Object> paramMap){
  87. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  88. /** 跨域问题 ,校验身份 **/
  89. result = this.checkIdentityAndCros(response, result, paramMap);
  90. if(result.isEmpty()){
  91. List<DspBanner> list = new ArrayList<DspBanner>();
  92. String dspBannerList = (String) paramMap.get("request");
  93. Map<String, FieldInfo> fieldInfoMap = DspBanner.getFieldInfoForDspBanner();
  94. if(dspBannerList != null && !"".equals(dspBannerList)){
  95. Map<String,Object> mapObj = this.getDspBannerList(dspBannerList, result, list, fieldInfoMap,"edit",
  96. Long.valueOf(paramMap.get("dspId").toString()));
  97. list = (List<DspBanner>) mapObj.get("list");
  98. result = (List<Map<String,Object>>) mapObj.get("result");
  99. if(!list.isEmpty()){
  100. dspBannerService.update(list);
  101. /*** 新增日志 ***/
  102. this.addLog(request, list, "add");
  103. }
  104. }else{
  105. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
  106. }
  107. }
  108. return result;
  109. }
  110. /**
  111. * 查询dsp账户-广告主-下的所有创意
  112. * @param paramMap 参数
  113. * @return
  114. */
  115. @RequestMapping("/getAll")
  116. public @ResponseBody List<Map<String,Object>> getAll(HttpServletRequest request,
  117. HttpServletResponse response,@RequestParam Map<String,Object> paramMap){
  118. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  119. /** 跨域问题 ,校验身份 **/
  120. result = this.checkIdentityAndCros(response, result, paramMap);
  121. if(result.isEmpty()){
  122. String advertiserIdsStr = (String) paramMap.get("request");
  123. if(advertiserIdsStr != null && !"".equals(advertiserIdsStr)){
  124. try {
  125. //解析JSONArray
  126. JSONArray jsonArray = JSONArray.fromObject(advertiserIdsStr);
  127. for (int i = 0, l = jsonArray.size(); i < l; i++) {
  128. JSONObject obj = jsonArray.getJSONObject(i);
  129. if(obj.containsKey("advertiserIds") && obj.get("advertiserIds") != null
  130. && !"".equals(obj.get("advertiserIds"))){
  131. List<Long> list = new ArrayList<Long>();
  132. String[] ids = paramMap.get("advertiserIds").toString().split(",");
  133. for (int j = 0, m = ids.length; j < m; j++) {
  134. list.add(Long.valueOf(ids[j]));
  135. }
  136. paramMap.put("advertiserIdList", list);
  137. result = dspBannerService.getAll(paramMap);
  138. }else{
  139. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_ADVERTISERIDS_NOT_EMPTY,false,null,0,"error"));
  140. }
  141. }
  142. }catch (JSONException e) {
  143. // TODO Auto-generated catch block
  144. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
  145. }
  146. }else{
  147. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
  148. }
  149. }
  150. return result;
  151. }
  152. /**
  153. * 根据id,批量查询创意
  154. *
  155. * @param paramMap 参数
  156. * bannerIds:"1,2" 以逗号分隔的字符串
  157. * @return
  158. */
  159. @RequestMapping("/get")
  160. public @ResponseBody List<Map<String,Object>> get(HttpServletRequest request,
  161. HttpServletResponse response,@RequestParam Map<String,Object> paramMap){
  162. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  163. /** 跨域问题 ,校验身份 **/
  164. result = this.checkIdentityAndCros(response, result, paramMap);
  165. if(result.isEmpty()){
  166. String bannerIdsStr = (String) paramMap.get("request");
  167. if(bannerIdsStr != null && !"".equals(bannerIdsStr)){
  168. try {
  169. //解析JSONArray
  170. JSONArray jsonArray = JSONArray.fromObject(bannerIdsStr);
  171. for (int i = 0, l = jsonArray.size(); i < l; i++) {
  172. JSONObject obj = jsonArray.getJSONObject(i);
  173. if(obj.containsKey("bannerIds") && obj.get("bannerIds") != null
  174. && !"".equals(obj.get("bannerIds"))){
  175. List<Long> list = new ArrayList<Long>();
  176. String[] ids = paramMap.get("bannerIds").toString().split(",");
  177. for (int j = 0, m = ids.length; j < m; j++) {
  178. list.add(Long.valueOf(ids[j]));
  179. }
  180. paramMap.put("bannerIdList", list);
  181. result = dspBannerService.get(paramMap);
  182. }else{
  183. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_BANNERIDS_NOT_EMPTY,false,null,0,"error"));
  184. }
  185. }
  186. }catch (JSONException e) {
  187. // TODO Auto-generated catch block
  188. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
  189. }
  190. }else{
  191. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
  192. }
  193. }
  194. return result;
  195. }
  196. /**
  197. * 根据id,批量查询状态
  198. *
  199. * @param paramMap 参数
  200. * advertiserIds:"1,2" 以逗号分隔的字符串
  201. * @return
  202. */
  203. @RequestMapping("/queryState")
  204. public @ResponseBody List<Map<String,Object>> queryState(HttpServletRequest request,
  205. HttpServletResponse response,@RequestParam Map<String,Object> paramMap){
  206. List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
  207. /** 跨域问题 ,校验身份 **/
  208. result = this.checkIdentityAndCros(response, result, paramMap);
  209. if(result.isEmpty()){
  210. String bannerIdsStr = (String) paramMap.get("request");
  211. if(bannerIdsStr != null && !"".equals(bannerIdsStr)){
  212. try {
  213. //解析JSONArray
  214. JSONArray jsonArray = JSONArray.fromObject(bannerIdsStr);
  215. for (int i = 0, l = jsonArray.size(); i < l; i++) {
  216. JSONObject obj = jsonArray.getJSONObject(i);
  217. if(obj.containsKey("bannerIds") && obj.get("bannerIds") != null
  218. && !"".equals(obj.get("bannerIds"))){
  219. List<Long> list = new ArrayList<Long>();
  220. String[] ids = paramMap.get("bannerIds").toString().split(",");
  221. for (int j = 0, m = ids.length; j < m; j++) {
  222. list.add(Long.valueOf(ids[j]));
  223. }
  224. paramMap.put("bannerIdList", list);
  225. result = dspBannerService.queryState(paramMap);
  226. for (int k = 0, n = result.size(); k < n; k++) {
  227. Map<String,Object> map = result.get(k);
  228. if(Integer.parseInt(map.get("state").toString()) == 0){
  229. map.put("stateValue", "通过");
  230. }else if(Integer.parseInt(map.get("state").toString()) == 1){
  231. map.put("stateValue", "待检查");
  232. }else if(Integer.parseInt(map.get("state").toString()) == 2){
  233. map.put("stateValue", "检查未通过");
  234. }
  235. }
  236. }else{
  237. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_BANNERIDS_NOT_EMPTY,false,null,0,"error"));
  238. }
  239. }
  240. }catch (JSONException e) {
  241. // TODO Auto-generated catch block
  242. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
  243. }
  244. }else{
  245. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_EMPTY,false,null,0,"error"));
  246. }
  247. }
  248. return result;
  249. }
  250. /**
  251. * 解析传递的数据
  252. * @param dspBannerList 广告主数据集合
  253. * @param result 记录的错误描述结果
  254. * @param list 没有问题的数据集合
  255. * @param fieldInfoMap 字段属性
  256. * @return tab 标识:添加或编辑
  257. */
  258. private Map<String,Object> getDspBannerList(String dspBannerList, List<Map<String,Object>> result,
  259. List<DspBanner> list, Map<String, FieldInfo> fieldInfoMap, String tab, Long dspId){
  260. Map<String,Object> mapObj = new HashMap<String,Object>();
  261. try {
  262. //解析JSONArray
  263. JSONArray jsonArray = JSONArray.fromObject(dspBannerList);
  264. for (int i = 0, l = jsonArray.size(); i < l; i++) {
  265. boolean flag = false;
  266. JSONObject obj = jsonArray.getJSONObject(i);
  267. if(!obj.containsKey("id") && "edit".equals(tab)){//编辑时,没有id这下面的代码不需要执行
  268. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_BANNERID_NOT_EMPTY,false,null,(i+1),"error"));
  269. continue;
  270. }
  271. if(!obj.containsKey("advertiserId")){//没有advertiserId这下面的代码不需要执行
  272. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_ADVERTISERID_NOT_EMPTY,false,null,(i+1),"error"));
  273. continue;
  274. }
  275. this.addNotEmptyField(obj);//如果必填字段没有传递,手动添加必填字段,值为空
  276. @SuppressWarnings("unchecked")
  277. Iterator<String> itt = obj.keys();
  278. while (itt.hasNext()) {
  279. String key = itt.next().toString();
  280. Object value = obj.getString(key);
  281. Map<String,Object> map = FieldInfo.validateField(fieldInfoMap, key, value, (i+1));
  282. if(!map.isEmpty()){
  283. flag = true;
  284. result.add(map);
  285. }
  286. }
  287. obj.put("dspId", dspId);
  288. if(!flag){
  289. Long bannerId = null;
  290. if("edit".equals(tab)){
  291. bannerId = Long.valueOf(obj.get("id").toString());
  292. }
  293. Long id = this.getDataMaxId(dspId, Long.valueOf(obj.get("advertiserId").toString()), bannerId);
  294. if(id != null && id != 0){
  295. if("add".equals(tab)){
  296. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_REPEAT,false,null,(i+1),"error"));
  297. }else{
  298. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_REPEAT,false,null,(i+1),"error"));
  299. }
  300. }else{
  301. list.add((DspBanner)JSONObject.toBean(obj,DspBanner.class));
  302. if("add".equals(tab)){
  303. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_ADD_SUCCESS,false,null,(i+1),"success"));
  304. }else{
  305. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_UPDATE_SUCCESS,false,null,(i+1),"success"));
  306. }
  307. }
  308. }
  309. }
  310. }catch (JSONException e) {
  311. // TODO Auto-generated catch block
  312. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_PARAMDATA_FORMAT_ERROR,false,null,0,"error"));
  313. }
  314. mapObj.put("result", result);
  315. mapObj.put("list", list);
  316. return mapObj;
  317. }
  318. /**
  319. * 添加操作的日志信息
  320. * @param request
  321. * @param list 数据集合
  322. * @param tab 标识:添加或编辑
  323. */
  324. private void addLog(HttpServletRequest request, List<DspBanner> list, String tab){
  325. /*** 新增日志 ***/
  326. JSONArray jsonArray = JSONArray.fromObject(list);
  327. for (int i = 0, l = jsonArray.size(); i < l; i++) {
  328. JSONObject obj = jsonArray.getJSONObject(i);
  329. Log log = new Log();
  330. //对应模块
  331. log.setModule("DspBanner");
  332. //对应表名
  333. log.setTableName("t_dsp_banner");
  334. if("add".equals(tab)){
  335. //增加对应的id
  336. Long id = this.getDataMaxId(Long.valueOf(obj.get("dspId").toString()), Long.valueOf(obj.get("advertiserId").toString()), null);
  337. log.setRecordId(id);
  338. //对应操作类型
  339. log.setActionType("新增");
  340. //对应的操作
  341. log.setAction("新增了一个创意,路径为:" + obj.get("path").toString());
  342. }else if("edit".equals(tab)){
  343. //增加对应的id
  344. log.setRecordId(Long.valueOf(obj.get("id").toString()));
  345. //对应操作类型
  346. log.setActionType("编辑");
  347. //对应的操作
  348. log.setAction("编辑原来的创意,路径为:" + obj.get("path").toString());
  349. }
  350. //下面这几个字段目前后端数据没有得到。所以仅作测试用!
  351. log.setActionTime("100");
  352. log.setAccountId(Long.valueOf(obj.get("dspId").toString()));
  353. log.setUserIp(Common.toIpAddr(request));
  354. log.setAccountName("dsp对接方");
  355. logService.add(log);
  356. }
  357. }
  358. /**
  359. * 获取最大的id,根据条件查询
  360. * @param dspId
  361. * @param advertiserId
  362. * @param bannerId
  363. * @return 返回查询的值
  364. */
  365. private Long getDataMaxId(Long dspId,Long advertiserId,Long bannerId){
  366. Map<String,Long> repeatmap = new HashMap<String,Long>();
  367. repeatmap.put("dspId", dspId);
  368. repeatmap.put("advertiserId", advertiserId);
  369. repeatmap.put("bannerId", bannerId);
  370. Long id = dspBannerService.selectMaxId(repeatmap);
  371. return id;
  372. }
  373. /**
  374. * 添加必填字段,以防对方没有传递此参数
  375. */
  376. private void addNotEmptyField(JSONObject obj){
  377. if(!obj.containsKey("path")){
  378. obj.put("path", "");
  379. }
  380. if(!obj.containsKey("height")){
  381. obj.put("height", "");
  382. }
  383. if(!obj.containsKey("width")){
  384. obj.put("width", "");
  385. }
  386. if(!obj.containsKey("rheight")){
  387. obj.put("rheight", "");
  388. }
  389. if(!obj.containsKey("rwidth")){
  390. obj.put("rwidth", "");
  391. }
  392. }
  393. /**
  394. * 解决跨域问题,校验身份
  395. */
  396. private List<Map<String,Object>> checkIdentityAndCros(HttpServletResponse response,
  397. List<Map<String,Object>> result,Map<String,Object> paramMap){
  398. response.reset();
  399. response.addHeader("ACCESS_CONTROL_ALLOW_ORIGIN", "*");
  400. response.addHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
  401. if(!paramMap.containsKey("dspId") || paramMap.get("dspId") == null || "".equals(paramMap.get("dspId"))){//没有dspId这下面的代码不需要执行
  402. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_DSPID_NOT_EMPTY,false,null,0,"error"));
  403. return result;
  404. }
  405. if(!paramMap.containsKey("token") || paramMap.get("token") == null || "".equals(paramMap.get("token"))){//没有dspId这下面的代码不需要执行
  406. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_TOKEN_NOT_EMPTY,false,null,0,"error"));
  407. return result;
  408. }
  409. Long count = dspAgentService.checkIdentity(paramMap);
  410. if(count > 0 ){
  411. return result;
  412. }
  413. result.add(FieldInfo.getErrorMessage(FieldValidate.CHECK_TOKEN_NOT_CONFORM,false,null,0,"error"));
  414. return result;
  415. }
  416. }