提交 8f770e79 authored 作者: liuhaiquan's avatar liuhaiquan

提交全量运单监控部分代码

上级 d7a39aa6
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class PageMonitorOrderChildQCParam extends PageParam {
@ApiModelProperty(value = "发货地址")
private Integer sendAddressId;
@ApiModelProperty(value = "车牌号")
private String truckNo;
@NotNull(message = "运单状态不能为空")
@ApiModelProperty(value = "运单状态 10:已接单 20:支付 30:前往货源地 40:到达货源地 50:装货成功 60:前往目的地 70:到达目的地 80:收货待确认 90:待结算 100:完成 110:司机取消 111:承运取消 112:货主取消 ")
private List<Integer> status;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OutputMonitorOrderChildVO {
@ApiModelProperty(value = "发货地址")
private String sendAddress;
@ApiModelProperty(value = "发货地址Id")
private Integer sendAddressId;
@ApiModelProperty(value = "状态 运单状态 10:已接单 20:支付 30:前往货源地 40:到达货源地 50:装货成功 60:前往目的地 70:到达目的地 80:收货待确认 90:待结算 100:完成 110:司机取消 111:承运取消 112:货主取消 ")
private Integer status;
@ApiModelProperty(value = "预计到货源地时间")
private String expectArriveTime;
@ApiModelProperty(value = "预计到货源地时间-实时")
private String expectArriveTimeRealTime;
@ApiModelProperty(value = "预计到货源地趋势 0 前进 1 后退")
private Integer arriveTrend;
@ApiModelProperty(value = "预计到收货地时间")
private String expectReceiveTime;
@ApiModelProperty(value = "预计到收货地时间-实时")
private String expectReceiveTimeRealTime;
@ApiModelProperty(value = "预计到收货地趋势 0 前进 1 后退")
private Integer receiveTrend;
@ApiModelProperty(value = "预计运输时间")
private String expectTransportTime;
@ApiModelProperty(value = "装车预警 0 不预警 1 预警")
private Integer loadWarning;
@ApiModelProperty(value = "货源地预警 0 不预警 1 预警")
private Integer arriveWarning;
@ApiModelProperty(value = "收货地预警 0 不预警 1 预警")
private Integer receiveWarning;
@ApiModelProperty(value = "车牌号")
private String truckNo;
@ApiModelProperty(value = "司机姓名")
private String driverName;
@ApiModelProperty(value = "司机手机号")
private String driverMobile;
@ApiModelProperty(value = "装车吨数")
private BigDecimal loadNet;
@ApiModelProperty(value = "接单时间")
private String payTime;
@ApiModelProperty(value = "装车时间")
private String loadTime;
@ApiModelProperty(value = "运单号")
private String childNo;
}
......@@ -8,6 +8,9 @@ public class RedisConstants {
public static final String ORDER_GOODS_ID_GENERATE ="clx-performance:orderGoodsId:generate";
public static final String ZJXL_TRUCK_TRACE_LIST = "clx-performance:zjxl_truck_trace_list:";
public static final String ORDER_CHILD_EXPECT_TIME_DATA = "clx-performance:order_child_expect_time_data:";
public static final String ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP = "clx-performance:order_child_expect_time_data_key_map:";
public static final String ZJXL_LAST_PULL_TRUCK = "clx-performance:zjxl_last_time_pull_truck:";
......
......@@ -2,14 +2,12 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.service.OrderChildPoundAuditService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.vo.pc.CarrierOrderChildDetailVO;
import com.clx.performance.vo.pc.OrderChildBussInfoVO;
import com.clx.performance.vo.pc.OrderChildStatusVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
......@@ -87,4 +85,13 @@ public class CarrierOrderChildController {
return Result.ok(orderChildService.getOrderChildBussInfo(truckNo));
}
@ApiOperation(value = "全量运单监控预警列表", notes = "<br>By:刘海泉")
@RequestMapping(value = "/getMonitorOrerChildListsByParam", method = RequestMethod.POST)
public Result<PageData<OutputMonitorOrderChildVO>> getMonitorOrerChildListsByParam(@RequestBody PageMonitorOrderChildQCParam param) {
IPage<OutputMonitorOrderChildVO> page = orderChildService.getMonitorOrerChildListsByParam(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
......@@ -47,6 +47,12 @@ public class GoodsOrderMapController {
}
@ApiOperation(value = "获取货单车辆", notes = "<br>By:刘海泉")
@GetMapping("/getPlatformTruckCoordinate")
public Result<List<String>> getOrderChildTruckByOrderNo(String orderNo) {
return Result.ok(goodsOrderMapService.getOrderChildTruckByOrderNo(orderNo));
}
......
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
......@@ -56,4 +58,10 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Integer getOrderChildTotalByUserNo(Long userNo);
List<OrderChild> getOrderChildBussInfo(String truckNo);
Page<OrderChild> pageOrderChild(PageMonitorOrderChildQCParam param);
List<OrderChild> listOrderChild(List<Integer> status);
List<OrderChild> getOrderChildByOrderNo(String orderNo);
}
......@@ -10,16 +10,19 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqinguo
......@@ -198,6 +201,37 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
return baseMapper.selectCount(query).intValue();
}
@Override
public Page<OrderChild> pageOrderChild(PageMonitorOrderChildQCParam param) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
if(StringUtils.isNotBlank(param.getTruckNo())){
query.eq(OrderChild :: getTruckNo,param.getTruckNo());
}
if(Objects.nonNull(param.getSendAddressId())){
query.eq(OrderChild :: getSendAddressId,param.getSendAddressId());
}
query.in(OrderChild :: getStatus,param.getStatus());
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public List<OrderChild> getOrderChildByOrderNo(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
query.in(OrderChild :: getOrderNo,orderNo);
return baseMapper.selectList(query);
}
@Override
public List<OrderChild> listOrderChild(List<Integer> status) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
query.in(OrderChild :: getStatus,status);
return baseMapper.selectList(query);
}
@Override
public List<OrderChild> getOrderChildBussInfo(String truckNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
......
package com.clx.performance.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderChildExpectDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String childNo;//子订单编号
private LocalDateTime expectArriveTime;//预计到达货源地时间
private Integer expectArriveTimeSecond;//预计到达货源地时间
private LocalDateTime expectReceiveTime;//预计到达目的地时间
private Integer expectReceiveTimeSecond;//预计到达目的地时间
private Integer expectTransportTimeSecond;//预计运输时间
}
package com.clx.performance.dto.gd;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023/2/28 12:00
* @Version: 1.0
*/
@Data
public class GdPosDTO {
@ApiModelProperty(value = "经度", example = "116.0000000000")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "39.0000000000")
private BigDecimal latitude;
@ApiModelProperty(value = "耗时(秒)", example = "278")
private Integer duration;
}
package com.clx.performance.dto.gd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
/**
* @Author: aiqingguo
* @Description: 收发货地址线路
* @Date: 2023/2/28 11:02
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
@ApiModel(description = "高德线路规划")
public class GdRouteDTO {
@ApiModelProperty(value = "距离(m)", example = "1")
private Integer distance;
@ApiModelProperty(value = "时间s", example = "1")
private Integer duration;
@ApiModelProperty(value = "线路轨迹")
private List<GdPosDTO> posList;
}
package com.clx.performance.job;
import com.clx.performance.service.OrderChildService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class OrderChildExpectTimeJob {
@Autowired
OrderChildService orderChildService;
/**
* 定时任务计算运单实时位置耗时信息
*/
@XxlJob("orderChildExpect")
public void orderChildExpect() {
try {
log.info("开始实时计算进行中的运单的实时位置计算任务================================================");
orderChildService.orderChildExpect();
log.info("结束实时计算进行中的运单的实时位置计算任务================================================");
} catch (Exception e) {
log.warn("定时任务计算进行中的运单的实时位置失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("定时任务计算进行中的运单的实时位置失败,异常原因=====================", e);
}
}
}
......@@ -77,6 +77,10 @@ public class OrderChild implements HasKey<Integer> {
private LocalDateTime settleTime; //结算时间
private LocalDateTime cancelTime; //取消时间
private LocalDateTime finishTime; //完成时间
private LocalDateTime expectSendTime; //预计到达货源地时间
private LocalDateTime expectReceiveTime; //预计到达目的地时间
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -11,4 +11,6 @@ public interface GoodsOrderMapService {
List<GoodsOrderSendAddressSelect> getSendAddressSelect(GoodsOrderMapParam param);
List<TruckCoordinateVO> getPlatformTruckCoordinate();
List<String> getOrderChildTruckByOrderNo(String orderNo);
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.pc.*;
......@@ -61,4 +62,10 @@ public interface OrderChildService {
Integer getOrderChildTotalByUserNo(Long userNo);
OrderChildBussInfoVO getOrderChildBussInfo(String truckNo);
IPage<OutputMonitorOrderChildVO> getMonitorOrerChildListsByParam(PageMonitorOrderChildQCParam param);
List<String> getOrderChildTruckByOrderNo(String orderNo);
void orderChildExpect();
}
......@@ -7,6 +7,7 @@ import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.service.GoodsOrderMapService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.TruckService;
import com.clx.performance.vo.pc.Freight;
import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect;
......@@ -40,6 +41,9 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService {
@Autowired
TruckService truckService;
@Autowired
OrderChildService orderChildService;
@Autowired(required = false)
UserClxFeign userClxFeign;
......@@ -75,6 +79,11 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService {
return values;
}
@Override
public List<String> getOrderChildTruckByOrderNo(String orderNo) {
return orderChildService.getOrderChildTruckByOrderNo(orderNo);
}
@Override
public List<TruckCoordinateVO> getPlatformTruckCoordinate() {
List<TruckCoordinateVO> result = new ArrayList<>();
......
......@@ -5,8 +5,12 @@ import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.*;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.extranal.user.DriverService;
......@@ -15,12 +19,14 @@ import com.clx.performance.model.*;
import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildPoundLogService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.struct.*;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.utils.spring.ApplicationContextUtils;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.pc.*;
......@@ -40,15 +46,14 @@ import org.apache.commons.collections4.CollectionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
......@@ -59,26 +64,22 @@ import java.util.stream.Collectors;
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
@Slf4j
@Service
@AllArgsConstructor
public class OrderChildServiceImpl implements OrderChildService {
private final AmqpTemplate rabbitTemplate;
private final RedisTemplate redisTemplate;
private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderChildDao orderChildDao;
private final OrderChildImageDao orderChildImageDao;
private final OrderChildPoundAuditDao orderChildPoundAuditDao;
private final OrderChildLogService orderChildLogService;
private final OrderChildPoundLogService orderChildPoundLogService;
private final AddressService addressService;
private final OrderService orderService;
private final GdService gdService;
private final DriverService driverService;
private final OrderChildStruct orderChildStruct;
private final OrderGoodsService orderGoodsService;
......@@ -86,7 +87,6 @@ public class OrderChildServiceImpl implements OrderChildService {
private final OrderChildFreightStruct orderChildFreightStruct;
private final AddressStruct addressStruct;
private final OrderChildLogStruct orderChildLogStruct;
private final UniqueOrderNumService uniqueOrderNumService;
private final OrderFeign orderFeign;
private final RedissonClient redissonClient;
......@@ -98,8 +98,8 @@ public class OrderChildServiceImpl implements OrderChildService {
saveOrderChildOrderUserTruckLock(param);
// 货单锁
return saveOrderChildOrderGoodsLock(param, ()-> ApplicationContextUtils.getBean(OrderChildService.class).doSaveOrderChild(param));
return saveOrderChildOrderGoodsLock(param,
() -> ApplicationContextUtils.getBean(OrderChildService.class).doSaveOrderChild(param));
}
/**
......@@ -108,15 +108,16 @@ public class OrderChildServiceImpl implements OrderChildService {
public void saveOrderChildOrderUserTruckLock(OrderChildSaveParam param) {
Long userNo = param.getDriverUserNo();
Integer truckId = param.getTruckId();
RLock lock = redissonClient.getLock(RedissonConstants.ORDER_CHILD_SAVE_USER_TRUCK_LOCK+ userNo+":"+truckId);
RLock lock = redissonClient.getLock(
RedissonConstants.ORDER_CHILD_SAVE_USER_TRUCK_LOCK + userNo + ":" + truckId);
boolean flag;
try{
flag = lock.tryLock( 1, 3, TimeUnit.SECONDS);
}catch (Exception e){
try {
flag = lock.tryLock(1, 3, TimeUnit.SECONDS);
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);
}
if (!flag){
if (!flag) {
log.warn("接单异常,orderGoodsNo:{}, userNo:{}", param.getOrderGoodsNo(), userNo);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FREQUENCY_ERROR);
}
......@@ -125,25 +126,27 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 货单锁
*/
public SaveOrderChildVO saveOrderChildOrderGoodsLock(OrderChildSaveParam param, Supplier<SaveOrderChildVO> function) {
public SaveOrderChildVO saveOrderChildOrderGoodsLock(OrderChildSaveParam param,
Supplier<SaveOrderChildVO> function) {
String orderGoodsNo = param.getOrderGoodsNo();
RLock lock = redissonClient.getLock(RedissonConstants.ORDER_CHILD_SAVE_ORDER_GOODS_NO_LOCK+orderGoodsNo);
RLock lock = redissonClient.getLock(RedissonConstants.ORDER_CHILD_SAVE_ORDER_GOODS_NO_LOCK + orderGoodsNo);
try{
try {
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);}
if (!flag) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);
}
return function.get();
}catch (ServiceSystemException e){
} catch (ServiceSystemException e) {
throw e;
}catch (Exception e){
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);
}finally {
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
@Override
......@@ -156,23 +159,27 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = childNoGenerate();
// 查询司机车辆信息
DriverTruckInfoFeignVo driverTruckInfo = driverService.getUserDetailInfo(param.getDriverUserNo(), param.getTruckId()).orElseThrow(ResultCodeEnum.FAIL);
DriverTruckInfoFeignVo driverTruckInfo = driverService.getUserDetailInfo(param.getDriverUserNo(),
param.getTruckId()).orElseThrow(ResultCodeEnum.FAIL);
BigDecimal truckLoad = driverTruckInfo.getLoad();
String truckNo = driverTruckInfo.getTruckNo();
LocalDateTime now = LocalDateTime.now();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.ORDER_INVALID);
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
&& !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())){
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID1);
}
// // 车型限制
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow
// (PerformanceResultEnum.DATA_NOT_FIND);
// if (StringUtils.isNotBlank(orderInfo.getTruckModelList())){
// List<JSONObject> truckModelList = JSON.parseArray(orderInfo.getTruckModelList(), JSONObject.class);
// List<String> truckModelNameList = truckModelList.stream().map(item -> item.getString("truckModelName")).collect(Collectors.toList());
// List<String> truckModelNameList = truckModelList.stream().map(item -> item.getString("truckModelName"))
// .collect(Collectors.toList());
// if (!truckModelNameList.contains(driverTruckInfo.getModel())){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_TRUCK_MODEL_ERROR);
// }
......@@ -181,19 +188,29 @@ public class OrderChildServiceImpl implements OrderChildService {
// 定向
OrderGoodsTruckBind bind = null;
List<OrderGoodsTruckBind> orderGoodsTruckBindList = orderGoodsTruckBindDao.getValidByTruckNo(truckNo).orNull();
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
if (CollectionUtils.isEmpty(orderGoodsTruckBindList)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);}
if (Objects.equals(orderGoods.getPendingOrderWay(),
OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
if (CollectionUtils.isEmpty(orderGoodsTruckBindList)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);
}
//筛选出当前选择的定向货单
bind = orderGoodsTruckBindList.stream().filter(s -> orderGoods.getOrderGoodsNo().equals(s.getOrderGoodsNo())).findFirst().orElse(null);
if (Objects.isNull(bind)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);}
bind = orderGoodsTruckBindList.stream().filter(
s -> orderGoods.getOrderGoodsNo().equals(s.getOrderGoodsNo())).findFirst().orElse(null);
if (Objects.isNull(bind)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);
}
} else {
if (CollectionUtils.isNotEmpty(orderGoodsTruckBindList)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1);
}
else {
if (CollectionUtils.isNotEmpty(orderGoodsTruckBindList)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1);}
}
// 库存验证
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);}
// if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
// if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException
// (PerformanceResultEnum.ORDER_WEIGHT_LACK);}
OrderChild orderChild = new OrderChild();
orderChild.setChildNo(childNo);
......@@ -247,8 +264,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusLock(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 新增日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(), OrderChildLogEnum.Type.CREATED.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(),
OrderChildLogEnum.Type.CREATED.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
SaveOrderChildVO result = new SaveOrderChildVO();
result.setChildNo(childNo);
......@@ -260,26 +277,28 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.ORDER_INVALID);
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
&& !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())){
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
}
// 定向派单
if (!Objects.equals(orderGoods.getPendingOrderWay(), 2)){
if (!Objects.equals(orderGoods.getPendingOrderWay(), 2)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
}
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(param.getTruckNo())
.orElseThrow(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR);
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(
param.getTruckNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR);
if (!Objects.equals(orderGoodsTruckBind.getOrderGoodsNo(), orderGoods.getOrderGoodsNo())){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR);}
if (!Objects.equals(orderGoodsTruckBind.getOrderGoodsNo(), orderGoods.getOrderGoodsNo())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR);
}
// 更新定向派单
updateOrderGoodsDirectReject(orderGoodsTruckBind);
}
@Override
......@@ -290,18 +309,19 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())){return;}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())) {
return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
......@@ -309,8 +329,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_SEND.getCode(), OrderChildLogEnum.Type.GO_TO_SEND.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_SEND.getCode(),
OrderChildLogEnum.Type.GO_TO_SEND.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -321,31 +341,35 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){return;}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
// 装货超时
if (orderChild.getLoadDeadline().isBefore(LocalDateTime.now())){
if (orderChild.getLoadDeadline().isBefore(LocalDateTime.now())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
}
// 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(), orderGoods.getSendLatitude().doubleValue(),
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000;
if (distance > orderInfo.getSendDriverArriveRange().doubleValue()){
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(),
orderGoods.getSendLatitude().doubleValue(), param.getLongitude().doubleValue(),
param.getLatitude().doubleValue()) / 1000;
if (distance > orderInfo.getSendDriverArriveRange().doubleValue()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR);
}
......@@ -353,8 +377,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_SEND.getCode(), OrderChildLogEnum.Type.ARRIVE_SEND.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_SEND.getCode(),
OrderChildLogEnum.Type.ARRIVE_SEND.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -365,28 +389,28 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())){return;}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())) {
return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
orderChild.setStatus(OrderChildEnum.Status.GO_TO_RECEIVE.getCode());
orderChildDao.updateStatus(orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_RECEIVE.getCode(), OrderChildLogEnum.Type.GO_TO_RECEIVE.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_RECEIVE.getCode(),
OrderChildLogEnum.Type.GO_TO_RECEIVE.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -397,27 +421,31 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())){return;}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
// 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(), orderGoods.getReceiveLatitude().doubleValue(),
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000;
if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()){
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(),
orderGoods.getReceiveLatitude().doubleValue(), param.getLongitude().doubleValue(),
param.getLatitude().doubleValue()) / 1000;
if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR);
}
......@@ -425,8 +453,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_RECEIVE.getCode(), OrderChildLogEnum.Type.ARRIVE_RECEIVE.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_RECEIVE.getCode(),
OrderChildLogEnum.Type.ARRIVE_RECEIVE.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -437,37 +465,38 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
}
if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
if (orderChild.getLoadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
if (orderChild.getLoadTime() == null &&
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
updateLoadFirst(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(), OrderChildLogEnum.Type.LOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(),
OrderChildLogEnum.Type.LOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else {
updateReload(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(), OrderChildLogEnum.Type.RELOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(),
OrderChildLogEnum.Type.RELOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
}
......@@ -475,10 +504,13 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
// // 装车时间验证
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow
// (PerformanceResultEnum.DATA_NOT_FIND);
// LocalDateTime now = LocalDateTime.now();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadBeginTime()).get();
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadEndTime()).get();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// orderInfo.getLoadBeginTime()).get();
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// orderInfo.getLoadEndTime()).get();
// if (now.isBefore(beginTime) || now.isAfter(endTime)){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIME_ERROR);
// }
......@@ -538,7 +570,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildImageDao.deleteLoad(childNo);
orderChildImageDao.batchSaveEntity(imageList);
}
@Override
......@@ -549,18 +580,17 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
}
......@@ -568,20 +598,23 @@ public class OrderChildServiceImpl implements OrderChildService {
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
// }
if (orderChild.getUnloadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
if (orderChild.getUnloadTime() == null &&
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
updateUnloadFirst(param, orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.UNLOAD.getCode(), OrderChildLogEnum.Type.UNLOAD.getMsg(),
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.UNLOAD.getCode(),
OrderChildLogEnum.Type.UNLOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(), OrderChildPoundAuditEnum.Status.AUDIT.getMsg(),
OrderChildLogEnum.CreateType.DRIVER.getCode(),loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else {
updateReUnload(param, orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.REUNLOAD.getCode(), OrderChildLogEnum.Type.REUNLOAD.getMsg(),
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.REUNLOAD.getCode(),
OrderChildLogEnum.Type.REUNLOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(), OrderChildPoundAuditEnum.Status.AUDIT.getMsg(),
OrderChildLogEnum.CreateType.DRIVER.getCode(),loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
}
......@@ -589,10 +622,13 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
// // 装车时间验证
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow
// (PerformanceResultEnum.DATA_NOT_FIND);
// LocalDateTime now = LocalDateTime.now();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadBeginTime()).get();
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadEndTime()).get();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// orderInfo.getUnloadBeginTime()).get();
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// orderInfo.getUnloadEndTime()).get();
// if (now.isBefore(beginTime) || now.isAfter(endTime)){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_TIME_ERROR);
// }
......@@ -630,14 +666,13 @@ public class OrderChildServiceImpl implements OrderChildService {
// 更新出车状态
updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId());
}
private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) {
String childNo = param.getChildNo();
// 审核中
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT);
}
......@@ -671,7 +706,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildImageDao.batchSaveEntity(imageList);
orderChildPoundAuditDao.saveEntity(audit);
}
@Override
......@@ -682,37 +716,39 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())){
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())){return;}
if (!Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())) {
return;
}
if (!Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
}
// if (!loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
// }
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.ORDER_INVALID);
List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) {
......@@ -761,11 +797,13 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundAuditDao.saveEntity(audit);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getCode(), OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getCode(),
OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getMsg(), loginUserInfo.getUserNo(),
loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(), OrderChildPoundAuditEnum.Status.AUDIT.getMsg(),
OrderChildLogEnum.CreateType.DRIVER.getCode(),loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -776,29 +814,29 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())){
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
// 审核中
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.AUDIT.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT);
}
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_REJECT);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
long count = orderChildDao.countOfTransitByOrderGoodsNo(orderChild.getOrderGoodsNo());
// 更新货单完成状态
......@@ -811,8 +849,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusDriverConfirm(orderChild.getTruckId());
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(),
OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -824,35 +862,38 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){
}
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
} else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
}
else {
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())){
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())) {
return;
}
// 禁止取消
if (orderChild.getStatus()>=OrderChildEnum.Status.LOAD.getCode()) {
if (orderChild.getStatus() >= OrderChildEnum.Status.LOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
// 取消量验证
if (!cancelCountCheck(userNo)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID_COUNT);}
if (!cancelCountCheck(userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID_COUNT);
}
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(orderGoods.getPendingOrderWay(),
OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(),
orderChild.getTruckNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
}
orderChild.setCancelRemark(param.getRemark());
......@@ -872,8 +913,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(), OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(),
OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -884,24 +925,27 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())){
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())) {
return;
}
// 禁止取消 (卸车前取消)
if (orderChild.getStatus()>=OrderChildEnum.Status.UNLOAD.getCode()) {
if (orderChild.getStatus() >= OrderChildEnum.Status.UNLOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(orderGoods.getPendingOrderWay(),
OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(),
orderChild.getTruckNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
}
orderChild.setCancelRemark(param.getRemark());
......@@ -909,7 +953,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setFinishTime(now);
orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
// 返回吨数
updateOrderGoodsAmountReturn(orderChild, orderGoods);
......@@ -922,8 +965,9 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志
orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(),
OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(), loginUserInfo.getUserNo(),
loginUserInfo.getUserName());
}
@Override
......@@ -931,30 +975,36 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo)
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
OrderChildVO result = orderChildStruct.convert(orderChild);
// 磅单
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())) {
Optional<OrderChildPoundAudit> poundAuditDetail = orderChildPoundAuditDao.getPoundAuditDetail(childNo);
result.setPoundRemark(poundAuditDetail.orNull().getRemark());
result.setPoundRejectType(poundAuditDetail.orNull().getRejectType());
}
List<OrderChildImage> imageList = orderChildImageDao.listLoadAndUnload(childNo).orElse(new ArrayList<>());
result.setLoadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.LOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList()));
result.setUnloadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList()));
result.setLoadImageList(imageList.stream().filter(
item -> Objects.equals(item.getType(), OrderChildImage.Type.LOAD.getCode())).map(
item -> item.getImage()).collect(Collectors.toList()));
result.setUnloadImageList(imageList.stream().filter(
item -> Objects.equals(item.getType(), OrderChildImage.Type.UNLOAD.getCode())).map(
item -> item.getImage()).collect(Collectors.toList()));
// 地址
Optional<FeignAddressVO> sendAndReceiveAddress = addressService.getSendAndReceiveAddress(orderChild.getSendAddressId(), orderChild.getReceiveAddressId());
if (sendAndReceiveAddress.isPresent()){
Optional<FeignAddressVO> sendAndReceiveAddress = addressService.getSendAndReceiveAddress(
orderChild.getSendAddressId(), orderChild.getReceiveAddressId());
if (sendAndReceiveAddress.isPresent()) {
result.setSendAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getSendAddress()));
}
if (sendAndReceiveAddress.isPresent()){
if (sendAndReceiveAddress.isPresent()) {
result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress()));
}
......@@ -968,7 +1018,6 @@ public class OrderChildServiceImpl implements OrderChildService {
param.setUserNo(userNo);
return orderChildDao.pageOrderChildOfDriver(param);
}
@Override
......@@ -986,9 +1035,10 @@ public class OrderChildServiceImpl implements OrderChildService {
Long userNo = loginUserInfo.getUserNo();
String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo)
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
......@@ -1003,21 +1053,26 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo)
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
OrderChildPoundInfoVO result = orderChildPoundStruct.convert(orderChild);
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())) {
result.setPoundRemark(orderChildPoundAuditDao.getPoundAuditDetail(childNo).orNull().getRemark());
}
List<OrderChildImage> imageList = orderChildImageDao.listLoadAndUnload(childNo).orElse(new ArrayList<>());
result.setLoadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.LOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList()));
result.setUnloadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList()));
result.setLoadImageList(imageList.stream().filter(
item -> Objects.equals(item.getType(), OrderChildImage.Type.LOAD.getCode())).map(
item -> item.getImage()).collect(Collectors.toList()));
result.setUnloadImageList(imageList.stream().filter(
item -> Objects.equals(item.getType(), OrderChildImage.Type.UNLOAD.getCode())).map(
item -> item.getImage()).collect(Collectors.toList()));
return result;
}
......@@ -1027,9 +1082,10 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo)
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
......@@ -1038,11 +1094,10 @@ public class OrderChildServiceImpl implements OrderChildService {
return result;
}
/**
* 更新货单数据
*/
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight){
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight) {
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
......@@ -1053,25 +1108,27 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 取消返吨数
*/
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods) {
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo()) - 1;
Integer status = null;
if (count == 0){
if (count == 0) {
status = OrderGoodsStatusEnum.Status.PAYING.getCode();
}
else {
} else {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate(), status);
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate(),
status);
}
/**
* 装车补偿
*/
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
if (dif.compareTo(BigDecimal.ZERO) == 0){return;}
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif) {
if (dif.compareTo(BigDecimal.ZERO) == 0) {
return;
}
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
......@@ -1081,8 +1138,10 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 更新定向单状态 (接单)
*/
private void updateOrderGoodsDirect(OrderGoodsTruckBind orderGoodsTruckBind){
if (orderGoodsTruckBind == null) {return;}
private void updateOrderGoodsDirect(OrderGoodsTruckBind orderGoodsTruckBind) {
if (orderGoodsTruckBind == null) {
return;
}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.ORDER.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
......@@ -1091,7 +1150,7 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 更新定向派单状态 (拒绝)
*/
private void updateOrderGoodsDirectReject(OrderGoodsTruckBind orderGoodsTruckBind){
private void updateOrderGoodsDirectReject(OrderGoodsTruckBind orderGoodsTruckBind) {
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
}
......@@ -1099,8 +1158,10 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 更新定向派单状态 (取消)
*/
private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind){
if (orderGoodsTruckBind == null) {return;}
private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind) {
if (orderGoodsTruckBind == null) {
return;
}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
......@@ -1109,52 +1170,62 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 更新货单完成状态
*/
private void updateOrderGoodsComplete(OrderGoods orderGoods, long count){
if (count > 1) {return;}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
private void updateOrderGoodsComplete(OrderGoods orderGoods, long count) {
if (count > 1) {
return;
}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(),
OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(),
OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
}
}
/**
* 拉运吨数检测
*/
private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad){
if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) {return false;}
private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad) {
if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) {
return false;
}
return true;
}
/**
* 取消检测
*/
private boolean cancelCountCheck(Long userNo){
LocalDateTime startTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 00:00:00").get();
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 23:59:59").get();
private boolean cancelCountCheck(Long userNo) {
LocalDateTime startTime = DateUtils.parseDateTime(
DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 00:00:00").get();
LocalDateTime endTime = DateUtils.parseDateTime(
DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 23:59:59").get();
long count = orderChildDao.countOfCancel(userNo, startTime, endTime);
return count<10;
return count < 10;
}
/**
* 运单拉运吨数计算
*/
private BigDecimal orderChildWeightCalc(OrderChild orderChild){
if (orderChild.getLoadNet() == null) {return orderChild.getTruckLoad();}
else {return orderChild.getLoadNet();}
private BigDecimal orderChildWeightCalc(OrderChild orderChild) {
if (orderChild.getLoadNet() == null) {
return orderChild.getTruckLoad();
} else {
return orderChild.getLoadNet();
}
}
/**
* 运费计算
*/
private BigDecimal orderChildFreightCalc(OrderChild orderChild){
private BigDecimal orderChildFreightCalc(OrderChild orderChild) {
BigDecimal totalFreight = orderChild.getFreightPrice().multiply(orderChild.getWeight());
if (orderChild.getUnloadNet() != null){
if (orderChild.getUnloadNet() != null) {
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){
if (dif.compareTo(BigDecimal.ZERO) < 0) {
totalFreight = totalFreight.add(orderChild.getLossPrice().multiply(dif));
}
}
......@@ -1162,41 +1233,40 @@ public class OrderChildServiceImpl implements OrderChildService {
return totalFreight.setScale(0, RoundingMode.HALF_UP);
}
/**
* 更新出车状态 (接单, 运单重车)
*/
private void updateDriverOrderStatusLock(Long driverUserNo, Integer truckId){
private void updateDriverOrderStatusLock(Long driverUserNo, Integer truckId) {
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.YES.getCode(), truckId, 3);
}
/**
* 更新出车状态(运单卸车,运单空车)
*/
private void updateDriverOrderStatusUnload(Long driverUserNo, Integer truckId){
private void updateDriverOrderStatusUnload(Long driverUserNo, Integer truckId) {
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.NO.getCode(), truckId, 2);
}
/**
* 更新出车状态 (运单取消,空车)
*/
private void updateDriverOrderStatusCancel(Long driverUserNo, Integer truckId){
private void updateDriverOrderStatusCancel(Long driverUserNo, Integer truckId) {
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.NO.getCode(), truckId, 1);
}
/**
* 更新出车状态 (司机确认收货,空车)
*/
private void updateDriverOrderStatusDriverConfirm(Integer truckId){
private void updateDriverOrderStatusDriverConfirm(Integer truckId) {
driverService.updateOrderStatus(0L, 0, truckId, 1);
}
/**
* 创建运单号
*/
private String childNoGenerate(){
return "CYD"+uniqueOrderNumService.getUniqueOrderNum(LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(),LocalDateTimeUtils.DATE_DAY));
private String childNoGenerate() {
return "CYD" + uniqueOrderNumService.getUniqueOrderNum(
LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), LocalDateTimeUtils.DATE_DAY));
}
@Override
......@@ -1211,19 +1281,21 @@ public class OrderChildServiceImpl implements OrderChildService {
@Override
public List<OrderChildPCVO> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) {
List<OrderChild> orderChildren = orderChildDao.getOrderChildInfoByOrderGoodsNo(orderGoodsNo)
.orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
List<OrderChild> orderChildren = orderChildDao.getOrderChildInfoByOrderGoodsNo(orderGoodsNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
return orderChildStruct.convertList(orderChildren);
}
@Override
public CarrierOrderChildDetailVO getCarrierOrderChildDetail(String childNo) {
//运单数据
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
CarrierOrderChildDetailVO carrierOrderChildDetailVO = orderChildStruct.carrierConvert(orderChild);
//货单数据
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.ORDER_NO_FOUND);
carrierOrderChildDetailVO.setExtractWeight(orderGoods.getExtractWeight());
//磅单审核数据
......@@ -1235,34 +1307,36 @@ public class OrderChildServiceImpl implements OrderChildService {
carrierOrderChildDetailVO.setChildLogs(orderChildLogStruct.convert(orderChildLog));
//应付运费
BigDecimal payableFreight=BigDecimal.ZERO;
if(Objects.nonNull(orderChild.getLoadNet())){
payableFreight = orderChild.getLoadNet()
.multiply(orderChild.getFreightPrice())
.setScale(0,BigDecimal.ROUND_HALF_UP);
BigDecimal payableFreight = BigDecimal.ZERO;
if (Objects.nonNull(orderChild.getLoadNet())) {
payableFreight = orderChild.getLoadNet().multiply(orderChild.getFreightPrice()).setScale(0,
BigDecimal.ROUND_HALF_UP);
}
//亏吨扣款(元)
BigDecimal lossDeduction=BigDecimal.ZERO;
if(Objects.nonNull(orderChild.getLoadNet()) && Objects.nonNull(orderChild.getUnloadNet())){
if(orderChild.getLoadNet().compareTo(orderChild.getUnloadNet()) >0){
lossDeduction = carrierOrderChildDetailVO.getLossPrice()
.multiply(orderChild.getLoadNet().subtract(orderChild.getUnloadNet()))
.setScale(0,BigDecimal.ROUND_HALF_UP);
BigDecimal lossDeduction = BigDecimal.ZERO;
if (Objects.nonNull(orderChild.getLoadNet()) && Objects.nonNull(orderChild.getUnloadNet())) {
if (orderChild.getLoadNet().compareTo(orderChild.getUnloadNet()) > 0) {
lossDeduction = carrierOrderChildDetailVO.getLossPrice().multiply(
orderChild.getLoadNet().subtract(orderChild.getUnloadNet())).setScale(0,
BigDecimal.ROUND_HALF_UP);
}
}
//实付运费(元)
BigDecimal realFreight=payableFreight.subtract(lossDeduction);
BigDecimal realFreight = payableFreight.subtract(lossDeduction);
carrierOrderChildDetailVO.setPayableFreight(payableFreight);
carrierOrderChildDetailVO.setLossDeduction(lossDeduction);
carrierOrderChildDetailVO.setRealFreight(realFreight);
//磅单图片
List<OrderChildImage> loadImages = orderChildImageDao.getImages(childNo, OrderChildImage.Type.LOAD.getCode());
List<OrderChildImage> unloadImages = orderChildImageDao.getImages(childNo, OrderChildImage.Type.UNLOAD.getCode());
carrierOrderChildDetailVO.setLoadImageList(loadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
carrierOrderChildDetailVO.setUnloadImageList(unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
List<OrderChildImage> unloadImages = orderChildImageDao.getImages(childNo,
OrderChildImage.Type.UNLOAD.getCode());
carrierOrderChildDetailVO.setLoadImageList(
loadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
carrierOrderChildDetailVO.setUnloadImageList(
unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
return carrierOrderChildDetailVO;
}
......@@ -1281,14 +1355,13 @@ public class OrderChildServiceImpl implements OrderChildService {
@Override
public OrderChildBussInfoVO getOrderChildBussInfo(String truckNo) {
List<OrderChild> childList = orderChildDao.getOrderChildBussInfo(truckNo);
if(CollectionUtils.isEmpty(childList)){
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(new BigDecimal("0"))
.completeCarryWeight(new BigDecimal("0")).loseWeight(new BigDecimal("0")).loseRate(new BigDecimal("0"))
.overRate(new BigDecimal("0")).build();
if (CollectionUtils.isEmpty(childList)) {
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(
new BigDecimal("0")).completeCarryWeight(new BigDecimal("0")).loseWeight(
new BigDecimal("0")).loseRate(new BigDecimal("0")).overRate(new BigDecimal("0")).build();
return vo;
}
//运单完成数量
int complateNum = childList.size();
//历史装车总量
......@@ -1309,25 +1382,325 @@ public class OrderChildServiceImpl implements OrderChildService {
}
//亏吨数量总计
BigDecimal loseWeight = BigDecimal.ZERO;
BigDecimal overWeight = BigDecimal.ZERO;
//卸车总量 大于 装车总量
if(complateCarryWeight.subtract(historyLoadWeight).compareTo(BigDecimal.ZERO) >= 0){
if (complateCarryWeight.subtract(historyLoadWeight).compareTo(BigDecimal.ZERO) >= 0) {
overWeight = complateCarryWeight.subtract(historyLoadWeight); //超吨
}else{
} else {
loseWeight = historyLoadWeight.subtract(complateCarryWeight);//亏吨
}
BigDecimal loseRate = BigDecimal.ZERO;
BigDecimal overRate = BigDecimal.ZERO;
//亏吨率
if(historyLoadWeight.compareTo(BigDecimal.ZERO) != 0){
loseRate = loseWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
overRate = overWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
if (historyLoadWeight.compareTo(BigDecimal.ZERO) != 0) {
loseRate = loseWeight.divide(historyLoadWeight, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
overRate = overWeight.divide(historyLoadWeight, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
}
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(complateNum).historyLoadWeight(historyLoadWeight).completeCarryWeight(complateCarryWeight)
.loseWeight(loseWeight).loseRate(loseRate).overRate(overRate).build();
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(complateNum).historyLoadWeight(
historyLoadWeight).completeCarryWeight(complateCarryWeight).loseWeight(loseWeight).loseRate(
loseRate).overRate(overRate).build();
return vo;
}
@Override
public List<String> getOrderChildTruckByOrderNo(String orderNo) {
List<OrderChild> list = orderChildDao.getOrderChildByOrderNo(orderNo);
List<String> truckList = list.stream().map(OrderChild::getTruckNo).collect(Collectors.toList());
return truckList;
}
@Override
public IPage<OutputMonitorOrderChildVO> getMonitorOrerChildListsByParam(PageMonitorOrderChildQCParam param) {
/* Integer loadWarningTime = 40 ;
Integer arriveWarningTime = 10 ;
Integer receiveWarningTime = 60 ;
LocalDateTime now = LocalDateTime.now();
Page<OrderChild> page = orderChildDao.pageOrderChild(param);
List<OrderChild> records = page.getRecords();
List<OrderChildPCVO> list = orderChildStruct.convertList(page.getRecords());
Result<List<OutputMonitorOrderChildDTO>> result = new Result<>();
PageHelper.startPage(qc.getPage(), qc.getPageSize(), qc.getPage() == 1);
PageInfo<OrderChild> pageInfo = new PageInfo<>(orderChildList);
result.setPageNum(pageInfo.getPages());
result.setTotal(pageInfo.getTotal());
if(CollectionUtils.isEmpty(orderChildList)){
result.setData(null);
return result;
}
//聚合合同 获取热值
List<String> contractNos = orderChildList.stream().map(it -> it.getContractNo()).collect(Collectors.toList());
List<OrderContractQualityIndicator> orderContractQualityIndicators = orderContractQualityIndicatorDao
.getListOfCalorificValueByContractNoList(contractNos, "calorificValue");
Map<String, OrderContractQualityIndicator> contractQualityIndicatorMap = orderContractQualityIndicators
.stream().collect(Collectors.toMap(OrderContractQualityIndicator::getContractNo, o -> o, (v1, v2) -> v2));
//聚合运单 获取运单预估时间
List<String> childNoList = orderChildList.stream().map(OrderChild::getChildNo).collect(Collectors.toList());
List<OrderChildExpect> orderChildExpect = orderChildExpectDao.getOrderChildExpectByChildNos(childNoList,0);
Map<String, OrderChildExpect> orderChildExpectMap = orderChildExpect.stream().collect(Collectors.toMap
(OrderChildExpect::getChildNo, o -> o, (v1, v2) -> v2));
List<OutputMonitorOrderChildVO> monitorOrderChildList = records.stream().map(child -> {
OutputMonitorOrderChildVO monitorOrderChild = new OutputMonitorOrderChildVO();
monitorOrderChild.setChildNo(child.getChildNo());
monitorOrderChild.setDriverMobile(child.getDriverMobile());
monitorOrderChild.setDriverName(child.getDriverName());
monitorOrderChild.setLoadTime(DateUtils.formatDateTime(child.getLoadTime()).get());
monitorOrderChild.setPayTime(DateUtils.formatDateTime(child.getPayTime()).get());
monitorOrderChild.setTruckNo(child.getTruckNo());
monitorOrderChild.setSendAddress(child.getSendAddress());
monitorOrderChild.setSendAddressId(child.getSendAddressId());
monitorOrderChild.setStatus(child.getStatus());
BigDecimal poundTonnage = child.getLoadNet();
if(BigDecimal.ZERO.compareTo(child.getLoadNet()) <= 0){
poundTonnage = child.getUnloadNet();
}
monitorOrderChild.setLoadNet(poundTonnage);
if(null != orderChildExpectMap.get(child.getChildNo())){
OrderChildExpect expect = orderChildExpectMap.get(child.getChildNo());
if(StringUtil.isNotEmpty(expect.getExpectArriveTime())){
monitorOrderChild.setExpectArriveTime(expect.getExpectArriveTime());
LocalDateTime expectArriveTime = LocalDateTimeUtils.parseTime(expect.getExpectArriveTime());
LocalDateTime expectArriveWarringTime = LocalDateTimeUtils.plus(expectArriveTime,
arriveWarningTime, ChronoUnit.MINUTES);
if(expectArriveWarringTime.isBefore(now)
&& child.getStatus() < OrderChildStatusEnum.ARRIVE_SEND.getValue()){
monitorOrderChild.setArriveWarning(1);
}else{
monitorOrderChild.setArriveWarning(0);
}
}
if(StringUtil.isNotEmpty(expect.getExpectReceiveTime())){
monitorOrderChild.setExpectReceiveTime(expect.getExpectReceiveTime());
LocalDateTime expectReceiveTime = LocalDateTimeUtils.parseTime(expect.getExpectReceiveTime());
LocalDateTime expectReceiveWarringTime = LocalDateTimeUtils.plus(expectReceiveTime,
receiveWarningTime, ChronoUnit.MINUTES);
if(expectReceiveWarringTime.isBefore(now)
&& child.getStatus() >= OrderChildStatusEnum.OWNER_LOAD.getValue()
&& child.getStatus() < OrderChildStatusEnum.ARRIVE_RECEIVE.getValue()){
monitorOrderChild.setReceiveWarning(1);
}else{
monitorOrderChild.setReceiveWarning(0);
}
}
monitorOrderChild.setExpectTransportTime(expect.getExpectTransportTime());
}
if(StringUtil.isNotEmpty(child.getArriveTime())
&& child.getStatus() >= OrderChildStatusEnum.ARRIVE_SEND.getValue()
&& child.getStatus() < OrderChildStatusEnum.OWNER_LOAD.getValue()){
LocalDateTime arriveTime = LocalDateTimeUtils.parseTime(child.getArriveTime());
LocalDateTime arriveWarringTime = LocalDateTimeUtils.plus(arriveTime, loadWarningTime, ChronoUnit
.MINUTES);
if(arriveWarringTime.isBefore(now)){
monitorOrderChild.setLoadWarning(1);
}else{
monitorOrderChild.setLoadWarning(0);
}
}
List<OrderChildExpect> orderChildExpects = orderChildExpectDao.getOrderChildExpectByChildNo(child
.getChildNo(),1);
boolean expectFlag = true ;
if(CollectionUtils.isNotEmpty(orderChildExpects)){
String exceptTime = orderChildExpects.get(0).getCreateTime();
LocalDateTime beginTime = LocalDateTimeUtils.plus(now,-5, ChronoUnit.MINUTES);
if(beginTime.isBefore(LocalDateTimeUtils.parseTime(exceptTime))){
expectFlag = false;
}
}
if(expectFlag){
orderChildExpectService.orderChildExpect(child.getChildNo(),child.getTruckNo(),child.getStatus(),
child.getOrderNo(),1);
orderChildExpects = orderChildExpectDao.getOrderChildExpectByChildNo(child.getChildNo(),1);
}
if(CollectionUtils.isNotEmpty(orderChildExpects) && orderChildExpects.size() > 1){
OrderChildExpect oneExpect = orderChildExpects.get(0);
if(StringUtil.isNotEmpty(oneExpect.getExpectArriveTime())){
monitorOrderChild.setExpectArriveTimeRealTime(oneExpect.getExpectArriveTime());
}
if(StringUtil.isNotEmpty(oneExpect.getExpectReceiveTime())){
monitorOrderChild.setExpectReceiveTimeRealTime(oneExpect.getExpectReceiveTime());
}
OrderChildExpect twoExpect = orderChildExpects.get(1);
if(Objects.nonNull(oneExpect.getExpectArriveTimeSecond()) && Objects.nonNull(twoExpect
.getExpectArriveTimeSecond())){
if(twoExpect.getExpectArriveTimeSecond() < oneExpect.getExpectArriveTimeSecond()){
monitorOrderChild.setArriveTrend(0);
}else{
monitorOrderChild.setArriveTrend(1);
}
}
if(Objects.nonNull(oneExpect.getExpectReceiveTimeSecond()) && Objects.nonNull(twoExpect
.getExpectReceiveTimeSecond())) {
if(oneExpect.getExpectReceiveTimeSecond() < twoExpect.getExpectReceiveTimeSecond()){
monitorOrderChild.setReceiveTrend(0);
}else{
monitorOrderChild.setReceiveTrend(1);
}
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return monitorOrderChild;
}).collect(Collectors.toList());
result.setData(monitorOrderChildList);
return result;*/
return null;
}
/**
* 定时任务更新预估运单时间
*
* @return
*/
public void orderChildExpect() {
LocalDateTime now = LocalDateTime.now();
//查询平台车辆的定位信息
Map<String, TruckTraceDTO> truckTraceMap = redisTemplate.opsForHash().entries(
RedisConstants.ZJXL_TRUCK_TRACE_LIST);
//查询平台未完结的运单
List<Integer> list = Arrays.asList(
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()});
List<OrderChild> orderChildList = orderChildDao.listOrderChild(list);
for (OrderChild child : orderChildList) {
String childNo = child.getChildNo();
String truckNo = child.getTruckNo();
TruckTraceDTO truckTraceDTO = truckTraceMap.get(truckNo);
BigDecimal truckLongitudeX = null;
BigDecimal truckLatitudeY = null;
if (Objects.nonNull(truckTraceDTO)) {
truckLongitudeX = truckTraceDTO.getLocation()[0];
truckLatitudeY = truckTraceDTO.getLocation()[1];
}
Integer childStatus = child.getStatus();
String orderGoodsNo = child.getOrderGoodsNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get();
//发货地/收货地坐标
BigDecimal siteLongitudeX;
BigDecimal siteLatitudeY;
//未到达货源地,取货源地坐标
if (childStatus < OrderChildEnum.Status.ARRIVE_SEND.getCode()) {
siteLongitudeX = orderGoods.getSendLongitude();
siteLatitudeY = orderGoods.getSendLatitude();
} else { //取目的地坐标
siteLongitudeX = orderGoods.getReceiveLongitude();
siteLatitudeY = orderGoods.getReceiveLatitude();
}
//调高德获取预估时间
if (Objects.nonNull(truckLongitudeX) && Objects.nonNull(truckLatitudeY)) {
OrderChildExpectDTO expect = new OrderChildExpectDTO();
expect.setChildNo(childNo);
List<GdRouteDTO> gdRouteDTOS = getRoute(truckNo, truckLongitudeX, truckLatitudeY, siteLongitudeX,
siteLatitudeY);
Integer plusTime = 0;
if (CollectionUtils.isNotEmpty(gdRouteDTOS)) {
plusTime = gdRouteDTOS.get(0).getDuration();
}
expect.setExpectTransportTimeSecond(plusTime);
LocalDateTime expectTime = now.plusSeconds(plusTime);
if (childStatus < OrderChildEnum.Status.ARRIVE_SEND.getCode()) {
expect.setExpectArriveTime(expectTime);
expect.setExpectArriveTimeSecond(plusTime);
} else {
expect.setExpectReceiveTime(expectTime);
expect.setExpectReceiveTimeSecond(plusTime);
}
cacheOrderChildExpectData(childNo,expect);
}
}
}
/**
* @return
* @Author kavin
* @Description 缓存实时计算的运单预计时间
* @Param [orderChildNo, expect]
**/
public void cacheOrderChildExpectData(String orderChildNo, OrderChildExpectDTO expect) {
String orderChildExpectDataKey = getOrderChildExpectDataKey(orderChildNo);
//计算结果20分钟过期。定时每5分钟执行一次。所以在此记录过期前,该运单会生成四条记录。保留最新的两条记录即可,剩下两条不再结果集中记录。
redisTemplate.opsForValue().set(orderChildExpectDataKey, expect, 20, TimeUnit.MINUTES);
if (redisTemplate.hasKey(RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP)) {
List<String> keyList = (List<String>) redisTemplate.opsForHash().get(
RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP, orderChildNo);
if (CollectionUtils.isNotEmpty(keyList)) {
//保留最新的两条记录的key。此次的key在0位置。
keyList.add(0,orderChildExpectDataKey);
keyList = keyList.stream().limit(2).collect(Collectors.toList());
} else {
keyList = new ArrayList<>();
keyList.add(orderChildExpectDataKey);
}
redisTemplate.opsForHash().put(RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP, orderChildNo,keyList);
} else {
List<String> keyList = new ArrayList<>();
keyList.add(orderChildExpectDataKey);
redisTemplate.opsForHash().put(RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP,orderChildNo,keyList);
}
}
/**
* @Author kavin
* @Description 获取运单实时监控位置计算时间的数据key
* @Param [orderChildNo]
* @return
**/
public String getOrderChildExpectDataKey(String orderChildNo) {
String id = UUID.randomUUID().toString();
return RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA + orderChildNo + ":" + id;
}
/**
* @Author kavin
* @Description 通过高德获取时间
* @Param [truckNo, beginLongitude, beginLatitude, endLongitude, endLatitude]
* @return
**/
public List<GdRouteDTO> getRoute(String truckNo, BigDecimal beginLongitude, BigDecimal beginLatitude,
BigDecimal endLongitude, BigDecimal endLatitude) {
List<GdRouteDTO> gdRouteDTOS = null;
try {
gdRouteDTOS = gdService.getRoute(beginLongitude, beginLatitude, endLongitude, endLatitude);
} catch (ServiceSystemException e) {
log.info("orderChildExpect==高德地图调用失败,车辆{},异常原因{}", truckNo, e.getMessage());
}
return gdRouteDTOS;
}
}
package com.clx.performance.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.*;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
......@@ -30,8 +41,17 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
public class HttpUtils {
private static PoolingHttpClientConnectionManager connectionManager;
private static String DEFAULT_STR = "";
private static String UTF_8 = "UTF-8";
private static final int CONNECT_TIMEOUT = 10000;
private static final int SOCKET_TIMEOUT = 100000;
private static final int REQUESTCONNECT_TIMEOUT = 2000;
private static final int MAX_TOTAL = 50;
private static final int CONNECT_DEFAULT_ROUTE = 5;
/**
......@@ -307,4 +327,84 @@ public class HttpUtils {
throw new RuntimeException(ex);
}
}
public static String httpGetRequest(String url) throws Exception {
HttpGet httpGet = new HttpGet(url);
return getResult(httpGet);
}
private static void init() {
if (connectionManager == null) {
connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(50);
connectionManager.setDefaultMaxPerRoute(5);
}
}
private static CloseableHttpClient getHttpClient() {
init();
RequestConfig.Builder builder = RequestConfig.custom();
RequestConfig config = builder.setSocketTimeout(100000).setConnectTimeout(10000).setConnectionRequestTimeout(2000).build();
CloseableHttpClient client = HttpClients.custom().setMaxConnPerRoute(5).disableConnectionState().setDefaultRequestConfig(config).setConnectionManager(connectionManager).build();
return client;
}
private static String getResult(HttpRequestBase request) throws IOException {
CloseableHttpClient httpClient = getHttpClient();
CloseableHttpResponse response = null;
InputStream in = null;
String var6;
try {
response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
in = response.getEntity().getContent();
if (entity == null) {
return DEFAULT_STR;
}
String result = EntityUtils.toString(entity, Charset.forName(UTF_8));
response.close();
var6 = result;
} catch (ConnectTimeoutException var37) {
log.error("connect timeout {}", var37);
return DEFAULT_STR;
} catch (SocketTimeoutException var38) {
log.error("read timeout {}", var38);
return DEFAULT_STR;
} catch (ClientProtocolException var39) {
log.error("protocol exception {}", var39);
return DEFAULT_STR;
} catch (ParseException var40) {
log.error("parse exception {}", var40);
return DEFAULT_STR;
} catch (IOException var41) {
log.error("network exception {}", var41);
return DEFAULT_STR;
} catch (Exception var42) {
log.error("other exception {}", var42);
return DEFAULT_STR;
} finally {
if (response != null) {
try {
response.close();
} catch (IOException var36) {
var36.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException var35) {
var35.printStackTrace();
}
}
}
return var6;
}
}
package com.clx.performance.utils.gd;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.dto.gd.GdPosDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.utils.HttpUtils;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023/2/2 17:25
* @Version: 1.0
*/
@Slf4j
@Service
public class GdService {
private static final String DIRECTION_API = "https://restapi.amap.com/v5/direction/driving";//路线规划
private static final String GEO_API = "https://restapi.amap.com/v3/geocode/geo";//地理编码
private static final String REGEO_API = "https://restapi.amap.com/v3/geocode/regeo";//逆地理编码
private String gaodeKey = "b2550e16bbc7bf9f6cd168e0f21709fc";
public List<GdRouteDTO> getRoute(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
return getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
}
public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
log.info("高德线路规划开始");
List<GdRouteDTO> routeList = new ArrayList<>();
String url = DIRECTION_API+"?origin=" + originLongitude.doubleValue()+","+originLatitude.doubleValue()
+ "&destination=" + destinationLongitude.doubleValue()+","+ destinationLatitude.doubleValue()
+ "&output=json&key="+key+"&extensions=base&show_fields=cost,tmcs";
//解析返回的结果
String resultStr;
try {
resultStr = HttpUtils.httpGetRequest(url);
} catch (Exception e) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常");
}
if (StringUtils.isBlank(resultStr)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 返回结果空");}
JSONObject jsonObject = JSONObject.parseObject(resultStr);
if (Objects.isNull(jsonObject)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 返回结果转换异常, result:"+resultStr);}
// 无效key{"status":"0","info":"INVALID_USER_KEY","infocode":"10001"}
// 没有权限使用相应的服务或者请求接口的路径拼写错误 {"status":"0","info":"SERVICE_NOT_AVAILABLE","infocode":"10002"}
// 访问已超出日访问量 {"status":"0","info":"DAILY_QUERY_OVER_LIMIT","infocode":"10003"}
// 单位时间内访问过于频繁 {"status":"0","info":"ACCESS_TOO_FREQUENT","infocode":"10004"}
// IP访问超限 {"status":"0","info":"IP_QUERY_OVER_LIMIT","infocode":"10010"}
// 账号维度日调用量超出限制 {"status":"0","info":"USER_DAILY_QUERY_OVER_LIMIT","infocode":"10044"}
// 线路规划失败 {"status":"0","info":"ROUTE_FAIL","infocode":"20802"}
// 起点终点距离过长 {"status":"0","info":"OVER_DIRECTION_RANGE","infocode":"20803"}
// 余额耗尽 {"status":"0","info":"QUOTA_PLAN_RUN_OUT","infocode":"40000"}
// 购买服务到期 {"status":"0","info":"SERVICE_EXPIRED","infocode":"40002"}
Integer status = jsonObject.getInteger("status");
if (!Objects.equals(1, status)) {
Integer infocode = jsonObject.getInteger("infocode");
if (Objects.equals(10001, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 无效key, result:"+resultStr);}
else if (Objects.equals(10002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 没有权限使用相应的服务或者请求接口的路径拼写错误, result:"+resultStr);}
else if (Objects.equals(10003, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 访问已超出日访问量, result:"+resultStr);}
else if (Objects.equals(10004, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 单位时间内访问过于频繁, result:"+resultStr);}
else if (Objects.equals(10010, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, IP访问超限, result:"+resultStr);}
else if (Objects.equals(10044, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 账号维度日调用量超出限制, result:"+resultStr);}
else if (Objects.equals(40000, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 余额耗尽, result:"+resultStr);}
else if (Objects.equals(40002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 购买服务到期, result:"+resultStr);}
else if (Objects.equals(20802, status)) {
log.info("调用高德线路规划接口异常, 线路规划失败");
return routeList;
}
else if (Objects.equals(20803, status)) {
log.info("调用高德线路规划接口异常, 起点终点距离过长");
return routeList;
}
else {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 状态异常, result:"+resultStr);}
}
// 解析线路
JSONObject route = jsonObject.getJSONObject("route");
if (Objects.isNull(route)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, result:"+resultStr);}
JSONArray pathList = route.getJSONArray("paths");
if (Objects.isNull(pathList)) {return routeList;}
if (pathList.size() == 0) {return routeList;}
for (int i=0; i<pathList.size(); i++){
JSONObject item = pathList.getJSONObject(i);
GdRouteDTO line = new GdRouteDTO();
line.setDistance(item.getInteger("distance"));
line.setDuration(item.getJSONObject("cost").getInteger("duration"));
List<GdPosDTO> posList = new ArrayList<>();
JSONArray steps = item.getJSONArray("steps");
Integer duration = 0 ;
for (int j=0; j<steps.size(); j++){
JSONArray tmcs = steps.getJSONObject(j).getJSONArray("tmcs");
JSONObject cost = steps.getJSONObject(j).getJSONObject("cost");
for (int k=0; k<tmcs.size(); k++){
String tmcPolyline = tmcs.getJSONObject(k).getString("tmc_polyline");
String[] split = tmcPolyline.split(";");
for (int m=0; m<split.length; m++){
String[] split1 = split[m].split(",");
GdPosDTO pos = new GdPosDTO();
pos.setLongitude(new BigDecimal(split1[0]));
pos.setLatitude(new BigDecimal(split1[1]));
if( k == 0 && m == 0){
pos.setDuration(duration);
if(Objects.nonNull(cost) && Objects.nonNull(cost.getString("duration"))){
duration += Integer.parseInt(cost.getString("duration"));
}
}
if(j == steps.size()-1 && k == tmcs.size()-1 && m == split.length-1 ){
pos.setDuration(duration);
}
posList.add(pos);
}
}
}
line.setPosList(posList);
routeList.add(line);
}
// 按距离升序
routeList.sort(Comparator.comparingInt(GdRouteDTO::getDistance));
log.info("高德线路规划结束, route:{}", routeList.size());
return routeList;
}
public String getLocation(String address) {
return getLocation(gaodeKey, address);
}
public static String getLocation(String key, String address) {
log.info("高德地理编码开始");
String url = GEO_API+"?output=json&address=" +address+"&key="+key;
//解析返回的结果
String resultStr;
try {
resultStr = HttpUtils.httpGetRequest(url);
} catch (Exception e) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常");
}
log.info("高德地理编码返回结果:"+resultStr);
if (StringUtils.isBlank(resultStr)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 返回结果空");}
JSONObject retJSONObject = JSONObject.parseObject(resultStr);
if (Objects.isNull(retJSONObject)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 返回结果转换异常, result:"+resultStr);}
Integer status = retJSONObject.getInteger("status");
if (!Objects.equals(1, status)) {
if (Objects.equals(10001, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 无效key, result:"+resultStr);}
else if (Objects.equals(10002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 没有权限使用相应的服务或者请求接口的路径拼写错误, result:"+resultStr);}
else if (Objects.equals(10003, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 访问已超出日访问量, result:"+resultStr);}
else if (Objects.equals(10004, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 单位时间内访问过于频繁, result:"+resultStr);}
else if (Objects.equals(10010, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, IP访问超限, result:"+resultStr);}
else if (Objects.equals(10044, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 账号维度日调用量超出限制, result:"+resultStr);}
else if (Objects.equals(40000, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 余额耗尽, result:"+resultStr);}
else if (Objects.equals(40002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 购买服务到期, result:"+resultStr);}
else if (Objects.equals(20802, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 路线计算失败, result:"+resultStr); }
else if (Objects.equals(20803, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 起点终点距离过长, result:"+resultStr); }
else {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, 状态异常, result:"+resultStr);}
}
// 解析
JSONArray geocodes = retJSONObject.getJSONArray("geocodes");
if (Objects.isNull(geocodes)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常, result:"+resultStr);}
JSONObject item = geocodes.getJSONObject(0);
String location = item.getString("location");
log.info("高德地理编码结束, location:{}", location);
return location;
}
public String getLonLat(String location) {
return getLonLat(gaodeKey, location);
}
public static String getLonLat(String key, String location) {
log.info("高德逆地理编码开始");
String url = REGEO_API+"?output=json&location=" +location+"&key="+key;
//解析返回的结果
String resultStr;
try {
resultStr = HttpUtils.httpGetRequest(url);
} catch (Exception e) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常");
}
log.info("高德逆地理编码返回结果:"+resultStr);
if (StringUtils.isBlank(resultStr)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 返回结果空");}
JSONObject retJSONObject = JSONObject.parseObject(resultStr);
if (Objects.isNull(retJSONObject)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 返回结果转换异常, result:"+resultStr);}
Integer status = retJSONObject.getInteger("status");
if (!Objects.equals(1, status)) {
if (Objects.equals(10001, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 无效key, result:"+resultStr);}
else if (Objects.equals(10002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 没有权限使用相应的服务或者请求接口的路径拼写错误, result:"+resultStr);}
else if (Objects.equals(10003, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 访问已超出日访问量, result:"+resultStr);}
else if (Objects.equals(10004, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 单位时间内访问过于频繁, result:"+resultStr);}
else if (Objects.equals(10010, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, IP访问超限, result:"+resultStr);}
else if (Objects.equals(10044, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 账号维度日调用量超出限制, result:"+resultStr);}
else if (Objects.equals(40000, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 余额耗尽, result:"+resultStr);}
else if (Objects.equals(40002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 购买服务到期, result:"+resultStr);}
else if (Objects.equals(20802, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 路线计算失败, result:"+resultStr); }
else if (Objects.equals(20803, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 起点终点距离过长, result:"+resultStr); }
else {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, 状态异常, result:"+resultStr);}
}
// 解析
JSONObject regeocode = retJSONObject.getJSONObject("regeocode");
if (Objects.isNull(regeocode)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德逆地理编码接口异常, result:"+resultStr);}
String detailAddress = regeocode.getString("formatted_address");
log.info("高德逆地理编码结束, detailAddress:{}", detailAddress);
return detailAddress;
}
public BigDecimal getDistanceRoute(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
return distanceRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
}
public static BigDecimal distanceRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
log.info("高德线路规划开始");
BigDecimal distance = BigDecimal.ZERO;
String url = DIRECTION_API + "?origin=" + originLongitude.doubleValue() + "," + originLatitude.doubleValue()
+ "&destination=" + destinationLongitude.doubleValue() + "," + destinationLatitude.doubleValue()
+ "&output=json&key=" + key + "&extensions=base";
//解析返回的结果
String resultStr;
try {
resultStr = HttpUtils.httpGetRequest(url);
} catch (Exception e) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常");
}
if (StringUtils.isBlank(resultStr)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 返回结果空");
}
JSONObject jsonObject = JSONObject.parseObject(resultStr);
if (Objects.isNull(jsonObject)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 返回结果转换异常, result:" + resultStr);
}
// 无效key{"status":"0","info":"INVALID_USER_KEY","infocode":"10001"}
// 没有权限使用相应的服务或者请求接口的路径拼写错误 {"status":"0","info":"SERVICE_NOT_AVAILABLE","infocode":"10002"}
// 访问已超出日访问量 {"status":"0","info":"DAILY_QUERY_OVER_LIMIT","infocode":"10003"}
// 单位时间内访问过于频繁 {"status":"0","info":"ACCESS_TOO_FREQUENT","infocode":"10004"}
// IP访问超限 {"status":"0","info":"IP_QUERY_OVER_LIMIT","infocode":"10010"}
// 账号维度日调用量超出限制 {"status":"0","info":"USER_DAILY_QUERY_OVER_LIMIT","infocode":"10044"}
// 线路规划失败 {"status":"0","info":"ROUTE_FAIL","infocode":"20802"}
// 起点终点距离过长 {"status":"0","info":"OVER_DIRECTION_RANGE","infocode":"20803"}
// 余额耗尽 {"status":"0","info":"QUOTA_PLAN_RUN_OUT","infocode":"40000"}
// 购买服务到期 {"status":"0","info":"SERVICE_EXPIRED","infocode":"40002"}
Integer status = jsonObject.getInteger("status");
if (!Objects.equals(1, status)) {
Integer infocode = jsonObject.getInteger("infocode");
if (Objects.equals(10001, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 无效key, result:" + resultStr);
} else if (Objects.equals(10002, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 没有权限使用相应的服务或者请求接口的路径拼写错误, result:" + resultStr);
} else if (Objects.equals(10003, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 访问已超出日访问量, result:" + resultStr);
} else if (Objects.equals(10004, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 单位时间内访问过于频繁, result:" + resultStr);
} else if (Objects.equals(10010, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, IP访问超限, result:" + resultStr);
} else if (Objects.equals(10044, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 账号维度日调用量超出限制, result:" + resultStr);
} else if (Objects.equals(40000, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 余额耗尽, result:" + resultStr);
} else if (Objects.equals(40002, status)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 购买服务到期, result:" + resultStr);
} else if (Objects.equals(20802, status)) {
log.info("调用高德线路规划接口异常, 线路规划失败");
return distance;
} else if (Objects.equals(20803, status)) {
log.info("调用高德线路规划接口异常, 起点终点距离过长");
return distance;
} else {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, 状态异常, result:" + resultStr);
}
}
// 解析线路
JSONObject route = jsonObject.getJSONObject("route");
if (Objects.isNull(route)) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德线路规划接口异常, result:" + resultStr);
}
JSONArray pathList = route.getJSONArray("paths");
if (Objects.isNull(pathList)) {
return distance;
}
if (pathList.size() == 0) {
return distance;
}
JSONObject pathObject = pathList.getJSONObject(0);
Integer distanceTemp = pathObject.getInteger("distance");
distance = up2NumPoint(new BigDecimal(distanceTemp).movePointLeft(3));
return distance;
}
public static BigDecimal up2NumPoint(BigDecimal value) {
return !Objects.isNull(value) && BigDecimal.ZERO.compareTo(value) != 0 ? value.setScale(2, 4) : BigDecimal.ZERO;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论