MobileController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. package com.qlm.controller.jinzai;
  2. import java.util.Date;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.UUID;
  6. import javax.servlet.http.HttpServletRequest;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.jfinal.aop.Clear;
  9. import com.jfinal.core.Controller;
  10. import com.jfinal.kit.HashKit;
  11. import com.jfinal.kit.HttpKit;
  12. import com.jfinal.kit.PropKit;
  13. import com.jfinal.plugin.activerecord.Db;
  14. import com.jfinal.plugin.activerecord.Record;
  15. import com.jfinal.weixin.sdk.api.ApiConfig;
  16. import com.jfinal.weixin.sdk.api.ApiConfigKit;
  17. import com.jfinal.weixin.sdk.api.JsTicket;
  18. import com.jfinal.weixin.sdk.api.JsTicketApi;
  19. import com.jfinal.weixin.sdk.api.JsTicketApi.JsApiType;
  20. import com.jfinal.weixin.sdk.cache.IAccessTokenCache;
  21. import com.qlm.annotation.RequestUrl;
  22. import com.qlm.log.Log;
  23. import com.qlm.tools.WxUtil;
  24. import com.qlm.tools.ip.CityInfo;
  25. import com.qlm.tools.ip.IpAddressUtil;
  26. @RequestUrl("/mobile")
  27. public class MobileController extends Controller{
  28. @Clear
  29. public void trace(){
  30. try{
  31. setJsTicket();
  32. }catch(Exception e){
  33. Log.error("解析出错", e);
  34. }
  35. render("/mobile/index.jsp");
  36. }
  37. @Clear
  38. public void search(){
  39. String code = getPara("code","");
  40. String latitude = getPara("latitude");
  41. String longitude = getPara("longitude");
  42. CityInfo locationInfo = getInfo(latitude,longitude);
  43. String ipAddress = IpAddressUtil.getIpAddress(getRequest());
  44. CityInfo ipInfo = IpAddressUtil.getCityInfoByMemorySearch(ipAddress);
  45. String ipProvince = "";
  46. String ipCity = "";
  47. if(ipInfo != null){
  48. ipProvince = ipInfo.getProvince();
  49. ipCity = ipInfo.getCity();
  50. }
  51. if(locationInfo == null){
  52. locationInfo = new CityInfo();
  53. }
  54. String locationCity = locationInfo.getCity();
  55. String locationProvince = locationInfo.getProvince();
  56. String compareCity = "";
  57. String compareProvice = "";
  58. if(locationInfo != null){
  59. compareCity = locationInfo.getCity();
  60. compareProvice = locationInfo.getProvince();
  61. }
  62. if(WxUtil.isNull(compareCity)){
  63. compareCity = ipCity;
  64. compareProvice = ipProvince;
  65. }
  66. boolean status = false;
  67. String msg ="";
  68. Record searchInfo = new Record();
  69. Long searchatCount = Db.queryLong("select count(*) from t_jz_searchrecord where child_code = ?",code);
  70. if(searchatCount == null){
  71. searchatCount = 0L;
  72. }
  73. searchatCount++;
  74. searchInfo.set("child_code", code).set("count", searchatCount).set("create_time", new Date())
  75. .set("ip_addr", ipProvince+ipCity)
  76. .set("ip", ipAddress).set("location", locationProvince+locationCity);
  77. Record result = new Record();
  78. boolean cuan = true;
  79. boolean isThird = false;
  80. if(code.length() ==14){//易码
  81. try{
  82. isThird = true;
  83. String jsonData = HttpKit.get("http://saas.ymbs.com.cn/ccn/sk-warehouse-out/scanCode/"+code);
  84. JSONObject parseObject = JSONObject.parseObject(jsonData);
  85. JSONObject data = parseObject.getJSONObject("data");
  86. String distributorName = data.getString("distributorName");
  87. String operateDate = data.getString("operateDate");
  88. String salesTerritory = data.getString("salesTerritory");
  89. String productName = data.getString("productName");
  90. result.set("pinxiang", productName);
  91. Record fahuoInfo = new Record();
  92. fahuoInfo.set("DeliveryTime", operateDate).set("CustomerName", distributorName);
  93. Record jxsInfo = Db.findFirst("select * from jinzai_jxs_area where jxs = ?",distributorName);
  94. if(jxsInfo != null){
  95. String saleCity = jxsInfo.getStr("city");
  96. String saleProvince = jxsInfo.getStr("province");
  97. if(saleCity.equals(compareCity)){
  98. cuan = false;
  99. }
  100. result.set("saleLocation", saleProvince+saleCity);
  101. searchInfo.set("kehu", saleProvince+saleCity);
  102. result.set("fahuoInfo", fahuoInfo);
  103. status = true;
  104. }
  105. }catch(Exception e){
  106. Log.info("em接口查询失败,"+code);
  107. e.printStackTrace();
  108. }
  109. }else if(code.length() == 21){
  110. try{
  111. isThird = true;
  112. Map<String,String> header =new HashMap<String,String>();
  113. header.put("content-type", "application/json;charset=UTF-8");
  114. JSONObject obj = new JSONObject();
  115. obj.put("code", code);
  116. obj.put("latitude", 34.16559);
  117. obj.put("longitude", 112.824936);
  118. String jsonData = HttpKit.post("https://jinzai.oklinklink.com/api/trace/inspect/customer/find",obj.toJSONString(),header);
  119. JSONObject parseObject = JSONObject.parseObject(jsonData);
  120. JSONObject data = parseObject.getJSONObject("data");
  121. String distributorName = data.getString("bizCorpName");
  122. String operateDate = data.getString("billTime");
  123. String productName = data.getString("productName");
  124. result.set("pinxiang", productName);
  125. Record fahuoInfo = new Record();
  126. fahuoInfo.set("DeliveryTime", operateDate).set("CustomerName", distributorName);
  127. Record jxsInfo = Db.findFirst("select * from jinzai_jxs_area where jxs = ?",distributorName);
  128. if(jxsInfo != null){
  129. String saleCity = jxsInfo.getStr("city");
  130. String saleProvince = jxsInfo.getStr("province");
  131. if(saleCity!=null&&saleCity.equals(compareCity)){
  132. cuan = false;
  133. }
  134. result.set("saleLocation", saleProvince+saleCity);
  135. searchInfo.set("kehu", saleProvince+saleCity);
  136. result.set("fahuoInfo", fahuoInfo);
  137. status = true;
  138. }
  139. }catch(Exception e){
  140. Log.info("em接口查询失败,"+code);
  141. e.printStackTrace();
  142. }
  143. }else if(code.length() == 20){
  144. String master_code = code;
  145. master_code = master_code.toUpperCase();
  146. Record masterInfo = Db.findFirst("select * from jinzai_upload_master where id = ?",master_code);
  147. String pinxiang = masterInfo.getStr("pinxiang");
  148. result.set("pinxiang", pinxiang);
  149. searchInfo.set("product_name", pinxiang);
  150. if(!WxUtil.isNull(master_code)){
  151. status = true;
  152. Record fahuoInfo = Db.findFirst("select * from deliveryorders where CaseCode =?",master_code);
  153. if(fahuoInfo != null){
  154. String CustomerNo = fahuoInfo.getStr("CustomerNo");
  155. String ProductName = fahuoInfo.getStr("ProductName");
  156. Record jxsInfo = Db.findFirst("select * from jinzai_jxs_area where code = ?",CustomerNo);
  157. if(jxsInfo != null){
  158. String saleCity = jxsInfo.getStr("city");
  159. String saleProvince = jxsInfo.getStr("province");
  160. if(saleCity.equals(compareCity)){
  161. cuan = false;
  162. }
  163. result.set("saleLocation", saleProvince+saleCity);
  164. searchInfo.set("kehu", saleProvince+saleCity);
  165. result.set("fahuoInfo", fahuoInfo);
  166. }
  167. }
  168. }
  169. }
  170. else{
  171. Record jinzai_upload_child = Db.findFirst("select * from jinzai_upload_child where child_code = ?",code);
  172. if(jinzai_upload_child!=null){
  173. String master_code = jinzai_upload_child.getStr("master_code");
  174. Record masterInfo = Db.findFirst("select * from jinzai_upload_master where id = ?",master_code);
  175. String pinxiang = masterInfo.getStr("pinxiang");
  176. result.set("pinxiang", pinxiang);
  177. searchInfo.set("product_name", pinxiang);
  178. if(!WxUtil.isNull(master_code)){
  179. status = true;
  180. Record fahuoInfo = Db.findFirst("select * from deliveryorders where CaseCode =?",master_code);
  181. if(fahuoInfo != null){
  182. String CustomerNo = fahuoInfo.getStr("CustomerNo");
  183. String ProductName = fahuoInfo.getStr("ProductName");
  184. Record jxsInfo = Db.findFirst("select * from jinzai_jxs_area where code = ?",CustomerNo);
  185. if(jxsInfo != null){
  186. String saleCity = jxsInfo.getStr("city");
  187. String saleProvince = jxsInfo.getStr("province");
  188. if(saleCity.equals(compareCity)){
  189. cuan = false;
  190. }
  191. result.set("saleLocation", saleProvince+saleCity);
  192. searchInfo.set("kehu", saleProvince+saleCity);
  193. result.set("fahuoInfo", fahuoInfo);
  194. }
  195. }
  196. }
  197. }
  198. }
  199. if(cuan){
  200. searchInfo.set("status", 0);
  201. }else{
  202. searchInfo.set("status", 1);
  203. }
  204. if(!isThird){
  205. Db.save("t_jz_searchrecord", searchInfo);
  206. }
  207. result.set("status", status).set("msg", msg).set("cuan", cuan).set("location", compareProvice+compareCity);
  208. renderJson(result);
  209. }
  210. /**
  211. * 1是我们自己的
  212. * 2是易码
  213. * 3是爱创
  214. * @param code
  215. * @return
  216. */
  217. private int codeType(String code) {
  218. if(code.length() == 14){
  219. return 3;
  220. }
  221. if(code.length() == 22){
  222. }
  223. return 0;
  224. }
  225. private static CityInfo getInfo(String latitude,String longitude){
  226. if(latitude == null || longitude == null){
  227. return null;
  228. }
  229. String location = latitude+","+longitude;
  230. String key = "HTABZ-CBHRQ-WXT5C-BWAGZ-ARXY3-QMB5N";
  231. String url = "https://apis.map.qq.com/ws/geocoder/v1/?location="+location+"&key="+key+"&get_poi=0";
  232. System.out.println(url);
  233. String xmlStr = HttpKit.get(url);
  234. JSONObject parseObject = JSONObject.parseObject(xmlStr);
  235. String message = parseObject.getString("message");
  236. if("Success".equals(message)){
  237. JSONObject result = parseObject.getJSONObject("result");
  238. JSONObject adInfo = result.getJSONObject("ad_info");
  239. String province = adInfo.getString("province");
  240. String city = adInfo.getString("city");
  241. CityInfo ipInfo = new CityInfo();
  242. ipInfo.setCity(city);
  243. ipInfo.setProvince(province);
  244. return ipInfo;
  245. }
  246. return null;
  247. }
  248. public static void main(String[] args) {
  249. CityInfo info = getInfo(30.59276+"",114.30525+"");
  250. }
  251. public void setJsTicket() {
  252. ApiConfig apiConfig = getApiConfig();
  253. ApiConfigKit.setThreadLocalApiConfig(apiConfig);
  254. JsTicket jsApiTicket = JsTicketApi.getTicket(JsApiType.jsapi);
  255. if(!jsApiTicket.isSucceed()){
  256. Db.update("insert t_error value(id,now())");
  257. IAccessTokenCache accessTokenCache = ApiConfigKit.getAccessTokenCache();
  258. String key = apiConfig.getAppId() + ':' + JsApiType.jsapi.name();
  259. accessTokenCache.remove(key);
  260. jsApiTicket = JsTicketApi.getTicket(JsApiType.jsapi);
  261. Log.info("重新获取ticket,成功:"+jsApiTicket.isSucceed());
  262. }
  263. String ticket = jsApiTicket.getTicket();
  264. String nonce_str = create_nonce_str();
  265. // 注意 URL 一定要动态获取,不能 hardcode.
  266. String authoUrl = PropKit.get("authoUrl");
  267. String url = authoUrl // 项目名称
  268. + getRequest().getServletPath();// 请求页面或其他地址
  269. String qs = getRequest().getQueryString(); // 参数
  270. if (qs != null) {
  271. url = url + "?" + (getRequest().getQueryString());
  272. }
  273. String timestamp = create_timestamp();
  274. // 这里参数的顺序要按照 key 值 ASCII 码升序排序
  275. //注意这里参数名必须全部小写,且必须有序
  276. String str = "jsapi_ticket=" + ticket +
  277. "&noncestr=" + nonce_str +
  278. "&timestamp=" + timestamp +
  279. "&url=" + url;
  280. String signature = HashKit.sha1(str);
  281. setAttr("appId", ApiConfigKit.getApiConfig().getAppId());
  282. setAttr("nonceStr", nonce_str);
  283. setAttr("timestamp", timestamp);
  284. setAttr("url", url);
  285. setAttr("signature", signature);
  286. setAttr("jsapi_ticket", ticket);
  287. }
  288. private static String create_timestamp() {
  289. return Long.toString(System.currentTimeMillis() / 1000);
  290. }
  291. private static String create_nonce_str() {
  292. return UUID.randomUUID().toString();
  293. }
  294. public ApiConfig getApiConfig() {
  295. ApiConfig ac = new ApiConfig();
  296. // 配置微信 API 相关常量
  297. ac.setToken("1");
  298. ac.setAppId(PropKit.get("appid"));
  299. ac.setAppSecret(PropKit.get("appsecret"));
  300. /**
  301. * 是否对消息进行加密,对应于微信平台的消息加解密方式: 1:true进行加密且必须配置 encodingAesKey
  302. * 2:false采用明文模式,同时也支持混合模式
  303. */
  304. ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
  305. ac.setEncodingAesKey(PropKit.get("encodingAesKey",
  306. "setting it in config file"));
  307. return ac;
  308. }
  309. }