Wp.java 34 KB

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