Elec.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. package com.happy.action;
  2. import com.google.gson.Gson;
  3. import com.google.gson.reflect.TypeToken;
  4. import com.happy.Model.*;
  5. import com.happy.Model.weixin.PayResult;
  6. import com.happy.Model.weixin.WechatUnifiedOrder;
  7. import com.happy.Unitil_nsh.GetHttpParam;
  8. import com.happy.Until.HttpUtils;
  9. import com.happy.Until.ResUtil;
  10. import com.happy.Until.ResponseUtil;
  11. import com.happy.Until.Time.OnlineTime;
  12. import com.happy.Until.weixin.EndPay;
  13. import com.happy.Until.weixin.JaxbUtil;
  14. import com.happy.Until.weixin.PayWxUtil;
  15. import com.happy.Until.weixin.TongYiReturn;
  16. import com.happy.common.http.HttpsClient;
  17. import com.happy.common.wx.WxUtil;
  18. import com.happy.service.*;
  19. import com.opensymphony.xwork2.ActionSupport;
  20. import net.sf.json.JSONObject;
  21. import org.apache.struts2.ServletActionContext;
  22. import org.apache.struts2.interceptor.ServletRequestAware;
  23. import testExport.DataClient;
  24. import javax.annotation.Resource;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import javax.servlet.http.HttpSession;
  28. import java.io.BufferedReader;
  29. import java.io.PrintWriter;
  30. import java.text.SimpleDateFormat;
  31. import java.util.*;
  32. public class Elec extends ActionSupport implements ServletRequestAware {
  33. private HttpServletRequest request;
  34. public HttpServletResponse response;
  35. public String code;
  36. public String stu_number;
  37. public String re_time;
  38. public String roomSelect;
  39. public String ord_no;
  40. public String out_no;
  41. public String status;
  42. public String dom;
  43. @Resource
  44. public UserService userService;
  45. @Resource
  46. public ConsumeService consumeService;
  47. @Resource
  48. public RechargeService rechargeService;
  49. @Resource
  50. public WxMenuService wxMenuService;
  51. @Resource
  52. public ElecService elecService;
  53. public HttpServletRequest getRequest() {
  54. return request;
  55. }
  56. public void setRequest(HttpServletRequest request) {
  57. this.request = request;
  58. }
  59. public void setServletRequest(HttpServletRequest request) {
  60. this.request = request;
  61. }
  62. public HttpServletResponse getResponse() {
  63. return response;
  64. }
  65. public void setResponse(HttpServletResponse response) {
  66. this.response = response;
  67. }
  68. public String getCode() {
  69. return code;
  70. }
  71. public void setCode(String code) {
  72. this.code = code;
  73. }
  74. public String getStu_number() {
  75. return stu_number;
  76. }
  77. public void setStu_number(String stu_number) {
  78. this.stu_number = stu_number;
  79. }
  80. public String getRe_time() {
  81. return re_time;
  82. }
  83. public void setRe_time(String re_time) {
  84. this.re_time = re_time;
  85. }
  86. public String getRoomSelect() {
  87. return roomSelect;
  88. }
  89. public void setRoomSelect(String roomSelect) {
  90. this.roomSelect = roomSelect;
  91. }
  92. public String getOrd_no() {
  93. return ord_no;
  94. }
  95. public void setOrd_no(String ord_no) {
  96. this.ord_no = ord_no;
  97. }
  98. public String getOut_no() {
  99. return out_no;
  100. }
  101. public void setOut_no(String out_no) {
  102. this.out_no = out_no;
  103. }
  104. public String getStatus() {
  105. return status;
  106. }
  107. public void setStatus(String status) {
  108. this.status = status;
  109. }
  110. public String getDom() {
  111. return dom;
  112. }
  113. public void setDom(String dom) {
  114. this.dom = dom;
  115. }
  116. public String stu_dom() throws Exception {
  117. JSONObject resultJson = new JSONObject();
  118. List<Users> user = userService.selectByStu(stu_number);
  119. if (user == null){
  120. resultJson.put("msg", "未绑定用户信息");
  121. ResUtil.write(resultJson, ServletActionContext.getResponse());
  122. return null;
  123. }
  124. String school = user.get(0).getCampus();
  125. String room = user.get(0).getDom();
  126. if (school==null || room==null){
  127. resultJson.put("msg", "未绑定宿舍");
  128. ResUtil.write(resultJson, ServletActionContext.getResponse());
  129. return null;
  130. }
  131. String data = school.concat(room);
  132. resultJson.put("msg", "1");
  133. resultJson.put("dom", data);
  134. ResUtil.write(resultJson, ServletActionContext.getResponse());
  135. return null;
  136. }
  137. public String Pay() throws Exception {
  138. JSONObject resultJson = new JSONObject();
  139. if (roomSelect==null){
  140. resultJson.put("mess", "请选择房间号!");
  141. ResUtil.write(resultJson, ServletActionContext.getResponse());
  142. return null;
  143. }
  144. String school = roomSelect.substring(0, 5);
  145. String room = roomSelect.substring(5);
  146. List<Build_elec> spl = elecService.queryUser_id(school, room);
  147. if (spl == null){
  148. resultJson.put("mess", "未查询到户号!");
  149. ResUtil.write(resultJson, ServletActionContext.getResponse());
  150. return null;
  151. }
  152. String user_id = spl.get(0).getUser_id();
  153. HttpSession session = request.getSession();
  154. Gson gson=new Gson();
  155. System.out.println("房间号:"+room);
  156. System.out.println("户号:"+user_id);
  157. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  158. "appid="+ WeiXinUtil.appid_elc +
  159. "&secret="+ WeiXinUtil.screct_elc +
  160. "&js_code="+code+
  161. "&grant_type=authorization_code";
  162. if (code==null){
  163. resultJson.put("mess", "code不能为空");
  164. ResUtil.write(resultJson, ServletActionContext.getResponse());
  165. }
  166. String jsons = HttpsClient.sendPost(url, "");
  167. HashMap<String, String> userMap = gson.fromJson(jsons.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  168. String open_id = "";
  169. try{
  170. open_id = userMap.get("openid").toString();
  171. }catch (Exception e){
  172. resultJson.put("mess", "code超时");
  173. ResUtil.write(resultJson, ServletActionContext.getResponse());
  174. return null;
  175. }
  176. List<Users> u = userService.queryByopenid(open_id); // 查找是不是会员,不是会员不能充值
  177. String num = request.getParameter("num");
  178. session.setAttribute("num", num); // 存入金额session中
  179. if (u != null ) {
  180. String ip = request.getParameter("ip");
  181. double money = Double.parseDouble(request.getParameter("num"));
  182. int a = (int) (money * 100);
  183. WechatUnifiedOrder w = new WechatUnifiedOrder();
  184. w.setAppid(WeiXinUtil.appid);
  185. w.setAttach("chuanghai");
  186. w.setBody("chuanghai");
  187. w.setMch_id(WeiXinUtil.account_elc);
  188. w.setNonce_str(PayWxUtil.getNonceStr());// 随机支付串
  189. w.setNotify_url(WeiXinUtil.ip + "elpayResulet.action");// 支付结果回调地址
  190. w.setOpenid(open_id);
  191. String orderNo = WxUtil.mchOrderNo();
  192. w.setOut_trade_no(orderNo);
  193. w.setSpbill_create_ip(ip);
  194. w.setTotal_fee(a);
  195. w.setTrade_type("JSAPI");
  196. Map<String, String> params = new HashMap<String, String>();
  197. params.put("attach", w.getAttach());
  198. params.put("appid", w.getAppid());
  199. params.put("mch_id", w.getMch_id());
  200. params.put("nonce_str", w.getNonce_str());
  201. params.put("body", w.getBody());
  202. params.put("out_trade_no", w.getOut_trade_no());
  203. params.put("total_fee", w.getTotal_fee() + "");
  204. params.put("spbill_create_ip", w.getSpbill_create_ip());
  205. params.put("notify_url", w.getNotify_url());
  206. params.put("trade_type", w.getTrade_type());
  207. params.put("openid", w.getOpenid());
  208. w.setSign(PayWxUtil.getSign(params, WeiXinUtil.APIid_elc));
  209. params.put("sign", w.getSign());
  210. String retXml = JaxbUtil.getRequestXml(params);
  211. String msg = HttpUtils.post("https://api.mch.weixin.qq.com/pay/unifiedorder", retXml);
  212. System.out.println("msg: "+ msg);
  213. if (msg.indexOf("FAIL") > -1) {
  214. JSONObject json = new JSONObject();
  215. json.put("pay", "error");
  216. ResponseUtil.write(json, ServletActionContext.getResponse());
  217. return null;
  218. } else {
  219. JaxbUtil requestBinder = new JaxbUtil(TongYiReturn.class, JaxbUtil.CollectionWrapper.class);
  220. TongYiReturn to = requestBinder.fromXml(msg);
  221. if (to.getReturn_code().equals("SUCCESS") && to.getResult_code().equals("SUCCESS")) {
  222. EndPay pay = new EndPay();
  223. pay.setAppId(WeiXinUtil.appid_elc);
  224. pay.setSignType("MD5");
  225. pay.setTimeStamp(System.currentTimeMillis() / 1000 + "");
  226. pay.setPrepay_id(to.getPrepay_id());
  227. pay.setNonceStr(PayWxUtil.getNonceStr());
  228. Map<String, String> requestMap = new HashMap<String, String>();
  229. requestMap.put("appId", pay.getAppId());
  230. requestMap.put("timeStamp", pay.getTimeStamp());
  231. requestMap.put("nonceStr", pay.getNonceStr());
  232. requestMap.put("package", "prepay_id=" + pay.getPrepay_id());
  233. requestMap.put("signType", "MD5");
  234. pay.setPaySign(PayWxUtil.getSign(requestMap, WeiXinUtil.APIid_elc));
  235. // requestMap.put("sign",pay.getPaySign());
  236. // String ret = JaxbUtil.getRequestXml(requestMap);
  237. // System.out.println(ret);
  238. JSONObject json = new JSONObject();
  239. json.put("pay", pay);
  240. ResUtil.write(json, ServletActionContext.getResponse());
  241. Recharge_elc pay1 = new Recharge_elc();
  242. SimpleDateFormat simp1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  243. String time = simp1.format(new Date());
  244. pay1.setOrder_num(orderNo);
  245. pay1.setStu_number(u.get(0).getStu_number());
  246. pay1.setAccount((double) a / 100);
  247. pay1.setUser_name(u.get(0).getUser_name());
  248. pay1.setState(0);
  249. pay1.setCard_number(u.get(0).getStu_number());
  250. pay1.setRe_time(time);
  251. pay1.setSchool(school);
  252. List<Build_elec> be = elecService.queryBuildByDom(room);
  253. pay1.setRoom(room);
  254. pay1.setBuild(be.get(0).getBuild());
  255. rechargeService.insertRecharge2(pay1);
  256. System.out.println("保存成功");
  257. }
  258. }
  259. } else { // 说明不是会员
  260. JSONObject json = new JSONObject();
  261. json.put("pay", 1);
  262. ResUtil.write(json, ServletActionContext.getResponse());
  263. }
  264. return null;
  265. }
  266. // 第五步:支付页面用户输完密码后微信会把支付结果回调到这里,我们根据需要存储支付记录,和执行不同的方法
  267. public String payResulet() throws Exception { // 微信支付结果通知
  268. System.out.println("进来了");
  269. Gson gson = new Gson();
  270. BufferedReader reader = null;// BufferedReader 字符输入流
  271. reader = request.getReader();
  272. String line = "";
  273. String xmlString = null;
  274. StringBuffer inputString = new StringBuffer();
  275. while ((line = reader.readLine()) != null) {
  276. inputString.append(line);
  277. }
  278. xmlString = inputString.toString();
  279. request.getReader().close();
  280. JaxbUtil requestBinder = new JaxbUtil(PayResult.class, PayResult.class);
  281. PayResult result = requestBinder.fromXml(xmlString);// Xml到Java,用fromXML()方法
  282. if (result.getResult_code().equals("SUCCESS")) { // 交易成功,支付结果转换为对象
  283. String orderNo = result.getOut_trade_no();// 微信支付订单号
  284. rechargeService.succRecharge2(orderNo); // 修改支付状态为已支付
  285. System.out.println("支付成功了");
  286. System.out.println("result=" + result.toString());
  287. System.out.println("订单号:"+orderNo);
  288. Recharge_elc re = rechargeService.findPayElByNo(orderNo);// 根据 微信支付订单号 查找支付记录信息
  289. System.out.println("订单号二:"+re.getOrder_num());
  290. // 更新宿舍号
  291. System.out.println("房间号:"+re.getSchool());
  292. userService.updateDom(re.getSchool(), re.getBuild(), re.getRoom(), re.getStu_number());
  293. if (re == null) { // 没有交易记录 发送失败消息给商家
  294. String returnMsg = "<xml><return_code><![CDATA[fail]]></return_code><return_msg><![CDATA[error]]></return_msg></xml>";
  295. HttpServletResponse response = ServletActionContext.getResponse();
  296. response.setContentType("text/html;charset=utf-8");
  297. PrintWriter out = response.getWriter();
  298. out.println(returnMsg);
  299. out.flush();
  300. out.close();
  301. // System.out.println("pay不为空");
  302. } else { // 交易记录开始记录
  303. // 获得交易支付成功用户的信息
  304. List<Build_elec> be = elecService.queryUser_id(re.getSchool(), re.getRoom());
  305. System.out.println("金额:"+re.getAccount());
  306. try {
  307. // 充值到第三方
  308. DataClient.getToken();
  309. com.alibaba.fastjson.JSONObject mess = DataClient.recharege(be.get(0).getUser_id(), orderNo, String.valueOf(re.getAccount()));
  310. HashMap<String, String> userMap = gson.fromJson(mess.toString(), new TypeToken<HashMap<String, String>>() {}.getType());
  311. String msg = userMap.get("msg");
  312. System.out.println("msg: "+msg);
  313. if (msg.equals("请求成功")) {
  314. System.out.println("请求接口成功。。");
  315. rechargeService.succRecharge3(orderNo); // 修改到账状态
  316. }
  317. }catch (Exception e){
  318. return null;
  319. }
  320. String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  321. HttpServletResponse response = ServletActionContext.getResponse();
  322. response.setContentType("text/html;charset=utf-8");
  323. PrintWriter out = response.getWriter();
  324. out.println(returnMsg);
  325. out.flush();
  326. out.close(); // 发送成功消息给商家
  327. }
  328. }
  329. return null;
  330. }
  331. public String pay_ns() throws Exception {
  332. JSONObject resultJson = new JSONObject();
  333. Gson gson = new Gson();
  334. String orderNo = WxUtil.mchOrderNo();
  335. if (roomSelect == null || roomSelect.equals("")){
  336. resultJson.put("msg", "获取宿舍异常");
  337. ResUtil.write(resultJson, ServletActionContext.getResponse());
  338. return null;
  339. }
  340. String school = roomSelect.substring(0, 5);
  341. String room = roomSelect.substring(5);
  342. if (stu_number==null || stu_number.equals("")){
  343. resultJson.put("msg", "学号不能为空");
  344. ResUtil.write(resultJson, ServletActionContext.getResponse());
  345. return null;
  346. }
  347. String mon = request.getParameter("num");
  348. if (mon == null || mon.equals("")){
  349. resultJson.put("msg", "获取金额异常");
  350. ResUtil.write(resultJson, ServletActionContext.getResponse());
  351. return null;
  352. }
  353. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  354. "appid="+ WeiXinUtil.appid_elcn +
  355. "&secret="+ WeiXinUtil.screct_elcn +
  356. "&js_code="+code+
  357. "&grant_type=authorization_code";
  358. if (code==null){
  359. resultJson.put("mess", "code不能为空");
  360. ResUtil.write(resultJson, ServletActionContext.getResponse());
  361. }
  362. String jsons = HttpsClient.sendPost(url, "");
  363. HashMap<String, String> userMap = gson.fromJson(jsons.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  364. String open_id = "";
  365. try{
  366. open_id = userMap.get("openid").toString();
  367. }catch (Exception e){
  368. resultJson.put("mess", "code超时");
  369. ResUtil.write(resultJson, ServletActionContext.getResponse());
  370. return null;
  371. }
  372. double money = Double.parseDouble(mon);
  373. int a = (int) (money * 100);
  374. com.alibaba.fastjson.JSONObject json = elecService.payOrder(orderNo, "WeixinJXYL", null, "电费充值", a,
  375. 0, 0, a, null, null, null, null,
  376. null, "附加数据", null, WeiXinUtil.ip + "elpayResuletNs.action", open_id);
  377. List<Users> u = userService.selectByStu(stu_number);
  378. Recharge_elc pay1 = new Recharge_elc();
  379. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  380. String time = sf.format(new Date());
  381. pay1.setOrder_num(orderNo);
  382. pay1.setStu_number(stu_number);
  383. pay1.setAccount((double) a / 100);
  384. pay1.setUser_name(u.get(0).getUser_name());
  385. pay1.setState(0);
  386. pay1.setCard_number(stu_number);
  387. pay1.setRe_time(time);
  388. pay1.setSchool(school);
  389. List<Build_elec> be = elecService.queryBuildByDom(room);
  390. pay1.setRoom(room);
  391. pay1.setBuild(be.get(0).getBuild());
  392. pay1.setDay_time(time.substring(0, 10));
  393. pay1.setPointid(be.get(0).getPointid());
  394. rechargeService.insertRecharge2(pay1);
  395. json.put("sub_openid", open_id);
  396. json.put("sub_appid", WeiXinUtil.appid_elcn);
  397. json.put("order", orderNo);
  398. json.put("account", money);
  399. json.put("stu_number", stu_number);
  400. ResUtil.write(json, ServletActionContext.getResponse());
  401. return null;
  402. }
  403. public String payResuletNs() throws Exception {
  404. System.out.println("成功进入农商");
  405. System.out.println("订单号:"+ord_no);
  406. System.out.println(status);
  407. JSONObject resultJson = new JSONObject();
  408. Gson gson = new Gson();
  409. if (status.equals("4")){
  410. ResUtil.write("notify_success", ServletActionContext.getResponse());
  411. }
  412. if (status.equals("1") ){
  413. rechargeService.succRecharge2(ord_no); // 修改支付状态为已支付
  414. Recharge_elc re = rechargeService.findPayElByNo(ord_no);// 根据 微信支付订单号 查找支付记录信息
  415. List<Build_elec> be = elecService.queryUser_id(re.getSchool(), re.getRoom());
  416. try {
  417. if (re.getState()==2){
  418. ResUtil.write("notify_success", ServletActionContext.getResponse());
  419. return null;
  420. }
  421. // 充值到第三方
  422. DataClient.getToken();
  423. com.alibaba.fastjson.JSONObject mess = DataClient.recharege(be.get(0).getUser_id().replace("\n", "").replace("\r", ""), ord_no, String.valueOf(re.getAccount()));
  424. HashMap<String, String> userMap = gson.fromJson(mess.toString(), new TypeToken<HashMap<String, String>>() {}.getType());
  425. String msg = userMap.get("msg");
  426. System.out.println("msg: "+msg);
  427. if (msg.equals("请求成功")) {
  428. System.out.println("请求接口成功。。");
  429. rechargeService.succRecharge3(ord_no); // 修改到账状态
  430. }
  431. ResUtil.write("notify_success", ServletActionContext.getResponse());
  432. }catch (Exception e){
  433. ResUtil.write("notify_success", ServletActionContext.getResponse());
  434. return null;
  435. }
  436. }
  437. return null;
  438. }
  439. public String queyRecordEle() throws Exception {
  440. JSONObject resultJson = new JSONObject();
  441. if (stu_number!=null && re_time!=null) {
  442. List<Recharge_elc> record = rechargeService.queryRecordByStu(stu_number, re_time);
  443. if (record!=null) {
  444. resultJson.put("mess", "返回成功");
  445. resultJson.put("data", record);
  446. ResUtil.write(resultJson, ServletActionContext.getResponse());
  447. }
  448. resultJson.put("mess", "未查到记录");
  449. ResUtil.write(resultJson, ServletActionContext.getResponse());
  450. return null;
  451. }
  452. resultJson.put("mess", "学号不能为空");
  453. ResUtil.write(resultJson, ServletActionContext.getResponse());
  454. return null;
  455. }
  456. // 查询每天电费使用量
  457. public String queryDayPower() throws Exception {
  458. JSONObject resultJson = new JSONObject();
  459. List<String> dateList = new ArrayList<>();
  460. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  461. for (int i=-2; i>-9; i--){
  462. Calendar calendar = Calendar.getInstance();
  463. calendar.add(Calendar.DAY_OF_WEEK,i);
  464. dateList.add(simpleDateFormat.format(calendar.getTime()));
  465. }
  466. StringBuilder sqlx = new StringBuilder(" and dataTime in (");
  467. for (int i=0; i<dateList.size(); i++){
  468. sqlx.append("'").append(dateList.get(i)).append("',");
  469. }
  470. sqlx.append("'')");
  471. List<Detail_elc2> lists = elecService.queryDayPower(dom, sqlx.toString());
  472. resultJson.put("code", "200");
  473. resultJson.put("data", lists);
  474. ResUtil.write(resultJson, ServletActionContext.getResponse());
  475. return null;
  476. }
  477. public String time() throws Exception {
  478. JSONObject resultJson = new JSONObject();
  479. String time = OnlineTime.time();
  480. resultJson.put("code", "200");
  481. resultJson.put("data", time);
  482. ResUtil.write(resultJson, ServletActionContext.getResponse());
  483. return null;
  484. }
  485. }