提交 feb08add authored 作者: 杨启发's avatar 杨启发

Merge remote-tracking branch 'origin/v17.5_order_child_sync_broker_20240617'…

Merge remote-tracking branch 'origin/v17.5_order_child_sync_broker_20240617' into v17.5_order_child_sync_broker_20240617
......@@ -37,7 +37,7 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_WEIGHT_LACK(1201, "剩余吨数不足,请联系客服"),
ORDER_INVALID(1202, "无效的货单"),
ORDER_INVALID1(1203, "当前运单的货源已完成或取消,请查看其他货源"),
ORDER_DRIVER_LIMIT(1204, "该货单不支持车主抢单"),
ORDER_CHILD_NO_FOUND(1301, "运单不存在"),
ORDER_CHILD_STATUS_CHANGED(1302, "运单状态已变更,请重新刷新页面"),
......@@ -97,6 +97,10 @@ public enum PerformanceResultEnum implements ResultEnum {
INTEGRAL_RULE_NAME_EXIST(1703, "层级名称已存在"),
APP_POP_UP_ERROR(-1000, "app弹窗提示"),
/**司机提示语 **/
APP_POP_UP_DRIVER_RESIDUE_ERROR(-500, "app弹窗提示"),
/**车主提示语 **/
APP_POP_UP_OWNER_RESIDUE_ERROR(-499, "app弹窗提示"),
WALLET_CODE_IS_NULL(1704, "用户钱包不存在"),
ORDER_GOODS_SAVE_FAIL(1801, "保存货单失败,请稍后再试"),
......
......@@ -100,6 +100,7 @@ public enum SettlementOwnerEnum {
IMMEDIATE(1, "拉运完成结算"),
MONTH(2, "月结"),
DAILY(3, "日结"),
;
......
......@@ -25,4 +25,7 @@ public class OrderChildSaveParam extends PositionParam {
@NotNull(message = "司机用户编号空")
private Long driverUserNo;
@ApiModelProperty(value = "支付方密码", example = "2356", dataType = "String")
private String pwd;
}
......@@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.DecimalMax;
import java.math.BigDecimal;
......@@ -24,6 +25,7 @@ public class OpenOwnerTopUpParam {
@ApiModelProperty(value = "充值金额(元)", example = "1.23")
@MoneyInConvert
@DecimalMax(value = "9999999999.99",message = "金额不得大于9999999999.99元")
private BigDecimal topUpBalance;
@ApiModelProperty(value = "账户类型: 1:保证金 2:预付运费", example = "1")
......
......@@ -13,13 +13,11 @@ import javax.validation.constraints.NotBlank;
@Builder
@Accessors(chain = true)
public class PayPlatformFeeParam {
@NotBlank(message = "支付人不能为空")
@ApiModelProperty(value = "支付来源", example = "2234", dataType = "int")
Integer from;
@NotBlank(message = "支付密码不能为空")
@ApiModelProperty(value = "支付方密码", example = "2356", dataType = "String")
String pwd;
@NotBlank(message = "金额不能为空")
@ApiModelProperty(value = "金额", example = "2356", dataType = "int")
Integer figure;
@NotBlank(message = "交易单号不能为空")
......
package com.clx.performance.param.pc.payment;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@ApiModel(description = "钱包查询")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class WalletParam {
/**
* 用户编号从10000001开始
*/
@ApiModelProperty(value = "主钱包账号", dataType = "int", example = "1")
private Integer userCode;
}
package com.clx.performance.param.pc.payment;
import com.fasterxml.jackson.annotation.JsonGetter;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
public class WalletResidueDTO {
//余额
@ApiModelProperty(value = "余额", dataType = "double", example = "11.10")
private Long residue;
//冻结的资金
@ApiModelProperty(value = "冻结的资金", dataType = "double", example = "11.10")
private Long frozen;
//保证金
@ApiModelProperty(value = "保证金", dataType = "double", example = "11.10")
private Double deposit;
//状态0锁定1正常2异常
@ApiModelProperty(value = "状态0锁定1正常2异常", dataType = "int", example = "1")
private Integer status;
//是否设置交易密码0没有1有
@ApiModelProperty(value = "是否设置交易密码0没有1有", dataType = "String", example = "1")
private String pwd;
public Long getResidue() {
return residue;
}
public void setResidue(Long residue) {
this.residue = residue;
}
public Long getFrozen() {
return frozen;
}
public void setFrozen(Long frozen) {
this.frozen = frozen;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@JsonGetter(value="frozen")
public BigDecimal frozenFormat() {
return new BigDecimal(new Double(this.frozen)/100);
}
@JsonGetter(value="residue")
public Double residueFormat() {
return new Double(this.residue)/100;
}
@JsonGetter(value="deposit")
public Double depositFormat() {
return new Double(this.deposit)/100;
}
public Double getDeposit() {
return deposit;
}
public void setDeposit(Double deposit) {
this.deposit = deposit;
}
@Override
public String toString() {
return "WalletDTO [residue=" + residue + ", frozen=" + frozen
+ ", status=" + status + "]";
}
}
......@@ -227,5 +227,7 @@ public class OrderChildVO {
@ApiModelProperty(value = "车辆未开启中交兴路的提示信息")
private String notOpenZJXLMsg;
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0;
}
\ No newline at end of file
......@@ -145,6 +145,9 @@ public class OrderGoodsVO {
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
@ApiModelProperty("平台运费报价税类型:0未税 1含税")
private Integer platformFreightQuotationTaxType;
@ApiModelProperty("平台服务费费率%")
private BigDecimal platformServiceFeeRate;
......@@ -152,4 +155,9 @@ public class OrderGoodsVO {
@ApiModelProperty("接单保证金(分/车)")
private BigDecimal deposit;
@ApiModelProperty("结算方式 1装车净重 2卸车净重")
private Integer settlementWay;
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0;
}
\ No newline at end of file
......@@ -34,6 +34,8 @@ import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerRepayment;
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.loan.OwnerLoanRecordService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -42,6 +44,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
......@@ -84,7 +87,7 @@ public class OrderChildLoanComponent {
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
private final PaymentService paymentService;
/**
* 接单校验判断
......@@ -338,6 +341,45 @@ public class OrderChildLoanComponent {
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
}
@Transactional(rollbackFor = Exception.class)
public void orderChildCancelAfter(String childNo){
//运单取消
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
BigDecimal platformServiceFee = orderChild.getPlatformServiceFee(); //平台服务费
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
if (CollectionUtil.isEmpty(runningWaterRecordList)) {
if( Objects.nonNull(platformServiceFee) && platformServiceFee.compareTo(BigDecimal.ZERO) != 0){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFigure(platformServiceFee.intValue());
paymentService.paymentCancelPlatformFee(payPlatformFeeParam);
}
return;
}
Long ownerUserNo = runningWaterRecordList.get(0).getOwnerUserNo();
log.info("当前解冻货主:{},流水记录长度{},流水记录{}", ownerUserNo, runningWaterRecordList.size(), JSONUtil.parse(runningWaterRecordList));
for (OwnerLoanAccountRunningWaterRecord record : runningWaterRecordList) {
Long loanNo = record.getLoanNo();
Integer loanType = record.getLoanType();
String ownerUserName = record.getOwnerUserName();
BigDecimal balance = record.getAlterationBalance();
//解冻借款
thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, ownerUserName, record.getMobile(), childNo, balance);
}
if( Objects.nonNull(platformServiceFee) && platformServiceFee.compareTo(BigDecimal.ZERO) != 0){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFigure(platformServiceFee.intValue());
paymentService.paymentCancelPlatformFee(payPlatformFeeParam);
}
}
//归还借款单的剩余金额+解冻流水
public void thawOwnerLoanAccount(Long loanNo, Integer loanType, Long userNo, String userName, String mobile, String childNo, BigDecimal balance) {
log.info("归还借款单的剩余金额+解冻流水,loanNo:{},loanType:{},userNo:{},childNo:{}, balance:{}", loanNo, loanType, userNo, childNo, balance);
......
package com.clx.performance.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "settlement")
@Data
@Component
public class SettlementConfig {
// 普通单开票公司
private InvoiceCompany invoiceCompanyDefault;
@Data
public class InvoiceCompany {
String companyGroupCode;
}
}
......@@ -44,7 +44,7 @@ public class OpenOwnerAccountController {
@ApiOperation(value = "账户充值", notes = "<br>By:胡宇帆")
@PostMapping("/accountTopUp")
@UnitCovert(param = false)
public Result<Long> openAccountTopUp(@RequestBody OpenOwnerTopUpParam param) {
public Result<Long> openAccountTopUp(@RequestBody @Validated OpenOwnerTopUpParam param) {
Long id = ownerAccountService.openAccountTopUp(param);
return Result.ok(id);
}
......
......@@ -40,6 +40,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
boolean updateSettlement(OrderChild item);
boolean updateCancel(OrderChild item);
boolean updatePlatformServiceFee(OrderChild item);
Optional<OrderChild> getByChildNo(String childNo);
......
......@@ -66,6 +66,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus())
.set(OrderChild::getDeposit, item.getDeposit())
.set(OrderChild::getPlatformServiceFee, item.getPlatformServiceFee())
);
}
......@@ -83,6 +85,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus())
.set(OrderChild::getDeposit, item.getDeposit())
.set(OrderChild::getPlatformServiceFee, item.getPlatformServiceFee())
);
}
......@@ -103,6 +107,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getDeposit, item.getDeposit())
.set(OrderChild::getPlatformServiceFee, item.getPlatformServiceFee())
);
}
......@@ -154,6 +160,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
);
}
@Override
public boolean updatePlatformServiceFee(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getPlatformServiceFee, item.getPlatformServiceFee())
);
}
@Override
public Optional<OrderChild> getByChildNo(String childNo) {
......
......@@ -2,12 +2,13 @@ package com.clx.performance.dao.impl.payment;
import com.clx.performance.dao.payment.OrderPaymentDao;
import com.clx.performance.mapper.payment.OrderPaymentMapper;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.model.payment.OrderPayment;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author huningning
* Date 2024-06-18
......@@ -48,5 +49,11 @@ public class OrderPaymentDaoImpl extends BaseDaoImpl<OrderPaymentMapper, OrderPa
.map(super::getOne);
}
@Override
public List<OrderPayment> listByOrderNo(String orderNo, String paymentItem) {
return list(lQrWrapper()
.eq(OrderPayment::getOrderNo, orderNo)
.eq(OrderPayment::getPaymentItem, paymentItem)
);
}
}
......@@ -18,7 +18,6 @@ import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* @Author: aiqinguo
......@@ -37,6 +36,10 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
.set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag())
.set(SettlementDriverDetail::getLoanFlag, item.getLoanFlag())
.set(SettlementDriverDetail::getLoanTypeFlag, item.getLoanTypeFlag())
.set(SettlementDriverDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementDriverDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementDriverDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
......
......@@ -40,6 +40,7 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
.set(SettlementOwner::getInvoiceFreight, item.getInvoiceFreight())
.set(SettlementOwner::getLoanFreight, item.getLoanFreight())
.set(SettlementOwner::getPrepayFreight, item.getPrepayFreight())
.set(SettlementOwner::getInvoiceServiceFee, item.getInvoiceServiceFee())
);
}
......@@ -172,10 +173,29 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
}
@Override
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodMonth(String orderNo, LocalDateTime settlementPeriodTime, Integer invoiceType) {
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodMonth(String orderNo, Integer invoicingCompanyId,
LocalDateTime settlementPeriodTime, Integer invoiceType) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getOrderNo, orderNo)
.eq(SettlementOwner::getSettlementPeriodType, SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode())
.eq(SettlementOwner::getInvoicingCompanyId, invoicingCompanyId)
.eq(SettlementOwner::getSettlementPeriodType,
SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode())
.eq(SettlementOwner::getSettlementPeriodTime, settlementPeriodTime)
.eq(SettlementOwner::getInvoiceType, invoiceType)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
)
.map(super::getOne);
}
@Override
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodDaily(String orderNo,
Integer invoicingCompanyId,
LocalDateTime settlementPeriodTime,
Integer invoiceType) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getOrderNo, orderNo)
.eq(SettlementOwner::getInvoicingCompanyId, invoicingCompanyId)
.eq(SettlementOwner::getSettlementPeriodType,
SettlementOwnerEnum.SettlementPeriodType.DAILY.getCode())
.eq(SettlementOwner::getSettlementPeriodTime, settlementPeriodTime)
.eq(SettlementOwner::getInvoiceType, invoiceType)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
......@@ -184,9 +204,12 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
}
@Override
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodImmediate(String orderNo, Integer invoiceType) {
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodImmediate(String orderNo,
Integer invoicingCompanyId,
Integer invoiceType) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getOrderNo, orderNo)
.eq(SettlementOwner::getInvoicingCompanyId, invoicingCompanyId)
.eq(SettlementOwner::getSettlementPeriodType, SettlementOwnerEnum.SettlementPeriodType.IMMEDIATE.getCode())
.eq(SettlementOwner::getInvoiceType, invoiceType)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
......@@ -250,6 +273,15 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
.set(SettlementOwner::getStatus, toStatus)
);
}
@Override
public boolean updateDailyLock(Integer settlementPeriodType, LocalDateTime settlementPeriodTime, Integer fromStatus,Integer toStatus){
return update(lUdWrapper()
.eq(SettlementOwner::getSettlementPeriodType, settlementPeriodType)
.eq(SettlementOwner::getSettlementPeriodTime, settlementPeriodTime)
.eq(SettlementOwner::getStatus, fromStatus)
.set(SettlementOwner::getStatus, toStatus)
);
}
@Override
public void updateSettlementMerge(@Param("settlementNo")String settlementNo,
......
......@@ -37,6 +37,12 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.set(SettlementOwnerDetail::getFinalPaymentStatus, item.getFinalPaymentStatus())
.set(SettlementOwnerDetail::getPrepayFreight, item.getPrepayFreight())
.set(SettlementOwnerDetail::getLoanFreight, item.getLoanFreight())
.set(SettlementOwnerDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementOwnerDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
.set(SettlementOwnerDetail::getInvoiceServiceFeeRate, item.getInvoiceServiceFeeRate())
.set(SettlementOwnerDetail::getInvoiceServiceFee, item.getInvoiceServiceFee())
);
}
......
......@@ -6,6 +6,8 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author huningning
* Date 2024-06-18
......@@ -24,4 +26,6 @@ public interface OrderPaymentDao extends BaseDao<OrderPaymentMapper, OrderPaymen
@Param("paymentItem")String paymentItem,
@Param("operation")Integer operation);
List<OrderPayment> listByOrderNo(@Param("orderNo")String orderNo, @Param("paymentItem")String paymentItem);
}
......@@ -36,9 +36,17 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
IPage<SettlementOwner> pageSettlementOwner(Long userNo,PageOwnerSettlementParam param);
Optional<SettlementOwner> selectUnlockOfSettlementPeriodMonth(@Param("orderNo")String orderNo,
@Param("invoicingCompanyId") Integer invoicingCompanyId,
@Param("settlementPeriodTime") LocalDateTime settlementPeriodTime,
@Param("invoiceType")Integer invoiceType);
Optional<SettlementOwner> selectUnlockOfSettlementPeriodDaily(String orderNo,
Integer invoicingCompanyId,
LocalDateTime settlementPeriodTime,
Integer invoiceType);
Optional<SettlementOwner> selectUnlockOfSettlementPeriodImmediate(@Param("orderNo")String orderNo,
@Param("invoicingCompanyId") Integer invoicingCompanyId,
@Param("invoiceType")Integer invoiceType);
List<SettlementOwner> listToBeLockOfSettlementPeriodMonth(@Param("settlementPeriodTime") LocalDateTime settlementPeriodTime);
......@@ -61,6 +69,9 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
@Param("fromStatus")Integer fromStatus,
@Param("toStatus")Integer toStatus);
boolean updateDailyLock(Integer settlementPeriodType, LocalDateTime settlementPeriodTime,
Integer fromStatus, Integer toStatus);
void updateSettlementMerge(@Param("settlementNo")String settlementNo,
@Param("settlementNos")List<String> settlementNos,
@Param("mergedBy") String mergedBy,
......
package com.clx.performance.dto.payment;
import com.fasterxml.jackson.annotation.JsonGetter;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
/**
*
* @author 胡宁宁
* @date 2024年06
* @description
*/
@Data
@Builder
public class PaymentDTO {
/** 本次调整金额 **/
BigDecimal changeDeposit ;
/** 最新的保证金**/
BigDecimal platformServiceFeeNew;
}
......@@ -9,7 +9,7 @@ import java.math.BigDecimal;
/**
*
* @author 胡宁宁
* @date 2023年11月12日
* @date 2024年06
* @description
*/
public class WalletResidueCardDTO extends WalletResidueDTO{
......
......@@ -7,12 +7,11 @@ import java.math.BigDecimal;
/**
*
*
* @author 胡宁宁
* @date 2023年11月12日
* @date 2024年06
* @description
*/
public class WalletResidueDTO {
@ApiModelProperty(value = "余额", dataType = "double", example = "11.10")
......
......@@ -10,11 +10,14 @@ public enum HttpEnum {
PERFORMANCE_PAY_CLX_PAYMENT(10000, "履约服务向老马上来发起钱包转账",
"/payment-service/performance/payUserWalletTransfer"),
PERFORMANCE_PAY_CLX_DRIVER_FREEZE(10000, "履约服务向老马上来发起司机押金冻结",
PERFORMANCE_PAY_CLX_DRIVER_FREEZE(10001, "履约服务向老马上来发起司机押金冻结",
"/payment-service/performance/freezeUserMQ"),
PERFORMANCE_PAY_CLX_ADJUST_DRIVER_FREEZE(10000, "履约服务向老马上来发起司机押金冻结调整",
PERFORMANCE_PAY_CLX_ADJUST_DRIVER_FREEZE(10002, "履约服务向老马上来发起司机押金冻结调整",
"/payment-service/performance/completeFreezeBatchMQ"),
PERFORMANCE_PAY_CLX_WALLET(10003, "履约服务向老马上来发起司机余额查询",
"/payment-service/performance/getWalletAndCard"),
;
private final int code;
......
......@@ -140,6 +140,7 @@ public class EventListenerComponent {
throw e;
}
log.info("处理货主借款监听器执行成功");
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
......@@ -210,24 +211,7 @@ public class EventListenerComponent {
String childNo = event.getChildNo();
log.info("需要解冻借款的的运单号:{}", childNo);
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
if (CollectionUtil.isEmpty(runningWaterRecordList)) {
return;
}
Long ownerUserNo = runningWaterRecordList.get(0).getOwnerUserNo();
log.info("当前解冻货主:{},流水记录长度{},流水记录{}", ownerUserNo, runningWaterRecordList.size(), JSONUtil.parse(runningWaterRecordList));
for (OwnerLoanAccountRunningWaterRecord record : runningWaterRecordList) {
Long loanNo = record.getLoanNo();
Integer loanType = record.getLoanType();
String ownerUserName = record.getOwnerUserName();
BigDecimal balance = record.getAlterationBalance();
//解冻借款
orderChildLoanComponent.thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, ownerUserName, record.getMobile(), childNo, balance);
}
orderChildLoanComponent.orderChildCancelAfter(childNo);
}
@EventListener(classes = {OwnerLoanThawEvent.class})
......
package com.clx.performance.extranal.order;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.msl.common.base.Optional;
public interface InvoicingCompanyService {
Optional<InvoicingCompanyVO> getInvoicingCompany(int id);
InvoicingCompanyVO getInvoicingCompanyByGroupCode(String companyGroupCode);
}
package com.clx.performance.extranal.order.impl;
import com.clx.order.feign.InvoicingCompanyFeign;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class InvoicingCompanyServiceImpl implements InvoicingCompanyService {
@Autowired
private InvoicingCompanyFeign invoicingCompanyFeign;
@Override
public Optional<InvoicingCompanyVO> getInvoicingCompany(int id) {
return Optional.ofNullable(invoicingCompanyFeign.getInvoicingCompany(id))
.filter(Result::succeed)
.map(Result::getData);
}
@Override
public InvoicingCompanyVO getInvoicingCompanyByGroupCode(String companyGroupCode) {
return Optional.of(invoicingCompanyFeign.getInvoicingCompanyByGroupCode(companyGroupCode))
.filter(Result::succeed)
.map(Result::getData)
.orNull();
}
}
package com.clx.performance.job;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Slf4j
@Component
public class SettlementOwnerMontnJob {
@Autowired
SettlementOwnerService settlementOwnerService;
@Autowired
private SettlementOwnerDao settlementOwnerDao;
/**
* 月结货主结算单状态变更为锁定
......@@ -32,7 +38,25 @@ public class SettlementOwnerMontnJob {
}
}
/**
* 日结货主结算单状态变更为锁定
*/
@XxlJob("settlementOwnerDailyInit")
public void settlementOwnerDailyInit() {
try {
// 锁定前一天数据
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getDayStart().minusDays(1);
//所有日结的待锁定的货主结算单修改状态为锁定
settlementOwnerDao.updateDailyLock(
SettlementOwnerEnum.SettlementPeriodType.DAILY.getCode(),
settlementPeriodTime,
SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode(),
SettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode());
} catch (Exception e) {
log.warn("日结货主结算单状态变更为锁定,异常原因:{}",e);
JobLog.error("日结货主结算单状态变更为锁定,异常原因=====================", e);
}
}
}
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.config.SettlementConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.OrderGoodsDao;
......@@ -19,7 +20,7 @@ import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.event.OwnerLoanEvent;
import com.clx.performance.event.SettlementUpdateEvent;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.*;
import com.clx.performance.model.settle.SettlementDriverDetail;
......@@ -27,19 +28,16 @@ import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.dto.HttpDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
......@@ -72,7 +70,12 @@ public class OrderChildSyncTransportListener {
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final ApplicationEventPublisher applicationEventPublisher;
private final InvoicingCompanyService invoicingCompanyService;
private final SettlementConfig settlementConfig;
/**
* 承运同步网络货运运单
*/
@RabbitListener(queues = RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_QUEUE)
public void onMessage(String message) {
OrderChild orderChild = JSONUtil.toBean(message, OrderChild.class);
......@@ -93,12 +96,15 @@ public class OrderChildSyncTransportListener {
public void transportOrderChildProcess(OrderChild orderChild) {
Integer invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// 同步网络货运
HttpDTO httpDTOResult = transportFeignService.orderChildSync(param);
String decrypt = ThirdComponent.decrypt(httpDTOResult.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
......@@ -109,7 +115,7 @@ public class OrderChildSyncTransportListener {
public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark,
SettlementOwnerDetail settlementOwnerDetail,
Integer invoiceType, SettlementDriverDetail settlementDriverDetail) {
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
if (null != bean && bean.getCode() == 0) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运成功,运单号为{}", orderChild.getChildNo());
......@@ -159,32 +165,57 @@ public class OrderChildSyncTransportListener {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
}
}
} else {
}
else {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
} else {
}
else {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,变为普通单,运单号{}, 错误信息{}", orderChild.getChildNo(), remark);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(invoiceType)) {
if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
// 如果开票标识为“普通单”时,开票费率从开票公司“五寨华祥”中获取
settlementOwnerDetail.setInvoiceServiceFeeRate(BigDecimal.ZERO);
InvoicingCompanyVO invoiceCompany = invoicingCompanyService.getInvoicingCompanyByGroupCode(
settlementConfig.getInvoiceCompanyDefault().getCompanyGroupCode());
//设置开票公司信息
settlementOwnerDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementOwnerDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementOwnerDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
settlementDriverDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementDriverDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
} else {
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
// 如果开票标识为“网运单”时,开票费率取货单单所记录的开票费率
settlementOwnerDetail.setInvoiceServiceFeeRate(
orderGoods.getInvoiceServiceFeeRate()==null? BigDecimal.ZERO : orderGoods.getInvoiceServiceFeeRate());
}
settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType);
// 开票服务费
settlementOwnerDetail.setInvoiceServiceFee(invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
//货主借款事件处理
OwnerLoanMqDTO dto = new OwnerLoanMqDTO();
dto.setSettlementOwnerDetail(settlementOwnerDetail);
......@@ -261,20 +292,49 @@ public class OrderChildSyncTransportListener {
/**
* 开票金额
*/
private BigDecimal invoiceFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
private 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 { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
}
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());
}
}
/**
* 开票服务费金额
*/
private 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);
}
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 { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
}
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());
}
}
......
......@@ -189,8 +189,15 @@ public class OrderGoods implements HasKey<Integer> {
@ApiModelProperty("批次号")
private Long batchNumber;
@ApiModelProperty("平台运费报价税类型:0未税 1含税")
private Integer platformFreightQuotationTaxType;
@ApiModelProperty("开票服务率%")
private BigDecimal invoiceServiceFeeRate;
@TableField("platform_service_fee_rate")
@ApiModelProperty("平台服务费费率%")
private BigDecimal platformServiceFeeRate;
@TableField("deposit")
@ApiModelProperty("接单保证金(分/车)")
private BigDecimal deposit;
......
......@@ -50,6 +50,7 @@ public class SettlementDriver implements HasKey<Integer> {
private String payErrorMsg; //支付失败原因
private Integer invoicingCompanyId; //开票公司id
private Integer invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private BigDecimal platformServiceFee; //平台服务费(分)
private BigDecimal platformServiceFeeRate; //平台服务费费率%
private Integer status; //状态
......
......@@ -49,7 +49,8 @@ public class SettlementDriverDetail implements HasKey<Integer> {
private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单
private Integer invoicingCompanyId; //开票公司id
private Integer invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private BigDecimal platformServiceFee; //平台服务费(分)
private BigDecimal platformServiceFeeRate; //平台服务费费率%
private Integer status; //状态
......
......@@ -28,8 +28,9 @@ public class SettlementPlatformServiceFee implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String childNo; //运单编号
private Long driverUserNo; //车主用户编号
private String driverName; //车主名称
private Long driverUserNo; //司机用户编号
private String driverName; //司机名称
private String driverMobile; //司机手机号
private Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址
private Integer receiveAddressId; //收货地址id
......
......@@ -3,6 +3,7 @@ package com.clx.performance.service;
import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.param.pc.payment.WalletResidueDTO;
import com.msl.common.result.Result;
public interface PaymentService {
......@@ -23,4 +24,8 @@ public interface PaymentService {
void updateOrderPaymentSuccess(String orderNo,Integer operation, String paymentItem);
void updateOrderPaymentSerialNoSuccess(String orderNo,String serialNo,Integer operation, String paymentItem);
WalletResidueDTO getWalletAndCard(Integer userCode);
}
......@@ -4,12 +4,15 @@ import cn.hutool.json.JSONUtil;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.InvoicingCompanyEnum;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RedisConstants;
......@@ -19,10 +22,14 @@ import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.dto.payment.PaymentDTO;
import com.clx.performance.dto.payment.WalletResidueCardDTO;
import com.clx.performance.dto.zjxl.TruckLocationDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.extranal.user.*;
import com.clx.performance.feign.FeignPaymentService;
import com.clx.performance.model.*;
......@@ -34,6 +41,7 @@ import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.*;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService;
......@@ -49,6 +57,7 @@ import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePlatformServiceFeeConfigVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -188,8 +197,15 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private PlatformServiceFeeConfigService platformServiceFeeConfigService;
@Autowired
private InvoicingCompanyService invoicingCompanyService;
@Autowired
private PaymentService paymentService;
@Autowired
private QuotationService quotationService;
@Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
......@@ -269,8 +285,10 @@ public class OrderChildServiceImpl implements OrderChildService {
// 司机接单限制
driverTakeOrderLimit(driverTruckInfo.getUserNo());
//接单钱包限制
driverTakeOrderPaymentLimit(driverTruckInfo.getWalletCode(),driverTruckInfo.getTruckOwnWalletCode());
/** 判断当前用户是否为车主 true 车主 */
boolean truckOwnerFlag = Objects.equals(driverTruckInfo.getWalletCode(), driverTruckInfo.getTruckOwnWalletCode());
/** 冻结的钱包账户**/
Integer checkWalletCode = truckOwnerFlag ? driverTruckInfo.getWalletCode() : driverTruckInfo.getTruckOwnWalletCode();
LocalDateTime now = LocalDateTime.now();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(
......@@ -280,6 +298,13 @@ public class OrderChildServiceImpl implements OrderChildService {
log.warn("货单已暂停");
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID,"当前货单无效");
}
//获取平台 接单保证金 和服务费率
BigDecimal deposit = BigDecimal.ZERO;
if(Objects.nonNull(orderGoods.getDeposit())){
deposit = orderGoods.getDeposit();//接单保证金
}
//接单钱包限制
driverTakeOrderPaymentLimit(driverTruckInfo.getWalletCode(),driverTruckInfo.getTruckOwnWalletCode(),deposit);
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
......@@ -288,6 +313,24 @@ public class OrderChildServiceImpl implements OrderChildService {
}
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
log.info("开票公司id {} " ,orderInfo.getInvoicingCompanyId());
/** 存在开票公司 **/
if (Objects.nonNull(orderInfo.getInvoicingCompanyId())
&& orderInfo.getInvoicingCompanyId() > 0) {
InvoicingCompanyVO invoicingCompanyVO = invoicingCompanyService.
getInvoicingCompany(orderInfo.getInvoicingCompanyId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
/** 是否支持车主接单,0:否,1:是,默认是
* 逻辑:如果结算方式是 卸车净重(减货损),开票公司支持车主模式 , 那么都可以接单 如果不支持车主模式 ,只能车主接单**/
log.info("是否支持车主模式 {} " ,invoicingCompanyVO.getSupportOwnerOrder());
log.info("结算方式 {} " ,orderGoods.getSettlementWay());
log.info("是否是车主 {} " ,truckOwnerFlag);
if (Objects.equals(invoicingCompanyVO.getSupportOwnerOrder(), 0) &&
Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
if (!truckOwnerFlag) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_DRIVER_LIMIT);
}
}
}
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(orderInfo.getOwnerUserNo());
// // 车型限制
......@@ -418,9 +461,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 平台服务费
orderChild.setPlatformServiceFeeRate(orderGoods.getPlatformServiceFeeRate());
orderChild.setPlatformServiceFee(orderChild.getPlatformServiceFeeRate()!=null
? orderChild.getFreight().multiply(orderChild.getPlatformServiceFeeRate())
: null);
orderChild.setPlatformServiceFee(orderGoods.getDeposit());
orderChild.setDeposit(orderGoods.getDeposit());
// 更新货单数据
......@@ -432,7 +473,16 @@ public class OrderChildServiceImpl implements OrderChildService {
// 新增运单
orderChildDao.saveEntity(orderChild);
// 冻结司机保证金
if(deposit.compareTo(BigDecimal.ZERO) ==1){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFrom(checkWalletCode);
payPlatformFeeParam.setFigure(orderGoods.getDeposit().intValue());
payPlatformFeeParam.setPwd(param.getPwd());
//冻结司机押金
paymentService.paymentPlatformFee(payPlatformFeeParam);
}
// 更新出车状态
updateDriverOrderStatusLock(orderChild.getDriverUserNo(), orderChild.getTruckId());
......@@ -749,18 +799,77 @@ public class OrderChildServiceImpl implements OrderChildService {
if (orderChild.getLoadTime() == null &&
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
//计算司机保证金
BigDecimal net = param.getLoadRough().subtract(param.getLoadTare());
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
updateLoadFirst(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(),
OrderChildLogEnum.Type.LOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(childNo,paymentDTO.getChangeDeposit());
}
} else {
//计算司机保证金
BigDecimal net =param.getLoadRough().subtract(param.getLoadTare());
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
updateReload(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(),
OrderChildLogEnum.Type.RELOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(childNo,paymentDTO.getChangeDeposit());
}
}
}
/***
* 获取最新的保证金金额和本次调增的金额
*/
public PaymentDTO getPaymentDTO(BigDecimal net , OrderChild orderChild){
//计算司机保证金
BigDecimal freightPrice = orderChild.getFreightPrice();
BigDecimal deposit = orderChild.getDeposit();
BigDecimal platformServiceFeeRate = orderChild.getPlatformServiceFeeRate();
BigDecimal platformServiceFee = orderChild.getPlatformServiceFee(); //平台服务费
//本次调整金额
BigDecimal changeDeposit = BigDecimal.ZERO;
//本次调整金额
BigDecimal platformServiceFeeNew = BigDecimal.ZERO;
/**
* 如果之前未冻结保证金,本次不调整
* 如果 平台服务费率 为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(net) && net.compareTo(BigDecimal.ZERO) != 0
)
{
platformServiceFeeNew = net.multiply(freightPrice).setScale(2, RoundingMode.HALF_UP).multiply(platformServiceFeeRate).setScale(2, RoundingMode.HALF_UP);
changeDeposit = platformServiceFeeNew.subtract(platformServiceFee);
}
return PaymentDTO.builder().changeDeposit(changeDeposit).platformServiceFeeNew(platformServiceFeeNew).build();
}
private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo();
BigDecimal loadNet = param.getLoadRough().subtract(param.getLoadTare());
......@@ -877,16 +986,38 @@ public class OrderChildServiceImpl implements OrderChildService {
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
// }
if (orderChild.getUnloadTime() == null &&
Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
//计算司机保证金
BigDecimal net = param.getUnloadRough().subtract(param.getUnloadTare());
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
updateUnloadFirst(param, orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.UNLOAD.getCode(),
OrderChildLogEnum.Type.UNLOAD.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(childNo,paymentDTO.getChangeDeposit());
}
} else {
//计算司机保证金
BigDecimal net = param.getUnloadRough().subtract(param.getUnloadTare());
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
updateReUnload(param, orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.REUNLOAD.getCode(),
......@@ -894,6 +1025,24 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(childNo,paymentDTO.getChangeDeposit());
}
}
}
/***
* 平衡司机冻结保证金
*/
public void paymentChangePlatformFee(String childNo,BigDecimal changeDeposite){
if(changeDeposite.compareTo(BigDecimal.ZERO) ==1){
PayPlatformFeeParam payPlatformFeeParam = new PayPlatformFeeParam();
payPlatformFeeParam.setTradeNo(childNo);
payPlatformFeeParam.setFigure(changeDeposite.intValue());
//冻结司机押金
paymentService.paymentChangePlatformFee(payPlatformFeeParam);
}
}
......@@ -1110,6 +1259,13 @@ public class OrderChildServiceImpl implements OrderChildService {
audit.setLoadRough(orderChild.getLoadRough());
audit.setLoadTare(orderChild.getLoadTare());
//计算司机保证金
BigDecimal net =param.getLoadRough().subtract(param.getLoadTare());
PaymentDTO paymentDTO = getPaymentDTO(net, orderChild);
if (Objects.nonNull(paymentDTO.getPlatformServiceFeeNew()) &&
paymentDTO.getPlatformServiceFeeNew().compareTo(BigDecimal.ZERO) != 0) {
orderChild.setPlatformServiceFee(paymentDTO.getPlatformServiceFeeNew());
}
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, childNo,dif,OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode());
......@@ -1128,6 +1284,12 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundLogService.saveDriverOrderChildLog(childNo, OrderChildPoundAuditEnum.Status.AUDIT.getCode(),
OrderChildPoundAuditEnum.Status.AUDIT.getMsg(), OrderChildLogEnum.CreateType.DRIVER.getCode(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
//判断是否平衡冻结金额
if(Objects.nonNull(paymentDTO.getChangeDeposit()) &&
paymentDTO.getChangeDeposit().compareTo(BigDecimal.ZERO) !=0){
paymentChangePlatformFee(childNo,paymentDTO.getChangeDeposit());
}
}
@Override
......@@ -1168,7 +1330,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChild.setConfirmTime(LocalDateTime.now());
orderChildDao.updateDriverConfirm(orderChild);
// 更新车辆状态
......@@ -1452,7 +1613,20 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
result.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
}
//获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderChild.getOrderNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.isNull(quotationDetailVO.getLiquidatedDamagesPlanId())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
//货源详情页面 是否显示弹窗和显示平台服务费率
/** 订单结算方式为“卸车净重(减货损)”且平台运费报价为“未税”时 显示平台服务费率和弹窗提示司机平台服务费率**/
if (Objects.equals(orderGoods.getSettlementWay(),
SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())
&& Objects.equals(quotationDetailVO.getPlatformFreightQuotationTaxType(),
InvoicingCompanyEnum.TaxType.TAX_EXCLUDED.getCode())) {
result.setGoodsOrderDetailShow(1);
}
//查询进行中的运单车辆是否开启了中交兴路
result.setNotOpenZJXLMsg(isOpenZJXL(orderChild.getStatus(),orderChild.getTruckNo()));
return result;
......@@ -1810,7 +1984,7 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 司机接单支付校验
*/
private void driverTakeOrderPaymentLimit(Integer driverWallCode, Integer truckWalletCode) {
private void driverTakeOrderPaymentLimit(Integer driverWallCode, Integer truckWalletCode,BigDecimal deposit) {
//判断是司机还是车主 接单校验 必须两个都有钱包
if (Objects.isNull(driverWallCode) || Objects.isNull(truckWalletCode)) {
throw new ServiceSystemException(PerformanceResultEnum.WALLET_CODE_IS_NULL);
......@@ -1822,10 +1996,25 @@ public class OrderChildServiceImpl implements OrderChildService {
if (result != null && Objects.equals(result.getCode(), 0) && result.getData() != null) {
WalletResidueCardDTO data = result.getData();
//钱包不能为负
if (Objects.isNull(data.getResidue()) || data.getResidue() < 0L) {
if(Objects.isNull(data.getResidue())){
String remark = truckOwnerFlag ? "钱包余额不足" : "车主钱包余额不足";
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_ERROR, remark);
}
//目前支付返回的是元 所以乘以100
data.setResidue(data.getResidue()*100);
if (data.getResidue() < 0L) {
String remark = truckOwnerFlag ? "钱包余额不足" : "车主钱包余额不足";
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_ERROR, remark);
}
//判断余额是否能够缴纳保证金
if (data.getResidue() < deposit.longValue()) {
String remark = truckOwnerFlag ? "账户可用余额不足,接单保证金冻结失败,请尽快充值,本次需重置"+deposit.movePointLeft(2) +"元" : "车主钱包余额不足,保证金冻结失败请联系车主充值";
if(truckOwnerFlag){
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_OWNER_RESIDUE_ERROR, remark);
}else{
throw new ServiceSystemException(PerformanceResultEnum.APP_POP_UP_DRIVER_RESIDUE_ERROR, remark);
}
}
//有效银行卡数量 不能为空
if (Objects.isNull(data.getCardCount()) || data.getCardCount() <= 0) {
......
......@@ -5,12 +5,14 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.InvoicingCompanyEnum;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
......@@ -21,6 +23,8 @@ import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.dto.OrderGoodsCancelDTO;
import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
......@@ -43,6 +47,7 @@ import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.feign.UserClxFeign;
import com.github.mustachejava.ObjectHandler;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
......@@ -115,6 +120,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
private OrderChildPostService orderChildPostService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private QuotationService quotationService;
private static Map<Integer, Consumer<OrderGoodsCancelDTO>> orderGoodsCancelMap = new HashMap<>();
......@@ -142,6 +149,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
//获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.isNull(quotationDetailVO.getLiquidatedDamagesPlanId())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
//货源详情页面 是否显示弹窗和显示平台服务费率
/** 订单结算方式为“卸车净重(减货损)”且平台运费报价为“未税”时 显示平台服务费率和弹窗提示司机平台服务费率**/
if (Objects.equals(orderGoodsVO.getSettlementWay(),
SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())
&& Objects.equals(quotationDetailVO.getPlatformFreightQuotationTaxType(),
InvoicingCompanyEnum.TaxType.TAX_EXCLUDED.getCode())) {
orderGoodsVO.setGoodsOrderDetailShow(1);
}
return orderGoodsVO;
}
......
......@@ -2,6 +2,7 @@ package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.ActionConstants;
import com.clx.performance.dao.ThirdPartRequestLogDao;
......@@ -13,6 +14,7 @@ import com.clx.performance.enums.*;
import com.clx.performance.enums.payment.PayOperationStatusEnum;
import com.clx.performance.enums.payment.PaymentActionEnum;
import com.clx.performance.enums.payment.PaymentStatusEnum;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.model.ThirdPartRequestLog;
import com.clx.performance.model.payment.OrderPayment;
import com.clx.performance.param.pc.payment.*;
......@@ -26,8 +28,10 @@ import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil;
import com.msl.common.utils.HttpUtil;
import com.msl.common.utils.LocalDateTimeUtils;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
......@@ -40,6 +44,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.clx.performance.enums.HttpEnum.PERFORMANCE_PAY_CLX_PAYMENT;
......@@ -255,14 +260,25 @@ public class PaymentServiceImpl implements PaymentService {
@Override
public Result paymentCompletePlatformFee(PayPlatformFeeParam param) {
//查询冻结记录
OrderPayment orderPaymentOptional =
orderPaymentDao.selectByOrderNoAndItemIdAndOperation(param.getTradeNo(),
PayUnitTypeEnum.FREEZE_PLATFORM_FEE.getCode() + "",
PayOperationStatusEnum.FREEZE.getValue()).orNull();
if (null == orderPaymentOptional){
List<OrderPayment> orderPaymentList = checkOrderPaymentExit(param);
//如果没有冻结记录
List<OrderPayment> orderPaymentFreezeList = orderPaymentList.stream()
.filter(i -> i.getOperation().equals(PayOperationStatusEnum.FREEZE.getValue()))
.filter(i -> i.getStatus().equals(PaymentStatusEnum.SUCCESS.getValue()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(orderPaymentFreezeList)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"数据不存在") ;
}
//冻结记录是否已经处理
List<OrderPayment> orderPaymentUnFreezeList = orderPaymentList.stream()
.filter(i -> i.getOperation().equals(PayOperationStatusEnum.UNFREEZE.getValue()))
.filter(i -> i.getStatus().equals(PaymentStatusEnum.SUCCESS.getValue()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(orderPaymentUnFreezeList)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"冻结记录已处理") ;
}
OrderPayment orderPaymentOptional = orderPaymentFreezeList.get(0);
/** 创建记录 新的调整记录 **/
OrderPayment orderPayment = new OrderPayment()
.setAmount(param.getFigure())
......@@ -291,16 +307,37 @@ public class PaymentServiceImpl implements PaymentService {
return notify;
}
public List<OrderPayment> checkOrderPaymentExit(PayPlatformFeeParam param){
//查询冻结记录
List<OrderPayment> orderPaymentList= orderPaymentDao.listByOrderNo(param.getTradeNo(),
PayUnitTypeEnum.FREEZE_PLATFORM_FEE.getCode() + "");
if (CollectionUtils.isEmpty(orderPaymentList)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"数据不存在") ;
}
return orderPaymentList;
}
@Override
public Result paymentCancelPlatformFee(PayPlatformFeeParam param) {
//查询冻结记录
OrderPayment orderPaymentOptional =
orderPaymentDao.selectByOrderNoAndItemIdAndOperation(param.getTradeNo(),
PayUnitTypeEnum.FREEZE_PLATFORM_FEE.getCode() + "",
PayOperationStatusEnum.FREEZE.getValue()).orNull();
if (null == orderPaymentOptional){
List<OrderPayment> orderPaymentList = checkOrderPaymentExit(param);
//如果没有冻结记录
List<OrderPayment> orderPaymentFreezeList = orderPaymentList.stream()
.filter(i -> i.getOperation().equals(PayOperationStatusEnum.FREEZE.getValue()))
.filter(i -> i.getStatus().equals(PaymentStatusEnum.SUCCESS.getValue()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(orderPaymentFreezeList)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"数据不存在") ;
}
//冻结记录是否已经处理
List<OrderPayment> orderPaymentUnFreezeList = orderPaymentList.stream()
.filter(i -> i.getOperation().equals(PayOperationStatusEnum.UNFREEZE.getValue()))
.filter(i -> i.getStatus().equals(PaymentStatusEnum.SUCCESS.getValue()))
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(orderPaymentUnFreezeList)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"冻结记录已处理") ;
}
OrderPayment orderPaymentOptional = orderPaymentFreezeList.get(0);
/** 创建记录 新的调整记录 **/
OrderPayment orderPayment = new OrderPayment()
.setAmount(param.getFigure())
......@@ -367,6 +404,8 @@ public class PaymentServiceImpl implements PaymentService {
}
/**
* post请求
*/
......@@ -441,7 +480,7 @@ public class PaymentServiceImpl implements PaymentService {
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);
/** 构建支付支付 ***/
PayUserDTO payUserDTO = PayUserDTO.builder()
.pwd(payDTO.getPwd())
.pwd("noCheckPwd") // 暂时不校验用户密码
.system(SystemCodeEnum.PERFORMANCE_SERVICE.getCode())
.userCode(payDTO.getFrom())
.orderNo(orderPayment.getRelationNo())
......@@ -537,4 +576,25 @@ public class PaymentServiceImpl implements PaymentService {
return freezeBatchDTO;
}
/***
* 获取用户的钱包
* @param userCode
* @return
*/
@Override
public WalletResidueDTO getWalletAndCard(Integer userCode) {
WalletParam walletParam = new WalletParam();
walletParam.setUserCode(userCode);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()
+ HttpEnum.PERFORMANCE_PAY_CLX_WALLET.getUrl(), JSON.toJSONString(walletParam));
log.info("获取司机钱包 {} 返回日志 {}",userCode, notify);
if (notify == null) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR);
}
if (notify.getCode() != 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
return JSON.parseObject(notify.getData().toString(), WalletResidueDTO.class);
}
}
package com.clx.performance.service.impl.ordergoods;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class OrderGoodsPostServiceImpl implements OrderGoodsPostService {
@Override
public void orderGoodsAdd(OrderGoods orderGoods) {
}
@Override
public void orderGoodsAdd(List<OrderGoods> orderGoodsList) {
}
}
package com.clx.performance.service.impl.settle;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService;
import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.struct.settle.SettlementDriverDetailStruct;
import com.msl.common.result.Result;
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;
import java.util.Objects;
/**
* @author kavin
......@@ -36,6 +46,9 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
private final SettlementDriverDetailService settlementDriverDetailService;
private final OrderChildDao orderChildDao;
private final PaymentService paymentService;
@Override
public void addOrderChildSyncTransportRecord(SettlementDriverDetail detail) {
OrderChildSyncTransportRecord record = struct.convertRecord(detail);
......@@ -44,6 +57,7 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
orderChildSyncTransportRecordDao.saveEntity(record);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateStatus(PayStatusNotifyDTO payStatusNotifyDTO) {
String childNo = payStatusNotifyDTO.getChildNo();
......@@ -54,5 +68,21 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
);
SettlementDriverDetail driverDetail = settlementDriverDetailService.selectOneByChildNo(childNo);
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()
.figure(orderChild.getPlatformServiceFee().intValue())
.tradeNo(childNo)
.build();
Result result = paymentService.paymentCompletePlatformFee(payPlatformFeeParam);
log.info("运单完成 第三方回调 {} ,{} " ,childNo,result);
}
}catch (Exception e){
log.error("支付平台服务费异常 {}",e);
}
}
}
......@@ -63,6 +63,19 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
// 结算金额
settlementDriverDetail.setSettlementFreight(settlementFreightCalc(settlementDriverDetail.getFreight(), settlementDriverDetail.getLossFreight()));
settlementDriverDetail.setInvoicingCompanyId(orderChild.getInvoicingCompanyId());
settlementDriverDetail.setInvoicingCompanyShorterName(orderChild.getInvoicingCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(orderChild.getInvoicingCompanyGroupCode());
// 平台服务费: 司机结算金额*平台服务费费率
settlementDriverDetail.setPlatformServiceFeeRate(orderChild.getPlatformServiceFeeRate()==null
? BigDecimal.ZERO
: orderChild.getPlatformServiceFeeRate());
settlementDriverDetail.setPlatformServiceFee(
settlementDriverDetail.getSettlementFreight()
.multiply(settlementDriverDetail.getPlatformServiceFeeRate()
.setScale(0, RoundingMode.HALF_UP)));
settlementDriverDetailDao.saveEntity(settlementDriverDetail);
return settlementDriverDetail.getId();
......
......@@ -6,10 +6,7 @@ import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dao.settle.*;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PayRemarkEnum;
......@@ -20,11 +17,9 @@ import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriver;
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.model.settle.*;
import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.impl.UniqueOrderNumService;
......@@ -94,6 +89,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private SettlementPlatformServiceFeeDao settlementPlatformServiceFeeDao;
@Autowired
private OrderChildLogService orderChildLogService;
......@@ -131,24 +129,46 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
if (Objects.equals(orderGoods.getSettlementAccountPeriod(),2)){ //月结
log.info("月结初始化货主结算单");
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodMonth(settlementOwnerDetail.getOrderNo(), settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodMonth(settlementOwnerDetail.getOrderNo(),
settlementOwnerDetail.getInvoicingCompanyId(),
settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 月结初始化
settlementNo = settlementPeriodMonthInit(settlementOwnerDetail, settlementPeriodTime,ownerInfo);
settlementNo = settlementPeriodMonthInit(settlementOwnerDetail, settlementPeriodTime,
SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode(), ownerInfo);
}
else { // 月结更新
settlementPeriodMonthUpdate(settlementOwner, settlementOwnerDetail);
settlementNo = settlementOwner.getSettlementNo();
}
}
else if (Objects.equals(orderGoods.getSettlementAccountPeriod(),
SettlementOwnerEnum.SettlementPeriodType.DAILY.getCode())){ //日结
log.info("日结初始化货主结算单");
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getDayStart();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodDaily(settlementOwnerDetail.getOrderNo(),
settlementOwnerDetail.getInvoicingCompanyId(),
settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 日结初始化
settlementNo = settlementPeriodMonthInit(settlementOwnerDetail, settlementPeriodTime,
SettlementOwnerEnum.SettlementPeriodType.DAILY.getCode(), ownerInfo);
}
else { // 日结更新
settlementPeriodMonthUpdate(settlementOwner, settlementOwnerDetail);
settlementNo = settlementOwner.getSettlementNo();
}
}
else {
log.info("拉运完成结初始化货主结算单");
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(), settlementOwnerDetail.getInvoiceType()).orNull();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(),
settlementOwnerDetail.getInvoicingCompanyId(),
settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 拉运完成初始化
settlementNo = settlementPeriodImmediateInit(settlementOwnerDetail,ownerInfo);
settlementNo = settlementPeriodMonthInit(settlementOwnerDetail, null,
SettlementOwnerEnum.SettlementPeriodType.IMMEDIATE.getCode(),ownerInfo);
}
else { // 拉运完成更新
settlementPeriodImmediateUpdate(settlementOwner, settlementOwnerDetail);
settlementPeriodMonthUpdate(settlementOwner, settlementOwnerDetail);
settlementNo = settlementOwner.getSettlementNo();
}
}
......@@ -178,8 +198,31 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Transactional(rollbackFor = Exception.class)
public void settlementDetailAdd(SettlementDetailAddMqParam mq) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getEntityByKey(mq.getSettlementOwnerDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getEntityByKey(mq.getSettlementDriverDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getEntityByKey(mq.getSettlementDriverDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderChild orderChild = orderChildDao.getByChildNo(settlementDriverDetail.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementPlatformServiceFee settlementPlatformServiceFee = new SettlementPlatformServiceFee();
settlementPlatformServiceFee.setChildNo(settlementDriverDetail.getChildNo());
settlementPlatformServiceFee.setDriverUserNo(settlementDriverDetail.getDriverUserNo());
settlementPlatformServiceFee.setDriverName(settlementDriverDetail.getDriverName());
settlementPlatformServiceFee.setDriverMobile(orderChild.getDriverMobile());
settlementPlatformServiceFee.setSendAddressId(orderChild.getSendAddressId());
settlementPlatformServiceFee.setSendAddress(orderChild.getSendAddress());
settlementPlatformServiceFee.setReceiveAddressId(orderChild.getReceiveAddressId());
settlementPlatformServiceFee.setReceiveAddress(orderChild.getReceiveAddress());
settlementPlatformServiceFee.setTruckNo(orderChild.getTruckNo());
settlementPlatformServiceFee.setSettlementFreight(settlementDriverDetail.getSettlementFreight());
settlementPlatformServiceFee.setInvoiceServiceFeeRate(settlementDriverDetail.getPlatformServiceFeeRate());
settlementPlatformServiceFee.setInvoiceServiceFee(settlementDriverDetail.getPlatformServiceFee());
// 平台服务费
orderChild.setPlatformServiceFee(settlementDriverDetail.getPlatformServiceFee());
orderChildDao.updatePlatformServiceFee(orderChild);
settlementPlatformServiceFeeDao.saveEntity(settlementPlatformServiceFee);
// 更新网络标识
settlementService.updateSettlementDetailInvoiceType(settlementOwnerDetail.getChildNo(), SettlementOwnerEnum.InvoiceType.ORDINARY.getCode());
}
......@@ -275,7 +318,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}
//支付司机运费
Result result = null;
String msg = null;
try{
......@@ -284,6 +327,20 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverNotify(detail.getChildNo(),0,e.getMessage());
msg = e.getMessage();
}
//支付平台服务费
try{
OrderChild orderChild = orderChildDao.getByChildNo(detail.getChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (Objects.nonNull(orderChild.getPlatformServiceFee()) &&
!Objects.equals(orderChild.getPlatformServiceFee().intValue(), 0)) {
PayPlatformFeeParam payPlatformFeeParam = PayPlatformFeeParam.builder()
.figure(orderChild.getPlatformServiceFee().intValue())
.tradeNo(detail.getChildNo())
.build();
result = paymentService.paymentCompletePlatformFee(payPlatformFeeParam);
}
}catch (Exception e){
log.error("支付平台服务费异常 {}",e);
}
if(Objects.nonNull(result)){
settlementDriverNotify(detail.getChildNo(),0,result.getMsg());
}
......@@ -299,10 +356,14 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
/**
* 月结初始化
*/
private String settlementPeriodMonthInit(SettlementOwnerDetail settlementOwnerDetail, LocalDateTime settlementPeriodTime,OwnerInfoFeignVO ownerInfo){
private String settlementPeriodMonthInit(SettlementOwnerDetail settlementOwnerDetail,
LocalDateTime settlementPeriodTime,
Integer settlementPeriodType,
OwnerInfoFeignVO ownerInfo){
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(settlementOwnerDetail.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(settlementOwnerDetail.getOrderNo())
.orElseThrow(PerformanceResultEnum.ORDER_INVALID);
//获取所有detail
......@@ -315,7 +376,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setOwnerName(settlementOwnerDetail.getOwnerName());
settlementOwner.setOrderNo(settlementOwnerDetail.getOrderNo());
settlementOwner.setSettlementPeriodType(SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode());
settlementOwner.setSettlementPeriodType(settlementPeriodType);
settlementOwner.setSettlementPeriodTime(settlementPeriodTime);
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
......@@ -344,10 +405,12 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setCompanyContactAddress(ownerInfo.getContactsAddress());
settlementOwner.setSettlementWay(settlementOwnerDetail.getSettlementWay());
//设置开票公司
settlementOwner.setInvoicingCompanyId(orderInfo.getInvoicingCompanyId());
settlementOwner.setInvoicingCompanyShorterName(orderInfo.getInvoicingCompanyShorterName());
settlementOwner.setInvoicingCompanyGroupCode(orderInfo.getInvoicingCompanyGroupCode());
settlementOwner.setInvoicingCompanyId(settlementOwnerDetail.getInvoicingCompanyId());
settlementOwner.setInvoicingCompanyShorterName(settlementOwnerDetail.getInvoicingCompanyShorterName());
settlementOwner.setInvoicingCompanyGroupCode(settlementOwnerDetail.getInvoicingCompanyGroupCode());
settlementOwner.setReportFlag(orderInfo.getReportFlag());
// 开票服务费
settlementOwner.setInvoiceServiceFee(settlementOwnerDetail.getInvoiceServiceFee());
settlementOwnerDao.saveEntity(settlementOwner);
//保存结算单日志----创建结算单
......@@ -371,6 +434,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setLoanFreight(settlementOwnerDetail.getLoanFreight());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setInvoiceServiceFee(settlementOwnerDetail.getInvoiceServiceFee());
List<SettlementOwnerDetail> details = settlementOwnerDetailDao.getBySettlementNo(settlementOwner.getSettlementNo());
......@@ -383,103 +447,17 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setPrepayFreight(settlementOwner.getPrepayFreight().add(item.getPrepayFreight()));
settlementOwner.setSettlementFreight(settlementOwner.getSettlementFreight().add(item.getSettlementFreight()));
settlementOwner.setInvoiceFreight(settlementOwner.getInvoiceFreight().add(item.getInvoiceFreight()));
settlementOwner.setInvoiceServiceFee(settlementOwner.getInvoiceServiceFee().add(item.getInvoiceServiceFee()));
});
settlementOwnerDao.updateSettlementPeriodMonth(settlementOwner);
}
/**
* 拉运完成结 初始化
*/
private String settlementPeriodImmediateInit(SettlementOwnerDetail settlementOwnerDetail,OwnerInfoFeignVO ownerInfo){
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(settlementOwnerDetail.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
SettlementOwner settlementOwner = new SettlementOwner();
String settlementNo = settlementNoGenerate();
settlementOwner.setSettlementNo(settlementNo);
settlementOwner.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
settlementOwner.setOwnerName(settlementOwnerDetail.getOwnerName());
settlementOwner.setOrderNo(settlementOwnerDetail.getOrderNo());
settlementOwner.setSettlementPeriodType(SettlementOwnerEnum.SettlementPeriodType.IMMEDIATE.getCode());
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossWeight(settlementOwnerDetail.getLossWeight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setLoanFreight(settlementOwnerDetail.getLoanFreight());
settlementOwner.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwner.setStatus(SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode());
settlementOwner.setCompanyName(ownerInfo.getCompanyName());
settlementOwner.setCompanyTaxCode(ownerInfo.getCompanyTaxCode());
settlementOwner.setCompanyAddress(ownerInfo.getCompanyAddress());
settlementOwner.setCompanyMobile(ownerInfo.getCompanyTelephone());
settlementOwner.setCompanyBankNo(ownerInfo.getCompanyBankAccount());
settlementOwner.setCompanyBankName(ownerInfo.getCompanyOpenBank());
settlementOwner.setCompanyContact(ownerInfo.getContactsName());
settlementOwner.setCompanyContactMobile(ownerInfo.getContactsTelephone());
settlementOwner.setCompanyContactAddress(ownerInfo.getContactsAddress());
settlementOwner.setSettlementWay(settlementOwnerDetail.getSettlementWay());
settlementOwner.setInvoiceStatus(SettlementOwnerEnum.InvoiceStatus.NOT_INVOICE.getCode());
//设置开票公司
settlementOwner.setInvoicingCompanyId(orderInfo.getInvoicingCompanyId());
settlementOwner.setInvoicingCompanyShorterName(orderInfo.getInvoicingCompanyShorterName());
settlementOwner.setInvoicingCompanyGroupCode(orderInfo.getInvoicingCompanyGroupCode());
settlementOwner.setReportFlag(orderInfo.getReportFlag());
settlementOwnerDao.saveEntity(settlementOwner);
//保存结算单日志----创建结算单
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),SettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),0L,"系统");
return settlementNo;
}
/**
* 拉运完成结 更新
*/
private void settlementPeriodImmediateUpdate(SettlementOwner settlementOwner,SettlementOwnerDetail settlementOwnerDetail){
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossWeight(settlementOwnerDetail.getLossWeight());
settlementOwner.setLoanFreight(settlementOwnerDetail.getLoanFreight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
List<SettlementOwnerDetail> details = settlementOwnerDetailDao.getBySettlementNo(settlementOwner.getSettlementNo());
details.forEach(item->{
settlementOwner.setWeight(settlementOwner.getWeight().add(item.getWeight()));
settlementOwner.setFreight(settlementOwner.getFreight().add(item.getFreight()));
settlementOwner.setLossWeight(settlementOwner.getLossWeight().add(item.getLossWeight()));
settlementOwner.setLossFreight(settlementOwner.getLossFreight().add(item.getLossFreight()));
settlementOwner.setPrepayFreight(settlementOwner.getPrepayFreight().add(item.getPrepayFreight()));
settlementOwner.setLoanFreight(settlementOwner.getLoanFreight().add(item.getLoanFreight()));
settlementOwner.setSettlementFreight(settlementOwner.getSettlementFreight().add(item.getSettlementFreight()));
settlementOwner.setInvoiceFreight(settlementOwner.getInvoiceFreight().add(item.getInvoiceFreight()));
});
settlementOwnerDao.updateSettlementPeriodMonth(settlementOwner);
}
/**
* 创建结算单号
*/
@Override
public String settlementNoGenerate(){
return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY));
}
......
......@@ -102,6 +102,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setInvoicingCompanyShorterName(orderChild.getInvoicingCompanyShorterName());
settlementOwnerDetail.setInvoicingCompanyGroupCode(orderChild.getInvoicingCompanyGroupCode());
settlementOwnerDetail.setReportFlag(orderChild.getReportFlag());
settlementOwnerDetailDao.saveEntity(settlementOwnerDetail);
return settlementOwnerDetail.getId();
}
......
......@@ -2,9 +2,12 @@ package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.config.SettlementConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OwnerAccountDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
......@@ -17,7 +20,9 @@ import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.event.OwnerLoanThawEvent;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerAccount;
import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
......@@ -34,6 +39,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;
@Slf4j
......@@ -43,6 +49,8 @@ public class SettlementServiceImpl implements SettlementService {
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
......@@ -59,21 +67,29 @@ public class SettlementServiceImpl implements SettlementService {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Autowired
private InvoicingCompanyService invoicingCompanyService;
@Autowired
private SettlementConfig settlementConfig;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateSettlementDetailInvoiceType(String childNo, Integer invoiceType) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) <= 0) {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
} else {
// 发mq (同步网络货运)
Message message = MessageBuilder.withBody(JSONUtil.parse(orderChild).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_EXCHANGE, RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_ROUTE_KEY, message
......@@ -81,20 +97,40 @@ public class SettlementServiceImpl implements SettlementService {
return;
}
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(invoiceType)) {
if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
// 如果开票标识为“普通单”时,开票费率从开票公司“五寨华祥”中获取
settlementOwnerDetail.setInvoiceServiceFeeRate(BigDecimal.ZERO);
InvoicingCompanyVO invoiceCompany = invoicingCompanyService.getInvoicingCompanyByGroupCode(
settlementConfig.getInvoiceCompanyDefault().getCompanyGroupCode());
//设置开票公司信息
settlementOwnerDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementOwnerDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementOwnerDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
settlementDriverDetail.setInvoicingCompanyId(invoiceCompany.getId());
settlementDriverDetail.setInvoicingCompanyShorterName(invoiceCompany.getCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(invoiceCompany.getCompanyGroupCode());
} else {
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
// 如果开票标识为“网运单”时,开票费率取货单单所记录的开票费率
settlementOwnerDetail.setInvoiceServiceFeeRate(
orderGoods.getInvoiceServiceFeeRate()==null? BigDecimal.ZERO : orderGoods.getInvoiceServiceFeeRate());
}
settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType);
// 开票服务费
settlementOwnerDetail.setInvoiceServiceFee(invoiceServiceFeeCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
// 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
......@@ -185,15 +221,37 @@ public class SettlementServiceImpl implements SettlementService {
}
}
/**
* 开票服务费金额
*/
private 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);
}
/**
* 开票金额
*/
private BigDecimal invoiceFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
private 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 { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
}
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());
}
}
......@@ -205,7 +263,14 @@ public class SettlementServiceImpl implements SettlementService {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
}
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());
}
}
......
package com.clx.performance.service.ordergoods;
import com.clx.performance.model.OrderGoods;
import java.util.List;
public interface OrderGoodsPostService {
void orderGoodsAdd(OrderGoods orderGoods);
void orderGoodsAdd(List<OrderGoods> orderGoodsList);
}
......@@ -151,7 +151,8 @@ public class OrderGoodsSqlProvider {
"need_truck_num,vehicle_usage,pending_order_way,pending_order_time,pending_order_freight,last_arrive_send_time,senior_logistics_manager_id," +
"senior_logistics_manager_name,order_no,order_goods_no,order_goods_status,send_address_id,send_address_shorter,send_system_address_id,send_longitude," +
"send_latitude,receive_latitude,receive_longitude,receive_address_id,receive_address_shorter,receive_system_address_id,goods_name,goods_id,create_time,modified_time," +
"user_name,user_no,batch_number,last_arrive_receive_time,last_load_time,last_order_time,settlement_account_period,settlement_way) VALUES ");
"user_name,user_no,batch_number,last_arrive_receive_time,last_load_time,last_order_time,settlement_account_period,settlement_way," +
"platform_freight_quotation_tax_type, platform_service_fee_rate, deposit, invoice_service_fee_rate) VALUES ");
for (int i = 0; i < orderGoodsList.size(); i++) {
OrderGoods o = orderGoodsList.get(i);
......@@ -166,7 +167,8 @@ public class OrderGoodsSqlProvider {
.append(o.getReceiveAddressId()).append("','").append(o.getReceiveAddressShorter()).append("',").append(o.getReceiveSystemAddressId()).append(",'").append(o.getGoodsName()).append("','")
.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(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("')");
if (i < orderGoodsList.size() - 1) {
......
......@@ -17,6 +17,7 @@ import com.clx.performance.enums.PendingOrderWayStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
......@@ -66,6 +67,8 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final OrderGoodsPostService orderGoodsPostService;
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
......@@ -173,6 +176,13 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
orderGoods.setSettlementAccountPeriod(orderInfo.getSettlementAccountPeriod());
//设置结算方式
orderGoods.setSettlementWay(orderInfo.getSettlementWay());
// 平台服务费
orderGoods.setPlatformFreightQuotationTaxType(orderInfoFeign.getPlatformFreightQuotationTaxType());
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
List<OrderOwnTruckVo> orderOwnTruckVos = orderFeign.selectTruckListFeign(orderNo);
if (orderOwnTruckVos == null || orderOwnTruckVos.isEmpty()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "全部自由车辆列表数据为空");
......@@ -197,6 +207,9 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
}
orderGoodsDao.saveBatchEntity(orderGoodsList);
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
......
......@@ -13,6 +13,7 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
......@@ -60,6 +61,7 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final OrderGoodsPostService orderGoodsPostService;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -177,6 +179,13 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
orderGoods.setSettlementAccountPeriod(orderInfo.getSettlementAccountPeriod());
//设置结算方式
orderGoods.setSettlementWay(orderInfo.getSettlementWay());
// 平台服务费
orderGoods.setPlatformFreightQuotationTaxType(orderInfoFeign.getPlatformFreightQuotationTaxType());
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
......@@ -189,6 +198,10 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
orderGoodsList.add(orderGoods);
}
orderGoodsDao.saveBatchEntity(orderGoodsList);
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (platSum.compareTo(BigDecimal.ZERO) != 0 && ownSum.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal residuePlatSum = new BigDecimal(orderInfo.getPlatformResidueCarryWeight());
......
......@@ -13,6 +13,7 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
......@@ -62,6 +63,7 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final OrderGoodsPostService orderGoodsPostService;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -172,6 +174,12 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
//设置结算方式
orderGoods.setSettlementWay(orderInfo.getSettlementWay());
// 平台服务费
orderGoods.setPlatformFreightQuotationTaxType(orderInfoFeign.getPlatformFreightQuotationTaxType());
orderGoods.setInvoiceServiceFeeRate(orderInfoFeign.getPlatformFreightQuotationTaxRate());
orderGoods.setPlatformServiceFeeRate(orderInfoFeign.getPlatformServiceFeeRate());
orderGoods.setDeposit(orderInfoFeign.getDeposit());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
......@@ -183,6 +191,10 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
orderGoodsList.add(orderGoods);
}
orderGoodsDao.saveBatchEntity(orderGoodsList);
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论