提交 25d205bf authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v18.6_youhua_20240701' into dev

# Conflicts: # performance-api/src/main/java/com/clx/performance/feign/PerformanceFeign.java # performance-api/src/main/java/com/clx/performance/vo/pc/OrderGoodsVO.java # performance-web/src/main/java/com/clx/performance/service/OrderGoodsService.java
......@@ -145,6 +145,7 @@ public interface PerformanceFeign {
*/
@GetMapping(value = {"clx-performance/feign/platformServiceFee/getPlatformServiceFeeConfig"})
Result<PlatformServiceFeeConfigFeignVO> getPlatformServiceFeeConfig();
/**
* 取消货单
* @param param
......
......@@ -49,7 +49,7 @@ public class WalletResidueDTO {
}
@JsonGetter(value="frozen")
public BigDecimal frozenFormat() {
return new BigDecimal(new Double(this.frozen)/100);
return BigDecimal.valueOf(new Double(this.frozen)/100);
}
@JsonGetter(value="residue")
public Double residueFormat() {
......@@ -57,7 +57,7 @@ public class WalletResidueDTO {
}
@JsonGetter(value="deposit")
public Double depositFormat() {
return new Double(this.deposit)/100;
return this.deposit/100;
}
public Double getDeposit() {
......
......@@ -166,4 +166,5 @@ public class OrderGoodsVO {
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0;
}
\ No newline at end of file
......@@ -51,6 +51,9 @@ public class OwnerPageSettlementOwnerVO {
@MoneyOutConvert
@ApiModelProperty(value = "开票金额")
private BigDecimal invoiceFreight;
@MoneyOutConvert
@ApiModelProperty(value = "开票服务费")
private BigDecimal invoiceServiceFee;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "状态 10:待锁定 20:待对账 30:待货主确认 40:待货主付款 50:待平台确认付款 60:待平台付款 70:待货主确认付款 80:待邮寄发票 90:已完结")
......
......@@ -249,12 +249,14 @@ public class OrderChildLoanComponent {
if (!Objects.equals(orderInfo.getSupportLoan(), StatusEnum.YES.getCode())){
log.info("3.2当前运单不支持货主借款");
return;
}
if (!Objects.equals(orderInfo.getPlatformFreightQuotationTaxType(),
if (Objects.equals(orderInfo.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())){
log.info("3.3当前运单未税不支持借款");
return;
}
......
......@@ -60,8 +60,7 @@ public class OrderGoodsFeignController {
@ApiOperation(value = "取消货单", notes = "<br>By:李瑞新")
@PostMapping({"/cancelOrderGoods"})
Result<BigDecimal> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param) {
orderGoodsService.cancelOrderGoods(param);
return Result.ok();
return Result.ok(orderGoodsService.cancelOrderGoods(param));
}
......
......@@ -105,5 +105,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void cancelOrderGoods(String orderNo);
void batchCancel(List<Integer> idList);
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
}
......@@ -64,4 +64,9 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateTruckBindExpire(List<Integer> ids);
List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList);
void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNo);
List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList);
}
......@@ -293,6 +293,13 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
.set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
);
}
@Override
public void batchCancel(List<Integer> idList) {
update(lUdWrapper()
.in(OrderGoods::getId, idList)
.set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
);
}
@Override
public void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight) {
......
......@@ -214,4 +214,21 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList) {
return baseMapper.queryOrderGoodsTruckNum(fleetNoList);
}
@Override
public void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNoList) {
update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.in(OrderGoodsTruckBind::getTruckNo, truckNoList)
);
}
@Override
public List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList) {
return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getOrderGoodsNo, cancelTruckBindOrderGoodsNoList)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode()));
}
}
......@@ -174,7 +174,7 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
@Override
public List<SettlementOwnerDetail> listInvoiceStatusSync() {
return list(lUdWrapper()
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(3))
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(1))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.eq(SettlementOwnerDetail::getInvoiceStatus, SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode())
.eq(SettlementOwnerDetail::getPayStatus, SettlementOwnerDetailEnum.PayStatus.YES.getCode())
......@@ -184,11 +184,21 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
@Override
public List<SettlementOwnerDetail> listPayStatusSync() {
return list(lUdWrapper()
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(3))
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(1))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.eq(SettlementOwnerDetail::getPayStatus, SettlementOwnerDetailEnum.PayStatus.NO.getCode())
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
@Override
public List<SettlementOwnerDetail> listInvoiceTypeSync() {
return list(lUdWrapper()
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(1))
.le(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMinutes(3))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.isNull(SettlementOwnerDetail::getInvoiceType)
);
}
}
......@@ -52,4 +52,5 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
List<SettlementOwnerDetail>listInvoiceStatusSync();
List<SettlementOwnerDetail> listPayStatusSync();
List<SettlementOwnerDetail> listInvoiceTypeSync();
}
......@@ -8,4 +8,6 @@ public interface BrokerService {
void orderChildSync(TransportParam param);
TransportVO getOrderChildStatus(String childNo);
TransportVO getOrderChildStatus(String childNo, String settlementNo);
}
......@@ -35,7 +35,13 @@ public class BrokerServiceImpl implements BrokerService {
@Override
public TransportVO getOrderChildStatus(String childNo) {
Result<TransportVO> result = brokerFeign.getTransportByChildNo(childNo, settlementConfig.getBrokerUserCode());
return getOrderChildStatus(childNo, null);
}
@Override
public TransportVO getOrderChildStatus(String childNo, String settlementNo) {
Result<TransportVO> result = brokerFeign.getTransportByChildNo(childNo, settlementConfig.getBrokerUserCode(), settlementNo);
if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
}
......
......@@ -23,6 +23,7 @@ public interface BrokerFeign {
@RequestMapping(value = "/broker-service/open/transport/getTransportByChildNo", method = RequestMethod.GET)
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String orderCode,
@RequestParam @NotNull(message = "userCode不能为空") String userCode);
@RequestParam @NotNull(message = "userCode不能为空") String userCode,
@RequestParam String settlementNo);
}
......@@ -34,23 +34,16 @@ public class SettlementJob {
@XxlJob("settlementInvoiceTypeSync")
public void settlementInvoiceTypeSync() {
// 首次
List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao
.selectListForJobOfFirst();
// 异常
List<OrderChildSyncTransportInvoiceRecord> recordList1 = orderChildSyncTransportInvoiceRecordDao
.selectListForJob();
recordList.addAll(recordList1);
List<SettlementOwnerDetail> recordList = settlementOwnerDetailDao
.listInvoiceTypeSync();
log.info("待同步无车承运运单状态,size:{}", recordList.size());
if (recordList.isEmpty()) {return;}
for (OrderChildSyncTransportInvoiceRecord item : recordList) {
for (SettlementOwnerDetail item : recordList) {
settlementMqService.invoiceTypeSync(item.getChildNo());
}
orderChildSyncTransportInvoiceRecordDao.deleteByKeys(
recordList.stream().map(item->item.getId()).collect(Collectors.toList()));
}
/**
......
......@@ -13,25 +13,33 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildPoundAuditEnum;
import com.clx.performance.event.OrderChildCancelEvent;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildImage;
import com.clx.performance.service.LastTruckService;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.feign.FeignDriverTruckModelVo;
import com.clx.user.vo.feign.TruckInfoFeignVo;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
......@@ -44,6 +52,8 @@ public class OrderChildDtsListener {
private final DriverService driverService;
private final ApplicationEventPublisher applicationEventPublisher;
private final ThirdAppConfig thirdAppConfig;
private final TruckFeign truckFeign;
private final OrderChildImageDao orderChildImageDao;
......@@ -71,7 +81,8 @@ public class OrderChildDtsListener {
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) &&
(!Objects.equals(before.getStatus(),after.getStatus()) ||
!Objects.equals(before.getLoadNet(),after.getLoadNet())) ||
!Objects.equals(before.getUnloadNet(),after.getUnloadNet())
!Objects.equals(before.getUnloadNet(),after.getUnloadNet()) ||
!Objects.equals(before.getPoundStatus(),after.getPoundStatus())
){
orderChildChangeAfter(after);
}
......@@ -91,6 +102,7 @@ public class OrderChildDtsListener {
}
}
public void orderChildChangeAfter(OrderChildMessage after){
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(after.getOrderNo());
if (orderInfoFeign == null) {
......@@ -104,6 +116,8 @@ public class OrderChildDtsListener {
FeignDriverTruckModelVo dumpType = driverService.getDumpType(truckModel).orElseThrow(ResultCodeEnum.FAIL);
after.setDumpType(dumpType.getDumpType());
}
buildOrderOtherInfo(after);
//同步after数据
Optional<OrderChildEnum.Status> option = OrderChildEnum.Status.getByCode(after.getStatus());
String statusName = option.isPresent()?option.get().getName():"未知状态";
......@@ -146,6 +160,42 @@ public class OrderChildDtsListener {
}
}
}
//构建运单其它信息
public void buildOrderOtherInfo(OrderChildMessage after){
//查询挂车车牌号
if(Objects.nonNull(after.getTruckId())){
log.info("通过车辆id:{} 开始查找运单号:{},车牌号:{} 对应的车辆信息开始查询===",
after.getTruckId(),after.getChildNo(),after.getTruckNo());
Result<TruckInfoFeignVo> result = truckFeign.getTruckInfo(after.getTruckId());
if(!result.succeed()){
log.warn("通过车辆id:{} 开始查找运单号:{},车牌号:{} 的车辆信息未查询到,响应结果:{}",
after.getTruckId(),after.getChildNo(),after.getTruckNo(),result);
}else{
log.warn("通过车辆id:{} 开始查找运单号:{},车牌号:{} 查询到对应的车辆信息,响应结果:{}",
after.getTruckId(),after.getChildNo(),after.getTruckNo(),result);
after.setTruckNo2(result.getData().getTruckNo2());
}
}
//查询收发货地对应的磅单图片信息,
if(Objects.equals(after.getPoundStatus(), OrderChildPoundAuditEnum.Status.APPROVED.getCode())){
List<OrderChildImage> orderChildImages = orderChildImageDao.listByField(OrderChildImage::getChildNo,
after.getChildNo());
if(CollectionUtils.isNotEmpty(orderChildImages)){
List<String> sendAddressPoundPicList = new ArrayList<>();
List<String> receiveAddressPoundPicList = new ArrayList<>();
orderChildImages.forEach(item->{
if(Objects.equals(item.getType(),OrderChildImage.Type.LOAD.getCode())){
sendAddressPoundPicList.add(item.getImage());
}
if(Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())){
receiveAddressPoundPicList.add(item.getImage());
}
});
after.setSendAddressPoundPicList(sendAddressPoundPicList);
after.setReceiveAddressPoundPicList(receiveAddressPoundPicList);
}
}
}
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
......
......@@ -125,12 +125,6 @@ public class OrderChildSyncTransportListener {
} catch (Exception e) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,运单号{}, 错误信息{}", orderChild.getChildNo(), ExceptionUtils.getStackTrace(e));
} finally {
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.RESULT.getCode());
entity.setRemark("异步查询状态");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
......@@ -154,22 +148,16 @@ public class OrderChildSyncTransportListener {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
// // 开票服务费
// settlementOwnerDetail.setInvoiceServiceFee(settlementCommonService.invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// // 开票金额
// settlementOwnerDetail.setInvoiceFreight(settlementCommonService.invoiceFreightCalc(orderChild.getSettlementWay(),
// orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementCommonService.settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 未税 卸车减货损不用生成扣除相关流水逻辑
if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
&& Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
}
else if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
......
......@@ -132,11 +132,19 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
//计算司机保证金
PaymentDTO paymentDTO = getPaymentDTO(orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew())) {
if(paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0){
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
//因为可能服务费为 0
if(orderChild.getFreight().compareTo(BigDecimal.ZERO)<=0){
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
}
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods,orderChild.getChildNo(), dif);
......
......@@ -469,7 +469,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 新增运单
orderChildDao.saveEntity(orderChild);
// 冻结司机保证金
if(deposit.compareTo(BigDecimal.ZERO) ==1){
if(deposit.compareTo(BigDecimal.ZERO) > 0){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFrom(checkWalletCode);
......@@ -860,7 +860,7 @@ public class OrderChildServiceImpl implements OrderChildService {
{
platformServiceFeeNew = net.multiply(freightPrice).setScale(2, RoundingMode.HALF_UP)
//平台服务费率 * 100
.multiply(platformServiceFeeRate).movePointLeft(2).setScale(2, RoundingMode.HALF_UP);
.multiply(platformServiceFeeRate).movePointLeft(2).setScale(0, RoundingMode.HALF_UP);
changeDeposit = platformServiceFeeNew.subtract(platformServiceFee);
log.info("运单号 {} ,原始冻结金额 {} ,最新冻结金额 {},运费差 {} 吨数{} 运费价格{},费率 {}",orderChild.getChildNo(),
platformServiceFee,platformServiceFeeNew,changeDeposit,net,freightPrice,platformServiceFeeRate
......@@ -1363,7 +1363,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.SETTLEMENT.getCode(),
OrderChildLogEnum.Type.SETTLEMENT.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
......@@ -2646,7 +2646,6 @@ public class OrderChildServiceImpl implements OrderChildService {
arriveBeforeStatus.add(OrderChildEnum.Status.PAY.getCode());
arriveBeforeStatus.add(OrderChildEnum.Status.GO_TO_SEND.getCode());
List<String> childNos;//取消运单
//未到达货源地之前运单(不包括取消)
List<OrderChild> arriveBeforeOrderChild = orderChildDao.listByOrderNo(param.getOrderNo(),arriveBeforeStatus);
log.info("arriveBeforeOrderChild:{}",arriveBeforeOrderChild);
......@@ -2658,6 +2657,23 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal arriveAfterWeight = arriveAfterOrderChild.stream().map(OrderChild::getWeight)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);//总拉运吨数
log.info("总拉运吨数:{}",arriveAfterWeight);
Map<String,List<String>> cancelTruckMap = new HashMap<>(); //取消运单对应的货单下的车辆Map
List<String> childNos = new ArrayList<>();//未到达货源地
for (OrderChild child : arriveBeforeOrderChild){
childNos.add(child.getChildNo());
if(cancelTruckMap.containsKey(child.getOrderGoodsNo())){
cancelTruckMap.get(child.getOrderGoodsNo()).add(generateChildTruckInfo(child));
}else{
List<String> childTruckInfoList = new ArrayList<>();
childTruckInfoList.add(generateChildTruckInfo(child));
cancelTruckMap.put(child.getOrderGoodsNo(),childTruckInfoList);
}
}
if(availableWeight.compareTo(arriveAfterWeight) >0){ //可拉运吨数大于运单拉运吨数 取消未到达货源地的运单
log.info("可拉运吨数大于运单拉运吨数,取消未到达货源地的运单:{}",availableWeight.compareTo(arriveAfterWeight));
BigDecimal weight =BigDecimal.ZERO;//运单累加吨数
......@@ -2668,16 +2684,16 @@ public class OrderChildServiceImpl implements OrderChildService {
if(weight.compareTo(subtract) >=0){
break;
}
notCancelChildNos.add(oc.getChildNo());//获取可以取消的运单
notCancelChildNos.add(oc.getChildNo());//获取不可以取消的运单
//同时移除不可取消运单对应的车辆
cancelTruckMap.get(oc.getOrderGoodsNo()).remove(generateChildTruckInfo(oc));
}
log.info("notCancelChildNos:{}",notCancelChildNos);
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
childNos.removeAll(notCancelChildNos);//剔除不需要取消的运单
}else{
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
}
log.info("批量取消运单:childNos:{}",childNos);
log.info("批量取消车辆:cancelTruckMap:{}",cancelTruckMap);
//批量取消运单
if(CollectionUtils.isNotEmpty(childNos)){
......@@ -2701,7 +2717,43 @@ public class OrderChildServiceImpl implements OrderChildService {
logs.add(log);
}
orderChildLogService.saveBatchOrderChildLog(logs);
///释放司机、车、绑定
releaseDriverAndTruck(cancelTruckMap);
}
}
}
private String generateChildTruckInfo(OrderChild child){
return child.getTruckNo() + "_" + child.getTruckId() + "_" + child.getDriverUserNo();
}
//释放司机、车、绑定
private void releaseDriverAndTruck(Map<String,List<String>> cancelTruckMap){
//释放车辆绑定关系
Set<String> orderGoodsNoList = cancelTruckMap.keySet();
List<OrderGoods> orderGoodsList = orderGoodsDao.listInField(OrderGoods::getOrderGoodsNo, orderGoodsNoList);
Map<String, Integer> orderGoodsPendOrderWayMap = orderGoodsList.stream().collect(
Collectors.toMap(OrderGoods::getOrderGoodsNo, OrderGoods::getPendingOrderWay));
for(Map.Entry<String,List<String>> entry : cancelTruckMap.entrySet()){
Integer pendingOrderWay = orderGoodsPendOrderWayMap.get(entry.getKey());
if(Objects.equals(pendingOrderWay,PendingOrderWayStatusEnum.Status.DX.getCode())
|| Objects.equals(pendingOrderWay,PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
List<String> truckNoList = new ArrayList<>();
entry.getValue().forEach(item-> {
String truckNo = item.split("_")[0];
truckNoList.add(truckNo);
goodsOrderTruckRecordComponent.deleteTruckRecord(entry.getKey(), truckNo);
});
orderGoodsTruckBindDao.batchUpdateBindTruckList(
entry.getKey(),OrderGoodsTruckBindEnum.Status.CANCEL.getCode(),truckNoList);
}
//释放司机和空重车
entry.getValue().forEach(item-> {
Integer truckId = Integer.parseInt(item.split("_")[1]);
Long driverUserNo = Long.parseLong(item.split("_")[2]);
updateDriverOrderStatusCancel(driverUserNo,truckId);
});
}
}
}
......@@ -1007,27 +1007,60 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
@Transactional(rollbackFor = Exception.class)
public BigDecimal cancelOrderGoods(CancelOrderGoodsParam param) {
log.info("取消货单:{}",param);
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
// 过滤可取消
List<OrderGoods> orderGoodsUpdateList =
orderGoodsList.stream().filter(item ->
Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CREATED.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())
).collect(Collectors.toList());
if (orderGoodsUpdateList.isEmpty()) {return BigDecimal.ZERO;}
//取消货单
orderGoodsDao.cancelOrderGoods(param.getOrderNo());
orderGoodsDao.batchCancel(orderGoodsUpdateList.stream().map(item->item.getId()).collect(Collectors.toList()));
//批量保存货单日志
List<OrderGoods> orderGoodsListByOrderNo = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
log.info("orderGoodsListByOrderNo:{}",orderGoodsListByOrderNo);
log.info("orderGoodsListByOrderNo:{}",orderGoodsUpdateList);
List<OrderGoodsLog> orderGoodsLogs = new ArrayList<>();
OrderGoodsLog orderGoodsLog = null;
BigDecimal totalCancelWeight = BigDecimal.ZERO;
for(OrderGoods orderGoods:orderGoodsListByOrderNo){
List<String> cancelTruckBindOrderGoodsNoList = new ArrayList<>();
for(OrderGoods orderGoods:orderGoodsUpdateList){
orderGoodsLog = new OrderGoodsLog();
orderGoodsLog.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderGoodsLog.setCreateName(param.getCreateName());
orderGoodsLog.setCreateName("系统");
orderGoodsLog.setType(OrderGoodsLogsEnum.Type.CANCEL.getName());
orderGoodsLog.setCreateBy(param.getCreateBy());
orderGoodsLog.setCreateBy(0L);
orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消");
orderGoodsLogs.add(orderGoodsLog);
totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
totalCancelWeight = totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
orderGoods.getResidueTransportWeight() : BigDecimal.ZERO);
if(Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.DX.getCode())
|| Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
cancelTruckBindOrderGoodsNoList.add(orderGoods.getOrderGoodsNo());
}
}
//取消货单下未接单的车辆绑定关系
if(CollectionUtils.isNotEmpty(cancelTruckBindOrderGoodsNoList)){
cancelTruckBindOrderGoodsNoList.forEach(item->goodsOrderTruckRecordComponent.deleteTruckRecord(item));
/* //查询定向货单下未接单的车辆
List<OrderGoodsTruckBind> notOrderBindTruckList = orderGoodsTruckBindDao.
queryNotOrderTruck(cancelTruckBindOrderGoodsNoList);
//删除缓存中未接单的车辆绑定
if(CollectionUtils.isNotEmpty(notOrderBindTruckList)){
for (OrderGoodsTruckBind bind : notOrderBindTruckList) {
goodsOrderTruckRecordComponent.deleteTruckRecord(bind.getOrderGoodsNo(), bind.getTruckNo());
}
}*/
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(cancelTruckBindOrderGoodsNoList,
OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
}
orderGoodsLogService.saveBatchLog(orderGoodsLogs);
return totalCancelWeight;
......
......@@ -254,10 +254,14 @@ public class PaymentServiceImpl implements PaymentService {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR);
}
if (notify.getCode() != 0) {
if(Objects.equals(notify.getCode(),"")){
if(Objects.equals(notify.getCode(),1005)){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,
"预估接单保证金"+new BigDecimal(param.getFigureNew()).movePointLeft(2)+"元,车主钱包余额不足,请先充值");
}else{
}else if(Objects.equals(notify.getCode(),6104)){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,
"预估接单保证金"+new BigDecimal(param.getFigureNew()).movePointLeft(2)+"元,车主钱包余额不足,请先充值");
}
else{
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
}
......@@ -379,6 +383,7 @@ public class PaymentServiceImpl implements PaymentService {
orderPaymentDao.selectByRelationNo(orderNo,operation,paymentItem).orNull();
if (null == orderPaymentOptional){
log.error("数据不存在 {}, {}" ,orderNo,msg);
return;
}
orderPaymentOptional.setStatus(PaymentStatusEnum.FAIL.getValue());
orderPaymentOptional.setReason(msg);
......@@ -392,6 +397,7 @@ public class PaymentServiceImpl implements PaymentService {
orderPaymentDao.selectByRelationNo(orderNo,operation,paymentItem).orNull();
if (null == orderPaymentOptional){
log.error("数据不存在 {}, {}" ,orderNo);
return;
}
orderPaymentOptional.setStatus(PaymentStatusEnum.SUCCESS.getValue());
orderPaymentDao.updateEntityByKey(orderPaymentOptional);
......@@ -404,6 +410,7 @@ public class PaymentServiceImpl implements PaymentService {
OrderPayment orderPaymentOptional = orderPaymentDao.getEntityByKey(Integer.valueOf(id)).orNull();
if (null == orderPaymentOptional){
log.error("数据不存在 {}, {}" ,id);
return;
}
orderPaymentOptional.setStatus(status);
orderPaymentDao.updateEntityByKey(orderPaymentOptional);
......@@ -416,6 +423,7 @@ public class PaymentServiceImpl implements PaymentService {
log.error("数据不存在 {}, {} ,{}" ,orderNo ,serialNo ,operation ,paymentItem );
if (null == orderPaymentOptional){
log.error("数据不存在 {}, {}" ,orderNo);
return;
}
orderPaymentOptional.setStatus(PaymentStatusEnum.SUCCESS.getValue());
orderPaymentOptional.setSerialNo(serialNo);
......
......@@ -73,8 +73,8 @@ public class NetworkDriverAccountServiceImpl implements NetworkDriverAccountServ
WalletResidueCardVO data = result.getData();
NetworkDriverAccount account = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, loginUserInfo.getUserNo()).get();
data.setAssetSum(data.getAssetSum().add(account.getAccountBalance().movePointLeft(2)));
data.setFrozen(data.getFrozen().add(account.getFrozenBalance()).setScale(2, RoundingMode.UP));
data.setResidue(data.getResidue().add(account.getUsableBalance()).setScale(2, RoundingMode.UP));
data.setFrozen(data.getFrozen().add(account.getFrozenBalance()).setScale(2, RoundingMode.HALF_UP));
data.setResidue(data.getResidue().add(account.getUsableBalance()).setScale(2, RoundingMode.HALF_UP));
return data;
}
}
......@@ -19,8 +19,6 @@ import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import com.clx.user.feign.DriverFeign;
import com.clx.user.vo.feign.BankCardVO;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
......@@ -33,7 +31,6 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import static java.util.Locale.filter;
......@@ -200,6 +197,36 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void generateCaseOutSuccessRunningWaterRecord1(SettlementDriverDetail settlementDriverDetail) {
log.info("运单同步网络货运生成司机运单提现成功流水");
NetworkDriverAccount account = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
networkDriverRunningWaterRecordDao.updateFrozenFlagByChildNo(settlementDriverDetail.getChildNo());
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.usableBalance(account.getUsableBalance())
.mobile(account.getMobile())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.EXPENDITURE.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.EXPENDITURE.getMsg())
.driverUserName(account.getDriverUserName())
.driverUserNo(account.getDriverUserNo())
.runningWaterNo(idGenerateSnowFlake.nextId(3L))
.runningWaterTypeMsg(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getMsg())
.runningWaterType(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getCode())
.childNo(settlementDriverDetail.getChildNo())
.orderNo(settlementDriverDetail.getOrderNo())
.orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.build();
networkDriverRunningWaterRecordDao.saveEntity(entity);
}
@Override
public void generateNetworkDriverRunningWaterRecord(SettlementDriverDetail settlementDriverDetail, Integer runningWaterType) {
if (NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode().equals(runningWaterType)) {
......
......@@ -9,6 +9,7 @@ import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
......@@ -31,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Objects;
/**
......@@ -64,6 +66,7 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
@Override
public void addOrderChildSyncTransportRecord(SettlementDriverDetail detail) {
OrderChildSyncTransportRecord record = struct.convertRecord(detail);
record.setId(null);
//0:未同步
record.setStatus(0);
orderChildSyncTransportRecordDao.saveEntity(record);
......@@ -88,10 +91,16 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
);
SettlementDriverDetail driverDetail = settlementDriverDetailService.selectOneByChildNo(childNo);
orderChild.setStatus(OrderChildEnum.Status.COMPLETE.getCode());
orderChild.setSettleTime(LocalDateTime.now());
orderChild.setFinishTime(orderChild.getSettleTime());
orderChildDao.updateSettlement(orderChild);
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
// 未税,卸车减货损账户不变动
// 未税,卸车减货损
networkDriverRunningWaterRecordService.generateCaseOutSuccessRunningWaterRecord1(driverDetail);
}
else {
networkDriverRunningWaterRecordService.generateCaseOutSuccessRunningWaterRecord(driverDetail);
......
......@@ -71,10 +71,9 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
settlementDriverDetail.setPlatformServiceFeeRate(orderChild.getPlatformServiceFeeRate()==null
? BigDecimal.ZERO
: orderChild.getPlatformServiceFeeRate());
settlementDriverDetail.setPlatformServiceFee(
settlementDriverDetail.getSettlementFreight()
.multiply(settlementDriverDetail.getPlatformServiceFeeRate().movePointLeft(2))
.setScale(0, RoundingMode.HALF_UP));
settlementDriverDetail.setPlatformServiceFee(orderChild.getPlatformServiceFee()==null
? BigDecimal.ZERO
: orderChild.getPlatformServiceFee());
settlementDriverDetailDao.saveEntity(settlementDriverDetail);
......
......@@ -202,21 +202,20 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
if (!settlementDriverDetail.getInvoiceType().equals(SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
paySettlementDriver(settlementDriverDetail);
} else {
if (settlementDriverDetail.getPrepayFreightFlag().equals(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode())
&& settlementDriverDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) > 0) {
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
settlementDriverDetail.setSettlementNo(settlementNo);
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
}
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
else if (settlementDriverDetail.getPrepayFreightFlag().equals(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode())
&& settlementDriverDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) > 0) {
settlementDriverDetail.setSettlementNo(settlementNo);
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
}
}
// 更新结算单
......@@ -269,22 +268,14 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
if (Objects.equals(result.getSyncStatus(), 0)) {
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("处理中");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
return;
}
// 发送mq (结算)
settlementMqService.settle(orderChild.getChildNo(), invoiceType, remark);
}catch (Exception e){
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("接口调用失败");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
log.info("结算获取状态失败, 运单号 {}",mq.getChildNo(),e);
}
}
......@@ -336,7 +327,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
// 获取状态
TransportVO result = brokerService.getOrderChildStatus(mq.getChildNo());
TransportVO result = brokerService.getOrderChildStatus(mq.getChildNo(), settlementOwnerDetail.getSettlementNo());
if (result == null){
log.info("运单号 {} 未找到运单信息",mq.getChildNo());
return;
......
......@@ -101,9 +101,9 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementCommonService.invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// // 结算金额
// settlementOwnerDetail.setSettlementFreight(
// settlementCommonService.settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(
settlementCommonService.settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//设置开票公司信息
......
......@@ -41,8 +41,8 @@ public class SettlementPlatformServiceFeeExportServiceImpl implements Settlement
fieldList.add(new ExcelField(6, "车牌号", "truckNo", 10000));
fieldList.add(new ExcelField(7, "结算金额", "settlementFreight", 10000));
fieldList.add(new ExcelField(8, "平台服务费率", "invoiceServiceFeeRate", 10000));
fieldList.add(new ExcelField(9, "平台服务费", "invoiceServiceFee", 10000));
fieldList.add(new ExcelField(8, "毛利率", "invoiceServiceFeeRate", 10000));
fieldList.add(new ExcelField(9, "毛利润", "invoiceServiceFee", 10000));
fieldList.add(new ExcelField(10, "创建时间", "createTime", 5000));
......@@ -71,7 +71,7 @@ public class SettlementPlatformServiceFeeExportServiceImpl implements Settlement
}
// 导出
ExcelUtil.export(new ExcelSheet("平台服务费统计", fieldList, dataList));
ExcelUtil.export(new ExcelSheet("毛利统计", fieldList, dataList));
}
}
......@@ -7,6 +7,7 @@ import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
......@@ -25,6 +26,8 @@ public interface NetworkDriverRunningWaterRecordService {
void generateCaseOutSuccessRunningWaterRecord(SettlementDriverDetail settlementDriverDetail);
void generateCaseOutSuccessRunningWaterRecord1(SettlementDriverDetail settlementDriverDetail);
void generateNetworkDriverRunningWaterRecord(SettlementDriverDetail settlementDriverDetail, Integer runningWaterType);
IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(NetworkDriverPageParam param);
......
......@@ -243,7 +243,9 @@ public class OrderGoodsSqlProvider {
" date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," +
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," +
"a.user_no,a.user_name,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time,a.vehicle_usage");
"a.user_no,a.user_name,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time,a.vehicle_usage," +
" a.platform_freight_quotation_tax_type, a.platform_service_fee_rate, " +
" a.deposit, a.invoice_service_fee_rate, a.settlement_way, a.support_loan ");
FROM("order_goods a");
if (Objects.nonNull(id)) {
......@@ -367,7 +369,7 @@ public class OrderGoodsSqlProvider {
for(CancelOrderGoodsWeightDTO item : cancelOrderGoodsWeight){
sj.add("update order_goods set residue_transport_weight = residue_transport_weight +" + item.getCancelWeight() +
", already_transport_weight = already_transport_weight -" + item.getCancelWeight() +
" where order_goods_no = "+item.getOrderGoodsNo()) ;
" where order_goods_no = '"+item.getOrderGoodsNo() + "'") ;
}
return sj.toString();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论