From 2d0312de30b3783ecf254d146dc6322d74690762 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 19 五月 2026 09:28:57 +0800
Subject: [PATCH] Merge branch '1.1' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 339 +++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 249 insertions(+), 90 deletions(-)
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 3a2686e..fc3b1a3 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -18,6 +18,9 @@
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.automaticPilot.VehicleEventDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventCouponLineDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestContentDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestReqDTO;
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
@@ -34,6 +37,7 @@
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.automaticPilot.VehicleBuriedPointClient;
+import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.map.XpStationClient;
@@ -57,6 +61,7 @@
import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderStatus;
import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType;
+import com.xiaopeng.api.vo.frdXfipEvent.XpFrdXfipEventIngestRespVO;
import com.xiaopeng.api.vo.operation.NearestNextVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
@@ -218,6 +223,9 @@
private XpPayFrontClient xpPayFrontClient;
@Resource
private XpStationClient xpStationClient;
+
+ @Resource
+ private XpFrdXfipEventClient xpFrdXfipEventClient;
@Value("${robotaxi.appId:xp_robotaxi_api}")
private String appid;
@@ -3418,87 +3426,100 @@
public R payment(XpOrderPayDto dto, String uid) {
-// XpOrder order = this.getById(dto.getOrderId());
-//
-// HashMap<String, Object> resultMap = new HashMap<>();
-//
-// // 1.0 免密 //查询是否开通免密
-// // 1先查用户是否申请 申请了拿到通过的businessOrderId
-// boolean signed = false;
-// CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
-// creditPaySignQueryDto.setUid(Long.valueOf(uid));
-// creditPaySignQueryDto.setBusinessId("xp-robotaxi");
-// creditPaySignQueryDto.setCategory("009001");
-// creditPaySignQueryDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
-// R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
-// if (creditPaySignQueryVoR.getCode()==200) {
-// CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
-// // 查看是否有签约的
-// long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
-// if (count > 0){
-// signed = true;
-// }
-// }
-//
-//
-// if(signed){
-// // y已签约 1.信用下单
-// CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
-// creditOrderCreateDto.setUid(Long.valueOf(uid));
-// creditOrderCreateDto.setBusinessId("xp-robotaxi");
-// creditOrderCreateDto.setCategory("009001");
-// creditOrderCreateDto.setBusinessOrderId("");
-// creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
-// creditOrderCreateDto.setPayType("13");
-//
-//
-// // 信用下单
-// ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
-// CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
-// postPayment.setName("收费标准");
-// postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
-// postPayments.add(postPayment);
-// creditOrderCreateDto.setPostPayments(postPayments);
-// R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
-// if(creditOrderCreateVoR.getCode()==200){
-// CreditOrderCreateVo data = creditOrderCreateVoR.getData();
-// resultMap.put("status", 1);
-// resultMap.put("value", data);
-//
-// order.setPayType(3);
-// order.setAuthOrderId(data.getAuthOrderId());
-//
-// return R.ok(resultMap);
-// }
-//
-// }else {
-//
-// // 未签约
-// // 调用预下单接口
-// CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
-// creditPrecreateDto.setUid(uid);
-// creditPrecreateDto.setBizId("xp-robotaxi");
-// creditPrecreateDto.setBizOrderId("");
-// creditPrecreateDto.setPayScene(99);
-// creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
-// creditPrecreateDto.setCategory("009001");
-// creditPrecreateDto.setTitle("信用下单");
-// creditPrecreateDto.setDetail("信用下单");
-//
-// HashMap<String, String> businessExtend = new HashMap<>();
-// businessExtend.put("returnUrl", "");
-// businessExtend.put("notifyUrl", "");
-// creditPrecreateDto.setBusinessExtend(businessExtend);
-//
-// R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
-// if (creditPrecreateVoR.getCode()==200) {
-// CreditPrecreateVo data = creditPrecreateVoR.getData();
-// resultMap.put("status", 2);
-// resultMap.put("value", data);
-// return R.ok(resultMap);
-// }
-// }
-// return R.fail();
+ XpOrder order = this.getById(dto.getOrderId());
+
+ HashMap<String, Object> resultMap = new HashMap<>();
+
+ // 1.0 免密 //查询是否开通免密
+ // 1先查用户是否申请 申请了拿到通过的businessOrderId
+ boolean signed = false;
+ CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
+ creditPaySignQueryDto.setUid(Long.valueOf(uid));
+ creditPaySignQueryDto.setBusinessId("xp-robotaxi");
+ creditPaySignQueryDto.setCategory("009001");
+ creditPaySignQueryDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+ R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
+ if (creditPaySignQueryVoR.getCode()==200) {
+ CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
+ // 查看是否有签约的
+ long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
+ if (count > 0){
+ signed = true;
+ }
+ }
+
+
+ if(signed){
+ // y已签约 1.信用下单
+ CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
+ creditOrderCreateDto.setUid(Long.valueOf(uid));
+ creditOrderCreateDto.setBusinessId("xp-robotaxi");
+ creditOrderCreateDto.setCategory("009001");
+ creditOrderCreateDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+ creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
+ creditOrderCreateDto.setPayType("13");
+ creditOrderCreateDto.setPayCallbackUrl("");
+
+ creditOrderCreateDto.setBusinessExtendData("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
+
+
+
+ // 信用下单
+ ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
+ CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+ postPayment.setName("收费标准");
+ postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+ postPayments.add(postPayment);
+ creditOrderCreateDto.setPostPayments(postPayments);
+ R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
+ if(creditOrderCreateVoR.getCode()==200){
+ CreditOrderCreateVo data = creditOrderCreateVoR.getData();
+ resultMap.put("status", 1);
+ resultMap.put("value", data);
+
+ order.setPayType(3);
+ order.setAuthOrderId(data.getAuthOrderId());
+ order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId());
+ order.setMainOrderId(order.getOrderNumber());
+
+ return R.ok(resultMap);
+ }
+
+ }else {
+
+ // 未签约
+ // 调用预下单接口
+ CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
+ creditPrecreateDto.setUid(uid);
+ creditPrecreateDto.setBizId("xp-robotaxi");
+ creditPrecreateDto.setBizOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+ creditPrecreateDto.setPayScene(99);
+ creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
+ creditPrecreateDto.setCategory("009001");
+ creditPrecreateDto.setTitle("信用下单");
+ creditPrecreateDto.setDetail("信用下单");
+
+ HashMap<String, String> businessExtend = new HashMap<>();
+ businessExtend.put("returnUrl", "");
+ businessExtend.put("notifyUrl", "");
+ creditPrecreateDto.setBusinessExtend(businessExtend);
+
+ creditPrecreateDto.setExtBusinessData2("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
+
+ R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
+ if (creditPrecreateVoR.getCode()==200) {
+ CreditPrecreateVo data = creditPrecreateVoR.getData();
+ resultMap.put("status", 2);
+ resultMap.put("value", data);
+
+ order.setPayType(1);
+ order.setBusinessOrderId(creditPrecreateDto.getBizOrderId());
+ order.setMainOrderId(order.getOrderNumber());
+ this.updateById(order);
+
+ return R.ok(resultMap);
+ }
+ }
@@ -3522,7 +3543,7 @@
}
baseMapper.updateById(order);
bootCommonService.setCache_orderStatus(order.getId(), order, null);
- return R.ok();
+ return R.fail();
}
/**
@@ -4885,19 +4906,157 @@
postPayments.add(postPayment);
creditOrderWxPayDto.setPostPayments(postPayments);
R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(creditOrderWxPayDto);
- }else if(creditOrderQueryVo.getCreditOrderStatus().equals("CREATED") || creditOrderQueryVo.getCreditOrderStatus().equals("DOING")){
-
}
}
}else {
// 微信支付也需要查询下
+ PayOrderQueryDto queryDto = new PayOrderQueryDto();
+ queryDto.setBizId("xp-robotaxi");
+ queryDto.setBizOrderId(order.getBusinessOrderId());
+ R<PayOrderQueryVo> payOrderQueryVoR = xpPayFrontClient.queryPayOrder(queryDto);
+ if(payOrderQueryVoR.getCode()==200){
+ PayOrderQueryVo payOrderQueryVo = payOrderQueryVoR.getData();
+ if(payOrderQueryVo.getPayStatus()==1){
+ // 支付成功
+ order.setStatus(9);
+ order.setAppUserId(null);
+ order.setAuthOrderId(payOrderQueryVo.getPayOrderId());
+
+ if(payOrderQueryVo.getPayType()==13){
+ order.setPayType(3);
+ }
+
+ this.updateById(order);
+
+ // 财务推送
+ xpFrdXfipEventPush(order,payOrderQueryVo.getAmount(),payOrderQueryVo.getPayOrderId());
+
+
+ }
+
+
+ }
}
OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
orderStatusFromOrderIdVo.setOrderId(order.getId());
orderStatusFromOrderIdVo.setStatus(order.getStatus());
return orderStatusFromOrderIdVo;
+ }
+
+ @Override
+ public void creditPayCall(XpOrder order) {
+
+
+ CreditOrderWxPayDto dto = new CreditOrderWxPayDto();
+ dto.setBusinessId("xp-robotaxi");
+ dto.setBusinessOrderId(order.getBusinessOrderId());
+ dto.setAuthOrderId(order.getAuthOrderId());
+ dto.setCategory("009001");
+ dto.setPayCallbackUrl("");
+ dto.setTotalAmount(order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue());
+ dto.setSubject("小鹏集团|robotaxi");
+ dto.setPayType("13");
+ List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>();
+ CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+ postPayment.setName("收费标准");
+ postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+ dto.setPostPayments(postPayments);
+ R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(dto);
+
+
+ }
+
+ /**
+ * 对接财务数据推送
+ * @param order
+ */
+ @Override
+ public void xpFrdXfipEventPush(XpOrder order,Long payFee,String orderId) {
+
+ if(order.getFrdXfipEvenetStatus()==1){
+ return;
+ }
+
+ XpFrdXfipEventIngestReqDTO xpFrdXfipEventIngestReqDTO = new XpFrdXfipEventIngestReqDTO();
+ xpFrdXfipEventIngestReqDTO.setEventId("RT_04");
+ xpFrdXfipEventIngestReqDTO.setBusinessLine("RT");
+ xpFrdXfipEventIngestReqDTO.setReqId(OrderCodeUtil.getOrderCode("FRDXFOPEVENT"));
+
+ XpFrdXfipEventIngestContentDTO xpFrdXfipEventIngestContentDTO = new XpFrdXfipEventIngestContentDTO();
+ xpFrdXfipEventIngestContentDTO.setCompanyCode("8000");
+ xpFrdXfipEventIngestContentDTO.setOrderType("SELF_OPERATED");
+ xpFrdXfipEventIngestContentDTO.setBusinessOrderNo(order.getMainOrderId());
+ xpFrdXfipEventIngestContentDTO.setSubOrderNo(order.getBusinessOrderId());
+ xpFrdXfipEventIngestContentDTO.setPaymentType("POST_PAY");
+ xpFrdXfipEventIngestContentDTO.setOrderStatus("结算完成");
+ xpFrdXfipEventIngestContentDTO.setSettlementDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+ xpFrdXfipEventIngestContentDTO.setMaterialNo("XE2000398");
+ xpFrdXfipEventIngestContentDTO.setBusinessPartnerCode("5004901");
+ xpFrdXfipEventIngestContentDTO.setCurrency("CNY");
+
+ xpFrdXfipEventIngestContentDTO.setConfirmedRevenueAmount(order.getOrderMoney());
+ xpFrdXfipEventIngestContentDTO.setCashCollectedAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
+
+ xpFrdXfipEventIngestContentDTO.setCouponConsumedTotal(order.getCouponMoney()==null?BigDecimal.ZERO:order.getCouponMoney());
+
+ xpFrdXfipEventIngestContentDTO.setPaymentFlowNo(orderId);
+ xpFrdXfipEventIngestContentDTO.setPaymentFlowAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
+ xpFrdXfipEventIngestContentDTO.setPaymentChannel("WECHAT");
+
+ if(order.getCouponId()!=null){
+ ArrayList<XpFrdXfipEventCouponLineDTO> list = new ArrayList<>(1);
+ XpFrdXfipEventCouponLineDTO xpFrdXfipEventCouponLineDTO = new XpFrdXfipEventCouponLineDTO();
+ xpFrdXfipEventCouponLineDTO.setCouponId(String.valueOf(order.getCouponId()));
+ xpFrdXfipEventCouponLineDTO.setCouponType("ACTIVITY");
+// xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("5004901");
+// xpFrdXfipEventCouponLineDTO.setSelfBorneAmount(order.getCouponMoney());
+// xpFrdXfipEventCouponLineDTO.setThirdPartyBorneAmount(BigDecimal.ZERO);
+ xpFrdXfipEventCouponLineDTO.setCouponDeductionAmount(order.getCouponMoney());
+ xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("8000");
+ list.add(xpFrdXfipEventCouponLineDTO);
+ xpFrdXfipEventIngestContentDTO.setCouponLines(list);
+ }
+
+ xpFrdXfipEventIngestReqDTO.setContent(xpFrdXfipEventIngestContentDTO);
+ R<XpFrdXfipEventIngestRespVO> ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
+ if(ingest.getCode()==200){
+ XpFrdXfipEventIngestRespVO data = ingest.getData();
+ if(!data.getReceiveStatus().equals("REJECTED")){
+ // 推送成功
+ order.setFrdXfipEvenetStatus(1);
+ order.setFrdXfipEvenetId(data.getEventId());
+ }else {
+ // 推送失败
+ order.setFrdXfipEvenetStatus(2);
+ order.setFrdXfipEvenetId(data.getEventId());
+ }
+ log.info("xpFrdXfipEventPush:{}",data);
+ }else {
+ // 重试1次
+ ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
+ XpFrdXfipEventIngestRespVO data = ingest.getData();
+ if(ingest.getCode()==200){
+ if(!data.getReceiveStatus().equals("REJECTED")){
+ // 推送成功
+ order.setFrdXfipEvenetStatus(1);
+ order.setFrdXfipEvenetId(data.getEventId());
+ }else {
+ // 推送失败
+ order.setFrdXfipEvenetStatus(2);
+ order.setFrdXfipEvenetId(data.getEventId());
+ }
+ log.info("xpFrdXfipEventPush:{}",data);
+ }else {
+ // 推送失败
+ order.setFrdXfipEvenetStatus(2);
+ order.setFrdXfipEvenetId(data.getEventId());
+ }
+ log.info("xpFrdXfipEventPush:{}",ingest.getMsg());
+ }
+ order.setAppUserId(null);
+ updateById(order);
}
@@ -4921,10 +5080,10 @@
// 通过uid 和时间查出来数据 先判断是否传入了分页
if (query.getPageNo()!=null && query.getPageSize()!=null) {
Page<XpOrder> page = new Page<>(query.getPageNo(), query.getPageSize());
- Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
+ Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime).orderByDesc(BaseModel::getCreateTime));
list = orderPage.getRecords();
}else {
- list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
+ list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime).orderByDesc(BaseModel::getCreateTime));
}
if(list.isEmpty()){
@@ -4944,18 +5103,18 @@
xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber());
xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney());
xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney());
- xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd()));
+ xpInvoiceVo.setOrderFinishTime(xpOrder.getTripEnd()!=null?String.valueOf(xpOrder.getTripEnd()):"");
xpInvoiceVo.setXpInvoiceFlag(true);
xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus());
XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary();
// yyyy-MM-dd格式
- itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
- itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ itinerary.setTripStartDate(xpOrder.getAcceptanceTime()!=null?xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
+ itinerary.setTripEndDate(xpOrder.getTripEnd()!=null?xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get();
itinerary.setCarType(xpVehicle.getVehicleModel());
- itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ itinerary.setTripStartDate(xpOrder.getBoardingTime()!=null?xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
itinerary.setCity(xpOrder.getCityName());
itinerary.setStartPoint(xpOrder.getStartAddress());
--
Gitblit v1.7.1