From 8114546306200d4d71f05d868566c5d6d729e0b0 Mon Sep 17 00:00:00 2001 From: wangfs <15029758498@163.com> Date: Fri, 7 Jul 2017 11:18:28 +0800 Subject: [PATCH] 更改车牌号支付流程 --- src/main/java/com/rnt/controller/WeixinPayController.java | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------- src/main/java/com/rnt/service/OrderService.java | 42 +++++++++++++++++++++++++----------------- src/main/java/com/rnt/utils/AmountUtils.java | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/rnt/utils/DateUtil.java | 3 ++- src/main/java/com/rnt/vo/OrderVO.java | 14 ++++++++------ src/main/webapp/WEB-INF/pages/check.html | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------- src/main/webapp/WEB-INF/pages/select.html | 6 +++--- 7 files changed, 338 insertions(+), 152 deletions(-) create mode 100644 src/main/java/com/rnt/utils/AmountUtils.java diff --git a/src/main/java/com/rnt/controller/WeixinPayController.java b/src/main/java/com/rnt/controller/WeixinPayController.java index b7e7463..644b166 100644 --- a/src/main/java/com/rnt/controller/WeixinPayController.java +++ b/src/main/java/com/rnt/controller/WeixinPayController.java @@ -47,6 +47,7 @@ import com.rnt.service.OrderService; import com.rnt.service.ParkCardCouponsService; import com.rnt.service.ParkLotService; import com.rnt.service.PersonCardCouponsService; +import com.rnt.utils.AmountUtils; import com.rnt.utils.CardTypeUtil; import com.rnt.utils.SequenceUtil; import com.rnt.utils.TLWXUser; @@ -1116,35 +1117,75 @@ public class WeixinPayController extends Controller { * 检查输入的车牌号是否存订单(带核算/待支付/已完成).
*/ public void parkOrderForNotPayExist() { - BizResult result = new BizResult<>(); + BizResult result = new BizResult(); + OrderVO orderVO = new OrderVO(); + Map reultMap = new HashMap(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String carNum = this.getPara("carNum"); - logger.info("---begin 校验输入车牌是否存在待核算订单..入参=" + carNum); - Map reultMap = new HashMap(); - try { - if (StringKit.isNotBlank(carNum)) { - OrderService orderService = Duang.duang(OrderService.class); - /**查询单信息.*/ - Order order = orderService.findOrderByCarNum(carNum); - if (order != null && StringKit.isNotBlank(order.getOrderId())) { - result.setData(order); - /**查询费用接口.*/ - reultMap = orderService.chosseBillQuery(carNum, order); - } else { - result.setErrorMessage(ErrorType.NO_PARKING_MSG, "无停车记录"); - } - } else { - logger.info("入参为空!"); - result.setErrorMessage(ErrorType.SYSTEM_ERROR, "业务错误"); - } - - if(reultMap == null || reultMap.size() ==0){ - result.setErrorMessage(ErrorType.NO_PARKING_MSG, "无停车记录"); - } - } catch (Exception e) { - e.printStackTrace(); - } + logger.info("---begin 校验输入车牌是否存要支付订单,入参=" + carNum); + try{ + if(StringKit.isNotBlank(carNum)){ + OrderService orderService = Duang.duang(OrderService.class); + /**查询单信息.*/ + Order order = orderService.findOrderByCarNum(carNum); + logger.info("通过车牌查询订单结果="+JSONObject.toJSONString(order)); + if (order != null && StringKit.isNotBlank(order.getOrderId())) { + orderVO.setOrderId(order.getOrderId()); + orderVO.setParkName(order.getParkName()); + orderVO.setCarNumber(order.getCarNumber()); + /**查询费用接口.*/ + reultMap = orderService.chosseBillQuery(carNum, order); + }else{ + result.setErrorMessage(ErrorType.NO_PARKING_MSG, "无停车记录"); + } + }else{ + logger.info("入参为空!"); + result.setErrorMessage(ErrorType.SYSTEM_ERROR, "业务错误"); + } + + if(reultMap == null || reultMap.size() ==0){ + result.setErrorMessage(ErrorType.NO_PARKING_MSG, "无停车记录"); + }else{ + orderVO.setParkInTime(StringKit.isNotBlank(reultMap.get("park_in_time")) ? format.format(format.parse(reultMap.get("park_in_time"))): null); + orderVO.setParkOutTime(StringKit.isNotBlank(reultMap.get("park_out_time")) ? format.format(format.parse(reultMap.get("park_out_time"))): null); + if(StringKit.isNotBlank(reultMap.get("order_total_fee"))){//分转元 + orderVO.setOrderTotalFee(new BigDecimal(AmountUtils.changeF2Y(reultMap.get("order_total_fee")))); + }else{ + orderVO.setOrderTotalFee(new BigDecimal("0")); + } + + if(StringKit.isNotBlank(reultMap.get("order_not_pay_fee"))){//分转元 + orderVO.setOrderNotPayFee(new BigDecimal(AmountUtils.changeF2Y(reultMap.get("order_not_pay_fee")))); + }else{ + orderVO.setOrderNotPayFee(new BigDecimal("0")); + } + + if(StringKit.isNotBlank(reultMap.get("order_payed_fee"))){//分转元 + orderVO.setOrderPayedFee(new BigDecimal(AmountUtils.changeF2Y(reultMap.get("order_payed_fee")))); + }else{ + orderVO.setOrderPayedFee(new BigDecimal("0")); + } + if(StringKit.isNotBlank(reultMap.get("parking_duration"))){ + orderVO.setParkingDuration(com.rnt.utils.DateUtil.secondToTime(Long.valueOf(reultMap.get("parking_duration")))); + }else{ + orderVO.setParkingDuration(com.rnt.utils.DateUtil.secondToTime(Long.valueOf("0"))); + } + + result.setErrorMessage(ErrorType.BIZ_SUCCESS, "通过车牌号查询费用成功"); + result.setData(orderVO); + } + }catch (Exception e) { + result.setErrorMessage(ErrorType.SYSTEM_ERROR, "业务错误"); + e.printStackTrace(); + } logger.info("---end 校验输入车牌是..结果=" + JSONObject.toJSONString(result)); - this.renderJson(result); + if(result != null && ErrorType.BIZ_SUCCESS.getCode().equals(result.getCode()) && result.getData() != null){ + this.getRequest().setAttribute("orderVO", result.getData()); + this.render("check.html"); + }else{ + this.setAttr("carNum", carNum); + this.render("checkerror.html"); + } } @@ -1158,45 +1199,25 @@ public class WeixinPayController extends Controller { * 5.插入订单流水表. */ public void queryParkOrderForNotPay() { - logger.info("开始查询待支付的停车订单WeixinPayController.queryParkOrderForNotPay()方法."); + BizResult result = new BizResult(); - String carNum = this.getPara("carNum"); + String orderId = this.getPara("orderId"); + logger.info("---begin查询待支付的停车订单WeixinPayController.queryParkOrderForNotPay()方法.入参{orderId="+orderId+"}"); OrderService orderService = Duang.duang(OrderService.class); OrderVO orderVO = new OrderVO(); try { - orderVO = orderService.queryParkOrderForNotPay(carNum); - if (orderVO != null && StringKit.isNotBlank(orderVO.getOrderId())) { - //创建支付单 - PayOrder payOrder = new PayOrder(); - String payOrderId = SequenceUtil.getNextOrderId(SequenceTypeEnum.ORDER_PAY_WXGZH.value()); - payOrder.setPayOrderId(payOrderId); - payOrder.setPaySrcType(Integer.valueOf(PayOrderEnum.PAY_RESOURCE_TYPE_PARK.getValue())); - payOrder.setRltOrderId(orderVO.getOrderId()); - payOrder.setPayOrderTitle(PayOrderEnum.PAY_ORDER_TYPE_PAY.getValue()); - payOrder.setPayType(Integer.valueOf(PayOrderEnum.PAY_TYPE_WXGZH.getValue())); - payOrder.setPayOrderState(Integer.valueOf(PayOrderEnum.PAY_ORDER_STATE_WAIT_PAY.getValue())); - payOrder.setPayorderStateTime(new Date()); - payOrder.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); - payOrder.setCreateDate(new Date()); - payOrder.setModfiyDate(new Date()); - logger.info("支付单save请求数据为: payOrder=" + JSONObject.toJSONString(payOrder)); - Boolean flag = payOrder.save(); - logger.info("支付单save 响应为:flag=" + flag); - orderVO.setPayOrderId(payOrderId); - if (!flag) { - result.setCode(ErrorType.BIZ_ERROR.getCode()); - result.setMsg("支付单保存失败!"); - renderJson(result); - return; - } - /**根据停车场编码查询通知艾润停车场编码.*/ - result.setData(orderVO); - } else { - result.setErrorMessage(ErrorType.SYSTEM_ERROR, "业务错误"); + orderVO = orderService.queryParkOrderForNotPay(orderId); + if(orderVO != null && StringKit.isNotBlank(orderVO.getOrderId())){ + result.setData(orderVO); + }else{ + result.setCode(ErrorType.BIZ_ERROR.getCode()); + result.setMsg("订单单保存失败!"); } } catch (Exception e) { + result.setErrorMessage(ErrorType.SYSTEM_ERROR, "业务错误"); e.printStackTrace(); } + logger.info("---end查询待支付的停车订单WeixinPayController.queryParkOrderForNotPay()方法.结果="+JSONObject.toJSONString(result)); this.renderJson(result); } diff --git a/src/main/java/com/rnt/service/OrderService.java b/src/main/java/com/rnt/service/OrderService.java index 8d2e143..54ebec8 100644 --- a/src/main/java/com/rnt/service/OrderService.java +++ b/src/main/java/com/rnt/service/OrderService.java @@ -158,17 +158,17 @@ public class OrderService { * @param carNum * @throws ParseException */ - public OrderVO queryParkOrderForNotPay(String carNum) throws ParseException { - logger.info("---begin订单信息更新,carNum=" + carNum); + public OrderVO queryParkOrderForNotPay(String orderId) throws ParseException { + logger.info("---begin订单信息更新,orderId=" + orderId); OrderVO orderVO = new OrderVO(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Map resultmap = new HashMap(); //1.查询支付订单 - Order order = this.findOrderByCarNum(carNum); + Order order = this.findOrderByOrderId(orderId); logger.info("通过车牌号查询到的支付订单信息结果="+JSONObject.toJSON(order)); //2.调用查询费用接口 if (order != null && StringKit.isNotBlank(order.getOrderId())) { - resultmap = this.chosseBillQuery(carNum,order); + resultmap = this.chosseBillQuery(order.getCarNumber(),order); } boolean orderUpdateFlg = false; int updateOrderDetailFlg = 0; @@ -210,17 +210,6 @@ public class OrderService { if (updateOrderDetailFlg > 0) { //封装返回数据 orderVO.setOrderId(order.getOrderId()); - orderVO.setParkId(order.getParkId()); - orderVO.setParkName(resultmap.get("park_name")); - orderVO.setParkAddress(resultmap.get("park_address")); - orderVO.setCarNumber(order.getCarNumber()); - orderVO.setOrderPayedFee(new BigDecimal(resultmap.get("order_payed_fee"))); - orderVO.setOrderNotPayFee(new BigDecimal(resultmap.get("order_not_pay_fee"))); - orderVO.setOrderTotalFee(new BigDecimal(resultmap.get("order_total_fee"))); - orderVO.setOrderTitle("待付费用"); - orderVO.setParkInTime(format.parse(resultmap.get("park_in_time"))); - orderVO.setParkOutTime(format.parse(resultmap.get("park_out_time"))); - orderVO.setParkingDuration(DateUtil.secondToTime(Long.valueOf(resultmap.get("parking_duration")))); } /**插入订单流水.*/ ParkOrderFlow parkOrderFlow = new ParkOrderFlow(); @@ -243,11 +232,11 @@ public class OrderService { * @return */ public Map chosseBillQuery(String carNum,Order order){ - OrderService orderService = Duang.duang(OrderService.class); IRainQueryService iRainQueryService = Duang.duang(IRainQueryService.class); Map reultMap = new HashMap(); if (order != null && StringKit.isNotBlank(order.getOrderId())) { + logger.info("查询费用来源="+(order.getSourceType() ==2 ? "调用青岛路侧费用查询接口" :"调用艾润查询费用接口")); if("1".equals(String.valueOf(order.getSourceType()))){//道闸:调用艾润查询费用接口 /**调用艾润查询费用接口.*/ reultMap = iRainQueryService.billQuery(carNum, order.getParkId()); @@ -276,10 +265,11 @@ public class OrderService { //1.查询待支付订单 StringBuffer sql = new StringBuffer( "select a.id, a.order_id,a.car_number,a.order_title,a.order_payed_fee,a.order_not_pay_fee,a" - + ".order_total_fee,a.park_id"); + + ".order_total_fee,a.park_id,source_type,park_name"); sql.append(" from td_b_order a"); sql.append(" where a.order_state in(1,2,3)"); sql.append(" and a.car_number=?"); + sql.append(" and a.data_state=1"); sql.append(" order by a.create_date DESC"); Order order = new Order().findFirst(sql.toString(), carNum); @@ -288,6 +278,24 @@ public class OrderService { return order; } + + /** + * 通过车牌查询待核算支付单信息.
+ * + * @param + */ + public Order findOrderByOrderId(String orderId) { + //1.查询待支付订单 + StringBuffer sql = new StringBuffer( + "select a.id, a.order_id,a.car_number,a.order_title,a.order_payed_fee,a.order_not_pay_fee,a" + + ".order_total_fee,a.park_id,source_type,park_name"); + sql.append(" from td_b_order a"); + sql.append(" where a.order_state in(1,2,3)"); + sql.append(" and a.order_id=?"); + sql.append(" and a.data_state=1"); + Order order = new Order().findFirst(sql.toString(), orderId); + return order; + } } diff --git a/src/main/java/com/rnt/utils/AmountUtils.java b/src/main/java/com/rnt/utils/AmountUtils.java new file mode 100644 index 0000000..6514876 --- /dev/null +++ b/src/main/java/com/rnt/utils/AmountUtils.java @@ -0,0 +1,164 @@ +package com.rnt.utils; + + +import java.math.BigDecimal; + +import com.zteits.clouds.api.apibase.constants.ErrorType; +import com.zteits.clouds.api.apibase.exception.BizException; + +/** + * + * Copyright: Copyright (c) 2017 ZTE-ITS + * + * @ClassName: AmountUtils.java + * @Description: + * @version: v1.0.0 + * @author: wangbiao + * @date: 2017年6月27日 下午5:24:43 + * Modification History: + * Date Author Version Description + *---------------------------------------------------------* + * 2017年6月27日 wangbiao v1.0.0 创建 + */ + +public class AmountUtils { + /**金额为分的格式 */ + public static final String CURRENCY_FEN_REGEX = "\\-?[0-9]+"; + + private AmountUtils() { + } + + /** + * 将分为单位的转换为元并返回金额格式的字符串 (除100) + * + * @param amount + * @return + * @throws Exception + */ + public static String changeF2Y(Long amount){ + if(!amount.toString().matches(CURRENCY_FEN_REGEX)) { + throw new BizException(ErrorType.BIZ_ERROR, "金额格式有误!"); + } + + int flag = 0; + String amString = amount.toString(); + if(amString.charAt(0)=='-'){ + flag = 1; + amString = amString.substring(1); + } + StringBuilder result = new StringBuilder(); + if(amString.length()==1){ + result.append("0.0").append(amString); + }else if(amString.length() == 2){ + result.append("0.").append(amString); + }else{ + String intString = amString.substring(0,amString.length()-2); + for(int i=1; i<=intString.length();i++){ + if( (i-1)%3 == 0 && i !=1){ + result.append(","); + } + result.append(intString.substring(intString.length()-i,intString.length()-i+1)); + } + result.reverse().append(".").append(amString.substring(amString.length()-2)); + } + if(flag == 1){ + return "-"+result.toString(); + }else{ + return result.toString(); + } + } + + /** + * 将分为单位的转换为元 (除100) + * + * @param amount + * @return + * @throws Exception + */ + public static String changeF2Y(String amount){ + if(!amount.matches(CURRENCY_FEN_REGEX)) { + throw new BizException(ErrorType.BIZ_ERROR, "金额格式有误!"); + } + return BigDecimal.valueOf(Long.valueOf(amount)).divide(new BigDecimal(100)).toString(); + } + + + /** + * 将元为单位的转换为分 (乘100) + * + * @param amount + * @return + */ + public static String changeY2F(Long amount){ + return BigDecimal.valueOf(amount).multiply(new BigDecimal(100)).toString(); + } + + /** + * 将元为单位的转换为分 替换小数点,支持以逗号区分的金额 + * + * @param amount + * @return + */ + public static String changeY2F(String amount){ + String currency = amount.replaceAll("\\$|\\¥|\\,", ""); //处理包含, ¥ 或者$的金额 + int index = currency.indexOf('.'); + int length = currency.length(); + Long amLong = 0l; + if(index == -1){ + amLong = Long.valueOf(currency+"00"); + }else if(length - index >= 3){ + amLong = Long.valueOf((currency.substring(0, index+3)).replace(".", "")); + }else if(length - index == 2){ + amLong = Long.valueOf((currency.substring(0, index+2)).replace(".", "")+0); + }else{ + amLong = Long.valueOf((currency.substring(0, index+1)).replace(".", "")+"00"); + } + return amLong.toString(); + } + + + /** + * 数字金额大写转换,思想先写个完整的然后将如零拾替换成零 + * 要用到正则表达式 + */ + public static String moneyUpperCase(double n){ + String fraction[] = {"角", "分"}; + String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String unit[][] = {{"元", "万", "亿"}, + {"", "拾", "佰", "仟"}}; + + String head = n < 0? "负": ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) { + double f1= new BigDecimal(n).setScale(2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(10 * Math.pow(10, i))).doubleValue(); + s += (digit[(int) (Math.floor(f1) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + + } + if(s.length()<1){ + s = "整"; + } + int integerPart = (int)Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) { + String p =""; + for (int j = 0; j < unit[1].length && n > 0; j++) { + p = digit[integerPart%10]+unit[1][j] + p; + integerPart = integerPart/10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } + /** + * @param args + */ + public static void main(String[] args) { + String str ="200"; + BigDecimal big = new BigDecimal(str); + System.out.println(AmountUtils.changeF2Y(str)); + + } + +} diff --git a/src/main/java/com/rnt/utils/DateUtil.java b/src/main/java/com/rnt/utils/DateUtil.java index 1e0e352..193ef63 100644 --- a/src/main/java/com/rnt/utils/DateUtil.java +++ b/src/main/java/com/rnt/utils/DateUtil.java @@ -828,7 +828,8 @@ public class DateUtil { private static String unitFormat(long time) { String retStr = null; if (time >= 0 && time < 10) - retStr = "0" + Long.toString(time); + //retStr = "0" + Long.toString(time); wangfs 2017-07-07 更改 + retStr = Long.toString(time); else retStr = "" + time; return retStr; diff --git a/src/main/java/com/rnt/vo/OrderVO.java b/src/main/java/com/rnt/vo/OrderVO.java index 701e2b5..09e5cdb 100644 --- a/src/main/java/com/rnt/vo/OrderVO.java +++ b/src/main/java/com/rnt/vo/OrderVO.java @@ -33,10 +33,10 @@ public class OrderVO { private String orderTitle; /** 车辆进场时间. */ - private Date parkInTime; + private String parkInTime; /** 车辆出场时间. */ - private Date parkOutTime; + private String parkOutTime; /** 停车时长 单位:小时格式:02小时52分. */ private String parkingDuration; @@ -116,19 +116,21 @@ public class OrderVO { this.orderTitle = orderTitle == null ? null : orderTitle.trim(); } - public Date getParkInTime() { + + + public String getParkInTime() { return parkInTime; } - public void setParkInTime(Date parkInTime) { + public void setParkInTime(String parkInTime) { this.parkInTime = parkInTime; } - public Date getParkOutTime() { + public String getParkOutTime() { return parkOutTime; } - public void setParkOutTime(Date parkOutTime) { + public void setParkOutTime(String parkOutTime) { this.parkOutTime = parkOutTime; } diff --git a/src/main/webapp/WEB-INF/pages/check.html b/src/main/webapp/WEB-INF/pages/check.html index ce26ea4..67d91c0 100644 --- a/src/main/webapp/WEB-INF/pages/check.html +++ b/src/main/webapp/WEB-INF/pages/check.html @@ -63,33 +63,33 @@
-

90.00

+

${orderVO.orderNotPayFee!''}

待付费用

- +
-
+
${orderVO.carNumber!''}
-
+
${orderVO.parkName!''}
-
+
${orderVO.parkInTime!''}
-
+
${orderVO.parkingDuration!''}
@@ -99,14 +99,14 @@
- ¥ + ¥${orderVO.orderTotalFee!''}
- ¥ + ¥${orderVO.orderPayedFee!''}