Wp.java 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757
  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.Pay;
  6. import com.happy.Model.weixin.PayResult;
  7. import com.happy.Model.weixin.WechatUnifiedOrder;
  8. import com.happy.Until.HttpUtils;
  9. import com.happy.Until.ResUtil;
  10. import com.happy.Until.ResponseUtil;
  11. import com.happy.Until.weixin.EndPay;
  12. import com.happy.Until.weixin.JaxbUtil;
  13. import com.happy.Until.weixin.PayWxUtil;
  14. import com.happy.Until.weixin.TongYiReturn;
  15. import com.happy.common.http.HttpsClient;
  16. import com.happy.common.wx.WxConfig;
  17. import com.happy.common.wx.WxConstants;
  18. import com.happy.common.wx.WxUtil;
  19. import com.happy.service.*;
  20. import com.opensymphony.xwork2.ActionSupport;
  21. import net.sf.json.JSONObject;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.apache.struts2.ServletActionContext;
  24. import org.apache.struts2.interceptor.ServletRequestAware;
  25. import javax.annotation.Resource;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import javax.servlet.http.HttpSession;
  29. import java.io.BufferedReader;
  30. import java.io.PrintWriter;
  31. import java.math.BigDecimal;
  32. import java.text.SimpleDateFormat;
  33. import java.util.Date;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. public class Wp extends ActionSupport implements ServletRequestAware {
  38. private HttpServletRequest request;
  39. public HttpServletResponse response;
  40. public String stu_number;
  41. public String id_card;
  42. public String begin_time;
  43. public String collect_code;
  44. public String user_name;
  45. public String re_time;
  46. public String userinfo;
  47. public String code;
  48. @Resource
  49. public UserService userService;
  50. @Resource
  51. public ConsumeService consumeService;
  52. @Resource
  53. public RechargeService rechargeService;
  54. @Resource
  55. public WxMenuService wxMenuService;
  56. @Resource
  57. public ConfigService configService;
  58. public String getUser_name() {
  59. return user_name;
  60. }
  61. public void setUser_name(String user_name) {
  62. this.user_name = user_name;
  63. }
  64. public String getCollect_code() {
  65. return collect_code;
  66. }
  67. public void setCollect_code(String collect_code) {
  68. this.collect_code = collect_code;
  69. }
  70. public String getBegin_time() {
  71. return begin_time;
  72. }
  73. public void setBegin_time(String begin_time) {
  74. this.begin_time = begin_time;
  75. }
  76. public String getId_card() {
  77. return id_card;
  78. }
  79. public void setId_card(String id_card) {
  80. this.id_card = id_card;
  81. }
  82. public String getStu_number() {
  83. return stu_number;
  84. }
  85. public void setStu_number(String stu_number) {
  86. this.stu_number = stu_number;
  87. }
  88. public HttpServletRequest getRequest() {
  89. return request;
  90. }
  91. public void setRequest(HttpServletRequest request) {
  92. this.request = request;
  93. }
  94. public void setServletRequest(HttpServletRequest request) {
  95. this.request = request;
  96. }
  97. public HttpServletResponse getResponse() {
  98. return response;
  99. }
  100. public void setResponse(HttpServletResponse response) {
  101. this.response = response;
  102. }
  103. public String getRe_time() {
  104. return re_time;
  105. }
  106. public void setRe_time(String re_time) {
  107. this.re_time = re_time;
  108. }
  109. public String getCode() {
  110. return code;
  111. }
  112. public void setCode(String code) {
  113. this.code = code;
  114. }
  115. public String getUserinfo() {
  116. return userinfo;
  117. }
  118. public void setUserinfo(String userinfo) {
  119. this.userinfo = userinfo;
  120. }
  121. public String openid() throws Exception {
  122. System.out.println("开始绑定");
  123. System.out.println(code);
  124. JSONObject resultJson = new JSONObject();
  125. if (userinfo==null){
  126. resultJson.put("code", "1");
  127. resultJson.put("msg", "获取信息异常");
  128. ResUtil.write(resultJson, ServletActionContext.getResponse());
  129. }
  130. Gson gson=new Gson();
  131. String stu_number="";
  132. String id_card="";
  133. String card_number="";
  134. String name="";
  135. String campus="";
  136. String dorm_number="";
  137. String telephone="";
  138. HashMap<String, Object> userinfos = gson.fromJson(userinfo.toString(), new TypeToken<HashMap<String, Object>>(){}.getType());
  139. System.out.println(userinfo);
  140. try{
  141. stu_number = userinfos.get("card_number").toString();
  142. id_card = userinfos.get("id_card").toString();
  143. card_number = userinfos.get("card_number").toString();
  144. name = userinfos.get("name").toString();
  145. campus = userinfos.get("campus").toString();
  146. dorm_number = userinfos.get("dorm_number").toString();
  147. telephone = userinfos.get("telephone").toString();
  148. }catch (Exception e){
  149. resultJson.put("code", "1");
  150. resultJson.put("msg", "解析数据失败");
  151. ResUtil.write(resultJson, ServletActionContext.getResponse());
  152. }
  153. if (card_number==null || card_number.equals("")){
  154. resultJson.put("code", "2");
  155. resultJson.put("msg", "卡号获取失败");
  156. ResUtil.write(resultJson, ServletActionContext.getResponse());
  157. return null;
  158. }
  159. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  160. "appid="+ WeiXinUtil.appid +
  161. "&secret="+ WeiXinUtil.screct +
  162. "&js_code="+code+
  163. "&grant_type=authorization_code";
  164. String json = HttpsClient.sendPost(url, "");
  165. HashMap<String, String> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  166. String openid = "";
  167. try {
  168. openid = userMap.get("openid").toString();
  169. }catch (Exception e){
  170. resultJson.put("code", "1");
  171. resultJson.put("msg", "openid获取失败");
  172. ResUtil.write(resultJson, ServletActionContext.getResponse());
  173. return null;
  174. }
  175. System.out.println("openid: "+openid);
  176. System.out.println("卡号:"+card_number);
  177. List<Users> us = userService.selectByCard_number(card_number);
  178. System.out.println("us: "+us);
  179. if (us != null){
  180. if (us.get(0).getOpenid()==null || us.get(0).getOpenid().equals("")){
  181. userService.updateOpenid(openid, stu_number, card_number);
  182. resultJson.put("code", "0");
  183. resultJson.put("msg", "更新信息");
  184. ResUtil.write(resultJson, ServletActionContext.getResponse());
  185. return null;
  186. }
  187. resultJson.put("code", "100");
  188. resultJson.put("mess", "用户已经存在");
  189. ResUtil.write(resultJson, ServletActionContext.getResponse());
  190. return null;
  191. }
  192. List<Users> us_openid = userService.queryByopenid(openid);
  193. if (us_openid!=null){
  194. resultJson.put("code", "100");
  195. resultJson.put("mess", "用户已经存在");
  196. ResUtil.write(resultJson, ServletActionContext.getResponse());
  197. return null;
  198. }
  199. Users uu = new Users();
  200. uu.setStu_number(stu_number);
  201. uu.setId_card(id_card);
  202. uu.setCard_number(card_number);
  203. uu.setUser_name(name);
  204. uu.setCampus(campus);
  205. uu.setBuild(dorm_number);
  206. uu.setDom(dorm_number);
  207. uu.setUser_phone(telephone);
  208. uu.setOpenid(openid);
  209. int num = userService.insertUser(uu);
  210. if (num > 0){
  211. resultJson.put("code", "0");
  212. resultJson.put("msg", "绑定成功");
  213. ResUtil.write(resultJson, ServletActionContext.getResponse());
  214. return null;
  215. }
  216. resultJson.put("code", "-1");
  217. resultJson.put("msg", "绑定失败");
  218. ResUtil.write(resultJson, ServletActionContext.getResponse());
  219. return null;
  220. }
  221. public String get_stu() throws Exception {
  222. Gson gson=new Gson();
  223. JSONObject resultJson = new JSONObject();
  224. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  225. "appid="+ WeiXinUtil.appid +
  226. "&secret="+ WeiXinUtil.screct +
  227. "&js_code="+code+
  228. "&grant_type=authorization_code";
  229. if (code==null){
  230. resultJson.put("mess", "code不能为空");
  231. ResUtil.write(resultJson, ServletActionContext.getResponse());
  232. }
  233. String json = HttpsClient.sendPost(url, "");
  234. HashMap<String, String> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  235. String openid = "";
  236. try{
  237. openid = userMap.get("openid").toString();
  238. }catch (Exception e){
  239. resultJson.put("mess", "code超时");
  240. ResUtil.write(resultJson, ServletActionContext.getResponse());
  241. return null;
  242. }
  243. List<Users> use = userService.queryByopenid(openid);
  244. if (use == null){
  245. resultJson.put("mess", "未查询到用户信息");
  246. }else {
  247. resultJson.put("mess", "返回成功");
  248. resultJson.put("info", use);
  249. }
  250. ResUtil.write(resultJson, ServletActionContext.getResponse());
  251. return null;
  252. }
  253. public String queryConsume() throws Exception {
  254. JSONObject resultJson = new JSONObject();
  255. if (stu_number==null){
  256. resultJson.put("mess", "学号异常");
  257. ResUtil.write(resultJson, ServletActionContext.getResponse());
  258. }
  259. List<Consume> consumes = consumeService.queryRecordByStu(stu_number, begin_time);
  260. if (consumes==null){
  261. resultJson.put("mess", "本月无消费记录");
  262. ResUtil.write(resultJson, ServletActionContext.getResponse());
  263. return null;
  264. }
  265. resultJson.put("mess", "返回成功");
  266. resultJson.put("data", consumes);
  267. ResUtil.write(resultJson, ServletActionContext.getResponse());
  268. return null;
  269. }
  270. // 统一下单生成 第四步,页面传入用户输入金额,ip,生成预支付订单,把微信回调的参数传递给页面,页面就可以调起支付
  271. public String Pay() throws Exception {
  272. HttpSession session = request.getSession();
  273. Gson gson=new Gson();
  274. JSONObject resultJson = new JSONObject();
  275. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  276. "appid="+ WeiXinUtil.appid +
  277. "&secret="+ WeiXinUtil.screct +
  278. "&js_code="+code+
  279. "&grant_type=authorization_code";
  280. if (code==null){
  281. resultJson.put("mess", "code不能为空");
  282. ResUtil.write(resultJson, ServletActionContext.getResponse());
  283. }
  284. String jsons = HttpsClient.sendPost(url, "");
  285. HashMap<String, String> userMap = gson.fromJson(jsons.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  286. String open_id = "";
  287. try{
  288. open_id = userMap.get("openid").toString();
  289. }catch (Exception e){
  290. resultJson.put("mess", "code超时");
  291. ResUtil.write(resultJson, ServletActionContext.getResponse());
  292. return null;
  293. }
  294. List<Users> u = userService.queryByopenid(open_id); // 查找是不是会员,不是会员不能充值
  295. String num = request.getParameter("num");
  296. session.setAttribute("num", num);// 存入金额session中
  297. if (u != null ) {
  298. String ip = request.getParameter("ip");
  299. double money = Double.parseDouble(request.getParameter("num"));
  300. int a = (int) (money * 100);
  301. WechatUnifiedOrder w = new WechatUnifiedOrder();
  302. w.setAppid(WeiXinUtil.appid);
  303. w.setAttach("chuanghai");
  304. w.setBody("chuanghai");
  305. w.setMch_id(WeiXinUtil.account);
  306. w.setNonce_str(PayWxUtil.getNonceStr());// 随机支付串
  307. w.setNotify_url(WeiXinUtil.ip + "wppayResulet.action");// 支付结果回调地址
  308. w.setOpenid(open_id);
  309. String orderNo = WxUtil.mchOrderNo();
  310. w.setOut_trade_no(orderNo);
  311. w.setSpbill_create_ip(ip);
  312. w.setTotal_fee(a);
  313. w.setTrade_type("JSAPI");
  314. Map<String, String> params = new HashMap<String, String>();
  315. params.put("attach", w.getAttach());
  316. params.put("appid", w.getAppid());
  317. params.put("mch_id", w.getMch_id());
  318. params.put("nonce_str", w.getNonce_str());
  319. params.put("body", w.getBody());
  320. params.put("out_trade_no", w.getOut_trade_no());
  321. params.put("total_fee", w.getTotal_fee() + "");
  322. params.put("spbill_create_ip", w.getSpbill_create_ip());
  323. params.put("notify_url", w.getNotify_url());
  324. params.put("trade_type", w.getTrade_type());
  325. params.put("openid", w.getOpenid());
  326. w.setSign(PayWxUtil.getSign(params, WeiXinUtil.APIid));
  327. params.put("sign", w.getSign());
  328. String retXml = JaxbUtil.getRequestXml(params);
  329. String msg = HttpUtils.post("https://api.mch.weixin.qq.com/pay/unifiedorder", retXml);
  330. System.out.println(444);
  331. if (msg.indexOf("FAIL") > -1) {
  332. JSONObject json = new JSONObject();
  333. json.put("pay", "error");
  334. ResponseUtil.write(json, ServletActionContext.getResponse());
  335. return null;
  336. } else {
  337. JaxbUtil requestBinder = new JaxbUtil(TongYiReturn.class, JaxbUtil.CollectionWrapper.class);
  338. TongYiReturn to = requestBinder.fromXml(msg);
  339. if (to.getReturn_code().equals("SUCCESS") && to.getResult_code().equals("SUCCESS")) {
  340. EndPay pay = new EndPay();
  341. pay.setAppId(WeiXinUtil.appid);
  342. pay.setSignType("MD5");
  343. pay.setTimeStamp(System.currentTimeMillis() / 1000 + "");
  344. pay.setPrepay_id(to.getPrepay_id());
  345. pay.setNonceStr(PayWxUtil.getNonceStr());
  346. Map<String, String> requestMap = new HashMap<String, String>();
  347. requestMap.put("appId", pay.getAppId());
  348. requestMap.put("timeStamp", pay.getTimeStamp());
  349. requestMap.put("nonceStr", pay.getNonceStr());
  350. requestMap.put("package", "prepay_id=" + pay.getPrepay_id());
  351. requestMap.put("signType", "MD5");
  352. pay.setPaySign(PayWxUtil.getSign(requestMap, WeiXinUtil.APIid));
  353. // requestMap.put("sign",pay.getPaySign());
  354. // String ret = JaxbUtil.getRequestXml(requestMap);
  355. // System.out.println(ret);
  356. JSONObject json = new JSONObject();
  357. json.put("pay", pay);
  358. ResUtil.write(json, ServletActionContext.getResponse());
  359. Recharge pay1 = new Recharge();
  360. pay1.setAccount((double) a / 100);
  361. System.out.println("金额:"+ (double) a / 100);
  362. pay1.setUser_name(u.get(0).getUser_name());
  363. pay1.setStu_number(u.get(0).getStu_number());
  364. pay1.setCard_number(u.get(0).getCard_number());
  365. pay1.setOrder_num(orderNo);
  366. SimpleDateFormat simp1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  367. String time = simp1.format(new Date());
  368. pay1.setRe_time(time); // 支付结束时间
  369. System.out.println("金额:"+pay1.getAccount());
  370. rechargeService.insertRecharge(pay1);
  371. }
  372. }
  373. } else { // 说明不是会员
  374. JSONObject json = new JSONObject();
  375. json.put("pay", 1);
  376. ResUtil.write(json, ServletActionContext.getResponse());
  377. }
  378. return null;
  379. }
  380. // 第五步:支付页面用户输完密码后微信会把支付结果回调到这里,我们根据需要存储支付记录,和执行不同的方法
  381. public String payResulet() throws Exception { // 微信支付结果通知
  382. System.out.println("进来了");
  383. BufferedReader reader = null;// BufferedReader 字符输入流
  384. reader = request.getReader();
  385. String line = "";
  386. String xmlString = null;
  387. StringBuffer inputString = new StringBuffer();
  388. while ((line = reader.readLine()) != null) {
  389. inputString.append(line);
  390. }
  391. xmlString = inputString.toString();
  392. request.getReader().close();
  393. JaxbUtil requestBinder = new JaxbUtil(PayResult.class, PayResult.class);
  394. PayResult result = requestBinder.fromXml(xmlString);// Xml到Java,用fromXML()方法
  395. rechargeService.updatePay(result.getOut_trade_no());
  396. if (result.getResult_code().equals("SUCCESS")) { // 交易成功,支付结果转换为对象
  397. String account = result.getTransaction_id();// 微信支付订单号
  398. System.out.println("支付成功了");
  399. System.out.println("result=" + result.toString());
  400. Recharge pays = rechargeService.findPayByNo(account);// 根据 微信支付订单号 查找支付记录信息
  401. if (pays != null) { // 有交易记录 发送成功消息给商家
  402. String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  403. HttpServletResponse response = ServletActionContext.getResponse();
  404. response.setContentType("text/html;charset=utf-8");
  405. PrintWriter out = response.getWriter();
  406. out.println(returnMsg);
  407. out.flush();
  408. out.close();
  409. // System.out.println("pay不为空");
  410. } else { // 交易记录开始记录
  411. List<Users> u = userService.queryByopenid(result.getOpenid()); // 查找充值的会员信息
  412. double bal = u.get(0).getBalance() + (double) result.getTotal_fee() / 100;
  413. consumeService.updateBalance(u.get(0).getStu_number(), bal);
  414. rechargeService.updateMoney(result.getOut_trade_no());
  415. String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  416. HttpServletResponse response = ServletActionContext.getResponse();
  417. response.setContentType("text/html;charset=utf-8");
  418. PrintWriter out = response.getWriter();
  419. out.println(returnMsg);
  420. out.flush();
  421. out.close(); // 发送成功消息给商家
  422. }
  423. }
  424. return null;
  425. }
  426. public String start() throws Exception {
  427. Gson gson=new Gson();
  428. JSONObject resultJson = new JSONObject();
  429. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
  430. String time = df.format(new Date());
  431. String dang = WxUtil.mchOrderNo();
  432. double basic_amount = configService.query("部署环境").get(0).getAmount();
  433. System.out.println("基础金额:"+basic_amount);
  434. double residue = 0.00;
  435. double use_size = 0.00;
  436. double rate = 0.00;
  437. if (stu_number == null){
  438. resultJson.put("mess", "学号为空");
  439. ResUtil.write(resultJson, ServletActionContext.getResponse());
  440. return null;
  441. }
  442. List<Price> ws = consumeService.water_price("热水");
  443. rate = ws.get(0).getPrice();
  444. if(StringUtils.isNotBlank(collect_code)) {
  445. String sign = wxMenuService.wxUrl(dang, WxConstants.SING_MD5, collect_code, time);
  446. String requestUrl = "https://app.dev.9kbs.com/shopOpenApi/services/deviceAntiScode/getStartCode?apicode=" + WxConfig.apicode
  447. + "&collect_code=" + collect_code + "&order_no=" + dang + "&amount=10&timestamp="
  448. + time + "&sign=" + sign;
  449. String json = HttpsClient.sendPost2(requestUrl, "");
  450. HashMap<String, Object> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, Object>>(){}.getType());
  451. String status = "";
  452. try {
  453. status = userMap.get("status").toString();
  454. }catch (Exception e){
  455. resultJson.put("mess", "第三方接口异常");
  456. ResUtil.write(resultJson, ServletActionContext.getResponse());
  457. return null;
  458. }
  459. if (status.equals("succ")) {
  460. String data = userMap.get("data").toString();
  461. HashMap<String, Object> device = gson.fromJson(data.toString(), new TypeToken<HashMap<String, Object>>() {}.getType());
  462. String start_code = device.get("start_code").toString();
  463. System.out.println("启动码:"+start_code);
  464. String collect_data = device.get("collect_data").toString();
  465. HashMap<String, Object> money = gson.fromJson(collect_data.toString(), new TypeToken<HashMap<String, Object>>() {}.getType());
  466. String device_code = money.get("device_code").toString();
  467. String order_no = new BigDecimal(money.get("order_no").toString()).toString();
  468. String use_amount = money.get("use_amount").toString();
  469. // 根据订单号获取上次消费记录
  470. List<Consume> reconsumes = consumeService.queryRecordByOrder(order_no);
  471. // 本次消息信息
  472. List<Users> user0 = userService.selectByStu(stu_number);
  473. // 上次无用户消费
  474. if (reconsumes == null){
  475. if (user0 != null) { // 本次消费信息,余额
  476. Double balance = user0.get(0).getBalance();
  477. if (balance > basic_amount) {
  478. // 保存本次消费信息,但是没有消费金额
  479. Consume cons = new Consume();
  480. cons.setStu_number(user0.get(0).getStu_number());
  481. cons.setUser_name(user0.get(0).getUser_name());
  482. cons.setOrder_no(dang);
  483. cons.setBegin_time(time);
  484. cons.setStart_code(start_code);
  485. cons.setDevice_code(device_code);
  486. cons.setUse_amount(0.00);
  487. cons.setUse_size(0.00);
  488. cons.setRate(rate);
  489. int num = consumeService.insertComsume(cons);
  490. if (num > 0) { // 保存成功
  491. resultJson.put("mess", "启动成功");
  492. resultJson.put("start_code", start_code);
  493. ResUtil.write(resultJson, ServletActionContext.getResponse());
  494. return null;
  495. }
  496. } else {
  497. resultJson.put("mess", "余额不足!请充值");
  498. ResUtil.write(resultJson, ServletActionContext.getResponse());
  499. return null;
  500. }
  501. } else {
  502. resultJson.put("mess", "卡号异常");
  503. ResUtil.write(resultJson, ServletActionContext.getResponse());
  504. return null;
  505. }
  506. }else {
  507. // 上次消费卡号
  508. String restu_number = reconsumes.get(0).getStu_number();
  509. // 上次用户信息
  510. List<Users> reusers = userService.selectByStu(restu_number);
  511. if (reusers != null ) {
  512. if (reconsumes.get(0).getState() == 0) { // 上次消费未结算
  513. Double rebalance = reusers.get(0).getBalance();
  514. double use_amounts = Double.parseDouble(use_amount);
  515. if (rebalance >= 0) {
  516. residue = rebalance - use_amounts;
  517. if (ws!=null){
  518. System.out.println("热水有价");
  519. use_size = use_amounts/ws.get(0).getPrice();
  520. }
  521. int num1 = consumeService.updateConsume2(order_no, time, use_amounts, use_size, 1);
  522. int num2 = consumeService.updateBalance(restu_number, residue);
  523. // 上次消费扣除完毕
  524. if (num1 > 0 && num2 > 0) {
  525. // 查询本次用户信息
  526. if (user0 != null ) {
  527. // 保存本次消费记录,但是没有消费金额
  528. Consume cons = new Consume();
  529. cons.setStu_number(user0.get(0).getStu_number());
  530. cons.setUser_name(user0.get(0).getStu_number());
  531. cons.setOrder_no(dang);
  532. cons.setBegin_time(time);
  533. cons.setStart_code(start_code);
  534. cons.setDevice_code(device_code);
  535. cons.setUse_amount(0.00);
  536. cons.setUse_size(0.00);
  537. cons.setRate(rate);
  538. int num = consumeService.insertComsume(cons);
  539. if (num > 0) {
  540. double bal = user0.get(0).getBalance();
  541. if (bal > basic_amount) {
  542. resultJson.put("mess", "启动成功");
  543. resultJson.put("start_code", start_code);
  544. ResUtil.write(resultJson, ServletActionContext.getResponse());
  545. return null;
  546. } else {
  547. resultJson.put("mess", "余额不足!请充值");
  548. ResUtil.write(resultJson, ServletActionContext.getResponse());
  549. return null;
  550. }
  551. } else {
  552. resultJson.put("mess", "本次订单提交失败!");
  553. ResUtil.write(resultJson, ServletActionContext.getResponse());
  554. return null;
  555. }
  556. } else {
  557. resultJson.put("mess", "用户信息异常!");
  558. ResUtil.write(resultJson, ServletActionContext.getResponse());
  559. return null;
  560. }
  561. } else {
  562. resultJson.put("mess", "结算失败!请联系管理员");
  563. ResUtil.write(resultJson, ServletActionContext.getResponse());
  564. return null;
  565. }
  566. } else {
  567. resultJson.put("mess", "上次消费用户余额不足!");
  568. ResUtil.write(resultJson, ServletActionContext.getResponse());
  569. return null;
  570. }
  571. } else { // 上次消费已结算
  572. if (user0 != null ) {
  573. // 保存本次消费记录,但是没有消费金额
  574. Consume cons = new Consume();
  575. cons.setStu_number(user0.get(0).getStu_number());
  576. cons.setUser_name(user0.get(0).getUser_name());
  577. cons.setOrder_no(dang);
  578. cons.setBegin_time(time);
  579. cons.setStart_code(start_code);
  580. cons.setDevice_code(device_code);
  581. cons.setUse_amount(0.00);
  582. cons.setUse_size(0.00);
  583. cons.setRate(rate);
  584. int num = consumeService.insertComsume(cons);
  585. if (num > 0) {
  586. double bal = user0.get(0).getBalance();
  587. if (bal > basic_amount) {
  588. System.out.println("启动码:"+start_code);
  589. resultJson.put("mess", "启动成功");
  590. resultJson.put("start_code", start_code);
  591. ResUtil.write(resultJson, ServletActionContext.getResponse());
  592. return null;
  593. } else {
  594. resultJson.put("mess", "余额不足!请充值");
  595. ResUtil.write(resultJson, ServletActionContext.getResponse());
  596. return null;
  597. }
  598. } else {
  599. resultJson.put("mess", "本次订单提交失败!");
  600. ResUtil.write(resultJson, ServletActionContext.getResponse());
  601. return null;
  602. }
  603. } else {
  604. resultJson.put("mess", "用户信息异常!");
  605. ResUtil.write(resultJson, ServletActionContext.getResponse());
  606. return null;
  607. }
  608. }
  609. } else {
  610. resultJson.put("mess", "用户信息异常!");
  611. ResUtil.write(resultJson, ServletActionContext.getResponse());
  612. return null;
  613. }
  614. }
  615. }else {
  616. resultJson.put("mess", "请求参数错误!");
  617. ResUtil.write(resultJson, ServletActionContext.getResponse());
  618. }
  619. }else {
  620. resultJson.put("mess", "收集码获取失败!");
  621. ResUtil.write(resultJson, ServletActionContext.getResponse());
  622. }
  623. return null;
  624. }
  625. public String consume() throws Exception {
  626. Gson gson=new Gson();
  627. JSONObject resultJson = new JSONObject();
  628. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
  629. String time = df.format(new Date());
  630. String dang = WxUtil.mchOrderNo();
  631. double basic_amount = configService.query("部署环境").get(0).getAmount();
  632. double residue = 0.00;
  633. double use_size = 0.00;
  634. if(StringUtils.isNotBlank(collect_code)) {
  635. String sign = wxMenuService.wxUrl("", WxConstants.SING_MD5, collect_code, time);
  636. String requestUrl = "https://app.dev.9kbs.com/shopOpenApi/services/deviceAntiScode/getStartCode?apicode=" + WxConfig.apicode
  637. + "&collect_code=" + collect_code + "&order_no=" + "" + "&amount=10&timestamp="
  638. + time + "&sign=" + sign;
  639. String json = HttpsClient.sendPost2(requestUrl, "");
  640. HashMap<String, Object> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, Object>>(){}.getType());
  641. String status = userMap.get("status").toString();
  642. if (status.equals("succ")) {
  643. String data = userMap.get("data").toString();
  644. HashMap<String, Object> device = gson.fromJson(data.toString(), new TypeToken<HashMap<String, Object>>() {}.getType());
  645. String collect_data = device.get("collect_data").toString();
  646. HashMap<String, Object> money = gson.fromJson(collect_data.toString(), new TypeToken<HashMap<String, Object>>() {}.getType());
  647. String order_no = new BigDecimal(money.get("order_no").toString()).toString();
  648. String use_amount = money.get("use_amount").toString();
  649. // 根据订单号获取本次消费记录
  650. List<Consume> reconsumes = consumeService.queryRecordByOrder(order_no);
  651. // 订单异常
  652. if (reconsumes == null){
  653. resultJson.put("mess", "订单异常,请联系管理员!");
  654. ResUtil.write(resultJson, ServletActionContext.getResponse());
  655. return null;
  656. }else {
  657. // 上次消费卡号
  658. String restu_number = reconsumes.get(0).getStu_number();
  659. // 本次用户信息
  660. List<Users> reusers = userService.selectByStu(restu_number);
  661. if (reusers != null ) {
  662. if (reconsumes.get(0).getState() == 0) { // 本次消费未结算
  663. double rebalance = reusers.get(0).getBalance();
  664. double use_amounts = Double.parseDouble(use_amount);
  665. if (rebalance >= 0) {
  666. residue = rebalance - use_amounts;
  667. List<Price> ws = consumeService.water_price("热水");
  668. if (ws!=null){
  669. use_size = use_amounts / ws.get(0).getPrice();
  670. }
  671. int num1 = consumeService.updateConsume2(order_no, time, use_amounts, use_size, 1);
  672. int num2 = consumeService.updateBalance(restu_number, residue);
  673. // 本次消费扣除完毕
  674. if (num1 > 0 && num2 > 0) {
  675. resultJson.put("mess", "支付成功");
  676. resultJson.put("use_amount", use_amounts);
  677. ResUtil.write(resultJson, ServletActionContext.getResponse());
  678. return null;
  679. } else {
  680. resultJson.put("mess", "结算异常!请联系管理员");
  681. ResUtil.write(resultJson, ServletActionContext.getResponse());
  682. return null;
  683. }
  684. } else {
  685. resultJson.put("mess", "上次消费用户余额不足!");
  686. ResUtil.write(resultJson, ServletActionContext.getResponse());
  687. return null;
  688. }
  689. } else { // 本次消费已结算
  690. resultJson.put("mess", "已支付!请勿重复支付");
  691. ResUtil.write(resultJson, ServletActionContext.getResponse());
  692. return null;
  693. }
  694. } else {
  695. resultJson.put("mess", "用户信息异常!");
  696. ResUtil.write(resultJson, ServletActionContext.getResponse());
  697. return null;
  698. }
  699. }
  700. }else {
  701. resultJson.put("mess", "请求参数错误!");
  702. ResUtil.write(resultJson, ServletActionContext.getResponse());
  703. }
  704. }else {
  705. resultJson.put("mess", "收集码获取失败!");
  706. ResUtil.write(resultJson, ServletActionContext.getResponse());
  707. }
  708. return null;
  709. }
  710. }