提交 a335f0dc authored 作者: 艾庆国's avatar 艾庆国

承运与无车承运对接

上级 669f0a58
...@@ -49,6 +49,22 @@ public enum SettlementOwnerDetailEnum { ...@@ -49,6 +49,22 @@ public enum SettlementOwnerDetailEnum {
return getByCode(code).map(FinalPaymentStatus::getMsg).orElse(null); return getByCode(code).map(FinalPaymentStatus::getMsg).orElse(null);
} }
} }
@Getter
@AllArgsConstructor
public enum InvoiceChannel {
BROKER(1, "无车承运"),
;
private final Integer code;
private final String msg;
public static Optional<InvoiceChannel> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(InvoiceChannel::getMsg).orElse(null);
}
}
} }
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 结算
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementInvoiceStatusSyncMqParam {
private String childNo; //运单编号
}
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 结算
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementInvoiceTypeSyncMqParam {
private String childNo; //运单编号
}
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 结算
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementPayStatusSyncMqParam {
private String childNo; //运单编号
}
...@@ -7,7 +7,7 @@ import lombok.ToString; ...@@ -7,7 +7,7 @@ import lombok.ToString;
/** /**
* @Author: aiqingguo * @Author: aiqingguo
* @Description: 开票标识同步 * @Description: 结算统计
* @Date: 2023-10-19 15:45:25 * @Date: 2023-10-19 15:45:25
* @Version: 1.0 * @Version: 1.0
*/ */
...@@ -15,7 +15,7 @@ import lombok.ToString; ...@@ -15,7 +15,7 @@ import lombok.ToString;
@Getter @Getter
@ToString @ToString
@NoArgsConstructor @NoArgsConstructor
public class SettlementDetailInvoiceTypeSyncMqParam { public class SettlementStatisticsMqParam {
private String childNo; //运单编号 private String childNo; //运单编号
private Integer InvoiceType; //司机计费明细id private Integer InvoiceType; //司机计费明细id
......
...@@ -72,6 +72,20 @@ public class RabbitSettlementConfig { ...@@ -72,6 +72,20 @@ public class RabbitSettlementConfig {
public Binding settlementDetailInvoiceTypeSyncQueueBinding() { public Binding settlementDetailInvoiceTypeSyncQueueBinding() {
return BindingBuilder.bind(settlementDetailInvoiceTypeSyncQueue()).to(settlementDefaultExchange()).with(RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY); return BindingBuilder.bind(settlementDetailInvoiceTypeSyncQueue()).to(settlementDefaultExchange()).with(RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY);
} }
/**
* 开票方式同步
*/
@Bean
public Queue settlementInvoiceTypeSyncQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_TYPE_SYNC_QUEUE);
}
@Bean
public Binding settlementInvoiceTypeSyncQueueBinding() {
return BindingBuilder.bind(settlementInvoiceTypeSyncQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_TYPE_SYNC_ROUTING_KEY);
}
/** /**
* 结算 * 结算
*/ */
...@@ -80,10 +94,34 @@ public class RabbitSettlementConfig { ...@@ -80,10 +94,34 @@ public class RabbitSettlementConfig {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_QUEUE); return new Queue(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_QUEUE);
} }
@Bean @Bean
public Binding settlementSettleQueueQueueBinding() { public Binding settlementSettleQueueBinding() {
return BindingBuilder.bind(settlementSettleQueue()).to(settlementDefaultExchange()) return BindingBuilder.bind(settlementSettleQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY); .with(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY);
} }
/**
* 支付状态
*/
@Bean
public Queue settlementPayStatusSyncQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_PAY_STATUS_SYNC_QUEUE);
}
@Bean
public Binding settlementPayStatusSyncQueueBinding() {
return BindingBuilder.bind(settlementPayStatusSyncQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_PAY_STATUS_SYNC_ROUTING_KEY);
}
/**
* 开票状态
*/
@Bean
public Queue settlementInvoiceSyncQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_QUEUE);
}
@Bean
public Binding settlementInvoiceSyncQueueBinding() {
return BindingBuilder.bind(settlementInvoiceSyncQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_ROUTING_KEY);
}
} }
...@@ -40,15 +40,32 @@ public class RabbitKeySettlementConstants { ...@@ -40,15 +40,32 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_DETAIL_ADD_ROUTING_KEY = PREFIX +"settlementDetail.add"+QUEUE_ROUTING_KEY; public static final String SETTLEMENT_DETAIL_ADD_ROUTING_KEY = PREFIX +"settlementDetail.add"+QUEUE_ROUTING_KEY;
/** /**
* 同步开票标识 * 计费统计
*/ */
public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE; public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE;
public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE_ROUTING_KEY; public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE_ROUTING_KEY;
/**
* 同步开票标识
*/
public static final String SETTLEMENT_INVOICE_TYPE_SYNC_QUEUE = PREFIX +"settlementInvoiceType.sync"+QUEUE;
public static final String SETTLEMENT_INVOICE_TYPE_SYNC_ROUTING_KEY = PREFIX +"settlementInvoiceType.sync"+QUEUE_ROUTING_KEY;
/** /**
* 结算 * 结算
*/ */
public static final String SETTLEMENT_SETTLE_QUEUE = PREFIX +"settlement.settle"+QUEUE; public static final String SETTLEMENT_SETTLE_QUEUE = PREFIX +"settlement.settle"+QUEUE;
public static final String SETTLEMENT_SETTLE_ROUTING_KEY = PREFIX +"settlement.settle"+QUEUE_ROUTING_KEY; public static final String SETTLEMENT_SETTLE_ROUTING_KEY = PREFIX +"settlement.settle"+QUEUE_ROUTING_KEY;
/**
* 开票状态同步
*/
public static final String SETTLEMENT_INVOICE_STATUS_SYNC_QUEUE = PREFIX +"settlementInvoiceStatus.sync"+QUEUE;
public static final String SETTLEMENT_INVOICE_STATUS_SYNC_ROUTING_KEY = PREFIX +"settlementInvoiceStatus.sync"+QUEUE_ROUTING_KEY;
/**
* 支付状态同步
*/
public static final String SETTLEMENT_PAY_STATUS_SYNC_QUEUE = PREFIX +"settlementPayStatus.sync"+QUEUE;
public static final String SETTLEMENT_PAY_STATUS_SYNC_ROUTING_KEY = PREFIX +"settlementPayStatus.sync"+QUEUE_ROUTING_KEY;
} }
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.listener.OrderChildSyncTransportListener; import com.clx.performance.listener.OrderChildSyncTransportListener;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -21,23 +21,51 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -21,23 +21,51 @@ import org.springframework.web.bind.annotation.RestController;
*/ */
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping(value="/temp/broker") @RequestMapping(value="/temp/settlement")
public class TempSettlementController { public class TempSettlementController {
@Autowired @Autowired
private OrderChildDao orderChildDao; private OrderChildDao orderChildDao;
@Autowired
private SettlementMqService settlementMqService;
@Autowired @Autowired
private OrderChildSyncTransportListener orderChildSyncTransportListener; private OrderChildSyncTransportListener orderChildSyncTransportListener;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@RequestMapping(value = "/test", method = RequestMethod.GET)
public Result test(String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); @ApiOperation(value = "运单同步broker", notes = "<br>By:艾庆国")
@RequestMapping(value = "/orderChildSync", method = RequestMethod.GET)
public Result orderChildSync(String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).get();
// 同步broker
orderChildSyncTransportListener.transportOrderChildProcess(orderChild); orderChildSyncTransportListener.transportOrderChildProcess(orderChild);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "开票类型同步", notes = "<br>By:艾庆国")
@RequestMapping(value = "/invoiceTypeSync", method = RequestMethod.GET)
public Result invoiceTypeSync(String childNo) {
settlementMqService.invoiceTypeSync(childNo);
return Result.ok();
}
@ApiOperation(value = "开票状态同步", notes = "<br>By:艾庆国")
@RequestMapping(value = "/invoiceStatusSync", method = RequestMethod.GET)
public Result invoiceStatusSync(String childNo) {
settlementMqService.invoiceStatusSync(childNo);
return Result.ok();
}
@ApiOperation(value = "支付状态同步", notes = "<br>By:艾庆国")
@RequestMapping(value = "/payStatusSync", method = RequestMethod.GET)
public Result payStatusSync(String childNo) {
settlementMqService.payStatusSync(childNo);
return Result.ok();
}
} }
...@@ -15,6 +15,7 @@ import com.msl.common.dao.impl.BaseDaoImpl; ...@@ -15,6 +15,7 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -161,4 +162,14 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet ...@@ -161,4 +162,14 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
); );
} }
@Override
public List<SettlementOwnerDetail> listInvoiceStatusSync() {
return list(lUdWrapper()
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(3))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.eq(SettlementOwnerDetail::getInvoiceStatus, SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode())
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
} }
...@@ -48,4 +48,5 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM ...@@ -48,4 +48,5 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
void updateSettlementMerge(String settlementNo, List<String> settlementNos); void updateSettlementMerge(String settlementNo, List<String> settlementNos);
List<SettlementOwnerDetail>listInvoiceStatusSync();
} }
...@@ -8,21 +8,17 @@ import com.clx.performance.constant.RabbitKeyConstants; ...@@ -8,21 +8,17 @@ import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao; import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao; import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerLoanRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao; import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.dao.settle.SettlementDriverDao; import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.LoanBalanceDTO;
import com.clx.performance.dto.OwnerLoanMqDTO; import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum; import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum; import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord; import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord; import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.model.loan.OwnerRepayment; import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail; import com.clx.performance.model.settle.SettlementOwnerDetail;
...@@ -43,7 +39,6 @@ import org.springframework.stereotype.Component; ...@@ -43,7 +39,6 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener; import org.springframework.transaction.event.TransactionalEventListener;
import java.math.BigDecimal;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -144,8 +139,8 @@ public class EventListenerComponent { ...@@ -144,8 +139,8 @@ public class EventListenerComponent {
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail); settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail); settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
// 发送mq 通过开票标识 // 发送mq 结算统计
settlementMqService.invoiceTypeSync(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType()); settlementMqService.settlementStatistics(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType());
} catch (Exception e) { } catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD, e.getMessage()); throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD, e.getMessage());
} finally { } finally {
......
...@@ -6,27 +6,17 @@ import com.clx.performance.component.ThirdComponent; ...@@ -6,27 +6,17 @@ import com.clx.performance.component.ThirdComponent;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao; import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO; import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.feign.TransportFeignService; import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord; import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.OrderChildPaySyncParam; import com.clx.performance.param.feign.transport.OrderChildPaySyncParam;
import com.clx.performance.service.settle.SettlementDriverDetailService; import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementMqHandlerService; import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementOwnerDetailService; import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.vo.mq.SettlementStatisticsMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.dto.HttpDTO; import com.msl.common.dto.HttpDTO;
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
...@@ -34,10 +24,7 @@ import lombok.AllArgsConstructor; ...@@ -34,10 +24,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -64,7 +51,7 @@ public class OrderChildPaySyncTransportJob { ...@@ -64,7 +51,7 @@ public class OrderChildPaySyncTransportJob {
/** /**
* 同步网络货运 * 同步网络货运
*/ */
@XxlJob("orderChildPaySyncTransportJob") // @XxlJob("orderChildPaySyncTransportJob")
public void orderChildPaySyncTransportJob() { public void orderChildPaySyncTransportJob() {
List<OrderChildSyncTransportRecord> recordList = orderChildSyncTransportRecordDao.selectListForJob(); List<OrderChildSyncTransportRecord> recordList = orderChildSyncTransportRecordDao.selectListForJob();
if (CollectionUtil.isEmpty(recordList)) { if (CollectionUtil.isEmpty(recordList)) {
...@@ -96,9 +83,9 @@ public class OrderChildPaySyncTransportJob { ...@@ -96,9 +83,9 @@ public class OrderChildPaySyncTransportJob {
public void settlementDetailInvoiceTypeSyncJob() { public void settlementDetailInvoiceTypeSyncJob() {
String jobParam = XxlJobHelper.getJobParam(); String jobParam = XxlJobHelper.getJobParam();
log.info("XxlJobHelper jobParam:{}", jobParam); log.info("XxlJobHelper jobParam:{}", jobParam);
SettlementDetailInvoiceTypeSyncMqParam mqParam = new SettlementDetailInvoiceTypeSyncMqParam(); SettlementStatisticsMqParam mqParam = new SettlementStatisticsMqParam();
mqParam.setChildNo(jobParam); mqParam.setChildNo(jobParam);
settlementMqHandlerService.settlementDetailInvoiceTypeSync(mqParam); settlementMqHandlerService.settlementStatistics(mqParam);
} }
......
package com.clx.performance.job.settlement; package com.clx.performance.job.settlement;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao; import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.enums.TransportSyncTypeEnum; import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.enums.settle.SettlementOwnerEnum; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord; import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.pc.broker.TransportVO; import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
...@@ -25,12 +24,12 @@ import java.util.Objects; ...@@ -25,12 +24,12 @@ import java.util.Objects;
public class SettlementJob { public class SettlementJob {
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao; private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final BrokerService brokerService;
private final SettlementMqService settlementMqService; private final SettlementMqService settlementMqService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
/** /**
* 同步无车承运运单状态 * 同步无车承运运单开票类型
*/ */
@XxlJob("settlementInvoiceTypeSync") @XxlJob("settlementInvoiceTypeSync")
public void settlementInvoiceTypeSync() { public void settlementInvoiceTypeSync() {
...@@ -39,43 +38,53 @@ public class SettlementJob { ...@@ -39,43 +38,53 @@ public class SettlementJob {
log.info("待同步无车承运运单状态,size:{}", recordList.size()); log.info("待同步无车承运运单状态,size:{}", recordList.size());
if (recordList.isEmpty()) {return;} if (recordList.isEmpty()) {return;}
List<Integer> ids = new LinkedList<>();
for (OrderChildSyncTransportInvoiceRecord item : recordList) { for (OrderChildSyncTransportInvoiceRecord item : recordList) {
log.info("同步无车承运运单状态:{}", JSONUtil.parse(item));
settlementMqService.invoiceTypeSync(item.getChildNo());
try { }
// 获取状态
TransportVO result = brokerService.getTransportByChildNo(item.getChildNo()); orderChildSyncTransportInvoiceRecordDao.deleteByKeys(
recordList.stream().map(item->item.getId()).collect(Collectors.toList()));
Integer invoiceType; }
if (Objects.equals(result.getRiskStatus(), 1) || Objects.equals(result.getRiskStatus(), 2)) { /**
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(); * 同步无车承运运单开票状态
} else if (Objects.equals(result.getSyncStatus(), 2)) { */
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(); @XxlJob("settlementInvoiceStatusSync")
} else if (Objects.equals(result.getSyncStatus(), 0)) { public void settlementInvoiceStatusSync() {
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord(); try {
entity.setChildNo(item.getChildNo()); List<SettlementOwnerDetail> list = settlementOwnerDetailDao.listInvoiceStatusSync();
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode()); log.info("待同步无车承运运单开票状态, size:{}", list.size());
entity.setRemark("处理中"); if (list.isEmpty()) {return;}
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
continue; for (SettlementOwnerDetail item : list) {
} else { settlementMqService.invoiceStatusSync(item.getChildNo());
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
}
// 发送mq (结算)
settlementMqService.settle(item.getChildNo(), invoiceType);
}catch (Exception e){
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(item.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("接口调用失败");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
} }
} catch (Exception e) {
log.warn("同步无车承运运单开票状态失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("同步无车承运运单开票状态失败,异常原因=====================", e);
} }
}
/**
* 同步无车承运运单支付状态
*/
@XxlJob("settlementPayStatusSync")
public void settlementPayStatusSync() {
try {
List<OrderChildSyncTransportRecord> list = orderChildSyncTransportRecordDao.selectListForJob();
orderChildSyncTransportInvoiceRecordDao.deleteByKeys(ids); log.info("待同步无车承运运单支付状态, size:{}", list.size());
if (list.isEmpty()) {return;}
for (OrderChildSyncTransportRecord item : list) {
settlementMqService.payStatusSync(item.getChildNo());
}
} catch (Exception e) {
log.warn("同步无车承运运单支付状态失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("同步无车承运运单支付状态失败,异常原因=====================", e);
}
} }
} }
...@@ -105,11 +105,11 @@ public class OrderChildSyncTransportListener { ...@@ -105,11 +105,11 @@ public class OrderChildSyncTransportListener {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 开票服务费 // // 开票服务费
settlementOwnerDetail.setInvoiceServiceFee(invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail)); // settlementOwnerDetail.setInvoiceServiceFee(invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 开票金额 // // 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), // settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail)); // orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// // 同步网络货运 // // 同步网络货运
// ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail); // ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
...@@ -207,6 +207,9 @@ public class OrderChildSyncTransportListener { ...@@ -207,6 +207,9 @@ public class OrderChildSyncTransportListener {
settlementOwnerDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName()); settlementOwnerDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementOwnerDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode()); settlementOwnerDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
settlementOwnerDetail.setInvoiceServiceFeeRate(
invoiceCompany.getServiceFeeRate()==null? BigDecimal.ZERO : orderGoods.getInvoiceServiceFeeRate());
settlementDriverDetail.setInvoicingCompanyId(invoiceCompany.getId()); settlementDriverDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementDriverDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName()); settlementDriverDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode()); settlementDriverDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
...@@ -214,9 +217,6 @@ public class OrderChildSyncTransportListener { ...@@ -214,9 +217,6 @@ public class OrderChildSyncTransportListener {
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) { if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode()); settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
} }
// 如果开票标识为“网运单”时,开票费率取货单单所记录的开票费率
settlementOwnerDetail.setInvoiceServiceFeeRate(
orderGoods.getInvoiceServiceFeeRate()==null? BigDecimal.ZERO : orderGoods.getInvoiceServiceFeeRate());
} }
settlementOwnerDetail.setInvoiceType(invoiceType); settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType); settlementDriverDetail.setInvoiceType(invoiceType);
......
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementInvoiceStatusSyncMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 开票标识同步 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementInvoiceStatusSyncListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_QUEUE)
public void process(Message message) {
try{
log.info("结算-开票状态同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementInvoiceStatusSyncMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-开票状态同步 失败",e);
}
}
private void process(SettlementInvoiceStatusSyncMqParam mq){
settlementMqHandlerService.invoiceStatusSync(mq);
}
}
...@@ -5,7 +5,7 @@ import com.alibaba.fastjson.TypeReference; ...@@ -5,7 +5,7 @@ import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper; import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants; import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService; import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementInvoiceTypeSyncMqParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
...@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component; ...@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
/** /**
* @Author: 艾庆国 * @Author: 艾庆国
* @Description: 开票标识同步 mq * @Description: 开票类型同步 mq
* @Date: 2023-10-20 11:45:08 * @Date: 2023-10-20 11:45:08
* @Version: 1.0 * @Version: 1.0
*/ */
...@@ -25,19 +25,19 @@ public class SettlementInvoiceTypeSyncListener { ...@@ -25,19 +25,19 @@ public class SettlementInvoiceTypeSyncListener {
@Autowired @Autowired
private SettlementMqHandlerService settlementMqHandlerService; private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE) @RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_INVOICE_TYPE_SYNC_QUEUE)
public void process(Message message) { public void process(Message message) {
try{ try{
log.info("结算-开票标识同步, message:{}", new String(message.getBody())); log.info("结算-开票类型同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementDetailInvoiceTypeSyncMqParam>>(){}).getData()); process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementInvoiceTypeSyncMqParam>>(){}).getData());
}catch (Exception e){ }catch (Exception e){
log.info("结算-开票标识同步 失败",e); log.info("结算-开票类型同步 失败",e);
} }
} }
private void process(SettlementDetailInvoiceTypeSyncMqParam mq){ private void process(SettlementInvoiceTypeSyncMqParam mq){
settlementMqHandlerService.settlementDetailInvoiceTypeSync(mq); settlementMqHandlerService.invoiceTypeSync(mq);
} }
} }
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementPayStatusSyncMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 开票标识同步 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementPayStatusSyncListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_PAY_STATUS_SYNC_QUEUE)
public void process(Message message) {
try{
log.info("结算-支付状态同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementPayStatusSyncMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-支付状态同步 失败",e);
}
}
private void process(SettlementPayStatusSyncMqParam mq){
settlementMqHandlerService.payStatusSync(mq);
}
}
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementStatisticsMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 统计 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementStatisticsListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE)
public void process(Message message) {
try{
log.info("结算-统计, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementStatisticsMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-统计 失败",e);
}
}
private void process(SettlementStatisticsMqParam mq){
settlementMqHandlerService.settlementStatistics(mq);
}
}
...@@ -60,6 +60,7 @@ public class SettlementOwnerDetail implements HasKey<Integer> { ...@@ -60,6 +60,7 @@ public class SettlementOwnerDetail implements HasKey<Integer> {
private String invoicingCompanyShorterName; //开票公司简称 private String invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码 private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private Integer reportFlag; //是否上报 0-否;1-是 private Integer reportFlag; //是否上报 0-否;1-是
private Integer invoiceChannel; //开票渠道:1无车承运
private Integer status; //状态 private Integer status; //状态
private LocalDateTime createTime; //创建时间 private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间 private LocalDateTime modifiedTime; //修改时间
......
package com.clx.performance.service.impl.settle;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementCommonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;
@Slf4j
@Service
public class SettlementCommonServiceImpl implements SettlementCommonService {
/**
* 开票服务费金额
*/
@Override
public BigDecimal invoiceServiceFeeCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
return settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight())
.divide(BigDecimal.ONE.subtract(settlementOwnerDetail.getInvoiceServiceFeeRate()), 0, RoundingMode.HALF_UP)
.multiply(settlementOwnerDetail.getInvoiceServiceFeeRate()).setScale(0, RoundingMode.HALF_UP);
}
/**
* 开票金额
*/
@Override
public BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
}
else if (Objects.equals(settlementWay, SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
if (invoiceServiceFeeRate!=null){
//结算方式为“卸车净重(减货损)”,平台运费报价为“未税”时,开票金额=平台运费单价*实际净重-货损单价*货损吨数+开票服务费。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossPrice())
.add(settlementOwnerDetail.getInvoiceServiceFee());
}
else{
//结算方式为“卸车净重(减货损)”,平台运费报价为“含税”时 开票金额=平台运费单价*实际净重-货损单价*货损吨数
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
}
}
else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
}
}
@Override
public BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
}
else if (Objects.equals(settlementWay, SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
//结算方式为“卸车净重(减货损)“,结算金额=开票金额-预付运费金额-借款抵扣金额。
return settlementOwnerDetail.getInvoiceFreight()
.subtract(settlementOwnerDetail.getPrepayFreight())
.subtract(settlementOwnerDetail.getLoanFreight());
}else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
}
...@@ -108,13 +108,6 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai ...@@ -108,13 +108,6 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
} }
/**
* 开票金额
*/
private BigDecimal invoiceFreightCalc(BigDecimal freight, BigDecimal lossFreight){
return freight.subtract(lossFreight);
}
/** /**
* 结算金额 * 结算金额
*/ */
......
...@@ -5,18 +5,20 @@ import com.clx.order.vo.feign.FeignOrderInfoVO; ...@@ -5,18 +5,20 @@ import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.MslPaymentConfig; import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.*; import com.clx.performance.dao.settle.*;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.dto.InvoicingStatusNotifyDTO;
import com.clx.performance.enums.OrderChildLogEnum; import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.PayRemarkEnum; import com.clx.performance.enums.*;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.*; import com.clx.performance.enums.settle.*;
import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService; import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.extranal.user.OwnerInfoService; import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.listener.OrderChildSyncTransportListener; import com.clx.performance.listener.OrderChildSyncTransportListener;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.*; import com.clx.performance.model.settle.*;
import com.clx.performance.param.pc.payment.PayParam; import com.clx.performance.param.pc.payment.PayParam;
...@@ -24,15 +26,11 @@ import com.clx.performance.param.pc.payment.PayPlatformFeeParam; ...@@ -24,15 +26,11 @@ import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.PaymentService; import com.clx.performance.service.PaymentService;
import com.clx.performance.service.impl.UniqueOrderNumService; import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService; import com.clx.performance.service.settle.*;
import com.clx.performance.service.settle.SettlementLogService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.RedisUtil; import com.clx.performance.utils.RedisUtil;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.pc.broker.TransportVO;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
import com.clx.user.vo.feign.DriverInfoFeignVo; import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.enums.ResultCodeEnum; import com.msl.common.enums.ResultCodeEnum;
...@@ -46,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -46,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
...@@ -94,6 +93,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -94,6 +93,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired @Autowired
private SettlementPlatformServiceFeeDao settlementPlatformServiceFeeDao; private SettlementPlatformServiceFeeDao settlementPlatformServiceFeeDao;
@Autowired
private OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
@Autowired @Autowired
private OrderChildLogService orderChildLogService; private OrderChildLogService orderChildLogService;
...@@ -109,17 +111,30 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -109,17 +111,30 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired @Autowired
private OrderChildSyncTransportListener orderChildSyncTransportListener; private OrderChildSyncTransportListener orderChildSyncTransportListener;
@Autowired
private BrokerService brokerService;
@Autowired
private SettlementOwnerService settlementOwnerService;
@Autowired
private OrderChildSyncTransportRecordService orderChildSyncTransportRecordService;
@Autowired
private SettlementMqService settlementMqService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq) { public void settlementStatistics(SettlementStatisticsMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
log.info("当前车主计费信息{},司机计费信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail)); log.info("当前车主计费信息{},司机计费信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
if (settlementOwnerDetail.getInvoiceFreight() == null) { if (settlementOwnerDetail.getInvoiceFreight() == null) {
log.info("当前车主计费信息开票金额为空,需要重新处理计算开票金额"); log.info("当前车主计费信息开票金额为空,需要重新处理计算开票金额");
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).get(); settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
SettlementOwnerDetail update = new SettlementOwnerDetail(); SettlementOwnerDetail update = new SettlementOwnerDetail();
update.setId(settlementOwnerDetail.getId()); update.setId(settlementOwnerDetail.getId());
update.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight()); update.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
...@@ -130,7 +145,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -130,7 +145,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(settlementOwnerDetail.getOwnerUserNo()); OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(settlementOwnerDetail.getOwnerUserNo());
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(settlementOwnerDetail.getOrderGoodsNo()).get();
if (Objects.equals(orderGoods.getSettlementAccountPeriod(),2)){ //月结 if (Objects.equals(orderGoods.getSettlementAccountPeriod(),2)){ //月结
log.info("月结初始化货主结算单"); log.info("月结初始化货主结算单");
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate(); LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate();
...@@ -210,6 +224,67 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -210,6 +224,67 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
orderChildSyncTransportListener.extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, mq.getInvoiceType()); orderChildSyncTransportListener.extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, mq.getInvoiceType());
} }
@Override
public void invoiceTypeSync(SettlementInvoiceTypeSyncMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
try {
// 获取状态
TransportVO result = brokerService.getTransportByChildNo(mq.getChildNo());
Integer invoiceType;
if (Objects.equals(result.getRiskStatus(), 1) || Objects.equals(result.getRiskStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
} else if (Objects.equals(result.getSyncStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
} else 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;
} else {
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
}
// 发送mq (结算)
settlementMqService.settle(orderChild.getChildNo(), invoiceType);
}catch (Exception e){
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("接口调用失败");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
@Override
public void invoiceStatusSync(SettlementInvoiceStatusSyncMqParam mq) {
// 获取状态
TransportVO result = brokerService.getTransportByChildNo(mq.getChildNo());
if (Objects.equals(result.getInvoiceStatus(), 1) ) {
InvoicingStatusNotifyDTO invoicingStatusNotifyDTO = new InvoicingStatusNotifyDTO();
invoicingStatusNotifyDTO.setChildNoList(Arrays.asList(mq.getChildNo()));
settlementOwnerService.invoicingStatusNotify(invoicingStatusNotifyDTO);
}
}
@Override
public void payStatusSync(SettlementPayStatusSyncMqParam mq) {
// 获取状态
TransportVO result = brokerService.getTransportByChildNo(mq.getChildNo());
if (Objects.equals(result.getSettleStatus(), 1) ) {
PayStatusNotifyDTO payStatusNotifyDTO = new PayStatusNotifyDTO();
payStatusNotifyDTO.setChildNo(mq.getChildNo());
orderChildSyncTransportRecordService.updateStatus(payStatusNotifyDTO);
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void settlementDetailAdd(SettlementDetailAddMqParam mq) { public void settlementDetailAdd(SettlementDetailAddMqParam mq) {
...@@ -277,6 +352,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -277,6 +352,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverDao.saveEntity(settlementDriver); settlementDriverDao.saveEntity(settlementDriver);
} }
@Override
public void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg){ public void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg){
//运单状态修改为完成 //运单状态修改为完成
...@@ -303,6 +379,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -303,6 +379,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
/** /**
* 车主结算单自动支付 * 车主结算单自动支付
*/ */
@Override
public String paySettlementDriver(SettlementDriverDetail detail){ public String paySettlementDriver(SettlementDriverDetail detail){
String uuid = UUID.randomUUID().toString(); String uuid = UUID.randomUUID().toString();
String key = RedissonConstants.SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK + detail.getId(); String key = RedissonConstants.SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK + detail.getId();
...@@ -478,11 +555,25 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -478,11 +555,25 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY)); return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY));
} }
private BigDecimal invoiceFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) { private BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。 if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()) return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight()); .subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。 }
else if (Objects.equals(settlementWay, SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
if (invoiceServiceFeeRate!=null){
//结算方式为“卸车净重(减货损)”,平台运费报价为“未税”时,开票金额=平台运费单价*实际净重-货损单价*货损吨数+开票服务费。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossPrice())
.add(settlementOwnerDetail.getInvoiceServiceFee());
}
else{
//结算方式为“卸车净重(减货损)”,平台运费报价为“含税”时 开票金额=平台运费单价*实际净重-货损单价*货损吨数
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
}
}
else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()); return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
} }
} }
......
...@@ -5,9 +5,7 @@ import com.clx.performance.common.MqDelay; ...@@ -5,9 +5,7 @@ import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper; import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants; import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder; import org.springframework.amqp.core.MessageBuilder;
...@@ -36,13 +34,29 @@ public class SettlementMqServiceImpl implements SettlementMqService { ...@@ -36,13 +34,29 @@ public class SettlementMqServiceImpl implements SettlementMqService {
} }
@Override @Override
public void invoiceTypeSync(String childNo, Integer invoiceType) { public void settlementStatistics(String childNo, Integer invoiceType) {
SettlementDetailInvoiceTypeSyncMqParam mq = new SettlementDetailInvoiceTypeSyncMqParam(); SettlementStatisticsMqParam mq = new SettlementStatisticsMqParam();
mq.setChildNo(childNo); mq.setChildNo(childNo);
mq.setInvoiceType(invoiceType); mq.setInvoiceType(invoiceType);
log.info("运单号 {} 开票标识 {} ",childNo,invoiceType); log.info("运单号 {} 开票标识 {} ",childNo,invoiceType);
MqDelay<MqWrapper<SettlementDetailInvoiceTypeSyncMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY, new MqWrapper<>(mq)); MqDelay<MqWrapper<SettlementStatisticsMqParam>> delay =
new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void invoiceTypeSync(String childNo) {
SettlementInvoiceTypeSyncMqParam mq = new SettlementInvoiceTypeSyncMqParam();
mq.setChildNo(childNo);
MqDelay<MqWrapper<SettlementInvoiceTypeSyncMqParam>> delay =
new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_INVOICE_TYPE_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build(); Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000"); message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message); rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
...@@ -54,7 +68,6 @@ public class SettlementMqServiceImpl implements SettlementMqService { ...@@ -54,7 +68,6 @@ public class SettlementMqServiceImpl implements SettlementMqService {
SettlementSettleMqParam mq = new SettlementSettleMqParam(); SettlementSettleMqParam mq = new SettlementSettleMqParam();
mq.setChildNo(childNo); mq.setChildNo(childNo);
mq.setInvoiceType(invoiceType); mq.setInvoiceType(invoiceType);
log.info("运单号 {} 开票标识 {} ",childNo,invoiceType);
MqDelay<MqWrapper<SettlementSettleMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, MqDelay<MqWrapper<SettlementSettleMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY, new MqWrapper<>(mq)); RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build(); Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
...@@ -62,4 +75,26 @@ public class SettlementMqServiceImpl implements SettlementMqService { ...@@ -62,4 +75,26 @@ public class SettlementMqServiceImpl implements SettlementMqService {
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message); rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
} }
@Override
public void invoiceStatusSync(String childNo) {
SettlementInvoiceStatusSyncMqParam mq = new SettlementInvoiceStatusSyncMqParam();
mq.setChildNo(childNo);
MqDelay<MqWrapper<SettlementInvoiceStatusSyncMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void payStatusSync(String childNo) {
SettlementPayStatusSyncMqParam mq = new SettlementPayStatusSyncMqParam();
mq.setChildNo(childNo);
MqDelay<MqWrapper<SettlementPayStatusSyncMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_PAY_STATUS_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
} }
...@@ -14,6 +14,7 @@ import com.clx.performance.model.settle.SettlementDriverDetail; ...@@ -14,6 +14,7 @@ import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail; import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.service.settle.SettlementCommonService;
import com.clx.performance.service.settle.SettlementOwnerDetailService; import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.struct.settle.SettlementOwnerDetailStruct; import com.clx.performance.struct.settle.SettlementOwnerDetailStruct;
import com.clx.performance.utils.excel.ExcelData; import com.clx.performance.utils.excel.ExcelData;
...@@ -48,6 +49,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -48,6 +49,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
private final SettlementOwnerDetailStruct settlementOwnerDetailStruct; private final SettlementOwnerDetailStruct settlementOwnerDetailStruct;
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final SettlementDriverDetailDao settlementDriverDetailDao; private final SettlementDriverDetailDao settlementDriverDetailDao;
private final SettlementCommonService settlementCommonService;
@Override @Override
...@@ -87,9 +89,18 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -87,9 +89,18 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO); settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
} }
// // 开票金额 // 开票服务费
// settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail)); settlementOwnerDetail.setInvoiceServiceFeeRate(
// orderGoods.getInvoiceServiceFeeRate()==null? BigDecimal.ZERO : orderGoods.getInvoiceServiceFeeRate());
// 开票服务费
settlementOwnerDetail.setInvoiceServiceFee(
settlementCommonService.invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 开票金额
settlementOwnerDetail.setInvoiceFreight(
settlementCommonService.invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// // 结算金额 // // 结算金额
// settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail)); // settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
// //
...@@ -103,6 +114,8 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -103,6 +114,8 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setInvoicingCompanyGroupCode(orderChild.getInvoicingCompanyGroupCode()); settlementOwnerDetail.setInvoicingCompanyGroupCode(orderChild.getInvoicingCompanyGroupCode());
settlementOwnerDetail.setReportFlag(orderChild.getReportFlag()); settlementOwnerDetail.setReportFlag(orderChild.getReportFlag());
settlementOwnerDetail.setInvoiceChannel(SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode());
settlementOwnerDetailDao.saveEntity(settlementOwnerDetail); settlementOwnerDetailDao.saveEntity(settlementOwnerDetail);
return settlementOwnerDetail.getId(); return settlementOwnerDetail.getId();
} }
...@@ -141,18 +154,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -141,18 +154,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
} }
/**
* 开票金额
*/
private BigDecimal invoiceFreightCalc(Integer settlementWay,SettlementOwnerDetail settlementOwnerDetail){
if(Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())){ //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
}else{ //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
}
}
/** /**
* 结算金额 * 结算金额
*/ */
......
package com.clx.performance.service.impl.settle; package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO; import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.component.IdGenerateSnowFlake; import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.config.SettlementConfig; import com.clx.performance.config.SettlementConfig;
...@@ -76,7 +75,7 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -76,7 +75,7 @@ public class SettlementServiceImpl implements SettlementService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateSettlementDetailInvoiceType(String childNo, Integer invoiceType) { public void updateSettlementDetailInvoiceType(String childNo, Integer invoiceType) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
...@@ -137,8 +136,8 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -137,8 +136,8 @@ public class SettlementServiceImpl implements SettlementService {
//普通单解冻 //普通单解冻
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, childNo)); applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, childNo));
// 发送mq 通过开票标识 // 发送mq 结算统计
settlementMqService.invoiceTypeSync(childNo, invoiceType); settlementMqService.settlementStatistics(childNo, invoiceType);
} }
......
package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import java.math.BigDecimal;
public interface SettlementCommonService {
BigDecimal invoiceServiceFeeCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail);
BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail);
BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail);
}
package com.clx.performance.service.settle; package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
public interface SettlementMqHandlerService { public interface SettlementMqHandlerService {
void settlementDetailAdd(SettlementDetailAddMqParam mq); void settlementDetailAdd(SettlementDetailAddMqParam mq);
void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq); void settlementStatistics(SettlementStatisticsMqParam mq);
void settle(SettlementSettleMqParam mq); void settle(SettlementSettleMqParam mq);
void invoiceTypeSync(SettlementInvoiceTypeSyncMqParam mq);
void invoiceStatusSync(SettlementInvoiceStatusSyncMqParam mq);
void payStatusSync(SettlementPayStatusSyncMqParam mq);
void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg); void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg);
String paySettlementDriver(SettlementDriverDetail detail); String paySettlementDriver(SettlementDriverDetail detail);
......
...@@ -4,7 +4,13 @@ public interface SettlementMqService { ...@@ -4,7 +4,13 @@ public interface SettlementMqService {
void settlementDetailAdd(Integer settlementOwnerDetailId, Integer settlementDriverDetailId); void settlementDetailAdd(Integer settlementOwnerDetailId, Integer settlementDriverDetailId);
void invoiceTypeSync(String childNo, Integer invoiceType); void settlementStatistics(String childNo, Integer invoiceType);
void invoiceTypeSync(String childNo);
void settle(String childNo, Integer invoiceType); void settle(String childNo, Integer invoiceType);
void invoiceStatusSync(String childNo);
void payStatusSync(String childNo);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论