|
|
|
|
@ -20,6 +20,7 @@ import com.sczx.order.repository.OrderSubRepo;
|
|
|
|
|
import com.sczx.order.service.OrderService;
|
|
|
|
|
import com.sczx.order.thirdpart.dto.*;
|
|
|
|
|
import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq;
|
|
|
|
|
import com.sczx.order.thirdpart.dto.req.PaymentRequest;
|
|
|
|
|
import com.sczx.order.thirdpart.integration.CarInteg;
|
|
|
|
|
import com.sczx.order.thirdpart.integration.PayInteg;
|
|
|
|
|
import com.sczx.order.thirdpart.integration.StoreInteg;
|
|
|
|
|
@ -102,8 +103,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
orderMainPO.setOperatorId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
|
|
|
|
orderMainPO.setOrderNo(OrderUtil.generateOrderNo());
|
|
|
|
|
//TODO 默认应该是待支付状态,这里先默认支付完成待取车
|
|
|
|
|
// orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
|
|
|
|
orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PICK.getCode());
|
|
|
|
|
orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
|
|
|
|
// orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PICK.getCode());
|
|
|
|
|
orderMainPO.setFirstOrderTime(LocalDateTime.now());
|
|
|
|
|
|
|
|
|
|
//设置预计还车时间
|
|
|
|
|
@ -161,14 +162,35 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
|
|
|
|
BigDecimal orderAmount = orderSubPOList.stream().map(OrderSubPO::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
orderMainPO.setOrderAmount(orderAmount);
|
|
|
|
|
|
|
|
|
|
// TODO 发起支付返回预支付信息
|
|
|
|
|
UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = new UnifiedPaymentInfoDTO();
|
|
|
|
|
String paymentId = OrderUtil.generateSubOrderNo(OrderUtil.ZF_PREFIX);
|
|
|
|
|
//发起支付
|
|
|
|
|
if(StringUtils.equalsIgnoreCase(userInfoDTO.getMiniProgramType(), MiniProgramTypeEnum.WECHAT.getType())){
|
|
|
|
|
PaymentRequest paymentRequest = new PaymentRequest();
|
|
|
|
|
paymentRequest.setCompanyId(Long.valueOf(companyStoreDTO.getOperatingCompanyId()));
|
|
|
|
|
paymentRequest.setOutTradeNo(paymentId);
|
|
|
|
|
paymentRequest.setOpenId(userInfoDTO.getWechatOpenid());
|
|
|
|
|
paymentRequest.setAttach(companyStoreDTO.getOperatingCompanyId().toString());
|
|
|
|
|
paymentRequest.setSpbillCreateIp("127.0.0.1");
|
|
|
|
|
paymentRequest.setBody(rentCarRuleDTO.getRuleName());
|
|
|
|
|
paymentRequest.setTotalFee(orderMainPO.getOrderAmount().multiply(new BigDecimal(100)).intValue());
|
|
|
|
|
unifiedPaymentInfoDTO = payInteg.unifiedOrder(paymentRequest);
|
|
|
|
|
// TODO 其他支付类型
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(OrderSubPO orderSubPO : orderSubPOList){
|
|
|
|
|
orderSubPO.setPaymentId(paymentId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
orderMainRepo.save(orderMainPO);
|
|
|
|
|
|
|
|
|
|
orderSubPOList.forEach(orderSubPO -> {
|
|
|
|
|
orderSubPO.setOrderId(orderMainPO.getOrderId());
|
|
|
|
|
});
|
|
|
|
|
orderSubRepo.saveBatch(orderSubPOList);
|
|
|
|
|
// TODO 发起支付返回预支付信息
|
|
|
|
|
UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = new UnifiedPaymentInfoDTO();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//返回订单信息
|
|
|
|
|
OrderDTO orderDTO = OrderConvert.INSTANCE.poToDto(orderMainPO);
|
|
|
|
|
@ -493,7 +515,22 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} else if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())||OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
|
|
|
|
|
//TODO 待支付状态要拉起支付
|
|
|
|
|
//去查看订单是否支付成功
|
|
|
|
|
LambdaQueryWrapper<OrderSubPO> querySubOrderWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
querySubOrderWrapper.eq(OrderSubPO::getOrderId, orderMainPO.getOrderId())
|
|
|
|
|
.in(OrderSubPO::getSuborderType, Arrays.asList(SubOrderTypeEnum.RENTBATTEY.getCode(), SubOrderTypeEnum.RENTCAR.getCode()))
|
|
|
|
|
.ne(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).orderByDesc(OrderSubPO::getCreatedAt).last(" limit 1");
|
|
|
|
|
OrderSubPO orderSubPO = orderSubRepo.getOne(querySubOrderWrapper);
|
|
|
|
|
if(orderSubPO!=null){
|
|
|
|
|
//如果是微信支付,则去微信查询支付状态,如果支付成功,则修改订单状态为支付成功
|
|
|
|
|
if(PaymentTypeEnum.WX_PAY.getCode().equals(orderSubPO.getPaymentMethod())){
|
|
|
|
|
Map<String, String> result = payInteg.orderQuery((long)companyStoreDTO.getOperatingCompanyId(), orderSubPO.getPaymentId());
|
|
|
|
|
if(StringUtils.equalsIgnoreCase(result.get("trade_state"), "SUCCESS")){
|
|
|
|
|
String orderState = paySuccessOrder(orderMainPO, orderSubPO);
|
|
|
|
|
orderDetailDTO.setOrderStatus(orderState);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return orderDetailDTO;
|
|
|
|
|
@ -654,6 +691,32 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
return orderMainRepo.pageQueryOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 支付成功更新订单状态
|
|
|
|
|
* @param orderMainPO
|
|
|
|
|
* @param orderSubPO
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private String paySuccessOrder(OrderMainPO orderMainPO, OrderSubPO orderSubPO){
|
|
|
|
|
String orderStatus = null;
|
|
|
|
|
LambdaUpdateWrapper<OrderSubPO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
updateWrapper.set(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS.getCode());
|
|
|
|
|
updateWrapper.eq(OrderSubPO::getSuborderId, orderSubPO.getSuborderId());
|
|
|
|
|
orderSubRepo.update(updateWrapper);
|
|
|
|
|
|
|
|
|
|
LambdaUpdateWrapper<OrderMainPO> updateWrapper2 = new LambdaUpdateWrapper<>();
|
|
|
|
|
updateWrapper2.eq(OrderMainPO::getOrderId, orderMainPO.getOrderId());
|
|
|
|
|
if(OrderStatusEnum.WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
|
|
|
|
|
updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.WAIT_PICK.getCode());
|
|
|
|
|
orderStatus = OrderStatusEnum.WAIT_PICK.getCode();
|
|
|
|
|
} else if(OrderStatusEnum.RERENT_WAIT_PAY.getCode().equalsIgnoreCase(orderMainPO.getOrderStatus())){
|
|
|
|
|
updateWrapper2.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode());
|
|
|
|
|
orderStatus = OrderStatusEnum.RENT_ING.getCode();
|
|
|
|
|
}
|
|
|
|
|
orderMainRepo.update(updateWrapper2);
|
|
|
|
|
return orderStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取租车订单金额
|
|
|
|
|
@ -674,4 +737,5 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
return rentCarOrderAmount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|