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

Merge branch 'refs/heads/v17.5_order_child_sync_broker_20240617' into dev

package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum OrderChildSyncTransportRecordEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
INIT(0, "未同步"),
SYNC(1, "已同步"),
SUC(2, "回调成功"),
FAIL(3, "回调失败"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
}
......@@ -16,6 +16,7 @@ public enum TransportSyncTypeEnum {
NO_PASS(1, "未通过风控异常"),
EXCEPTION(2, "同步异常"),
RESULT(3, "查询状态"),
;
......
......@@ -66,5 +66,22 @@ public enum SettlementOwnerDetailEnum {
}
}
@Getter
@AllArgsConstructor
public enum PayStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
public static Optional<PayStatus> 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(PayStatus::getMsg).orElse(null);
}
}
}
......@@ -19,12 +19,12 @@ public class PageCarrierSettlementPlatformServiceFeeParam extends PageParam {
@ApiModelProperty(value = "运单编号", example = "JS415")
private String childNo;
@ApiModelProperty(value="车主编码",example = "201457878")
@ApiModelProperty(value="司机编码",example = "201457878")
private Long driverUserNo;
@ApiModelProperty(value="车主姓名",example = "张三")
private String driverUserName;
@ApiModelProperty(value="车主手机",example = "13000000000")
@ApiModelProperty(value="司机姓名",example = "张三")
private String driverName;
@ApiModelProperty(value="司机手机",example = "13000000000")
private String driverMobile;
@ApiModelProperty(value = "开始时间")
......
......@@ -19,5 +19,6 @@ public class SettlementSettleMqParam {
private String childNo; //运单编号
private Integer InvoiceType; //开票类型
private String remark; //备注
}
......@@ -157,6 +157,10 @@ public class OrderGoodsVO {
@ApiModelProperty("接单保证金(分/车)")
private BigDecimal deposit;
@ApiModelProperty("是否支持借款:0:否 1:是")
private Integer supportLoan;
@ApiModelProperty("结算方式 1装车净重 2卸车净重")
private Integer settlementWay;
......
......@@ -51,6 +51,12 @@ public class OpenOrderChildTruckDTO {
private String licenceImgSecondBack;
@ApiModelProperty(value = "道路运输许可证图片地址", dataType="String")
private String transportLicenceImg;
@ApiModelProperty(value = "挂车行驶证主页照片", dataType="String")
private String licenceImgMain2;
@ApiModelProperty(value = "挂车行驶证副业正面照片", dataType="String")
private String licenceImgSecond2;
@ApiModelProperty(value = "挂车道路运输许可证图片地址", dataType="String")
private String transportLicenceImg2;
@ApiModelProperty(value = "车辆燃料类型 1:柴油 2 天然气 3其他 4新能源/电", dataType="Integer")
private Integer powerType;
......
......@@ -35,26 +35,26 @@ public class TransportParam {
@ApiModelProperty(value = "货单", required = true)
@NotNull(message = "货单不能为空")
private OpenOrderDTO orderInfo;
private OpenOrderDTO order;
@ApiModelProperty(value = "图片", required = true)
@NotEmpty(message = "运单图片不能为空")
private List<OpenOrderChildImageDTO> imageList;
private List<OpenOrderChildImageDTO> orderChildImage;
@ApiModelProperty(value = "司机", required = true)
@NotNull(message = "司机不能为空")
private OpenOrderChildDriverDTO driverInfo;
private OpenOrderChildDriverDTO orderChildDriver;
@ApiModelProperty(value = "车主", required = true)
@NotNull(message = "车主不能为空")
private OpenOrderChildTruckOwnerDTO ownerInfo;
private OpenOrderChildTruckOwnerDTO orderChildTruckOwner;
@ApiModelProperty(value = "车辆", required = true)
@NotNull(message = "车辆不能为空")
private OpenOrderChildTruckDTO truckInfo;
private OpenOrderChildTruckDTO orderChildTruck;
@ApiModelProperty(value = "运单", required = true)
@NotNull(message = "运单不能为空")
private OpenOrderChildDTO orderChildInfo;
private OpenOrderChildDTO orderChild;
}
......@@ -69,7 +69,7 @@ public class CarrierPageSettlementDriverVO {
@ApiModelProperty(value = "开票公司id")
private Integer invoicingCompanyId;
@ApiModelProperty(value = "开票公司简称")
private Integer invoicingCompanyShorterName;
private String invoicingCompanyShorterName;
@MoneyOutConvert
@ApiModelProperty(value = "平台服务费")
private BigDecimal platformServiceFee;
......
......@@ -70,6 +70,11 @@ public class CarrierPageSettlementOwnerDetailVO {
@ApiModelProperty(value = "开票标识:1网运单 2普通单")
private Integer invoiceType;
@MoneyOutConvert
@ApiModelProperty(value = "开票服务费")
private BigDecimal invoiceServiceFee;
@ApiModelProperty(value = "开票服务率")
private BigDecimal invoiceServiceFeeRate;
@MoneyOutConvert
@ApiModelProperty(value = "借款抵扣金额")
private BigDecimal loanFreight;
@ApiModelProperty("结算方式 1装车净重 2卸车净重")
......
......@@ -82,6 +82,10 @@ public class CarrierSettlementOwnerDetailVO {
@ApiModelProperty(value = "结算凭证", example = "/a.png")
private String invoiceImg;
@ApiModelProperty(value = "开票服务费", example = "1.23")
@MoneyOutConvert
private BigDecimal invoiceServiceFee;
@ApiModelProperty(value = "收款人", example = "收款人")
private String payee;
......
package com.clx.performance.vo.pc.carrier.settle;
import com.msl.common.convertor.type.MoneyOutConvert;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
......@@ -41,8 +42,10 @@ public class SettlementPlatformServiceFeeVO {
private String receiveAddress;
@ApiModelProperty(value = "车牌号", example = "")
private String truckNo;
@MoneyOutConvert
@ApiModelProperty(value = "结算金额(分)", example = "")
private BigDecimal settlementFreight;
@MoneyOutConvert
@ApiModelProperty(value = "开票服务费(分)", example = "")
private BigDecimal invoiceServiceFee;
@ApiModelProperty(value = "开票服务率%", example = "")
......
......@@ -3,6 +3,7 @@ package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.QuotationEnum;
import com.clx.order.enums.StatusEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderInfoVO;
......@@ -40,6 +41,7 @@ import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.loan.OwnerLoanRecordService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.SettlementCommonService;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
......@@ -93,6 +95,8 @@ public class OrderChildLoanComponent {
private final OrderService orderService;
private final SettlementCommonService settlementCommonService;
/**
* 接单校验判断
*
......@@ -112,6 +116,19 @@ public class OrderChildLoanComponent {
log.info("2.百分百预付不需要考虑借款账户");
return;
}
if (!Objects.equals(orderInfoVO.getSupportLoan(), StatusEnum.YES.getCode())){
log.info("3.2当前运单不支持货主借款");
return;
}
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
log.info("3.2当前运单不支持货主借款");
return;
}
List<OrderChildLoanRetryRecord> orderChildLoanRetryRecordList = orderChildLoanRetryRecordDao.listByField(OrderChildLoanRetryRecord::getOwnerUserNo, ownerInfoFeignVO.getUserNo());
if (CollectionUtil.isNotEmpty(orderChildLoanRetryRecordList)) {
......@@ -209,7 +226,7 @@ public class OrderChildLoanComponent {
log.info("1.运单确认收货后借款相关处理执行");
//临时结算金额,借款抵扣后需要重新赋值结算金额为0,如果不需要借款相关逻辑,正常设置结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
settlementOwnerDetail.setSettlementFreight(settlementCommonService.settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(settlementDriverDetail.getOrderNo()).getData();
BigDecimal freightFreezeRate = quotationDetailVO.getFreightFreezeRate();
......@@ -235,6 +252,12 @@ public class OrderChildLoanComponent {
return;
}
if (!Objects.equals(orderInfo.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())){
log.info("3.3当前运单未税不支持借款");
return;
}
Integer loanTypeFlag = null;
String childNo = settlementDriverDetail.getChildNo();
......@@ -543,19 +566,6 @@ public class OrderChildLoanComponent {
return false;
}
/**
* 抵扣金额
*/
private 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 { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
public Integer loanFlagTypeProcess(List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList) {
Map<Integer, List<OwnerLoanAccountRunningWaterRecord>> listMap = runningWaterRecordList.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getLoanType));
List<OwnerLoanAccountRunningWaterRecord> vList = listMap.get(OwnerLoanRecordEnum.LoanType.VIRTUAL_CURRENCY.getCode());
......
......@@ -117,18 +117,13 @@ public class PayNotifyController {
if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
return new Result<>();
}
String paymentItem = PayUnitTypeEnum.FREEZE_PLATFORM_FEE.getCode()+"";
int operation = PayOperationStatusEnum.ADJUSTMENT.getValue();
if (notify.getCode() != 0) {
paymentService.updateOrderPaymentFail(notify.getOrderNo(), notify.getMsg(),
operation,
paymentItem
);
paymentService.updateOrderPaymentStatusById(notify.getOrderNo(),PaymentStatusEnum.FAIL.getValue());
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
// 支付失败处理
} else {
paymentService.updateOrderPaymentSuccess(notify.getOrderNo(), operation,
paymentItem);
paymentService.updateOrderPaymentStatusById(notify.getOrderNo(),PaymentStatusEnum.SUCCESS.getValue());
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
......
......@@ -43,6 +43,7 @@ public class PlatformServiceFeeConfigController {
@ApiOperation(value = "编辑平台费率配置", notes = "<br>By:杨启发")
@PostMapping("/updatePlatformServiceFeeConfig")
@UnitCovert
public Result updatePlatformServiceFeeConfig(@RequestBody @Validated SavePlatformServiceFeeConfigParam param) {
platformServiceFeeConfigService.updatePlatformServiceFeeConfig(param);
return Result.ok();
......
......@@ -14,4 +14,5 @@ import java.util.List;
public interface OrderChildSyncTransportInvoiceRecordDao extends BaseDao<OrderChildSyncTransportInvoiceRecordMapper, OrderChildSyncTransportInvoiceRecord, Integer> {
List<OrderChildSyncTransportInvoiceRecord> selectListForJob();
List<OrderChildSyncTransportInvoiceRecord> selectListForJobOfFirst();
}
......@@ -127,6 +127,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getUnloadTare, item.getUnloadTare())
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getPlatformServiceFee, item.getPlatformServiceFee())
);
}
......
package com.clx.performance.dao.impl;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.enums.TransportSyncTypeEnum;
import com.clx.performance.mapper.OrderChildSyncTransportInvoiceRecordMapper;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.msl.common.dao.impl.BaseDaoImpl;
......@@ -23,4 +24,12 @@ public class OrderChildSyncTransportInvoiceRecordDaoImpl extends BaseDaoImpl<Ord
.le(OrderChildSyncTransportInvoiceRecord::getCreateTime, LocalDateTime.now().minusMinutes(10))
);
}
@Override
public List<OrderChildSyncTransportInvoiceRecord> selectListForJobOfFirst() {
return list(lUdWrapper()
.eq(OrderChildSyncTransportInvoiceRecord::getType, TransportSyncTypeEnum.Type.RESULT.getCode())
.le(OrderChildSyncTransportInvoiceRecord::getCreateTime, LocalDateTime.now().minusMinutes(3))
);
}
}
......@@ -4,7 +4,7 @@ package com.clx.performance.dao.impl.settle;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.mapper.settle.OrderChildSyncTransportRecordMapper;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
......@@ -23,6 +23,7 @@ public class OrderChildSyncTransportRecordDaoImpl extends BaseDaoImpl<OrderChild
public List<OrderChildSyncTransportRecord> selectListForJob() {
return baseMapper.selectList(lQrWrapper()
.gt(OrderChildSyncTransportRecord::getCreateTime, LocalDateTime.now().minusMonths(3))
.le(OrderChildSyncTransportRecord::getCreateTime, LocalDateTime.now().minusMinutes(6))
.eq(OrderChildSyncTransportRecord::getStatus, 0)
);
}
......@@ -33,4 +34,13 @@ public class OrderChildSyncTransportRecordDaoImpl extends BaseDaoImpl<OrderChild
.set(OrderChildSyncTransportRecord::getStatus, 2)
);
}
@Override
public Optional<OrderChildSyncTransportRecord> getByChildNo(String childNo) {
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(OrderChildSyncTransportRecord::getChildNo, item)
)
.map(super::getOne);
}
}
......@@ -44,6 +44,15 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
.set(SettlementOwnerDetail::getInvoiceServiceFeeRate, item.getInvoiceServiceFeeRate())
.set(SettlementOwnerDetail::getInvoiceServiceFee, item.getInvoiceServiceFee())
.set(SettlementOwnerDetail::getRemark, item.getRemark())
);
}
@Override
public boolean updatePayStatus(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getPayStatus, item.getPayStatus())
);
}
......@@ -168,6 +177,16 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(3))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.eq(SettlementOwnerDetail::getInvoiceStatus, SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode())
.eq(SettlementOwnerDetail::getPayStatus, SettlementOwnerDetailEnum.PayStatus.YES.getCode())
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
@Override
public List<SettlementOwnerDetail> listPayStatusSync() {
return list(lUdWrapper()
.gt(SettlementOwnerDetail::getCreateTime, LocalDateTime.now().minusMonths(3))
.eq(SettlementOwnerDetail::getInvoiceChannel, SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())
.eq(SettlementOwnerDetail::getPayStatus, SettlementOwnerDetailEnum.PayStatus.NO.getCode())
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
......
......@@ -3,6 +3,7 @@ package com.clx.performance.dao.settle;
import com.clx.performance.mapper.settle.OrderChildSyncTransportRecordMapper;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
......@@ -18,4 +19,7 @@ public interface OrderChildSyncTransportRecordDao extends BaseDao<OrderChildSync
List<OrderChildSyncTransportRecord> selectListForJob();
void updateStatus(String childNo);
Optional<OrderChildSyncTransportRecord> getByChildNo(String childNo);
}
......@@ -22,6 +22,7 @@ import java.util.Set;
public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailMapper, SettlementOwnerDetail, Integer> {
boolean updateInvoiceType(SettlementOwnerDetail item);
boolean updatePayStatus(SettlementOwnerDetail item);
boolean updateSettlementNo(SettlementOwnerDetail item);
boolean updateInvoiceStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("invoiceStatus")Integer invoiceStatus);
......@@ -49,4 +50,6 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
void updateSettlementMerge(String settlementNo, List<String> settlementNos);
List<SettlementOwnerDetail>listInvoiceStatusSync();
List<SettlementOwnerDetail> listPayStatusSync();
}
package com.clx.performance.extranal.broker.impl;
import com.alibaba.fastjson.JSON;
import com.clx.performance.config.SettlementConfig;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.extranal.broker.BrokerService;
......@@ -29,6 +30,7 @@ public class BrokerServiceImpl implements BrokerService {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
throw new ServiceSystemException(ResultEnum.FEIGN_ERROR, result.getMsg());
}
log.info("运单同步网络货运, result:{}", JSON.toJSONString(result));
}
@Override
public TransportVO getOrderChildStatus(String childNo) {
......@@ -37,6 +39,7 @@ public class BrokerServiceImpl implements BrokerService {
if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
}
log.info("运单同步网络货运, result:{}", JSON.toJSONString(result));
return result.getData();
}
......
......@@ -22,7 +22,7 @@ public interface BrokerFeign {
Result<Object> saveTransport(@RequestBody TransportParam param);
@RequestMapping(value = "/broker-service/open/transport/getTransportByChildNo", method = RequestMethod.GET)
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String childNo,
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String orderCode,
@RequestParam @NotNull(message = "userCode不能为空") String userCode);
}
......@@ -52,28 +52,28 @@ public class OrderChildPaySyncTransportJob {
* 同步网络货运运单支付(禁用网络货运同步)
*/
// @XxlJob("orderChildPaySyncTransportJob")
public void orderChildPaySyncTransportJob() {
List<OrderChildSyncTransportRecord> recordList = orderChildSyncTransportRecordDao.selectListForJob();
if (CollectionUtil.isEmpty(recordList)) {
return;
}
List<String> orderChilList = recordList.stream().map(OrderChildSyncTransportRecord::getChildNo).collect(Collectors.toList());
OrderChildPaySyncParam param = new OrderChildPaySyncParam();
param.setChildNoList(orderChilList);
HttpDTO httpDTO = transportFeignService.orderChildPaySync(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
if (bean.getCode() == 0) {
for (OrderChildSyncTransportRecord record : recordList) {
OrderChildSyncTransportRecord update = new OrderChildSyncTransportRecord();
update.setId(record.getId());
update.setStatus(1);
orderChildSyncTransportRecordDao.updateEntityByKey(update);
}
}
}
// public void orderChildPaySyncTransportJob() {
// List<OrderChildSyncTransportRecord> recordList = orderChildSyncTransportRecordDao.selectListForJob();
// if (CollectionUtil.isEmpty(recordList)) {
// return;
// }
//
// List<String> orderChilList = recordList.stream().map(OrderChildSyncTransportRecord::getChildNo).collect(Collectors.toList());
// OrderChildPaySyncParam param = new OrderChildPaySyncParam();
// param.setChildNoList(orderChilList);
// HttpDTO httpDTO = transportFeignService.orderChildPaySync(param);
// String decrypt = ThirdComponent.decrypt(httpDTO.getData());
// OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
// if (bean.getCode() == 0) {
// for (OrderChildSyncTransportRecord record : recordList) {
// OrderChildSyncTransportRecord update = new OrderChildSyncTransportRecord();
// update.setId(record.getId());
// update.setStatus(1);
// orderChildSyncTransportRecordDao.updateEntityByKey(update);
// }
// }
//
// }
/**
......
......@@ -52,65 +52,65 @@ public class OrderChildSyncTransportInvoiceExceptionJob {
* 同步网络货运(禁用网络货运同步)
*/
// @XxlJob("orderChildSyncTransportInvoiceExceptionJob")
@Transactional(rollbackFor = Exception.class)
public void orderChildSyncTransportInvoiceExceptionJob() {
//只查询同步异常的网络货运任务
List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao.selectListForJob();
if (CollectionUtil.isEmpty(recordList)) {
return;
}
List<Integer> ids = new LinkedList<>();
for (OrderChildSyncTransportInvoiceRecord record : recordList) {
log.info("orderChildSyncTransportInvoiceExceptionJob执行:{}", JSONUtil.parse(record));
if (record.getCreateTime().plusMinutes(10).isBefore(LocalDateTime.now())) {
log.info("当前记录运单号:{},生成不足10分钟,先不执行", record.getChildNo());
continue;
}
String data = transportFeignService.getRiskStatus(ThirdOrderChildRiskStatusParam.builder().childNo(record.getChildNo()).build()).getData();
String decrypt = ThirdComponent.decrypt(data);
Result result = JSONUtil.toBean(decrypt, Result.class);
if (result.succeed()) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
JSON json = JSONUtil.parse(result.getData());
Object status = json.getByPath("status");
ids.add(record.getId());
OrderChildSyncDTO bean = new OrderChildSyncDTO();
bean.setCode(0);
OrderChildSyncResultDTO dto = new OrderChildSyncResultDTO();
OrderChild orderChild = orderChildDao.getByChildNo(record.getChildNo()).get();
log.info("查询网络货运结果数据:{}", JSONUtil.parse(result));
if (ObjectUtil.equal(status, 1)) {
dto.setStatus(1);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ONLINE.getCode(), settlementDriverDetail);
} else if (ObjectUtil.equal(status, 0)){
dto.setStatus(2);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
}else if (ObjectUtil.equal(status, 2)){
// orderChildPaySync.transportOrderChildProcess(orderChild);
dto.setStatus(2);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
} else {
Object riskReason = json.getByPath("riskReason");
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(json.getByPath("childNo").toString());
entity.setType(TransportSyncTypeEnum.Type.NO_PASS.getCode());
entity.setRemark(riskReason == null ? "" : riskReason.toString());
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
}
orderChildSyncTransportInvoiceRecordDao.deleteByKeys(ids);
}
// @Transactional(rollbackFor = Exception.class)
// public void orderChildSyncTransportInvoiceExceptionJob() {
// //只查询同步异常的网络货运任务
// List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao.selectListForJob();
// if (CollectionUtil.isEmpty(recordList)) {
// return;
// }
// List<Integer> ids = new LinkedList<>();
//
// for (OrderChildSyncTransportInvoiceRecord record : recordList) {
// log.info("orderChildSyncTransportInvoiceExceptionJob执行:{}", JSONUtil.parse(record));
// if (record.getCreateTime().plusMinutes(10).isBefore(LocalDateTime.now())) {
// log.info("当前记录运单号:{},生成不足10分钟,先不执行", record.getChildNo());
// continue;
// }
//
// String data = transportFeignService.getRiskStatus(ThirdOrderChildRiskStatusParam.builder().childNo(record.getChildNo()).build()).getData();
// String decrypt = ThirdComponent.decrypt(data);
// Result result = JSONUtil.toBean(decrypt, Result.class);
// if (result.succeed()) {
// SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//
// JSON json = JSONUtil.parse(result.getData());
// Object status = json.getByPath("status");
// ids.add(record.getId());
// OrderChildSyncDTO bean = new OrderChildSyncDTO();
// bean.setCode(0);
// OrderChildSyncResultDTO dto = new OrderChildSyncResultDTO();
// OrderChild orderChild = orderChildDao.getByChildNo(record.getChildNo()).get();
// log.info("查询网络货运结果数据:{}", JSONUtil.parse(result));
// if (ObjectUtil.equal(status, 1)) {
// dto.setStatus(1);
// bean.setData(dto);
// orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
// SettlementOwnerEnum.InvoiceType.ONLINE.getCode(), settlementDriverDetail);
// } else if (ObjectUtil.equal(status, 0)){
// dto.setStatus(2);
// bean.setData(dto);
// orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
// SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
//
// }else if (ObjectUtil.equal(status, 2)){
//// orderChildPaySync.transportOrderChildProcess(orderChild);
// dto.setStatus(2);
// bean.setData(dto);
// orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
// SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
// } else {
// Object riskReason = json.getByPath("riskReason");
// OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
// entity.setChildNo(json.getByPath("childNo").toString());
// entity.setType(TransportSyncTypeEnum.Type.NO_PASS.getCode());
// entity.setRemark(riskReason == null ? "" : riskReason.toString());
// orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
// }
// }
// }
//
// orderChildSyncTransportInvoiceRecordDao.deleteByKeys(ids);
// }
}
......@@ -33,8 +33,14 @@ public class SettlementJob {
*/
@XxlJob("settlementInvoiceTypeSync")
public void settlementInvoiceTypeSync() {
// 首次
List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao
.selectListForJobOfFirst();
// 异常
List<OrderChildSyncTransportInvoiceRecord> recordList1 = orderChildSyncTransportInvoiceRecordDao
.selectListForJob();
recordList.addAll(recordList1);
log.info("待同步无车承运运单状态,size:{}", recordList.size());
if (recordList.isEmpty()) {return;}
......
......@@ -201,6 +201,9 @@ public class OrderGoods implements HasKey<Integer> {
@ApiModelProperty("接单保证金(分/车)")
private BigDecimal deposit;
@ApiModelProperty("是否支持借款:0:否 1:是")
private Integer supportLoan;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
......
......@@ -49,7 +49,7 @@ public class SettlementDriver implements HasKey<Integer> {
private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付
private String payErrorMsg; //支付失败原因
private Integer invoicingCompanyId; //开票公司id
private Integer invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private BigDecimal platformServiceFee; //平台服务费(分)
private BigDecimal platformServiceFeeRate; //平台服务费费率%
......
......@@ -61,6 +61,8 @@ public class SettlementOwnerDetail implements HasKey<Integer> {
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private Integer reportFlag; //是否上报 0-否;1-是
private Integer invoiceChannel; //开票渠道:1无车承运
private String remark; //备注
private Integer payStatus; //支付状态:0未支付 1已支付(网络货运是否支付)
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -23,6 +23,9 @@ public interface PaymentService {
void updateOrderPaymentFail(String orderNo,String msg,Integer operation, String paymentItem);
void updateOrderPaymentSuccess(String orderNo,Integer operation, String paymentItem);
void updateOrderPaymentStatusById(String id,int status);
void updateOrderPaymentSerialNoSuccess(String orderNo,String serialNo,Integer operation, String paymentItem);
WalletResidueDTO getWalletAndCard(Integer userCode);
......
package com.clx.performance.service.impl;
import com.clx.order.enums.QuotationEnum;
import com.clx.performance.dao.*;
import com.clx.performance.dto.payment.PaymentDTO;
import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.*;
import com.clx.performance.param.pc.PoundAuditParam;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildPoundAuditService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.*;
import com.clx.performance.vo.pc.OrderChildPoundAuditDetailVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -48,7 +50,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
private final OrderChildLogService orderChildLogService;
private final OrderChildService orderChildService;
private final PaymentService paymentService;
@Override
public OrderChildPoundAuditDetailVO getPoundAuditDetail(String childNo) {
......@@ -128,6 +130,13 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
//计算司机保证金
PaymentDTO paymentDTO = getPaymentDTO(orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods,orderChild.getChildNo(), dif);
......@@ -144,13 +153,29 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
//保存磅单审核日志数据
orderChildPoundLogDao.saveEntity(poundLog);
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(orderChild.getChildNo(),paymentDTO.getChangeDeposit());
}
//保存运单日志数据
orderChildLogService.saveOrderChildLog(param.getChildNo(),type,OrderChildLogEnum.Type.getByCode(type).isPresent() ? OrderChildLogEnum.Type.getByCode(type).get().getMsg() :"",
OrderChildLogEnum.CreateType.PLATFORM.getCode(), loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
/***
* 平衡司机冻结保证金
*/
public void paymentChangePlatformFee(String childNo,BigDecimal changeDeposite){
if(changeDeposite.compareTo(BigDecimal.ZERO) !=0){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFigure(changeDeposite.intValue());
//冻结司机押金
paymentService.paymentChangePlatformFee(payPlatformFeeParam);
}
}
/**
* 装车补偿
*/
......@@ -185,4 +210,43 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
return totalFreight.setScale(0, RoundingMode.HALF_UP);
}
/***
* 获取最新的保证金金额和本次调增的金额
*/
public PaymentDTO getPaymentDTO(OrderChild orderChild){
//计算司机保证金
BigDecimal freightPrice = orderChild.getFreightPrice();
BigDecimal deposit = orderChild.getDeposit();
BigDecimal platformServiceFeeRate = orderChild.getPlatformServiceFeeRate();
BigDecimal platformServiceFee = orderChild.getPlatformServiceFee(); //平台服务费
BigDecimal freight = orderChild.getFreight();
//本次调整金额
BigDecimal changeDeposit = BigDecimal.ZERO;
//本次调整金额
BigDecimal platformServiceFeeNew = BigDecimal.ZERO;
log.info("运单号 {} ,原始冻结金额 {} ",orderChild.getChildNo(),platformServiceFee);
/**
* 如果之前未冻结保证金,本次不调整
* 如果 平台服务费率 为0 本次不处理
* 如果 本次吨数为 0 本次不处理
* 如果 本次调整金额为 0 本次不处理
* **/
if(Objects.nonNull(deposit) && deposit.compareTo(BigDecimal.ZERO) != 0 &&
Objects.nonNull(platformServiceFee) && platformServiceFee.compareTo(BigDecimal.ZERO) != 0 &&
Objects.nonNull(platformServiceFeeRate) && platformServiceFeeRate.compareTo(BigDecimal.ZERO) != 0 &&
Objects.nonNull(freight) && freight.compareTo(BigDecimal.ZERO) != 0
)
{
platformServiceFeeNew = freight
//平台服务费率 * 100
.multiply(platformServiceFeeRate).movePointLeft(2).setScale(2, RoundingMode.HALF_UP);
changeDeposit = platformServiceFeeNew.subtract(platformServiceFee);
log.info("运单号 {} ,原始冻结金额 {} ,最新冻结金额 {},运费差 {} 运费价格{},费率 {}",orderChild.getChildNo(),
platformServiceFee,platformServiceFeeNew,changeDeposit,freightPrice,platformServiceFeeRate
);
}
return PaymentDTO.builder().changeDeposit(changeDeposit).platformServiceFeeNew(platformServiceFeeNew).build();
}
}
......@@ -451,7 +451,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 平台服务费 (订单运费报价为“未税”订单结算方式为“卸车净重(减货损))
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderChild.getSettleTime(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
&& Objects.equals(orderChild.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
orderChild.setPlatformServiceFeeRate(orderGoods.getPlatformServiceFeeRate());
orderChild.setPlatformServiceFee(orderGoods.getDeposit());
orderChild.setDeposit(orderGoods.getDeposit());
......@@ -843,6 +843,7 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal changeDeposit = BigDecimal.ZERO;
//本次调整金额
BigDecimal platformServiceFeeNew = BigDecimal.ZERO;
log.info("运单号 {} ,原始冻结金额 {} ",orderChild.getChildNo(),platformServiceFee);
/**
* 如果之前未冻结保证金,本次不调整
* 如果 平台服务费率 为0 本次不处理
......@@ -855,8 +856,13 @@ public class OrderChildServiceImpl implements OrderChildService {
Objects.nonNull(net) && net.compareTo(BigDecimal.ZERO) != 0
)
{
platformServiceFeeNew = net.multiply(freightPrice).setScale(2, RoundingMode.HALF_UP).multiply(platformServiceFeeRate).setScale(2, RoundingMode.HALF_UP);
platformServiceFeeNew = net.multiply(freightPrice).setScale(2, RoundingMode.HALF_UP)
//平台服务费率 * 100
.multiply(platformServiceFeeRate).movePointLeft(2).setScale(2, RoundingMode.HALF_UP);
changeDeposit = platformServiceFeeNew.subtract(platformServiceFee);
log.info("运单号 {} ,原始冻结金额 {} ,最新冻结金额 {},运费差 {} 吨数{} 运费价格{},费率 {}",orderChild.getChildNo(),
platformServiceFee,platformServiceFeeNew,changeDeposit,net,freightPrice,platformServiceFeeRate
);
}
return PaymentDTO.builder().changeDeposit(changeDeposit).platformServiceFeeNew(platformServiceFeeNew).build();
......@@ -983,7 +989,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (orderChild.getUnloadTime() == null &&
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
//计算司机保证金
BigDecimal net = param.getUnloadRough().subtract(param.getUnloadTare());
BigDecimal net = orderChild.getLoadNet();
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
......@@ -1004,7 +1010,7 @@ public class OrderChildServiceImpl implements OrderChildService {
}
} else {
//计算司机保证金
BigDecimal net = param.getUnloadRough().subtract(param.getUnloadTare());
BigDecimal net = orderChild.getLoadNet();
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
......@@ -1030,7 +1036,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* 平衡司机冻结保证金
*/
public void paymentChangePlatformFee(String childNo,BigDecimal changeDeposite){
if(changeDeposite.compareTo(BigDecimal.ZERO) ==1){
if(changeDeposite.compareTo(BigDecimal.ZERO) !=0){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFigure(changeDeposite.intValue());
......@@ -2002,7 +2008,7 @@ public class OrderChildServiceImpl implements OrderChildService {
}
//判断余额是否能够缴纳保证金
if (data.getResidue() < deposit.longValue()) {
String remark = truckOwnerFlag ? "账户可用余额不足,接单保证金冻结失败,请尽快充值,本次需重置"+deposit.movePointLeft(2) +"元" : "车主钱包余额不足,保证金冻结失败请联系车主充值";
String remark = truckOwnerFlag ? "账户可用余额不足,接单保证金冻结失败,请尽快充值,本次需充值"+deposit.movePointLeft(2) +"元" : "车主钱包余额不足,保证金冻结失败请联系车主充值";
if(truckOwnerFlag){
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_OWNER_RESIDUE_ERROR, remark);
}else{
......
......@@ -192,7 +192,7 @@ public class PaymentServiceImpl implements PaymentService {
OrderPayment orderPayment = new OrderPayment()
.setAmount(payDTO.getFigure())
.setOrderNo(payDTO.getTradeNo())
.setRelationNo(payOrderNoGenerate())
.setRelationNo(payDTO.getTradeNo())
.setPaymentItem(PayUnitTypeEnum.FREEZE_PLATFORM_FEE.getCode() + "")
.setStatus(PaymentStatusEnum.CREATE.getValue())
.setOperation(PayOperationStatusEnum.FREEZE.getValue());
......@@ -243,7 +243,7 @@ public class PaymentServiceImpl implements PaymentService {
saveOrderPayment(orderPayment);
/** 调整冻结记录 **/
FreezeBatchDTO freezeBatchDTO = buildChangeFreezeBatchDTO(orderPaymentOptional,orderPayment.getRelationNo() ,param.getFigure());
FreezeBatchDTO freezeBatchDTO = buildChangeFreezeBatchDTO(orderPaymentOptional,orderPayment.getId() ,param.getFigure());
log.info("发起支付请求日志 {}", freezeBatchDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost() +
......@@ -391,6 +391,18 @@ public class PaymentServiceImpl implements PaymentService {
orderPaymentDao.updateEntityByKey(orderPaymentOptional);
}
@Override
public void updateOrderPaymentStatusById(String id,int status) {
//查询冻结记录
OrderPayment orderPaymentOptional = orderPaymentDao.getEntityByKey(Integer.valueOf(id)).orNull();
if (null == orderPaymentOptional){
log.error("数据不存在 {}, {}" ,id);
}
orderPaymentOptional.setStatus(status);
orderPaymentDao.updateEntityByKey(orderPaymentOptional);
}
@Override
public void updateOrderPaymentSerialNoSuccess(String orderNo, String serialNo, Integer operation, String paymentItem) {
OrderPayment orderPaymentOptional =
......@@ -493,7 +505,7 @@ public class PaymentServiceImpl implements PaymentService {
/**
* 构建 司机平台服务费冻结实体
*/
public FreezeBatchDTO buildChangeFreezeBatchDTO(OrderPayment orderPaymentOptional,String orderNo,Integer figure){
public FreezeBatchDTO buildChangeFreezeBatchDTO(OrderPayment orderPaymentOptional,Integer orderNo,Integer figure){
FreezeBatchDTO freezeBatchDTO = new FreezeBatchDTO();
List<FreezeUnitDTO> FreezeUnitList = new ArrayList<FreezeUnitDTO>();
FreezeUnitDTO freightPayUnitDTO = new FreezeUnitDTO();
......@@ -509,7 +521,7 @@ public class PaymentServiceImpl implements PaymentService {
FreezeUnitList.add(freightPayUnitDTO);
freezeBatchDTO.setFreezeUnitList(FreezeUnitList);
freezeBatchDTO.setOrderNo(orderNo);
freezeBatchDTO.setOrderNo(orderNo+"");
freezeBatchDTO.setSystem(SystemCodeEnum.PERFORMANCE_SERVICE.getCode());
//回调地址
freezeBatchDTO.setNotifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_ADJUST_PLATFORM_FEE_URL);
......
......@@ -3,6 +3,7 @@ package com.clx.performance.service.impl.broker;
import com.clx.order.feign.AddressFeign;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.enums.PowerTypeEnum;
......@@ -28,10 +29,12 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
private static final String LONG_TERM_TIME = "2099-01-01 00:00:00";
@Autowired
private BrokerService brokerService;
......@@ -59,6 +62,9 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
String host = documentFeign.getHost().getData();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
String ownerMobile = ownerFeign.getOwnerInfo(orderInfoFeign.getOwnerUserNo()).getData().getMobile();
FeignAddressVO data = addressFeign.getSendAndReceiveAddress(orderChild.getSendAddressId(), orderChild.getReceiveAddressId()).getData();
FeignAddressVO.Address receiveAddress = data.getReceiveAddress();
FeignAddressVO.Address sendAddress = data.getSendAddress();
......@@ -80,7 +86,7 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
TransportParam transportParam = new TransportParam();
transportParam.setTransportPlatformCode(invoicingCompanyByGroupCode.getNetworkCargoCompanyCode());
transportParam.setOrderCode(orderChild.getChildNo());
transportParam.setOwnerMobile(truckOwnerInfo.getMobile());
transportParam.setOwnerMobile(ownerMobile);
// 货单
OpenOrderDTO orderInfo = new OpenOrderDTO();
......@@ -137,7 +143,9 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
driverInfo.setCardNo(driverUserIdCardVO.getCardNo());
driverInfo.setIdCardAddress(driverUserIdCardVO.getAddress());
driverInfo.setCardStartTime(driverUserIdCardVO.getCardStartTime());
driverInfo.setCardEndTime(driverUserIdCardVO.getCardEndTime());
driverInfo.setCardEndTime(Objects.equals(driverUserIdCardVO.getCardLongTerm(), 1)
? LONG_TERM_TIME
: driverUserIdCardVO.getCardEndTime());
driverInfo.setCardLongTerm(driverUserIdCardVO.getCardLongTerm());
driverInfo.setCardFrontImg(host + driverUserIdCardVO.getCardFaceImg());
driverInfo.setCardBackImg(host + driverUserIdCardVO.getCardBackImg());
......@@ -150,7 +158,9 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
driverInfo.setLicenceImg(host + driverLicenceFeignVO.getLicenceImg());
driverInfo.setLicenceBackImg(host + driverLicenceFeignVO.getLicenceBackImg());
driverInfo.setLicenceStartTime(DateUtils.formatDateTime(driverLicenceFeignVO.getLicenceStartTime()).get());
driverInfo.setLicenceEndTime(DateUtils.formatDateTime(driverLicenceFeignVO.getLicenceEndTime()).get());
driverInfo.setLicenceEndTime(Objects.equals(driverLicenceFeignVO.getLicenceLongTerm(), 1)
? LONG_TERM_TIME
: DateUtils.formatDateTime(driverLicenceFeignVO.getLicenceEndTime()).get());
// driverInfo.setTransportLicenceImg(truckInfoFeignVo.getTransportLicenceImg());
driverInfo.setOccupationalLicenceNo(driverLicenceFeignVO.getOccupationalLicenceNo());
driverInfo.setOccupationalLicenceImg(host + driverLicenceFeignVO.getOccupationalLicenceImg());
......@@ -168,7 +178,9 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
ownerInfo.setCardNo(truckOwnerUserIdCardVO.getCardNo());
ownerInfo.setIdCardAddress(truckOwnerUserIdCardVO.getAddress());
ownerInfo.setCardStartTime(truckOwnerUserIdCardVO.getCardStartTime());
ownerInfo.setCardEndTime(truckOwnerUserIdCardVO.getCardEndTime());
ownerInfo.setCardEndTime(Objects.equals(truckOwnerUserIdCardVO.getCardLongTerm(), 1)
? LONG_TERM_TIME
: truckOwnerUserIdCardVO.getCardEndTime());
ownerInfo.setCardLongTerm(truckOwnerUserIdCardVO.getCardLongTerm());
ownerInfo.setCardFrontImg(host + truckOwnerUserIdCardVO.getCardFaceImg());
ownerInfo.setCardBackImg(host + truckOwnerUserIdCardVO.getCardBackImg());
......@@ -200,6 +212,9 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
truckInfo.setLicenceImgSecond(host + truckInfoFeignVo.getLicenceImgSecond());
truckInfo.setLicenceImgSecondBack(host + truckInfoFeignVo.getLicenceImgSecondBack());
truckInfo.setTransportLicenceImg(host + truckInfoFeignVo.getTransportLicenceImg());
truckInfo.setLicenceImgMain2(host + truckInfoFeignVo.getLicenceImgMain2());
truckInfo.setLicenceImgSecond2(host + truckInfoFeignVo.getLicenceImgSecond2());
truckInfo.setTransportLicenceImg2(host + truckInfoFeignVo.getTransportLicenceImg2());
truckInfo.setPowerType(StringUtils.isBlank(truckInfoFeignVo.getPowerType())
? PowerTypeEnum.Type.OTHER.getCode()
: PowerTypeEnum.Type.getCodeByName(truckInfoFeignVo.getPowerType()));
......@@ -211,11 +226,11 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setSourceOrderNo(orderChild.getOrderNo());
orderChildInfo.setSourceSettlementNo(settlementOwnerDetail.getSettlementNo());
orderChildInfo.setFreightPrice(orderChild.getFreightPrice().intValue());
orderChildInfo.setFreight(orderChild.getFreight().intValue());
orderChildInfo.setDriverFreight(orderChild.getFreight().intValue());
orderChildInfo.setDriverFreightPrice(orderChild.getFreightPrice().intValue());
orderChildInfo.setDriverFreightPrice(settlementOwnerDetail.getFreightPrice().intValue());
orderChildInfo.setFreightPrice(settlementOwnerDetail.getFreightPrice().intValue());
orderChildInfo.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight().intValue());
orderChildInfo.setLossFee(settlementOwnerDetail.getLossFreight().intValue());
orderChildInfo.setLossFeePrice(settlementOwnerDetail.getLossPrice().intValue());
......@@ -225,7 +240,7 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setSendNet(orderChild.getLoadNet());
orderChildInfo.setPayFinishedTime(DateUtils.formatDateTime(orderChild.getPayTime()).get());
orderChildInfo.setPayTime(DateUtils.formatDateTime(orderChild.getPayTime()).get());
orderChildInfo.setLoadTime(DateUtils.formatDateTime(orderChild.getLoadTime()).get());
orderChildInfo.setUnloadTime(DateUtils.formatDateTime(orderChild.getUnloadTime()).get());
orderChildInfo.setPayFinishedTime(DateUtils.formatDateTime(orderChild.getConfirmTime()).get());
......@@ -234,12 +249,12 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setReceiveRough(orderChild.getUnloadRough());
orderChildInfo.setReceiveNet(orderChild.getUnloadNet());
transportParam.setOrderInfo(orderInfo);
transportParam.setImageList(imageList);
transportParam.setDriverInfo(driverInfo);
transportParam.setOwnerInfo(ownerInfo);
transportParam.setTruckInfo(truckInfo);
transportParam.setOrderChildInfo(orderChildInfo);
transportParam.setOrder(orderInfo);
transportParam.setOrderChildImage(imageList);
transportParam.setOrderChildDriver(driverInfo);
transportParam.setOrderChildTruckOwner(ownerInfo);
transportParam.setOrderChildTruck(truckInfo);
transportParam.setOrderChild(orderChildInfo);
brokerService.orderChildSync(transportParam);
}
......
......@@ -69,13 +69,15 @@ public class NetworkDriverAccountServiceImpl implements NetworkDriverAccountServ
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Result<WalletResidueCardVO> result = paymentServiceFeign.getWallet(userCode);
log.info("WalletResidueCardVO:result:{}", JSONUtil.parse(result));
WalletResidueCardVO data = result.getData();
NetworkDriverAccount account = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, loginUserInfo.getUserNo()).get();
log.info("WalletResidueCardVO:{}", JSONUtil.parse(data));
log.info("NetworkDriverAccount:{}", JSONUtil.parse(account));
data.setAssetSum(data.getAssetSum().add(account.getAccountBalance().movePointLeft(2)));
data.setFrozen(new BigDecimal(data.getFrozen()).add(account.getFrozenBalance().movePointLeft(2)).longValue());
data.setResidue(new BigDecimal(data.getResidue()).add(account.getUsableBalance().movePointLeft(2)).longValue());
data.setFrozen(data.getFrozen().add(account.getFrozenBalance()));
data.setResidue(data.getResidue().add(account.getUsableBalance()));
log.info("WalletResidueCardVO222:{}", JSONUtil.parse(data));
return data;
}
}
package com.clx.performance.service.impl.settle;
import com.clx.order.enums.QuotationEnum;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
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.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
......@@ -49,6 +56,11 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
private final OrderChildDao orderChildDao;
private final PaymentService paymentService;
private final OrderGoodsDao orderGoodsDao;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
@Override
public void addOrderChildSyncTransportRecord(SettlementDriverDetail detail) {
OrderChildSyncTransportRecord record = struct.convertRecord(detail);
......@@ -61,17 +73,33 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
@Override
public void updateStatus(PayStatusNotifyDTO payStatusNotifyDTO) {
String childNo = payStatusNotifyDTO.getChildNo();
//支付平台服务费
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementOwnerDetail.setPayStatus(SettlementOwnerDetailEnum.PayStatus.YES.getCode());
settlementOwnerDetailDao.updatePayStatus(settlementOwnerDetail);
orderChildSyncTransportRecordDao.updateStatus(childNo);
networkCaseOutRecordDao.updateStatus(payStatusNotifyDTO.getChildNo(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getCode(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getMsg()
);
SettlementDriverDetail driverDetail = settlementDriverDetailService.selectOneByChildNo(childNo);
networkDriverRunningWaterRecordService.generateCaseOutSuccessRunningWaterRecord(driverDetail);
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
// 未税,卸车减货损账户不变动
}
else {
networkDriverRunningWaterRecordService.generateCaseOutSuccessRunningWaterRecord(driverDetail);
}
try{
//支付平台服务费
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.nonNull(orderChild.getPlatformServiceFee()) &&
!Objects.equals(orderChild.getPlatformServiceFee().intValue(), 0)) {
PayPlatformFeeParam payPlatformFeeParam = PayPlatformFeeParam.builder()
......
......@@ -19,9 +19,9 @@ 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);
return settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight()).setScale(0, RoundingMode.HALF_UP)
.divide(BigDecimal.ONE.subtract(settlementOwnerDetail.getInvoiceServiceFeeRate().movePointLeft(2)), 0, RoundingMode.HALF_UP)
.multiply(settlementOwnerDetail.getInvoiceServiceFeeRate().movePointLeft(2)).setScale(0, RoundingMode.HALF_UP);
}
/**
......@@ -30,31 +30,31 @@ public class SettlementCommonServiceImpl implements SettlementCommonService {
@Override
public BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP)
.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())
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP)
.subtract(settlementOwnerDetail.getLossFreight())
.add(settlementOwnerDetail.getInvoiceServiceFee());
}
else{
//结算方式为“卸车净重(减货损)”,平台运费报价为“含税”时 开票金额=平台运费单价*实际净重-货损单价*货损吨数
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP)
.subtract(settlementOwnerDetail.getLossFreight());
}
}
else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP);
}
}
@Override
public BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP)
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
}
else if (Objects.equals(settlementWay, SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
......@@ -64,7 +64,8 @@ public class SettlementCommonServiceImpl implements SettlementCommonService {
.subtract(settlementOwnerDetail.getLoanFreight());
}else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).setScale(0, RoundingMode.HALF_UP)
.subtract(settlementOwnerDetail.getPrepayFreight());
}
}
......
......@@ -73,8 +73,8 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
: orderChild.getPlatformServiceFeeRate());
settlementDriverDetail.setPlatformServiceFee(
settlementDriverDetail.getSettlementFreight()
.multiply(settlementDriverDetail.getPlatformServiceFeeRate()
.setScale(0, RoundingMode.HALF_UP)));
.multiply(settlementDriverDetail.getPlatformServiceFeeRate().movePointLeft(2))
.setScale(0, RoundingMode.HALF_UP));
settlementDriverDetailDao.saveEntity(settlementDriverDetail);
......
package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.QuotationEnum;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.RedissonConstants;
......@@ -121,6 +122,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired
private SettlementMqService settlementMqService;
@Autowired
private OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void settlementStatistics(SettlementStatisticsMqParam mq) {
......@@ -204,6 +208,14 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
}
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),
QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
}
}
// 更新结算单
......@@ -213,6 +225,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverDetailDao.updateSettlementNo(settlementDriverDetail);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void settle(SettlementSettleMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).get();
......@@ -220,9 +233,10 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
orderChildSyncTransportListener.extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, mq.getInvoiceType());
orderChildSyncTransportListener.extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, mq.getInvoiceType(), mq.getRemark());
}
@Transactional(rollbackFor = Exception.class)
@Override
public void invoiceTypeSync(SettlementInvoiceTypeSyncMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......@@ -231,6 +245,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
if (!Objects.equals(settlementOwnerDetail.getInvoiceChannel(), SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())){
return;
}
if (settlementOwnerDetail.getInvoiceType() != null) {return;}
try {
// 获取状态
......@@ -240,24 +255,29 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return;
}
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)) {
String remark = "";
Integer invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
// if (Objects.equals(result.getRiskStatus(), 1) || Objects.equals(result.getRiskStatus(), 2)) {
// invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
// remark += result.getRiskReason();
// }
if (Objects.equals(result.getSyncStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
} else if (Objects.equals(result.getSyncStatus(), 0)) {
remark += result.getSyncMsg();
}
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);
settlementMqService.settle(orderChild.getChildNo(), invoiceType, remark);
}catch (Exception e){
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
......@@ -267,6 +287,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void invoiceStatusSync(SettlementInvoiceStatusSyncMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......@@ -276,6 +297,10 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return;
}
if (!Objects.equals(settlementOwnerDetail.getInvoiceStatus(), SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode())){
return;
}
// 获取状态
TransportVO result = brokerService.getOrderChildStatus(mq.getChildNo());
if (result == null){
......@@ -292,6 +317,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void payStatusSync(SettlementPayStatusSyncMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......@@ -301,6 +327,13 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return;
}
OrderChildSyncTransportRecord orderChildSyncTransportRecord = orderChildSyncTransportRecordDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(orderChildSyncTransportRecord.getStatus(),
OrderChildSyncTransportRecordEnum.Status.INIT.getCode())){
return;
}
// 获取状态
TransportVO result = brokerService.getOrderChildStatus(mq.getChildNo());
if (result == null){
......@@ -382,7 +415,11 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriver.setStatus(SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode());
}
settlementDriver.setInvoicingCompanyId(detail.getInvoicingCompanyId());
settlementDriver.setInvoicingCompanyShorterName(detail.getInvoicingCompanyShorterName());
settlementDriver.setInvoicingCompanyGroupCode(detail.getInvoicingCompanyGroupCode());
settlementDriver.setPlatformServiceFeeRate(detail.getPlatformServiceFeeRate());
settlementDriver.setPlatformServiceFee(detail.getPlatformServiceFee());
settlementDriverDao.saveEntity(settlementDriver);
}
......
......@@ -68,11 +68,12 @@ public class SettlementMqServiceImpl implements SettlementMqService {
}
@Override
public void settle(String childNo, Integer invoiceType) {
public void settle(String childNo, Integer invoiceType, String remark) {
SettlementSettleMqParam mq = new SettlementSettleMqParam();
mq.setChildNo(childNo);
mq.setInvoiceType(invoiceType);
mq.setRemark(remark);
MqDelay<MqWrapper<SettlementSettleMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
......
......@@ -84,10 +84,10 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setLossFreight(lossFreightCalc(settlementOwnerDetail.getLossPrice(), settlementOwnerDetail.getLossWeight()));
// 预付运费
BigDecimal ans = settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight());
if (ans.compareTo(BigDecimal.ZERO) <= 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
}
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
//借款抵扣金额初始化
settlementOwnerDetail.setLoanFreight(BigDecimal.ZERO);
// 开票服务费
settlementOwnerDetail.setInvoiceServiceFeeRate(
......@@ -102,10 +102,8 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// // 结算金额
// settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
//
//借款抵扣金额初始化
settlementOwnerDetail.setLoanFreight(BigDecimal.ZERO);
// settlementOwnerDetail.setSettlementFreight(
// settlementCommonService.settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//设置开票公司信息
......@@ -154,18 +152,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
}
/**
* 结算金额
*/
private 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{ //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
@Override
public IPage<CarrierPageSettlementOwnerDetailVO> pageSettlementOwnerDetail(
PageCarrierSettlementOwnerDetailParam param) {
......
package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.InvoicingCompanyEnum;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.config.SettlementConfig;
......@@ -108,7 +109,12 @@ public class SettlementServiceImpl implements SettlementService {
settlementOwnerDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementOwnerDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementOwnerDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
settlementOwnerDetail.setInvoiceServiceFeeRate(invoiceCompany.getServiceFeeRate());
settlementOwnerDetail.setInvoiceServiceFeeRate(BigDecimal.ZERO);
if (Objects.equals(invoiceCompany.getQuotationType(), InvoicingCompanyEnum.TaxType.TAX_EXCLUDED.getCode())) {
settlementOwnerDetail.setInvoiceServiceFeeRate(
invoiceCompany.getServiceFeeRate() == null ? BigDecimal.ZERO : invoiceCompany.getServiceFeeRate());
}
settlementDriverDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementDriverDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
......@@ -131,7 +137,7 @@ public class SettlementServiceImpl implements SettlementService {
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
settlementOwnerDetail.setSettlementFreight(settlementCommonService.settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
......@@ -223,23 +229,4 @@ public class SettlementServiceImpl implements SettlementService {
}
}
/**
* 结算金额
*/
private 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());
}
}
}
......@@ -8,7 +8,7 @@ public interface SettlementMqService {
void invoiceTypeSync(String childNo);
void settle(String childNo, Integer invoiceType);
void settle(String childNo, Integer invoiceType, String remark);
void invoiceStatusSync(String childNo);
......
......@@ -40,7 +40,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.stop_flag,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.stop_flag,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 (StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime())) {
......@@ -196,8 +198,8 @@ public class OrderGoodsSqlProvider {
.append(o.getGoodsId()).append("','").append(o.getCreateTime()).append("','").append(o.getModifiedTime()).append("','").append(o.getUserName()).append("','")
.append(o.getUserNo()).append("','").append(o.getBatchNumber()).append("','").append(o.getLastArriveReceiveTime()).append("','")
.append(o.getLastLoadTime()).append("','").append(o.getLastOrderTime()).append("','").append(o.getSettlementAccountPeriod()).append("','").append(o.getSettlementWay()).append("','")
.append(o.getPlatformFreightQuotationTaxType()).append("','").append(o.getPlatformServiceFeeRate()).append("','").append(o.getDeposit()).append("','").append(o.getInvoiceServiceFeeRate())
.append("')");
.append(o.getPlatformFreightQuotationTaxType()).append("',").append(o.getPlatformServiceFeeRate()).append(",").append(o.getDeposit()).append(",").append(o.getInvoiceServiceFeeRate())
.append(")");
if (i < orderGoodsList.size() - 1) {
sqlList.append(",");
......
......@@ -20,10 +20,11 @@ public class SettlementPlatformServiceFeeSqlProvider {
FROM(TABLE);
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
if (StringUtils.isNotBlank(param.getDriverUserName())) {WHERE("child_no = #{param.childNo}");}
if (StringUtils.isNotBlank(param.getDriverName())) {WHERE("driver_name like CONCAT(#{param.driverName},'%')");}
if (StringUtils.isNotBlank(param.getDriverMobile())) {WHERE("driver_mobile = #{param.driverMobile}");}
if (Objects.nonNull(param.getDriverUserNo())) {WHERE("driver_user_no = #{param.driverUserNo}");}
if (Objects.nonNull(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (Objects.nonNull(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......
......@@ -184,6 +184,7 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
orderGoods.setSupportLoan(orderInfoFeign.getSupportLoan());
List<OrderOwnTruckVo> orderOwnTruckVos = orderFeign.selectTruckListFeign(orderNo);
if (orderOwnTruckVos == null || orderOwnTruckVos.isEmpty()) {
......
......@@ -187,6 +187,7 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
orderGoods.setSupportLoan(orderInfoFeign.getSupportLoan());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
......
......@@ -181,6 +181,7 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
orderGoods.setSupportLoan(orderInfoFeign.getSupportLoan());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论