提交 0454d134 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v20.6_carrier_station_pound_20240802' into dev

# Conflicts: # performance-api/src/main/java/com/clx/performance/feign/PerformanceSDKFeign.java # performance-api/src/main/java/com/clx/performance/vo/pc/OrderGoodsVO.java # performance-web/pom.xml # performance-web/src/main/java/com/clx/performance/controller/feign/PerformanceSdkFeignController.java # performance-web/src/main/java/com/clx/performance/controller/temp/TempTraceController.java # performance-web/src/main/java/com/clx/performance/dao/AppDao.java # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/mapper/AppMapper.java # performance-web/src/main/java/com/clx/performance/model/App.java # performance-web/src/main/java/com/clx/performance/service/OrderChildService.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderGoodsServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
package com.clx.performance.feign; package com.clx.performance.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction; import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO; import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
...@@ -49,6 +50,7 @@ public interface PerformanceSDKFeign { ...@@ -49,6 +50,7 @@ public interface PerformanceSDKFeign {
Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action); Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action);
@GetMapping(value = {"clx-performance/feign/sdk/getOrderCanExtractWeight"}) @GetMapping(value = {"clx-performance/feign/sdk/getOrderCanExtractWeight"})
Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo); Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo);
......
...@@ -6,7 +6,6 @@ import lombok.NoArgsConstructor; ...@@ -6,7 +6,6 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/** /**
* 装车范围校验检查参数 * 装车范围校验检查参数
...@@ -22,7 +21,6 @@ public class NeedAlertSuperviseInfoParam { ...@@ -22,7 +21,6 @@ public class NeedAlertSuperviseInfoParam {
@ApiModelProperty(value = "类型 1-监装 2-监卸", example = "1") @ApiModelProperty(value = "类型 1-监装 2-监卸", example = "1")
@NotNull(message = "类型不能为空")
private Integer type; private Integer type;
} }
...@@ -272,6 +272,9 @@ public class OrderChildVO { ...@@ -272,6 +272,9 @@ public class OrderChildVO {
@ApiModelProperty(value = "监装联系人电话") @ApiModelProperty(value = "监装联系人电话")
private String superviseMobile; private String superviseMobile;
@ApiModelProperty(value = "是否解除监装限制 0 未解除 1 解除")
private Integer removeLoadLimitStatus;
@ApiModelProperty(value = "发货地采样照片") @ApiModelProperty(value = "发货地采样照片")
public List<String> getSendSamplingPicList() { public List<String> getSendSamplingPicList() {
......
...@@ -171,6 +171,7 @@ public class OrderGoodsVO { ...@@ -171,6 +171,7 @@ public class OrderGoodsVO {
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示") @ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0; private Integer goodsOrderDetailShow = 0;
/* 20240730 增加货源地信息 */ /* 20240730 增加货源地信息 */
@ApiModelProperty(value = "货源地现场联系人") @ApiModelProperty(value = "货源地现场联系人")
......
...@@ -103,16 +103,14 @@ ...@@ -103,16 +103,14 @@
<artifactId>smart-weight-sdk</artifactId> <artifactId>smart-weight-sdk</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.msl</groupId>
<artifactId>open-starter</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.clx.cy</groupId> <groupId>com.clx.cy</groupId>
<artifactId>purchase-manage-sdk</artifactId> <artifactId>purchase-manage-sdk</artifactId>
</dependency> </dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.msl</groupId>--> <!-- <groupId>com.msl</groupId>-->
<!-- <artifactId>cache-spring-boot-starter</artifactId>--> <!-- <artifactId>cache-spring-boot-starter</artifactId>-->
......
...@@ -126,7 +126,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -126,7 +126,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
BigDecimal residueTransportWeight = ApplicationContextUtils.getBean(OrderGoodsService.class). BigDecimal residueTransportWeight = ApplicationContextUtils.getBean(OrderGoodsService.class).
calcOrderGoodsResidueWeight(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());; calcOrderGoodsResidueWeight(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());;
if (residueTransportWeight.compareTo(BigDecimal.ZERO) == 0) { if (residueTransportWeight.compareTo(BigDecimal.ZERO) <= 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo); List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
if (CollectionUtil.isNotEmpty(orderChildren)) { if (CollectionUtil.isNotEmpty(orderChildren)) {
//更新货单已完结 //更新货单已完结
......
...@@ -14,7 +14,6 @@ import org.springframework.stereotype.Component; ...@@ -14,7 +14,6 @@ import org.springframework.stereotype.Component;
@Component @Component
public class LoadAppConfig { public class LoadAppConfig {
private App purchaseManageApp; private App purchaseManageApp;
@Autowired @Autowired
......
...@@ -42,6 +42,15 @@ public class RedisConstants { ...@@ -42,6 +42,15 @@ public class RedisConstants {
*/ */
public static final String LINE_WARN_WEATHER = "clx-performance:lineWarn:weather:"; public static final String LINE_WARN_WEATHER = "clx-performance:lineWarn:weather:";
/**
* 电子围栏短信通知 未装车
*/
public static final String NOTICE_MESSAGE_LIMIT_UNLOAD = "clx-performance:notice_message_limit_unload:";
/**
* 电子围栏短信通知 未监装
*/
public static final String NOTICE_MESSAGE_LIMIT_UNSUPERVISED = "clx-performance:notice_message_limit_unsupervised:";
/** /**
* 订单最后一车 * 订单最后一车
......
...@@ -200,9 +200,14 @@ public class AppDriverOrderChildController { ...@@ -200,9 +200,14 @@ public class AppDriverOrderChildController {
public Result<OrderChildLoadRangeCheckResultVO> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) { public Result<OrderChildLoadRangeCheckResultVO> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) {
return orderChildService.loadRangeCheck(param).toResult(); return orderChildService.loadRangeCheck(param).toResult();
} }
@ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰") @ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰")
@PostMapping("/needAlertSuperviseInfo") @PostMapping("/needAlertSuperviseInfo")
public Result<NeedAlertSuperviseInfoResultVO> needAlertSuperviseInfo(@RequestBody @Validated NeedAlertSuperviseInfoParam param) { public Result<NeedAlertSuperviseInfoResultVO> needAlertSuperviseInfo(@RequestBody @Validated NeedAlertSuperviseInfoParam param) {
// todo :jiangwujie 临时设置type 前端给type后删除
if (param.getType() == null) {
param.setType(1);
}
return Result.ok(orderChildService.needAlertSuperviseInfo(param)); return Result.ok(orderChildService.needAlertSuperviseInfo(param));
} }
......
package com.clx.performance.controller.feign; package com.clx.performance.controller.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction; import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction; import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO; import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
...@@ -31,6 +33,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -31,6 +33,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON; import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON;
...@@ -61,6 +64,8 @@ public class PerformanceSdkFeignController { ...@@ -61,6 +64,8 @@ public class PerformanceSdkFeignController {
private final OrderService orderService; private final OrderService orderService;
private final PerformanceProgressService performanceProgressService;
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆") @ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre") @PostMapping("/ownCancelOrderPre")
......
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.dto.gd.GdRouteDTO; import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam; import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.temp.DriverTraceAddParam; import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam; import com.clx.performance.param.temp.TruckTraceAddParam;
...@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -134,4 +136,16 @@ public class TempTraceController { ...@@ -134,4 +136,16 @@ public class TempTraceController {
@ApiOperation(value = "获取车辆最新位置信息", notes = "<br>By:姜武杰")
@GetMapping("/calDistance")
public Result<Integer> getTruckLatestPos(
@RequestParam("l1") @NotNull(message = "当前经度不能为空") BigDecimal l1,
@RequestParam("l2") @NotNull(message = "当前纬度不能为空") BigDecimal l2,
@RequestParam("l3") @NotNull(message = "货源经度不能为空") BigDecimal l3,
@RequestParam("l4") @NotNull(message = "货源纬度不能为空") BigDecimal l4
) {
return Result.ok( gdService.getShortestRouteDistance(l1,l2,l3,l4));
}
} }
...@@ -5,11 +5,7 @@ import com.clx.performance.mapper.AppMapper; ...@@ -5,11 +5,7 @@ import com.clx.performance.mapper.AppMapper;
import com.clx.performance.model.App; import com.clx.performance.model.App;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
public interface AppDao extends BaseDao<AppMapper, App, Integer> { public interface AppDao extends BaseDao<AppMapper, App, Integer> {
} }
...@@ -212,6 +212,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -212,6 +212,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listChidNosByStatus(List<Integer> status); List<OrderChild> listChidNosByStatus(List<Integer> status);
List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList); List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList);
void batchUpdateCancel(List<OrderChild> canCancelOrderChildList); void batchUpdateCancel(List<OrderChild> canCancelOrderChildList);
......
...@@ -699,6 +699,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -699,6 +699,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
); );
} }
@Override @Override
public List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList) { public List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList) {
return baseMapper.countValidByOrderGoodsNoList(orderGoodsList); return baseMapper.countValidByOrderGoodsNoList(orderGoodsList);
......
...@@ -4,10 +4,6 @@ package com.clx.performance.mapper; ...@@ -4,10 +4,6 @@ package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.App; import com.clx.performance.model.App;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
public interface AppMapper extends BaseMapper<App> { public interface AppMapper extends BaseMapper<App> {
} }
...@@ -13,11 +13,7 @@ import lombok.experimental.Accessors; ...@@ -13,11 +13,7 @@ import lombok.experimental.Accessors;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
@Getter @Getter
@Setter @Setter
@Accessors(chain = true) @Accessors(chain = true)
......
...@@ -119,4 +119,6 @@ public interface OrderChildService { ...@@ -119,4 +119,6 @@ public interface OrderChildService {
NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param); NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param);
} }
...@@ -516,7 +516,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -516,7 +516,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
OrderChildEnum.Status.ARRIVE_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.UNLOAD.getCode()) OrderChildEnum.Status.UNLOAD.getCode())
.contains(orderChild.getStatus())) { .contains(orderChild.getStatus())) {
log.error("运单:{} 状态:{}不在【装车成功】【前往目的地】【到达目的地】【收货待确认】范围中,不允许取消", orderChildNo, orderChild.getStatus()); log.info("运单:{} 状态:{}不在【装车成功】【前往目的地】【到达目的地】【收货待确认】范围中,不允许取消", orderChildNo, orderChild.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作"); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作");
} }
...@@ -579,6 +579,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -579,6 +579,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void removeLoadLimit(ArtificialCancelOrderParam param) { public void removeLoadLimit(ArtificialCancelOrderParam param) {
OrderChild orderChild = orderChildDao.getByChildNo(param.getOrderChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(param.getOrderChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
//判断运单状态【已接单】【前往货源地】【到达货源地】时可对该运单解除装车限制,否则toast:不可操作 //判断运单状态【已接单】【前往货源地】【到达货源地】时可对该运单解除装车限制,否则toast:不可操作
...@@ -586,7 +587,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -586,7 +587,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode()) OrderChildEnum.Status.ARRIVE_SEND.getCode())
.contains(orderChild.getStatus())) { .contains(orderChild.getStatus())) {
log.error("运单:{} 状态:{}不在【已接单】【前往货源地】【到达货源地】范围中,不允许解除装车限制", param.getOrderChildNo(), orderChild.getStatus()); log.info("运单:{} 状态:{}不在【已接单】【前往货源地】【到达货源地】范围中,不允许解除装车限制", param.getOrderChildNo(), orderChild.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作"); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作");
} }
......
...@@ -76,6 +76,7 @@ import com.clx.user.enums.idcard.IdCardEnum; ...@@ -76,6 +76,7 @@ import com.clx.user.enums.idcard.IdCardEnum;
import com.clx.user.feign.DocumentFeign; import com.clx.user.feign.DocumentFeign;
import com.clx.user.feign.UserClxFeign; import com.clx.user.feign.UserClxFeign;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam; import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.clx.user.vo.pc.auth.AuthVo; import com.clx.user.vo.pc.auth.AuthVo;
...@@ -103,7 +104,9 @@ import com.tencentcloudapi.ocr.v20181119.models.ItemInfo; ...@@ -103,7 +104,9 @@ import com.tencentcloudapi.ocr.v20181119.models.ItemInfo;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Request; import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Request;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response; import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.exception.ExceptionUtils;
...@@ -250,6 +253,12 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -250,6 +253,12 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired @Autowired
private DocumentFeign documentFeign; private DocumentFeign documentFeign;
@Autowired @Autowired
private OrderChildWeighPictureDao pictureDao;
@Autowired
private OrderWeightService orderWeightService;
@Autowired
private UserClxFeign userClxFeign; private UserClxFeign userClxFeign;
@Autowired @Autowired
private OrderWeightService orderWeightService; private OrderWeightService orderWeightService;
...@@ -1739,9 +1748,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1739,9 +1748,9 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setSendSamplingPic(orderInfoFeign.getSendSamplingPic()); result.setSendSamplingPic(orderInfoFeign.getSendSamplingPic());
result.setSendQualityPosition(orderInfoFeign.getSendQualityPosition()); result.setSendQualityPosition(orderInfoFeign.getSendQualityPosition());
result.setSendSamplingVideo(orderInfoFeign.getSendSamplingVideo()); result.setSendSamplingVideo(orderInfoFeign.getSendSamplingVideo());
Object[] superviseInfo = getSuperviseInfo(orderChild.getOrderNo(), orderChild.getChildNo()); SuperviseInfo superviseInfo = getSuperviseInfo(orderChild.getOrderNo(), orderChild.getChildNo());
result.setSuperviseContacts(superviseInfo != null ? (String) superviseInfo[0] : null); result.setSuperviseContacts(superviseInfo != null ? superviseInfo.getSuperviseContacts() : null);
result.setSuperviseMobile(superviseInfo != null ? (String) superviseInfo[1] : null); result.setSuperviseMobile(superviseInfo != null ? superviseInfo.getSuperviseMobile() : null);
//查询结算信息 //查询结算信息
Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo); Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo);
...@@ -1771,13 +1780,22 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1771,13 +1780,22 @@ public class OrderChildServiceImpl implements OrderChildService {
return result; return result;
} }
@Data
@AllArgsConstructor
@NoArgsConstructor
static class SuperviseInfo {
private String superviseContacts;
private String superviseMobile;
private String taskAddress;
}
/** /**
* 获取监装 * 获取监装
* @param orderNo * @param orderNo
* @param childNo * @param childNo
* @return * @return
*/ */
private Object[] getSuperviseInfo(String orderNo, String childNo) { private SuperviseInfo getSuperviseInfo(String orderNo, String childNo) {
NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO(); NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO();
App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息 App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息
//组装配置信息 //组装配置信息
...@@ -1794,24 +1812,56 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1794,24 +1812,56 @@ public class OrderChildServiceImpl implements OrderChildService {
return null; return null;
} }
SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息 SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息
if (Objects.nonNull(supervisionLoadInfo)) {//有监装信息 if (Objects.isNull(supervisionLoadInfo)) {//有监装信息
//通过运单号查询监装监卸子任务状态 return null;
SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction(); }
truckAction.setChildNo(childNo); return new SuperviseInfo(supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress());
truckAction.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode()); }
Result<SupervisionLoadTruckInfoDto> supervisionLoadTruckInfoDto = OpenClient.doAction(config, truckAction);
if (!supervisionLoadTruckInfoDto.succeed()) {//接口调用失败
return null;
}
SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData();
if (Objects.nonNull(supervisionLoadTruckInfo)) {
if (supervisionLoadTruckInfo.getLoadStatus()) {
return new Object[]{supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress()};
}
}
/**
* 获取监装
* @param orderNo
* @param childNo
* @return
*/
private SuperviseInfo getSuperviseInfoWithSubStatus(String orderNo, String childNo, String truckNo) {
NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO();
App app = appConfig.getPurchaseManageApp();//对接马上来供应链配置信息
//组装配置信息
RequestConfig config = new RequestConfig()
.setAppId(app.getAppNo())
.setAppKey(app.getAppKey())
.setGatewayUrl(app.getCallback());
//通过订单号查询监装监卸信息
SupplyChainSupervisionLoadAction action = new SupplyChainSupervisionLoadAction();
action.setOrderNo(orderNo);
action.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode());
Result<SupervisionLoadInfoDto> supervisionLoadInfoDto = OpenClient.doAction(config, action);
if (!supervisionLoadInfoDto.succeed()) {//接口调用失败
return null;
} }
return null; SupervisionLoadInfoDto supervisionLoadInfo = supervisionLoadInfoDto.getData();//监装信息
if (Objects.isNull(supervisionLoadInfo)) {//有监装信息
return null;
}
//通过运单号查询监装监卸子任务状态
SupplyChainSupervisionLoadTruckAction truckAction = new SupplyChainSupervisionLoadTruckAction();
truckAction.setChildNo(childNo);
truckAction.setType(OrderChildEnum.SuperviseTypeEnum.SUPERVISE_LOAD.getCode());
Result<SupervisionLoadTruckInfoDto> supervisionLoadTruckInfoDto = OpenClient.doAction(config, truckAction);
if (!supervisionLoadTruckInfoDto.succeed()) {//接口调用失败
return null;
}
//监装子任务状态
SupervisionLoadTruckInfoDto supervisionLoadTruckInfo = supervisionLoadTruckInfoDto.getData();
if (Objects.isNull(supervisionLoadTruckInfo) || !supervisionLoadTruckInfo.getLoadStatus()) {
return null;
}
//判断当前卡车是否是监装车辆
if (!Objects.equals(truckNo, supervisionLoadTruckInfo.getTruckNo())) {
return null;
}
return new SuperviseInfo(supervisionLoadInfo.getTaskContracts(), supervisionLoadInfo.getTaskMobile(), supervisionLoadInfo.getTaskAddress());
} }
//查看运单车辆是否开启了中交兴路 //查看运单车辆是否开启了中交兴路
...@@ -2198,7 +2248,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2198,7 +2248,9 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
if (dif.compareTo(BigDecimal.ZERO) != 0) { if (dif.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(orderGoods.getOrderNo()); BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(orderGoods.getOrderNo());
if(orderResidueWeight.compareTo(BigDecimal.ZERO) <= 0){
//增加吨数 && 订单剩余吨数小于等于0 ,则提示吨数不足
if(dif.compareTo(BigDecimal.ZERO) > 0 && orderResidueWeight.compareTo(BigDecimal.ZERO) <= 0){
throw new ServiceSystemException(ORDER_WEIGHT_LACK); throw new ServiceSystemException(ORDER_WEIGHT_LACK);
} }
//运单修改装车吨数,从货单进行扣减 //运单修改装车吨数,从货单进行扣减
...@@ -2983,15 +3035,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2983,15 +3035,15 @@ public class OrderChildServiceImpl implements OrderChildService {
* @Param [truckNo, beginLongitude, beginLatitude, endLongitude, endLatitude] * @Param [truckNo, beginLongitude, beginLatitude, endLongitude, endLatitude]
* @return * @return
**/ **/
public GdRouteDTO getGdRoute(String truckNo, BigDecimal beginLongitude, BigDecimal beginLatitude, public Integer getGdRoute(String truckNo, BigDecimal beginLongitude, BigDecimal beginLatitude,
BigDecimal endLongitude, BigDecimal endLatitude) { BigDecimal endLongitude, BigDecimal endLatitude) {
List<GdRouteDTO> gdRouteDTOS = null; Integer distance = null;
try { try {
gdRouteDTOS = gdService.getRoute(beginLongitude, beginLatitude, endLongitude, endLatitude); distance = gdService.getShortestRouteDistance(beginLongitude, beginLatitude, endLongitude, endLatitude);
} catch (ServiceSystemException e) { } catch (ServiceSystemException e) {
log.info("orderChildExpect==高德地图调用失败,车辆{},异常原因{}", truckNo, e.getMessage()); log.info("orderChildExpect==高德地图调用失败,车辆{},异常原因{}", truckNo, e.getMessage());
} }
return CollectionUtils.isNotEmpty(gdRouteDTOS) ? gdRouteDTOS.get(0) : null; return distance;
} }
@Override @Override
...@@ -3240,10 +3292,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3240,10 +3292,9 @@ public class OrderChildServiceImpl implements OrderChildService {
if (longitude == null || latitude == null) { if (longitude == null || latitude == null) {
return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_ERROR.getCode(), TRUCK_LOCATION_ERROR.getMsg()); return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_ERROR.getCode(), TRUCK_LOCATION_ERROR.getMsg());
} }
List<GdRouteDTO> route = gdService.getRoute(longitude, latitude, sendLongitude, sendLatitude); Integer distance = gdService.getShortestRouteDistance(longitude, latitude, sendLongitude, sendLatitude);
if (CollectionUtils.isNotEmpty(route)) { if (distance != null) {
GdRouteDTO gdRouteDTO = route.get(0); log.info("truckNo:{} 高德计算距离:{} curr:{},{}, 货源地:{},{}", orderChild.getTruckNo(), distance, longitude, latitude, sendLongitude, sendLatitude);
Integer distance = gdRouteDTO.getDistance();
if (distance > config.allowUploadDistanceMeter()) { if (distance > config.allowUploadDistanceMeter()) {
// 装车位置 超限 // 装车位置 超限
return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), String.format(TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance())); return new OrderChildLoadRangeCheckResultVO(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), String.format(TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance()));
...@@ -3277,68 +3328,93 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3277,68 +3328,93 @@ public class OrderChildServiceImpl implements OrderChildService {
for (OrderChild child : orderChildList) { for (OrderChild child : orderChildList) {
String childNo = child.getChildNo(); String childNo = child.getChildNo();
String truckNo = child.getTruckNo(); String truckNo = child.getTruckNo();
//解除监装限制的不进行处理 Long driverUserNo = child.getDriverUserNo();
if (Objects.equals(child.getRemoveLoadLimitStatus(), OrderChildEnum.RemoveLoadLimitStatus.REMOVED.getCode())) {
log.info("运单:{},卡车:{} 已解除监装限制", childNo, truckNo);
return;
}
//获取卡车的位置 //获取卡车的位置
TruckTraceDTO truckTraceDTO = truckTraceMap.get(truckNo); TruckTraceDTO truckTraceDTO = truckTraceMap.get(truckNo);
log.info("运单号:{},卡车:{},中交兴路地图位置:{}", childNo, truckNo, truckTraceDTO);
BigDecimal truckLongitudeX = null; BigDecimal truckLongitudeX = null;
BigDecimal truckLatitudeY = null; BigDecimal truckLatitudeY = null;
if (Objects.nonNull(truckTraceDTO)) { if (Objects.nonNull(truckTraceDTO)) {
truckLongitudeX = truckTraceDTO.getLocation()[0]; truckLongitudeX = truckTraceDTO.getLocation()[0];
truckLatitudeY = truckTraceDTO.getLocation()[1]; truckLatitudeY = truckTraceDTO.getLocation()[1];
} }
if (truckLongitudeX == null || truckLatitudeY == null) {
BigDecimal[] location = truckTraceService.getCurrentPosition(truckNo, driverUserNo);
log.info("运单号:{},卡车:{},卡车/司机经纬度:{}", childNo, truckNo, location);
if (location != null && location.length >= 2) {
truckLongitudeX = location[0];
truckLatitudeY = location[1];
}
}
//判断卡车是否出了货源地x公里范围 //判断卡车是否出了货源地x公里范围
String orderGoodsNo = child.getOrderGoodsNo(); String orderGoodsNo = child.getOrderGoodsNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get();
BigDecimal siteLongitudeX = orderGoods.getSendLongitude(); BigDecimal siteLongitudeX = orderGoods.getSendLongitude();
BigDecimal siteLatitudeY = orderGoods.getSendLatitude(); BigDecimal siteLatitudeY = orderGoods.getSendLatitude();
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{}", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY);
if (Objects.isNull(truckLongitudeX) || Objects.isNull(truckLatitudeY)) {
continue;
}
//调高德获取距离 //调高德获取距离
if (Objects.nonNull(truckLongitudeX) && Objects.nonNull(truckLatitudeY)) { Integer distance = getGdRoute(truckNo, truckLongitudeX, truckLatitudeY, siteLongitudeX,
GdRouteDTO route = getGdRoute(truckNo, orderGoods.getSendLongitude(), orderGoods.getSendLatitude(), siteLongitudeX, siteLatitudeY);
siteLatitudeY); if (distance == null) {
if (route == null) { log.info("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo);
log.error("高德获取卡车与货源地位置距离失败,orderGoodsNo:{},orderChildNo:{},truckNo:{}", orderGoodsNo, childNo, truckNo); continue;
return; }
} log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{}", orderGoodsNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance);
//距离 // 超出货源地+通知触发距离
Integer distance = route.getDistance(); if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) {
// 超出货源地+通知触发距离 // 运单驶入过1km且通知状态为未通知
if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) { if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode()) &&
if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode()) Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode())
) { ) {
//超出货源地x公里范围了,且通知状态为未通知 //超出货源地x公里范围了,且通知状态为未通知
// 到达货源地 // 到达货源地
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) { if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信", truckNo, childNo); Integer count = (Integer) redisTemplate.opsForValue().get(RedisConstants.NOTICE_MESSAGE_LIMIT_UNLOAD + childNo);
sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo()); if (count != null && count > 3) {
log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,运单已发送短信次数:{},不进行短信通知", truckNo, childNo, count);
continue;
} }
// 已装货 log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信", truckNo, childNo);
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) { sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo());
Object[] superviseInfo = getSuperviseInfo(child.getOrderNo(), child.getChildNo()); redisTemplate.opsForValue().increment(RedisConstants.NOTICE_MESSAGE_LIMIT_UNLOAD + childNo);
if (superviseInfo != null) { }
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), (String) superviseInfo[2]); // 已装货
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
SuperviseInfo superviseInfo = getSuperviseInfoWithSubStatus(child.getOrderNo(), child.getChildNo(), child.getTruckNo());
log.info("运单号:{},卡车:{},监装信息{}", childNo, truckNo, superviseInfo);
if (superviseInfo != null) {
Integer count = (Integer) redisTemplate.opsForValue().get(RedisConstants.NOTICE_MESSAGE_LIMIT_UNSUPERVISED + childNo);
if (count != null && count > 3) {
log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,运单已发送短信次数:{},不进行短信通知", truckNo, childNo, count);
continue;
} }
log.info("{}超出货源地x公里范围了,运单{}为装货成功状态,发送短信", truckNo, childNo);
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), superviseInfo.getTaskAddress());
redisTemplate.opsForValue().increment(RedisConstants.NOTICE_MESSAGE_LIMIT_UNSUPERVISED + childNo);
} }
// 修改 通知状态 为已通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
orderChildDao.updateEntityByKey(child);
}
} else {
// 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())) {
//驶入货源地x公里范围了,且通知状态为已通知
// 修改 通知状态 为未通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
// 状态改为驶入货源地
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
orderChildDao.updateEntityByKey(child);
} }
// 修改 通知状态 为已通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
orderChildDao.updateEntityByKey(child);
}
} else if (distance <= 1000) {
log.info("运单号:{},卡车:{},status:{},站点经度:{},站点纬度:{},卡车经度:{},卡车纬度:{},距离:{} 距离小于1km", childNo, truckNo, child.getStatus(), siteLongitudeX, siteLatitudeY, truckLongitudeX, truckLatitudeY, distance);
// 这里的1km的距离是产品需求写死的,不使用通知配置范围
// 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())
|| Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.INIT.getCode())
) {
//驶入货源地x公里范围了,且通知状态为已通知
// 修改 通知状态 为未通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
// 状态改为驶入货源地
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
orderChildDao.updateEntityByKey(child);
} }
} }
} }
...@@ -3368,7 +3444,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3368,7 +3444,8 @@ public class OrderChildServiceImpl implements OrderChildService {
req.setMobile(mobile); req.setMobile(mobile);
req.setContent(jsonObject.toString()); req.setContent(jsonObject.toString());
req.setExpire(300L); req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req); Result<String> result = clxMessageOpenapiFeign.sendAliSms(req);
log.info("发送上传装货信息提示短信:【当前车牌号{},运单{}未上传装车信息,请上传后再驶离货源地,如需帮助请联系客服。】,结果:{}", truckNo, childNo, result);
} }
/** /**
...@@ -3397,27 +3474,40 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3397,27 +3474,40 @@ public class OrderChildServiceImpl implements OrderChildService {
req.setMobile(mobile); req.setMobile(mobile);
req.setContent(jsonObject.toString()); req.setContent(jsonObject.toString());
req.setExpire(300L); req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req); Result<String> result = clxMessageOpenapiFeign.sendAliSms(req);
log.info("发送发送监装提示短信:【当前车牌号{},运单{}需要进行现场监装,请您前往{}进行配合,如需帮助请联系客服。】,结果:{}", truckNo, childNo, supervisionAddress, result);
} }
private BigDecimal[] getTruckLocation(String truckNo ,BigDecimal longitude, BigDecimal latitude) { private BigDecimal[] getTruckLocation(String truckNo, BigDecimal longitude, BigDecimal latitude) {
TruckLocationDTO truckLocationDTO = null; TruckLocationDTO truckLocationDTO = null;
try { try {
truckLocationDTO = zjxlGpsService.getTruckLastLocation(truckNo); truckLocationDTO = zjxlGpsService.getTruckLastLocation(truckNo);
if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0];
latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO));
return new BigDecimal[]{longitude, latitude};
}
} catch (Exception e) { } catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage()); log.info("中交兴路获取失败:{}", e.getMessage());
} }
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息 //20240815 海泉说中交兴路也可能往缓存中放,也可能往es中放,最新的应该都是使用es,所以缓存中如果取不到,就从es中取一下看看
if (truckLocationDTO != null) { BigDecimal[] truckLocation = truckTraceService.getCurrentTruckPosition(truckNo);
BigDecimal[] location = truckLocationDTO.getLocation(); if (truckLocation != null && truckLocation.length >= 2
longitude = location[0]; && truckLocation[0] != null && truckLocation[1] != null
latitude = location[1]; ) {
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", truckNo, JSONUtil.parse(truckLocationDTO)); longitude = truckLocation[0];
} else { latitude = truckLocation[1];
log.info("中交兴路获取失败,通过高德获取,truckNo:{}", truckNo); log.info("中交兴路es获取司机车牌:{},相关位置信息:{}", truckNo, truckLocation);
return new BigDecimal[]{longitude, latitude};
} }
return new BigDecimal[]{longitude, latitude};
BigDecimal[] result = new BigDecimal[]{longitude, latitude};
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
log.info("中交兴路获取失败,使用app上传位置,truckNo:{},相关位置信息:{}", truckNo, result);
return result;
} }
@Override @Override
...@@ -3427,6 +3517,14 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3427,6 +3517,14 @@ public class OrderChildServiceImpl implements OrderChildService {
return null; return null;
} }
List<OrderChildWeighPicture> pictures = pictureDao.getImages(param.getChildNo());
List<String> image = pictures.stream().filter(
item -> Objects.equals(item.getType(), 2)).map(
item -> item.getOriginalImg()).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(image)){
return null;
}
try{ try{
OcrRecognitionResultVO vo = new OcrRecognitionResultVO(); OcrRecognitionResultVO vo = new OcrRecognitionResultVO();
Credential cred = new Credential(tencentCloudApiOcrConfig.getSecretId(), tencentCloudApiOcrConfig.getSecretKey()); Credential cred = new Credential(tencentCloudApiOcrConfig.getSecretId(), tencentCloudApiOcrConfig.getSecretKey());
...@@ -3467,6 +3565,65 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3467,6 +3565,65 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
} }
@Override
public List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo) {
//查询近一个月与该订单收发货地线路一致的订单
Optional<List<String>> result = orderService.getMonthSameLineOrderList(orderNo);
if(!result.isPresent()){
log.warn("通过订单号:{} 查找相同线路的订单列列表,返回结果:{}",orderNo,result);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"获取相同线路的订单列表失败");
}
List<BigDecimal> priceList = orderGoodsAdjustmentPriceService.getNoRepeatAdjustmentPriceRecord(result.get());
List<HistoryLineTranVolumeChartVO> charts = new ArrayList<>();
if(CollectionUtils.isEmpty(priceList)){
return charts;
}
//查询相同路线的订单下的所有运单
List<OrderChild> childs = orderChildDao.listCompleteByOrderNos(result.get());
if(CollectionUtils.isEmpty(childs)){
priceList.forEach(item-> charts.add(HistoryLineTranVolumeChartVO.builder()
.pendingOrderFreight(item).number(0).build()));
return charts;
}
LinkedHashMap<BigDecimal,Integer> priceMap =
priceList.stream().collect(Collectors.toMap(item->item,item->0,
(existing, replacement) -> existing, // 如果有冲突的键,则保留现有的键
LinkedHashMap::new));
//进行相同路线运费拉运单数统计
childs.forEach(item->{
if(priceMap.containsKey(item.getFreightPrice())){
priceMap.put(item.getFreightPrice(),priceMap.get(item.getFreightPrice()) + 1);
}
});
for (Map.Entry<BigDecimal, Integer> entry : priceMap.entrySet()) {
charts.add(HistoryLineTranVolumeChartVO.builder().pendingOrderFreight(entry.getKey()).number(
entry.getValue()).build());
}
return charts;
}
@Override
public NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param) {
//查询运单信息
OrderChild orderChild = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(DATA_NOT_FIND);
SuperviseInfo superviseInfo = getSuperviseInfoWithSubStatus(orderChild.getOrderNo(), orderChild.getChildNo(), orderChild.getTruckNo());
//返回对象
NeedAlertSuperviseInfoResultVO result = new NeedAlertSuperviseInfoResultVO();
if (superviseInfo != null) {
result.setNeedAlert(OrderChildEnum.NeedAlertEnum.FAIL.getCode());
result.setLocation(superviseInfo.getTaskAddress());
result.setMobile(superviseInfo.getSuperviseMobile());
result.setSupervisor(superviseInfo.getSuperviseContacts());
return result;
}
result.setNeedAlert(OrderChildEnum.NeedAlertEnum.OK.getCode());
return result;
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param) { public UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param) {
...@@ -3483,6 +3640,14 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3483,6 +3640,14 @@ public class OrderChildServiceImpl implements OrderChildService {
notCancelOrderChildList.add(child); notCancelOrderChildList.add(child);
} }
} }
//如果可取消的订单为空。直接返回
if(CollectionUtils.isEmpty(canCancelOrderChildList)){
UpdateCarrierBatchCancelVO result = new UpdateCarrierBatchCancelVO();
result.setFailChildNoList(notCancelOrderChildList.stream().map(OrderChild :: getChildNo).collect(Collectors.toList()));
result.setSuccessCount(canCancelOrderChildList.size());
return result;
}
// 返回吨数 // 返回吨数
batchUpdateOrderGoodsWeightReturn(canCancelOrderChildList); batchUpdateOrderGoodsWeightReturn(canCancelOrderChildList);
......
...@@ -130,7 +130,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -130,7 +130,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Autowired @Autowired
private OrderGoodsFleetOpenTruckDao orderGoodsFleetOpenTruckDao; private OrderGoodsFleetOpenTruckDao orderGoodsFleetOpenTruckDao;
@Autowired @Autowired
OrderWeightService orderWeightService; OrderWeightService orderWeightService;
...@@ -178,6 +178,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -178,6 +178,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime()); orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime()); orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(residueWeight); orderGoodsVO.setResidueTransportWeight(residueWeight);
orderGoodsVO.setResidueTransportWeight(residueWeight);
//货源地信息
orderGoodsVO.setSendContact(orderInfoFeign.getSendContact());
orderGoodsVO.setSendContactPhone(orderInfoFeign.getSendContactPhone());
orderGoodsVO.setSendWaitSystem(orderInfoFeign.getSendWaitSystem());
orderGoodsVO.setSendWaitSystemName(orderInfoFeign.getSendWaitSystemName());
orderGoodsVO.setSendWaitMode(orderInfoFeign.getSendWaitMode());
//获取订单配置的违约金方案 //获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
...@@ -495,7 +502,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -495,7 +502,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams(); OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams();
OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get(); OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get();
//FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(param.getOrderNo());
if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) { if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数");
} }
...@@ -503,27 +509,25 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -503,27 +509,25 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
//考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数 //考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数
BigDecimal oldResidueTransportWeight = this.calcOrderGoodsResidueWeight BigDecimal oldResidueTransportWeight = this.calcOrderGoodsResidueWeight
(oldOrderGoods.getExtractWeight(),oldOrderGoods.getAlreadyTransportWeight()); (oldOrderGoods.getExtractWeight(),oldOrderGoods.getAlreadyTransportWeight());
BigDecimal realExtractWeight = oldResidueTransportWeight.compareTo(BigDecimal.ZERO) == 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getAlreadyTransportWeight().add(oldResidueTransportWeight);
oldOrderGoods.setExtractWeight(realExtractWeight);
//本次提取增加或者减少的吨数 = 本次提取的吨数 - 货单原实际提取吨数
BigDecimal changeWeight = orderGoodsParams.getExtractWeight().subtract(realExtractWeight);
BigDecimal residueTransportWeight = this.calcOrderGoodsResidueWeight OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(param.getOrderNo());
(oldOrderGoods.getExtractWeight(),oldOrderGoods.getAlreadyTransportWeight());
BigDecimal canExtractWeight = orderCanExtractWeight.getCanExtractWeight();
BigDecimal changeWeight = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight());
//当计算出的订单可提取量为负数时,说明订单下调吨数,货单超过订单量,所以货单编辑吨数的时候只能进行下调操作
if(canExtractWeight.compareTo(BigDecimal.ZERO) < 0 && changeWeight.compareTo(BigDecimal.ZERO) > 0){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总量已超吨,只能做吨数下调操作");
if (changeWeight.compareTo(BigDecimal.ZERO) > 0) {
orderGoodsParams.setResidueTransportWeight(residueTransportWeight.add(changeWeight));
}else if (changeWeight.compareTo(BigDecimal.ZERO) < 0 ){
orderGoodsParams.setResidueTransportWeight(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getAlreadyTransportWeight()));
} else {
//当编辑吨数等于0 的时候,不进行拦截
orderGoodsParams.setResidueTransportWeight(residueTransportWeight);
} }
BigDecimal realExtractWeight = oldResidueTransportWeight.compareTo(BigDecimal.ZERO) <= 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getExtractWeight();
oldOrderGoods.setExtractWeight(realExtractWeight);
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(param.getOrderNo()); BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(param.getOrderNo());
if (orderResidueWeight.compareTo(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight())) < 0) { if (orderResidueWeight.compareTo(changeWeight) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数已超订单可提取吨数"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数已超订单可提取吨数");
} }
......
...@@ -303,6 +303,41 @@ public class TruckTraceServiceImpl implements TruckTraceService { ...@@ -303,6 +303,41 @@ public class TruckTraceServiceImpl implements TruckTraceService {
return null; return null;
} }
/**
* 获取卡车当前位置 5分钟内的位置
* @param truckNo 卡车车牌号
* @return 位置
*/
@Override
public BigDecimal[] getTruckCurrentPosition(String truckNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME));
return getTruckCurrentPosition(truckNo, beginTime);
}
/**
* 获取卡车当前位置
* @param truckNo 卡车车牌号
* @param beginTime 开始时间
* @return 位置
*/
@Override
public BigDecimal[] getTruckCurrentPosition(String truckNo, String beginTime) {
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
return list.get(0).getLocation();
}
return null;
}
@Override @Override
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) { public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) {
return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now()); return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now());
......
...@@ -23,6 +23,10 @@ public interface TruckTraceService { ...@@ -23,6 +23,10 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime); BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime);
BigDecimal[] getTruckCurrentPosition(String truckNo);
BigDecimal[] getTruckCurrentPosition(String truckNo, String beginTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime); int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime); int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime);
......
...@@ -16,8 +16,6 @@ import org.apache.ibatis.annotations.Param; ...@@ -16,8 +16,6 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL; import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.StringJoiner; import java.util.StringJoiner;
...@@ -181,38 +179,34 @@ public class OrderChildSqlProvider { ...@@ -181,38 +179,34 @@ public class OrderChildSqlProvider {
return sql; return sql;
} }
public String findArtificialCancelOrder(@Param("param") ArtificialCancelOrderQueryParam param) { public String findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
StringBuilder sql = new StringBuilder(); return new SQL() {{
sql.append("SELECT child_no, goods_name, freight_price, order_no, "); SELECT("child_no, goods_name, freight_price, order_no, " +
sql.append("send_address, receive_address, "); "send_address, receive_address, " +
sql.append("driver_user_no, driver_name, driver_mobile, "); "driver_user_no, driver_name, driver_mobile, " +
sql.append("truck_no, unload_pound_no, weight, "); "truck_no, unload_pound_no, weight, " +
sql.append("cancel_remark, pound_status, status, "); "cancel_remark, pound_status, status, remove_load_limit_status, " +
sql.append("DATE_FORMAT(load_deadline, '%Y-%m-%d %H:%i:%s') AS loadDeadline, "); "DATE_FORMAT(load_deadline, '%Y-%m-%d %H:%i:%s') AS loadDeadline, " +
sql.append("DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime, "); "DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime, " +
sql.append("DATE_FORMAT(unload_time, '%Y-%m-%d %H:%i:%s') AS unloadTime "); "DATE_FORMAT(unload_time, '%Y-%m-%d %H:%i:%s') AS unloadTime ");
sql.append("FROM order_child "); FROM("order_child ");
sql.append("WHERE 1=1 "); if (StringUtils.isNotBlank(param.getOrderChildNo())) {
WHERE("child_no = #{param.orderChildNo,jdbcType=VARCHAR}");
List<String> conditions = new ArrayList<>(); }
if (StringUtils.isNotBlank(param.getOrderChildNo())) { if (StringUtils.isNotBlank(param.getTruckNo())) {
conditions.add("child_no = #{param.orderChildNo}"); WHERE("truck_no = #{param.truckNo,jdbcType=VARCHAR}");
} }
if (StringUtils.isNotBlank(param.getTruckNo())) { //支付状态 可以忽略
conditions.add("truck_no = #{param.truckNo}"); WHERE("status >=" + OrderChildEnum.Status.CREATED.getCode());
} WHERE("status <=" + OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
List<Integer> statuses = Arrays.asList( }}.toString();
OrderChildEnum.Status.CREATED.getCode(), }
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(), public static void main(String[] args) {
OrderChildEnum.Status.LOAD.getCode(), ArtificialCancelOrderQueryParam param = new ArtificialCancelOrderQueryParam();
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(), param.setTruckNo("A123456");
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() param.setOrderChildNo("CYD1234567890");
); System.out.println(new OrderChildSqlProvider().findArtificialCancelOrder(param));
conditions.add("status IN (" + StringUtils.join(statuses, ", ") + ")");
sql.append("AND ");
sql.append(StringUtils.join(conditions, " AND "));
return sql.toString();
} }
public String orderChildCancelRecord(@Param("page") Page<OrderChildVO> page, @Param("param") OrderChildCancelRecordParam param) { public String orderChildCancelRecord(@Param("page") Page<OrderChildVO> page, @Param("param") OrderChildCancelRecordParam param) {
......
...@@ -9,14 +9,12 @@ import com.msl.common.enums.ResultCodeEnum; ...@@ -9,14 +9,12 @@ import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.dromara.easyes.common.utils.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
/** /**
* @Author: aiqingguo * @Author: aiqingguo
...@@ -47,6 +45,26 @@ public class GdService { ...@@ -47,6 +45,26 @@ public class GdService {
return getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude); return getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
} }
/**
* 获取最短距离路径
* @param originLongitude
* @param originLatitude
* @param destinationLongitude
* @param destinationLatitude
* @return
*/
public Integer getShortestRouteDistance(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
List<GdRouteDTO> routeList = getRoute(gaodeKey, originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (CollectionUtils.isNotEmpty(routeList)) {
Optional<GdRouteDTO> minRoute = routeList.stream()
.min((r1, r2) -> Double.compare(r1.getDistance(), r2.getDistance()));
return minRoute.map(GdRouteDTO::getDistance).orElse(null);
}
return null;
}
public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude, public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) { BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
//log.info("高德线路规划开始"); //log.info("高德线路规划开始");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论