提交 040fde4b authored 作者: liruixin's avatar liruixin

Merge remote-tracking branch 'origin/v6.4_transportation_20231110' into…

Merge remote-tracking branch 'origin/v6.4_transportation_20231110' into v6.4_transportation_20231110
......@@ -12,8 +12,8 @@ public enum CollectTruckWaitEnum {
@Getter
@AllArgsConstructor
public enum ReportType {
LOAD(1, "装车类型"),
UNLOAD(2, "卸车类型");
LOAD(1, "货源地排队"),
UNLOAD(2, "目的地排队");
private final Integer code;
private final String msg;
......
......@@ -31,7 +31,7 @@ public enum IntegralRecordEnum {
ORDER_CHILD_PLATFORM_COMPENSATION(25, "平台补偿"),
REPORT_TRUCK_INFO(50, "提交基础信息"),
// REPORT_TRUCK_INFO(50, "提交基础信息"),
REPORT_REFUEL(51, "油表上报"),
REPORT_TRAFFIC(52, "上报交通拥堵"),
REPORT_SEND_ADDRESS_WAIT(53, "上报货源地需要排队"),
......@@ -41,6 +41,12 @@ public enum IntegralRecordEnum {
REPORT_QUALITY(57, "上报煤炭质量问题"),
REPORT_ABNORMAL(58, "上报拉运异常问题"),
REPORT_SEND_ADDRESS_INFO(59, "上报货源地情况"),
REPORT_TRUCK_INFO_OF_UNLOAD_TYPE(61, "提交基础信息"),
REPORT_TRUCK_INFO_OF_AUTO_LOAN(62, "提交基础信息"),
REPORT_TRUCK_INFO_OF_PARK_ADDRESS(63, "提交基础信息"),
;
private Integer value;
......@@ -49,7 +55,6 @@ public enum IntegralRecordEnum {
// 取消
public static final List<Integer> DRIVER_REPORT_lIST = Arrays.asList(
Type.REPORT_TRUCK_INFO.value,
Type.REPORT_REFUEL.value,
Type.REPORT_TRAFFIC.value,
Type.REPORT_SEND_ADDRESS_WAIT.value,
......@@ -60,18 +65,6 @@ public enum IntegralRecordEnum {
Type.REPORT_ABNORMAL.value
);
// 取消
public static final List<Integer> PLATFORM_CANCEL_lIST = Arrays.asList(
Type.REPORT_TRUCK_INFO.value,
Type.REPORT_REFUEL.value,
Type.REPORT_TRAFFIC.value,
Type.REPORT_SEND_ADDRESS_WAIT.value,
Type.REPORT_SEND_ADDRESS_NO_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.value,
Type.REPORT_QUALITY.value,
Type.REPORT_ABNORMAL.value
);
}
......@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@FeignClient(name = "clx-performance")
......@@ -20,4 +21,11 @@ public interface OrderChildFeign {
Result<OrderChildLineStatisticsVO> lineStatistics(@RequestParam @NotNull(message = "发货地址不可为空") Integer sendSystemAddressId,
@RequestParam @NotNull(message = "收货货地不可为空") Integer receiveSystemAddressId);
@RequestMapping(value = "clx-performance/feign/orderChild/syncLastTruck", method = RequestMethod.GET)
Result<?> syncLastTruck(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo);
}
......@@ -3,10 +3,10 @@ package com.clx.performance.vo.pc;
import com.clx.performance.util.NumberToChineseUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import java.util.Arrays;
import java.util.List;
/**
* @Author: aiqinguo
......@@ -58,4 +58,28 @@ public class IntegralTruckVO {
@ApiModelProperty(value = "信息上报积分", example = "1")
private Integer reportIntegral=0;
@ApiModelProperty(value = "信息上报积分", example = "1")
private List<IntegralItem> integralItemList;
public List<IntegralItem> getIntegralItemList() {
return Arrays.asList(
new IntegralItem("运单完成积分", orderChildCompleteIntegral),
new IntegralItem("平台补偿积分", platformCompensationIntegral),
new IntegralItem("运单取消积分", orderChildCancelIntegral),
new IntegralItem("运单超时积分", orderChildTimeoutIntegral),
new IntegralItem("信息上报积分", reportIntegral)
);
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public static class IntegralItem{
@ApiModelProperty(value = "名称", example = "1")
private String name;
@ApiModelProperty(value = "信息上报积分", example = "1")
private Integer integral;
}
}
\ No newline at end of file
......@@ -30,4 +30,8 @@ public class OrderChildLineStatisticsVO {
@ApiModelProperty("时长均值")
private Integer timeAvg;
@ApiModelProperty("司机运费")
private BigDecimal driverFreight;
}
......@@ -84,7 +84,7 @@ public class CollectTruckWaitVO {
@ApiModelProperty(value = "预计等待时长图片", example = "")
private List<String> stationImageList;
public List<String> getStationImageList() {
return StringUtils.isEmpty(stationOutImage)? new ArrayList<>() : JSON.parseArray(stationInImage, String.class);
return StringUtils.isEmpty(stationInImage)? new ArrayList<>() : JSON.parseArray(stationInImage, String.class);
}
@ApiModelProperty(value = "上报时间", example = "")
......
......@@ -2,6 +2,7 @@ package com.clx.performance.controller.feign;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO;
......@@ -12,6 +13,7 @@ import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
......@@ -26,6 +28,8 @@ public class OrderChildFeignController {
private final FeignOrderChildService feignOrderChildService;
private final LastTruckService lastTruckService;
@GetMapping({"/getOrderChildTotalByUserNo"})
Integer getTrucksByOrderGoodsNo(@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo) {
......@@ -58,4 +62,13 @@ public class OrderChildFeignController {
}
@ApiOperation(value = "运单取消/到达最晚拉运时间 同步最后一车", notes = "<br>By:刘海泉")
@RequestMapping(value = "/syncLastTruck", method = RequestMethod.GET)
Result<?> syncLastTruck(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo){
return lastTruckService.syncLastTruckChild4OrderTrigger(orderNo);
}
}
......@@ -23,6 +23,9 @@ public interface IntegralRecordDao extends BaseDao<IntegraRecordMapper, Integral
Integer sumIntegral(@Param("statisticsId") Integer statisticsId);
IntegralRecord selectByStatisticsIdAndType(@Param("statisticsId") Integer statisticsId, @Param("type") Integer type);
int existByTruckNoAndType(@Param("truckNo") String truckNo, @Param("type") Integer type);
Integer sumByStatisticsIdAndTypes(@Param("statisticsId") Integer statisticsId, @Param("list") List<Integer> typeList);
Integer sumByStatisticsIdAndTypeAndTime(@Param("statisticsId") Integer statisticsId,
......
......@@ -11,7 +11,6 @@ import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional;
import com.msl.common.base.PageParam;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
......@@ -53,7 +52,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(PageCarrierOrderChildParam param);
Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String childNo);
Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo);
OrderChild getGoingLatestOrderChild(Long driverUserNo);
......@@ -152,4 +151,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> selectInOrderChildNoList(List<String> childNoList);
List<Double> getLossNet(OrderChildReportParam param);
BigDecimal getLastDriverFreightByTransportLine(Integer sendSystemAddressId, Integer receiveSystemAddressId);
OrderChild findLastTruckChildByCreateTime(String orderNo);
}
......@@ -51,4 +51,6 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<OrderGoodsTruckBind> getCancelOrderGoods(List<String> truckList, String beginTime, String endTime);
void deleteByOrderGoods(String orderGoodsNo);
List<String> findUnreleasedTruck();
}
......@@ -45,6 +45,11 @@ public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, Inte
);
}
@Override
public int existByTruckNoAndType(String truckNo, Integer type) {
return baseMapper.existByTruckNoAndType(truckNo, type);
}
@Override
public Integer sumByStatisticsIdAndTypes(Integer statisticsId, List<Integer> typeList) {
return baseMapper.sumByStatisticsIdAndTypes(statisticsId, typeList);
......
......@@ -13,11 +13,9 @@ import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional;
import com.msl.common.base.PageParam;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -25,6 +23,7 @@ import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqinguo
......@@ -452,4 +451,28 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
public List<Double> getLossNet(OrderChildReportParam param) {
return baseMapper.getLossNet(param);
}
@Override
public BigDecimal getLastDriverFreightByTransportLine(Integer sendSystemAddressId, Integer receiveSystemAddressId) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getSendSystemAddressId,sendSystemAddressId);
query.eq(OrderChild :: getReceiveSystemAddressId,receiveSystemAddressId);
query.le(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode());
query.orderByDesc(OrderChild :: getCreateTime);
query.last("limit 1");
OrderChild child = baseMapper.selectOne(query);
if(Objects.nonNull(child)){
return child.getFreight();
}
return BigDecimal.ZERO;
}
@Override
public OrderChild findLastTruckChildByCreateTime(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getOrderNo,orderNo);
query.orderByDesc(OrderChild ::getCreateTime);
query.last("limit 1");
return baseMapper.selectOne(query);
}
}
......@@ -50,6 +50,9 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
return Optional.ofNullable(getOne(lQrWrapper()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getTruckNo, truckNo)
.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),
OrderGoodsTruckBindEnum.Status.GET.getCode()
)
));
}
......@@ -133,7 +136,8 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
if(StringUtils.isNotBlank(truckNo)){
query.eq(OrderGoodsTruckBind::getTruckNo, truckNo);
}
query.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode());
query.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),
OrderGoodsTruckBindEnum.Status.GET.getCode(), OrderGoodsTruckBindEnum.Status.SUCCESS.getCode());
query.orderByDesc(OrderGoodsTruckBind :: getCreateTime);
return baseMapper.selectList(query);
}
......@@ -171,4 +175,9 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public void deleteByOrderGoods(String orderGoodsNo) {
baseMapper.delete(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo));
}
@Override
public List<String> findUnreleasedTruck() {
return baseMapper.findUnreleasedTruck();
}
}
......@@ -54,7 +54,6 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
public boolean updateFinalPaymentStatusBySettlementNo(String settlementNo, Integer finalPaymentStatus){
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getSettlementNo, settlementNo)
.ne(SettlementOwnerDetail::getSettlementFreight, 0)
.set(SettlementOwnerDetail::getFinalPaymentStatus, finalPaymentStatus)
);
}
......
......@@ -23,6 +23,10 @@ public enum PayRemarkEnum {
DRIVER_SALE_UNFREEZE(13, "司机支付货款给货主"),
//v78 解冻保险
UNFREEZE_INSURANCE(14, "解冻保险"),
//v78 解冻保险
OWNER_PAY_DRIVER_INSURANCE(15, "货主取消订单赔偿金"),
DRIVER_PAY_OWNER_DRIVER_INSURANCE(16, "司机取消订单赔偿金"),
;
private static Map<Integer, String> map = new ConcurrentHashMap<>();
......
......@@ -96,16 +96,10 @@ public class OrderChildDtsListener {
Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic());
log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() >= OrderChildEnum.Status.COMPLETE.getCode()){
if(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode()){
OrderChild child = lastTruckService.getLastTruckChild(after.getOrderNo());
if(Objects.nonNull(child)){
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
log.info("开始同步最后一车的运单,运单编号:{},运单信息:{}",child.getChildNo(),JSON.toJSONString(message));
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(message),message.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
lastTruckService.syncLastTruckChild(child);
}
}
}
......
......@@ -25,7 +25,7 @@ public class OrderChildDriverConfirmListener {
@Autowired
private OrderChildMqHandlerService orderChildMqHandlerService;
@RabbitListener(queues = RabbitKeyOrderChildConstants.ORDER_CHILD_ADD_QUEUE)
@RabbitListener(queues = RabbitKeyOrderChildConstants.ORDER_CHILD_DRIVER_CONFIRM_QUEUE)
public void process(Message message) {
try{
log.info("运单-司机确认收货, message:{}", new String(message.getBody()));
......
......@@ -48,4 +48,7 @@ public interface IntegraRecordMapper extends BaseMapper<IntegralRecord> {
@Param("beginTime")String beginTime,
@Param("endTime")String endTime);
@Select("SELECT IFNULL((SELECT 1 FROM integral_record WHERE truck_no=#{truckNo} and type=#{type} LIMIT 1),0)")
int existByTruckNoAndType(@Param("truckNo") String truckNo, @Param("type") Integer type);
}
\ No newline at end of file
......@@ -78,6 +78,8 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight")
BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getCancelOrderGoods")
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param);
@Select("select sum(already_transport_weight) from order_goods where order_no=#{orderNo}")
......
......@@ -3,14 +3,12 @@ package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderGoodsDriverTruck;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
import com.clx.performance.sqlProvider.OrderGoodsTruckBindSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -30,4 +28,8 @@ public interface OrderGoodsTruckBindMapper extends BaseMapper<OrderGoodsTruckBin
List<Integer> getTrucksByOrderGoodsNo(@Param("orderGoodsNo") String orderGoodsNo);
List<OrderGoodsDriverTruck> selectListByTruckNo(List<OrderGoodsDriverTruck> truckList);
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "findUnreleasedTruck")
List<String> findUnreleasedTruck();
}
\ No newline at end of file
......@@ -12,6 +12,8 @@ public interface IntegralRecordService {
void addDriverReportRecord(AppIntegralRuleVO ruleInfo, String truckNo, Integer type, Integer integral, String remark);
void addDriverTruckReportRecord(AppIntegralRuleVO ruleInfo, String truckNo, Integer type, Integer integral, String remark);
void addPlatformCompensationRecord(String truckNo);
IntegralRecord save(Integer statisticsId, LocalDateTime statisticsDate, String truckNo, Integer type, Integer integral, String remark);
......
package com.clx.performance.service;
import com.clx.performance.model.OrderChild;
import com.msl.common.result.Result;
public interface LastTruckService {
OrderChild getLastTruckChild(String orderNo);
Result<?> syncLastTruckChild(OrderChild child);
Result<?> syncLastTruckChild4OrderTrigger(String orderNo);
}
......@@ -104,6 +104,38 @@ public class IntegralRecordServiceImpl implements IntegralRecordService {
}
@Override
public void addDriverTruckReportRecord(AppIntegralRuleVO ruleInfo, String truckNo, Integer type, Integer integral, String remark) {
String statisticsDate = LocalDateTimeUtils.getWeekStart();
IntegralTruck truck = integralTruckDao.getByTruckNo(truckNo).orNull();
if (truck == null) {return;}
// 查找最新统计
IntegralStatistics statistics = integralStatisticsDao.selectByTruckNoAndStatisticsDate(truckNo, statisticsDate).orNull();
if (statistics == null) {return;}
int exist = integralRecordDao.existByTruckNoAndType(truckNo, type);
if (exist > 0){
log.info("上报积分重复,本次无效, truckNo:{}, type:{}, integral:{}, remark:{}", truckNo, type, integral, remark);
return;
}
// 更新积分
statistics.setIntegral(statistics.getIntegral()+integral);
integralStatisticsDao.updateIntegral(statistics);
truck.setIntegral(statistics.getIntegral());
integralTruckDao.updateIntegral(truck);
// 新增积分记录
IntegralRecord record = save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), type, integral, remark);
// 发送mq (新增积分记录)
integralMqService.integralRecordAdd(record.getStatisticsId(), record.getTruckNo(), record.getType(), record.getIntegral(), record.getRemark());
}
@Override
public void addPlatformCompensationRecord(String truckNo) {
......
......@@ -217,7 +217,7 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.ORDER_CHILD_ARRIVE_SEND_ADDRESS_TIMEOUT_CANCEL.getValue()
);
List<Integer> reportTypeList = Arrays.asList(
IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getValue(),
IntegralRecordEnum.Type.REPORT_REFUEL.getValue(),
IntegralRecordEnum.Type.REPORT_TRAFFIC.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_WAIT.getValue(),
......@@ -226,7 +226,11 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_QUALITY.getValue(),
IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue()
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue(),
IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_UNLOAD_TYPE.getValue(),
IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_AUTO_LOAN.getValue(),
IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_PARK_ADDRESS.getValue()
);
for (Map.Entry<String, List<IntegralRecord>> entry : map.entrySet()) {
Integer orderChildCompleteIntegral = 0;
......
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.open.sdk.enums.ResultStatusEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.MslAppConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......@@ -26,6 +33,8 @@ public class LastTruckServiceImpl implements LastTruckService {
private final OrderFeign orderFeign;
private final OrderChildDao orderChildDao;
private final OrderChildStruct orderChildStruct;
private final MslAppConfig mslAppConfig;
/**
* @Author kavin
* @Description 判断最后一车的逻辑
......@@ -51,4 +60,36 @@ public class LastTruckServiceImpl implements LastTruckService {
}
return null;
}
/**
* @Author kavin
* @Description 同步最后一车
* @Param [child]
* @return
**/
@Override
public Result<?> syncLastTruckChild(OrderChild child) {
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
log.info("开始同步最后一车的运单,运单编号:{},运单信息:{}",child.getChildNo(), JSON.toJSONString(message));
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(message),message.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
return result2;
}
/**
* @Author kavin
* @Description 订单取消、到达最晚拉运时间 同步最后一车
* @Param [orderNo]
* @return
**/
public Result<?> syncLastTruckChild4OrderTrigger(String orderNo) {
OrderChild child = orderChildDao.findLastTruckChildByCreateTime(orderNo);
log.info("订单取消/到达最晚拉运时间获取最后一车运单,订单号:{} ,获取到的最后一车的运单信息:{}",orderNo,JSON.toJSONString(child));
if(Objects.nonNull(child)){
return syncLastTruckChild(child);
}
return Result.ok("承运系统提示:承运系统未查询到该订单下的运单信息");
}
}
......@@ -1484,7 +1484,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
//orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.SUCCESS.getCode());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo(),orderChild.getTruckNo());
......
......@@ -364,7 +364,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
String orderGoodsNo = orderGoodsParams.getOrderGoodsNo();
List<OrderChild> orderChildList = orderChildDao.getOrderChildInfoByOrderGoodsNo(orderGoodsNo).get();
List<OrderChild> orderChildList = orderChildDao.selectListByOrderGoodsNo(orderGoodsNo);
boolean pendingOrderWayFlag = CollectionUtils.isNotEmpty(orderChildList);
if (pendingOrderWayFlag) {
......@@ -417,8 +417,11 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
}
}
orderGoodsTruckBindDao.saveBatchEntity(param.getOrderNo(), orderGoodsNo, truckList, now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
if (CollectionUtils.isNotEmpty(truckList)) {
orderGoodsTruckBindDao.saveBatchEntity(param.getOrderNo(), orderGoodsNo, truckList, now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
}
}
orderGoodsStatusLazyComponent.deleteRedisRecordForLastOrderTime(orderGoodsNo);
......
......@@ -18,6 +18,7 @@ import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayUnitDTO;
import com.clx.performance.param.pc.payment.PayUserDTO;
import com.clx.performance.service.ThirdPartRequestLogService;
import com.google.gson.Gson;
import com.msl.common.dto.HttpDTO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
......@@ -92,7 +93,7 @@ public class PaymentServiceImpl implements PaymentService {
log.info("发起支付请求日志 {}", JSON.toJSONString(payUserDTO));
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null || StringUtils.isNotBlank(notify.getMsg())) {
if (notify == null || notify.getCode() != 0) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
......@@ -133,7 +134,7 @@ public class PaymentServiceImpl implements PaymentService {
log.info("发起支付请求日志 {}", payUserDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null || StringUtils.isNotBlank(notify.getMsg())) {
if (notify == null || notify.getCode() != 0) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
......@@ -169,9 +170,11 @@ public class PaymentServiceImpl implements PaymentService {
}))
.peek(dto -> log.info("http请求返回------dto->{}", dto))
.mapTry(dto -> EncryptUtil.decrypt(dto.getData(), TRANSPORT_KEY))
.map(this::covertResult)
.mapWithObj(new TypeReference<Result<Object>>() {
}, this::covertResult)
.peek(result -> thirdPartRequestLogService.updateResult(httpLogId, result))
.filter(Result::succeed)
// .filter(Result::succeed)
.orElseThrow();
} catch (GeneralSecurityException e) {
log.error("解密失败", e);
......@@ -179,9 +182,12 @@ public class PaymentServiceImpl implements PaymentService {
}
}
private <T> Result<?> covertResult(String result) {
return JSON.parseObject(result, Result.class);
private <T> Result<T> covertResult(String result, TypeReference<Result<T>> reference) {
return new Gson().fromJson(result, reference.getType());
}
}
......@@ -80,6 +80,7 @@ public class TruckServiceImpl implements TruckService {
/**
* @Author kavin
* @Description geo 获取附近车辆
......@@ -161,20 +162,23 @@ public class TruckServiceImpl implements TruckService {
}
Map<String,Integer> truckStatusMap = this.getTruckStatusMap();
List<GeoResult<RedisGeoCommands.GeoLocation<String>>> content = sortResult.getContent();
//查询定向单绑定的车辆列表
List<String> bindTruckNos = orderGoodsTruckBindDao.findUnreleasedTruck();
List<PageTruckListVO> filterList = new ArrayList<>();
//车辆距离发货地由近及远的车辆列表信息
for(GeoResult<RedisGeoCommands.GeoLocation<String>> item : content){
String truckNo = item.getContent().getName();
String truckLevel = "A";
double maxDistance = item.getDistance().getValue();
//进行筛选
//默认重车过滤掉
if(Objects.equals(DriverTruckEnum.TruckOrderStatus.ORDER_HEAVY.getCode(),truckStatusMap.get(truckNo))){
continue;
}
//绑定的定向车进行过滤
if(bindTruckNos.contains(truckNo)){
continue;
}
if(StringUtils.isNotBlank(param.getTruckNo()) && !StringUtils.equals(truckNo,param.getTruckNo())){
continue;
}
......@@ -335,15 +339,13 @@ public class TruckServiceImpl implements TruckService {
Map<String,Integer> truckStatusMap = this.getTruckStatusMap();
List<OrderGoodsTruckListVO> result = new ArrayList<>();
truckList.stream().forEach(item->{
Integer orderedStatus = Objects.equals(OrderGoodsTruckBindEnum.Status.GET.getCode(),item.getStatus())?1:0;
truckList.forEach(item->{
Integer orderedStatus = Objects.equals(OrderGoodsTruckBindEnum.Status.GET.getCode(),item.getStatus())
|| Objects.equals(OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(),item.getStatus())?1:0;
OrderGoodsTruckListVO vo = OrderGoodsTruckListVO.builder().truckNo(item.getTruckNo()).truckLevel("A").
truckUseStatus(truckStatusMap.get(item.getTruckNo())).orderedStatus(orderedStatus).build();
result.add(vo);
});
String orderNo = truckList.get(0).getOrderNo();
GeoResults<RedisGeoCommands.GeoLocation<String>> sortResult = this.vicinityTruckList(orderNo,Integer.MAX_VALUE,Integer.MAX_VALUE);
if(Objects.isNull(sortResult)){
......
......@@ -34,6 +34,8 @@ public class FeignOrderChildServiceImpl implements FeignOrderChildService {
vo.setPoundDifferenceRatioAvg(linePoundDifferenceRatioAvg==null? null:linePoundDifferenceRatioAvg.setScale(4, RoundingMode.HALF_UP).movePointRight(2));
vo.setTimeAvg(timeAvg==null? null : timeAvg/60);
BigDecimal driverFreight = orderChildDao.getLastDriverFreightByTransportLine(sendSystemAddressId, receiveSystemAddressId);
vo.setDriverFreight(driverFreight);
return vo;
}
......
......@@ -66,8 +66,8 @@ public class CollectTruckServiceImpl implements CollectTruckService {
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getMsg());
integralRecordService.addDriverTruckReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_UNLOAD_TYPE.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_UNLOAD_TYPE.getMsg());
}
@Transactional(rollbackFor = Exception.class)
......@@ -100,8 +100,8 @@ public class CollectTruckServiceImpl implements CollectTruckService {
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getMsg());
integralRecordService.addDriverTruckReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_AUTO_LOAN.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_AUTO_LOAN.getMsg());
}
......@@ -134,8 +134,8 @@ public class CollectTruckServiceImpl implements CollectTruckService {
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getMsg());
integralRecordService.addDriverTruckReportRecord(ruleInfo, truck.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_PARK_ADDRESS.getValue(),
ruleInfo.getDriverReportRule().getIntegralTruck(), IntegralRecordEnum.Type.REPORT_TRUCK_INFO_OF_PARK_ADDRESS.getMsg());
}
......
......@@ -31,7 +31,7 @@ public class PayServiceImpl implements PayService {
public void driverPay(String settlementNo, Long driverUserNo, Integer figure) {
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(driverUserNo).orElseThrow(ResultCodeEnum.FAIL);
pay(driverInfoFeignVo.getWalletCode(), mslPaymentConfig.getTransportWalletCode(), figure, settlementNo, PayRemarkEnum.toString(PayRemarkEnum.COMPENSATION_TO_DRIVER.getValue()));
pay(driverInfoFeignVo.getWalletCode(), mslPaymentConfig.getTransportWalletCode(), figure, settlementNo, PayRemarkEnum.toString(PayRemarkEnum.DRIVER_PAY_OWNER_DRIVER_INSURANCE.getValue()));
}
......@@ -42,7 +42,7 @@ public class PayServiceImpl implements PayService {
public void payDriver(String settlementNo, Long driverUserNo, Integer figure) {
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(driverUserNo).orElseThrow(ResultCodeEnum.FAIL);
pay(mslPaymentConfig.getTransportWalletCode(), driverInfoFeignVo.getWalletCode(), figure, settlementNo, PayRemarkEnum.toString(PayRemarkEnum.COMPENSATION_TO_DRIVER.getValue()));
pay(mslPaymentConfig.getTransportWalletCode(), driverInfoFeignVo.getWalletCode(), figure, settlementNo, PayRemarkEnum.toString(PayRemarkEnum.OWNER_PAY_DRIVER_INSURANCE.getValue()));
}
/**
......
......@@ -198,15 +198,28 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
*/
private void paySettlementDriver(SettlementDriverDetail detail){
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(detail.getDriverUserNo()).orElseThrow(ResultCodeEnum.FAIL);
PayParam noCheckPwd = PayParam.builder().from(
Integer.valueOf(mslPaymentConfig.getTransportWalletCode()))
.to(Integer.valueOf(driverInfoFeignVo.getWalletCode()))
.figure(detail.getSettlementFreight().intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
PayParam noCheckPwd = null ;
if(detail.getSettlementFreight().compareTo(BigDecimal.ZERO) > 0){
noCheckPwd = PayParam.builder().from(mslPaymentConfig.getTransportWalletCode())
.to(driverInfoFeignVo.getWalletCode())
.figure(detail.getSettlementFreight().intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}else{
BigDecimal freight = detail.getSettlementFreight().abs();
noCheckPwd = PayParam.builder().from(driverInfoFeignVo.getWalletCode())
.to(mslPaymentConfig.getTransportWalletCode())
.figure(freight.intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}
Result result = null;
try{
result = paymentService.paymentWallet(noCheckPwd);
......
package com.clx.performance.sqlProvider;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoodsTruckBind;
import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime;
import java.util.List;
public class OrderGoodsTruckBindSqlProvider {
......@@ -23,4 +22,16 @@ public class OrderGoodsTruckBindSqlProvider {
}
return sqlList.toString();
}
public String findUnreleasedTruck(){
return new SQL(){{
SELECT(" truck_no ");
FROM("order_goods_truck_bind");
WHERE("status IN (" + OrderGoodsTruckBindEnum.Status.GET.getCode() + "," +
OrderGoodsTruckBindEnum.Status.NORMAL.getCode() + ")" );
}}.toString();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论