DspBannerController.java 16 KB

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