提交 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,7 +1812,39 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1801,7 +1812,39 @@ 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;
}
//通过运单号查询监装监卸子任务状态
return new SuperviseInfo(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;
}
SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息
if (Objects.isNull(supervisionLoadInfo)) {//有监装信息
return null;
}
//通过运单号查询监装监卸子任务状态 //通过运单号查询监装监卸子任务状态
SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction(); SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction();
truckAction.setChildNo(childNo); truckAction.setChildNo(childNo);
...@@ -1811,15 +1854,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1811,15 +1854,11 @@ public class OrderChildServiceImpl implements OrderChildService {
return null; return null;
} }
SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData(); SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData();
if (Objects.nonNull(supervisionLoadTruckInfo)) { if (Objects.isNull(supervisionLoadTruckInfo) || !supervisionLoadTruckInfo.getLoadStatus()) {
if (supervisionLoadTruckInfo.getLoadStatus()) {
return new Object[]{supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress()};
}
}
}
return null; return null;
} }
return new SuperviseInfo(supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress());
}
//查看运单车辆是否开启了中交兴路 //查看运单车辆是否开启了中交兴路
public String isOpenZJXL(Integer orderChildStatus,String truckNo){ public String isOpenZJXL(Integer orderChildStatus,String truckNo){
...@@ -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,7 +3301,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3262,7 +3301,9 @@ 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)) {
continue;
}
Integer distance = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX, Integer distance = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX,
siteLatitudeY); siteLatitudeY);
if (distance == null) { if (distance == null) {
...@@ -3283,11 +3324,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3283,11 +3324,11 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
// 已装货 // 已装货
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) { if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
Object[] superviseInfo = getSuperviseInfo(child.getOrderNo(), child.getChildNo()); SuperviseInfo superviseInfo = getSuperviseInfoWithSubStatus(child.getOrderNo(), child.getChildNo());
log.info("运单号:{},卡车:{},监装信息{}", childNo, truckNo, superviseInfo); log.info("运单号:{},卡车:{},监装信息{}", childNo, truckNo, superviseInfo);
if (superviseInfo != null) { if (superviseInfo != null) {
log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,发送短信", truckNo, childNo); log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,发送短信", truckNo, childNo);
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), (String) superviseInfo[2]); sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), superviseInfo.getTaskAddress());
} }
} }
// 修改 通知状态 为已通知 // 修改 通知状态 为已通知
...@@ -3296,7 +3337,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3296,7 +3337,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateEntityByKey(child); orderChildDao.updateEntityByKey(child);
} }
} else if (distance <= 1000) { } else if (distance <= 1000) {
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{} 距离小于1km", orderGoodsNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance); log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{} 距离小于1km", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance);
// 这里的1km的距离是产品需求写死的,不使用通知配置范围 // 这里的1km的距离是产品需求写死的,不使用通知配置范围
// 未超出货源地+通知触发距离 // 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了 // 驶入货源地+通知触发距离范围内了
...@@ -3313,7 +3354,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3313,7 +3354,6 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
} }
} }
}
/** /**
* 发送上传装货信息短信 * 发送上传装货信息短信
...@@ -3373,26 +3413,38 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3373,26 +3413,38 @@ 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);
} catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage());
}
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
if (truckLocationDTO != null) { if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation(); BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0]; longitude = location[0];
latitude = location[1]; latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO)); log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO));
} else { return new BigDecimal[]{longitude, latitude};
log.info("中交兴路获取失败,通过高德获取,truckNo:{}", truckNo); }
} catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage());
} }
//20240815 海泉说中交兴路也可能往缓存中放,也可能往es中放,最新的应该都是使用es,所以缓存中如果取不到,就从es中取一下看看
BigDecimal[] truckLocation = truckTraceService.getCurrentTruckPosition(truckNo);
if (truckLocation != null && truckLocation.length >= 2
&& truckLocation[0] != null && truckLocation[1] != null
) {
longitude = truckLocation[0];
latitude = truckLocation[1];
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
public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) { public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) {
//校验,同一运单同一图片类型只能识别一次 //校验,同一运单同一图片类型只能识别一次
......
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论