package com.boying.controller.phone; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.boying.common.BaseController; import com.boying.common.SystemConfigProperties; import com.boying.common.util.HttpUtil; import com.boying.entity.*; import com.boying.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.domain.Specification; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.servlet.http.HttpServletRequest; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.UnsupportedEncodingException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import static com.boying.common.util.MyX509TrustManager.httpsRequest; @RestController @RequestMapping("ffPay") public class FFPayController extends BaseController { @Autowired private TicketService ticketService; @Autowired private SystemConfigProperties systemConfigProperties; @Autowired private OutParkService outParkService; @Autowired private OrderRecordService orderRecordService; @Autowired private ParkService parkService; @Autowired private BarrierService barrierService; @Autowired private EnterParkService enterParkService; @Autowired private TicketBlackService ticketBlackService; @Autowired private WhiteListService whiteListService; static String payKey = "df937eda27cb4a59a12347966678e232"; static String paySecret = "9e3b2f387b5b4232a9c782affc9c36ed"; static String payerTypeCode = "1304062100000001"; static String payerTypeCode2 = "1304062100000002"; static String ip = "https://pay.hebcz.cn"; static String ip2 = "http://nontax.hebcz.cn"; //生成电子缴款码 @PostMapping("zhiFa") public Object zhiFa(Long id){ Ticket ticket = (Ticket) ticketService.findById(id); if(ticket.getPayStatus()==1){ return error("此罚单已支付"); } if(ticket.getStatus()==3){ return error("此罚单已撤销"); } // StringBuffer sbf = new StringBuffer(); //// StringBuffer s = new StringBuffer(); //// if(ticket.getMoney()==0){ //// s.append("amt=0.01"); //// }else{ //// DecimalFormat df = new DecimalFormat("#.00"); //// s.append("amt="+df.format(ticket.getMoney())); //// } //// s.append("¬ifyUrl="+systemConfigProperties.getIp()+"ffPay/result");//回调的url //// s.append("&payKey="+payKey);//财政给的 //// s.append("&payerName="+ticket.getCarNo()); //// s.append("&payerNum="+ ticket.getCode());//订单号 //// s.append("&payerTypeCode="+payerTypeCode);////财政给的 //// s.append("&reserve1="); //// s.append("&reserve2="); //// s.append("&reserve3="); //// s.append("&returnUrl="); //// sbf.append(s.toString()); //// s.append("&paySecret="+paySecret);////财政给的 //// //// String encode = DigestUtils.md5DigestAsHex(s.toString().getBytes()); //// sbf.append("&sign="+encode); //// sbf.append("&signType=MD5"); //// System.out.println(sbf.toString()); //// String s1 = httpsRequest(ip+"/pay/inpay","POST",sbf.toString()); StringBuffer sbf = new StringBuffer(); StringBuffer s = new StringBuffer(); if(ticket.getMoney()==0){ s.append("amt=0.01"); }else{ DecimalFormat df = new DecimalFormat("#0.00"); s.append("amt="+df.format(ticket.getMoney()).toString()); } s.append("¬ifyUrl="+systemConfigProperties.getIp()+"ffPay/result"); s.append("&payKey=df937eda27cb4a59a12347966678e232"); s.append("&payerName="+ticket.getCarNo()); s.append("&payerNum="+ticket.getCode()); s.append("&payerTypeCode=1304062100000001"); s.append("&reserve1="); s.append("&reserve2="); s.append("&reserve3="); s.append("&returnUrl="); sbf.append(s.toString()); s.append("&paySecret=9e3b2f387b5b4232a9c782affc9c36ed"); String encode = null; try { encode = DigestUtils.md5DigestAsHex(s.toString().getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } sbf.append("&sign="+encode); sbf.append("&signType=MD5"); System.out.println(sbf.toString()); String s1 = httpsRequest(ip + "/pay/inpay", "POST", sbf.toString()); System.out.println(s1); if(s1.equals("error")){ return error("生成电子缴款码失败,请联系管理员"); } JSONObject jsonObject = JSON.parseObject(s1); String payCode = ""; if(jsonObject.get("payCode")==null){ String eInfo = jsonObject.get("errorInfo").toString(); if(eInfo.equals("此订单已过期")){ ticket.setCode(System.currentTimeMillis()+""); String payCode2 = zhiFa2(ticket); ticket.setPayCode(payCode2); ticketService.save(ticket); addOrderRecord2(ticket); return success("生成执法电子缴款码","https://hbfs.govpay.ccb.com/online/fssm?fee=130000000001&PyfScnCgycd=01&pyfTpcd=3&BNo="+payCode); } return error(jsonObject.get("errorInfo").toString()); } payCode = jsonObject.get("payCode").toString(); ticket.setPayCode(payCode); ticketService.save(ticket); addOrderRecord2(ticket); return success("生成执法电子缴款码","https://hbfs.govpay.ccb.com/online/fssm?fee=130000000001&PyfScnCgycd=01&pyfTpcd=3&BNo="+payCode); } public String zhiFa2(Ticket ticket){ StringBuffer sbf = new StringBuffer(); StringBuffer s = new StringBuffer(); if(ticket.getMoney()==0){ s.append("amt=0.01"); }else{ DecimalFormat df = new DecimalFormat("#0.00"); s.append("amt="+df.format(ticket.getMoney()).toString()); } s.append("¬ifyUrl="+systemConfigProperties.getIp()+"ffPay/result"); s.append("&payKey=df937eda27cb4a59a12347966678e232"); s.append("&payerName="+ticket.getCarNo()); s.append("&payerNum="+ticket.getCode()); s.append("&payerTypeCode=1304062100000001"); s.append("&reserve1="); s.append("&reserve2="); s.append("&reserve3="); s.append("&returnUrl="); sbf.append(s.toString()); s.append("&paySecret=9e3b2f387b5b4232a9c782affc9c36ed"); String encode = null; try { encode = DigestUtils.md5DigestAsHex(s.toString().getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } sbf.append("&sign="+encode); sbf.append("&signType=MD5"); String s1 = httpsRequest(ip + "/pay/inpay", "POST", sbf.toString()); JSONObject jsonObject = JSON.parseObject(s1); String payCode = jsonObject.get("payCode").toString(); return payCode; } //支付接口通知 @PostMapping("result") public String result(HttpServletRequest request,String payKey,String payerTypeCode,String payerNum,String payCode,Double amt,String status,String errorInfo,String sign,String signType) throws Exception{ System.out.println(payCode+"-------"+status); String s = "payCode===="+payCode+",\n"; try { s += "开始走回调接口------>"; writeTxt(s); updateOrderRecord(payCode,status); }catch (Exception e){ s += "更新订单记录出异常------>"; writeTxt(s); } return "success"; } //更新订单记录 public void updateOrderRecord(String payCode,String status){ String s = "更新订单记录:payCode===="+payCode+",status==="+status+",\n"; Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("payCode").as(String.class), payCode)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = orderRecordService.findAll(specification); s += "查询到订单记录为:"+all.size()+"条,\n"; if(all.size()==1){ OrderRecord orderRecord = all.get(0); s += "查询到订单为:"+orderRecord.getId()+",\n"; if(status.equals("01")){ orderRecord.setStatus(0); } if(status.equals("03")){ orderRecord.setStatus(1); } if(status.equals("04")||status.equals("05")||status.equals("06")){ orderRecord.setStatus(2); } orderRecordService.save(orderRecord); if(orderRecord.getType()==0){ updateTicket(orderRecord.getQueryId(),status); }else{ s += "修改出场表:"+orderRecord.getQueryId()+",status==="+status+",\n"; writeTxt(s); updateOutPark(orderRecord.getQueryId(),status); } } writeTxt(s); } //更新罚单的状态 public void updateTicket(Long ticketId,String status){ Ticket ticket = (Ticket) ticketService.findById(ticketId); if(ticket!=null){ if(status.equals("01")){ ticket.setPayStatus(0); } if(status.equals("03")){ ticket.setPayStatus(1); dealCar(ticket.getCarNo()); } if(status.equals("04")||status.equals("05")||status.equals("06")){ ticket.setPayStatus(2); } ticketService.save(ticket); } } //更新缴费状态 private void dealCar(String carNo){ Specification specification2 = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("carNo").as(String.class), carNo)); list.add(cb.notEqual(root.get("payStatus"), 1)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List tickets = ticketService.findAll(specification2); if(tickets.size()==0){ //更新缴费状态 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("carNo").as(String.class), carNo)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = ticketBlackService.findAll(specification); for(TicketBlack ticketBlack:all){ ticketBlack.setStatus(1); ticketBlack.setBlackType(0); ticketBlackService.save(ticketBlack); } } } //抬杆 // public void updateOutPark(Long outParkId,String status){ // OutPark outPark = (OutPark) outParkService.findById(outParkId); // if(outPark!=null){ // if(status.equals("03")){ // outPark.setStatus(1); // outParkService.save(outPark); // Barrier b= (Barrier) barrierService.findById(outPark.getBarrierId()); // //调用抬杆接口 返回值:{"result":"true","msg":"操作完成"} // String res = HttpUtil.get(systemConfigProperties.getIp3()+"?barrierCode="+b.getCode()); // JSONObject jsonObject = JSON.parseObject(res); // if(jsonObject.get("result").equals("true")){ // System.out.println("抬杆成功"); // // deleteEnterPark(outPark.getCarNo()); // }else{ // System.out.println("抬杆接口返回失败"); // } // } // } // } public void updateOutPark(Long outParkId,String status){ String s = "开始修改出场表-----》,\n"; s+= "outparkId==="+outParkId+",status==="+status+",\n"; writeTxt(s); OutPark outPark = (OutPark) outParkService.findById(outParkId); if(outPark!=null){ s += "找到出场数据:"+outPark.getId()+",\n"; writeTxt(s); if(status.equals("03")){ s += "出场数据修改----》"; writeTxt(s); outPark.setStatus(1); outParkService.save(outPark); } } s += "未找到出场数据-----》"; writeTxt(s); } //删除进停车场的数据 public void deleteEnterPark(String carNo){ Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("carNo").as(String.class), carNo)); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = enterParkService.findAll(specification); for(EnterPark ep:all){ enterParkService.delete(ep.getId()); } } //生成电子缴款码 @PostMapping("park") public Object park(Long id){ String logs = "开始缴费流程------》"; logs += "出场id为:"+id+",\n"; OutPark outPark = (OutPark) outParkService.findById(id); if(outPark.getPrice()==0){ updateOutPark(outPark.getId(),"03"); logs += "支付金额为0,\n"; writeTxt(logs); return error("本次停车无需支付费用"); } //判断是否在白名单 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { List list = new ArrayList(); list.add(cb.equal(root.get("carNo").as(String.class), outPark.getCarNo())); Predicate[] arr = new Predicate[list.size()]; cq.where(list.toArray(arr)); return null; } }; List all = whiteListService.findAll(specification); for(WhiteList w : all){ if(w.getType()==0){ logs+=outPark.getCarNo()+"在白名单,\n"; updateOutPark(outPark.getId(),"03"); writeTxt(logs); return error("本次停车无需支付费用!"); }else{ if(w.getParkId()!=null){ if(w.getEndTime()!=null){ if(w.getParkId()==outPark.getParkId()&&new Date().getTime()