提交 df371a60 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v31.2_accept_orders_20241024' into release_jdk17

# Conflicts: # clx-performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # clx-performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # clx-performance-web/src/main/java/com/clx/performance/model/PerformanceProgress.java # clx-performance-web/src/main/java/com/openapi/sdk/util/HttpsUtils.java # performance-api/src/main/java/com/clx/performance/vo/pc/CarrierOrderChildDetailVO.java # performance-api/src/main/java/com/clx/performance/vo/pc/PerformanceProgressVO.java
...@@ -96,4 +96,10 @@ public class OrderChildFeignController { ...@@ -96,4 +96,10 @@ public class OrderChildFeignController {
return Result.ok(); return Result.ok();
} }
@Operation(summary = "查询老马上来车辆下的进行中的运单", description = "<br>By:刘海泉")
@GetMapping("/queryTruckProcessingOrderChild")
public Long queryTruckProcessingOrderChild(@RequestParam("truckNo") @NotBlank(message = "车牌号不能为空") String truckNo) {
return orderChildService.queryTruckProcessingOrderChild(truckNo);
}
} }
...@@ -223,4 +223,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -223,4 +223,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Long queryNoCancelChildByOrderGoodsNo(String orderGoodsNo, Integer code); Long queryNoCancelChildByOrderGoodsNo(String orderGoodsNo, Integer code);
List<OrderChild> listNoCancelOrderChild(String orderNo); List<OrderChild> listNoCancelOrderChild(String orderNo);
Long queryTruckProcessingOrderChild(String truckNo);
} }
...@@ -745,4 +745,12 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -745,4 +745,12 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
); );
} }
@Override
public Long queryTruckProcessingOrderChild(String truckNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getTruckNo,truckNo);
query.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode());
return baseMapper.selectCount(query);
}
} }
package com.clx.performance.feign;
import com.msl.common.result.Result;
import jakarta.validation.constraints.NotBlank;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "order-service")
public interface FeignOrderService {
@GetMapping(value = "/order-service/feign/getGoingOrderChildByTruckNo")
Result<Integer> getGoingOrderChildByTruckNo (@RequestParam("truckNo") @NotBlank(message = "车牌号不能为空") String truckNo);
}
...@@ -122,4 +122,6 @@ public interface OrderChildService { ...@@ -122,4 +122,6 @@ public interface OrderChildService {
WeightChildSignatureDto getWeighingSignature(String childNo,Integer type); WeightChildSignatureDto getWeighingSignature(String childNo,Integer type);
Long queryTruckProcessingOrderChild(String truckNo);
} }
...@@ -41,6 +41,7 @@ import com.clx.performance.enums.settle.SettlementWayEnum; ...@@ -41,6 +41,7 @@ import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.extranal.order.InvoicingCompanyService; import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.extranal.order.QuotationService; import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.extranal.user.*; import com.clx.performance.extranal.user.*;
import com.clx.performance.feign.FeignOrderService;
import com.clx.performance.feign.FeignPaymentService; import com.clx.performance.feign.FeignPaymentService;
import com.clx.performance.model.*; import com.clx.performance.model.*;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord; import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
...@@ -289,6 +290,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -289,6 +290,9 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired @Autowired
private PerformanceSmartCompanyNoConfig companyNoConfig; private PerformanceSmartCompanyNoConfig companyNoConfig;
@Autowired
FeignOrderService feignOrderService;
@PostConstruct @PostConstruct
public void init(){ public void init(){
String[] activeProfiles = environment.getActiveProfiles(); String[] activeProfiles = environment.getActiveProfiles();
...@@ -386,6 +390,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -386,6 +390,8 @@ public class OrderChildServiceImpl implements OrderChildService {
// 司机接单限制 // 司机接单限制
driverTakeOrderLimit(driverTruckInfo.getUserNo()); driverTakeOrderLimit(driverTruckInfo.getUserNo());
//车辆接单限制
truckLimit(truckNo);
/** 判断当前用户是否为车主 true 车主 */ /** 判断当前用户是否为车主 true 车主 */
boolean truckOwnerFlag = Objects.equals(driverTruckInfo.getWalletCode(), driverTruckInfo.getTruckOwnWalletCode()); boolean truckOwnerFlag = Objects.equals(driverTruckInfo.getWalletCode(), driverTruckInfo.getTruckOwnWalletCode());
...@@ -589,6 +595,23 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -589,6 +595,23 @@ public class OrderChildServiceImpl implements OrderChildService {
return result; return result;
} }
public void truckLimit(String truckNo){
//查询该车辆是否在老马上来系统存在进行中的运单
log.info("开始查询车辆在老马上来系统是否存在进行中的运单,车牌号:{}",truckNo);
Result<Integer> truckGoingChildResult = feignOrderService.getGoingOrderChildByTruckNo(truckNo);
log.info("开始查询车辆在老马上来系统是否存在进行中的运单,车牌号:{},响应结果:{}",truckNo,truckGoingChildResult);
if(truckGoingChildResult.succeed()){
//车辆存在进行中的运单
if(truckGoingChildResult.getData() > 0){
throw new ServiceSystemException(PerformanceResultEnum.APP_TRUCK_HAVE_GOING_CHILD);
}
}else{
log.error("查询车辆在马上来系统是否存在进行中的运单失败");
throw new ServiceSystemException(PerformanceResultEnum.APP_TRUCK_HAVE_GOING_CHILD,"查询车辆在马上来是否存在运单失败");
}
}
//判断当前运单的吨数,货单剩余量是否足够,不足够直接拦截,足够需要判断订单是否还有拉运量 //判断当前运单的吨数,货单剩余量是否足够,不足够直接拦截,足够需要判断订单是否还有拉运量
public boolean judgeNotEnoughWeightOrdered(BigDecimal orderGoodsResidueWeight,String orderNo){ public boolean judgeNotEnoughWeightOrdered(BigDecimal orderGoodsResidueWeight,String orderNo){
//货单无剩余量 //货单无剩余量
...@@ -2078,6 +2101,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2078,6 +2101,8 @@ public class OrderChildServiceImpl implements OrderChildService {
return CheckResult.FAIL.code; return CheckResult.FAIL.code;
} }
} }
return CheckResult.OK.code; return CheckResult.OK.code;
} }
...@@ -2131,6 +2156,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2131,6 +2156,7 @@ public class OrderChildServiceImpl implements OrderChildService {
OWNER_WALLET_NOT_EXIST(APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR.getCode(), "车主未绑卡"), OWNER_WALLET_NOT_EXIST(APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR.getCode(), "车主未绑卡"),
DRIVER_NO_BANKCARD(APP_POP_UP_DRIVER_NO_BANKCARD_ERROR.getCode(), "司机未绑卡"), DRIVER_NO_BANKCARD(APP_POP_UP_DRIVER_NO_BANKCARD_ERROR.getCode(), "司机未绑卡"),
OWNER_NO_BANKCARD(APP_POP_UP_OWNER_NO_BANKCARD_ERROR.getCode(), "车主未绑卡"); OWNER_NO_BANKCARD(APP_POP_UP_OWNER_NO_BANKCARD_ERROR.getCode(), "车主未绑卡");
private final int code; private final int code;
private final String msg; private final String msg;
} }
...@@ -3884,4 +3910,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3884,4 +3910,9 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
return new WeightChildSignatureDto(); return new WeightChildSignatureDto();
} }
@Override
public Long queryTruckProcessingOrderChild(String truckNo) {
return orderChildDao.queryTruckProcessingOrderChild(truckNo);
}
} }
package com.openapi.sdk.util; package com.openapi.sdk.util;
import lombok.extern.slf4j.Slf4j; import okhttp3.*;
import javax.net.ssl.*; import javax.net.ssl.HostnameVerifier;
import java.io.DataOutputStream; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.security.KeyManagementException;
import java.net.HttpURLConnection; import java.security.NoSuchAlgorithmException;
import java.net.URL;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
@Slf4j
public class HttpsUtils { public class HttpsUtils {
public HttpsUtils() {
}
public static String doPost(String url, int connentTimeout, int readTimeout) throws Exception { private static final OkHttpClient client;
log.info("========>进入自定义HttpsUtils.doPost1方法");
HttpURLConnection conn = null;
InputStreamReader isReader = null;
StringBuffer result = new StringBuffer();
static {
try { try {
trustAllHttpsCertificates(); // 创建一个信任所有证书的 TrustManager
HostnameVerifier hv = new HostnameVerifier() { TrustManager[] trustAllCerts = new TrustManager[]{
public boolean verify(String urlHostName, SSLSession session) { new X509TrustManager() {
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); @Override
return true; public void checkClientTrusted(X509Certificate[] chain, String authType) {
} }
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
}; };
HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setConnectTimeout(connentTimeout);
conn.setReadTimeout(readTimeout);
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
char[] bfchar = new char[2048];
int length = 0;
while((length = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, length);
result.append(temp);
}
} catch (Exception var17) {
System.err.println("发送 POST 请求出现异常!" + var17.getMessage());
throw var17;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var16) {
System.err.println("关闭数据流出错了!\n" + var16.getMessage() + "\n");
throw var16;
}
// try {
// if (conn != null) {
// conn.disconnect();
// }
// } catch (Exception var19) {
// System.err.println("关闭连接出错了!\n" + var19.getMessage() + "\n");
// throw var19;
// }
}
return result.toString();
}
public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws Exception { // 安装所有信任的 SSL 套接字工厂
log.info("========>进入自定义HttpsUtils.doPost2方法"); SSLContext sslContext = SSLContext.getInstance("SSL");
InputStreamReader isReader = null; sslContext.init(null, trustAllCerts, new SecureRandom());
HttpURLConnection conn = null;
DataOutputStream dos = null;
StringBuffer result = new StringBuffer();
try { // 创建一个允许所有主机名的 HostnameVerifier
trustAllHttpsCertificates(); HostnameVerifier hostnameVerifier = (hostname, session) -> {
HostnameVerifier hv = new HostnameVerifier() { System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost());
public boolean verify(String urlHostName, SSLSession session) { return true;
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
}
}; };
HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Length", String.valueOf(param.getBytes("UTF-8").length));
conn.setRequestMethod("POST");
conn.setConnectTimeout(connectTimeout);
conn.setRequestProperty("charset", "UTF-8");
conn.setReadTimeout(readTimeout);
conn.connect();
dos = new DataOutputStream(conn.getOutputStream());
int length = 0;
int totalLength = param.length();
while(length < totalLength) {
int endLength = length + 1024;
if (endLength > totalLength) {
endLength = totalLength;
}
dos.write(param.substring(length, endLength).getBytes("UTF-8"));
length = endLength;
dos.flush();
}
dos.close();
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
char[] bfchar = new char[2048];
int rlength = 0;
while((rlength = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, rlength);
result.append(temp);
}
return result.toString();
} catch (Exception var21) {
System.err.println("发送 POST 请求出现异常!" + var21.getMessage() + "e:" + var21);
throw var21;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var20) {
System.err.println("关闭数据流出错了!\n" + var20.getMessage() + "\n");
throw var20;
}
// try {
// if (conn != null) {
// conn.disconnect();
// }
// } catch (Exception var19) {
// System.err.println("关闭连接出错了!\n" + var19.getMessage() + "\n");
// throw var19;
// }
// 创建 OkHttpClient 并启用连接池
client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
.hostnameVerifier(hostnameVerifier)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
throw new RuntimeException("Failed to create OkHttpClient", e);
} }
} }
private static void trustAllHttpsCertificates() throws Exception { public static String doPost(String url, int connectTimeout, int readTimeout) throws IOException {
TrustManager[] trustAllCerts = new TrustManager[1]; Request request = new Request.Builder()
TrustManager tm = new miTM(); .url(url)
trustAllCerts[0] = tm; .post(RequestBody.create("", MediaType.get("application/x-www-form-urlencoded")))
SSLContext sc = SSLContext.getInstance("SSL"); .build();
sc.init((KeyManager[])null, trustAllCerts, (SecureRandom)null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager, X509TrustManager {
miTM() {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) { try (Response response = client.newCall(request).execute()) {
return true; if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
} }
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws IOException {
} RequestBody body = RequestBody.create(param, MediaType.get("application/x-www-form-urlencoded"));
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
} }
} }
} }
\ No newline at end of file
...@@ -116,6 +116,8 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -116,6 +116,8 @@ public enum PerformanceResultEnum implements ResultEnum {
APP_POP_UP_DRIVER_NOT_AUTH(-496, "司机钱包不存在"), APP_POP_UP_DRIVER_NOT_AUTH(-496, "司机钱包不存在"),
/**车主未实名 **/ /**车主未实名 **/
APP_POP_UP_OWNER_NOT_AUTH(-495, "车主钱包不存在"), APP_POP_UP_OWNER_NOT_AUTH(-495, "车主钱包不存在"),
/**车主未实名 **/
APP_TRUCK_HAVE_GOING_CHILD(-494, "请您先完成马上来的运单"),
WALLET_CODE_IS_NULL(1704, "用户钱包不存在"), WALLET_CODE_IS_NULL(1704, "用户钱包不存在"),
......
...@@ -33,4 +33,9 @@ public interface OrderChildFeign { ...@@ -33,4 +33,9 @@ public interface OrderChildFeign {
Result<Object> cancelOrderChild(@RequestBody @Validated CancelOrderGoodsParam param); Result<Object> cancelOrderChild(@RequestBody @Validated CancelOrderGoodsParam param);
@GetMapping(value = {"clx-performance/feign/orderChild/queryTruckProcessingOrderChild"})
Long queryTruckProcessingOrderChild(@RequestParam("truckNo") @NotBlank(message = "车牌号不能为空") String truckNo);
} }
...@@ -133,7 +133,6 @@ public class CarrierOrderChildDetailVO { ...@@ -133,7 +133,6 @@ public class CarrierOrderChildDetailVO {
@Schema(description = "目的地详细地址") @Schema(description = "目的地详细地址")
private String receiveDetailAddress; private String receiveDetailAddress;
@Schema(description = "贸易商名称") @Schema(description = "贸易商名称")
private String cooperativeCompaniesName; private String cooperativeCompaniesName;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论