提交 6c32b7de authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v17.3_youhua_20240615' into dev

# Conflicts: # performance-web/src/main/java/com/clx/performance/controller/temp/TempTraceController.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/OrderChildMapper.java
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public enum OrderEnum {
;
//订单状态: 0待报价 1客户确认中 2报价已确认 3平台已承接 4已取消 5暂停 6拒绝承运 7 挂单中 8运输中 9订单已完成 10 已失效
@Getter
@AllArgsConstructor
public enum Status {
WAIT_QUOTATION(0, "待报价"),
CUSTOMER_CONFIRMING(1, "客户确认中"),
QUOTATION_CONFIRMED(2, "报价已确认"),
PLATFORM_UNDERTAKING(3, "平台已承接"),
CANCELED(4, "已取消"),
SUSPEND(5, "暂停"),
REFUSAL_TO_CARRY(6, "拒绝承运"),
ON_ORDER(7, "挂单中"),
IN_TRANSIT(8, "运输中"),
SUCCESS(9, "订单已完成"),
EXPIRED(10, "已失效"),
POST_ORDER(11, "已挂单"),
COMPLETED(12,"已完结")
;
private final Integer code;
private final String name;
public static Status getByCode(int code) {
for(Status type: Status.values()){
if(type.code == code){
return type;
}
}
return null;
}
}
//申请状态 1.申请 2.驳回 3.同意 4.过期'
@Getter
@AllArgsConstructor
public enum CancelApplyStatus {
APPLY(1, "申请"),
REJECT(2, "驳回"),
AGREE(3, "同意"),
EXPIRED(4, "过期");
private final int code;
private final String name;
public static Status getByCode(int code) {
for(Status type: Status.values()){
if(type.code == code){
return type;
}
}
return null;
}
}
//报价状态 2.确认报价 3.驳回报价 4.报价过期'
@Getter
@AllArgsConstructor
public enum QuotationStatus{
CONFIRM(2, "确认报价"),
REJECT(3, "驳回报价"),
EXPIRE(4, "报价过期");
private final int code;
private final String name;
public static QuotationStatus getByCode(Integer code) {
for(QuotationStatus type: QuotationStatus.values()){
if(type.code == code){
return type;
}
}
return null;
}
}
@Getter
@AllArgsConstructor
public enum OverWeight{
NO(0, "否"),
YES(1, "是");
private final Integer code;
private final String name;
public static OverWeight getByCode(Integer code) {
for(OverWeight type: OverWeight.values()){
if(Objects.equals(type.code,code)){
return type;
}
}
return null;
}
}
@Getter
@AllArgsConstructor
public enum ReportFlag{
NO(0, "否"),
YES(1, "是");
private final int code;
private final String name;
public static String getNameByCode(int code) {
for(ReportFlag type: ReportFlag.values()){
if(type.code == code){
return type.getName();
}
}
return null;
}
}
//预付运费标识 1:部分预付 2:全额预付
@Getter
@AllArgsConstructor
public enum PrepayFreightFlag{
PART(1, "部分预付"),
ALL(2, "全额预付");
private final Integer code;
private final String name;
public static String getByCode(Integer code) {
for(PrepayFreightFlag type: PrepayFreightFlag.values()){
if(Objects.equals(type.code,code)){
return type.getName();
}
}
return null;
}
}
public static final List<Integer> BORROW_TIP_STATUS_lIST = Arrays.asList(
Status.PLATFORM_UNDERTAKING.getCode(),
Status.ON_ORDER.getCode(),
Status.POST_ORDER.getCode(),
Status.IN_TRANSIT.getCode()
);
//外部系统可以修改数据的状态
public static final List<Integer> SYNC_ORDER_UPDATE_lIST = Arrays.asList(
Status.CUSTOMER_CONFIRMING.getCode(),
Status.QUOTATION_CONFIRMED.getCode(),
Status.PLATFORM_UNDERTAKING.getCode(),
Status.ON_ORDER.getCode(),
Status.POST_ORDER.getCode(),
Status.IN_TRANSIT.getCode()
);
}
......@@ -34,9 +34,9 @@ public enum ResultEnum implements com.msl.common.enums.ResultEnum {
VEHICLE_WARN_USER_EXIST(1201, "联系方式已存在"),
VEHICLE_WARN_CONFIG_EXIST(1201, "配置名称已存在"),
VEHICLE_WARN_CONFIG_EXIST(1201, "预警方案名称已存在"),
LINE_WARN_USER_EXIST(1301, "联系方式已存在"),
LINE_WARN_CONFIG_EXIST(1302, "配置名称已存在"),
LINE_WARN_CONFIG_EXIST(1302, "预警方案名称已存在"),
......
......@@ -24,7 +24,7 @@ public enum VehicleWarnUserEnum {
@Getter
@AllArgsConstructor
public enum NoticeStatus {
NO(0, "禁用"),
NO(0, "关闭"),
YES(1, "开启"),
;
......
package com.clx.performance.feign;
import com.clx.performance.param.app.collect.CollectTruckParam;
import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.feign.DistributionTruckParam;
import com.clx.performance.param.feign.OrderAdjustTonnageDownParam;
import com.clx.performance.param.pc.OrderCancelFeignParam;
......@@ -132,4 +133,12 @@ public interface PerformanceFeign {
@PostMapping(value = {"clx-performance/feign/orderGoods/saveBindTruck"})
Result<Object> saveBindTruck(@RequestBody @Validated DistributionTruckParam param);
/**
* 取消货单
* @param param
* @return
*/
@PostMapping(value = {"clx-performance/feign/orderGoods/cancelOrderGoods"})
Result<Object> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param);
}
package com.clx.performance.param.feign;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Getter
@Setter
public class CancelOrderGoodsParam {
@NotBlank(message = "订单编号不能为空")
@ApiModelProperty("订单编号")
private String orderNo;
@NotNull(message = "操作人编号不能为空")
@ApiModelProperty("操作人编号")
private Long createBy;
@NotNull(message = "操作人名称不能为空")
@Size(max=32,message = "操作人名称最多输入32个字符")
@ApiModelProperty("操作人名称")
private String createName;
}
......@@ -87,6 +87,12 @@
<artifactId>coding-api</artifactId>
</dependency>
<dependency>
<groupId>com.msl</groupId>
<artifactId>server-spring-boot-starter</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.msl</groupId>-->
<!-- <artifactId>cache-spring-boot-starter</artifactId>-->
......
......@@ -99,7 +99,7 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnLineReportQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange())
return BindingBuilder.bind(lineWarnLineReportQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_LINE_REPORT_ROUTING_KEY);
}
......
......@@ -2,6 +2,7 @@ package com.clx.performance.constant;
public class RabbitKeyConstants {
//更改订单状态为挂单中
public static final String ORDER_POSTED_QUEUE = "clx-order.order.posted.queue";
//改订单状态为已挂单
......@@ -12,16 +13,18 @@ public class RabbitKeyConstants {
public static final String ORDER_ON_ROUTE_KEY ="clx-order.order.on.route.key";
/*
public static final String ORDER_ON_DEAD_ROUTE_KEY ="clx-order.order.on.dead.route.key";
*/
public static final String ORDER_ON_QUEUE ="clx-order.order.on.queue";
public static final String ORDER_ON_EXCHANGE ="clx-order.order.on.exchange";
//更改订单状态为挂单中
public static final String ORDER_ON_DEAD_EXCHANGE ="clx-order.order.on.dead.exchange";
public static final String ORDER_ON_DEAD_QUEUE ="clx-order.order.on.dead.queue";
/* public static final String ORDER_ON_DEAD_EXCHANGE ="clx-order.order.on.dead.exchange";
public static final String ORDER_ON_DEAD_QUEUE ="clx-order.order.on.dead.queue";*/
public static final String ORDER_GOODS_SYNC_TRUCK_DRIVER_INFO_QUEUE = "clx-performance.order.goods.sync.truck.driver.info.queue";
......
......@@ -36,4 +36,10 @@ public class RedisConstants {
public static final String MESSAGE_RESET_PASSWORD_TOKEN = "message:resetpassword:token:";
/**
* 线路天气预警
*/
public static final String LINE_WARN_WEATHER = "clx-performance:lineWarn:weather:";
}
package com.clx.performance.controller.feign;
import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.feign.DistributionTruckParam;
import com.clx.performance.param.pc.OrderChildReportParam;
import com.clx.performance.service.OrderGoodsService;
......@@ -55,5 +56,12 @@ public class OrderGoodsFeignController {
return Result.ok();
}
@ApiOperation(value = "取消货单", notes = "<br>By:李瑞新")
@PostMapping({"/cancelOrderGoods"})
Result<Object> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param) {
orderGoodsService.cancelOrderGoods(param);
return Result.ok();
}
}
package com.clx.performance.controller.system;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.registry.NacosRegistration;
import com.alibaba.cloud.nacos.registry.NacosServiceRegistry;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 应用服务器控制
*
* @author wanglq
* Date 2022/11/28
* Time 15:43
*/
@RestController
@RequestMapping("/appServer")
@Slf4j
public class AppServerController {
@Autowired
private NacosRegistration registration;
@Autowired
private NacosServiceRegistry registry;
/**
* 下线服务
*
* @return
*/
@GetMapping("/deregister")
public Result<Void> deregister() {
NacosDiscoveryProperties properties = registration.getNacosDiscoveryProperties();
String service = properties.getService();
String group = properties.getGroup();
String clusterName = properties.getClusterName();
String ip = properties.getIp();
int port = properties.getPort();
log.info("deregister from nacos, serviceName:{}, groupName:{}, clusterName:{}, ip:{}, port:{}", service, group, clusterName, ip, port);
registry.deregister(registration);
return Result.ok();
}
/**
* 应用状态
*
* @return
*/
@GetMapping("/status")
public Result<String> status() {
return Result.ok("up");
}
}
package com.clx.performance.controller.temp;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import com.clx.performance.service.linewarn.LineWarnMqService;
import com.clx.performance.utils.gd.GdUtils;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: aiqingguo
* @Description: 临时接口
......@@ -22,6 +32,12 @@ public class TempLineWarnController {
@Autowired
private LineWarnMqService lineWarnMqService;
@Autowired
private AddressService addressService;
@Autowired
private GdUtils gdUtils;
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@PostMapping("/test")
......@@ -45,5 +61,51 @@ public class TempLineWarnController {
lineWarnMqService.orderGoodsAdd(orderGoodsNo);
return Result.ok();
}
@ApiOperation(value = "天气", notes = "<br>By:艾庆国")
@PostMapping("/weather")
public Result<Map<String, String>> weather(Integer sendAddressId, Integer receiveAddressId) {
Map<String, String> result = new HashMap<>();
Optional<FeignAddressVO> addressOptional = addressService
.getSendAndReceiveAddress(sendAddressId, receiveAddressId);
if (addressOptional.isEmpty()) {return Result.ok(result);}
FeignAddressVO feignAddressVO = addressOptional.get();
if (feignAddressVO.getSendAddress()!=null){
String cityCode = gdUtils.getCity(feignAddressVO.getSendAddress().getLongitude(),
feignAddressVO.getSendAddress().getLatitude());
String weather = gdUtils.getWeather(cityCode);
result.put("send", weather);
}
if (feignAddressVO.getReceiveAddress()!=null){
String cityCode = gdUtils.getCity(feignAddressVO.getReceiveAddress().getLongitude(),
feignAddressVO.getReceiveAddress().getLatitude());
String weather = gdUtils.getWeather(cityCode);
result.put("receive", weather);
}
return Result.ok(result);
}
@ApiOperation(value = "发送预警短信", notes = "<br>By:艾庆国")
@PostMapping("/sendSms")
public Result sendSms(String mobile, String warnName, String orderGoodsNo) {
lineWarnMqHandlerService.sendSms(Arrays.asList(mobile), warnName, orderGoodsNo);
return Result.ok();
}
@ApiOperation(value = "发送预警外呼", notes = "<br>By:艾庆国")
@PostMapping("/sendClink")
public Result sendClink(String mobile, String warnName, String orderGoodsNo) {
lineWarnMqHandlerService.sendClink(Arrays.asList(mobile), warnName, orderGoodsNo);
return Result.ok();
}
}
......@@ -181,9 +181,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listByChildNoList(List<String> childNoList);
MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo);
List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList);
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo);
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo, BigDecimal defaultWeight);
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
......
......@@ -100,4 +100,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void batchUpdateResidueWeight(List<Integer> list, BigDecimal residueWeight);
List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList();
void cancelOrderGoods(String orderNo);
}
......@@ -568,6 +568,11 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
return list(lQrWrapper().in(OrderChild :: getChildNo,childNoList));
}
@Override
public MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo) {
return baseMapper.statisticsTruckMonth(startTime,endTime,truckNo);
}
@Override
public List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList) {
return list(lQrWrapper()
......@@ -578,8 +583,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumTakeWeightByOrderGoodsNo(orderGoodsNo);
public BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo, BigDecimal defaultWeight) {
return baseMapper.sumTakeWeightByOrderGoodsNo(orderGoodsNo, defaultWeight);
}
@Override
......
......@@ -275,4 +275,12 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
public List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList() {
return baseMapper.queryProcessFleetOpenTruckList();
}
@Override
public void cancelOrderGoods(String orderNo) {
update(lUdWrapper()
.eq(OrderGoods::getOrderNo, orderNo)
.set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
);
}
}
......@@ -27,6 +27,7 @@ public class LineWarnConfigDaoImpl extends BaseDaoImpl<LineWarnConfigMapper, Lin
.set(LineWarnConfig::getInterval, item.getInterval())
.set(LineWarnConfig::getTimeRatio, item.getTimeRatio())
.set(LineWarnConfig::getTaskCompleteRatio, item.getTaskCompleteRatio())
.set(LineWarnConfig::getCongestionTime, item.getCongestionTime())
);
}
......
......@@ -38,7 +38,7 @@ public class LineWarnInfoDaoImpl extends BaseDaoImpl<LineWarnInfoMapper, LineWar
public boolean updateSuspendTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getWarnConfigId, item.getWarnConfigId())
.eq(LineWarnInfo::getId, item.getId())
.ne(LineWarnInfo::getStatus, LineWarnInfoEnum.Status.RESOLVE.getCode())
.set(LineWarnInfo::getSuspendTime, item.getSuspendTime())
);
......
package com.clx.performance.esplus.mapper;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import org.dromara.easyes.core.kernel.BaseEsMapper;
public interface TruckLastPosESPlusMapper extends BaseEsMapper<TruckLatestPosESPlus> {
}
\ No newline at end of file
package com.clx.performance.esplus.model;
import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;
import java.math.BigDecimal;
@Data
@IndexName(value = "clx_truck_latest_pos")
public class TruckLatestPosESPlus {
@IndexId(type= IdType.UUID)
private String id;
@IndexField(fieldType = FieldType.KEYWORD)
private String truckNo; //车辆编号
private BigDecimal angle; //agl
private BigDecimal speed; //速度
private BigDecimal mileage; //里程
private BigDecimal height; //海拔
private BigDecimal[] location; //位置
@IndexField(fieldType = FieldType.DATE)
private String gpsTime; //时间
private String createTime;
}
\ No newline at end of file
......@@ -2,11 +2,15 @@ package com.clx.performance.extranal.order;
public interface InternalReportService {
Boolean checkLineJam(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime,
Integer duration);
Integer receiveSystemAddressId,
Integer sendAddressId,
Integer receiveAddressId,
String beginTime,
Integer duration);
Boolean checkLineAbnormal(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime);
Integer receiveSystemAddressId,
Integer sendAddressId,
Integer receiveAddressId,
String beginTime);
}
......@@ -18,10 +18,15 @@ public class InternalReportServiceImpl implements InternalReportService {
@Override
public Boolean checkLineJam(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
Integer sendAddressId,
Integer receiveAddressId,
String beginTime,
Integer duration) {
return Optional.of(internalReportFeign.checkLineJam(sendSystemAddressId,
receiveSystemAddressId,beginTime,duration))
receiveSystemAddressId,
sendAddressId,
receiveAddressId,
beginTime,duration))
.filter(Result::succeed)
.map(Result::getData)
.orElse(false);
......@@ -29,9 +34,14 @@ public class InternalReportServiceImpl implements InternalReportService {
@Override
public Boolean checkLineAbnormal(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
Integer sendAddressId,
Integer receiveAddressId,
String beginTime) {
return Optional.of(internalReportFeign.checkLineAbnormal(sendSystemAddressId,
receiveSystemAddressId,beginTime))
receiveSystemAddressId,
sendAddressId,
receiveAddressId,
beginTime))
.filter(Result::succeed)
.map(Result::getData)
.orElse(false);
......
......@@ -10,7 +10,10 @@ import com.msl.common.base.Optional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -29,6 +32,9 @@ public class RabbitOrderGoodsStatusOnHandler {
@Autowired
private LineWarnMqService lineWarnMqService;
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyConstants.ORDER_GOODS_ON_DEAD_QUEUE)
public void onMessage(String message) {
log.info("处理货单状态由已挂单变为挂弹中监听器执行,货单ID为{}", message);
......@@ -45,6 +51,14 @@ public class RabbitOrderGoodsStatusOnHandler {
log.info("处理货单状态由已挂单变为挂单中监听器执行,从状态{}-----变更为{}", orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getName());
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.PAYING.getCode());
Message orderNoMessage = MessageBuilder.withBody(orderGoods.getOrderNo().getBytes()).build();
//发送mq,更改货单对应的订单为挂单中
rabbitTemplate.send(
RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, orderNoMessage
);
// 发送mq
lineWarnMqService.orderGoodsAdd(orderGoods.getOrderGoodsNo());
......
......@@ -6,6 +6,7 @@ import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
......@@ -31,7 +32,12 @@ public class LineWarnLineWarnListener {
log.info("线路预警-货单预警, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnLineWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单预警 失败",e);
if (e instanceof ServiceSystemException){
log.info("线路预警-货单预警 失败, msg:{}", e.getMessage());
}
else {
log.info("线路预警-货单预警 失败", e);
}
}
}
......
......@@ -6,6 +6,7 @@ import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnOrderChildWarnMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
......@@ -31,7 +32,12 @@ public class LineWarnOrderChildWarnListener {
log.info("线路预警-运单异常预警, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnOrderChildWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-运单异常预警 失败",e);
if (e instanceof ServiceSystemException){
log.info("线路预警-运单异常预警 失败, msg:{}", e.getMessage());
}
else {
log.info("线路预警-运单异常预警 失败", e);
}
}
}
......
......@@ -6,6 +6,7 @@ import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
......@@ -31,7 +32,12 @@ public class LineWarnOrderGoodsAddListener {
log.info("线路预警-货单新增, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnOrderGoodsAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单新增 失败",e);
if (e instanceof ServiceSystemException){
log.info("线路预警-货单新增 失败, msg:{}", e.getMessage());
}
else {
log.info("线路预警-货单新增 失败", e);
}
}
}
......
......@@ -125,35 +125,51 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(10,20,30,40,50,60,70,80,90,100)")
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(50,60,70,80,90,100)")
@SelectProvider(type = OrderChildSqlProvider.class, method = "statisticsTruckMonth")
MonthInComeAndOrderedVO statisticsTruckMonth(@Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime, @Param("truckNo")String truckNo);
@Select("select sum(if (status>=50, load_net, #{defaultWeight})) from order_child " +
" where order_goods_no=#{orderGoodsNo} and status in(10,20,30,40,50,60,70,80,90,100)")
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo, BigDecimal defaultWeight);
@Select("select sum(load_net) from order_child " +
" where order_goods_no=#{orderGoodsNo} and status in(50,60,70,80,90,100)")
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(80,90,100)")
@Select("select sum(if (unload_net>load_net, load_net, unload_net)) from order_child " +
" where order_goods_no=#{orderGoodsNo} and status in(80,90,100)")
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(10,20,30,40,50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
@Select("<script>select order_goods_no, count(*) num from order_child " +
" where status in(10,20,30,40,50,60,70,80,90,100) " +
" and order_goods_no " +
" in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumTakeNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(40,50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" and order_goods_no " +
" in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumArriveSendNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" and order_goods_no " +
" in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumLoadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" and order_goods_no " +
" in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumArriveRecieveNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" and order_goods_no " +
" in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumUnloadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
......
......@@ -50,7 +50,7 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList")
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(Page<OrderGoodsAPPVO> page, List<String> orderGoodsNoList);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(@Param("page") Page<OrderGoodsAPPVO> page, @Param("orderGoodsNoList") List<String> orderGoodsNoList);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "exclusiveOrderPageGoodsList")
IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(Page<OrderGoodsAPPVO> page, List<String> param);
......
......@@ -7,14 +7,11 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Optional;
/**
* 货单定向绑定车辆表
......@@ -28,7 +25,7 @@ public class OrderGoodsFleetOpenTruck implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("truck_no")
@TableField("truck_list_json")
@ApiModelProperty("车辆列表")
private String truckListJson;
......@@ -52,21 +49,4 @@ public class OrderGoodsFleetOpenTruck implements HasKey<Integer> {
public Integer gainKey() {
return this.id;
}
@Getter
@AllArgsConstructor
public enum Status {
NORMAL(1, "正常"),
CANCEL(2, "取消"),
ORDER(3, "已接单"),
;
private final int code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderGoodsLog;
import com.clx.performance.param.pc.OrderGoodsLogParam;
import com.clx.performance.vo.pc.OrderGoodsLogVO;
import java.util.List;
/**
* @author kavin
* Date 2023-10-26
......@@ -13,4 +16,6 @@ public interface OrderGoodsLogService {
void saveLog(String orderGoodsNo,Long userNo,String userName,String type,String remark);
IPage<OrderGoodsLogVO> pageOrderGoodsLog(OrderGoodsLogParam param);
void saveBatchLog(List<OrderGoodsLog> logs);
}
......@@ -5,6 +5,7 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.AppGoodsOrderSearchParam;
import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.feign.DistributionTruckParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
......@@ -102,4 +103,6 @@ public interface OrderGoodsService {
void batchUpdateResidueWeight(List<OrderGoods> list);
void saveBindTruck(DistributionTruckParam param);
void cancelOrderGoods(CancelOrderGoodsParam param);
}
......@@ -292,7 +292,9 @@ public class OrderChildServiceImpl implements OrderChildService {
OrderGoodsTruckBind bind = null;
List<OrderGoodsTruckBind> orderGoodsTruckBindList = orderGoodsTruckBindDao.getValidByTruckNo(truckNo).orNull();
if (Objects.equals(orderGoods.getPendingOrderWay(),
OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())) {
OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode()) ||
Objects.equals(orderGoods.getPendingOrderWay(),
OrderGoodsPendingOrderWayStatusEnum.Status.FLEET_EXCLUSIVE.getCode())) {
if (CollectionUtils.isEmpty(orderGoodsTruckBindList)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);
}
......
......@@ -47,4 +47,9 @@ public class OrderGoodsLogServiceImpl implements OrderGoodsLogService {
result.setRecords(orderGoodsLogVOS);
return result;
}
@Override
public void saveBatchLog(List<OrderGoodsLog> logs) {
orderGoodsLogDao.saveBatchList(logs);
}
}
......@@ -23,6 +23,7 @@ import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.*;
import com.clx.performance.param.app.AppGoodsOrderSearchParam;
import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.feign.DistributionTruckParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.IntegralMqService;
......@@ -121,13 +122,24 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
List<String> truckList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo).stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
List<String> truckList;
if(Objects.equals(orderGoodsVO.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
truckList = orderGoodsTruckBindDao.
listByField(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
}else{
truckList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo).stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
}
String orderNo = orderGoodsVO.getOrderNo();
orderGoodsVO.setTruckList(truckList);
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
orderGoodsVO.setReveiveAddressAll(orderInfoFeign.getReveiveAddressAll());
orderGoodsVO.setSendAddressAll(orderInfoFeign.getSendAddressAll());
orderGoodsVO.setDispatchedOrders(truckList.size());
return orderGoodsVO;
}
......@@ -162,7 +174,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
page.getRecords().forEach(item->item.setDispatchedOrders(map.get(item.getOrderGoodsNo())));
}
}
return orderGoodsDao.pageOrderGoodsList(param);
return page;
}
@Override
......@@ -961,4 +973,28 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelOrderGoods(CancelOrderGoodsParam param) {
//取消货单
orderGoodsDao.cancelOrderGoods(param.getOrderNo());
//批量保存货单日志
List<OrderGoods> orderGoodsListByOrderNo = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
List<OrderGoodsLog> orderGoodsLogs = new ArrayList<>();
OrderGoodsLog orderGoodsLog = null;
for(OrderGoods orderGoods:orderGoodsListByOrderNo){
orderGoodsLog = new OrderGoodsLog();
orderGoodsLog.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderGoodsLog.setCreateName(param.getCreateName());
orderGoodsLog.setType(OrderGoodsLogsEnum.Type.CANCEL.getName());
orderGoodsLog.setCreateBy(param.getCreateBy());
orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消");
orderGoodsLogs.add(orderGoodsLog);
}
orderGoodsLogService.saveBatchLog(orderGoodsLogs);
}
}
......@@ -68,4 +68,18 @@ public class LineWarnCommonServiceImpl implements LineWarnCommonService {
lineWarnMqService.lineWarnNotice(lineWarnInfo.getId());
}
/**
* 暂停检测
*/
@Override
public boolean suspendCheck(LineWarnInfo lineWarnInfo){
if (lineWarnInfo == null) {return false;}
if (lineWarnInfo.getSuspendTime() != null && lineWarnInfo.getSuspendTime().isAfter(LocalDateTime.now())){
return true;
}
return false;
}
}
......@@ -2,9 +2,11 @@ package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnConfigService;
import com.clx.performance.struct.linewarn.LineWarnConfigStruct;
......@@ -32,6 +34,9 @@ public class LineWarnConfigServiceImpl implements LineWarnConfigService {
@Autowired
private LineWarnConfigStruct lineWarnConfigStruct;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(LineWarnConfigAddParam param) {
......@@ -77,6 +82,11 @@ public class LineWarnConfigServiceImpl implements LineWarnConfigService {
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfig.setCongestionTime(param.getCongestionTime());
lineWarnConfigDao.updateConfig(lineWarnConfig);
// 同步历史数据
VehicleWarnInfo vehicleWarnInfo = new VehicleWarnInfo();
lineWarnInfoDao.updateByConfig(lineWarnConfig.getId()
, lineWarnConfig.getWarnName(), lineWarnConfig.getWarnLevel());
}
@Transactional(rollbackFor = Exception.class)
@Override
......
......@@ -57,9 +57,15 @@ public class LineWarnCongestionWarnServiceImpl implements LineWarnCongestionWarn
return;
}
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
// 检测是否拥堵
Boolean flag = internalReportService.checkLineJam(orderGoods.getSendSystemAddressId(),
orderGoods.getReceiveSystemAddressId(),
orderGoods.getSendAddressId(),
orderGoods.getReceiveAddressId(),
LocalDateTimeUtils.formatTime(beginTime), lineWarnConfig.getCongestionTime());
if (!flag) {return;}
......
......@@ -3,6 +3,7 @@ package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dao.linewarn.LineWarnLogDao;
import com.clx.performance.dao.linewarn.LineWarnRangeDao;
......@@ -11,6 +12,7 @@ import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.enums.linewarn.LineWarnLogEnum;
import com.clx.performance.enums.linewarn.LineWarnRangEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.clx.performance.model.linewarn.LineWarnRange;
......@@ -49,6 +51,8 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -120,12 +124,15 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
// 更新车数统计数据
List<String> orderGoodsNoList = page.getRecords().stream().map(item -> item.getOrderGoodsNo()).collect(Collectors.toList());
if (!orderGoodsNoList.isEmpty()) {
List<OrderGoods> pengList = orderGoodsDao.selectListByOrderGoodsList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> takeList = orderChildDao.sumTakeNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> sendList = orderChildDao.sumArriveSendNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> loadList = orderChildDao.sumLoadNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> receiveList = orderChildDao.sumArriveRecieveNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> unloadList = orderChildDao.sumUnloadNumByOrderGoodsNoList(orderGoodsNoList);
Map<String, OrderGoods> pengMap = pengList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> takeMap = takeList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> sendMap = sendList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> loadMap = loadList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
......@@ -133,6 +140,7 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
Map<String, LineWarnOrderChildStatisticsDTO> unloadMap = unloadList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
for (LineWarnInfoVO item : page.getRecords()) {
item.setPengNum(pengMap.get(item.getOrderGoodsNo()) == null? 0:pengMap.get(item.getOrderGoodsNo()).getNeedTruckNum());
item.setTakeNum(takeMap.get(item.getOrderGoodsNo()) == null? 0:takeMap.get(item.getOrderGoodsNo()).getNum());
item.setArriveSendNum(sendMap.get(item.getOrderGoodsNo()) == null? 0:sendMap.get(item.getOrderGoodsNo()).getNum());
item.setLoadNum(loadMap.get(item.getOrderGoodsNo()) == null? 0:loadMap.get(item.getOrderGoodsNo()).getNum());
......
......@@ -55,9 +55,15 @@ public class LineWarnLineWarnServiceImpl implements LineWarnLineWarnService {
return;
}
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
// 检测线路是否异常
Boolean flag = internalReportService.checkLineAbnormal(orderGoods.getSendSystemAddressId(),
orderGoods.getReceiveSystemAddressId(),
orderGoods.getSendAddressId(),
orderGoods.getReceiveAddressId(),
LocalDateTimeUtils.formatTime(beginTime));
if (!flag) {return;}
......
......@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Arrays;
......@@ -47,6 +48,8 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
int needTime = unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
if (difTime < 0){difTime = 0;}
// 任务量
BigDecimal taskWeight = lineWarnCommonInfo.getTaskWeight();
......@@ -54,8 +57,9 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
BigDecimal weight = orderChildDao.sumLoadWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
if (weight != null){
taskCompleteRatio = weight.divide(taskWeight, 4, BigDecimal.ROUND_UP).movePointRight(2);
taskCompleteRatio = weight.divide(taskWeight, 4, RoundingMode.UP).movePointRight(2);
}
log.info("装车预警,任务量:{}, 完成量:{}, 任务完成率:{}, 总时间:{}, 需要时间:{}, 相差时间:{}", taskWeight, weight, taskCompleteRatio, totalTime, needTime, difTime);
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.LOAD.getCode());
......@@ -76,12 +80,16 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).movePointLeft(2).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) < 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
......
......@@ -47,6 +47,7 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
// 缺省装卸车时间
private static final int DEFAULT_LOAD_UNLOAD_TIME = 60;
private static final int DEFAULT_LOAD_UNLOAD_DAY = 7;
private static final int SECOND_PER_MIN = 60;
@Autowired
private ClxMessageConfig clxMessageConfig;
......@@ -94,14 +95,14 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 计算货源地到
int arriveSendExpectTime = gdUtils.getNeedTime(new BigDecimal[]{orderGoods.getSendLongitude(),
int arriveReceiveExpectTime = gdUtils.getNeedTime(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
LineWarnOrderGoods lineWarnOrderGoods = new LineWarnOrderGoods();
lineWarnOrderGoods.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
lineWarnOrderGoods.setTransportEndTime(LocalDateTimeUtils.parseTime(orderInfo.getTransportEndTime()));
lineWarnOrderGoods.setPendingOrderTime(orderGoods.getPendingOrderTime());
lineWarnOrderGoods.setArriveReceiveExpectTime(arriveSendExpectTime==0? null : arriveSendExpectTime);
lineWarnOrderGoods.setArriveReceiveExpectTime(arriveReceiveExpectTime==0? null : arriveReceiveExpectTime);
lineWarnOrderGoodsDao.saveEntity(lineWarnOrderGoods);
}
......@@ -126,12 +127,18 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
.loadTimeAvg(orderGoods.getSendAddressId(), orderGoods.getReceiveAddressId(),
orderGoods.getSendSystemAddressId(), orderGoods.getReceiveSystemAddressId(),
LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(DEFAULT_LOAD_UNLOAD_DAY)));
if (loadTimeAvg == null) {loadTimeAvg = DEFAULT_LOAD_UNLOAD_TIME;}
else {loadTimeAvg = loadTimeAvg/SECOND_PER_MIN;}
Integer unloadTimeAvg = orderChildDao
.unloadTimeAvg(orderGoods.getSendAddressId(), orderGoods.getReceiveAddressId(),
orderGoods.getSendSystemAddressId(), orderGoods.getReceiveSystemAddressId(),
LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(DEFAULT_LOAD_UNLOAD_DAY)));
lineWarnCommonInfo.setLoadTimeAvg(loadTimeAvg!=null? loadTimeAvg:DEFAULT_LOAD_UNLOAD_TIME);
lineWarnCommonInfo.setUnloadTimeAvg(unloadTimeAvg!=null? unloadTimeAvg:DEFAULT_LOAD_UNLOAD_TIME);
if (unloadTimeAvg == null) {unloadTimeAvg = DEFAULT_LOAD_UNLOAD_TIME;}
else {unloadTimeAvg = unloadTimeAvg/SECOND_PER_MIN;}
lineWarnCommonInfo.setLoadTimeAvg(loadTimeAvg);
lineWarnCommonInfo.setUnloadTimeAvg(unloadTimeAvg);
log.info("线路预警, lineWarnCommonInfo:{}", lineWarnCommonInfo);
......@@ -254,6 +261,7 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
ClinkMessageReq req = new ClinkMessageReq();
StringBuilder sb = new StringBuilder();
sb.append("触发");
sb.append(warnName);
sb.append("预警;货单");
......
......@@ -30,7 +30,7 @@ public class LineWarnOrderChildWarnServiceImpl implements LineWarnOrderChildWarn
@Override
public void orderChildWarn(OrderGoods orderGoods) {
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.UNLOAD.getCode());
.listByWarnType(LineWarnConfigEnum.WarnType.CHILD_ABNORMAL.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
......@@ -46,6 +46,10 @@ public class LineWarnOrderChildWarnServiceImpl implements LineWarnOrderChildWarn
return;
}
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
......
package com.clx.performance.service.impl.linewarn;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.OrderEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
......@@ -17,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Arrays;
......@@ -28,6 +33,8 @@ import java.util.Objects;
public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
// 默认时间
private static final int DEFAULT_TIME = 60;
private static final BigDecimal OVER_WEIGHT = new BigDecimal(50);
private static final BigDecimal STANDARD_WEIGHT = new BigDecimal(35);
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
......@@ -36,6 +43,8 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderService orderService;
@Override
public void takeWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
......@@ -49,16 +58,25 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
int needTime = DEFAULT_TIME+loadTimeAvg+unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
if (difTime < 0){difTime = 0;}
// 任务量
BigDecimal taskWeight = lineWarnCommonInfo.getTaskWeight();
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
BigDecimal weight = orderChildDao.sumTakeWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
if (weight != null){
taskCompleteRatio = weight.divide(taskWeight, 4, BigDecimal.ROUND_UP).movePointRight(2);
}
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
BigDecimal weight = orderChildDao.sumTakeWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(),
Objects.equals(orderInfo.getOverWeight(), OrderEnum.OverWeight.YES.getCode())
? OVER_WEIGHT
: STANDARD_WEIGHT
);
if (weight == null) {weight = BigDecimal.ZERO;}
taskCompleteRatio = weight.divide(taskWeight, 4, RoundingMode.UP).movePointRight(2);
log.info("接单预警,任务量:{}, 完成量:{}, 任务完成率:{}, 总时间:{}, 需要时间:{}, 相差时间:{}", taskWeight, weight, taskCompleteRatio, totalTime, needTime, difTime);
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.TAKE.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
......@@ -78,12 +96,16 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).movePointLeft(2).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) < 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
......
......@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
......@@ -42,15 +43,18 @@ public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
int needTime = 0;
// 接单最长时间
long difTime = totalTime - needTime;
if (difTime < 0){difTime = 0;}
// 任务量
BigDecimal taskWeight = lineWarnCommonInfo.getTaskWeight();
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
BigDecimal weight = orderChildDao.sumTakeWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
BigDecimal weight = orderChildDao.sumUnloadWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
if (weight != null){
taskCompleteRatio = weight.divide(taskWeight, 4, BigDecimal.ROUND_UP).movePointRight(2);
taskCompleteRatio = weight.divide(taskWeight, 4, RoundingMode.UP).movePointRight(2);
}
log.info("卸车预警,任务量:{}, 完成量:{}, 任务完成率:{}, 总时间:{}, 需要时间:{}, 相差时间:{}", taskWeight, weight, taskCompleteRatio, totalTime, needTime, difTime);
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.UNLOAD.getCode());
......@@ -71,12 +75,16 @@ public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).movePointLeft(2).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) < 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
......
package com.clx.performance.service.impl.linewarn;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.extranal.order.InternalReportService;
import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
......@@ -18,19 +18,20 @@ import com.msl.common.base.Optional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service
public class LineWarnWeatherWarnServiceImpl implements LineWarnWeatherWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private InternalReportService internalReportService;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
......@@ -39,10 +40,15 @@ public class LineWarnWeatherWarnServiceImpl implements LineWarnWeatherWarnServic
private GdUtils gdUtils;
@Autowired
private AddressService addressService;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Override
public void weatherWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
Boolean flag = redisTemplate.opsForValue().setIfAbsent(RedisConstants.LINE_WARN_WEATHER + orderGoods.getOrderGoodsNo(), orderGoods.getOrderGoodsNo(), 1, TimeUnit.HOURS);
if (!flag) {return;}
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.WEATHER.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
......@@ -61,28 +67,45 @@ public class LineWarnWeatherWarnServiceImpl implements LineWarnWeatherWarnServic
return;
}
// 暂停检测
boolean suspend = lineWarnCommonService.suspendCheck(lineWarnInfo);
if (suspend) {return;}
String weatherAll = "";
Optional<FeignAddressVO> addressOptional = addressService
.getSendAndReceiveAddress(orderGoods.getSendAddressId(), orderGoods.getReceiveAddressId());
if (addressOptional.isEmpty()) {return;}
FeignAddressVO feignAddressVO = addressOptional.get();
if (feignAddressVO.getSendAddress()!=null
&& StringUtils.isNotBlank(feignAddressVO.getSendAddress().getCityCode())){
String weather = gdUtils.getWeather(feignAddressVO.getSendAddress().getCityCode());
if (feignAddressVO.getSendAddress()!=null){
String cityCode = gdUtils.getCity(feignAddressVO.getSendAddress().getLongitude(),
feignAddressVO.getSendAddress().getLatitude());
String weather = gdUtils.getWeather(cityCode);
if (weatherCheck(weather)){
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, weather);
weatherAll = weather;
}
}
if (feignAddressVO.getReceiveAddress()!=null
&& StringUtils.isNotBlank(feignAddressVO.getReceiveAddress().getCityCode())){
String weather = gdUtils.getWeather(feignAddressVO.getReceiveAddress().getCityCode());
if (feignAddressVO.getReceiveAddress()!=null){
String cityCode = gdUtils.getCity(feignAddressVO.getReceiveAddress().getLongitude(),
feignAddressVO.getReceiveAddress().getLatitude());
String weather = gdUtils.getWeather(cityCode);
if (weatherCheck(weather)){
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, weather);
if (StringUtils.isBlank(weatherAll)){weatherAll = weather;}
else {
//不相同,逗号分隔
if (!weatherAll.equals(weather)){
weatherAll = weatherAll + "," + weather;
}
}
}
}
if (StringUtils.isNotBlank(weatherAll)){
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, weatherAll);
}
}
/**
......
......@@ -6,13 +6,17 @@ import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.esplus.mapper.TruckLastPosESPlusMapper;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.struct.trace.TruckTraceStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
import lombok.extern.slf4j.Slf4j;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -20,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
......@@ -35,6 +40,12 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
@Autowired
TruckLastPosESPlusMapper truckLastPosESPlusMapper;
@Autowired
TruckTraceStruct truckTraceStruct;
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -60,6 +71,20 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
// 保存
truckTraceESPlusMapper.insertBatch(esList);
//保存车辆最新的位置信息
TruckTraceESPlus trace = esList.get(esList.size() - 1);
TruckLatestPosESPlus truckLatestPos = truckLastPosESPlusMapper.selectOne(
new LambdaEsQueryWrapper<TruckLatestPosESPlus>().eq(TruckLatestPosESPlus::getTruckNo, trace.getTruckNo()));
log.info("通过车牌号:{},查询车辆最新位置信息:{}",trace.getTruckNo(),truckLatestPos);
TruckLatestPosESPlus item = truckTraceStruct.convert2LatestPos(trace);
if(Objects.nonNull(truckLatestPos)){
truckLastPosESPlusMapper.update(item,new LambdaEsQueryWrapper<TruckLatestPosESPlus>().
eq(TruckLatestPosESPlus::getTruckNo, trace.getTruckNo()));
}else{
truckLastPosESPlusMapper.insert(item);
}
}
}
package com.clx.performance.service.impl.trace;
import com.clx.performance.esplus.mapper.DriverTraceESPlusMapper;
import com.clx.performance.esplus.mapper.TruckLastPosESPlusMapper;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.DriverTraceESPlus;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
......@@ -40,6 +42,9 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Autowired
private DriverTraceESPlusMapper driverTraceESPlusMapper;
@Autowired
TruckLastPosESPlusMapper truckLastPosESPlusMapper;
@Autowired
private TruckTraceStruct truckTraceStruct;
@Autowired
......@@ -414,6 +419,11 @@ public class TruckTraceServiceImpl implements TruckTraceService {
truckTraceESPlusMapper.insertBatch(esList);
}
@Override
public TruckLatestPosESPlus getTruckLatestPos(String truckNo) {
TruckLatestPosESPlus truckLatestPos = truckLastPosESPlusMapper.selectOne(
new LambdaEsQueryWrapper<TruckLatestPosESPlus>().eq(TruckLatestPosESPlus::getTruckNo, truckNo));
log.info("通过车牌号:{},查询车辆最新位置信息:{}",truckNo,truckLatestPos);
return truckLatestPos;
}
}
......@@ -9,4 +9,6 @@ public interface LineWarnCommonService {
void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig);
void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig, String weather);
boolean suspendCheck(LineWarnInfo lineWarnInfo);
}
package com.clx.performance.service.trace;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
......@@ -41,4 +42,8 @@ public interface TruckTraceService {
void saveTruckTrace(String truckNo,Integer size,String gpsTime);
TruckLatestPosESPlus getTruckLatestPos(String truckNo);
}
......@@ -85,7 +85,7 @@ public class OrderGoodsSqlProvider {
}
public String openOrderPageGoodsList(@Param("page") Page<OrderGoodsAPPVO> page, @Param("param") List<String> orderGoodsNoList) {
public String openOrderPageGoodsList(@Param("page") Page<OrderGoodsAPPVO> page, @Param("orderGoodsNoList") List<String> orderGoodsNoList) {
String sql = new SQL() {{
SELECT("a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
......@@ -107,10 +107,10 @@ public class OrderGoodsSqlProvider {
StringJoiner sj = new StringJoiner(",","a.order_goods_no in (",")");
orderGoodsNoList.forEach(item -> sj.add("'"+item+"'"));
WHERE(" (a.pending_order_way = " + PendingOrderWayStatusEnum.Status.GK.getCode() + " OR (a.pending_order_way = " +
PendingOrderWayStatusEnum.Status.FLEET_GK.getCode() + "and " + sj + "))");
PendingOrderWayStatusEnum.Status.FLEET_GK.getCode() + " and " + sj + "))");
}
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35");
ORDER_BY("a.pending_order_time desc");
}}.toString();
......@@ -126,8 +126,9 @@ public class OrderGoodsSqlProvider {
WHERE("a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode());
WHERE(" a.pending_order_way = " + PendingOrderWayStatusEnum.Status.FLEET_GK.getCode());
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35");
WHERE("b.id is not null");
}}.toString();
return sql;
}
......
package com.clx.performance.sqlProvider;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import org.apache.ibatis.jdbc.SQL;
......@@ -42,7 +42,10 @@ public class OrderGoodsTruckBindSqlProvider {
FROM("order_goods_truck_bind a");
LEFT_OUTER_JOIN("order_goods b on a.order_goods_no = b.order_goods_no");
WHERE("a.truck_no IN (" + truckList.stream().map(code -> "'"+code+"'").collect(Collectors.joining(","))+ ")" );
WHERE("b.vehicle_usage = " + VehicleUsageEnum.Status.OWN.getCode() + " or a.`status` =" + OrderGoodsTruckBindEnum.Status.NORMAL.getCode());
WHERE("a.`status` =" + OrderGoodsTruckBindEnum.Status.NORMAL.getCode());
WHERE("b.order_goods_status IN ( " + OrderGoodsStatusEnum.Status.PAYING.getCode() + ","
+ OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode() +")");
}}.toString();
}
......@@ -50,7 +53,6 @@ public class OrderGoodsTruckBindSqlProvider {
return new SQL(){{
SELECT(" a.order_goods_no,count(*) truckNum ");
FROM("order_goods_truck_bind a");
WHERE("a.order_goods_no IN (" + fleetNoList.stream().map(code -> "'"+code+"'").collect(Collectors.joining(","))+ ")" );
StringJoiner sj = new StringJoiner(",","a.order_goods_no in (",")");
fleetNoList.forEach(item -> sj.add("'"+item+"'"));
WHERE(sj.toString());
......
......@@ -43,7 +43,7 @@ public class LineWarnInfoSqlProvider {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("warn_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("warn_time <= #{param.endTime}");}
ORDER_BY("id desc");
ORDER_BY("warn_time desc, id desc");
}}.toString();
}
......
......@@ -41,10 +41,10 @@ public class VehicleWarnInfoSqlProvider {
if (StringUtils.isNotBlank(param.getSendAddress())) {WHERE("send_address like CONCAT('%',#{param.sendAddress},'%')");}
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address like CONCAT('%',#{param.receiveAddress},'%')");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("warn_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("warn_time <= #{param.endTime}");}
ORDER_BY("id desc");
ORDER_BY("warn_time desc, id desc");
}}.toString();
}
......
......@@ -23,11 +23,11 @@ public class VehicleWarnRangeSqlProvider {
if (Objects.nonNull(param.getWarnRang())) {WHERE("warn_rang = #{param.warnRang}");}
if (StringUtils.isNotBlank(param.getSuspendObject())) {
WHERE("((warn_rage=1 and child_no =#{param.suspendObject}) " +
"or (warn_rage=2 and order_goods_no =#{param.suspendObject}))");}
WHERE("((warn_rang=1 and child_no =#{param.suspendObject}) " +
"or (warn_rang=2 and order_goods_no =#{param.suspendObject}))");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("warn_end_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("warn_end_time <= #{param.endTime}");}
ORDER_BY("id desc");
}}.toString();
......
package com.clx.performance.strategy;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.order.enums.OrderStopEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.utils.SpringContextUtils;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
......@@ -83,7 +81,7 @@ public abstract class GoodsOrderStrategy {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "已被定向单绑定车辆:" + trucks); }
}
//根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
/* LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
Message message = MessageBuilder.withBody(orderNo.getBytes()).build();
BigDecimal epochMilli = null;
......@@ -107,6 +105,6 @@ public abstract class GoodsOrderStrategy {
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_EXCHANGE, RabbitKeyConstants.ORDER_ON_ROUTE_KEY, message
);
}
}*/
}
}
......@@ -2,6 +2,7 @@ package com.clx.performance.struct.trace;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.msl.common.utils.DateStructUtil;
......@@ -20,4 +21,7 @@ public interface TruckTraceStruct {
List<DriverTruckTraceVO> convert(List<TruckTraceESPlus> list);
Page<DriverTruckTraceVO> convertPage(IPage<TruckTraceESPlus> page);
TruckLatestPosESPlus convert2LatestPos(TruckTraceESPlus item);
}
......@@ -12,6 +12,7 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
......@@ -35,6 +36,7 @@ public class GdService {
private static final String WEATHER_API = "https://restapi.amap.com/v3/weather/weatherInfo?parameters";//天气
private static final String CITY_API = "https://restapi.amap.com/v3/geocode/regeo?parameters";//城市
private String gaodeKey = "b2550e16bbc7bf9f6cd168e0f21709fc";
......@@ -405,4 +407,50 @@ public class GdService {
return weather;
}
public String getCity(BigDecimal longitude, BigDecimal latitude){
return getCity(gaodeKey, longitude, latitude);
}
public static String getCity(String key, BigDecimal longitude, BigDecimal latitude) {
String url = CITY_API+"?output=json&location=" +longitude.setScale(6, RoundingMode.HALF_UP)+","+latitude.setScale(2, RoundingMode.HALF_UP)+"&key="+key;
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 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);}
}
// 解析
String adcode = retJSONObject.getJSONObject("regeocode").getJSONObject("addressComponent").getString("adcode");
if (StringUtils.isBlank(adcode)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德城市编码接口异常, result:"+resultStr);}
return adcode;
}
}
......@@ -80,6 +80,12 @@ public class GdUtils {
public String getWeather(String city){
return gdService.getWeather(city);
}
/**
* 天气
*/
public String getCity(BigDecimal longitude, BigDecimal latitude){
return gdService.getCity(longitude,latitude);
}
/**
* 获取线路
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论