提交 b1689ca2 authored 作者: jiangwujie's avatar jiangwujie

feature(货单、认证): 合并 test

###
GET http://localhost:8081/clx-performance/app/goodsOrder/getOrderGoodsInfo?orderGoodsNo=GK2024073100004
###
GET http://localhost:8081/clx-performance/app/driver/orderChild/getOrderChildInfo?childNo=CYD2024073113994137
productchannel:android_app
imei:22965e13c2e1233cdbc682a56484e2b5e
product-code:carrier-driver-app
content-type:application/json;charset=UTF-8
versioncode:9
platform:1
token:da38733eb052496fb7b4991bf643c626
producttype:carrier-driver-app
versionname:1.0.8
\ No newline at end of file
...@@ -101,6 +101,20 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -101,6 +101,20 @@ public enum PerformanceResultEnum implements ResultEnum {
APP_POP_UP_DRIVER_RESIDUE_ERROR(-500, "app弹窗提示"), APP_POP_UP_DRIVER_RESIDUE_ERROR(-500, "app弹窗提示"),
/**车主提示语 **/ /**车主提示语 **/
APP_POP_UP_OWNER_RESIDUE_ERROR(-499, "app弹窗提示"), APP_POP_UP_OWNER_RESIDUE_ERROR(-499, "app弹窗提示"),
/**司机未绑卡提示语 **/
APP_POP_UP_DRIVER_NO_BANKCARD_ERROR(-498, "司机未绑卡"),
/**车主未绑卡提示语 **/
APP_POP_UP_OWNER_NO_BANKCARD_ERROR(-497, "车主未绑卡"),
/**司机钱包不存在提示语 **/
APP_POP_UP_DRIVER_WALLET_NULL_NOT_EXIST_ERROR(-498, "司机钱包不存在"),
/**车主钱包不存在提示语 **/
APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR(-497, "车主钱包不存在"),
/**司机未实名 **/
APP_POP_UP_DRIVER_NOT_AUTH(-496, "司机钱包不存在"),
/**车主未实名 **/
APP_POP_UP_OWNER_NOT_AUTH(-495, "车主钱包不存在"),
WALLET_CODE_IS_NULL(1704, "用户钱包不存在"), WALLET_CODE_IS_NULL(1704, "用户钱包不存在"),
ORDER_GOODS_SAVE_FAIL(1801, "保存货单失败,请稍后再试"), ORDER_GOODS_SAVE_FAIL(1801, "保存货单失败,请稍后再试"),
......
...@@ -230,4 +230,21 @@ public class OrderChildVO { ...@@ -230,4 +230,21 @@ public class OrderChildVO {
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示") @ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0; private Integer goodsOrderDetailShow = 0;
/* 20240730 增加货源地信息 */
@ApiModelProperty(value = "货源地现场联系人")
private String sendContact;
@ApiModelProperty(value = "货源地联系人手机号")
private String sendContactPhone;
@ApiModelProperty(value = "发货-是否需要系统排队 0 否 1 是")
private Integer sendWaitSystem;
@ApiModelProperty(value = "发货-排队系统名称")
private String sendWaitSystemName;
@ApiModelProperty(value = "发货-排队系统形式 1:小程序 2:app")
private Integer sendWaitMode;
} }
...@@ -169,4 +169,21 @@ public class OrderGoodsVO { ...@@ -169,4 +169,21 @@ public class OrderGoodsVO {
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示") @ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0; private Integer goodsOrderDetailShow = 0;
/* 20240730 增加货源地信息 */
@ApiModelProperty(value = "货源地现场联系人")
private String sendContact;
@ApiModelProperty(value = "货源地联系人手机号")
private String sendContactPhone;
@ApiModelProperty(value = "发货-是否需要系统排队 0 否 1 是")
private Integer sendWaitSystem;
@ApiModelProperty(value = "发货-排队系统名称")
private String sendWaitSystemName;
@ApiModelProperty(value = "发货-排队系统形式 1:小程序 2:app")
private Integer sendWaitMode;
} }
\ No newline at end of file
...@@ -61,12 +61,13 @@ import com.clx.performance.utils.zjxl.ZjxlGpsService; ...@@ -61,12 +61,13 @@ import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.performance.vo.app.*; import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO; import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePlatformServiceFeeConfigVO;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.enums.idcard.IdCardEnum;
import com.clx.user.feign.DocumentFeign; import com.clx.user.feign.DocumentFeign;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.clx.user.vo.pc.auth.AuthVo;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.base.PageParam; import com.msl.common.base.PageParam;
import com.msl.common.enums.ResultCodeEnum; import com.msl.common.enums.ResultCodeEnum;
...@@ -84,13 +85,15 @@ import com.tencentcloudapi.ocr.v20181119.models.GroupInfo; ...@@ -84,13 +85,15 @@ import com.tencentcloudapi.ocr.v20181119.models.GroupInfo;
import com.tencentcloudapi.ocr.v20181119.models.ItemInfo; import com.tencentcloudapi.ocr.v20181119.models.ItemInfo;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Request; import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Request;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response; import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
...@@ -240,6 +243,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -240,6 +243,8 @@ public class OrderChildServiceImpl implements OrderChildService {
private Environment environment; private Environment environment;
@Autowired @Autowired
private DocumentFeign documentFeign; private DocumentFeign documentFeign;
@Autowired
private UserClxFeign userClxFeign;
@PostConstruct @PostConstruct
public void init(){ public void init(){
...@@ -327,6 +332,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -327,6 +332,13 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal truckLoad = driverTruckInfo.getLoad(); BigDecimal truckLoad = driverTruckInfo.getLoad();
String truckNo = driverTruckInfo.getTruckNo(); String truckNo = driverTruckInfo.getTruckNo();
// 司机实名认证校验
// 这里之所以在check后再次增加较验,是为了避免老版本的应用无法识别新的错误码导致无法正常校验的问题
PerformanceResultEnum checkRealName = checkRealName(param.getDriverUserNo(), driverTruckInfo.getWalletCode(), driverTruckInfo.getTruckOwnWalletCode());
if (Objects.nonNull(checkRealName)) {
throw new ServiceSystemException(checkRealName);
}
// 司机接单限制 // 司机接单限制
driverTakeOrderLimit(driverTruckInfo.getUserNo()); driverTakeOrderLimit(driverTruckInfo.getUserNo());
...@@ -1717,6 +1729,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1717,6 +1729,13 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setLoadBeginTime(orderInfoFeign.getLoadBeginTime()); result.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
result.setLoadEndTime(orderInfoFeign.getLoadEndTime()); result.setLoadEndTime(orderInfoFeign.getLoadEndTime());
//货源地信息
result.setSendContact(orderInfoFeign.getSendContact());
result.setSendContactPhone(orderInfoFeign.getSendContactPhone());
result.setSendWaitSystem(orderInfoFeign.getSendWaitSystem());
result.setSendWaitSystemName(orderInfoFeign.getSendWaitSystemName());
result.setSendWaitMode(orderInfoFeign.getSendWaitMode());
//查询结算信息 //查询结算信息
Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo); Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo);
if(optional.isPresent()){ if(optional.isPresent()){
...@@ -1820,6 +1839,24 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1820,6 +1839,24 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
private int check(OrderChildCheckParam param) { private int check(OrderChildCheckParam param) {
// 查询司机车辆信息
DriverTruckInfoFeignVo driverTruckInfo = driverService.getUserDetailInfo(param.getDriverUserNo(),
param.getTruckId()).orElseThrow(ResultCodeEnum.FAIL);
Integer driverWalletCode = driverTruckInfo.getWalletCode();
Integer truckWalletCode = driverTruckInfo.getTruckOwnWalletCode();
//验证是否实名认证
PerformanceResultEnum checkRealName = checkRealName(param.getDriverUserNo(), driverWalletCode, truckWalletCode);
if (Objects.nonNull(checkRealName)) {
return checkRealName.getCode();
}
// 验证是否绑卡
PerformanceResultEnum checkBankCard = checkBankCard(param, driverWalletCode, truckWalletCode);
if (Objects.nonNull(checkBankCard)) {
return checkBankCard.getCode();
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).get();
BigDecimal sendLatitude = orderGoods.getSendLatitude(); BigDecimal sendLatitude = orderGoods.getSendLatitude();
BigDecimal sendLongitude = orderGoods.getSendLongitude(); BigDecimal sendLongitude = orderGoods.getSendLongitude();
...@@ -1863,13 +1900,93 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1863,13 +1900,93 @@ public class OrderChildServiceImpl implements OrderChildService {
if (localDateTime.isAfter(beginLocalDateTime) && localDateTime.isBefore(endLocalDateTime)) { if (localDateTime.isAfter(beginLocalDateTime) && localDateTime.isBefore(endLocalDateTime)) {
log.info("不用弹"); log.info("不用弹");
return 0; return CheckResult.OK.code;
} else { } else {
log.info("需要弹"); log.info("需要弹");
return 1; return CheckResult.FAIL.code;
} }
} }
return 0; return CheckResult.OK.code;
}
/**
* 校验实名认证
* @param param
* @param driverWallCode
* @param truckWalletCode
* @return
*/
private PerformanceResultEnum checkBankCard(OrderChildCheckParam param, Integer driverWallCode, Integer truckWalletCode) {
//接单校验 必须两个都有钱包
if (Objects.isNull(driverWallCode)) {
log.info("{}-{}司机没有钱包", param.getDriverUserNo(), param.getTruckId());
return PerformanceResultEnum.APP_POP_UP_DRIVER_WALLET_NULL_NOT_EXIST_ERROR;
}
if (Objects.isNull(truckWalletCode)) {
log.info("{}-{}车主没有钱包", param.getDriverUserNo(), param.getTruckId());
return PerformanceResultEnum.APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR;
}
//判断是司机还是车主
//司机和车主钱包相同,说明是车主
boolean truckOwnerFlag = Objects.equals(driverWallCode, truckWalletCode);
Integer checkWalletCode = truckOwnerFlag ? driverWallCode : truckWalletCode;
Result<WalletResidueCardDTO> result = feignPaymentService.getWallet(checkWalletCode);
if (result != null && Objects.equals(result.getCode(), 0) && result.getData() != null) {
WalletResidueCardDTO data = result.getData();
//有效银行卡数量 不能为空
if (data.getCardCount() <= 0) {
PerformanceResultEnum returnResult = truckOwnerFlag ? PerformanceResultEnum.APP_POP_UP_DRIVER_NO_BANKCARD_ERROR
: PerformanceResultEnum.APP_POP_UP_OWNER_NO_BANKCARD_ERROR;
log.info("{}", returnResult.getMsg());
return returnResult;
}
} else {
log.info("获取钱包信息失败:{}", checkWalletCode);
//用户钱包不存在
return truckOwnerFlag ? PerformanceResultEnum.APP_POP_UP_DRIVER_WALLET_NULL_NOT_EXIST_ERROR
: PerformanceResultEnum.APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR;
}
return null;
}
@Getter
@AllArgsConstructor
public enum CheckResult {
OK(0, "不用弹窗"),
FAIL(1, "需要弹"),
DRIVER_NOT_REAL_NAME(APP_POP_UP_DRIVER_NOT_AUTH.getCode(), "未实名认证"),
OWENR_NOT_REAL_NAME(APP_POP_UP_OWNER_NOT_AUTH.getCode(), "未实名认证"),
DRIVER_WALLET_NOT_EXIST(APP_POP_UP_DRIVER_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(), "司机未绑卡"),
OWNER_NO_BANKCARD(APP_POP_UP_OWNER_NO_BANKCARD_ERROR.getCode(), "车主未绑卡");
private final int code;
private final String msg;
}
/**
* 校验实名认证
*
* @param
* @return
*/
private PerformanceResultEnum checkRealName(Long driverUserNo, Integer driverWalletCode, Integer truckOwnWalletCode) {
//判断当前账号是否车主
boolean truckOwnerFlag = Objects.nonNull(driverWalletCode)
&& Objects.nonNull(truckOwnWalletCode)
&& Objects.equals(driverWalletCode, truckOwnWalletCode);
Result<AuthVo> authResult = userClxFeign.getAuthInfo(driverUserNo);
if (!authResult.succeed()) {
log.info("获取司机{}实名认证信息失败", driverUserNo);
return truckOwnerFlag ? PerformanceResultEnum.APP_POP_UP_DRIVER_NOT_AUTH : PerformanceResultEnum.APP_POP_UP_OWNER_NOT_AUTH;
} else {
AuthVo authVo = authResult.getData();
if (!Objects.equals(authVo.getAuthStatus(), IdCardEnum.AuthStatus.ALREADY_REAL_NAME.getCode())) {
log.info("司机{}实名状态非已实名:{}", driverUserNo, authVo.getAuthStatus());
return truckOwnerFlag ? PerformanceResultEnum.APP_POP_UP_DRIVER_NOT_AUTH : PerformanceResultEnum.APP_POP_UP_OWNER_NOT_AUTH;
}
}
return null;
} }
//计算亏吨吨数 //计算亏吨吨数
...@@ -2107,8 +2224,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2107,8 +2224,11 @@ public class OrderChildServiceImpl implements OrderChildService {
*/ */
private void driverTakeOrderPaymentLimit(Integer driverWallCode, Integer truckWalletCode,BigDecimal deposit) { private void driverTakeOrderPaymentLimit(Integer driverWallCode, Integer truckWalletCode,BigDecimal deposit) {
//判断是司机还是车主 接单校验 必须两个都有钱包 //判断是司机还是车主 接单校验 必须两个都有钱包
if (Objects.isNull(driverWallCode) || Objects.isNull(truckWalletCode)) { if (Objects.isNull(driverWallCode)) {
throw new ServiceSystemException(PerformanceResultEnum.WALLET_CODE_IS_NULL); throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_DRIVER_WALLET_NULL_NOT_EXIST_ERROR);
}
if (Objects.isNull(truckWalletCode)) {
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR);
} }
boolean truckOwnerFlag = Objects.equals(driverWallCode, truckWalletCode); boolean truckOwnerFlag = Objects.equals(driverWallCode, truckWalletCode);
...@@ -2140,9 +2260,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2140,9 +2260,13 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
//有效银行卡数量 不能为空 //有效银行卡数量 不能为空
if (Objects.isNull(data.getCardCount()) || data.getCardCount() <= 0) { if (data.getCardCount() <= 0) {
String remark = truckOwnerFlag ? "还没有绑定银行卡,请先绑定银行卡" : "车主还没有绑定银行卡,请先绑定银行卡"; String remark = truckOwnerFlag ? "还没有绑定银行卡,请先绑定银行卡" : "车主还没有绑定银行卡,请先绑定银行卡";
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_ERROR, remark); if (truckOwnerFlag) {
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_DRIVER_NO_BANKCARD_ERROR, remark);
} else {
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_OWNER_NO_BANKCARD_ERROR, remark);
}
} }
//必须设置交易密码 是否设置交易密码0没有1有 //必须设置交易密码 是否设置交易密码0没有1有
......
...@@ -163,6 +163,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -163,6 +163,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime()); orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime()); orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight()); orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
//货源地信息
orderGoodsVO.setSendContact(orderInfoFeign.getSendContact());
orderGoodsVO.setSendContactPhone(orderInfoFeign.getSendContactPhone());
orderGoodsVO.setSendWaitSystem(orderInfoFeign.getSendWaitSystem());
orderGoodsVO.setSendWaitSystemName(orderInfoFeign.getSendWaitSystemName());
orderGoodsVO.setSendWaitMode(orderInfoFeign.getSendWaitMode());
//获取订单配置的违约金方案 //获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论