package com.chinacreator.videoalliance.order.action; import com.chinacreator.common.exception.BusinessException; import com.chinacreator.common.pipe.DataOutPipe; import com.chinacreator.common.util.DESUtil; import com.chinacreator.common.util.RequestUtil; import com.chinacreator.common.util.URLUtil; import com.chinacreator.videoalliance.common.annotation.DataOut; import com.chinacreator.videoalliance.common.dao.DictionaryDao; import com.chinacreator.videoalliance.common.util.ConfigUtil; import com.chinacreator.videoalliance.order.bean.OrderInfo; import com.chinacreator.videoalliance.order.service.YoutuOrderService; import com.chinacreator.videoalliance.order.util.JsonUtil; import com.google.gson.GsonBuilder; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 优酷后向产品订购/续订/ * @author xu.zhou * */ @Controller public class YoutuOrderAction { private static Logger busilog = Logger.getLogger("youtuorder"); private static Logger logger = Logger.getLogger(YoutuOrderAction.class); @Autowired private YoutuOrderService service; @Autowired private DictionaryDao dictionaryDao; @RequestMapping({"/youtuOrder.do"}) @DataOut(callback="order") public DataOutPipe doOrder(HttpServletRequest request, OrderInfo orderInfo, String channel) throws Exception{ DataOutPipe pipe = new DataOutPipe(); Map log = new HashMap(); try { orderInfo.setTimes(System.currentTimeMillis()+""); String deuserid = orderInfo.getUserid(); //解密前的加密手机号码,用于签名验证 if (StringUtils.isNotEmpty(orderInfo.getUserid())) { orderInfo.setUserid(ConfigUtil.decrypt(orderInfo.getUserid(), orderInfo.getCpid())); if ((orderInfo.getUserid() != null) && (orderInfo.getUserid().length() > 11)) { orderInfo.setUserid(ConfigUtil.getUserid(orderInfo.getUserid(), orderInfo.getCpid())); } } orderInfo.setApptype(RequestUtil.getMobType(request)); orderInfo.setStatus(0); orderInfo.setOrderchannel(channel); orderInfo.setOrderstatus(3); String ip = getIpAddr(request); log.put("ip", ip); log.put("channel", channel); log.put("data", orderInfo); pipe.add("userid", orderInfo.getUserid()); pipe.add("channel", channel == null ? "" : channel); if(!ips.contains(ip)){ throw new BusinessException("9008", "IP地址不合法"+ip); } //业务验证 this.service.checkOrder(orderInfo,deuserid); String result = ""; if (orderInfo.getCpid().equals("youtu") && orderInfo.getSpid().equals("1168")) { result = service.orderBusi(orderInfo); } else { throw new BusinessException("9031", "不能办理非指定业务"); } log.put("data", orderInfo); pipe.add("endtime", orderInfo.getEndtime() == null ? "" : orderInfo.getEndtime()); pipe.setResultCode(result); log.put("errorCode",result); log.put("errorInfo","成功"); } catch (Exception e) { log.put("errorInfo",e.getMessage()); log.put("errorCode", "9999"); if ((e instanceof BusinessException)) { log.put("errorCode", ((BusinessException) e).getCode()); String errorInfo = ((BusinessException) e).getMessage(); if(errorInfo.length()>200){ errorInfo = errorInfo.substring(0, 200); } log.put("errorInfo",errorInfo); } throw e; } finally { String json = new GsonBuilder().disableHtmlEscaping().serializeNulls().create().toJson(log); busilog.info(json); //发送短信 inserSmstMq(orderInfo,log.get("errorCode")+""); } return pipe; } /** * 推送办理成功的短信到队列 * @param orderInfo */ public void inserSmstMq(OrderInfo orderInfo, String result){ try{ //订购成功、续订成功、赠送会员失败 if("0".equals(result) || "9002".equals(result)){ Map map = new HashMap(); map.put("userid", orderInfo.getUserid()); map.put("cpid", orderInfo.getCpid()); map.put("spid", orderInfo.getSpid()); map.put("result", "0"); map.put("channel", ""); map.put("style","0000"); map.put("times", ""); map.put("orderType", ""); map.put("type", "cssms"); if("0".equals(result)){ map.put("busiType", "tran_succ"); //订购成功短信 }else{ map.put("busiType", "vip_fail"); //赠送会员失败短信 } //logger.info("++++++map:"+map); //开发环境 //URLUtil.post("http://172.16.33.16:8082/mq-service/recive.do", JsonUtil.objectToJson(map)); //测试环境 //URLUtil.post("http://10.199.99.177:86/mq-service/recive.do", JsonUtil.objectToJson(map)); //生产环境 //URLUtil.post("http://10.199.99.144:8090/mq-service/recive.do", JsonUtil.objectToJson(map)); URLUtil.post(dictionaryDao.getValue("mqReciveUrl"), JsonUtil.objectToJson(map)); } }catch (Exception e){ e.printStackTrace(); } } private static List ips = new ArrayList(); static{ //ips.add("127.0.0.1"); ips.add("10.199.99.147"); //生产环境 ips.add("10.199.99.177"); //测试环境 } private String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Real-IP"); if (inValidateIpAddr(ip)) { ip = request.getHeader("X-Forwarded-For"); } if (inValidateIpAddr(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (inValidateIpAddr(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (inValidateIpAddr(ip)) { ip = request.getHeader("clientip"); } if (inValidateIpAddr(ip)) { ip = request.getRemoteAddr(); } if (inValidateIpAddr(ip)) { ip = "null"; } else { int index = ip.indexOf(","); if (index != -1) { ip = ip.substring(0, index); } } return ip; } private static boolean inValidateIpAddr(String ip) { return (ip == null) || (ip.length() == 0) || ("unknown".equalsIgnoreCase(ip)); } public static void main(String[] args) throws UnsupportedEncodingException, Exception { System.out.println( URLEncoder.encode(DESUtil.encode("18660177894", "ea044e50"), "utf-8")); } }