WarrantyCardHandler.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package com.iamberry.wechat.handles.warranty;
  2. import com.iamberry.app.tool.util.HttpUtility;
  3. import com.iamberry.wechat.core.entity.ResultMsg;
  4. import com.iamberry.wechat.core.entity.WechatUtils;
  5. import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
  6. import com.iamberry.wechat.core.entity.member.Member;
  7. import com.iamberry.wechat.core.entity.product.ProductColor;
  8. import com.iamberry.wechat.core.entity.warrantyCard.WarrantyCard;
  9. import com.iamberry.wechat.face.admin.SystemService;
  10. import com.iamberry.wechat.face.cart.ProductInfoService;
  11. import com.iamberry.wechat.face.mq.EfastOrderService;
  12. import com.iamberry.wechat.face.phone.PhoneCodeService;
  13. import com.iamberry.wechat.face.warranty.WarrantyService;
  14. import com.iamberry.wechat.tools.HttpClient431Util;
  15. import com.iamberry.wechat.tools.NameUtils;
  16. import com.iamberry.wechat.tools.ResponseJson;
  17. import com.iamberry.wechat.tools.ResultInfo;
  18. import net.sf.json.JSONArray;
  19. import org.apache.commons.lang.StringUtils;
  20. import org.apache.http.ParseException;
  21. import org.json.JSONException;
  22. import org.json.JSONObject;
  23. import org.jsoup.Jsoup;
  24. import org.jsoup.nodes.Document;
  25. import org.jsoup.nodes.Element;
  26. import org.jsoup.select.Elements;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Controller;
  29. import org.springframework.web.bind.annotation.RequestMapping;
  30. import org.springframework.web.bind.annotation.ResponseBody;
  31. import javax.servlet.http.HttpServletRequest;
  32. import java.io.IOException;
  33. import java.text.MessageFormat;
  34. import java.text.SimpleDateFormat;
  35. import java.util.ArrayList;
  36. import java.util.HashMap;
  37. import java.util.List;
  38. import java.util.Map;
  39. import java.util.regex.Matcher;
  40. import java.util.regex.Pattern;
  41. /**
  42. * 质保卡
  43. * Created by liuzhiwei on 2017/12/14.
  44. */
  45. @Controller
  46. @RequestMapping("/wechat/warranty")
  47. public class WarrantyCardHandler {
  48. @Autowired
  49. private SystemService systemService;
  50. @Autowired
  51. private WechatUtils wechatUtils;
  52. @Autowired
  53. private PhoneCodeService phoneCodeService;
  54. @Autowired
  55. private WarrantyService warrantyService;
  56. /**
  57. * 根据电话号码查询百胜订单信息
  58. * @param request
  59. * @param member
  60. * @return
  61. * @throws Exception
  62. */
  63. @ResponseBody
  64. @RequestMapping("/select_efast_by_tel")
  65. public ResultMsg selectEfastByTel(HttpServletRequest request, Member member) throws Exception {
  66. ResultMsg msg = new ResultMsg();
  67. String phone = "13590159563";
  68. Map<String,Object> map = new HashMap<String,Object>();
  69. StringBuilder txtOrderId = new StringBuilder();
  70. int num = 0;
  71. //获取cookie值
  72. ShopSystemRule rule = systemService.selectOneShopRuleById(244);
  73. String url = NameUtils.getConfig("efast_order_url") + phone;
  74. Map<String,String> params = new HashMap<String,String>();
  75. String cookie = rule.getRuleDesc();
  76. //查询百胜订单信息
  77. String str = HttpClient431Util.doGet(params,url,null,null,cookie);
  78. Document html = Jsoup.parse(str);
  79. Elements trs = html.body().getElementsByTag("tr");
  80. //System.out.println("trs="+trs);
  81. for (Element tr : trs) {
  82. Elements tds = tr.getElementsByTag("td");
  83. for (int i = 0; i < tds.size();i++) {
  84. Element td = tds.get(i);
  85. //校验时间格式正则表达式
  86. String timeTag = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-9]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$";
  87. String tdText = td.html().toString();
  88. if (tdText.length() > 24) {
  89. tdText = tdText.substring(4, 24).trim();
  90. } else {
  91. tdText = tdText.substring(0, tdText.length() - 1).trim();
  92. }
  93. Pattern p = Pattern.compile(timeTag);
  94. Matcher matcher = p.matcher(tdText);
  95. boolean flag = matcher.matches();
  96. if (flag) {
  97. Element tdId = tds.get(i+1);
  98. //获取下一个td中的span标签内的内容
  99. Elements spans = tdId.getElementsByTag("span");
  100. Element span = spans.get(0);
  101. String spanText = span.html().toString();
  102. spanText = span.html().toString().substring(0,spanText.indexOf("&lt;"));
  103. num++;
  104. txtOrderId.append(spanText);
  105. txtOrderId.append(",");
  106. }
  107. }
  108. }
  109. map.put("num",num);
  110. map.put("txtOrderId",txtOrderId.toString());
  111. msg.setData(map);
  112. msg.setStatus(true);
  113. return msg;
  114. }
  115. /**
  116. * 添加质保卡信息
  117. * @param request
  118. * @return
  119. * @throws Exception
  120. */
  121. @ResponseBody
  122. @RequestMapping("/add_warranty_card_list")
  123. public ResultMsg addWarrantyCardList(HttpServletRequest request, Member member) throws Exception {
  124. ResultMsg msg = new ResultMsg();
  125. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  126. String cardWatero = request.getParameter("cardWatero");
  127. String cardProvince = request.getParameter("cardProvince");
  128. String cardCity = request.getParameter("cardCity");
  129. String cardDistrict = request.getParameter("cardDistrict");
  130. String txtOrderId = request.getParameter("txtOrderId");
  131. //查询用户信息
  132. Member memberInfo = wechatUtils.getUserBySession(request);
  133. if (memberInfo == null) {
  134. msg.setResultCode(ResultInfo.ERRORCODE);
  135. msg.setStatus(false);
  136. msg.setMessage("该用户不存在!");
  137. return msg;
  138. }
  139. member.setUserId(memberInfo.getUserId());
  140. member.setUserOpenid(memberInfo.getUserOpenid());
  141. if (!StringUtils.isNotEmpty(cardProvince)) {
  142. String ip = getIp(request);
  143. Map<String,Object> locations = getLocation(ip);
  144. if (StringUtils.isNotEmpty((String)locations.get("province"))) {
  145. cardProvince = (String)locations.get("province");
  146. cardCity = (String)locations.get("city");
  147. cardDistrict = (String)locations.get("district");
  148. }
  149. }
  150. if (!StringUtils.isNotEmpty(cardWatero)) {
  151. msg.setResultCode(ResultInfo.ERRORCODE);
  152. msg.setStatus(false);
  153. msg.setMessage("水质范围为空,请重新填写水质范围!");
  154. return msg;
  155. }
  156. //验证手机验证码是否正确
  157. ResponseJson code = phoneCodeService.validCode(member.getUserTel(),member.getPhoneCode());
  158. if (code.getReturnCode() != 200) {
  159. msg.setResultCode(ResultInfo.ERRORCODE);
  160. msg.setStatus(false);
  161. msg.setMessage("验证码不正确,请重新输入!");
  162. return msg;
  163. }
  164. //添加机器信息
  165. boolean flag = warrantyService.addWarrantyList(txtOrderId,member,cardWatero,
  166. cardProvince,cardCity,cardDistrict);
  167. if (flag) {
  168. msg.setResultCode(ResultInfo.SUCCESSCODE);
  169. msg.setStatus(true);
  170. } else {
  171. msg.setResultCode(ResultInfo.ERRORCODE);
  172. msg.setStatus(false);
  173. }
  174. return msg;
  175. }
  176. /**
  177. * 获取ip地址
  178. * @param request
  179. * @return
  180. */
  181. public static String getIp(HttpServletRequest request) {
  182. String ip = request.getHeader("x-forwarded-for");
  183. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  184. ip = request.getHeader("Proxy-Client-IP");
  185. }
  186. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  187. ip = request.getHeader("WL-Proxy-Client-IP");
  188. }
  189. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  190. ip = request.getRemoteAddr();
  191. }
  192. // 获取ip地址, 若多级代理,第一个IP为客户端真实IP,多个IP按照','分割
  193. if (ip != null && ip.indexOf(",") != -1) {
  194. ip = ip.split(",")[0];
  195. }
  196. return ip;
  197. }
  198. /**
  199. * 获取地址信息
  200. * @param ip
  201. * @return
  202. */
  203. public static Map<String,Object> getLocation(String ip) {
  204. Map<String,Object> map = new HashMap<String,Object>();
  205. try {
  206. JSONObject json = new JSONObject(
  207. HttpUtility.httpsGet(MessageFormat.format(NameUtils.getConfig("SINA_IP_URL"),ip)));
  208. String province = json.getString("province");
  209. String city = json.getString("city");
  210. String district = json.getString("district");
  211. map.put("province",province);
  212. map.put("city",city);
  213. map.put("district",district);
  214. } catch (ParseException | IOException | JSONException e) {
  215. System.out.println("------------获取地址出错------------");
  216. }
  217. return map;
  218. }
  219. }