09a558078280322f012f7523fcb09216c01a5c7f.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. package com.chinacreator.videoalliance.order.action;
  2. import com.chinacreator.common.exception.BusinessException;
  3. import com.chinacreator.common.pipe.DataOutPipe;
  4. import com.chinacreator.common.util.RequestUtil;
  5. import com.chinacreator.common.util.URLUtil;
  6. import com.chinacreator.videoalliance.common.annotation.DataOut;
  7. import com.chinacreator.videoalliance.common.dao.DictionaryDao;
  8. import com.chinacreator.videoalliance.common.util.ConfigUtil;
  9. import com.chinacreator.videoalliance.order.bean.OrderInfo;
  10. import com.chinacreator.videoalliance.order.dao.BackBusiOrderDao;
  11. import com.chinacreator.videoalliance.order.service.BackBusiOrderAsynService;
  12. import com.chinacreator.videoalliance.order.service.OrderValiService;
  13. import com.chinacreator.videoalliance.order.util.IpAddrUtil;
  14. import com.chinacreator.videoalliance.order.util.JsonUtil;
  15. import com.google.gson.GsonBuilder;
  16. import org.apache.commons.lang.StringUtils;
  17. import org.apache.log4j.Logger;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Controller;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import javax.servlet.http.HttpServletRequest;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * 后向产品办理(会员、免流、会员+免流)
  28. * @author xu.zhou
  29. * @date 20190705
  30. */
  31. @Controller
  32. public class BackBusiOrderAction {
  33. private static Logger busilog = Logger.getLogger("youtuorder");
  34. private static Logger logger = Logger.getLogger(BackBusiOrderAction.class);
  35. @Autowired
  36. private BackBusiOrderAsynService service;
  37. @Autowired
  38. private DictionaryDao dictionaryDao;
  39. @Autowired
  40. private BackBusiOrderDao backBusiOrderDao;
  41. @Autowired
  42. private OrderValiService orderValiService;
  43. @RequestMapping({"/backorder.do"})
  44. @DataOut(callback="order")
  45. public DataOutPipe doOrder(HttpServletRequest request, OrderInfo orderInfo, String channel)
  46. throws Exception{
  47. DataOutPipe pipe = new DataOutPipe();
  48. Map log = new HashMap();
  49. try {
  50. orderInfo.setTimes(System.currentTimeMillis()+"");
  51. String deuserid = orderInfo.getUserid(); //解密前的加密手机号码,用于签名验证
  52. if (StringUtils.isNotEmpty(orderInfo.getUserid())) {
  53. orderInfo.setUserid(ConfigUtil.decrypt(orderInfo.getUserid(), orderInfo.getCpid()));
  54. if ((orderInfo.getUserid() != null) && (orderInfo.getUserid().length() > 11)) {
  55. orderInfo.setUserid(ConfigUtil.getUserid(orderInfo.getUserid(), orderInfo.getCpid()));
  56. }
  57. }
  58. orderInfo.setTimes(System.currentTimeMillis()+"");
  59. orderInfo.setApptype(RequestUtil.getMobType(request));
  60. orderInfo.setStatus(0);
  61. orderInfo.setOrderchannel(channel);
  62. orderInfo.setOrderstatus(3);
  63. orderInfo.setInvokeface("backorder");
  64. //String ip = IpAddrUtil.getIpAddr2(request);
  65. //log.put("ip", ip);
  66. log.put("channel", channel);
  67. log.put("data", orderInfo);
  68. pipe.add("userid", orderInfo.getUserid());
  69. pipe.add("channel", channel == null ? "" : channel);
  70. //if(!ips.contains(ip)){
  71. //throw new BusinessException("9008", "IP地址不合法"+ip);
  72. //}
  73. //业务验证
  74. this.service.checkOrder(orderInfo,deuserid);
  75. //IP验证、业务办理限制验证
  76. orderValiService.vali(request, orderInfo);
  77. String result = "";
  78. //if(this.service.hasVipRetry(orderInfo)){//判断是否重试送会员
  79. //result = service.vipRetryBusi(orderInfo);
  80. //}else{
  81. result = service.orderBusi(orderInfo);
  82. //}
  83. log.put("data", orderInfo);
  84. pipe.add("endtime", orderInfo.getEndtime() == null ? "" : orderInfo.getEndtime());
  85. //pipe.setResultCode(result);
  86. log.put("errorCode",result);
  87. log.put("errorInfo","成功");
  88. } catch (Exception e) {
  89. e.printStackTrace();
  90. log.put("errorInfo",e.getMessage());
  91. log.put("errorCode", "9999");
  92. if ((e instanceof BusinessException)) {
  93. log.put("errorCode", ((BusinessException) e).getCode());
  94. String errorInfo = ((BusinessException) e).getMessage();
  95. if(errorInfo.length()>200){
  96. errorInfo = errorInfo.substring(0, 200);
  97. }
  98. log.put("errorInfo",errorInfo);
  99. }
  100. throw e;
  101. } finally {
  102. String json = new GsonBuilder().disableHtmlEscaping().serializeNulls().create().toJson(log);
  103. busilog.info(json);
  104. //发送短信
  105. inserSmstMq(orderInfo,log.get("errorCode")+"");
  106. inserSmstMq2(orderInfo,log.get("errorCode")+"");
  107. inserSmstMq3(orderInfo,log.get("errorCode")+"");
  108. }
  109. return pipe;
  110. }
  111. /**
  112. * 推送办理成功的短信到队列
  113. * @param orderInfo
  114. */
  115. public void inserSmstMq(OrderInfo orderInfo, String result){
  116. try{
  117. //订购成功、续订成功、赠送会员失败
  118. //if(orderInfo.getType() == 0 && ("0".equals(result) || "9002".equals(result))){
  119. if(orderInfo.getType() == 0 && "0".equals(result)){ //只发送订购成功短信
  120. List<HashMap> confList = backBusiOrderDao.getBackBusiConf(orderInfo.getCpid(), orderInfo.getSpid());
  121. //[{PWD=kijkfds, CHANNEL=test_01, VIPTYPE=2, VIPPOOL=vip_yout, SPID=1168, BUSITYPE=3, CPID=youtu}]
  122. HashMap confHm = confList.get(0);
  123. String busiType = confHm.get("BUSITYPE")+"";
  124. if("TX20_twback".equals(orderInfo.getOrderchannel()) && "3".equals(busiType)){
  125. //拓维订购会员+免流产品不发短信,由他们自己处理。
  126. return;
  127. }
  128. if("shanghaiqy".equals(orderInfo.getOrderchannel())&&!"1211".equals(orderInfo.getSpid())){
  129. //上海权益办理后向业务不发短信
  130. return;
  131. }
  132. //只有纯免流的才触发短信,其他的异步处理后再发短信
  133. if(!"2".equals(busiType)){
  134. return;
  135. }
  136. Map<String, String> map = new HashMap<String, String>();
  137. map.put("userid", orderInfo.getUserid());
  138. map.put("cpid", orderInfo.getCpid());
  139. map.put("spid", orderInfo.getSpid());
  140. map.put("result", "0");
  141. map.put("channel", "");
  142. map.put("style","0000");
  143. map.put("times", "");
  144. map.put("orderType", "");
  145. map.put("type", "cssms");
  146. if("0".equals(result)){
  147. map.put("busiType", "tran_succ"); //订购成功短信
  148. if("TX20_twback_qc".equals(orderInfo.getOrderchannel())){//女王卡领取会员发短信,同样的SPID短信内容不同
  149. map.put("busiType", "qc_tran_succ");
  150. }
  151. }else{
  152. map.put("busiType", "vip_fail"); //赠送会员失败短信
  153. }
  154. //logger.info("++++++map:"+map);
  155. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  156. //开发环境
  157. //URLUtil.post("http://172.16.33.16:8082/mq-service/recive.do", JsonUtil.objectToJson(map));
  158. //测试环境
  159. //URLUtil.post("http://10.199.99.177:86/mq-service/recive.do", JsonUtil.objectToJson(map));
  160. //生产环境
  161. //URLUtil.post("http://10.199.99.144:8090/mq-service/recive.do", JsonUtil.objectToJson(map));
  162. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  163. }
  164. }catch (Exception e){
  165. e.printStackTrace();
  166. }
  167. }
  168. /**
  169. * 推送办理成功的短信到队列
  170. * @param orderInfo
  171. */
  172. public void inserSmstMq2(OrderInfo orderInfo, String result){
  173. try{
  174. //订购成功、续订成功、赠送会员失败
  175. //if(orderInfo.getType() == 0 && ("0".equals(result) || "9002".equals(result))){
  176. if(orderInfo.getType() == 0 && "0".equals(result)){ //只发送订购成功短信
  177. List<HashMap> confList = backBusiOrderDao.getBackBusiConf(orderInfo.getCpid(), orderInfo.getSpid());
  178. //[{PWD=kijkfds, CHANNEL=test_01, VIPTYPE=2, VIPPOOL=vip_yout, SPID=1168, BUSITYPE=3, CPID=youtu}]
  179. HashMap confHm = confList.get(0);
  180. String busiType = confHm.get("BUSITYPE")+"";
  181. if("TX20_twback".equals(orderInfo.getOrderchannel()) && "3".equals(busiType)){
  182. //拓维订购会员+免流产品不发短信,由他们自己处理。
  183. return;
  184. }
  185. if("shanghaiqy".equals(orderInfo.getOrderchannel())&&!"1211".equals(orderInfo.getSpid())){
  186. //上海权益办理后向业务不发短信
  187. return;
  188. }
  189. //只有纯免流的才触发短信,其他的异步处理后再发短信
  190. if(!"2".equals(busiType)){
  191. return;
  192. }
  193. Map<String, String> map = new HashMap<String, String>();
  194. map.put("userid", orderInfo.getUserid());
  195. map.put("cpid", orderInfo.getCpid());
  196. map.put("spid", orderInfo.getSpid());
  197. map.put("result", "0");
  198. map.put("channel", "");
  199. map.put("style","0000");
  200. map.put("times", "");
  201. map.put("orderType", "");
  202. map.put("type", "cssms");
  203. if("0".equals(result) && !"TX20_twback_qc".equals(orderInfo.getOrderchannel())){
  204. map.put("busiType", "tran_succ2"); //订购成功短信
  205. }
  206. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  207. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  208. }
  209. }catch (Exception e){
  210. e.printStackTrace();
  211. }
  212. }
  213. /**
  214. * 推送办理成功的短信到队列
  215. * @param orderInfo
  216. */
  217. public void inserSmstMq3(OrderInfo orderInfo, String result){
  218. try{
  219. //订购成功、续订成功、赠送会员失败
  220. //if(orderInfo.getType() == 0 && ("0".equals(result) || "9002".equals(result))){
  221. if(orderInfo.getType() == 0 && "0".equals(result)){ //只发送订购成功短信
  222. List<HashMap> confList = backBusiOrderDao.getBackBusiConf(orderInfo.getCpid(), orderInfo.getSpid());
  223. //[{PWD=kijkfds, CHANNEL=test_01, VIPTYPE=2, VIPPOOL=vip_yout, SPID=1168, BUSITYPE=3, CPID=youtu}]
  224. HashMap confHm = confList.get(0);
  225. String busiType = confHm.get("BUSITYPE")+"";
  226. if("TX20_twback".equals(orderInfo.getOrderchannel()) && "3".equals(busiType)){
  227. //拓维订购会员+免流产品不发短信,由他们自己处理。
  228. return;
  229. }
  230. if("shanghaiqy".equals(orderInfo.getOrderchannel())&&!"1211".equals(orderInfo.getSpid())){
  231. //上海权益办理后向业务不发短信
  232. return;
  233. }
  234. //只有纯免流的才触发短信,其他的异步处理后再发短信
  235. if(!"2".equals(busiType)){
  236. return;
  237. }
  238. Map<String, String> map = new HashMap<String, String>();
  239. map.put("userid", orderInfo.getUserid());
  240. map.put("cpid", orderInfo.getCpid());
  241. map.put("spid", orderInfo.getSpid());
  242. map.put("result", "0");
  243. map.put("channel", "");
  244. map.put("style","0000");
  245. map.put("times", "");
  246. map.put("orderType", "");
  247. map.put("type", "cssms");
  248. if("0".equals(result) && !"TX20_twback_qc".equals(orderInfo.getOrderchannel())){
  249. map.put("busiType", "trna_succ3"); //订购成功短信
  250. }
  251. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  252. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  253. }
  254. }catch (Exception e){
  255. e.printStackTrace();
  256. }
  257. }
  258. /**
  259. private static List<String> ips = new ArrayList<String>();
  260. static{ ips.add("172.16.33.16");
  261. ips.add("10.199.99.147");
  262. ips.add("10.199.99.177");
  263. ips.add("10.199.99.176");
  264. ips.add("10.199.99.158");
  265. ips.add("172.18.0.14");
  266. ips.add("172.18.0.15");
  267. ips.add("172.18.0.16");
  268. ips.add("172.18.0.17");
  269. ips.add("172.18.0.18");
  270. ips.add("10.0.17.71");
  271. ips.add("10.0.17.55");
  272. ips.add("10.0.17.49");
  273. ips.add("10.0.17.86");
  274. ips.add("10.0.17.82");
  275. ips.add("10.0.17.53");
  276. ips.add("10.0.17.54");
  277. ips.add("10.0.17.85");
  278. ips.add("10.0.17.56");
  279. ips.add("10.42.4.0");
  280. ips.add("10.42.5.0");
  281. ips.add("114.255.201.224");
  282. ips.add("111.206.133.37");
  283. ips.add("111.206.133.34");
  284. ips.add("10.42.3.0");
  285. ips.add("10.0.17.29");
  286. }***/
  287. }