|  |  |  | @ -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; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |