提交 df667e06 authored 作者: jiangwujie's avatar jiangwujie

Merge branch 'v20.9_settlement_20240805' of…

Merge branch 'v20.9_settlement_20240805' of https://t.clxkj.cn/clx-java/clx-performance into v20.9_settlement_20240805
......@@ -169,6 +169,15 @@ public enum PerformanceResultEnum implements ResultEnum {
UNLOAD_TIME_BEFORE_ARRIVE_RECEIVE_TIME(2106, "交货时间不可早于到达目的地时间"),
UNLOAD_TIME_AFTER_NOW(2107, "交货时间不可晚于当前时间"),
UNLOAD_TIME_AFTER_FIRST_UNLOAD_TIME(2108, "交货时间不可晚于首次提交时间"),
SETTLEMENT_NO_NULL_ERROR(2109, "请选择需要下载的数据"),
ORDER_CHILD_RISK_PROCESS_ERROR(2111, "风控已处理"),
SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR(2112, "所选数据存在状态”已处理“的数据,请核实后重新提交"),
SETTLEMENT_OWNER_CONFIRM_SETTLEMENT_ERROR(2113, "运单需重新分配开票公司,请联系结算人员处理"),
;
private final int code;
private final String msg;
......
......@@ -23,7 +23,8 @@ public enum SettlementLogEnum {
OWNER_CONFIRMED_PLATFORM_PAYMENT(7, "货主确认付款"),
INVOICE_TO_BE_MAILED(8, "邮寄发票"),
COMPLETED(9, "已完结"),
PLATFORM_CONFIRM_ACCOUNT (10, "平台确认对账"),
PLATFORM_TO_BE_CONFIRMED(11, "平台确认结算单"),
;
private final Integer code;
......
......@@ -32,7 +32,7 @@ public enum SettlementOrderChildRiskEnum {
@AllArgsConstructor
public enum ProcessMethod {
SYNC_RETRY(1, "重新同步"),
CONVERT_NORMAL(2, "转普通单"),
CONVERT_ORDINARY(2, "转普通单"),
;
private final Integer code;
......
......@@ -11,6 +11,26 @@ import java.util.Optional;
public enum SettlementOwnerDetailEnum {
;
@Getter
@AllArgsConstructor
public enum InvoiceTypeStatus {
INIT(0, "初始化"),
PROCESSING(1, "获取中"),
SUCCESS(2,"获取成功"),
FAIL(3,"获取失败"),
;
private final Integer code;
private final String msg;
public static Optional<InvoiceTypeStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(InvoiceTypeStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum InvoiceStatus {
......@@ -30,7 +50,6 @@ public enum SettlementOwnerDetailEnum {
}
}
@Getter
@AllArgsConstructor
public enum FinalPaymentStatus {
......
......@@ -54,12 +54,16 @@ public enum SettlementOwnerEnum {
public enum Status {
TO_BE_LOCKED(10, "待锁定"),
TO_BE_ACCOUNT(20, "待对账"),
PLATFORM_TO_BE_CONFIRMED(21, "待平台确认"),
OWNER_TO_BE_CONFIRMED(30, "待货主确认"),
SHIPPER_TO_PAYMENT (40, "待货主付款"),
PLATFORM_CONFIRMED_OWNER_PAYMENT(50, "待平台确认付款"),
PLATFORM_TO_PAYMENT(60, "待平台付款"),
OWNER_CONFIRMED_PLATFORM_PAYMENT(70, "待货主确认付款"),
@Deprecated
INVOICE_TO_BE_MAILED(80, "待邮寄发票"),
COMPLETED(90, "已完结"),
;
......
......@@ -53,6 +53,7 @@ public class PageCarrierOrderChildParam extends PageParam {
@ApiModelProperty(value = "运单状态集合")
private List<Integer> statusList;
@ApiModelProperty(value = "时间筛选类型,1:接单时间,2:磅单审核通过时间,3:完成时间")
private Integer timeType;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerConfirmAccountParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="列表id",example = "10")
private Integer id;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerConfirmSettlementParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="列表id",example = "10")
private Integer id;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerDetailCompanyUpdateParam {
@NotNull(message = "id列表不能为空")
@ApiModelProperty(value="id列表")
private List<Integer> idList;
@NotNull(message = "开票公司id不能为空")
@ApiModelProperty(value="开票公司id")
private Integer companyId;
@NotBlank(message = "开票公司简称不能为空")
@ApiModelProperty(value="开票公司简称")
private String companyShorterName;
@NotBlank(message = "开票公司统一社会信用代码不能为空")
@ApiModelProperty(value="开票公司统一社会信用代码")
private String companyGroupCode;
}
package com.clx.performance.param.pc.owner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class ConfirmBatchInvoiceParam {
@NotEmpty(message = "运单号不能为空")
@ApiModelProperty(value = "运单号")
private List<String> childNoList;
}
package com.clx.performance.param.pc.owner;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class PageInvoiceOwnerSettlementOwnerDetailParam extends PageParam {
@NotNull(message = "是否已开票不能为空")
@ApiModelProperty(value = "是否已开票,0:否,1:是")
private Integer invoiceStatus;
@ApiModelProperty(value = "货主用户编号")
private Long ownerUserNo;
@ApiModelProperty(value = "货主名称")
private String ownerName;
@ApiModelProperty(value = "结算单编号")
private String settlementNo;
@ApiModelProperty(value="运单编号")
private String childNo;
@ApiModelProperty(value="开票公司")
private String invoicingCompanyShorterName;
@ApiModelProperty(value="开票标识:1网运单 2普通单")
private Integer invoiceType;
@ApiModelProperty(value = "开始时间")
private String beginTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.clx.performance.param.pc.owner.settle;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class OwnerSettlementOrderChildRiskProcessUpdateParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="id",example = "10")
private Integer id;
@NotNull(message = "处理方式不能为空")
@ApiModelProperty(value = "处理方式:1重新同步 2转普通单")
private Integer processMethod;
}
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import java.util.Arrays;
import java.util.Optional;
/**
* @Author: aiqingguo
......@@ -18,6 +18,24 @@ import lombok.ToString;
public class SettlementStatisticsMqParam {
private String childNo; //运单编号
private Integer InvoiceType; //司机计费明细id
private Integer type; //类型: 1统计 2拆单
@Getter
@AllArgsConstructor
public enum Type {
STATISTICS(1, "统计"),
SEPARATE(2, "拆单"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Type::getMsg).orElse(null);
}
}
}
package com.clx.performance.vo.mq.broker;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BrokerOrderChildSyncMqParam {
private String childNo; //运单编号
private Integer invoiceType; //开票标识:1网运单 2普通单
}
package com.clx.performance.vo.mq.broker;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BrokerOrderChildUpdateMqParam {
private String childNo; //运单编号
private Integer invoiceType; //开票标识:1网运单 2普通单
}
package com.clx.performance.vo.mq.settle;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementOrderChildRiskProcessMqParam {
private Integer id; //id
}
package com.clx.performance.vo.mq.settle;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementOwnerDetialInvoiceCompanyUpdateMqParam {
private Integer id; //id
}
package com.clx.performance.vo.mq.settle;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementPlatformAutoConfirmMqParam {
private String settlementNo;
}
......@@ -61,6 +61,9 @@ public class PageCarrierOrderChildVO {
@ApiModelProperty(value="完成时间",example = "2020-01-01 10:10:10")
private String finishTime;
@ApiModelProperty(value="磅单审核通过时间",example = "2020-01-01 10:10:10")
private String poundAuditTime;
@ApiModelProperty(value="发货地址",example = "吉林")
private String sendAddress;
......
......@@ -52,6 +52,8 @@ public class OpenOrderChildDTO {
private String unloadTime;
@ApiModelProperty(value = "运单完成时间", example = "2020-02-02 10:10:10", required = true, dataType = "String")
private String payFinishedTime;
@ApiModelProperty(value = "磅单审核时间", example = "2020-02-02 10:10:10", required = true, dataType = "String")
private String poundTime;
@ApiModelProperty(value = "收货皮重(吨)")
private BigDecimal receiveTare;
......@@ -63,4 +65,12 @@ public class OpenOrderChildDTO {
@ApiModelProperty(value = "备注", example = "", required = true, dataType = "String")
private String remark;
@ApiModelProperty(value = "1 普通单 2 网运单", example = "1", required = true, dataType = "Integer")
private Integer invoiceFlag;
@ApiModelProperty(value = "线下平台", example = "华祥", required = true, dataType = "String")
private String invoicePlatform;
@ApiModelProperty(value = "开票状态 0 未开票 1 已开票 ", example = "1")
private Integer invoiceStatus;
}
......@@ -27,7 +27,7 @@ public class TransportVO {
@ApiModelProperty(value = "同步失败原因", example = "1", dataType = "String")
private String syncMsg;
@ApiModelProperty(value = "结算状态 0 未结算 1 已结算 2结算中 ", example = "1234124", dataType = "String")
@ApiModelProperty(value = "结算状态 0 未结算 1 已结算 2结算中 3结算失败 ", example = "1234124", dataType = "String")
private Integer settleStatus;
@ApiModelProperty(value = "结算方", example = "1", dataType = "String")
private Integer settleOrg;
......
......@@ -83,6 +83,10 @@ public class CarrierPageSettlementOwnerDetailVO {
private Integer invoicingCompanyId;
@ApiModelProperty("开票公司简称")
private String invoicingCompanyShorterName;
@ApiModelProperty("拆单备注")
private String separateRemark;
@ApiModelProperty(value = "创建时间")
private String createTime;
......
......@@ -45,6 +45,10 @@ public class CarrierSettlementOwnerDetailVO {
@ApiModelProperty(value = "实际净重(吨)", example = "1.23")
private BigDecimal weight;
@ApiModelProperty(value = "装货净重(单位吨)", example = "1.23")
private BigDecimal loadNet;
@ApiModelProperty(value = "卸货净重(单位吨)", example = "1.23")
private BigDecimal unloadNet;
@ApiModelProperty(value = "实际运费(元)", example = "1.23")
@MoneyOutConvert
......
package com.clx.performance.vo.pc.owner.settle;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class CountOwnerSettlementOwnerDetailVO {
@ApiModelProperty(value="运单数")
private Long orderChildSum;
@ApiModelProperty(value = "装车净重")
private BigDecimal loadNetSum;
@MoneyOutConvert
@ApiModelProperty(value="开票金额")
private BigDecimal invoiceFreightSum;
}
\ No newline at end of file
package com.clx.performance.vo.pc.owner.settle;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
......@@ -23,6 +25,11 @@ public class OwnerPageSettlementOwnerVO {
private String settlementNo;
@ApiModelProperty(value = "开票标识:1网运单 2普通单")
private Integer invoiceType;
private String invoiceTypeMsg;
public String getInvoiceTypeMsg() {
return SettlementOwnerEnum.InvoiceType.getMsgByCode(invoiceType);
}
@ApiModelProperty(value = "货主编码")
private Long ownerUserNo;
@ApiModelProperty(value = "货主姓名")
......@@ -58,8 +65,18 @@ public class OwnerPageSettlementOwnerVO {
private String createTime;
@ApiModelProperty(value = "状态 10:待锁定 20:待对账 30:待货主确认 40:待货主付款 50:待平台确认付款 60:待平台付款 70:待货主确认付款 80:待邮寄发票 90:已完结")
private Integer status;
private String statusMsg;
public String getStatusMsg() {
return SettlementOwnerEnum.Status.getMsgByCode(status);
}
@ApiModelProperty(value = "结算方式 1装车净重 2卸车净重")
private Integer settlementWay;
private String settlementWayMsg;
public String getSettlementWayMsg() {
return SettlementWayEnum.WayType.getMsgByCode(settlementWay);
}
@ApiModelProperty(value="开票公司id",example = "1")
private Integer invoicingCompanyId; //开票公司id
......@@ -70,4 +87,9 @@ public class OwnerPageSettlementOwnerVO {
@ApiModelProperty(value="是否上报 0-否;1-是",example = "1")
private Integer reportFlag; //是否上报 0-否;1-是
@ApiModelProperty(value="装货净重(单位吨)",example = "1.23")
private BigDecimal loadNet;
@ApiModelProperty(value="卸货净重(单位吨)",example = "1.23")
private BigDecimal unloadNet;
}
......@@ -95,6 +95,9 @@ public class PageOwnerSettlementOwnerDetailVO {
@ApiModelProperty(value="开票金额",example = "2.1")
private BigDecimal invoiceFreight;
@ApiModelProperty(value = "开票标识:1网运单 2普通单",example = "2")
private Integer invoiceType;
@ApiModelProperty(value="开票标识:1网运单 2普通单",example = "普通单")
private String invoiceTypeMsg;
......@@ -113,6 +116,8 @@ public class PageOwnerSettlementOwnerDetailVO {
@ApiModelProperty(value="结算方式 1装车净重 2卸车净重 3卸车净重(减货损)",example = "1")
private Integer settlementWay;
@ApiModelProperty(value="结算方式")
private String settlementWayMsg;
@ApiModelProperty(value="开票公司id",example = "1")
private Integer invoicingCompanyId; //开票公司id
......@@ -123,9 +128,18 @@ public class PageOwnerSettlementOwnerDetailVO {
@ApiModelProperty(value="是否上报 0-否;1-是",example = "1")
private Integer reportFlag; //是否上报 0-否;1-是
@ApiModelProperty(value = "开票时间")
private String invoiceTime;
@ApiModelProperty(value = "拆单备注")
private String separateRemark;
@ApiModelProperty(value="创建时间",example = "2013-01-01 00:00:00")
private String createTime;
@ApiModelProperty(value="备注")
private String remark;
@ApiModelProperty(value="磅单审核通过时间")
private String poundAuditTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc.owner.settle;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class UploadBatchInvoiceFileResultVO {
@ApiModelProperty(value="校验结果,true:数据无误,false:数据有误")
private Boolean verifyResult;
@ApiModelProperty(value="错误文件地址")
private String errorFileUrl;
@ApiModelProperty(value="运单数")
private Integer orderChildSum;
@ApiModelProperty("装车吨数")
private BigDecimal loadWeightSum;
@ApiModelProperty(value="开票金额")
private BigDecimal invoiceFreightSum;
@ApiModelProperty(value="运单号")
private List<String> childNoList;
}
\ No newline at end of file
......@@ -237,11 +237,11 @@ public class OrderChildLoanComponent {
log.info("1.1百分百预付不需要考虑借款账户");
return;
}
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
log.info("2.当前不是网运单,不需要处理借款标识,是否接单冻结的借款金额");
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
return;
}
// if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
// log.info("2.当前不是网运单,不需要处理借款标识,是否接单冻结的借款金额");
// applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
// return;
// }
if (settlementOwnerDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) != 0) {
log.info("3.当前是网运单,但预付运费不为0,说明已经处理");
......
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyBrokerConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: aiqingguo
* @Description: 无车承运 MQ
* @Date: 2023-10-12 16:27:30
* @Version: 1.0
*/
@Configuration
public class RabbitBrokerConfig {
@Bean
public DirectExchange brokerDefaultExchange() {
return new DirectExchange(RabbitKeyBrokerConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue brokerDefaultDelayQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-message-ttl", 15 * 60 * 1000);
params.put("x-max-length", 5000000);
params.put("x-dead-letter-exchange", RabbitKeyBrokerConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyBrokerConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyBrokerConstants.DEFAULT_DELAY_QUEUE, true, false, false, params);
}
@Bean
public Binding brokerDefaultDelayQueueBinding() {
return BindingBuilder.bind(brokerDefaultDelayQueue()).to(brokerDefaultExchange())
.with(RabbitKeyBrokerConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue brokerDefaultDeadQueue() {
return new Queue(RabbitKeyBrokerConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding brokerDefaultDeadQueueBinding() {
return BindingBuilder.bind(brokerDefaultDeadQueue()).to(brokerDefaultExchange())
.with(RabbitKeyBrokerConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 运单同步
*/
@Bean
public Queue brokerOrderChildSyncQueue() {
return new Queue(RabbitKeyBrokerConstants.ORDER_CHILD_SYNC_QUEUE);
}
@Bean
public Binding brokerOrderChildSyncQueueBinding() {
return BindingBuilder.bind(brokerOrderChildSyncQueue()).to(brokerDefaultExchange())
.with(RabbitKeyBrokerConstants.ORDER_CHILD_SYNC_ROUTING_KEY);
}
/**
* 运单更新
*/
@Bean
public Queue brokerOrderChildUpdateQueue() {
return new Queue(RabbitKeyBrokerConstants.ORDER_CHILD_UPDATE_QUEUE);
}
@Bean
public Binding brokerOrderChildUpdateQueueBinding() {
return BindingBuilder.bind(brokerOrderChildUpdateQueue()).to(brokerDefaultExchange())
.with(RabbitKeyBrokerConstants.ORDER_CHILD_UPDATE_ROUTING_KEY);
}
}
......@@ -123,5 +123,43 @@ public class RabbitSettlementConfig {
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_ROUTING_KEY);
}
/**
* 风控处理
*/
@Bean
public Queue settlementRiskProcessQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_QUEUE);
}
@Bean
public Binding settlementRiskProcessQueueBinding() {
return BindingBuilder.bind(settlementRiskProcessQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_ROUTING_KEY);
}
/**
* 开票公司新增
*/
@Bean
public Queue settlementInvoiceCompanyUpdateQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_COMPANY_UPDATE_QUEUE);
}
@Bean
public Binding settlementInvoiceCompanyUpdateQueueBinding() {
return BindingBuilder.bind(settlementInvoiceCompanyUpdateQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_COMPANY_UPDATE_ROUTING_KEY);
}
/**
* 平台自动确认
*/
@Bean
public Queue settlementPlatformAutoConfirmUpdateQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE);
}
@Bean
public Binding settlementPlatformAutoConfirmUpdateQueueBinding() {
return BindingBuilder.bind(settlementPlatformAutoConfirmUpdateQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY);
}
}
package com.clx.performance.constant;
/**
* @Author: aiqingguo
* @Description: 无车承运-mq
* @Date: 2023-10-19 15:13:06
* @Version: 1.0
*/
public class RabbitKeyBrokerConstants {
private static final String PREFIX = "clx-performance.broker.";
private static final String EXCHANGE = ".exchange";
private static final String QUEUE = ".queue";
private static final String QUEUE_ROUTING_KEY = ".routing.key";
private static final String DELAY_QUEUE = ".delay.queue";
private static final String DELAY_ROUTING_KEY = ".delay.routing.key";
private static final String DEAD_QUEUE = ".dead.queue";
private static final String DEAD_ROUTING_KEY = ".dead.routing.key";
private RabbitKeyBrokerConstants() {
}
/**
* 缺省交换机
*/
public static final String DEFAULT_EXCHANGE = PREFIX +"default"+EXCHANGE;
/**
* 缺省延迟队列
*/
public static final String DEFAULT_DELAY_QUEUE = PREFIX +"default"+DELAY_QUEUE;
public static final String DEFAULT_DELAY_ROUTING_KEY = PREFIX +"default"+DELAY_ROUTING_KEY;
public static final String DEFAULT_DEAD_QUEUE = PREFIX +"default"+DEAD_QUEUE;
public static final String DEFAULT_DEAD_ROUTING_KEY = PREFIX +"default"+DEAD_ROUTING_KEY;
/**
* 运单同步
*/
public static final String ORDER_CHILD_SYNC_QUEUE = PREFIX +"orderChild.sync"+QUEUE;
public static final String ORDER_CHILD_SYNC_ROUTING_KEY = PREFIX +"orderChild.sync"+QUEUE_ROUTING_KEY;
/**
* 运单更新
*/
public static final String ORDER_CHILD_UPDATE_QUEUE = PREFIX +"orderChild.update"+QUEUE;
public static final String ORDER_CHILD_UPDATE_ROUTING_KEY = PREFIX +"orderChild.update"+QUEUE_ROUTING_KEY;
}
......@@ -68,4 +68,22 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_PAY_STATUS_SYNC_QUEUE = PREFIX +"settlementPayStatus.sync"+QUEUE;
public static final String SETTLEMENT_PAY_STATUS_SYNC_ROUTING_KEY = PREFIX +"settlementPayStatus.sync"+QUEUE_ROUTING_KEY;
/**
* 风控处理
*/
public static final String SETTLEMENT_RISK_PROCESS_QUEUE = PREFIX +"settlementRisk.process"+QUEUE;
public static final String SETTLEMENT_RISK_PROCESS_ROUTING_KEY = PREFIX +"settlementRisk.process"+QUEUE_ROUTING_KEY;
/**
* 开票公司新增
*/
public static final String SETTLEMENT_INVOICE_COMPANY_UPDATE_QUEUE = PREFIX +"settlementInvoiceCompany.update"+QUEUE;
public static final String SETTLEMENT_INVOICE_COMPANY_UPDATE_ROUTING_KEY = PREFIX +"settlementInvoiceCompany.update"+QUEUE_ROUTING_KEY;
/**
* 平台自动确认
*/
public static final String SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE = PREFIX +"settlementPlatformAutoConfirm.update"+QUEUE;
public static final String SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY = PREFIX +"settlementPlatformAutoConfirm.update"+QUEUE_ROUTING_KEY;
}
package com.clx.performance.controller.pc.carrier;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerConfirmAccountParam;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerConfirmSettlementParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.vo.pc.carrier.settle.*;
......@@ -132,4 +133,21 @@ public class CarrierSettlementOwnerController {
settlementOwnerService.mergeOwnerSettlement(param);
return Result.ok();
}
@ApiOperation(value = "确认对账",notes = "<br>By:艾庆国")
@PostMapping("/updateConfirmAccount")
public Result updateConfirmAccount(@RequestBody @Validated CarrierSettlementOwnerConfirmAccountParam param) {
settlementOwnerService.updateConfirmAccount(param.getId());
return Result.ok();
}
@ApiOperation(value = "确认结算单",notes = "<br>By:艾庆国")
@PostMapping("/updateConfirmSettlement")
public Result updateConfirmSettlement(@RequestBody @Validated CarrierSettlementOwnerConfirmSettlementParam param) {
settlementOwnerService.updateCarrierConfirmSettlement(param.getId());
return Result.ok();
}
}
package com.clx.performance.controller.pc.carrier;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.CountOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.UploadBatchInvoiceFileResultVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -20,12 +24,11 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@RestController
......@@ -54,6 +57,43 @@ public class CarrierSettlementOwnerDetailController {
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
@ApiOperation(value = "开票管理待开票、已开票列表",notes = "<br>By:杨启发")
@PostMapping("/pageInvoiceOwnerSettlementOrderDetailList")
@UnitCovert(param = false)
public Result<PageData<PageOwnerSettlementOwnerDetailVO>> pageInvoiceOwnerSettlementOrderDetailList(@RequestBody @Validated PageInvoiceOwnerSettlementOwnerDetailParam param) {
IPage<PageOwnerSettlementOwnerDetailVO> page = settlementOwnerDetailService.pageInvoiceOwnerSettlementOrderDetailList(param);
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
@ApiOperation(value = "开票管理待开票、已开票列表统计",notes = "<br>By:杨启发")
@PostMapping("/countInvoiceOwnerSettlementOrderDetailList")
public Result<CountOwnerSettlementOwnerDetailVO> countInvoiceOwnerSettlementOrderDetailList(@RequestBody @Validated PageInvoiceOwnerSettlementOwnerDetailParam param) {
CountOwnerSettlementOwnerDetailVO vo = settlementOwnerDetailService.countInvoiceOwnerSettlementOrderDetailList(param);
return Result.ok(vo);
}
@ApiOperation(value = "导出开票管理待开票、已开票",notes = "<br>By:杨启发")
@PostMapping("/exportInvoiceOwnerSettlementOrderDetail")
public void exportInvoiceOwnerSettlementOrderDetail(@RequestBody @Validated PageInvoiceOwnerSettlementOwnerDetailParam param, HttpServletResponse response) throws Exception {
try (SXSSFWorkbook workbook = settlementOwnerDetailService.exportInvoiceOwnerSettlementOrderDetail(param)) {
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
}
@ApiOperation(value = "上传批量开票文件",notes = "<br>By:杨启发")
@PostMapping("/uploadBatchInvoiceFile")
public Result<UploadBatchInvoiceFileResultVO> uploadBatchInvoiceFile(@RequestParam("file") MultipartFile file) throws IOException {
return Result.ok(settlementOwnerDetailService.uploadBatchInvoiceFile(file));
}
@ApiOperation(value = "确认批量开票",notes = "<br>By:杨启发")
@PostMapping("/confirmBatchInvoice")
public Result<Object> confirmBatchInvoice(@RequestBody @Validated ConfirmBatchInvoiceParam param) {
settlementOwnerDetailService.confirmBatchInvoice(param.getChildNoList());
return Result.ok();
}
@ApiOperation(value = "导出货主结算单运单明细",notes = "<br>By:姜文业")
@PostMapping("/exportOwnerSettlementOrderDetailList")
public void exportCarrierSettlementOwnerPageList(@RequestBody @Validated PageOwnerSettlementOwnerDetailParam param, HttpServletResponse response) throws Exception {
......@@ -83,9 +123,20 @@ public class CarrierSettlementOwnerDetailController {
@ApiOperation(value = "批量下载结算运单明细",notes = "<br>By:liruixin")
@PostMapping("/exportBatchSettlementOwnerDetail")
public void exportBatchSettlementOwnerDetail(@RequestBody @Validated ExportBatchOwnerSettlementDetailParam param, HttpServletResponse response) throws Exception {
if(CollectionUtil.isEmpty(param.getSettlementNos())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_NO_NULL_ERROR);
}
SXSSFWorkbook workbook = settlementOwnerDetailService.exportBatchSettlementOwnerDetail(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
@ApiOperation(value = "更新开票公司",notes = "<br>By:艾庆国")
@PostMapping("/updateInvoiceCompany")
public Result updateInvoiceCompany(@RequestBody @Validated CarrierSettlementOwnerDetailCompanyUpdateParam param) {
settlementOwnerDetailService.updateInvoiceCompany(param);
return Result.ok();
}
}
package com.clx.performance.controller.pc.owner;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.service.settle.SettlementOrderChildRiskService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping(value="/pc/owner/settlementOrderChildRisk")
@Validated
@Api(tags = "货主端-货主结算")
@AllArgsConstructor
public class OwnerSettlementOrderChildRiskController {
private final SettlementOrderChildRiskService settlementOrderChildRiskService;
@ApiOperation(value = "风控处理",notes = "<br>By:李瑞新")
@PostMapping("/updateProcessRisk")
public Result updateRiskProcess(@RequestBody @Validated OwnerSettlementOrderChildRiskProcessUpdateParam param) {
settlementOrderChildRiskService.updateRiskProcess(param);
return Result.ok();
}
}
......@@ -6,6 +6,7 @@ import com.clx.performance.param.pc.owner.OwnerPaymentSettlementParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.service.settle.SettlementOwnerExportService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.vo.pc.carrier.settle.CarrierSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO;
......@@ -39,7 +40,7 @@ public class OwnerSettlementOwnerController {
private final SettlementOwnerDetailService settlementOwnerDetailService;
private final SettlementOwnerExportService settlementOwnerExportService;
@ApiOperation(value = "结算单详情",notes = "<br>By:李瑞新")
@GetMapping("/getOwnerSettlementOwnerDetail")
......@@ -114,5 +115,11 @@ public class OwnerSettlementOwnerController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "货主端-导出结算单列表",notes = "<br>By:艾庆国")
@PostMapping("/exportSettlementOwner")
public void exportSettlementOwner(@RequestBody @Validated PageOwnerSettlementParam param) {
settlementOwnerExportService.exportSettlementOwner(param);
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.controller.temp;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.listener.OrderChildSyncTransportListener;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.broker.OrderChildBrokerMqService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.SettlementStatisticsMqParam;
......@@ -33,6 +34,8 @@ public class TempSettlementController {
private OrderChildSyncTransportListener orderChildSyncTransportListener;
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@Autowired
private OrderChildBrokerMqService orderChildBrokerMqService;
@ApiOperation(value = "settlementStatistics", notes = "<br>By:艾庆国")
@RequestMapping(value = "/settlementStatistics", method = RequestMethod.GET)
......@@ -40,7 +43,6 @@ public class TempSettlementController {
SettlementStatisticsMqParam mq = new SettlementStatisticsMqParam();
mq.setChildNo(childNo);
mq.setInvoiceType(1);
settlementMqHandlerService.settlementStatistics(mq);
return Result.ok();
......@@ -49,10 +51,18 @@ public class TempSettlementController {
@ApiOperation(value = "运单同步broker", notes = "<br>By:艾庆国")
@RequestMapping(value = "/orderChildSync", method = RequestMethod.GET)
public Result orderChildSync(String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).get();
// 同步broker
orderChildSyncTransportListener.transportOrderChildProcess(orderChild);
// 发送mq (更新无车承运)
orderChildBrokerMqService.orderChildSync(childNo);
return Result.ok();
}
@ApiOperation(value = "运单更新broker", notes = "<br>By:艾庆国")
@RequestMapping(value = "/orderChildUpdate", method = RequestMethod.GET)
public Result orderChildUpdate(String childNo) {
// 发送mq (更新无车承运)
orderChildBrokerMqService.orderChildUpdate(childNo);
return Result.ok();
}
......
......@@ -9,6 +9,7 @@ import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.mapper.settle.SettlementDriverMapper;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
......@@ -29,6 +30,21 @@ import java.util.Set;
public class SettlementDriverDaoImpl extends BaseDaoImpl<SettlementDriverMapper, SettlementDriver, Integer> implements SettlementDriverDao {
@Override
public boolean updatePayStatus(SettlementDriver item) {
return update(lUdWrapper()
.eq(SettlementDriver::getId, item.getId())
.set(SettlementDriver::getStatus, item.getStatus())
);
}
@Override
public Optional<SettlementDriver> findBySettlementNo(String settlementNo) {
return Optional.of(lQrWrapper()
.eq(SettlementDriver::getSettlementNo, settlementNo)
)
.map(super::getOne);
}
@Override
public IPage<SettlementDriver> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param) {
......
......@@ -28,6 +28,23 @@ import java.util.Objects;
*/
@Repository
public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> implements SettlementDriverDetailDao {
@Override
public boolean updateSettlementNo(SettlementDriverDetail item) {
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getSettlementNo, item.getSettlementNo())
);
}
@Override
public boolean updateClearSettlementNo(SettlementDriverDetail item) {
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getSettlementNo, item.getSettlementNo())
);
}
@Override
public boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item) {
return update(lUdWrapper()
......@@ -44,14 +61,32 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
);
}
@Override
public boolean updateSettlementNo(SettlementDriverDetail item) {
public boolean updateConvertOrdinary(SettlementDriverDetail item) {
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getSettlementNo, item.getSettlementNo())
.set(SettlementDriverDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementDriverDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementDriverDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementDriverDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
@Override
public boolean updatePreFreight(SettlementDriverDetail item) {
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag())
.set(SettlementDriverDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementDriverDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementDriverDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
@Override
public Optional<SettlementDriverDetail> getByChildNo(String childNo) {
return Optional.of(childNo)
......@@ -129,4 +164,11 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
return baseMapper.selectList(lQrWrapper().eq(SettlementDriverDetail::getLoanFlag, code));
}
@Override
public List<SettlementDriverDetail> findListByIdList(List<Integer> idList) {
return list(lQrWrapper()
.in(SettlementDriverDetail::getId, idList)
);
}
}
......@@ -8,6 +8,7 @@ import com.clx.performance.dao.settle.SettlementOrderChildRiskDao;
import com.clx.performance.mapper.settle.SettlementOrderChildRiskMapper;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -19,6 +20,36 @@ public class SettlementOrderChildRiskDaoImpl
extends BaseDaoImpl<SettlementOrderChildRiskMapper, SettlementOrderChildRisk, Integer>
implements SettlementOrderChildRiskDao {
@Override
public boolean updateProcess(SettlementOrderChildRisk item) {
return update(lUdWrapper()
.eq(SettlementOrderChildRisk::getId, item.getId())
.set(SettlementOrderChildRisk::getStatus, item.getStatus())
.set(SettlementOrderChildRisk::getProcessMethod, item.getProcessMethod())
.set(SettlementOrderChildRisk::getProcessBy, item.getProcessBy())
.set(SettlementOrderChildRisk::getProcessTime, item.getProcessTime())
);
}
@Override
public Optional<SettlementOrderChildRisk> getById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(SettlementOrderChildRisk::getId, item)
)
.map(super::getOne);
}
@Override
public Optional<SettlementOrderChildRisk> findLastByChildNo(String childNo) {
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(SettlementOrderChildRisk::getChildNo, childNo)
.orderByDesc(SettlementOrderChildRisk::getId)
)
.map(super::getOne);
}
@Override
public IPage<SettlementOrderChildRisk> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param) {
LambdaQueryWrapper<SettlementOrderChildRisk> query = new LambdaQueryWrapper<>();
......
......@@ -28,6 +28,14 @@ import java.util.Objects;
@Repository
public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, SettlementOwner, Integer> implements SettlementOwnerDao {
@Override
public boolean updateStatus(SettlementOwner item) {
return update(lUdWrapper()
.eq(SettlementOwner::getId, item.getId())
.eq(SettlementOwner::getStatus, item.getStatus())
);
}
@Override
public boolean updateSettlementPeriodMonth(SettlementOwner item) {
return update(lUdWrapper()
......@@ -97,6 +105,22 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
);
}
@Override
public Optional<SettlementOwner> findById(Integer id) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getId, id)
)
.map(super::getOne);
}
@Override
public Optional<SettlementOwner> findBySettlementNo(String settlementNo) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getSettlementNo, settlementNo)
)
.map(super::getOne);
}
@Override
public IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param) {
LambdaQueryWrapper<SettlementOwner> query = new LambdaQueryWrapper<>();
......@@ -296,4 +320,14 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
.set(SettlementOwner:: getMergeTime,mergeTime)
);
}
@Override
public List<SettlementOwner> listPlatformToBeConfirmed(LocalDateTime time) {
return list(lUdWrapper()
.ge(SettlementOwner::getCreateTime, time)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())
.eq(SettlementOwner::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
}
......@@ -8,10 +8,10 @@ import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.mapper.settle.SettlementOwnerDetailMapper;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.msl.common.base.Optional;
......@@ -36,6 +36,51 @@ import static com.clx.performance.enums.settle.SettlementOwnerEnum.InvoiceType.O
@Repository
public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDetailMapper, SettlementOwnerDetail, Integer> implements SettlementOwnerDetailDao {
@Override
public boolean updateInvoiceTypeStatus(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoiceTypeStatus, item.getInvoiceTypeStatus())
);
}
@Override
public boolean updatePayStatus(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getPayStatus, item.getPayStatus())
);
}
@Override
public boolean updateSettlementNo(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getSettlementNo, item.getSettlementNo())
);
}
@Override
public boolean updateClearSettlementNo(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getSettlementNo, item.getSettlementNo())
.set(SettlementOwnerDetail::getSeparateRemark, item.getSeparateRemark())
);
}
@Override
public boolean updateConvertOrdinary(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementOwnerDetail::getInvoiceStatus, item.getInvoiceStatus())
.set(SettlementOwnerDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementOwnerDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
@Override
public boolean updateInvoiceType(SettlementOwnerDetail item) {
return update(lUdWrapper()
......@@ -57,18 +102,14 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
}
@Override
public boolean updatePayStatus(SettlementOwnerDetail item) {
public boolean updatePreFreight(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getPayStatus, item.getPayStatus())
);
}
@Override
public boolean updateSettlementNo(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getSettlementNo, item.getSettlementNo())
.set(SettlementOwnerDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementOwnerDetail::getPrepayFreight, item.getPrepayFreight())
.set(SettlementOwnerDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementOwnerDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
......@@ -88,6 +129,25 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
);
}
@Override
public boolean updateInvoiceCompany(List<Integer> idList, Integer companyId, String companyShorterName, String companyGroupCode) {
return update(lUdWrapper()
.in(SettlementOwnerDetail::getId, idList)
.set(SettlementOwnerDetail::getInvoicingCompanyId, companyId)
.set(SettlementOwnerDetail::getInvoicingCompanyShorterName, companyShorterName)
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, companyGroupCode)
);
}
@Override
public Optional<SettlementOwnerDetail> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(SettlementOwnerDetail::getId, id)
)
.map(super::getOne);
}
@Override
public Optional<SettlementOwnerDetail> getByChildNo(String childNo) {
return Optional.of(childNo)
......@@ -180,6 +240,35 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public IPage<SettlementOwnerDetail> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param) {
LambdaQueryWrapper<SettlementOwnerDetail> query = new LambdaQueryWrapper<>();
query.in(SettlementOwnerDetail :: getFinalPaymentStatus, SettlementOwnerDetailEnum.FinalPaymentStatus.YES.getCode(),SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
query.eq(SettlementOwnerDetail::getInvoiceStatus,param.getInvoiceStatus());
query.eq(Objects.nonNull(param.getOwnerUserNo()),SettlementOwnerDetail::getOwnerUserNo,param.getOwnerUserNo());
query.like(StringUtils.isNotBlank(param.getOwnerName()),SettlementOwnerDetail :: getOwnerName,param.getOwnerName());
query.eq(StringUtils.isNotBlank(param.getSettlementNo()),SettlementOwnerDetail :: getSettlementNo,param.getSettlementNo());
query.eq(StringUtils.isNotBlank(param.getChildNo()),SettlementOwnerDetail :: getChildNo,param.getChildNo());
query.like(StringUtils.isNotBlank(param.getInvoicingCompanyShorterName()),SettlementOwnerDetail :: getInvoicingCompanyShorterName,param.getInvoicingCompanyShorterName());
query.eq(Objects.nonNull(param.getInvoiceType()),SettlementOwnerDetail :: getInvoiceType,param.getInvoiceType());
//待开票列表根据创建时间查找
if (param.getInvoiceStatus().equals(SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode())) {
query.between(StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime()),SettlementOwnerDetail::getCreateTime,param.getBeginTime(),param.getEndTime());
query.between(StringUtils.isBlank(param.getBeginTime()) || StringUtils.isBlank(param.getEndTime()),SettlementOwnerDetail::getCreateTime,LocalDateTime.now().minusMonths(3),LocalDateTime.now());
//已开票列表根据开票时间查找
}else {
query.between(StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime()),SettlementOwnerDetail::getInvoiceTime,param.getBeginTime(),param.getEndTime());
query.between(StringUtils.isBlank(param.getBeginTime()) || StringUtils.isBlank(param.getEndTime()),SettlementOwnerDetail::getInvoiceTime,LocalDateTime.now().minusMonths(3),LocalDateTime.now());
}
//待开票列表根据创建时间正序排,已开票列表根据开票时间倒序排
query.orderByAsc(param.getInvoiceStatus().equals(SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode()),SettlementOwnerDetail::getCreateTime);
query.orderByDesc(param.getInvoiceStatus().equals(SettlementOwnerDetailEnum.InvoiceStatus.YES.getCode()),SettlementOwnerDetail::getInvoiceTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public void updateSettlementMerge(String settlementNo, List<String> settlementNos) {
update(lUdWrapper()
......@@ -199,6 +288,7 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
@Override
public List<SettlementOwnerDetail> listPayStatusSync() {
return list(lUdWrapper()
......@@ -239,4 +329,11 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.in(SettlementOwnerDetail::getSettlementNo, param.getSettlementNos())
);
}
@Override
public List<SettlementOwnerDetail> findListByIdList(List<Integer> idList) {
return list(lQrWrapper()
.in(SettlementOwnerDetail::getId, idList)
);
}
}
......@@ -3,6 +3,8 @@ package com.clx.performance.dao.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementDriverMapper;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
......@@ -17,6 +19,13 @@ import java.util.Set;
* @Version: 1.0
*/
public interface SettlementDriverDao extends BaseDao<SettlementDriverMapper, SettlementDriver, Integer> {
boolean updatePayStatus(SettlementDriver item);
Optional<SettlementDriver> findBySettlementNo(String settlementNo);
IPage<SettlementDriver> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param);
......
......@@ -9,7 +9,6 @@ import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* @Author: aiqinguo
......@@ -19,12 +18,15 @@ import java.util.Set;
*/
public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> {
boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item);
boolean updateSettlementNo(SettlementDriverDetail item);
boolean updateClearSettlementNo(SettlementDriverDetail item);
boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item);
boolean updateConvertOrdinary(SettlementDriverDetail item);
boolean updatePreFreight(SettlementDriverDetail item);
Optional<SettlementDriverDetail> getByChildNo(String childNo);
Optional<SettlementDriverDetail> getByChildNo(String childNo);
IPage<SettlementDriverDetail> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param);
......@@ -39,4 +41,6 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
SettlementDriverDetail selectLoanTypeFlag(String orderNo);
List<SettlementDriverDetail> selectListByLoanFlag(Integer code);
List<SettlementDriverDetail> findListByIdList(List<Integer> idList);
}
......@@ -4,11 +4,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementOrderChildRiskMapper;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
public interface SettlementOrderChildRiskDao
extends BaseDao<SettlementOrderChildRiskMapper,
SettlementOrderChildRisk, Integer> {
boolean updateProcess(SettlementOrderChildRisk item);
Optional<SettlementOrderChildRisk> getById(Integer id);
Optional<SettlementOrderChildRisk> findLastByChildNo(String childNo);
IPage<SettlementOrderChildRisk> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
}
\ No newline at end of file
......@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementOwnerMapper;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam;
import com.msl.common.base.Optional;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
......@@ -14,6 +14,8 @@ import java.util.List;
public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, SettlementOwner, Integer> {
boolean updateStatus(SettlementOwner item);
boolean updateSettlementPeriodMonth(SettlementOwner item);
boolean updateLock(SettlementOwner item);
......@@ -29,6 +31,10 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
boolean updatePayment(SettlementOwner settlementOwner);
Optional<SettlementOwner> findById(Integer id);
Optional<SettlementOwner> findBySettlementNo(String settlementNo);
IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param);
Optional<SettlementOwner> selectBySettlementNo(@Param("settlementNo")String settlementNo);
......@@ -76,4 +82,7 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
@Param("settlementNos")List<String> settlementNos,
@Param("mergedBy") String mergedBy,
@Param("mergeTime") LocalDateTime mergeTime);
List<SettlementOwner> listPlatformToBeConfirmed(LocalDateTime time);
}
......@@ -5,6 +5,7 @@ import com.clx.performance.mapper.settle.SettlementOwnerDetailMapper;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.msl.common.base.Optional;
......@@ -22,22 +23,33 @@ import java.util.List;
*/
public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailMapper, SettlementOwnerDetail, Integer> {
boolean updateInvoiceType(SettlementOwnerDetail item);
boolean updateInvoiceTypeStatus(SettlementOwnerDetail item);
boolean updatePayStatus(SettlementOwnerDetail item);
boolean updateSettlementNo(SettlementOwnerDetail item);
boolean updateClearSettlementNo(SettlementOwnerDetail item);
boolean updateConvertOrdinary(SettlementOwnerDetail item);
boolean updateInvoiceType(SettlementOwnerDetail item);
boolean updatePreFreight(SettlementOwnerDetail item);
boolean updateInvoiceStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("invoiceStatus")Integer invoiceStatus);
boolean updateFinalPaymentStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("finalPaymentStatus")Integer finalPaymentStatus);
boolean updateInvoiceCompany(List<Integer> idList, Integer companyId, String companyShorterName, String companyGroupCode);
Optional<SettlementOwnerDetail> findById(Integer id);
Optional<SettlementOwnerDetail> getByChildNo(String childNo);
List<SettlementOwnerDetail> getBySettlementNo(String settlementNo);
List<SettlementOwnerDetail> getBySettlementNoAndInvoiceType(String settlementNo, Integer invoiceType, Integer invoiceStatus);
IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
Integer getInvoiceType(String orderNo);
......@@ -53,9 +65,13 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
List<SettlementOwnerDetail>listInvoiceStatusSync();
List<SettlementOwnerDetail> listPayStatusSync();
List<SettlementOwnerDetail> listInvoiceTypeSync();
IPage<SettlementOwnerDetail> pagePendingSettlementOwnerDetail(PagePendingCarrierSettlementOwnerDetailParam param);
List<SettlementOwnerDetail> listSettlementOwnerDetailBySettlementNos(ExportBatchOwnerSettlementDetailParam param);
List<SettlementOwnerDetail> findListByIdList(List<Integer> idList);
}
package com.clx.performance.dto.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class InvoiceData {
@ExcelProperty("运单编号")
private String childNo;
@ExcelProperty("开票标识")
private String invoiceType;
@ExcelProperty("开票金额")
private BigDecimal invoiceFreight;
@ExcelProperty("备注")
private String remark;
/**
* 装货净重(单位吨)
*/
private BigDecimal loadNet;
}
......@@ -16,6 +16,7 @@ import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
......@@ -124,15 +125,20 @@ public class EventListenerComponent {
SettlementDriverDetail settlementDriverDetail = param.getSettlementDriverDetail();
OrderChild orderChild = param.getOrderChild();
try {
//生成借款标识
orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail, orderChild);
} catch (Exception e) {
//未借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode());
applicationEventPublisher.publishEvent(new SettlementUpdateEvent(this, settlementDriverDetail, settlementOwnerDetail));
log.error("处理货主借款监听器执行异常,数据为{},异常信息{}", JSONUtil.parse(param), ExceptionUtil.getMessage(e));
throw e;
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
}
else {
try {
//生成借款标识
orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail, orderChild);
} catch (Exception e) {
//未借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode());
applicationEventPublisher.publishEvent(new SettlementUpdateEvent(this, settlementDriverDetail, settlementOwnerDetail));
log.error("处理货主借款监听器执行异常,数据为{},异常信息{}", JSONUtil.parse(param), ExceptionUtil.getMessage(e));
throw e;
}
}
log.info("处理货主借款监听器执行成功");
......@@ -140,7 +146,7 @@ public class EventListenerComponent {
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
// 发送mq 结算统计
settlementMqService.settlementStatistics(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType());
settlementMqService.settlementStatistics(settlementDriverDetail.getChildNo());
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD, e.getMessage());
} finally {
......
......@@ -6,6 +6,7 @@ import com.clx.performance.vo.pc.broker.TransportVO;
public interface BrokerService {
void orderChildSync(TransportParam param);
void orderChildUpdate(TransportParam param);
TransportVO getOrderChildStatus(String childNo);
......
......@@ -27,11 +27,24 @@ public class BrokerServiceImpl implements BrokerService {
Result<Object> result = brokerFeign.saveTransport(param);
if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
log.info("运单同步网络货运失败, childNo:{}, msg:{}", param.getOrderChild().getSourceChildNo(), result.getMsg());
throw new ServiceSystemException(ResultEnum.FEIGN_ERROR, result.getMsg());
}
log.info("运单同步网络货运, result:{}", JSON.toJSONString(result));
log.info("运单同步网络货运, childNo:{}, result:{}", param.getOrderChild().getSourceChildNo(), JSON.toJSONString(result));
}
@Override
public void orderChildUpdate(TransportParam param) {
param.setUserCode(settlementConfig.getBrokerUserCode());
Result<Object> result = brokerFeign.modifyTransport(param);
if (result.getCode() != 0) {
log.info("运单更新网络货运失败, childNo:{}, msg:{}", param.getOrderChild().getSourceChildNo(), result.getMsg());
throw new ServiceSystemException(ResultEnum.FEIGN_ERROR, result.getMsg());
}
log.info("运单更新网络货运, childNo:{}, result:{}", param.getOrderChild().getSourceChildNo(), JSON.toJSONString(result));
}
@Override
public TransportVO getOrderChildStatus(String childNo) {
......@@ -43,9 +56,9 @@ public class BrokerServiceImpl implements BrokerService {
Result<TransportVO> result = brokerFeign.getTransportByChildNo(childNo, settlementConfig.getBrokerUserCode(), settlementNo);
if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
log.info("获取网络货运运单状态, childNo:{}, msg:{}", childNo, result.getMsg());
}
log.info("运单同步网络货运, result:{}", JSON.toJSONString(result));
log.info("获取网络货运运单状态, childNo:{}, result:{}", childNo, JSON.toJSONString(result));
return result.getData();
}
......
......@@ -21,6 +21,12 @@ public interface BrokerFeign {
@RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/saveTransport")
Result<Object> saveTransport(@RequestBody TransportParam param);
/**
* 运单更新
*/
@RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/modifyTransport")
Result<Object> modifyTransport(@RequestBody TransportParam param);
@RequestMapping(value = "/broker-service/open/transport/getTransportByChildNo", method = RequestMethod.GET)
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String orderCode,
@RequestParam @NotNull(message = "userCode不能为空") String userCode,
......
package com.clx.performance.job.settlement;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@AllArgsConstructor
public class SettlementJob {
// 默认30天
private static final Integer EFFECT_TIME = 30;
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final SettlementMqService settlementMqService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDao settlementOwnerDao;
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
/**
......@@ -86,4 +95,38 @@ public class SettlementJob {
}
}
/**
* 结算单平台自动确认更新
*/
@XxlJob("settlementPlatformAutoConfirmUpdate")
public void settlementPlatformAutoConfirmUpdate() {
try {
Integer effectTime= null;
String jobParam= XxlJobHelper.getJobParam();
log.info("结算单平台自动确认更新, param:{}", jobParam);
if (StringUtils.isNotBlank(jobParam)) {
JSONObject jsonObject = JSON.parseObject(jobParam);
effectTime = jsonObject.getInteger("effectTime");
}
if (effectTime == null) {
effectTime = EFFECT_TIME;
}
LocalDateTime time = LocalDateTime.now().minusDays(effectTime);
List<SettlementOwner> list = settlementOwnerDao.listPlatformToBeConfirmed(time);
log.info("结算单平台自动确认更新, size:{}", list.size());
if (list.isEmpty()) {return;}
for (SettlementOwner item : list) {
settlementMqService.settlementPlatformAutoConfirmUpdate(item.getSettlementNo());
}
} catch (Exception e) {
log.warn("结算单平台自动确认更新失败,msg:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("结算单平台自动确认更新失败", e);
}
}
}
package com.clx.performance.listener.broker;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyBrokerConstants;
import lombok.extern.slf4j.Slf4j;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 无车承运 mq
* @Date: 2023-10-20 16:14:30
* @Version: 1.0
*/
@Slf4j
@Component
public class BrokerDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyBrokerConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("无车承运-延迟, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<MqDelay>>(){}).getData());
}catch (Exception e){
log.info("无车承运-延迟 失败",e);
}
}
void process(MqDelay mq){
Message message = MessageBuilder.withBody(JSON.toJSONString(mq.getData()).getBytes()).build();
rabbitTemplate.send(mq.getExchange(), mq.getRouterKey(), message);
}
}
package com.clx.performance.listener.broker;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyBrokerConstants;
import com.clx.performance.service.broker.OrderChildBrokerMqHandlerService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildSyncMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单同步 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class BrokerOrderChildSyncListener {
@Autowired
private OrderChildBrokerMqHandlerService orderChildBrokerMqHandlerService;
@RabbitListener(queues = RabbitKeyBrokerConstants.ORDER_CHILD_SYNC_QUEUE)
public void process(Message message) {
try{
log.info("无车承运-运单同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<BrokerOrderChildSyncMqParam>>(){}).getData());
log.info("无车承运-运单同步成功, message:{}", new String(message.getBody()));
}catch (Exception e){
log.info("无车承运-运单同步 失败,msg:{}", ExceptionUtils.getStackTrace(e));
}
}
private void process(BrokerOrderChildSyncMqParam mq){
orderChildBrokerMqHandlerService.orderChildSync(mq);
}
}
package com.clx.performance.listener.broker;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyBrokerConstants;
import com.clx.performance.service.broker.OrderChildBrokerMqHandlerService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildUpdateMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单更新 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class BrokerOrderChildUpdateListener {
@Autowired
private OrderChildBrokerMqHandlerService orderChildBrokerMqHandlerService;
@RabbitListener(queues = RabbitKeyBrokerConstants.ORDER_CHILD_UPDATE_QUEUE)
public void process(Message message) {
try{
log.info("无车承运-运单更新, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<BrokerOrderChildUpdateMqParam>>(){}).getData());
log.info("无车承运-运单更新成功, message:{}", new String(message.getBody()));
}catch (Exception e){
log.info("无车承运-运单同步 失败,msg:{}", ExceptionUtils.getStackTrace(e));
}
}
private void process(BrokerOrderChildUpdateMqParam mq){
orderChildBrokerMqHandlerService.orderChildUpdate(mq);
}
}
package com.clx.performance.listener.excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.excel.InvoiceData;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import lombok.AllArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import static com.clx.performance.enums.settle.SettlementOwnerDetailEnum.InvoiceStatus.NO;
import static com.clx.performance.enums.settle.SettlementOwnerEnum.InvoiceType.ORDINARY;
@AllArgsConstructor
public class InvoiceDataListener extends AnalysisEventListener<InvoiceData> {
private final List<InvoiceData> invoiceDataList;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;;
@Override
public void invoke(InvoiceData invoiceData, AnalysisContext context) {
// 每解析一行都会调用一次,逐行校验数据
PageInvoiceOwnerSettlementOwnerDetailParam param = new PageInvoiceOwnerSettlementOwnerDetailParam();
param.setInvoiceStatus(NO.getCode());
param.setChildNo(invoiceData.getChildNo());
//param.setInvoiceType(ORDINARY.getCode());
IPage<SettlementOwnerDetail> page = settlementOwnerDetailDao.pageInvoiceOwnerSettlementOrderDetailList(param);
List<SettlementOwnerDetail> records = page.getRecords();
if (CollectionUtils.isEmpty(records)) {
invoiceData.setRemark("校验失败(运单编号不匹配)");
}else if(!ORDINARY.getCode().equals(records.get(0).getInvoiceType())){
invoiceData.setRemark("校验失败(开票标识非普通单)");
}else if(records.get(0).getInvoiceFreight().compareTo(invoiceData.getInvoiceFreight().multiply(new BigDecimal(100))) != 0){
invoiceData.setRemark("校验失败(开票金额不匹配)");
}else {
invoiceData.setRemark("校验通过");
invoiceData.setLoadNet(records.get(0).getLoadNet());
}
invoiceDataList.add(invoiceData);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 解析完成后调用
// 可在此进行后续操作,如保存数据到数据库
}
}
......@@ -28,7 +28,7 @@ public class SettlementDelayListener {
@RabbitListener(queues = RabbitKeySettlementConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("结算-延迟, message:{}", message);
log.info("结算-延迟, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<MqDelay>>(){}).getData());
}catch (Exception e){
log.info("结算-延迟 失败",e);
......
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 开票公司更新 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementInvoiceCompanyUpdateListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_QUEUE)
public void process(Message message) {
try{
log.info("结算-开票公司更新, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementOwnerDetialInvoiceCompanyUpdateMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-开票公司更新 失败,msg:{}", ExceptionUtils.getStackTrace(e));
}
}
private void process(SettlementOwnerDetialInvoiceCompanyUpdateMqParam mq){
settlementMqHandlerService.invoiceCompanyUpdate(mq);
}
}
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 平台自动确认更新 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementPlatformAutoConfirmUpdateListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE)
public void process(Message message) {
try{
log.info("结算-平台自动确认更新, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementPlatformAutoConfirmMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-平台自动确认更新 失败",e);
}
}
private void process(SettlementPlatformAutoConfirmMqParam mq){
settlementMqHandlerService.settlementPlatformAutoConfirm(mq);
}
}
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 风控处理 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementRiskProcessListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_QUEUE)
public void process(Message message) {
try{
log.info("结算-风控处理, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementOrderChildRiskProcessMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-风控处理 失败,msg:{}", ExceptionUtils.getStackTrace(e));
}
}
private void process(SettlementOrderChildRiskProcessMqParam mq){
settlementMqHandlerService.riskProcess(mq);
}
}
......@@ -63,17 +63,20 @@ public class SettlementOwnerDetail implements HasKey<Integer> {
private BigDecimal invoiceServiceFee; //开票服务费(分)
private BigDecimal invoiceServiceFeeRate; //开票服务率
private Integer finalPaymentStatus; //尾款状态 0-否,1-是,2-无需支付
private Integer invoiceTypeStatus; // 开票标识状态:0未获取 1获取中 2获取成功 3获取失败
private Integer invoiceStatus; //开票状态 0-否,1-是,2-无需开票
private Integer invoicingCompanyId; //开票公司id
private String invoicingCompanyShorterName; //开票公司简称
private String invoicingCompanyGroupCode; //开票公司统一社会信用代码
private Integer reportFlag; //是否上报 0-否;1-是
private Integer invoiceChannel; //开票渠道:1无车承运
private LocalDateTime invoiceTime; //开票时间
private String remark; //备注
private Integer payStatus; //支付状态:0未支付 1已支付(网络货运是否支付)
private LocalDateTime poundAuditTime; //磅单审核通过时间
private String invoicingCompanyModifiedBy; //开票公司修改人
private LocalDateTime invoicingCompanyModifiedTime; //开票公司修改时间
private String separateRemark; //拆单备注
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
package com.clx.performance.service.broker;
import com.clx.performance.vo.mq.broker.BrokerOrderChildSyncMqParam;
import com.clx.performance.vo.mq.broker.BrokerOrderChildUpdateMqParam;
public interface OrderChildBrokerMqHandlerService {
void orderChildSync(BrokerOrderChildSyncMqParam mq);
void orderChildUpdate(BrokerOrderChildUpdateMqParam mq);
}
package com.clx.performance.service.broker;
import java.util.List;
public interface OrderChildBrokerMqService {
void orderChildSync(String childNo);
void orderChildUpdate(String childNo);
void orderChildUpdate(List<String> childNoList);
}
......@@ -9,4 +9,6 @@ public interface OrderChildBrokerService {
void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail);
void orderChildUpdate(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail);
}
......@@ -16,12 +16,14 @@ import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.component.OwnerAccountComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildPoundAuditDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.OrderCancelDTO;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildPoundAudit;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
......@@ -51,6 +53,9 @@ import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.clx.performance.enums.OrderChildPoundAuditEnum.Status.APPROVED;
import static com.clx.performance.enums.ResultEnum.DATA_ERROR;
@Slf4j
@Service
@AllArgsConstructor
......@@ -85,6 +90,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OwnerAccountComponent ownerAccountComponent;
private final OrderChildPoundAuditDao orderChildPoundAuditDao;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -734,6 +741,12 @@ public class OrderCancelServiceImpl implements OrderCancelService {
*/
@Override
public void artificialCancelOrder(String orderChildNo, String remark) {
//磅单如果审核通过,该运单不允许取消
List<OrderChildPoundAudit> poundAuditList = orderChildPoundAuditDao.getPoundAuditList(orderChildNo);
if (poundAuditList.stream().anyMatch(item->APPROVED.getCode().equals(item.getStatus()))) {
throw new ServiceSystemException(DATA_ERROR, "该运单磅单已审核通过,不允许取消");
}
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(orderChildNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderChild update = new OrderChild();
......
......@@ -2254,8 +2254,9 @@ public class OrderChildServiceImpl implements OrderChildService {
fieldList.add(new ExcelField(15, "接单时间", "payTime", 5000));
fieldList.add(new ExcelField(16, "完成时间", "finishTime", 5000));
fieldList.add(new ExcelField(17, "发货地址", "sendAddress", 10000));
fieldList.add(new ExcelField(18, "收货地址", "receiveAddress", 10000));
fieldList.add(new ExcelField(17, "磅单审核通过时间", "poundAuditTime", 5000));
fieldList.add(new ExcelField(18, "发货地址", "sendAddress", 10000));
fieldList.add(new ExcelField(19, "收货地址", "receiveAddress", 10000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
......@@ -2288,6 +2289,7 @@ public class OrderChildServiceImpl implements OrderChildService {
rowData.add(new ExcelData(dto.getPayTime()));
rowData.add(new ExcelData(dto.getFinishTime()));
rowData.add(new ExcelData(dto.getPoundAuditTime()));
rowData.add(new ExcelData(dto.getSendAddress()));
rowData.add(new ExcelData(dto.getReceiveAddress()));
......
package com.clx.performance.service.impl.broker;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.broker.OrderChildBrokerMqHandlerService;
import com.clx.performance.service.broker.OrderChildBrokerService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildSyncMqParam;
import com.clx.performance.vo.mq.broker.BrokerOrderChildUpdateMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Slf4j
@Service
public class OrderChildBrokerMqHandlerServiceImpl implements OrderChildBrokerMqHandlerService {
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private OrderChildBrokerService orderChildBrokerService;
@Override
public void orderChildSync(BrokerOrderChildSyncMqParam mq) {
String childNo = mq.getChildNo();
Integer invoiceType = mq.getInvoiceType();
OrderChild orderChild = orderChildDao
.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
settlementOwnerDetail.setInvoiceType(invoiceType);
try{
// 同步broker
orderChildBrokerService.orderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
} catch (Exception e) {
log.info("同步无车承运失败, child:{}, msg:{}", orderChild.getChildNo(), ExceptionUtils.getStackTrace(e));
}
}
@Override
public void orderChildUpdate(BrokerOrderChildUpdateMqParam mq) {
String childNo = mq.getChildNo();
OrderChild orderChild = orderChildDao
.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOwnerDetail.getReportFlag(), com.clx.order.enums.OrderEnum.ReportFlag.NO.getCode())){
return;
}
try{
// 更新broker
orderChildBrokerService.orderChildUpdate(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
} catch (Exception e) {
log.info("更新无车承运失败, child:{}, msg:{}", orderChild.getChildNo(), ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.service.impl.broker;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyBrokerConstants;
import com.clx.performance.service.broker.OrderChildBrokerMqService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildSyncMqParam;
import com.clx.performance.vo.mq.broker.BrokerOrderChildUpdateMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class OrderChildBrokerMqServiceImpl implements OrderChildBrokerMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void orderChildSync(String childNo) {
BrokerOrderChildSyncMqParam mq = new BrokerOrderChildSyncMqParam();
mq.setChildNo(childNo);
MqDelay delay =
new MqDelay<>(RabbitKeyBrokerConstants.DEFAULT_EXCHANGE,
RabbitKeyBrokerConstants.ORDER_CHILD_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyBrokerConstants.DEFAULT_EXCHANGE,
RabbitKeyBrokerConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void orderChildUpdate(String childNo) {
BrokerOrderChildUpdateMqParam mq = new BrokerOrderChildUpdateMqParam();
mq.setChildNo(childNo);
MqDelay delay =
new MqDelay<>(RabbitKeyBrokerConstants.DEFAULT_EXCHANGE,
RabbitKeyBrokerConstants.ORDER_CHILD_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyBrokerConstants.DEFAULT_EXCHANGE,
RabbitKeyBrokerConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void orderChildUpdate(List<String> childNoList) {
for (String childNo : childNoList) {
orderChildUpdate(childNo);
}
}
}
......@@ -6,7 +6,9 @@ import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PowerTypeEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.model.OrderChild;
......@@ -54,12 +56,33 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
private OrderChildImageDao orderChildImageDao;
@Autowired
private InvoicingCompanyService invoicingCompanyService;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Override
public void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail) {
TransportParam transportParam = buildParam(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// 运单同步
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
brokerService.orderChildSync(transportParam);
}
@Override
public void orderChildUpdate(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail, SettlementDriverDetail settlementDriverDetail) {
TransportParam transportParam = buildParam(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// 运单更新
brokerService.orderChildUpdate(transportParam);
}
private TransportParam buildParam(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail){
String host = documentFeign.getHost().getData();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
......@@ -244,10 +267,15 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setLoadTime(DateUtils.formatDateTime(orderChild.getLoadTime()).get());
orderChildInfo.setUnloadTime(DateUtils.formatDateTime(orderChild.getUnloadTime()).get());
orderChildInfo.setPayFinishedTime(DateUtils.formatDateTime(orderChild.getConfirmTime()).get());
orderChildInfo.setPoundTime(DateUtils.formatDateTime(settlementOwnerDetail.getPoundAuditTime()).get());
orderChildInfo.setReceiveTare(orderChild.getUnloadTare());
orderChildInfo.setReceiveRough(orderChild.getUnloadRough());
orderChildInfo.setReceiveNet(orderChild.getUnloadNet());
orderChildInfo.setInvoiceFlag(settlementOwnerDetail.getInvoiceType());
orderChildInfo.setInvoicePlatform(settlementOwnerDetail.getInvoicingCompanyShorterName());
orderChildInfo.setInvoiceStatus(Objects.equals(settlementOwnerDetail.getInvoiceStatus(),
SettlementOwnerDetailEnum.InvoiceStatus.YES.getCode())? 1 : 0);
transportParam.setOrder(orderInfo);
transportParam.setOrderChildImage(imageList);
......@@ -256,6 +284,7 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
transportParam.setOrderChildTruck(truckInfo);
transportParam.setOrderChild(orderChildInfo);
brokerService.orderChildSync(transportParam);
return transportParam;
}
}
......@@ -4,18 +4,18 @@ package com.clx.performance.service.impl.settle;
import com.clx.order.enums.QuotationEnum;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dao.settle.*;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
......@@ -62,6 +62,7 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
private final OrderGoodsDao orderGoodsDao;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementDriverDao settlementDriverDao;
@Override
public void addOrderChildSyncTransportRecord(SettlementDriverDetail detail) {
......@@ -82,13 +83,21 @@ public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncT
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriver settlementDriver = settlementDriverDao
.findBySettlementNo(settlementOwnerDetail.getSettlementNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementDriver.setStatus(SettlementDriverEnum.Status.SETTLED.getCode());
settlementDriverDao.updatePayStatus(settlementDriver);
settlementOwnerDetail.setPayStatus(SettlementOwnerDetailEnum.PayStatus.YES.getCode());
settlementOwnerDetailDao.updatePayStatus(settlementOwnerDetail);
orderChildSyncTransportRecordDao.updateStatus(childNo);
networkCaseOutRecordDao.updateStatus(payStatusNotifyDTO.getChildNo(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getCode(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getMsg()
);
SettlementDriverDetail driverDetail = settlementDriverDetailService.selectOneByChildNo(childNo);
orderChild.setStatus(OrderChildEnum.Status.COMPLETE.getCode());
......
......@@ -6,6 +6,9 @@ import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
......@@ -37,12 +40,16 @@ public class SettlementMqServiceImpl implements SettlementMqService {
}
@Override
public void settlementStatistics(String childNo, Integer invoiceType) {
public void settlementStatistics(String childNo) {
settlementStatistics(childNo, SettlementStatisticsMqParam.Type.STATISTICS.getCode());
}
@Override
public void settlementStatistics(String childNo, Integer type) {
SettlementStatisticsMqParam mq = new SettlementStatisticsMqParam();
mq.setChildNo(childNo);
mq.setInvoiceType(invoiceType);
log.info("运单号 {} 开票标识 {} ",childNo,invoiceType);
mq.setType(type);
MqDelay<MqWrapper<SettlementStatisticsMqParam>> delay =
new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY, new MqWrapper<>(mq));
......@@ -106,4 +113,40 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void riskProcess(Integer id) {
SettlementOrderChildRiskProcessMqParam mq = new SettlementOrderChildRiskProcessMqParam();
mq.setId(id);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void updateInvoiceCompany(Integer id) {
SettlementOwnerDetialInvoiceCompanyUpdateMqParam mq = new SettlementOwnerDetialInvoiceCompanyUpdateMqParam();
mq.setId(id);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_INVOICE_COMPANY_UPDATE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void settlementPlatformAutoConfirmUpdate(String settlementNo) {
SettlementPlatformAutoConfirmMqParam mq = new SettlementPlatformAutoConfirmMqParam();
mq.setSettlementNo(settlementNo);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
......@@ -2,34 +2,100 @@ package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOrderChildRiskDao;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.settle.SettlementOrderChildRiskEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementOrderChildRiskService;
import com.clx.performance.struct.settle.SettlementOrderChildRiskStruct;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO;
import com.clx.performance.vo.pc.carrier.settle.SettlementOrderChildRiskVO;
import lombok.AllArgsConstructor;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
@Slf4j
@AllArgsConstructor
public class SettlementOrderChildRiskServiceImpl implements SettlementOrderChildRiskService {
private final SettlementOrderChildRiskDao settlementOrderChildRiskDao;
private final SettlementOrderChildRiskStruct settlementOrderChildRiskStruct;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private SettlementOrderChildRiskDao settlementOrderChildRiskDao;
@Autowired
private SettlementOrderChildRiskStruct settlementOrderChildRiskStruct;
@Autowired
private SettlementMqService settlementMqService;
@Override
public void updateRiskProcess(OwnerSettlementOrderChildRiskProcessUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOrderChildRisk.getStatus(), SettlementOrderChildRiskEnum.Status.PROCESSED.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_RISK_PROCESS_ERROR);
}
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementOrderChildRisk.setStatus(SettlementOrderChildRiskEnum.Status.PROCESSED.getCode());
settlementOrderChildRisk.setProcessMethod(param.getProcessMethod());
settlementOrderChildRisk.setProcessBy(loginUserInfo.getUserName());
settlementOrderChildRisk.setProcessTime(LocalDateTime.now());
settlementOrderChildRiskDao.updateProcess(settlementOrderChildRisk);
// 转普通单
if (Objects.equals(param.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode())) {
settlementOwnerDetail.setInvoiceType(SettlementOwnerEnum.InvoiceType.ORDINARY.getCode());
settlementOwnerDetail.setInvoicingCompanyId(null);
settlementOwnerDetail.setInvoicingCompanyShorterName(null);
settlementOwnerDetail.setInvoicingCompanyGroupCode(null);
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.SUCCESS.getCode());
settlementOwnerDetailDao.updateConvertOrdinary(settlementOwnerDetail);
settlementDriverDetail.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementDriverDetail.setInvoicingCompanyId(settlementOwnerDetail.getInvoicingCompanyId());
settlementDriverDetail.setInvoicingCompanyShorterName(settlementOwnerDetail.getInvoicingCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(settlementOwnerDetail.getInvoicingCompanyGroupCode());
settlementDriverDetailDao.updateConvertOrdinary(settlementDriverDetail);
}
else {
}
// 发送mq (风控处理)
settlementMqService.riskProcess(settlementOrderChildRisk.getId());
}
@Override
public IPage<SettlementOrderChildRiskVO> pageSettlementOrderChildRisk(
......
package com.clx.performance.service.impl.settle;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.clx.performance.service.settle.SettlementOwnerExportService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class SettlementOwnerExportServiceImpl implements SettlementOwnerExportService {
@Autowired
private SettlementOwnerService settlementOwnerService;
@Override
public void exportSettlementOwner(PageOwnerSettlementParam param) {
param.setPage(1);
param.setPageSize(1000000);
List<OwnerPageSettlementOwnerVO> list = settlementOwnerService.pageSettlementOwner(param).getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "结算单号", "settlementNo", 5000));
fieldList.add(new ExcelField(2, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(3, "开票标识", "invoiceType", 5000));
fieldList.add(new ExcelField(4, "货主编码", "ownerUserNo", 5000));
fieldList.add(new ExcelField(5, "结算方式", "settlementWay", 5000));
fieldList.add(new ExcelField(6, "装车净重", "loadNet", 5000));
fieldList.add(new ExcelField(7, "卸车净重", "unloadNet", 5000));
fieldList.add(new ExcelField(8, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(9, "应付运费", "freight", 5000));
fieldList.add(new ExcelField(10, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(11, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(12, "管理费", "invoiceServiceFee", 5000));
fieldList.add(new ExcelField(13, "借款抵扣金额", "loanFreight", 5000));
fieldList.add(new ExcelField(14, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(15, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(16, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(17, "状态", "status", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (int i=0; i<list.size(); i++){
OwnerPageSettlementOwnerVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getSettlementNo()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getInvoiceTypeMsg()));
rowData.add(new ExcelData(dto.getOwnerUserNo().toString()));
rowData.add(new ExcelData(dto.getSettlementWayMsg()));
rowData.add(new ExcelData(dto.getLoadNet()));
rowData.add(new ExcelData(dto.getUnloadNet()));
rowData.add(new ExcelData(dto.getWeight()));
rowData.add(new ExcelData(dto.getFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getPrepayFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getLossWeight()));
rowData.add(new ExcelData(dto.getInvoiceServiceFee().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getLoanFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getSettlementFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getInvoiceFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getCreateTime()));
rowData.add(new ExcelData(dto.getStatusMsg()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("货主结算单", "货主结算单", fieldList, dataList);
// 导出
ExcelUtil.export(excelSheet);
}
}
......@@ -60,6 +60,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* @author liruixin
......@@ -128,6 +129,13 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
List<SettlementOwnerDetail> settlementOwnerDetails = settlementOwnerDetailDao.getBySettlementNo(settlementOwner.getSettlementNo());
Optional<SettlementOwnerDetail> optional = settlementOwnerDetails.stream().filter(item -> item.getInvoicingCompanyId() == null).findFirst();
if (optional.isPresent()){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_OWNER_CONFIRM_SETTLEMENT_ERROR,
"运单"+optional.get().getChildNo()+"需重新分配开票公司,请联系结算人员处理");
}
String settlementNo = settlementOwner.getSettlementNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----货主确认结算单
......@@ -171,6 +179,56 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,status);
}
@Override
public void updateConfirmAccount(Integer id) {
//结算单详情
SettlementOwner settlementOwner = settlementOwnerDao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//状态判断
if(!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
String settlementNo = settlementOwner.getSettlementNo();
if (Objects.equals(settlementOwner.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ORDINARY.getCode())) {
settlementOwner.setStatus(SettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode());
}
else {
settlementOwner.setStatus(SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode());
}
settlementOwnerDao.updateStatus(settlementOwner);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.PLATFORM_CONFIRM_ACCOUNT.getCode(),SettlementLogEnum.Type.PLATFORM_CONFIRM_ACCOUNT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
public void updateCarrierConfirmSettlement(Integer id) {
//结算单详情
SettlementOwner settlementOwner =settlementOwnerDao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//状态判断
if(!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
String settlementNo = settlementOwner.getSettlementNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----平台确认结算单
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.PLATFORM_TO_BE_CONFIRMED.getCode(),SettlementLogEnum.Type.PLATFORM_TO_BE_CONFIRMED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
int status = SettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode();
//更新状态
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,status);
}
@Override
public SettlementPlatformAccountVO getSettlementPlatformAccount() {
//平台账号
......
package com.clx.performance.service.impl.settle;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementPostService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class SettlementPostServiceImpl implements SettlementPostService {
@Autowired
private SettlementMqService settlementMqService;
@Override
public void updateInvoiceCompany(List<SettlementOwnerDetail> list){
for (SettlementOwnerDetail item : list) {
// 发送mq (开票公司更新)
settlementMqService.updateInvoiceCompany(item.getId());
}
}
}
......@@ -2,6 +2,9 @@ package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
public interface SettlementMqHandlerService {
......@@ -23,4 +26,10 @@ public interface SettlementMqHandlerService {
String settlementNoGenerate();
void riskProcess(SettlementOrderChildRiskProcessMqParam mq);
void invoiceCompanyUpdate(SettlementOwnerDetialInvoiceCompanyUpdateMqParam mq);
void settlementPlatformAutoConfirm(SettlementPlatformAutoConfirmMqParam mq);
}
......@@ -4,7 +4,8 @@ public interface SettlementMqService {
void settlementDetailAdd(Integer settlementOwnerDetailId, Integer settlementDriverDetailId);
void settlementStatistics(String childNo, Integer invoiceType);
void settlementStatistics(String childNo);
void settlementStatistics(String childNo, Integer type);
void invoiceTypeSync(String childNo);
......@@ -13,4 +14,11 @@ public interface SettlementMqService {
void invoiceStatusSync(String childNo);
void payStatusSync(String childNo);
void riskProcess(Integer id);
void updateInvoiceCompany(Integer id);
void settlementPlatformAutoConfirmUpdate(String settlementNo);
}
......@@ -2,11 +2,14 @@ package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.vo.pc.carrier.settle.SettlementOrderChildRiskVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
public interface SettlementOrderChildRiskService {
void updateRiskProcess(OwnerSettlementOrderChildRiskProcessUpdateParam param);
IPage<SettlementOrderChildRiskVO> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
SXSSFWorkbook exportSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
......
......@@ -5,14 +5,22 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.CountOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.UploadBatchInvoiceFileResultVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
* @author liruixin
......@@ -23,8 +31,14 @@ public interface SettlementOwnerDetailService {
Integer saveSettlementDetail(OrderChild orderChild, OrderGoods orderGoods, SettlementDriverDetail settlementDriverDetail);
void updateInvoiceCompany(CarrierSettlementOwnerDetailCompanyUpdateParam param);
IPage<PageOwnerSettlementOwnerDetailVO> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<PageOwnerSettlementOwnerDetailVO> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param);
CountOwnerSettlementOwnerDetailVO countInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param);
IPage<CarrierPageSettlementOwnerDetailVO> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
SXSSFWorkbook exportOwnerSettlementOrderDetail(PageOwnerSettlementOwnerDetailParam param);
......@@ -39,5 +53,9 @@ public interface SettlementOwnerDetailService {
SXSSFWorkbook exportBatchSettlementOwnerDetail(ExportBatchOwnerSettlementDetailParam param);
SXSSFWorkbook exportInvoiceOwnerSettlementOrderDetail(PageInvoiceOwnerSettlementOwnerDetailParam param);
UploadBatchInvoiceFileResultVO uploadBatchInvoiceFile(MultipartFile file) throws IOException;
void confirmBatchInvoice(List<String> childNoList);
}
package com.clx.performance.service.settle;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
public interface SettlementOwnerExportService {
void exportSettlementOwner(PageOwnerSettlementParam param);
}
......@@ -18,6 +18,8 @@ public interface SettlementOwnerService {
CarrierSettlementOwnerDetailVO getCarrierSettlementOwnerDetail(Integer id);
void updateConfirmSettlement(Integer id);
void updateConfirmAccount(Integer id);
void updateCarrierConfirmSettlement(Integer id);
SettlementPlatformAccountVO getSettlementPlatformAccount();
......
package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import java.util.List;
public interface SettlementPostService {
void updateInvoiceCompany(List<SettlementOwnerDetail> list);
}
......@@ -115,10 +115,19 @@ public class OrderChildSqlProvider {
"freight_price,send_address,receive_address,load_rough,load_tare,unload_rough,unload_tare," +
"driver_name,driver_mobile,load_net,unload_net," +
"date_format(pay_time, '%Y-%m-%d %H:%i:%s') as payTime," +
"date_format(finish_time, '%Y-%m-%d %H:%i:%s') as finishTime");
"date_format(finish_time, '%Y-%m-%d %H:%i:%s') as finishTime," +
"date_format(pound_audit_time, '%Y-%m-%d %H:%i:%s') as poundAuditTime");
FROM("order_child ");
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pay_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pay_time <= #{param.endTime}");}
if (Objects.equals(param.getTimeType(),1)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pay_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pay_time <= #{param.endTime}");}
}else if (Objects.equals(param.getTimeType(),2)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pound_audit_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pound_audit_time <= #{param.endTime}");}
}else if (Objects.equals(param.getTimeType(),3)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("finish_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("finish_time <= #{param.endTime}");}
}
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {WHERE("order_goods_no = #{param.orderGoodsNo}");}
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
......
......@@ -2,6 +2,7 @@ package com.clx.performance.struct.settle;
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.model.settle.SettlementOwnerDetail;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
......@@ -15,7 +16,7 @@ import org.mapstruct.Named;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {SettlementOwnerDetailEnum.class, SettlementOwnerEnum.class,DateUtils.class})
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {SettlementOwnerDetailEnum.class, SettlementOwnerEnum.class, SettlementWayEnum.class,DateUtils.class})
public interface SettlementOwnerDetailStruct {
......@@ -27,6 +28,7 @@ public interface SettlementOwnerDetailStruct {
@Mapping(target = "invoiceTypeMsg", expression = "java(SettlementOwnerEnum.InvoiceType.getMsgByCode(settlementOwner.getInvoiceType()))")
@Mapping(target = "finalPaymentStatusMsg", expression = "java(SettlementOwnerDetailEnum.FinalPaymentStatus.getMsgByCode(settlementOwner.getFinalPaymentStatus()))")
@Mapping(target = "invoiceStatusMsg", expression = "java(SettlementOwnerDetailEnum.InvoiceStatus.getMsgByCode(settlementOwner.getInvoiceStatus()))")
@Mapping(target = "settlementWayMsg", expression = "java(SettlementWayEnum.WayType.getMsgByCode(settlementOwner.getSettlementWay()))")
PageOwnerSettlementOwnerDetailVO convert(SettlementOwnerDetail settlementOwner);
@IterableMapping(qualifiedByName = "toBaseVo")
......
......@@ -69,6 +69,19 @@ public class ExcelData {
this.dataType = DataType.STRING.value;
}
}
public ExcelData(Long value) {
this(value,null);
}
public ExcelData(Long value, String defaultValue) {
if (null != value) {
this.doubleValue = value;
this.dataType = DataType.NUMERIC.value;
}
else {
this.value = defaultValue;
this.dataType = DataType.STRING.value;
}
}
public ExcelData(BigDecimal value) {
this(value,null);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论