Commit 58369941 authored by hanfeng's avatar hanfeng

Merge remote-tracking branch 'origin/base-modify' into base-modify

# Conflicts:
#	xx-vehicle/xx-vehicle-server/src/main/resources/mapper/VehicleMapper.xml
parents f84a1001 046f4856
......@@ -228,22 +228,10 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
log.info(valueStr);
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
String msg = JSONObject.toJSONString(params);
log.info("alipay notify message={}", msg);
//添加回调记录
// PaymentCallbackLog callbackLog = new PaymentCallbackLog();
// callbackLog.setPayCode(rstradeNo);
// callbackLog.setPayType(SystemConstant.PayType.ALIPAY);
// callbackLog.setOrderCode(rsOrderCode);
// callbackLog.setMessage(msg);
// paymentCallbackLogRepository.save(callbackLog);
// 切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
// boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
//支付宝回调验签
try {
boolean flag = AlipaySignature.rsaCheckV1(params, SystemConfig.ALIPAY_PUBLIC_KEY, AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
......@@ -252,36 +240,26 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
return ObjectRestResponse.createDefaultFail().getMessage();
}
String rsTradeStatus = params.get("trade_status");
if (!SystemConfig.ALIPAY_TRADE_FINISHED.equals(rsTradeStatus) && !SystemConfig.ALIPAY_TRADE_SUCCESS.equals(rsTradeStatus)) {
if (StringUtils.isBlank(rsTradeStatus)) { //订单预授权支付回调
String status = params.get("status");
if (!status.equals("SUCCESS")) {
log.info("alipay order trade_status has problem, result={}", msg);
return ObjectRestResponse.createDefaultFail().getMessage();
}
//订单APP支付回调
} else if (!SystemConfig.ALIPAY_TRADE_FINISHED.equals(rsTradeStatus) && !SystemConfig.ALIPAY_TRADE_SUCCESS.equals(rsTradeStatus)) {
log.info("alipay order trade_status has problem, result={}", msg);
return ObjectRestResponse.createDefaultFail().getMessage();
}
//String rsSellerId = params.get("seller_id");
//
// PaymentRecord paymentRecord = paymentRecordRepository.findOneByOrderCode(rsOrderCode);
// //验证付款信息
// if (paymentRecord == null || !paymentRecord.getAmount().toString().equals(rsAmount)
// || !aliPayConfig.getAppId().equals(rsAppId)) {
// log.info("alipay order notify fail, result={}", msg);
// return Response.FAILURE.getHeader().getMessage();
// }
// //重复回调
// if (paymentRecord.getStatus().intValue() != 1) {
// log.info("alipay order repeat notify, result={}", msg);
// return Response.SUCCESS().getHeader().getMessage();
// }
//
// paymentRecord.setPayCode(rstradeNo);
// paymentRecord.setStatus(2);
// paymentRecordRepository.save(paymentRecord);
// Map<String, Object> sendMap = DataUtils.objectToMap(paymentRecord);
// sendMap.put("amount", new BigDecimal(rsAmount).multiply(new BigDecimal(100)).intValue());
// sendMsgToOrder(JSONObject.toJSONString(sendMap));
String tradeNo = params.get("out_trade_no");
if (StringUtils.isBlank(tradeNo)) {
tradeNo = params.get("out_request_no");
}
String operationId = params.get("trade_no");
if (StringUtils.isBlank(operationId)) {
operationId = params.get("auth_no");
}
notice(tradeNo, operationId);
return ObjectRestResponse.succ().getMessage();
} catch (AlipayApiException e) {
......@@ -301,7 +279,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
AlipayClient alipayClient = getAlipayClient();
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
try {
return appOrderPay(alipayClient, orderPayVo, notifyUrl);
return fundAuthOrderAppFreeze(alipayClient, orderPayVo, notifyUrl);
} catch (Exception e) {
e.printStackTrace();
}
......@@ -360,13 +338,10 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
//预授权冻结
public String fundAuthOrderAppFreeze(AlipayClient alipayClient, OrderPayVo orderPayVo, String notifyUrl) throws AlipayApiException {
AlipayFundAuthOrderAppFreezeRequest request = new AlipayFundAuthOrderAppFreezeRequest();
AlipayFundAuthOrderAppFreezeModel model = new AlipayFundAuthOrderAppFreezeModel();
BigDecimal realAmount = new BigDecimal(orderPayVo.getAmount().toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
request.setBizContent("{" +
"\"auth_code\":\"" + orderPayVo.getTradeNo() + "\"," +
"\"auth_code_type\":\"bar_code\"," +
"\"out_order_no\":\"" + orderPayVo.getOrderNo() + "\"," +
"\"out_request_no\":\"" + orderPayVo.getOrderNo() + "\"," +
"\"out_order_no\":\"" + orderPayVo.getTradeNo() + "\"," +
"\"out_request_no\":\"" + orderPayVo.getTradeNo() + "\"," +
"\"order_title\":\"" + orderPayVo.getSubject() + "\"," +
"\"product_code\":\"PRE_AUTH_ONLINE\"," +
"\"pay_timeout\":\"1d\"," +
......@@ -526,56 +501,74 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
//解冻预授权
public void fundAuthOrderUnFreeze(AlipayClient alipayClient) throws AlipayApiException {
public String fundAuthOrderUnFreeze(OrderPayVo orderPayVo, String notifyUrl) throws AlipayApiException {
AlipayClient alipayClient = getAlipayClient();
BigDecimal realAmount = new BigDecimal(orderPayVo.getAmount().toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
AlipayFundAuthOrderUnfreezeModel model = new AlipayFundAuthOrderUnfreezeModel();
model.setAuthNo("2017120410002001390208978986"); // 支付宝资金授权订单号,在授权冻结成功时返回需要入库保存
model.setOutRequestNo("UnfreezeRequestNo000003");//同一商户每次不同的资金操作请求,商户请求流水号不能重复,且与冻结流水号不同
model.setAmount("0.01"); // 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位
model.setAuthNo(orderPayVo.getTradeNo()); // 支付宝资金授权订单号,在授权冻结成功时返回需要入库保存
model.setOutRequestNo(orderPayVo.getOrderNo());//同一商户每次不同的资金操作请求,商户请求流水号不能重复,且与冻结流水号不同
model.setAmount(realAmount.toString()); // 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位
model.setRemark("预授权解冻"); // 商户对本次解冻操作的附言描述,长度不超过100个字母或50个汉字
//选填字段,信用授权订单,针对信用全免订单,传入该值完结信用订单,形成芝麻履约记录
// model.setExtraParam("{\"unfreezeBizInfo\":\"{\\\"bizComplete\\\":\\\"true\\\"}\"}");
request.setBizModel(model);
request.setNotifyUrl("");//异步通知地址,必填,该接口只通过该参数进行异步通知
request.setNotifyUrl(notifyUrl);//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayFundAuthOrderUnfreezeResponse response = alipayClient.execute(request);
log.info("response: {}" + response.getBody());
if (response.isSuccess()) {
log.info("调用成功");
log.info("response: {}" + response.getBody());//签名后的参数,直接入参到
return response.getBody();
} else {
log.info("调用失败");
return null;
}
}
//取消预授权
public void fundAuthCancel() throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "app_id", "your private_key", "json", "GBK", "alipay_public_key", "RSA2");
public String fundAuthCancel(OrderPayVo orderPayVo, String notifyUrl) throws AlipayApiException {
AlipayClient alipayClient = getAlipayClient();
AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest();
AlipayFundAuthOperationCancelModel model = new AlipayFundAuthOperationCancelModel();
//model.setAuthNo("2017120110002001390206804295"); // 支付宝资金授权订单号,在授权冻结成功时返回参数中获得
model.setOutOrderNo("orderFreeze000005"); //商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
model.setOutOrderNo(orderPayVo.getOrderNo()); //商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
//model.setOperationId("20171201317348823902"); //支付宝的授权资金操作流水号
model.setOutRequestNo("requestNo000005");//与支付宝的授权资金操作流水号不能同时为空,与冻结流水号相同
model.setOutRequestNo(orderPayVo.getTradeNo());//与支付宝的授权资金操作流水号不能同时为空,与冻结流水号相同
model.setRemark("预授权撤销"); // 商户对本次撤销操作的附言描述,长度不超过100个字母或50个汉字
request.setBizModel(model);
request.setNotifyUrl("");//异步通知地址,必填,该接口只通过该参数进行异步通知
request.setNotifyUrl(notifyUrl);//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayFundAuthOperationCancelResponse response = alipayClient.execute(request);
log.info("response: {}" + response.getBody());
if (response.isSuccess()) {
log.info("调用成功");
log.info("response: {}" + response.getBody());//签名后的参数,直接入参到
return response.getBody();
} else {
log.info("调用失败");
return null;
}
}
//预授权转支付
public void tradePay() throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "app_id", "your private_key", "json", "utf-8", "alipay_public_key", "RSA2");
public void tradePay(OrderPayVo orderPayVo, String notifyUrl) throws AlipayApiException {
AlipayClient alipayClient = getAlipayClient();
BigDecimal realAmount = new BigDecimal(orderPayVo.getAmount().toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
AlipayTradePayRequest request = new AlipayTradePayRequest();
AlipayTradePayModel model = new AlipayTradePayModel();
model.setOutTradeNo("20180412100020088982"); // 预授权转支付商户订单号,为新的商户交易流水号;如果重试发起扣款,商户订单号不要变;
model.setOutTradeNo(orderPayVo.getOrderNo()); // 预授权转支付商户订单号,为新的商户交易流水号;如果重试发起扣款,商户订单号不要变;
model.setProductCode("PRE_AUTH_ONLINE"); // 固定值PRE_AUTH_ONLINE
model.setAuthNo("2018041210002001660228733635"); // 填写预授权冻结交易号
model.setSubject("预授权转支付测试"); // 解冻转支付标题,用于展示在支付宝账单中
model.setTotalAmount("0.01"); // 结算支付金额
model.setAuthNo(orderPayVo.getTradeNo()); // 填写预授权冻结交易号
model.setSubject(orderPayVo.getSubject()); // 解冻转支付标题,用于展示在支付宝账单中
model.setTotalAmount(realAmount.toString()); // 结算支付金额
model.setSellerId(SystemConfig.ALIPAY_PID); // 填写卖家支付宝账户pid
model.setBuyerId(SystemConfig.ALIPAY_APPID); // 填写预授权用户uid,通过预授权冻结接口返回的payer_user_id字段获取
model.setStoreId("test_store_id"); // 填写实际交易发生的终端编号,与预授权的outStoreCode保持一致即可
model.setBody("预授权解冻转支付测试"); // 可填写备注信息
model.setBody(orderPayVo.getBody()); // 可填写备注信息
//如果需要从一笔授权中完成多笔订单支付,保持auth_no不变,不同订单根据outTradeNo进行标识,此时auth_confirm_mode不传或者传入NOT_COMPLETE;进行到最后一笔转支付时,auth_confirm_mode传入COMPLETE由支付宝完成剩余金额自动解冻,或者商户自行调用解冻接口将剩余金额解冻。
model.setAuthConfirmMode("NOT_COMPLETE");//传入该值用户剩余金额不会自动解冻
request.setBizModel(model);
request.setNotifyUrl("");//异步通知地址,必填,该接口只通过该参数进行异步通知
request.setNotifyUrl(notifyUrl);//异步通知地址,必填,该接口只通过该参数进行异步通知
AlipayTradePayResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
......@@ -587,17 +580,24 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
}
//退款
public void testTradeRefund() throws Exception {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "app_id", "your private_key", "json", "GBK", "alipay_public_key", "RSA2");
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
model.setOutTradeNo("tradePay000002"); //与预授权转支付商户订单号相同,代表对该笔交易退款
model.setRefundAmount("0.01");
model.setRefundReason("预授权退款测试");
model.setOutRequestNo("refund0000001");//标识一次退款请求,同一笔交易多次退款需要保证唯一,如部分退款则此参数必传。
public void testTradeRefund(OrderPayVo orderPayVo, String notifyUrl) throws Exception {
AlipayClient alipayClient = getAlipayClient();
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
BigDecimal realAmount = new BigDecimal(orderPayVo.getAmount().toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
model.setOutTradeNo(orderPayVo.getTradeNo()); //与预授权转支付商户订单号相同,代表对该笔交易退款
model.setRefundAmount(realAmount.toString());
model.setRefundReason(orderPayVo.getBody());
model.setOutRequestNo(orderPayVo.getOrderNo());//标识一次退款请求,同一笔交易多次退款需要保证唯一,如部分退款则此参数必传。
request.setBizModel(model);
AlipayTradeRefundResponse response = alipayClient.execute(request);
log.info("response: {}" + response.getBody());
if (response.isSuccess()) {
System.out.println("调用成功");
log.info("response: {}" + response.getBody());
} else {
System.out.println("调用失败");
}
}
/**
......@@ -638,25 +638,22 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> implements In
}
return false;
}
public static void main(String[] args) {
@Override
public void afterPropertiesSet() throws Exception {
wxNeedPayErrorCodes = EnumSet.allOf(WxNeedPayErrorEnum.class).stream().map(WxNeedPayErrorEnum::name).collect(Collectors.toList());
aliNeedPayErrorCodes = EnumSet.allOf(AliNeedPayErrorEnum.class).stream().map(AliNeedPayErrorEnum::name).collect(Collectors.toList());
}
public static void main(String[] args) throws AlipayApiException {
OrderPayBiz orderPayBiz = new OrderPayBiz();
FundPayVo fundPayVo = new FundPayVo();
fundPayVo.setRemark("转账");
fundPayVo.setOutBizNo("12345678");
fundPayVo.setAmount("0.1");
fundPayVo.setPayeeAccount("2088212169302286");
AlipayClient alipayClient = orderPayBiz.getAlipayClient();
try {
System.out.println(orderPayBiz.alipayfundTrans(alipayClient, fundPayVo));
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
@Override
public void afterPropertiesSet() throws Exception {
wxNeedPayErrorCodes = EnumSet.allOf(WxNeedPayErrorEnum.class).stream().map(WxNeedPayErrorEnum::name).collect(Collectors.toList());
aliNeedPayErrorCodes = EnumSet.allOf(AliNeedPayErrorEnum.class).stream().map(AliNeedPayErrorEnum::name).collect(Collectors.toList());
OrderPayVo orderPayVo = new OrderPayVo();
orderPayVo.setOrderNo("20191024142517000001");
orderPayVo.setTradeNo("2019102410002001530572454194");
orderPayVo.setAmount(2);
orderPayVo.setBody("扣除租车订单费用");
orderPayVo.setSubject("租车订单交易费用");
// orderPayBiz.fundAuthOrderUnFreeze(orderPayVo, "");
orderPayBiz.alipayOrderRefund("20191024142517000001","2019102422001421530513284677", 2, "xxxx", "");
//orderPayBiz.tradePay(orderPayVo, "");
//orderPayBiz.fundAuthCancel(orderPayVo, "");
}
}
......@@ -33,6 +33,15 @@ public class VehicleBookRecordQueryVo extends PageParam {
*/
private String selectedMonth;
/**
* 查询预定开始月份 yyyy-MM
*/
private String bookStartDate;
/**
* 查询预定结束月份 yyyy-MM
*/
private String bookEndDate;
/**
* 申请状态
*/
......
......@@ -84,17 +84,20 @@ public class VehicleActiveService {
if (MileageLift == null || MileageLift1 >= MileageLift) {
// 写入车辆公里数,预计目的地
vehicle.setMileageLastUpdate(MileageLift1);
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 修改车辆状态,确认是空闲状态
int result = vehicleMapper.updateStatusByIdAndStatus(departureVo.getVehicleId(), VehicleStatus.DEPARTURE.getCode(),
VehicleStatus.NORMAL.getCode());
//修改预约记录状态
VehicleBookRecord vehicleBookRecord = null;
if (departureVo.getBookRecordId() != null) {
vehicleBookRecord = vehicleBookRecordBiz.selectById(departureVo.getBookRecordId());
updateBookRecordStatus(vehicleBookRecord, 1);
}
if (vehicleBookRecord != null) {
vehicle.setParkBranchCompanyId(vehicleBookRecord.getRetCompany());
}
vehicleMapper.updateByPrimaryKeySelective(vehicle);
VehicleDepartureLogVo vehicleDepartureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(departureVo.getBookRecordId());
if (vehicleDepartureLogVo != null) {
BeanUtil.copyProperties(departureVo, vehicleDepartureLogVo, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
......@@ -208,9 +211,6 @@ public class VehicleActiveService {
}
// 写入车辆公里数,还车分公司id
vehicle.setMileageLastUpdate(MileageRest1);
if (vehicleBookRecord != null) {
vehicle.setParkBranchCompanyId(vehicleBookRecord.getRetCompany());
}
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 出车记录
VehicleDepartureLogVo departureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(arrivalVo.getBookRecordId());
......
......@@ -471,6 +471,12 @@
and (v1.book_start_date like CONCAT(#{selectedMonth}, "%") or v1.book_end_date like
CONCAT(#{selectedMonth}, "%"))
</if>
<if test="bookStartDate != null">
and v1.book_start_date like CONCAT(#{bookStartDate}, "%")
</if>
<if test="bookEndDate != null">
and v1.book_end_date like CONCAT(#{bookEndDate}, "%")
</if>
<if test="numberPlate != null">
and v3.number_plate like concat('%', #{numberPlate}, '%')
</if>
......@@ -480,6 +486,9 @@
<if test="keywords != null and keywords != ''">
and (v3.number_plate like concat('%', #{keywords}, '%') or v3.code like concat('%', #{keywords}, '%'))
</if>
<if test="zoneId != null">
and bc3.zone_id = #{zoneId}
</if>
<if test="companyIds != null and companyIds.size > 0">
and (v1.lift_company in
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
......
......@@ -41,7 +41,7 @@
SELECT r.* FROM (
select DISTINCT v.`id`,
v.`code`,
(CASE WHEN #{status} != 0 THEN #{status}
(CASE WHEN #{status} is not null THEN #{status}
ELSE v.status END) status ,
v.number_plate,
v.brand,
......@@ -71,7 +71,6 @@
v.update_time,
v.model_id,
v.mileage_last_update as mileage,
c.val as useTypeName,
vm.name as vehicleType
<if test=" yearMonthAndParam != null ">
,vbi.booked_date
......@@ -90,7 +89,6 @@
LEFT JOIN vehicle_book_record v2 on v2.id = (select id from vehicle_book_record where vehicle_id = v.id order by update_time DESC LIMIT 1)
LEFT JOIN vehicle_departure_log v3 on v2.id = v3.book_record_id
LEFT JOIN vehicle_model vm ON v.model_id = vm.id
LEFT JOIN (select * from constant where type = 2) c ON v.use_type = c.code
where
v.is_del=0
<if test="mRangeDateEnd !=null">
......@@ -184,7 +182,7 @@
SELECT r.* FROM (
select DISTINCT v.`id`,
v.`code`,
(CASE WHEN #{status} != 0 THEN #{status}
(CASE WHEN #{status} is not null THEN #{status}
ELSE v.status END) status ,
v.number_plate,
v.brand,
......@@ -216,7 +214,6 @@
v.update_time,
v.model_id,
v.mileage_last_update as mileage,
c.val as useTypeName,
vm.name as vehicleType
<if test=" yearMonthAndParam !=null ">
,vbi.booked_date
......@@ -235,7 +232,6 @@
LEFT JOIN vehicle_book_record v2 on v2.id = (select id from vehicle_book_record where vehicle_id = v.id order by update_time DESC LIMIT 1)
LEFT JOIN vehicle_departure_log v3 on v2.id = v3.book_record_id
LEFT JOIN vehicle_model vm ON v.model_id = vm.id
LEFT JOIN (select * from constant where type = 2) c ON v.use_type = c.code
where
v.is_del=0
<if test="companyList != null">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment