提交 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 { ...@@ -8,6 +8,9 @@ public class RedisConstants {
public static final String ORDER_GOODS_ID_GENERATE ="clx-performance:orderGoodsId:generate"; 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 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:"; 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; ...@@ -2,14 +2,12 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.OrderChildEnum; 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.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.service.OrderChildPoundAuditService; import com.clx.performance.service.OrderChildPoundAuditService;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.vo.pc.CarrierOrderChildDetailVO; import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.OrderChildBussInfoVO;
import com.clx.performance.vo.pc.OrderChildStatusVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result; import com.msl.common.result.Result;
...@@ -87,4 +85,13 @@ public class CarrierOrderChildController { ...@@ -87,4 +85,13 @@ public class CarrierOrderChildController {
return Result.ok(orderChildService.getOrderChildBussInfo(truckNo)); 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 { ...@@ -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; package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam; import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam; import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; 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.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
...@@ -56,4 +58,10 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -56,4 +58,10 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Integer getOrderChildTotalByUserNo(Long userNo); Integer getOrderChildTotalByUserNo(Long userNo);
List<OrderChild> getOrderChildBussInfo(String truckNo); 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; ...@@ -10,16 +10,19 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam; import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam; import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; 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.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
...@@ -198,6 +201,37 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -198,6 +201,37 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
return baseMapper.selectCount(query).intValue(); 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 @Override
public List<OrderChild> getOrderChildBussInfo(String truckNo) { public List<OrderChild> getOrderChildBussInfo(String truckNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper(); 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> { ...@@ -77,6 +77,10 @@ public class OrderChild implements HasKey<Integer> {
private LocalDateTime settleTime; //结算时间 private LocalDateTime settleTime; //结算时间
private LocalDateTime cancelTime; //取消时间 private LocalDateTime cancelTime; //取消时间
private LocalDateTime finishTime; //完成时间 private LocalDateTime finishTime; //完成时间
private LocalDateTime expectSendTime; //预计到达货源地时间
private LocalDateTime expectReceiveTime; //预计到达目的地时间
private LocalDateTime createTime; //创建时间 private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间 private LocalDateTime modifiedTime; //修改时间
......
...@@ -11,4 +11,6 @@ public interface GoodsOrderMapService { ...@@ -11,4 +11,6 @@ public interface GoodsOrderMapService {
List<GoodsOrderSendAddressSelect> getSendAddressSelect(GoodsOrderMapParam param); List<GoodsOrderSendAddressSelect> getSendAddressSelect(GoodsOrderMapParam param);
List<TruckCoordinateVO> getPlatformTruckCoordinate(); List<TruckCoordinateVO> getPlatformTruckCoordinate();
List<String> getOrderChildTruckByOrderNo(String orderNo);
} }
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.app.*; import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam; import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; 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.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.*; import com.clx.performance.vo.app.*;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
...@@ -61,4 +62,10 @@ public interface OrderChildService { ...@@ -61,4 +62,10 @@ public interface OrderChildService {
Integer getOrderChildTotalByUserNo(Long userNo); Integer getOrderChildTotalByUserNo(Long userNo);
OrderChildBussInfoVO getOrderChildBussInfo(String truckNo); 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; ...@@ -7,6 +7,7 @@ import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.GoodsOrderMapParam; import com.clx.performance.param.pc.GoodsOrderMapParam;
import com.clx.performance.service.GoodsOrderMapService; import com.clx.performance.service.GoodsOrderMapService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.TruckService; import com.clx.performance.service.TruckService;
import com.clx.performance.vo.pc.Freight; import com.clx.performance.vo.pc.Freight;
import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect; import com.clx.performance.vo.pc.GoodsOrderSendAddressSelect;
...@@ -40,6 +41,9 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService { ...@@ -40,6 +41,9 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService {
@Autowired @Autowired
TruckService truckService; TruckService truckService;
@Autowired
OrderChildService orderChildService;
@Autowired(required = false) @Autowired(required = false)
UserClxFeign userClxFeign; UserClxFeign userClxFeign;
...@@ -75,6 +79,11 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService { ...@@ -75,6 +79,11 @@ public class GoodsOrderMapServiceImpl implements GoodsOrderMapService {
return values; return values;
} }
@Override
public List<String> getOrderChildTruckByOrderNo(String orderNo) {
return orderChildService.getOrderChildTruckByOrderNo(orderNo);
}
@Override @Override
public List<TruckCoordinateVO> getPlatformTruckCoordinate() { public List<TruckCoordinateVO> getPlatformTruckCoordinate() {
List<TruckCoordinateVO> result = new ArrayList<>(); List<TruckCoordinateVO> result = new ArrayList<>();
......
...@@ -5,8 +5,12 @@ import com.clx.order.enums.OrderEnum; ...@@ -5,8 +5,12 @@ import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO; import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO; import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.*; 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.enums.*;
import com.clx.performance.extranal.user.AddressService; import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
...@@ -15,12 +19,14 @@ import com.clx.performance.model.*; ...@@ -15,12 +19,14 @@ import com.clx.performance.model.*;
import com.clx.performance.param.app.*; import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam; import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; 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.param.pc.PagePoundAuditParam;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildPoundLogService; import com.clx.performance.service.OrderChildPoundLogService;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.struct.*; import com.clx.performance.struct.*;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.utils.spring.ApplicationContextUtils; import com.clx.performance.utils.spring.ApplicationContextUtils;
import com.clx.performance.vo.app.*; import com.clx.performance.vo.app.*;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
...@@ -40,15 +46,14 @@ import org.apache.commons.collections4.CollectionUtils; ...@@ -40,15 +46,14 @@ import org.apache.commons.collections4.CollectionUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -59,26 +64,22 @@ import java.util.stream.Collectors; ...@@ -59,26 +64,22 @@ import java.util.stream.Collectors;
* @Date: 2023/09/18 11:34:50 * @Date: 2023/09/18 11:34:50
* @Version: 1.0 * @Version: 1.0
*/ */
@Slf4j @Slf4j
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class OrderChildServiceImpl implements OrderChildService { public class OrderChildServiceImpl implements OrderChildService {
private final AmqpTemplate rabbitTemplate; private final AmqpTemplate rabbitTemplate;
private final RedisTemplate redisTemplate;
private final OrderGoodsDao orderGoodsDao; private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao; private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final OrderChildImageDao orderChildImageDao; private final OrderChildImageDao orderChildImageDao;
private final OrderChildPoundAuditDao orderChildPoundAuditDao; private final OrderChildPoundAuditDao orderChildPoundAuditDao;
private final OrderChildLogService orderChildLogService; private final OrderChildLogService orderChildLogService;
private final OrderChildPoundLogService orderChildPoundLogService; private final OrderChildPoundLogService orderChildPoundLogService;
private final AddressService addressService; private final AddressService addressService;
private final OrderService orderService; private final OrderService orderService;
private final GdService gdService;
private final DriverService driverService; private final DriverService driverService;
private final OrderChildStruct orderChildStruct; private final OrderChildStruct orderChildStruct;
private final OrderGoodsService orderGoodsService; private final OrderGoodsService orderGoodsService;
...@@ -86,7 +87,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -86,7 +87,6 @@ public class OrderChildServiceImpl implements OrderChildService {
private final OrderChildFreightStruct orderChildFreightStruct; private final OrderChildFreightStruct orderChildFreightStruct;
private final AddressStruct addressStruct; private final AddressStruct addressStruct;
private final OrderChildLogStruct orderChildLogStruct; private final OrderChildLogStruct orderChildLogStruct;
private final UniqueOrderNumService uniqueOrderNumService; private final UniqueOrderNumService uniqueOrderNumService;
private final OrderFeign orderFeign; private final OrderFeign orderFeign;
private final RedissonClient redissonClient; private final RedissonClient redissonClient;
...@@ -98,8 +98,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -98,8 +98,8 @@ public class OrderChildServiceImpl implements OrderChildService {
saveOrderChildOrderUserTruckLock(param); 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 { ...@@ -108,15 +108,16 @@ public class OrderChildServiceImpl implements OrderChildService {
public void saveOrderChildOrderUserTruckLock(OrderChildSaveParam param) { public void saveOrderChildOrderUserTruckLock(OrderChildSaveParam param) {
Long userNo = param.getDriverUserNo(); Long userNo = param.getDriverUserNo();
Integer truckId = param.getTruckId(); 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; boolean flag;
try{ try {
flag = lock.tryLock( 1, 3, TimeUnit.SECONDS); flag = lock.tryLock(1, 3, TimeUnit.SECONDS);
}catch (Exception e){ } catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);
} }
if (!flag){ if (!flag) {
log.warn("接单异常,orderGoodsNo:{}, userNo:{}", param.getOrderGoodsNo(), userNo); log.warn("接单异常,orderGoodsNo:{}, userNo:{}", param.getOrderGoodsNo(), userNo);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FREQUENCY_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FREQUENCY_ERROR);
} }
...@@ -125,25 +126,27 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -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(); 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); 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(); return function.get();
}catch (ServiceSystemException e){ } catch (ServiceSystemException e) {
throw e; throw e;
}catch (Exception e){ } catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL);
}finally { } finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) { if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock(); lock.unlock();
} }
} }
} }
@Override @Override
...@@ -156,23 +159,27 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -156,23 +159,27 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = childNoGenerate(); 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(); BigDecimal truckLoad = driverTruckInfo.getLoad();
String truckNo = driverTruckInfo.getTruckNo(); String truckNo = driverTruckInfo.getTruckNo();
LocalDateTime now = LocalDateTime.now(); 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()) if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
&& !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())){ !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID1); 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())){ // if (StringUtils.isNotBlank(orderInfo.getTruckModelList())){
// List<JSONObject> truckModelList = JSON.parseArray(orderInfo.getTruckModelList(), JSONObject.class); // 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())){ // if (!truckModelNameList.contains(driverTruckInfo.getModel())){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_TRUCK_MODEL_ERROR); // throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_TRUCK_MODEL_ERROR);
// } // }
...@@ -181,19 +188,29 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -181,19 +188,29 @@ public class OrderChildServiceImpl implements OrderChildService {
// 定向 // 定向
OrderGoodsTruckBind bind = null; OrderGoodsTruckBind bind = null;
List<OrderGoodsTruckBind> orderGoodsTruckBindList = orderGoodsTruckBindDao.getValidByTruckNo(truckNo).orNull(); List<OrderGoodsTruckBind> orderGoodsTruckBindList = orderGoodsTruckBindDao.getValidByTruckNo(truckNo).orNull();
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){ if (Objects.equals(orderGoods.getPendingOrderWay(),
if (CollectionUtils.isEmpty(orderGoodsTruckBindList)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);} 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); bind = orderGoodsTruckBindList.stream().filter(
if (Objects.isNull(bind)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);} 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(BigDecimal.ZERO) <= 0) {
// if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);} 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 orderChild = new OrderChild();
orderChild.setChildNo(childNo); orderChild.setChildNo(childNo);
...@@ -247,8 +264,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -247,8 +264,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusLock(orderChild.getDriverUserNo(), orderChild.getTruckId()); updateDriverOrderStatusLock(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 新增日志 // 新增日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(), OrderChildLogEnum.Type.CREATED.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.CREATED.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
SaveOrderChildVO result = new SaveOrderChildVO(); SaveOrderChildVO result = new SaveOrderChildVO();
result.setChildNo(childNo); result.setChildNo(childNo);
...@@ -260,26 +277,28 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -260,26 +277,28 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo(); 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()) if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
&& !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())){ !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
} }
// 定向派单 // 定向派单
if (!Objects.equals(orderGoods.getPendingOrderWay(), 2)){ if (!Objects.equals(orderGoods.getPendingOrderWay(), 2)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
} }
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(param.getTruckNo()) OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(
.orElseThrow(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR); 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); updateOrderGoodsDirectReject(orderGoodsTruckBind);
} }
@Override @Override
...@@ -290,18 +309,19 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -290,18 +309,19 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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.GO_TO_SEND.getCode())) {
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())){ return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
...@@ -309,8 +329,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -309,8 +329,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_SEND.getCode(), OrderChildLogEnum.Type.GO_TO_SEND.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_SEND.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.GO_TO_SEND.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -321,31 +341,35 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -321,31 +341,35 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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.ARRIVE_SEND.getCode())) {
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())){ return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); 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); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
} }
// 距离验证 // 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(), orderGoods.getSendLatitude().doubleValue(), OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000; PerformanceResultEnum.DATA_NOT_FIND);
if (distance > orderInfo.getSendDriverArriveRange().doubleValue()){ 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); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR);
} }
...@@ -353,8 +377,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -353,8 +377,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_SEND.getCode(), OrderChildLogEnum.Type.ARRIVE_SEND.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_SEND.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.ARRIVE_SEND.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -365,28 +389,28 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -365,28 +389,28 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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.GO_TO_RECEIVE.getCode())) {
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())){ return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
orderChild.setStatus(OrderChildEnum.Status.GO_TO_RECEIVE.getCode()); orderChild.setStatus(OrderChildEnum.Status.GO_TO_RECEIVE.getCode());
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_RECEIVE.getCode(), OrderChildLogEnum.Type.GO_TO_RECEIVE.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.GO_TO_RECEIVE.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.GO_TO_RECEIVE.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -397,27 +421,31 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -397,27 +421,31 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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.ARRIVE_RECEIVE.getCode())) {
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())){ return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
// 距离验证 // 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(), orderGoods.getReceiveLatitude().doubleValue(), OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000; PerformanceResultEnum.DATA_NOT_FIND);
if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()){ 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); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR);
} }
...@@ -425,8 +453,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -425,8 +453,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_RECEIVE.getCode(), OrderChildLogEnum.Type.ARRIVE_RECEIVE.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.ARRIVE_RECEIVE.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.ARRIVE_RECEIVE.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -437,37 +465,38 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -437,37 +465,38 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){ Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED); 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); 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); updateLoadFirst(param, orderChild, orderGoods);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(), OrderChildLogEnum.Type.LOAD.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.LOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else { } else {
updateReload(param, orderChild, orderGoods); updateReload(param, orderChild, orderGoods);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(), OrderChildLogEnum.Type.RELOAD.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.RELOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
} }
...@@ -475,10 +504,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -475,10 +504,13 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); 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 now = LocalDateTime.now();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadBeginTime()).get(); // LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadEndTime()).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)){ // if (now.isBefore(beginTime) || now.isAfter(endTime)){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIME_ERROR); // throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIME_ERROR);
// } // }
...@@ -538,7 +570,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -538,7 +570,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildImageDao.deleteLoad(childNo); orderChildImageDao.deleteLoad(childNo);
orderChildImageDao.batchSaveEntity(imageList); orderChildImageDao.batchSaveEntity(imageList);
} }
@Override @Override
...@@ -549,18 +580,17 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -549,18 +580,17 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){ Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
} }
...@@ -568,20 +598,23 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -568,20 +598,23 @@ public class OrderChildServiceImpl implements OrderChildService {
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR); // 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); 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()); loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(), OrderChildPoundAuditEnum.Status.AUDIT.getMsg(),
OrderChildLogEnum.CreateType.DRIVER.getCode(),loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else { } else {
updateReUnload(param, orderChild); 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()); 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 { ...@@ -589,10 +622,13 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); 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 now = LocalDateTime.now();
// LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadBeginTime()).get(); // LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() +
// LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadEndTime()).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)){ // if (now.isBefore(beginTime) || now.isAfter(endTime)){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_TIME_ERROR); // throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_TIME_ERROR);
// } // }
...@@ -630,14 +666,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -630,14 +666,13 @@ public class OrderChildServiceImpl implements OrderChildService {
// 更新出车状态 // 更新出车状态
updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId()); updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId());
} }
private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) { private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) {
String childNo = param.getChildNo(); 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); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT);
} }
...@@ -671,7 +706,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -671,7 +706,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildImageDao.batchSaveEntity(imageList); orderChildImageDao.batchSaveEntity(imageList);
orderChildPoundAuditDao.saveEntity(audit); orderChildPoundAuditDao.saveEntity(audit);
} }
@Override @Override
...@@ -682,37 +716,39 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -682,37 +716,39 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode()) ||
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){ Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED); 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); 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.AUDIT.getCode())) {
if (!Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){ return;
}
if (!Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); 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); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
} }
// if (!loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){ // if (!loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR); // 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<>(); List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) { for (String item : param.getLoadImageList()) {
...@@ -761,11 +797,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -761,11 +797,13 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundAuditDao.saveEntity(audit); orderChildPoundAuditDao.saveEntity(audit);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getCode(), OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.RELOAD_AND_REUNLOAD.getMsg(), loginUserInfo.getUserNo(),
loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(), OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildLogEnum.CreateType.DRIVER.getCode(),loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -776,29 +814,29 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -776,29 +814,29 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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); 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); 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); 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()); long count = orderChildDao.countOfTransitByOrderGoodsNo(orderChild.getOrderGoodsNo());
// 更新货单完成状态 // 更新货单完成状态
...@@ -811,8 +849,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -811,8 +849,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusDriverConfirm(orderChild.getTruckId()); updateDriverOrderStatusDriverConfirm(orderChild.getTruckId());
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -824,35 +862,38 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -824,35 +862,38 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (Objects.equals(orderChild.getDriverUserNo(), userNo)){ PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} if (Objects.equals(orderChild.getDriverUserNo(), userNo)) {
else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ } else if (Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_OPERATION_FORBID);
} } else {
else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())){ if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())) {
return; return;
} }
// 禁止取消 // 禁止取消
if (orderChild.getStatus()>=OrderChildEnum.Status.LOAD.getCode()) { if (orderChild.getStatus() >= OrderChildEnum.Status.LOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID); 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; OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){ if (Objects.equals(orderGoods.getPendingOrderWay(),
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo()) OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(),
orderChild.getTruckNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
} }
orderChild.setCancelRemark(param.getRemark()); orderChild.setCancelRemark(param.getRemark());
...@@ -872,8 +913,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -872,8 +913,8 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId()); updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(), OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
@Override @Override
...@@ -884,24 +925,27 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -884,24 +925,27 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now(); 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; return;
} }
// 禁止取消 (卸车前取消) // 禁止取消 (卸车前取消)
if (orderChild.getStatus()>=OrderChildEnum.Status.UNLOAD.getCode()) { if (orderChild.getStatus() >= OrderChildEnum.Status.UNLOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID); 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; OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){ if (Objects.equals(orderGoods.getPendingOrderWay(),
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo()) OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(),
orderChild.getTruckNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
} }
orderChild.setCancelRemark(param.getRemark()); orderChild.setCancelRemark(param.getRemark());
...@@ -909,7 +953,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -909,7 +953,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setFinishTime(now); orderChild.setFinishTime(now);
orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode()); orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
// 返回吨数 // 返回吨数
updateOrderGoodsAmountReturn(orderChild, orderGoods); updateOrderGoodsAmountReturn(orderChild, orderGoods);
...@@ -922,8 +965,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -922,8 +965,9 @@ public class OrderChildServiceImpl implements OrderChildService {
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId()); updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志 // 日志
orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(), orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(), loginUserInfo.getUserNo(),
loginUserInfo.getUserName());
} }
@Override @Override
...@@ -931,30 +975,36 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -931,30 +975,36 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo(); Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
OrderChildVO result = orderChildStruct.convert(orderChild); 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); Optional<OrderChildPoundAudit> poundAuditDetail = orderChildPoundAuditDao.getPoundAuditDetail(childNo);
result.setPoundRemark(poundAuditDetail.orNull().getRemark()); result.setPoundRemark(poundAuditDetail.orNull().getRemark());
result.setPoundRejectType(poundAuditDetail.orNull().getRejectType()); result.setPoundRejectType(poundAuditDetail.orNull().getRejectType());
} }
List<OrderChildImage> imageList = orderChildImageDao.listLoadAndUnload(childNo).orElse(new ArrayList<>()); 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.setLoadImageList(imageList.stream().filter(
result.setUnloadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList())); 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()); Optional<FeignAddressVO> sendAndReceiveAddress = addressService.getSendAndReceiveAddress(
if (sendAndReceiveAddress.isPresent()){ orderChild.getSendAddressId(), orderChild.getReceiveAddressId());
if (sendAndReceiveAddress.isPresent()) {
result.setSendAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getSendAddress())); result.setSendAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getSendAddress()));
} }
if (sendAndReceiveAddress.isPresent()){ if (sendAndReceiveAddress.isPresent()) {
result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress())); result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress()));
} }
...@@ -968,7 +1018,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -968,7 +1018,6 @@ public class OrderChildServiceImpl implements OrderChildService {
param.setUserNo(userNo); param.setUserNo(userNo);
return orderChildDao.pageOrderChildOfDriver(param); return orderChildDao.pageOrderChildOfDriver(param);
} }
@Override @Override
...@@ -986,9 +1035,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -986,9 +1035,10 @@ public class OrderChildServiceImpl implements OrderChildService {
Long userNo = loginUserInfo.getUserNo(); Long userNo = loginUserInfo.getUserNo();
String childNo = param.getChildNo(); String childNo = param.getChildNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
...@@ -1003,21 +1053,26 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1003,21 +1053,26 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo(); Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
OrderChildPoundInfoVO result = orderChildPoundStruct.convert(orderChild); 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()); result.setPoundRemark(orderChildPoundAuditDao.getPoundAuditDetail(childNo).orNull().getRemark());
} }
List<OrderChildImage> imageList = orderChildImageDao.listLoadAndUnload(childNo).orElse(new ArrayList<>()); 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.setLoadImageList(imageList.stream().filter(
result.setUnloadImageList(imageList.stream().filter(item->Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())).map(item->item.getImage()).collect(Collectors.toList())); 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; return result;
} }
...@@ -1027,9 +1082,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1027,9 +1082,10 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo(); Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
&& !Objects.equals(orderChild.getTruckOwnUserNo(), userNo)){ if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
} }
...@@ -1038,11 +1094,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1038,11 +1094,10 @@ public class OrderChildServiceImpl implements OrderChildService {
return result; return result;
} }
/** /**
* 更新货单数据 * 更新货单数据
*/ */
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight){ private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight) {
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
...@@ -1053,25 +1108,27 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1053,25 +1108,27 @@ public class OrderChildServiceImpl implements OrderChildService {
/** /**
* 取消返吨数 * 取消返吨数
*/ */
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){ private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods) {
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1; int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo()) - 1;
Integer status = null; Integer status = null;
if (count == 0){ if (count == 0) {
status = OrderGoodsStatusEnum.Status.PAYING.getCode(); status = OrderGoodsStatusEnum.Status.PAYING.getCode();
} } else {
else {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); 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){ private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif) {
if (dif.compareTo(BigDecimal.ZERO) == 0){return;} if (dif.compareTo(BigDecimal.ZERO) == 0) {
return;
}
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
...@@ -1081,8 +1138,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1081,8 +1138,10 @@ public class OrderChildServiceImpl implements OrderChildService {
/** /**
* 更新定向单状态 (接单) * 更新定向单状态 (接单)
*/ */
private void updateOrderGoodsDirect(OrderGoodsTruckBind orderGoodsTruckBind){ private void updateOrderGoodsDirect(OrderGoodsTruckBind orderGoodsTruckBind) {
if (orderGoodsTruckBind == null) {return;} if (orderGoodsTruckBind == null) {
return;
}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.ORDER.getCode()); orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.ORDER.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind); orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
...@@ -1091,7 +1150,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -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()); orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind); orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
} }
...@@ -1099,8 +1158,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1099,8 +1158,10 @@ public class OrderChildServiceImpl implements OrderChildService {
/** /**
* 更新定向派单状态 (取消) * 更新定向派单状态 (取消)
*/ */
private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind){ private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind) {
if (orderGoodsTruckBind == null) {return;} if (orderGoodsTruckBind == null) {
return;
}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode()); orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind); orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
...@@ -1109,52 +1170,62 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1109,52 +1170,62 @@ public class OrderChildServiceImpl implements OrderChildService {
/** /**
* 更新货单完成状态 * 更新货单完成状态
*/ */
private void updateOrderGoodsComplete(OrderGoods orderGoods, long count){ private void updateOrderGoodsComplete(OrderGoods orderGoods, long count) {
if (count > 1) {return;} 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());
} }
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){ private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad) {
if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) {return false;} if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) {
return false;
}
return true; return true;
} }
/** /**
* 取消检测 * 取消检测
*/ */
private boolean cancelCountCheck(Long userNo){ private boolean cancelCountCheck(Long userNo) {
LocalDateTime startTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 00:00:00").get(); LocalDateTime startTime = DateUtils.parseDateTime(
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 23:59:59").get(); 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); long count = orderChildDao.countOfCancel(userNo, startTime, endTime);
return count<10; return count < 10;
} }
/** /**
* 运单拉运吨数计算 * 运单拉运吨数计算
*/ */
private BigDecimal orderChildWeightCalc(OrderChild orderChild){ private BigDecimal orderChildWeightCalc(OrderChild orderChild) {
if (orderChild.getLoadNet() == null) {return orderChild.getTruckLoad();} if (orderChild.getLoadNet() == null) {
else {return orderChild.getLoadNet();} return orderChild.getTruckLoad();
} else {
return orderChild.getLoadNet();
}
} }
/** /**
* 运费计算 * 运费计算
*/ */
private BigDecimal orderChildFreightCalc(OrderChild orderChild){ private BigDecimal orderChildFreightCalc(OrderChild orderChild) {
BigDecimal totalFreight = orderChild.getFreightPrice().multiply(orderChild.getWeight()); BigDecimal totalFreight = orderChild.getFreightPrice().multiply(orderChild.getWeight());
if (orderChild.getUnloadNet() != null){ if (orderChild.getUnloadNet() != null) {
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight()); 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)); totalFreight = totalFreight.add(orderChild.getLossPrice().multiply(dif));
} }
} }
...@@ -1162,41 +1233,40 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1162,41 +1233,40 @@ public class OrderChildServiceImpl implements OrderChildService {
return totalFreight.setScale(0, RoundingMode.HALF_UP); 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); 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); 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); 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); driverService.updateOrderStatus(0L, 0, truckId, 1);
} }
/** /**
* 创建运单号 * 创建运单号
*/ */
private String childNoGenerate(){ private String childNoGenerate() {
return "CYD"+uniqueOrderNumService.getUniqueOrderNum(LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(),LocalDateTimeUtils.DATE_DAY)); return "CYD" + uniqueOrderNumService.getUniqueOrderNum(
LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), LocalDateTimeUtils.DATE_DAY));
} }
@Override @Override
...@@ -1211,19 +1281,21 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1211,19 +1281,21 @@ public class OrderChildServiceImpl implements OrderChildService {
@Override @Override
public List<OrderChildPCVO> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) { public List<OrderChildPCVO> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) {
List<OrderChild> orderChildren = orderChildDao.getOrderChildInfoByOrderGoodsNo(orderGoodsNo) List<OrderChild> orderChildren = orderChildDao.getOrderChildInfoByOrderGoodsNo(orderGoodsNo).orElseThrow(
.orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
return orderChildStruct.convertList(orderChildren); return orderChildStruct.convertList(orderChildren);
} }
@Override @Override
public CarrierOrderChildDetailVO getCarrierOrderChildDetail(String childNo) { 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); 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()); carrierOrderChildDetailVO.setExtractWeight(orderGoods.getExtractWeight());
//磅单审核数据 //磅单审核数据
...@@ -1235,34 +1307,36 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1235,34 +1307,36 @@ public class OrderChildServiceImpl implements OrderChildService {
carrierOrderChildDetailVO.setChildLogs(orderChildLogStruct.convert(orderChildLog)); carrierOrderChildDetailVO.setChildLogs(orderChildLogStruct.convert(orderChildLog));
//应付运费 //应付运费
BigDecimal payableFreight=BigDecimal.ZERO; BigDecimal payableFreight = BigDecimal.ZERO;
if(Objects.nonNull(orderChild.getLoadNet())){ if (Objects.nonNull(orderChild.getLoadNet())) {
payableFreight = orderChild.getLoadNet() payableFreight = orderChild.getLoadNet().multiply(orderChild.getFreightPrice()).setScale(0,
.multiply(orderChild.getFreightPrice()) BigDecimal.ROUND_HALF_UP);
.setScale(0,BigDecimal.ROUND_HALF_UP);
} }
//亏吨扣款(元) //亏吨扣款(元)
BigDecimal lossDeduction=BigDecimal.ZERO; BigDecimal lossDeduction = BigDecimal.ZERO;
if(Objects.nonNull(orderChild.getLoadNet()) && Objects.nonNull(orderChild.getUnloadNet())){ if (Objects.nonNull(orderChild.getLoadNet()) && Objects.nonNull(orderChild.getUnloadNet())) {
if(orderChild.getLoadNet().compareTo(orderChild.getUnloadNet()) >0){ if (orderChild.getLoadNet().compareTo(orderChild.getUnloadNet()) > 0) {
lossDeduction = carrierOrderChildDetailVO.getLossPrice() lossDeduction = carrierOrderChildDetailVO.getLossPrice().multiply(
.multiply(orderChild.getLoadNet().subtract(orderChild.getUnloadNet())) orderChild.getLoadNet().subtract(orderChild.getUnloadNet())).setScale(0,
.setScale(0,BigDecimal.ROUND_HALF_UP); BigDecimal.ROUND_HALF_UP);
} }
} }
//实付运费(元) //实付运费(元)
BigDecimal realFreight=payableFreight.subtract(lossDeduction); BigDecimal realFreight = payableFreight.subtract(lossDeduction);
carrierOrderChildDetailVO.setPayableFreight(payableFreight); carrierOrderChildDetailVO.setPayableFreight(payableFreight);
carrierOrderChildDetailVO.setLossDeduction(lossDeduction); carrierOrderChildDetailVO.setLossDeduction(lossDeduction);
carrierOrderChildDetailVO.setRealFreight(realFreight); carrierOrderChildDetailVO.setRealFreight(realFreight);
//磅单图片 //磅单图片
List<OrderChildImage> loadImages = orderChildImageDao.getImages(childNo, OrderChildImage.Type.LOAD.getCode()); List<OrderChildImage> loadImages = orderChildImageDao.getImages(childNo, OrderChildImage.Type.LOAD.getCode());
List<OrderChildImage> unloadImages = orderChildImageDao.getImages(childNo, OrderChildImage.Type.UNLOAD.getCode()); List<OrderChildImage> unloadImages = orderChildImageDao.getImages(childNo,
carrierOrderChildDetailVO.setLoadImageList(loadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList())); OrderChildImage.Type.UNLOAD.getCode());
carrierOrderChildDetailVO.setUnloadImageList(unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList())); carrierOrderChildDetailVO.setLoadImageList(
loadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
carrierOrderChildDetailVO.setUnloadImageList(
unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
return carrierOrderChildDetailVO; return carrierOrderChildDetailVO;
} }
...@@ -1281,14 +1355,13 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1281,14 +1355,13 @@ public class OrderChildServiceImpl implements OrderChildService {
@Override @Override
public OrderChildBussInfoVO getOrderChildBussInfo(String truckNo) { public OrderChildBussInfoVO getOrderChildBussInfo(String truckNo) {
List<OrderChild> childList = orderChildDao.getOrderChildBussInfo(truckNo); List<OrderChild> childList = orderChildDao.getOrderChildBussInfo(truckNo);
if(CollectionUtils.isEmpty(childList)){ if (CollectionUtils.isEmpty(childList)) {
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(new BigDecimal("0")) OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(
.completeCarryWeight(new BigDecimal("0")).loseWeight(new BigDecimal("0")).loseRate(new BigDecimal("0")) new BigDecimal("0")).completeCarryWeight(new BigDecimal("0")).loseWeight(
.overRate(new BigDecimal("0")).build(); new BigDecimal("0")).loseRate(new BigDecimal("0")).overRate(new BigDecimal("0")).build();
return vo; return vo;
} }
//运单完成数量 //运单完成数量
int complateNum = childList.size(); int complateNum = childList.size();
//历史装车总量 //历史装车总量
...@@ -1309,25 +1382,325 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1309,25 +1382,325 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
//亏吨数量总计 //亏吨数量总计
BigDecimal loseWeight = BigDecimal.ZERO; BigDecimal loseWeight = BigDecimal.ZERO;
BigDecimal overWeight = 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); //超吨 overWeight = complateCarryWeight.subtract(historyLoadWeight); //超吨
}else{ } else {
loseWeight = historyLoadWeight.subtract(complateCarryWeight);//亏吨 loseWeight = historyLoadWeight.subtract(complateCarryWeight);//亏吨
} }
BigDecimal loseRate = BigDecimal.ZERO; BigDecimal loseRate = BigDecimal.ZERO;
BigDecimal overRate = BigDecimal.ZERO; BigDecimal overRate = BigDecimal.ZERO;
//亏吨率 //亏吨率
if(historyLoadWeight.compareTo(BigDecimal.ZERO) != 0){ if (historyLoadWeight.compareTo(BigDecimal.ZERO) != 0) {
loseRate = loseWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP).multiply(new BigDecimal("100")); loseRate = loseWeight.divide(historyLoadWeight, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
overRate = overWeight.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) OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(complateNum).historyLoadWeight(
.loseWeight(loseWeight).loseRate(loseRate).overRate(overRate).build(); historyLoadWeight).completeCarryWeight(complateCarryWeight).loseWeight(loseWeight).loseRate(
loseRate).overRate(overRate).build();
return vo; 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; package com.clx.performance.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair; 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.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.*;
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.conn.ClientConnectionManager; 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.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity; 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.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.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
...@@ -30,8 +41,17 @@ import java.util.ArrayList; ...@@ -30,8 +41,17 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j
public class HttpUtils { 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 { ...@@ -307,4 +327,84 @@ public class HttpUtils {
throw new RuntimeException(ex); 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论