提交 b7467b4a authored 作者: 杨启发's avatar 杨启发

Merge remote-tracking branch 'origin/test' into test

...@@ -99,7 +99,9 @@ import com.tencentcloudapi.ocr.v20181119.models.ItemInfo; ...@@ -99,7 +99,9 @@ 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.AllArgsConstructor;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
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;
...@@ -1745,9 +1747,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1745,9 +1747,9 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setSendSamplingPic(orderInfoFeign.getSendSamplingPic()); result.setSendSamplingPic(orderInfoFeign.getSendSamplingPic());
result.setSendQualityPosition(orderInfoFeign.getSendQualityPosition()); result.setSendQualityPosition(orderInfoFeign.getSendQualityPosition());
result.setSendSamplingVideo(orderInfoFeign.getSendSamplingVideo()); result.setSendSamplingVideo(orderInfoFeign.getSendSamplingVideo());
Object[] superviseInfo = getSuperviseInfo(orderChild.getOrderNo(), orderChild.getChildNo()); SuperviseInfo superviseInfo = getSuperviseInfo(orderChild.getOrderNo(), orderChild.getChildNo());
result.setSuperviseContacts(superviseInfo != null ? (String) superviseInfo[0] : null); result.setSuperviseContacts(superviseInfo != null ? superviseInfo.getSuperviseContacts() : null);
result.setSuperviseMobile(superviseInfo != null ? (String) superviseInfo[1] : null); result.setSuperviseMobile(superviseInfo != null ? superviseInfo.getSuperviseMobile() : null);
//查询结算信息 //查询结算信息
Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo); Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo);
...@@ -1777,6 +1779,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1777,6 +1779,15 @@ public class OrderChildServiceImpl implements OrderChildService {
return result; return result;
} }
@Data
@AllArgsConstructor
@NoArgsConstructor
static class SuperviseInfo {
private String superviseContacts;
private String superviseMobile;
private String taskAddress;
}
/** /**
* todo 要改成两个 * todo 要改成两个
* 获取监装 * 获取监装
...@@ -1784,7 +1795,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1784,7 +1795,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* @param childNo * @param childNo
* @return * @return
*/ */
private Object[] getSuperviseInfo(String orderNo, String childNo) { private SuperviseInfo getSuperviseInfo(String orderNo, String childNo) {
NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO(); NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO();
App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息 App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息
//组装配置信息 //组装配置信息
...@@ -1801,24 +1812,52 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1801,24 +1812,52 @@ public class OrderChildServiceImpl implements OrderChildService {
return null; return null;
} }
SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息 SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息
if (Objects.nonNull(supervisionLoadInfo)) {//有监装信息 if (Objects.isNull(supervisionLoadInfo)) {//有监装信息
//通过运单号查询监装监卸子任务状态 return null;
SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction(); }
truckAction.setChildNo(childNo); //通过运单号查询监装监卸子任务状态
truckAction.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode()); return new SuperviseInfo(supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress());
Result<SupervisionLoadTruckInfoDto> supervisionLoadTruckInfoDto = OpenClient.doAction(config, truckAction); }
if (!supervisionLoadTruckInfoDto.succeed()) {//接口调用失败
return null;
}
SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData();
if (Objects.nonNull(supervisionLoadTruckInfo)) {
if (supervisionLoadTruckInfo.getLoadStatus()) {
return new Object[]{supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress()};
}
}
/**
* 获取监装
* @param orderNo
* @param childNo
* @return
*/
private SuperviseInfo getSuperviseInfoWithSubStatus(String orderNo, String childNo) {
NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO();
App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息
//组装配置信息
RequestConfig config = new RequestConfig()
.setAppId(app.getAppNo())
.setAppKey(app.getAppKey())
.setGatewayUrl(app.getCallback());
//通过订单号查询监装监卸信息
SupplyChainSupervisionLoadAction action = new SupplyChainSupervisionLoadAction();
action.setOrderNo(orderNo);
action.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode());
Result<SupervisionLoadInfoDto> supervisionLoadInfoDto = OpenClient.doAction(config, action);
if (!supervisionLoadInfoDto.succeed()) {//接口调用失败
return null;
} }
return null; SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息
if (Objects.isNull(supervisionLoadInfo)) {//有监装信息
return null;
}
//通过运单号查询监装监卸子任务状态
SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction();
truckAction.setChildNo(childNo);
truckAction.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode());
Result<SupervisionLoadTruckInfoDto> supervisionLoadTruckInfoDto = OpenClient.doAction(config, truckAction);
if (!supervisionLoadTruckInfoDto.succeed()) {//接口调用失败
return null;
}
SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData();
if (Objects.isNull(supervisionLoadTruckInfo) || !supervisionLoadTruckInfo.getLoadStatus()) {
return null;
}
return new SuperviseInfo(supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress());
} }
//查看运单车辆是否开启了中交兴路 //查看运单车辆是否开启了中交兴路
...@@ -3248,9 +3287,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3248,9 +3287,9 @@ public class OrderChildServiceImpl implements OrderChildService {
truckLatitudeY = truckTraceDTO.getLocation()[1]; truckLatitudeY = truckTraceDTO.getLocation()[1];
} }
if (truckLongitudeX == null || truckLatitudeY == null) { if (truckLongitudeX == null || truckLatitudeY == null) {
log.info("运单号:{},卡车:{},卡车经纬度:{}", childNo, truckNo, truckTraceDTO); BigDecimal[] location = truckTraceService.getTruckCurrentPosition(truckNo);
BigDecimal[] location = truckTraceService.getCurrentPosition(truckNo, driverUserNo); log.info("运单号:{},卡车:{},卡车经纬度:{}", childNo, truckNo, location);
if (location != null && location.length > 2) { if (location != null && location.length >= 2) {
truckLongitudeX = location[0]; truckLongitudeX = location[0];
truckLatitudeY = location[1]; truckLatitudeY = location[1];
} }
...@@ -3262,54 +3301,55 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3262,54 +3301,55 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal siteLatitudeY = orderGoods.getSendLatitude(); BigDecimal siteLatitudeY = orderGoods.getSendLatitude();
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{}", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY); log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{}", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY);
//调高德获取距离 //调高德获取距离
if (Objects.nonNull(truckLongitudeX) && Objects.nonNull(truckLatitudeY)) { if (Objects.isNull(truckLongitudeX) || Objects.isNull(truckLatitudeY)) {
Integer distance = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX, continue;
siteLatitudeY); }
if (distance == null) { Integer distance = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX,
log.info("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo); siteLatitudeY);
continue; if (distance == null) {
} log.info("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo);
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{}", orderGoodsNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance); continue;
// 超出货源地+通知触发距离 }
if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) { log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{}", orderGoodsNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance);
if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode()) // 超出货源地+通知触发距离
) { if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) {
// todo :jiangwujie 增加短信次数限制 if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode())
//超出货源地x公里范围了,且通知状态为未通知 ) {
// 到达货源地 // todo :jiangwujie 增加短信次数限制
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) { //超出货源地x公里范围了,且通知状态为未通知
log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信", truckNo, childNo); // 到达货源地
sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo()); if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
} log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信", truckNo, childNo);
// 已装货 sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo());
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) { }
Object[] superviseInfo = getSuperviseInfo(child.getOrderNo(), child.getChildNo()); // 已装货
log.info("运单号:{},卡车:{},监装信息{}", childNo, truckNo, superviseInfo); if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
if (superviseInfo != null) { SuperviseInfo superviseInfo = getSuperviseInfoWithSubStatus(child.getOrderNo(), child.getChildNo());
log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,发送短信", truckNo, childNo); log.info("运单号:{},卡车:{},监装信息{}", childNo, truckNo, superviseInfo);
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), (String) superviseInfo[2]); if (superviseInfo != null) {
} log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,发送短信", truckNo, childNo);
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), superviseInfo.getTaskAddress());
} }
// 修改 通知状态 为已通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
orderChildDao.updateEntityByKey(child);
} }
} else if (distance <= 1000) { // 修改 通知状态 为已通知
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{} 距离小于1km", orderGoodsNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance); child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
// 这里的1km的距离是产品需求写死的,不使用通知配置范围 child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
// 未超出货源地+通知触发距离 orderChildDao.updateEntityByKey(child);
// 驶入货源地+通知触发距离范围内了 }
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode()) } else if (distance <= 1000) {
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{} 距离小于1km", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance);
// 这里的1km的距离是产品需求写死的,不使用通知配置范围
// 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())
|| Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.INIT.getCode()) || Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.INIT.getCode())
) { ) {
//驶入货源地x公里范围了,且通知状态为已通知 //驶入货源地x公里范围了,且通知状态为已通知
// 修改 通知状态 为未通知 // 修改 通知状态 为未通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode()); child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
// 状态改为驶入货源地 // 状态改为驶入货源地
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode()); child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
orderChildDao.updateEntityByKey(child); orderChildDao.updateEntityByKey(child);
}
} }
} }
} }
...@@ -3373,24 +3413,36 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3373,24 +3413,36 @@ public class OrderChildServiceImpl implements OrderChildService {
log.info("发送发送监装提示短信:【当前车牌号{},运单{}需要进行现场监装,请您前往{}进行配合,如需帮助请联系客服。】,结果:{}", truckNo, childNo, supervisionAddress, result); log.info("发送发送监装提示短信:【当前车牌号{},运单{}需要进行现场监装,请您前往{}进行配合,如需帮助请联系客服。】,结果:{}", truckNo, childNo, supervisionAddress, result);
} }
private BigDecimal[] getTruckLocation(String truckNo ,BigDecimal longitude, BigDecimal latitude) { private BigDecimal[] getTruckLocation(String truckNo, BigDecimal longitude, BigDecimal latitude) {
TruckLocationDTO truckLocationDTO = null; TruckLocationDTO truckLocationDTO = null;
try { try {
truckLocationDTO = zjxlGpsService.getTruckLastLocation(truckNo); truckLocationDTO = zjxlGpsService.getTruckLastLocation(truckNo);
if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0];
latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO));
return new BigDecimal[]{longitude, latitude};
}
} catch (Exception e) { } catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage()); log.info("中交兴路获取失败:{}", e.getMessage());
} }
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息 //20240815 海泉说中交兴路也可能往缓存中放,也可能往es中放,最新的应该都是使用es,所以缓存中如果取不到,就从es中取一下看看
if (truckLocationDTO != null) { BigDecimal[] truckLocation = truckTraceService.getCurrentTruckPosition(truckNo);
BigDecimal[] location = truckLocationDTO.getLocation(); if (truckLocation != null && truckLocation.length >= 2
longitude = location[0]; && truckLocation[0] != null && truckLocation[1] != null
latitude = location[1]; ) {
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO)); longitude = truckLocation[0];
} else { latitude = truckLocation[1];
log.info("中交兴路获取失败,通过高德获取,truckNo:{}", truckNo); log.info("中交兴路es获取司机车牌:{},相关位置信息:{}", truckNo, truckLocation);
return new BigDecimal[]{longitude, latitude};
} }
return new BigDecimal[]{longitude, latitude};
BigDecimal[] result = new BigDecimal[]{longitude, latitude};
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
log.info("中交兴路获取失败,使用app上传位置,truckNo:{},相关位置信息:{}", truckNo, result);
return result;
} }
@Override @Override
......
...@@ -303,6 +303,41 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -303,6 +303,41 @@ public class TruckTraceServiceImpl implements TruckTraceService {
return null; return null;
} }
/**
* 获取卡车当前位置 5分钟内的位置
* @param truckNo 卡车车牌号
* @return 位置
*/
@Override
public BigDecimal[] getTruckCurrentPosition(String truckNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME));
return getTruckCurrentPosition(truckNo, beginTime);
}
/**
* 获取卡车当前位置
* @param truckNo 卡车车牌号
* @param beginTime 开始时间
* @return 位置
*/
@Override
public BigDecimal[] getTruckCurrentPosition(String truckNo, String beginTime) {
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
return list.get(0).getLocation();
}
return null;
}
@Override @Override
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) { public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) {
return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now()); return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now());
......
...@@ -23,6 +23,10 @@ public interface TruckTraceService { ...@@ -23,6 +23,10 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime); BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime);
BigDecimal[] getTruckCurrentPosition(String truckNo);
BigDecimal[] getTruckCurrentPosition(String truckNo, String beginTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime); int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime); int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论