提交 b1ffdcff authored 作者: liuhaiquan's avatar liuhaiquan

Merge branch 'v10.7_borrowing_and_repayment_20240118' of…

Merge branch 'v10.7_borrowing_and_repayment_20240118' of https://t.clxkj.cn/clx-java/clx-performance into v10.7_borrowing_and_repayment_20240118
......@@ -113,6 +113,13 @@ public enum PerformanceResultEnum implements ResultEnum {
SLIDER_CHECK_FAIL(1911, "滑块验证错误"),
ORDER_CHILD_SYNC_ERROR(1912, "承运同步网络货运异常"),
BORROWER_NAME_EXIST(1701, "数据重复,请核实后重新提交"),
BORROWER_CONFIG_BORROWER_ID_EXIST(1701, "数据重复,请核实后重新提交"),
NB_BANK_API_ERROR(1800, "宁波银行api调用失败"),
NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"),
NB_BANK_PAY_TYPE_ERROR(1802, "支付方式不支持"),
;
private final int code;
private final String msg;
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
public enum TransportSyncTypeEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
NO_PASS(1, "未通过风控异常"),
EXCEPTION(2, "同步异常"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static Optional<Type> getByName(String name) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getMsg(), name)).findFirst();
}
public static Integer getCodeByName(String name) {
return getByName(name).map(TransportSyncTypeEnum.Type::getCode).orElse(3);
}
}
}
package com.clx.performance.enums.borrower;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum BorrowerConfigEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
ENABLE(1, "启用"),
DISABLE(2, "禁用"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum DeleteStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
}
}
package com.clx.performance.enums.borrower;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum BorrowerEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
ENABLE(1, "启用"),
DISABLE(2, "禁用"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum DeleteStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
}
}
package com.clx.performance.enums.nbbank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum NbBankRecordEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
DIRECT_BANK_TRANSFER_ORDER(1, "转账直连下单"),
UNION_PAY_DIRECT_ORDER(2, "银联订单支付收款模式"),
QUERY_ORDER(3, "交易结果查询"),
NOTIFY_MERCHANT(4, "异步通知交易结果"),
;
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.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ThirdOrderChildInvoiceStatusDTO {
@ApiModelProperty(value = "开票状态:0未开票 1已开票 2运单不存在")
private Integer status;
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ThirdOrderChildInvoiceStatusParam {
@ApiModelProperty(value = "运单编号")
@NotBlank(message = "运单编号不能为空")
private String childNo;
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ThirdOrderChildRiskStatusDTO {
@ApiModelProperty(value = "运单编号")
private String childNo;
@ApiModelProperty(value = "合规状态:0不合规 1合规 2未同步 ")
private Integer status;
@ApiModelProperty(value = "风控原因")
private String riskReason;
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@ToString
@NoArgsConstructor
@Builder
public class ThirdOrderChildRiskStatusParam {
@ApiModelProperty(value = "运单编号")
@NotBlank(message = "运单编号不能为空")
private String childNo;
@ApiModelProperty(value = "合规状态:0不合规 1合规 2未同步 ")
private Integer status;
@ApiModelProperty(value = "风控原因")
private String riskReason;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerAddParam {
@ApiModelProperty(value = "借出方", example = "张三")
@NotBlank(message = "借出方不能为空")
private String name;
@ApiModelProperty(value = "所属银行", example = "工商银行")
@NotBlank(message = "所属银行不能为空")
private String bankName;
@ApiModelProperty(value = "银行账号", example = "10000000000000000")
@NotBlank(message = "不能为空")
private String bankCardNo;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerConfigAddParam {
@ApiModelProperty(value = "借出方id", example = "1")
private Integer borrowerId;
@ApiModelProperty(value = "类型:1资金 2虚拟货币", example = "1")
private Integer type;
@ApiModelProperty(value = "借款天数", example = "1")
private Integer day;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerConfigDeleteUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerConfigStatusUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerConfigUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "借出方id", example = "1")
private Integer borrowerId;
@ApiModelProperty(value = "类型:1资金 2虚拟货币", example = "1")
private Integer type;
@ApiModelProperty(value = "借款天数", example = "1")
private Integer day;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerDeleteUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.borrower;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerStatusUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
}
package com.clx.performance.param.pc.borrower;
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;
/**
* @Author: aiqingguo
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class BorrowerUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "借出方", example = "张三")
@NotBlank(message = "借出方不能为空")
private String name;
@ApiModelProperty(value = "所属银行", example = "工商银行")
@NotBlank(message = "所属银行不能为空")
private String bankName;
@ApiModelProperty(value = "银行账号", example = "10000000000000000")
@NotBlank(message = "银行账号不能为空")
private String bankCardNo;
}
package com.clx.performance.param.pc.borrower;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class PageBorrowerConfigParam extends PageParam {
@ApiModelProperty(value = "借出方", example = "张三")
private String borrowerName;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "")
private Integer status;
}
\ No newline at end of file
package com.clx.performance.param.pc.borrower;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class PageBorrowerParam extends PageParam {
@ApiModelProperty(value = "借出方", example = "张三")
private String name;
}
\ No newline at end of file
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class OrderTruckBindCancelParam {
//货单编号
private String orderGoodsNo;
//订单编号
private String orderNo;
}
package com.clx.performance.vo.pc.borrower;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 借款配置
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@ApiModel(description = "借款配置")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class BorrowerConfigVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "借出方id", example = "")
private Integer borrowerId;
@ApiModelProperty(value = "借出方", example = "")
private String borrowerName;
@ApiModelProperty(value = "类型:1资金 2虚拟货币", example = "")
private Integer type;
@ApiModelProperty(value = "借款天数", example = "")
private Integer day;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "")
private Integer status;
@ApiModelProperty(value = "操作人编码", example = "")
private Long opUserNo;
@ApiModelProperty(value = "操作人", example = "")
private String opUserName;
@ApiModelProperty(value = "操作时间", example = "")
private String opTime;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc.borrower;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@ApiModel(description = "借出方")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class BorrowerVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "借出方", example = "")
private String name;
@ApiModelProperty(value = "所属银行", example = "")
private String bankName;
@ApiModelProperty(value = "银行账号", example = "")
private String bankCardNo;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "")
private Integer status;
@ApiModelProperty(value = "操作人编码", example = "")
private Long opUserNo;
@ApiModelProperty(value = "操作人", example = "")
private String opUserName;
@ApiModelProperty(value = "操作时间", example = "")
private String opTime;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
}
\ No newline at end of file
......@@ -59,6 +59,8 @@ public class CarrierPageSettlementDriverDetailVO {
@MoneyOutConvert
@ApiModelProperty(value = "预付运费金额")
private BigDecimal prepayFreight;
@ApiModelProperty(value = "预付运费标示 0:未预付 1:已预付")
private Integer prepayFreightFlag;
@MoneyOutConvert
@ApiModelProperty(value = "结算金额")
private BigDecimal settlementFreight;
......
package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单支付
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
}
\ No newline at end of file
package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单状态
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayStatusResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "实收金额(分)", example = "")
private Integer realAmount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
@ApiModelProperty(value = "交易状态", example = "")
private Integer transStatus;
}
\ No newline at end of file
......@@ -255,6 +255,12 @@
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.nbopen</groupId>
<artifactId>openBasicSDK</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
......
......@@ -11,19 +11,16 @@ import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderCancelResult;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum;
......@@ -39,6 +36,7 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
@Component
......@@ -66,11 +64,6 @@ public class OrderCancelComponent implements InitializingBean {
@Autowired
private BreakContractSettlementOwnerService breakContractSettlementOwnerService;
public static Map<Integer, String> statusCodeMap = new HashMap<>();
@Autowired
private IntegralMqService integralMqService;
@Autowired
private OrderChildLogService orderChildLogService;
......@@ -84,151 +77,160 @@ public class OrderCancelComponent implements InitializingBean {
private OrderGoodsService orderGoodsService;
@Autowired
SettlementOwnerDetailDao settlementOwnerDetailDao;
private OwnerAccountComponent ownerAccountComponent;
@Autowired
OwnerAccountService ownerAccountService;
public static Map<Integer, String> statusCodeMap = new HashMap<>();
public static Map<Integer, BiFunction<String, Integer, OrderCancelResult>> cancelTypeMap = new HashMap<>();
/**
* 货主取消订单
* @param param
* @return
*/
public List<String> ownerProcess(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
List<String> childNoList = new LinkedList<>();
switch (param.getCancelType()) {
case 1: //单纯取消订单
log.info("1:货主单纯取消订单");
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
//根据不同的取消类型执行不同的取消逻辑
OrderCancelResult result = cancelTypeMap.get(param.getCancelType()).apply(orderNo, orderStatusCode);
orderStatusCode = result.getOrderStatusCode();
this.breakContractSettlementOwner(orderNo, orderStatusCode, param.getCancelType());
log.info("执行货主取消订单更改状态");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
ownerAccountComponent.thawOwnerAccountByOrderNo(orderNo);
List<String> childNoList = result.getChildNoList();
if (CollectionUtil.isNotEmpty(childNoList)) {
for (String childNo : childNoList) {
// 订单取消
orderChildPostService.orderCancel(childNo);
}
}
return childNoList;
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
}
//1网运单 2普通单
Integer invoiceType = settlementOwnerDetailDao.getInvoiceType(orderNo);
log.info("invoiceType={}", invoiceType);
ThawAccountParam thawAccountParam = new ThawAccountParam();
}
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(invoiceType)) {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
} else {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
}
thawAccountParam.setOrderNo(orderNo);
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
break;
case 2: //取消未拉运吨数的货单
log.info("2:货主取消未拉运吨数的货单");
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
/**
* 货主取消未拉运+未到达货源地吨数
* @param orderNo
* @param orderStatusCode
* @return
*/
private OrderCancelResult cancelOrderAndOrderGoodsAndOrderChild(String orderNo, Integer orderStatusCode) {
log.info("3:货主取消未拉运+未到达货源地吨数");
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
List<String> childNoList = new LinkedList<>();
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
log.info("执行货主取消未拉运+未到达货源地吨数,当前运单个数" + orderChildren.size());
for (OrderChild orderChild : orderChildren) {
log.info("取消的运单:{}", JSONUtil.parse(orderChild));
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
break;
case 3: //取消未拉运+未到达货源地吨数
log.info("3:货主取消未拉运+未到达货源地吨数");
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
log.info("执行货主取消未拉运+未到达货源地吨数,当前运单个数" + orderChildren.size());
for (OrderChild orderChild : orderChildren) {
log.info("取消的运单:{}", JSONUtil.parse(orderChild));
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(childNoList)) {
log.info("childNoList:{}", childNoList);
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "货主取消",
now, now, childNoList);
orderChildMap = orderChildren.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(childNoList)) {
log.info("childNoList:{}", childNoList);
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "货主取消",
now, now,childNoList);
orderChildMap = orderChildren.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
BigDecimal reduce = BigDecimal.ZERO;
for (OrderChild orderChild : orderChildMap.get(orderGoods.getOrderGoodsNo())) {
reduce = reduce.add(orderChild.getWeight());
}
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
BigDecimal reduce = BigDecimal.ZERO;
for (OrderChild orderChild : orderChildMap.get(orderGoods.getOrderGoodsNo())) {
reduce = reduce.add(orderChild.getWeight());
}
break;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数有误");
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
return OrderCancelResult.builder().orderStatusCode(orderStatusCode).childNoList(childNoList).build();
}
this.breakContractSettlementOwner(orderNo, orderStatusCode, param.getCancelType());
/**
* 货主取消未拉运吨数的货单
* @param orderNo
* @param orderStatusCode
* @return
*/
public OrderCancelResult cancelOrderAndOrderGoods(String orderNo, Integer orderStatusCode) {
log.info("2:货主取消未拉运吨数的货单");
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
log.info("执行货主取消订单更改状态");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
for (String childNo : childNoList) {
// 订单取消
orderChildPostService.orderCancel(childNo);
orderGoodsDao.updateEntityByKey(update);
}
return OrderCancelResult.builder().orderStatusCode(orderStatusCode).build();
}
return childNoList;
/**
* 货主只取消订单
* @param orderNo
* @param orderStatusCode
* @return
*/
private OrderCancelResult cancelOrder(String orderNo, Integer orderStatusCode) {
List<OrderGoods> orderGoodsList;
log.info("1:货主只取消订单");
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
}
return OrderCancelResult.builder().orderStatusCode(orderStatusCode).build();
}
public void backFillTonnage(OrderGoods orderGoods, BigDecimal weight) {
......@@ -424,6 +426,8 @@ public class OrderCancelComponent implements InitializingBean {
statusCodeMap.put(OrderEnum.Status.POST_ORDER.getCode(), OrderEnum.Status.POST_ORDER.getName());
statusCodeMap.put(OrderEnum.Status.ON_ORDER.getCode(), OrderEnum.Status.ON_ORDER.getName());
statusCodeMap.put(OrderEnum.Status.IN_TRANSIT.getCode(), OrderEnum.Status.IN_TRANSIT.getName());
cancelTypeMap.put(1, this::cancelOrder);
cancelTypeMap.put(2, this::cancelOrderAndOrderGoods);
cancelTypeMap.put(3, this::cancelOrderAndOrderGoodsAndOrderChild);
}
}
package com.clx.performance.component;
import cn.hutool.json.JSONUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.service.settle.SettlementOwnerService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@AllArgsConstructor
public class OwnerAccountComponent {
private final SettlementOwnerDetailService settlementOwnerDetailService;
private final OwnerAccountService ownerAccountService;
private final SettlementOwnerService settlementOwnerService;
private final OrderFeign orderFeign;
public void thawOwnerAccountByOrderNo(String orderNo) {
Boolean flag = settlementOwnerDetailService.thawAndLockSettlement(orderNo);
if (flag) {
log.info("当前存在在途运单");
orderFeign.saveOrderSettlementJobRecord(orderNo);
return;
}
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
Integer invoiceType = settlementOwnerDetailService.getInvoiceType(orderNo);
//1 网运单 2 普通单
log.info("invoiceType={}", invoiceType);
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(invoiceType)) {
log.info("执行普通单解冻");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
} else {
log.info("执行网运单解冻");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
}
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
//通知结算单锁定
settlementOwnerService.updateStatusByOrderNo(orderNo, 1, 10, 20);
}
}
......@@ -115,4 +115,55 @@ public class RabbitBeanConfig {
public Binding orderCancelExchangeBind() {
return BindingBuilder.bind(orderCancelQueue()).to(orderCancelExchange()).with(RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY);
}
/**
* 运单同步网络货运队列
* @return
*/
@Bean
public Queue orderChildSyncTransportQueue() {
return new Queue(RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_QUEUE, true, false, false);
}
/**
* 运单同步网络货运交换机
**/
@Bean
public DirectExchange orderChildSyncTransportExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_EXCHANGE);
}
/**
* 运单同步网络货运绑定
*/
@Bean
public Binding orderChildSyncTransportExchangeBind() {
return BindingBuilder.bind(orderChildSyncTransportQueue()).to(orderChildSyncTransportExchange()).with(RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_ROUTE_KEY);
}
/**
* 处理延迟消息orderGoodsTruckBind
* @return
*/
@Bean
public Queue orderGoodsTruckBindQueue() {
return new Queue(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_QUEUE, true, false, false);
}
/**
* 处理延迟消息orderGoodsTruckBind
**/
@Bean
public CustomExchange orderGoodsTruckBindExchange() {
Map<String, Object> arguments = new HashMap<>();
//设置路由模式 direct模式
arguments.put("x-delayed-type", "direct");
return new CustomExchange(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_EXCHANGE,"x-delayed-message", true, false, arguments);
}
//绑定交换机,队列和routingKey
@Bean
public Binding orderGoodsTruckBindBindingDelayedExchange(@Qualifier("orderGoodsTruckBindQueue")Queue queue,@Qualifier("orderGoodsTruckBindExchange")CustomExchange customExchange) {
return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY).noargs();
}
}
package com.clx.performance.config.nbbank;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "nbbank")
public class NbBankConfig {
private String appKey = "77667c76_3503_4c04_95f7_fc10938c7942";
}
......@@ -63,11 +63,24 @@ public class RabbitKeyConstants {
public static final String ORDER_LARGE_SCREEN_QUEUE ="clx-order.order.large.screen.queue";
public static final String ORDER_CHILD_SYNC_TRANSPORT_QUEUE ="clx-order.order.child.sync.transport.queue";
public static final String ORDER_CHILD_SYNC_TRANSPORT_EXCHANGE ="clx-order.order.child.sync.transport.exchange";
public static final String ORDER_CHILD_SYNC_TRANSPORT_ROUTE_KEY ="clx-order.order.child.sync.transport.route.key";
public static final String ORDER_THAW_SETTLEMENT_LAZY_EXCHANGE ="clx-order.thaw.settlement.lazy.exchange";
public static final String ORDER_THAW_SETTLEMENT_LAZY_ROUTE_KEY ="clx-order.thaw.settlement.lazy.route.key";
// 预付运费和保证金 自动冻结 触发消息队列
public static final String FREEZE_TRIGGER_EXCHANGE = "clx-order.freeze.trigger.exchange";
public static final String FREEZE_TRIGGER_QUEUE = "clx-order.freeze.trigger.queue";
public static final String FREEZE_TRIGGER_ROUTING_KEY = "clx-order.freeze.trigger.routing.key";
public static final String ORDER_TRUCK_BIND_LAZY_EXCHANGE ="clx-order.truck.bind.lazy.exchange";
public static final String ORDER_TRUCK_BIND_LAZY_QUEUE ="clx-order.truck.bind.lazy.queue";
public static final String ORDER_TRUCK_BIND_LAZY_ROUTE_KEY ="clx-order.truck.bind.lazy.route.key";
}
......@@ -2,7 +2,6 @@ package com.clx.performance.controller.feign;
import com.clx.performance.param.pc.OrderCancelFeignParam;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
......@@ -26,14 +25,9 @@ public class OrderCancelFeignController {
private final OrderCancelService orderCancelService;
@ApiOperation(value = "承运发起订单取消货主端进行确认", notes = "<br>By:胡宇帆")
@ApiOperation(value = "承运发起订单取消货主端进行确认", notes = "<br>By:胡宇帆")
@PostMapping("/orderCancel")
public Result<Object> orderCancel(@RequestBody OrderCancelFeignParam param) {
// OrderCancelParam cancelParam = new OrderCancelParam();
// cancelParam.setOrderNo(param.getOrderNo());
// cancelParam.setCancelType(3);
// cancelParam.setCreateByType(1);
// orderCancelService.platformCancelOrderPrePC(cancelParam);
orderCancelService.ownerConfirmCancelOrderPre(param.getOrderNo());
return Result.ok();
}
......
......@@ -34,12 +34,12 @@ public class OrderCancelController {
private final OrderCancelService orderCancelService;
@ApiOperation(value = "承运端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/platformCancelOrderPre")
public Result<Object> platformCancelOrderPre(@RequestBody OrderCancelParam param) {
orderCancelService.platformCancelOrderPre(param);
return Result.ok();
}
// @ApiOperation(value = "承运端取消订单", notes = "<br>By:胡宇帆")
// @PostMapping("/platformCancelOrderPre")
// public Result<Object> platformCancelOrderPre(@RequestBody OrderCancelParam param) {
// orderCancelService.platformCancelOrderPre(param);
// return Result.ok();
// }
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre")
......
package com.clx.performance.controller.pc.borrower.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.service.borrower.BorrowerConfigService;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
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;
import java.util.List;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/borrowerConfig")
@Validated
@Api(tags = "承运端-借出方借款配置")
@AllArgsConstructor
public class CarrierBorrowerConfigController {
private final BorrowerConfigService borrowerConfigService;
@ApiOperation(value = "新增借出方配置", notes = "<br>By:艾庆国")
@PostMapping("/saveBorrowerConfig")
@UnitCovert
public Result<Void> saveBorrowerConfig(@RequestBody @Validated BorrowerConfigAddParam param) {
borrowerConfigService.saveBorrowerConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新借出方配置", notes = "<br>By:艾庆国")
@PostMapping("/updateBorrowerConfig")
public Result<Void> updateBorrowerConfig(@RequestBody @Validated BorrowerConfigUpdateParam param) {
borrowerConfigService.updateBorrowerConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新借出方配置状态", notes = "<br>By:艾庆国")
@PostMapping("/updateStatus")
public Result<Void> updateStatus(@RequestBody @Validated BorrowerConfigStatusUpdateParam param) {
borrowerConfigService.updateStatus(param);
return Result.ok();
}
@ApiOperation(value = "更新删除借出方配置", notes = "<br>By:艾庆国")
@PostMapping("/updateDelete")
public Result<Void> updateDelete(@RequestBody @Validated BorrowerConfigDeleteUpdateParam param) {
borrowerConfigService.updateDelete(param);
return Result.ok();
}
@ApiOperation(value = "分页搜索借出方配置列表",notes = "<br>By:艾庆国")
@PostMapping("/pageBorrower")
public Result<PageData<BorrowerConfigVO>> pageBorrowerConfig(@RequestBody @Validated PageBorrowerConfigParam param) {
IPage<BorrowerConfigVO> page = borrowerConfigService.pageBorrowerConfig(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "查询所有借出方配置列表",notes = "<br>By:艾庆国")
@PostMapping("/ListBorrowerConfig")
public Result<List<BorrowerConfigVO>> ListBorrowerConfig() {
return Result.ok(borrowerConfigService.ListBorrowerConfig());
}
}
package com.clx.performance.controller.pc.borrower.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.service.borrower.BorrowerService;
import com.clx.performance.service.impl.borrower.BorrowerServiceImpl;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
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;
import java.util.List;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/borrower")
@Validated
@Api(tags = "承运端-借出方配置")
@AllArgsConstructor
public class CarrierBorrowerController {
private final BorrowerService borrowerService;
@ApiOperation(value = "新增借出方", notes = "<br>By:艾庆国")
@PostMapping("/saveBorrower")
@UnitCovert
public Result<Void> saveBorrower(@RequestBody @Validated BorrowerAddParam param) {
borrowerService.saveBorrower(param);
return Result.ok();
}
@ApiOperation(value = "更新借出方", notes = "<br>By:艾庆国")
@PostMapping("/updateBorrower")
public Result<Void> updateBorrower(@RequestBody @Validated BorrowerUpdateParam param) {
borrowerService.updateBorrower(param);
return Result.ok();
}
@ApiOperation(value = "更新借出方状态", notes = "<br>By:艾庆国")
@PostMapping("/updateStatus")
public Result<Void> updateStatus(@RequestBody @Validated BorrowerStatusUpdateParam param) {
borrowerService.updateStatus(param);
return Result.ok();
}
@ApiOperation(value = "更新删除借出方", notes = "<br>By:艾庆国")
@PostMapping("/updateDelete")
public Result<Void> updateDelete(@RequestBody @Validated BorrowerDeleteUpdateParam param) {
borrowerService.updateDelete(param);
return Result.ok();
}
@ApiOperation(value = "分页搜索借出方列表",notes = "<br>By:艾庆国")
@PostMapping("/pageBorrower")
public Result<PageData<BorrowerVO>> pageBorrower(@RequestBody @Validated PageBorrowerParam param) {
IPage<BorrowerVO> page = borrowerService.pageBorrower(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "查询所有借出方列表",notes = "<br>By:艾庆国")
@PostMapping("/ListBorrower")
public Result<List<BorrowerVO>> ListBorrower() {
return Result.ok(borrowerService.ListBorrower());
}
}
......@@ -162,7 +162,7 @@ public class OwnerAccountController {
@ApiOperation(value = "创建账户", notes = "<br>By:胡宇帆")
@PostMapping("/createAccount")
public Result<Object> createAccount(CreteAccountParam param) {
public Result<Object> createAccount(@RequestBody CreteAccountParam param) {
ownerAccountService.createAccount(param);
return Result.ok();
}
......
......@@ -18,7 +18,7 @@ import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusDTO;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService;
import com.clx.performance.service.settle.SettlementOwnerService;
......@@ -56,6 +56,9 @@ public class TransportSyncController {
private final SettlementOwnerService settlementOwnerService;
private final OrderChildSyncTransportRecordService childSyncTransportRecordService;
/**
* 支付结果
* @param param
......@@ -103,11 +106,17 @@ public class TransportSyncController {
log.info("riskStatusNotify 原始报文:{}", bean);
String decrypt = ThirdComponent.decrypt(bean.getData());
log.info("riskStatusNotify 解密后:{}", decrypt);
ThirdOrderChildRiskStatusParam invoicingStatusNotifyDTO = JSONUtil.toBean(decrypt, ThirdOrderChildRiskStatusParam.class);
ThirdOrderChildRiskStatusDTO invoicingStatusNotifyDTO = JSONUtil.toBean(decrypt, ThirdOrderChildRiskStatusDTO.class);
return ThirdComponent.encrypt(JSON.toJSONString(Result.ok()));
}
@ApiOperation(value = "addOrderChildSyncTransportRecord", notes = "<br>By:胡宇帆")
@GetMapping("/addOrderChildSyncTransportRecord")
public Result<Object> syncTest(@RequestParam("id") Integer id) {
SettlementDriverDetail driverDetail = settlementDriverDetailDao.getEntityByKey(id).get();
childSyncTransportRecordService.addOrderChildSyncTransportRecord(driverDetail);
return Result.ok();
}
@ApiOperation(value = "syncTest", notes = "<br>By:胡宇帆")
@GetMapping("/syncTest")
......
package com.clx.performance.controller.temp;
import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: aiqingguo
* @Description: 临时接口
* @Date: 2023-8-21 12:10:16
* @Version: 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/temp/bank")
public class TempBankController {
@Autowired
private NbBankService bankService;
@ApiOperation(value = "directBankTransferOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/directBankTransferOrder", method = RequestMethod.POST)
public Result<NbBankOrderPayResultVO> directBankTransferOrder() throws Exception {
return Result.ok(bankService.orderPay(1));
}
@ApiOperation(value = "unionPayDirectOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/unionPayDirectOrder", method = RequestMethod.POST)
public Result<NbBankOrderPayResultVO> unionPayDirectOrder() throws Exception {
return Result.ok(bankService.orderPay(2));
}
@ApiOperation(value = "queryOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/queryOrderTest", method = RequestMethod.POST)
public Result<NbBankOrderPayStatusResultVO> queryOrderTest(String merSeqNo) throws Exception {
return Result.ok(bankService.getOrderStatus(merSeqNo));
}
}
......@@ -5,6 +5,7 @@ import com.clx.performance.extranal.transport.TransportService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.param.feign.transport.OrderChildPaySyncParam;
import com.clx.performance.param.feign.transport.OwnerSettlementSyncParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam;
import com.clx.performance.service.TempService;
import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO;
......@@ -109,4 +110,15 @@ public class TempController {
return Result.ok();
}
@ApiOperation(value = "获取风控状态 (临时接口)", notes = "<br>By:艾庆国")
@RequestMapping(value = "/getRiskStatus", method = RequestMethod.POST)
public Result<Void> getRiskStatus(String childNo) {
ThirdOrderChildRiskStatusParam param = ThirdOrderChildRiskStatusParam.builder().build();
param.setChildNo(childNo);
HttpDTO httpDTO = transportFeignService.getRiskStatus(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
log.info("{}", decrypt);
return Result.ok();
}
}
package com.clx.performance.controller.thirdparty;
import com.alibaba.fastjson.JSON;
import com.clx.performance.service.thirdparty.nbbank.NbBankNotifyService;
import com.nbopen.api.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping(value="/nbbank")
@Api(tags = "宁波银行回调 (易付通)")
public class NbBankController {
@Autowired
private NbBankNotifyService nbBankNotifyService;
@ApiOperation(value = "notify", notes = "<br>By:艾庆国")
@RequestMapping(value = "/notify", method = RequestMethod.POST)
public Object notify(@RequestBody Map<String, Object> body) throws Exception {
try {
nbBankNotifyService.payNotify(JSON.toJSONString(body));
return getResultSuc();
}catch (Exception e){
e.printStackTrace();
return getResultFail();
}
}
private Object getResultSuc() throws Exception {
Map<String, String> data = new HashMap<>();
data.put("errorCode", "000000");
data.put("errorMsg", "成功");
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey("77667c76_3503_4c04_95f7_fc10938c7942");
requestApiData.setData(data);
requestApiData.setServiceId("notifyMerchant");
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("加密前: "+ JSON.toJSONString(request));
SDKResponse result = NBOpenSDK.encryptMessage(request);
log.info("加密后: "+JSON.toJSONString(result));
return result.getData();
}
private Object getResultFail() throws Exception {
Map<String, String> data = new HashMap<>();
data.put("errorCode", "ER001");
data.put("errorMsg", "失败");
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey("77667c76_3503_4c04_95f7_fc10938c7942");
requestApiData.setData(data);
requestApiData.setServiceId("notifyMerchant");
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("加密前: "+ JSON.toJSONString(request));
SDKResponse result = NBOpenSDK.encryptMessage(request);
log.info("加密后: "+JSON.toJSONString(result));
return result.getData();
}
}
package com.clx.performance.dao;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.OrderChildSyncTransportInvoiceRecordMapper;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import java.util.List;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
public interface OrderChildSyncTransportInvoiceRecordDao extends BaseDao<OrderChildSyncTransportInvoiceRecordMapper, OrderChildSyncTransportInvoiceRecord, Integer> {
List<OrderChildSyncTransportInvoiceRecord> selectListForJob();
}
......@@ -31,6 +31,8 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code);
void updateOrderGoodsBindStatus(List<String> orderGoodsList, Integer code);
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, List<String> truckList);
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, String truckNo);
......
package com.clx.performance.dao.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.borrower.BorrowerConfigMapper;
import com.clx.performance.model.borrower.BorrowerConfig;
import com.clx.performance.param.pc.borrower.PageBorrowerConfigParam;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借款配置
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface BorrowerConfigDao extends BaseDao<BorrowerConfigMapper, BorrowerConfig, Integer> {
boolean update(BorrowerConfig item);
boolean updateStatus(BorrowerConfig item);
boolean updateDelete(BorrowerConfig item);
Optional<BorrowerConfig> selectByBorrowerId(Integer borrowerId);
List<BorrowerConfig> listEnable();
IPage<BorrowerConfigVO> pageByParam(PageBorrowerConfigParam param);
}
package com.clx.performance.dao.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.borrower.BorrowerMapper;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.param.pc.borrower.PageBorrowerParam;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface BorrowerDao extends BaseDao<BorrowerMapper, Borrower, Integer> {
boolean update(Borrower item);
boolean updateStatus(Borrower item);
boolean updateDelete(Borrower item);
Optional<Borrower> selectByName(String name);
List<Borrower> listEnable();
IPage<BorrowerVO> pageByParam(PageBorrowerParam param);
}
package com.clx.performance.dao.impl;
import com.clx.performance.enums.TransportSyncTypeEnum;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.mapper.OrderChildSyncTransportInvoiceRecordMapper;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
@Repository
public class OrderChildSyncTransportInvoiceRecordDaoImpl extends BaseDaoImpl<OrderChildSyncTransportInvoiceRecordMapper, OrderChildSyncTransportInvoiceRecord, Integer> implements OrderChildSyncTransportInvoiceRecordDao {
@Override
public List<OrderChildSyncTransportInvoiceRecord> selectListForJob() {
return baseMapper.selectList(null);
}
}
......@@ -87,6 +87,15 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
);
}
@Override
public void updateOrderGoodsBindStatus(List<String> orderGoodsList, Integer code) {
update(lUdWrapper()
.in(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsList)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.set(OrderGoodsTruckBind::getStatus, code)
);
}
@Override
public void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, List<String> truckList) {
update(lUdWrapper()
......
package com.clx.performance.dao.impl.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.borrower.BorrowerConfigDao;
import com.clx.performance.enums.borrower.BorrowerConfigEnum;
import com.clx.performance.enums.borrower.BorrowerEnum;
import com.clx.performance.mapper.borrower.BorrowerConfigMapper;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.model.borrower.BorrowerConfig;
import com.clx.performance.param.pc.borrower.PageBorrowerConfigParam;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借款配置
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Repository
public class BorrowerConfigDaoImpl extends BaseDaoImpl<BorrowerConfigMapper, BorrowerConfig, Integer> implements BorrowerConfigDao {
@Override
public boolean update(BorrowerConfig item) {
return update(lUdWrapper()
.eq(BorrowerConfig::getId, item.getId())
.set(BorrowerConfig::getBorrowerId, item.getBorrowerId())
.set(BorrowerConfig::getBorrowerName, item.getBorrowerName())
.set(BorrowerConfig::getType, item.getType())
.set(BorrowerConfig::getDay, item.getDay())
.set(BorrowerConfig::getOpUserNo, item.getOpUserNo())
.set(BorrowerConfig::getOpUserName, item.getOpUserName())
.set(BorrowerConfig::getOpTime, item.getOpTime())
);
}
@Override
public boolean updateStatus(BorrowerConfig item) {
return update(lUdWrapper()
.eq(BorrowerConfig::getId, item.getId())
.set(BorrowerConfig::getStatus, item.getStatus())
.set(BorrowerConfig::getOpUserNo, item.getOpUserNo())
.set(BorrowerConfig::getOpUserName, item.getOpUserName())
.set(BorrowerConfig::getOpTime, item.getOpTime())
);
}
@Override
public boolean updateDelete(BorrowerConfig item) {
return update(lUdWrapper()
.eq(BorrowerConfig::getId, item.getId())
.set(BorrowerConfig::getDeleteStatus, item.getDeleteStatus())
.set(BorrowerConfig::getOpUserNo, item.getOpUserNo())
.set(BorrowerConfig::getOpUserName, item.getOpUserName())
.set(BorrowerConfig::getOpTime, item.getOpTime())
);
}
@Override
public Optional<BorrowerConfig> selectByBorrowerId(Integer borrowerId) {
return Optional.of(borrowerId)
.map(item -> lQrWrapper()
.eq(BorrowerConfig::getBorrowerId, item)
.eq(BorrowerConfig::getDeleteStatus, BorrowerConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<BorrowerConfig> listEnable() {
return list(lQrWrapper()
.eq(BorrowerConfig::getDeleteStatus, BorrowerConfigEnum.DeleteStatus.NO.getCode())
.eq(BorrowerConfig::getStatus, BorrowerConfigEnum.Status.ENABLE.getCode())
);
}
@Override
public IPage<BorrowerConfigVO> pageByParam(PageBorrowerConfigParam param) {
Page<BorrowerConfigVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.borrower.BorrowerDao;
import com.clx.performance.enums.borrower.BorrowerEnum;
import com.clx.performance.mapper.borrower.BorrowerMapper;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.param.pc.borrower.PageBorrowerParam;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Repository
public class BorrowerDaoImpl extends BaseDaoImpl<BorrowerMapper, Borrower, Integer> implements BorrowerDao {
@Override
public boolean update(Borrower item) {
return update(lUdWrapper()
.eq(Borrower::getId, item.getId())
.set(Borrower::getName, item.getName())
.set(Borrower::getBankName, item.getBankName())
.set(Borrower::getBankCardNo, item.getBankCardNo())
.set(Borrower::getOpUserNo, item.getOpUserNo())
.set(Borrower::getOpUserName, item.getOpUserName())
.set(Borrower::getOpTime, item.getOpTime())
);
}
@Override
public boolean updateStatus(Borrower item) {
return update(lUdWrapper()
.eq(Borrower::getId, item.getId())
.set(Borrower::getStatus, item.getStatus())
.set(Borrower::getOpUserNo, item.getOpUserNo())
.set(Borrower::getOpUserName, item.getOpUserName())
.set(Borrower::getOpTime, item.getOpTime())
);
}
@Override
public boolean updateDelete(Borrower item) {
return update(lUdWrapper()
.eq(Borrower::getId, item.getId())
.set(Borrower::getDeleteStatus, item.getDeleteStatus())
.set(Borrower::getOpUserNo, item.getOpUserNo())
.set(Borrower::getOpUserName, item.getOpUserName())
.set(Borrower::getOpTime, item.getOpTime())
);
}
@Override
public Optional<Borrower> selectByName(String name) {
return Optional.of(name)
.map(item -> lQrWrapper()
.eq(Borrower::getName, item)
.eq(Borrower::getDeleteStatus, BorrowerEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<Borrower> listEnable() {
return list(lQrWrapper()
.eq(Borrower::getDeleteStatus, BorrowerEnum.DeleteStatus.NO.getCode())
.eq(Borrower::getStatus, BorrowerEnum.Status.ENABLE.getCode())
);
}
@Override
public IPage<BorrowerVO> pageByParam(PageBorrowerParam param) {
Page<BorrowerVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.nbbank;
import com.clx.performance.dao.nbbank.NbBankRecordDao;
import com.clx.performance.mapper.nbbank.NbBankRecordMapper;
import com.clx.performance.model.nbbank.NbBankRecord;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Repository
public class NbBankRecordRecordDaoImpl extends BaseDaoImpl<NbBankRecordMapper, NbBankRecord, Integer> implements NbBankRecordDao {
}
package com.clx.performance.dao.nbbank;
import com.clx.performance.mapper.nbbank.NbBankRecordMapper;
import com.clx.performance.model.nbbank.NbBankRecord;
import com.msl.common.dao.BaseDao;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface NbBankRecordDao extends BaseDao<NbBankRecordMapper, NbBankRecord, Integer> {
}
package com.clx.performance.dto;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Builder
public class OrderCancelResult {
private Integer orderStatusCode;
private List<String> childNoList;
}
package com.clx.performance.dto;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsCancelParam;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Builder
public class OrderGoodsCancelDTO {
private OrderGoodsCancelParam orderGoodsCancelParam;
private Integer orderGoodsStatus;
private OrderGoods orderGoods;
private List<String> childNoList;
}
......@@ -10,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@FeignClient(name = "transport-service-yitu", url = "${transport-service.host}", configuration = FeignInterceptor.class)
public interface TransportFeignService {
......@@ -25,10 +23,10 @@ public interface TransportFeignService {
/**
* 获取风控状态
* @return
* @see com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam
* @see ThirdOrderChildRiskStatusDTO
*/
@RequestMapping(value = "/transport-service/thirdParty/order/getRiskStatus", method = RequestMethod.POST)
HttpDTO getRiskStatus(@RequestBody @NotBlank(message = "运单编号不能为空") String childNo);
HttpDTO getRiskStatus(@RequestBody ThirdOrderChildRiskStatusParam param);
/**
* 运单支付运费同步
......@@ -38,10 +36,11 @@ public interface TransportFeignService {
/**
* 获取运单开票状态
* @return 0-未申请,10-已申请,20-审核失败,30-已开票
* @return
* @see ThirdOrderChildInvoiceStatusDTO
*/
@RequestMapping(value = "/transport-service/thirdParty/order/getInvoiceStatus", method = RequestMethod.POST)
Result<Integer> getInvoiceStatus(@RequestBody @NotBlank(message = "运单编号不能为空") String childNo);
HttpDTO getInvoiceStatus(@RequestBody ThirdOrderChildInvoiceStatusParam param);
/**
* 货主结算单同步 (只推同一货主)
......
package com.clx.performance.job;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.dto.OrderChildSyncResultDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TransportSyncTypeEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.listener.OrderChildSyncTransportListener;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam;
import com.msl.common.result.Result;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.LinkedList;
import java.util.List;
@Slf4j
@Component
@AllArgsConstructor
public class OrderChildSyncTransportInvoiceExceptionJob {
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final OrderChildSyncTransportListener orderChildPaySync;
private final OrderChildDao orderChildDao;
private final TransportFeignService transportFeignService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
/**
* 同步网络货运
*/
@XxlJob("orderChildSyncTransportInvoiceExceptionJob")
@Transactional(rollbackFor = Exception.class)
public void orderChildSyncTransportInvoiceExceptionJob() {
//只查询同步异常的网络货运任务
List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao.selectListForJob();
if (CollectionUtil.isEmpty(recordList)) {
return;
}
List<Integer> ids = new LinkedList<>();
for (OrderChildSyncTransportInvoiceRecord record : recordList) {
log.info("orderChildSyncTransportInvoiceExceptionJob执行:{}", JSONUtil.parse(record));
String data = transportFeignService.getRiskStatus(ThirdOrderChildRiskStatusParam.builder().childNo(record.getChildNo()).build()).getData();
String decrypt = ThirdComponent.decrypt(data);
Result result = JSONUtil.toBean(decrypt, Result.class);
if (result.succeed()) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(record.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
JSON json = JSONUtil.parse(result.getData());
Object status = json.getByPath("status");
ids.add(record.getId());
OrderChildSyncDTO bean = new OrderChildSyncDTO();
bean.setCode(0);
OrderChildSyncResultDTO dto = new OrderChildSyncResultDTO();
OrderChild orderChild = orderChildDao.getByChildNo(record.getChildNo()).get();
log.info("查询网络货运结果数据:{}", JSONUtil.parse(result));
if (ObjectUtil.equal(status, 1)) {
dto.setStatus(1);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ONLINE.getCode(), settlementDriverDetail);
} else if (ObjectUtil.equal(status, 0)){
dto.setStatus(2);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
}else if (ObjectUtil.equal(status, 2)){
// orderChildPaySync.transportOrderChildProcess(orderChild);
dto.setStatus(2);
bean.setData(dto);
orderChildPaySync.extracted(orderChild, bean, "", settlementOwnerDetail,
SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementDriverDetail);
} else {
Object riskReason = json.getByPath("riskReason");
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(json.getByPath("childNo").toString());
entity.setType(TransportSyncTypeEnum.Type.NO_PASS.getCode());
entity.setRemark(riskReason == null ? "" : riskReason.toString());
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
}
orderChildSyncTransportInvoiceRecordDao.deleteByKeys(ids);
}
}
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OwnerAccountDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementDriverEnum;
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.feign.TransportFeignService;
import com.clx.performance.model.*;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.dto.HttpDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* 承运同步网络货运运单
*/
@Slf4j
@Component
@AllArgsConstructor
public class OrderChildSyncTransportListener {
private final OrderGoodsDao orderGoodsDao;
private final TransportSyncService transportSyncService;
private final TransportFeignService transportFeignService;
private final OwnerRunningWaterRecordDao ownerRunningWaterRecordDao;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
private final OwnerAccountDao ownerAccountDao;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final SettlementMqService settlementMqService;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_QUEUE)
public void onMessage(String message) {
OrderChild orderChild = JSONUtil.toBean(message, OrderChild.class);
//是否通过风控,调用网络货运
try {
transportOrderChildProcess(orderChild);
} catch (Exception e) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,运单号{}, 错误信息{}", orderChild.getChildNo(), e.getMessage());
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(orderChild.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark(e.getMessage());
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
public void transportOrderChildProcess(OrderChild orderChild) {
Integer invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
HttpDTO httpDTOResult = transportFeignService.orderChildSync(param);
String decrypt = ThirdComponent.decrypt(httpDTOResult.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
extracted(orderChild, bean, JSONUtil.parse(bean).toString(), settlementOwnerDetail, invoiceType, settlementDriverDetail);
}
public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark,
SettlementOwnerDetail settlementOwnerDetail,
Integer invoiceType, SettlementDriverDetail settlementDriverDetail) {
if (null != bean && bean.getCode() == 0) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运成功,运单号为{}", orderChild.getChildNo());
if (null != bean.getData() && bean.getData().getStatus() == 1) {
//通过风控
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
;
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode())
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
;
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
//设置预付运费金额
BigDecimal ans = getPrepayFreightPay(orderChild.getSettlementWay(), settlementOwnerDetail, frozen);
BigDecimal subtract = frozen.subtract(takeOut);
log.info("冻结预付运费:{}, 扣除的流水总和:{}", frozen, takeOut);
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
settlementDriverDetail.setPrepayFreight(ans);
//冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} else {
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
//账户扣钱并生成扣除流水
generateTakeOutRunningWatter(orderChild, ans, settlementOwnerDetail, settlementDriverDetail);
try {
//网络货运钱包账户
networkDriverRunningWaterRecordService.generateNetworkDriverRunningWaterRecord(
settlementDriverDetail,
NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()
);
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
} catch (Exception e) {
log.info("运单同步网络货运生成司机运单结算流水失败:{}", e.getMessage());
}
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
}
}
} else {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
} else {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,变为普通单,运单号{}, 错误信息{}", orderChild.getChildNo(), remark);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(invoiceType)) {
if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
} else {
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
}
}
settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType);
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
// 发送mq 通过开票标识
settlementMqService.invoiceTypeSync(orderChild.getChildNo(), invoiceType);
}
private void generateTakeOutRunningWatter(OrderChild orderChild, BigDecimal ans, SettlementOwnerDetail settlementOwnerDetail, SettlementDriverDetail settlementDriverDetail) {
OwnerAccount account = null;
while (true) {
account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(orderChild.getOwnerUserNo(),
OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
OwnerAccount update = new OwnerAccount();
update.setId(account.getId());
update.setAccountBalance(ans);
update.setModifiedTime(account.getModifiedTime());
update.setFrozenBalance(ans);
Integer i = ownerAccountDao.updateOwnerAccountForConfirm(update);
if (null != i && i > 0) {
break;
}
}
account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(orderChild.getOwnerUserNo(),
OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
settlementOwnerDetail.setPrepayFreight(ans);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(orderChild.getOwnerName());
runningWaterRecord.setMobile(orderChild.getDriverMobile());
runningWaterRecord.setCreateBy("系统");
runningWaterRecord.setOrderNo(orderChild.getOrderNo());
runningWaterRecord.setOrderChildId(orderChild.getId());
runningWaterRecord.setOrderChildNo(orderChild.getChildNo());
runningWaterRecord.setRelationId(null);
runningWaterRecord.setAlterationBalance(ans);
runningWaterRecord.setFrozenBalance(account.getFrozenBalance());
runningWaterRecord.setUsableBalance(account.getUsableBalance());
runningWaterRecord.setTakeOutBalance(ans);
runningWaterRecord.setAccountBalance(account.getAccountBalance());
runningWaterRecord.setOwnerUserNo(account.getOwnerUserNo());
runningWaterRecord.setAccountType(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
runningWaterRecord.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode());
runningWaterRecord.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.TAKE_OUT.getCode()));
ownerRunningWaterRecordDao.saveEntity(runningWaterRecord);
}
private BigDecimal getPrepayFreightPay(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail, BigDecimal accountFrozenFreight) {
//订单结算方式为“装车净重”时
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) {
BigDecimal subtract = settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight());
if (accountFrozenFreight.compareTo(subtract) >= 0) {
return subtract;
} else {
return BigDecimal.ZERO;
}
} else {
if (accountFrozenFreight.compareTo(settlementOwnerDetail.getFreight()) >= 0) {
return settlementOwnerDetail.getFreight();
} else {
return BigDecimal.ZERO;
}
}
}
/**
* 结算金额
*/
private BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
/**
* 开票金额
*/
private BigDecimal invoiceFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,开票金额=实际净重*平台运费报价。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice());
}
}
}
package com.clx.performance.listener;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Component
@Slf4j
@AllArgsConstructor
public class OrderGoodsDriverBindListener {
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsDao orderGoodsDao;
@RabbitListener(queues = RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_QUEUE)
@Transactional(rollbackFor = Exception.class)
public void onMessage(String message) throws Exception {
OrderTruckBindCancelParam param = JSONUtil.toBean(message, OrderTruckBindCancelParam.class);
log.info("OrderGoodsDriverBindListener请求参数{}", JSONUtil.parse(param));
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {
String orderGoodsNo = param.getOrderGoodsNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get();
if (VehicleUsageEnum.Status.OWN.getCode().equals(orderGoods.getVehicleUsage())) {
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
}
} else if (StringUtils.isNotBlank(param.getOrderNo())) {
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
List<String> orderGoodsNoList = orderGoodsList.stream().filter(i -> VehicleUsageEnum.Status.OWN.getCode().equals(i.getVehicleUsage()))
.map(OrderGoods::getOrderGoodsNo).collect(Collectors.toList());
if (CollectionUtil.isEmpty(orderGoodsNoList)) {
return;
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNoList, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
}
}
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
public interface OrderChildSyncTransportInvoiceRecordMapper extends BaseMapper<OrderChildSyncTransportInvoiceRecord> {
}
package com.clx.performance.mapper.borrower;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.borrower.BorrowerConfig;
import com.clx.performance.param.pc.borrower.PageBorrowerConfigParam;
import com.clx.performance.sqlProvider.borrower.BorrowerConfigSqlProvider;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @Author: aiqinguo
* @Description: 借款配置
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Mapper
public interface BorrowerConfigMapper extends BaseMapper<BorrowerConfig> {
/**
* @see BorrowerConfigSqlProvider#pageByParam(Page, PageBorrowerConfigParam)
*/
@SelectProvider(type = BorrowerConfigSqlProvider.class, method = "pageByParam")
IPage<BorrowerConfigVO> pageByParam(@Param("page") Page<BorrowerConfigVO> page, @Param("param") PageBorrowerConfigParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.borrower;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.param.pc.borrower.PageBorrowerParam;
import com.clx.performance.sqlProvider.borrower.BorrowerSqlProvider;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Mapper
public interface BorrowerMapper extends BaseMapper<Borrower> {
/**
* @see BorrowerSqlProvider#pageByParam(Page, PageBorrowerParam)
*/
@SelectProvider(type = BorrowerSqlProvider.class, method = "pageByParam")
IPage<BorrowerVO> pageByParam(@Param("page") Page<BorrowerVO> page, @Param("param") PageBorrowerParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.nbbank;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.nbbank.NbBankRecord;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: aiqinguo
* @Description: 宁波银行请求记录
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Mapper
public interface NbBankRecordMapper extends BaseMapper<NbBankRecord> {
}
\ No newline at end of file
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_sync_transport_invoice_record")
public class OrderChildSyncTransportInvoiceRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("child_no")
@ApiModelProperty("运单编号")
private String childNo;
@TableField("remark")
@ApiModelProperty("备注")
private String remark;
@TableField("type")
@ApiModelProperty("备注 1: 未风控 2: 同步异常")
private Integer type;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@TableField("modified_time")
@ApiModelProperty("修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.model.borrower;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class Borrower implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String name; //借出方
private String bankName; //所属银行
private String bankCardNo; //银行账号
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer status; //状态:1启用 2禁用
private Long opUserNo; //操作人编码
private String opUserName; //操作人
private LocalDateTime opTime; //操作时间
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.borrower;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 借款配置
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class BorrowerConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer borrowerId; //借出方id
private String borrowerName; //借出方
private Integer type; //类型:1资金 2虚拟货币
private Integer day; //借款天数
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer status; //状态:1启用 2禁用
private Long opUserNo; //操作人编码
private String opUserName; //操作人
private LocalDateTime opTime; //操作时间
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.nbbank;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 宁波银行请求记录
* @Date: 2024/01/20 13:28:28
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class NbBankRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer type; //类型:1转账直连下单 2银联订单支付收款模式 3交易结果查询 4异步通知交易结果
private String merId; //商户号
private String merSeqNo; //流水号
private String transSeqNo; //第三方流水号
private Integer amount; //金额 (分)
private String param; //参数
private String result; //方法
private String errorCode; //错误码
private String errorMsg; //错误信息
private String transStatus; //交易状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
......@@ -28,10 +28,10 @@ public interface OrderCancelService {
* 平台取消订单前置(只修改订单状态)
* @param param
*/
void platformCancelOrderPre(OrderCancelParam param);
// void platformCancelOrderPre(OrderCancelParam param);
/**
* 修改订单状态后执行规划吨数
* 修改订单状态后执行归还吨数
* @param param
*/
void orderCancelProcess(OrderCancelParam param);
......
package com.clx.performance.service;
import com.msl.common.service.BaseService;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
public interface OrderChildSyncTransportInvoiceRecordService {
}
package com.clx.performance.service.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface BorrowerConfigService {
void saveBorrowerConfig(BorrowerConfigAddParam param);
void updateBorrowerConfig(BorrowerConfigUpdateParam param);
void updateStatus(BorrowerConfigStatusUpdateParam param);
void updateDelete(BorrowerConfigDeleteUpdateParam param);
IPage<BorrowerConfigVO> pageBorrowerConfig(PageBorrowerConfigParam param);
List<BorrowerConfigVO> ListBorrowerConfig();
}
package com.clx.performance.service.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface BorrowerService {
void saveBorrower(BorrowerAddParam param);
void updateBorrower(BorrowerUpdateParam param);
void updateStatus(BorrowerStatusUpdateParam param);
void updateDelete(BorrowerDeleteUpdateParam param);
IPage<BorrowerVO> pageBorrower(PageBorrowerParam param);
List<BorrowerVO> ListBorrower();
}
......@@ -13,6 +13,7 @@ import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
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.OrderGoodsDao;
......@@ -28,6 +29,7 @@ import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.*;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.enums.owner.FreezeSettingEnum;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -82,14 +84,13 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OwnerInfoService ownerInfoService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final OwnerAccountComponent ownerAccountComponent;
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerConfirmCancelOrderPre(String orderNo) {
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
if (CollectionUtil.isEmpty(orderGoodsList)) {
......@@ -98,122 +99,102 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
//1网运单 2普通单
Integer invoiceType = settlementOwnerDetailDao.getInvoiceType(orderNo);
log.info("invoiceType={}", invoiceType);
ThawAccountParam thawAccountParam = new ThawAccountParam();
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(invoiceType)) {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
} else {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
}
thawAccountParam.setOrderNo(orderNo);
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
this.ownerConfirmCancelProcess(orderNo);
return;
}
} else {
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, null);
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, null);
if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
//1网运单 2普通单
Integer invoiceType = settlementOwnerDetailDao.getInvoiceType(orderNo);
log.info("invoiceType={}", invoiceType);
ThawAccountParam thawAccountParam = new ThawAccountParam();
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(invoiceType)) {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
} else {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
}
thawAccountParam.setOrderNo(orderNo);
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
} else {
List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
List<String> childNoList = new LinkedList<>();
for (OrderChild orderChild : arriveSendChildList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
}
List<String> childNoList = new LinkedList<>();
for (OrderChild orderChild : arriveSendChildList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
}
if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
now, now,childNoList);
}
if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
now, now,childNoList);
}
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
List<OrderChild> orderChildren = orderChildMap.get(orderGoods.getOrderGoodsNo());
if (CollectionUtil.isEmpty(orderChildren)) {
//没有运单,直接是取消
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) != 0) {
//货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
List<OrderChild> orderChildren = orderChildMap.get(orderGoods.getOrderGoodsNo());
if (CollectionUtil.isEmpty(orderChildren)) {
//没有运单,直接是取消
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
List<OrderChild> orderChildrenListComplete = orderChildDao.selectOrderChildListByOrderGoodsNoAndStatusGE(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) {
//没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结
BigDecimal reduce = orderChildrenListComplete.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) != 0) {
//货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else {
List<OrderChild> orderChildrenListComplete = orderChildDao.selectOrderChildListByOrderGoodsNoAndStatusGE(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) {
//没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结
BigDecimal reduce = orderChildrenListComplete.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
} else {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//虽然没有余量,但是可以取消的运单都是未到达货源地的
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
}
} else {
//虽然没有余量,但是可以取消的运单都是未到达货源地的
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
}
}
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
}
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode);
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
throw new ServiceSystemException( PerformanceResultEnum.HTTP_ERROR,"货主取消订单失败,原因:远程调用取消订单失败");
}
this.ownerConfirmCancelProcess(orderNo);
//进行解冻账户
ownerAccountComponent.thawOwnerAccountByOrderNo(orderNo);
OrderTruckBindCancelParam bindCancelParam = new OrderTruckBindCancelParam();
bindCancelParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(bindCancelParam).toString().getBytes()).build();
message.getMessageProperties().setHeader("x-delay", 2000);
//执行解绑自有车辆处理逻辑,将绑定记录正常改为取消
rabbitTemplate.send(
RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_EXCHANGE, RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY, message
);
this.ownerConfirmCancelProcess(orderNo);
}
......@@ -273,8 +254,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
......@@ -332,9 +312,9 @@ public class OrderCancelServiceImpl implements OrderCancelService {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
}
// if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
// }
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
......@@ -349,6 +329,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<String> childNoList = orderCancelComponent.ownerProcess(param);
param.setChildNoList(childNoList);
OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
......@@ -357,10 +338,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
orderFeign.orderCancelReason(orderCancelReasonParam);
//TODO 注意判断普通单还是网运单 普通单类型 2 网运单 1
log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
......@@ -368,139 +347,149 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
);
}
/**
* 平台取消订单前置(只修改订单相关状态)
*
* @param param
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void platformCancelOrderPre(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
switch (param.getCancelType()) {
case 1: //单纯取消订单
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
ids.add(orderGoods.getId());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
}
break;
case 2: //取消未拉运吨数的货单
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//提取和剩余吨数一样,代表一直没人拉
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
break;
case 3: //取消未拉运+未到达货源地吨数
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtil.isEmpty(orderChildren)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
List<String > childNoList = new LinkedList<>();
for (OrderChild orderChild : orderChildren) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
}
if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "平台取消",
now, now, childNoList);
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = orderChildren.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
BigDecimal reduce = orderChildMap.get(orderGoods.getOrderGoodsNo())
.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
//当前产生可取消运单的吨数加货单剩余吨数如果等于货单提取的吨数,那么就是已取消
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
OrderTruckBindCancelParam bindCancelParam = new OrderTruckBindCancelParam();
bindCancelParam.setOrderNo(orderNo);
Message message2 = MessageBuilder.withBody(JSONUtil.parse(bindCancelParam).toString().getBytes()).build();
break;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数有误");
}
log.info("记录订单取消原因");
OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
orderCancelReasonParam.setOrderNo(orderNo);
orderCancelReasonParam.setReason(param.getCancelReason());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
orderFeign.orderCancelReason(orderCancelReasonParam);
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
log.info("执行订单状态更改");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
log.info("执行承运端订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(param).toString().getBytes()).build();
message2.getMessageProperties().setHeader("x-delay", 2000);
//执行解绑自有车辆处理逻辑,将绑定记录正常改为取消
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_EXCHANGE, RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY, message2
);
}
// /**
// * 平台取消订单前置(只修改订单相关状态)
// *
// * @param param
// */
// @Override
// @Transactional(rollbackFor = Exception.class)
// public void platformCancelOrderPre(OrderCancelParam param) {
// String orderNo = param.getOrderNo();
// List<OrderGoods> orderGoodsList = null;
// Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
// String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
// switch (param.getCancelType()) {
// case 1: //单纯取消订单
// if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
// }
// orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
//
// if (CollectionUtil.isNotEmpty(orderGoodsList)) {
// List<Integer> ids = new LinkedList<>();
// for (OrderGoods orderGoods : orderGoodsList) {
// if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
// orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
// }
// ids.add(orderGoods.getId());
// goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
//
// }
// orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
// ids);
// }
// break;
// case 2: //取消未拉运吨数的货单
// orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
//
// for (OrderGoods orderGoods : orderGoodsList) {
// OrderGoods update = new OrderGoods();
// update.setId(orderGoods.getId());
// //提取和剩余吨数一样,代表一直没人拉
// if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
// } else {
// orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
// }
// if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
// orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
// goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
// }
// goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
//
// orderGoodsDao.updateEntityByKey(update);
// }
// break;
//
// case 3: //取消未拉运+未到达货源地吨数
// List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
// if (CollectionUtil.isEmpty(orderChildren)) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
// }
// List<String > childNoList = new LinkedList<>();
// for (OrderChild orderChild : orderChildren) {
// //释放车辆
// driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
// childNoList.add(orderChild.getChildNo());
// }
// if (CollectionUtil.isNotEmpty(childNoList)) {
// orderChildDao.batchUpdateOrderChildStatus(
// OrderChildEnum.Status.OWNER_CANCEL.getCode(), "平台取消",
// now, now, childNoList);
// }
//
// orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
// Map<String, List<OrderChild>> orderChildMap = orderChildren.stream()
// .collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
//
// for (OrderGoods orderGoods : orderGoodsList) {
// OrderGoods update = new OrderGoods();
// update.setId(orderGoods.getId());
// if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
// } else {
// BigDecimal reduce = orderChildMap.get(orderGoods.getOrderGoodsNo())
// .stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
// //当前产生可取消运单的吨数加货单剩余吨数如果等于货单提取的吨数,那么就是已取消
// if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
// } else {
// orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
// }
// }
//
// if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
// orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
// }
// goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
//
// orderGoodsDao.updateEntityByKey(update);
// }
//
// break;
//
// default:
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数有误");
//
// }
//
// log.info("记录订单取消原因");
// OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
// orderCancelReasonParam.setOrderNo(orderNo);
// orderCancelReasonParam.setReason(param.getCancelReason());
// UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
// orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
// orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
// orderFeign.orderCancelReason(orderCancelReasonParam);
// //TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
//
// log.info("执行订单状态更改");
// if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
// }
// log.info("执行承运端订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
//
// Message message = MessageBuilder.withBody(JSONUtil.parse(param).toString().getBytes()).build();
// rabbitTemplate.send(
// RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
// );
// }
/**
* 执行订单取消后归还吨数
*
......@@ -523,178 +512,25 @@ public class OrderCancelServiceImpl implements OrderCancelService {
List<OrderGoods> orderGoodsList = null;
switch (param.getCancelType()) {
case 1: //单纯取消订单及货单
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
orderGoodsList = getOrderGoods(orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
break;
case 2: //取消未拉运吨数的货单及订单
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
orderGoodsList = getGoods(orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
break;
case 3: //取消未拉运+未到达货源地吨数
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(param.getChildNoList())) {
List<OrderChild> orderChildren = orderChildDao.selectInOrderChildNoList(param.getChildNoList());
orderChildMap = orderChildren.stream().collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
vehicleUsageMap.put(orderGoods.getTruckDemand(),
vehicleUsageMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
orderGoodsList = getOrderGoods(param, orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
break;
default:
return;
}
if (!orderFeign.rollbackOrderWeight(rollbackOrderWeightParam).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
}
// if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
// }
//订单取消恢复货单的剩余吨数为0
orderGoodsService.batchUpdateResidueWeight(orderGoodsList);
......@@ -703,6 +539,172 @@ public class OrderCancelServiceImpl implements OrderCancelService {
}
private List<OrderGoods> getOrderGoods(OrderCancelParam param, String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
List<OrderGoods> orderGoodsList;
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(param.getChildNoList())) {
List<OrderChild> orderChildren = orderChildDao.selectInOrderChildNoList(param.getChildNoList());
orderChildMap = orderChildren.stream().collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
vehicleUsageMap.put(orderGoods.getTruckDemand(),
vehicleUsageMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
}
private List<OrderGoods> getGoods(String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
}
private List<OrderGoods> getOrderGoods(String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
List<OrderGoods> orderGoodsList;
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
}
//订单取消增加自动冻结的消息触发
private void triggerAutoFreeze(Long ownerUserNo,String orderNo){
try{
......@@ -722,6 +724,11 @@ public class OrderCancelServiceImpl implements OrderCancelService {
}
}
/**
* 客服取消订单
* @param orderChildNo
* @param remark
*/
@Override
public void artificialCancelOrder(String orderChildNo, String remark) {
LocalDateTime now = LocalDateTime.now();
......
package com.clx.performance.service.impl;
import com.clx.performance.service.OrderChildSyncTransportInvoiceRecordService;
import org.springframework.stereotype.Service;
/**
* @author kavin
* Date 2024-01-03
* Time 10:17
*/
@Service
public class OrderChildSyncTransportInvoiceRecordServiceImpl implements OrderChildSyncTransportInvoiceRecordService {
}
......@@ -14,10 +14,12 @@ import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.dto.OrderGoodsCancelDTO;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
......@@ -36,6 +38,7 @@ import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.user.enums.driver.DriverInfoEnum;
......@@ -50,16 +53,18 @@ import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
......@@ -69,7 +74,7 @@ import java.util.stream.Collectors;
*/
@Service
@Slf4j
public class OrderGoodsServiceImpl implements OrderGoodsService {
public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBean {
@Autowired
private OrderGoodsDao orderGoodsDao;
......@@ -108,6 +113,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
private OrderChildLogService orderChildLogService;
@Autowired
private OrderChildPostService orderChildPostService;
@Autowired
private RabbitTemplate rabbitTemplate;
private static Map<Integer, Consumer<OrderGoodsCancelDTO>> orderGoodsCancelMap = new HashMap<>();
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
......@@ -504,150 +513,16 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
public void orderGoodsCancel(OrderGoodsCancelParam goodsCancelParam) {
String orderGoodsNo = goodsCancelParam.getOrderGoodsNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.HTTP_ERROR, "数据错误");
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
List<OrderChild> orderChildList = null;
BigDecimal residueWeight = null;
BigDecimal sum = BigDecimal.ZERO;
List<String> childNoList = new LinkedList<>();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
Integer cancelOperateType = goodsCancelParam.getCancelOperateType();
Integer orderGoodsStatus = OrderGoodsStatusEnum.Status.CANCEL.getCode();
switch (cancelOperateType) {
case 1:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单");
}
residueWeight = orderGoods.getResidueTransportWeight();
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(orderGoodsStatus);
orderGoodsDao.updateEntityByKey(update);
}
break;
case 2:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.ARRIVE_SEND.getCode()).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterOrderChildList)) {
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
now,now,childNoList);
}
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
}
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
break;
case 3:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode(),goodsCancelParam.getTruckList());
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.LOAD.getCode()).collect(Collectors.toList());
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(),"系统取消",
now, now, childNoList);
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
}
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(orderGoods.getResidueTransportWeight(), sum, orderGoodsStatus, orderGoods.getId());
}
break;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数类型有误");
//封装取消策略参数
OrderGoodsCancelDTO build = OrderGoodsCancelDTO.builder().orderGoodsCancelParam(goodsCancelParam)
.orderGoodsStatus(orderGoodsStatus).orderGoods(orderGoods)
.childNoList(childNoList).build();
//根据不同取消策略调用不同方法
orderGoodsCancelMap.get(goodsCancelParam.getCancelOperateType()).accept(build);
}
OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
orderCancelReasonParam.setOrderNo(goodsCancelParam.getOrderNo());
orderCancelReasonParam.setOrderGoodsNo(goodsCancelParam.getOrderGoodsNo());
......@@ -655,18 +530,179 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
//删除绑定记录
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
//记录取消意见
orderFeign.orderCancelReason(orderCancelReasonParam);
for (String childNo : childNoList) {
// 货单取消
orderChildPostService.orderGoodsCancel(childNo);
if (CollectionUtil.isNotEmpty(childNoList)) {
for (String childNo : childNoList) {
// 货单取消
orderChildPostService.orderGoodsCancel(childNo);
}
}
OrderTruckBindCancelParam bindCancelParam = new OrderTruckBindCancelParam();
bindCancelParam.setOrderGoodsNo(orderGoodsNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(bindCancelParam).toString().getBytes()).build();
message.getMessageProperties().setHeader("x-delay", 2000);
//执行解绑自有车辆处理逻辑,将绑定记录正常改为取消
rabbitTemplate.send(
RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_EXCHANGE, RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY, message
);
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.CANCEL.getName(), "");
}
private void cancelOperateThreeTypeStrategy(OrderGoodsCancelDTO dto) {
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
BigDecimal sum = BigDecimal.ZERO;
OrderGoods orderGoods = dto.getOrderGoods();
List<String> childNoList = dto.getChildNoList();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(),
OrderChildEnum.Status.DRIVER_CANCEL.getCode(), dto.getOrderGoodsCancelParam().getTruckList());
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<OrderChild> filterOrderChildList = orderChildList.stream().
filter(item -> item.getStatus() < OrderChildEnum.Status.LOAD.getCode()).collect(Collectors.toList());
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(),
DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(),"系统取消",
now, now, childNoList);
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
dto.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(orderGoods.getResidueTransportWeight(),
sum, dto.getOrderGoodsStatus(), orderGoods.getId());
}
}
private void cancelOperateTwoTypeStrategy(OrderGoodsCancelDTO dto) {
BigDecimal sum = BigDecimal.ZERO;
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
OrderGoods orderGoods = dto.getOrderGoods();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
List<String> childNoList = dto.getChildNoList();
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.ARRIVE_SEND.getCode()).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterOrderChildList)) {
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
now, now, childNoList);
}
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
dto.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
}
private void cancelOperateOneTypeStrategy(OrderGoodsCancelDTO dto) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
OrderGoods orderGoods = dto.getOrderGoods();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单");
}
BigDecimal residueWeight = dto.getOrderGoods().getResidueTransportWeight();
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(dto.getOrderGoodsStatus());
orderGoodsDao.updateEntityByKey(update);
}
}
/**
* 查看当前货单可取消吨数
* @param goodsCancelParam
......@@ -811,4 +847,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
List<Integer> collect = list.stream().map(OrderGoods::getId).collect(Collectors.toList());
orderGoodsDao.batchUpdateResidueWeight(collect,BigDecimal.ZERO);
}
@Override
public void afterPropertiesSet() throws Exception {
orderGoodsCancelMap.put(1, this::cancelOperateOneTypeStrategy);
orderGoodsCancelMap.put(2, this::cancelOperateTwoTypeStrategy);
orderGoodsCancelMap.put(3, this::cancelOperateThreeTypeStrategy);
}
}
......@@ -1213,7 +1213,4 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
}
}
public static void main(String[] args) {
}
}
package com.clx.performance.service.impl.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.borrower.BorrowerConfigDao;
import com.clx.performance.dao.borrower.BorrowerDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.borrower.BorrowerConfigEnum;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.model.borrower.BorrowerConfig;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.service.borrower.BorrowerConfigService;
import com.clx.performance.struct.borrower.BorrowerConfigStruct;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.msl.common.base.Optional;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Slf4j
@Service
public class BorrowerConfigServiceImpl implements BorrowerConfigService {
@Autowired
private BorrowerDao borrowerDao;
@Autowired
private BorrowerConfigDao borrowerConfigDao;
@Autowired
private BorrowerConfigStruct borrowerConfigStruct;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveBorrowerConfig(BorrowerConfigAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
// 重复验证
Optional<BorrowerConfig> borrowerConfigOptional = borrowerConfigDao.selectByBorrowerId(param.getBorrowerId());
if (borrowerConfigOptional.isPresent()) {
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_CONFIG_BORROWER_ID_EXIST);
}
Borrower borrower = borrowerDao.getEntityByKey(param.getBorrowerId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
BorrowerConfig borrowerConfig = new BorrowerConfig();
borrowerConfig.setBorrowerId(borrower.getId());
borrowerConfig.setBorrowerName(borrower.getName());
borrowerConfig.setType(param.getType());
borrowerConfig.setDay(param.getDay());
borrowerConfig.setOpUserNo(loginUserInfo.getUserNo());
borrowerConfig.setOpUserName(loginUserInfo.getUserName());
borrowerConfig.setOpTime(LocalDateTime.now());
borrowerConfigDao.saveEntity(borrowerConfig);
}
@Override
public void updateBorrowerConfig(BorrowerConfigUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
BorrowerConfig borrowerConfig = borrowerConfigDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 重复验证
Optional<BorrowerConfig> borrowerConfigOptional = borrowerConfigDao.selectByBorrowerId(param.getBorrowerId());
if (borrowerConfigOptional.isPresent() && !Objects.equals(borrowerConfig.getId(), borrowerConfigOptional.get().getId())) {
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_CONFIG_BORROWER_ID_EXIST);
}
Borrower borrower = borrowerDao.getEntityByKey(param.getBorrowerId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
borrowerConfig.setBorrowerId(borrower.getId());
borrowerConfig.setBorrowerName(borrower.getName());
borrowerConfig.setType(param.getType());
borrowerConfig.setDay(param.getDay());
borrowerConfig.setOpUserNo(loginUserInfo.getUserNo());
borrowerConfig.setOpUserName(loginUserInfo.getUserName());
borrowerConfig.setOpTime(LocalDateTime.now());
borrowerConfigDao.update(borrowerConfig);
}
@Override
public void updateStatus(BorrowerConfigStatusUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
BorrowerConfig borrowerConfig = borrowerConfigDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
borrowerConfig.setStatus(param.getStatus());
borrowerConfig.setOpUserNo(loginUserInfo.getUserNo());
borrowerConfig.setOpUserName(loginUserInfo.getUserName());
borrowerConfig.setOpTime(LocalDateTime.now());
borrowerConfigDao.updateStatus(borrowerConfig);
}
@Override
public void updateDelete(BorrowerConfigDeleteUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
BorrowerConfig borrowerConfig = borrowerConfigDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
borrowerConfig.setDeleteStatus(BorrowerConfigEnum.DeleteStatus.YES.getCode());
borrowerConfig.setOpUserNo(loginUserInfo.getUserNo());
borrowerConfig.setOpUserName(loginUserInfo.getUserName());
borrowerConfig.setOpTime(LocalDateTime.now());
borrowerConfigDao.updateDelete(borrowerConfig);
}
@Override
public IPage<BorrowerConfigVO> pageBorrowerConfig(PageBorrowerConfigParam param) {
return borrowerConfigDao.pageByParam(param);
}
@Override
public List<BorrowerConfigVO> ListBorrowerConfig() {
return borrowerConfigStruct.convert(borrowerConfigDao.listEnable());
}
}
package com.clx.performance.service.impl.borrower;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.borrower.BorrowerDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.borrower.BorrowerEnum;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.param.pc.borrower.*;
import com.clx.performance.service.borrower.BorrowerService;
import com.clx.performance.struct.borrower.BorrowerStruct;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.base.Optional;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqinguo
* @Description: 借出方
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Slf4j
@Service
public class BorrowerServiceImpl implements BorrowerService {
@Autowired
private BorrowerDao borrowerDao;
@Autowired
private BorrowerStruct borrowerStruct;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveBorrower(BorrowerAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
// 重复验证
Optional<Borrower> borrowerOptional = borrowerDao.selectByName(param.getName());
if (borrowerOptional.isPresent()) {
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_NAME_EXIST);
}
Borrower borrower = new Borrower();
borrower.setName(param.getName());
borrower.setBankName(param.getBankName());
borrower.setBankCardNo(param.getBankCardNo());
borrower.setOpUserNo(loginUserInfo.getUserNo());
borrower.setOpUserName(loginUserInfo.getUserName());
borrower.setOpTime(LocalDateTime.now());
borrowerDao.saveEntity(borrower);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateBorrower(BorrowerUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Borrower borrower = borrowerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
Optional<Borrower> borrowerOptional = borrowerDao.selectByName(param.getName());
if (borrowerOptional.isPresent() && !Objects.equals(borrower.getId(), borrowerOptional.get().getId())) {
throw new ServiceSystemException(PerformanceResultEnum.BORROWER_NAME_EXIST);
}
borrower.setName(param.getName());
borrower.setBankName(param.getBankName());
borrower.setBankCardNo(param.getBankCardNo());
borrower.setOpUserNo(loginUserInfo.getUserNo());
borrower.setOpUserName(loginUserInfo.getUserName());
borrower.setOpTime(LocalDateTime.now());
borrowerDao.update(borrower);
}
@Override
public void updateStatus(BorrowerStatusUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Borrower borrower = borrowerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
borrower.setStatus(param.getStatus());
borrower.setOpUserNo(loginUserInfo.getUserNo());
borrower.setOpUserName(loginUserInfo.getUserName());
borrower.setOpTime(LocalDateTime.now());
borrowerDao.updateStatus(borrower);
}
@Override
public void updateDelete(BorrowerDeleteUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Borrower borrower = borrowerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
borrower.setDeleteStatus(BorrowerEnum.DeleteStatus.YES.getCode());
borrower.setOpUserNo(loginUserInfo.getUserNo());
borrower.setOpUserName(loginUserInfo.getUserName());
borrower.setOpTime(LocalDateTime.now());
borrowerDao.updateDelete(borrower);
}
@Override
public IPage<BorrowerVO> pageBorrower(PageBorrowerParam param) {
return borrowerDao.pageByParam(param);
}
@Override
public List<BorrowerVO> ListBorrower() {
return borrowerStruct.convert(borrowerDao.listEnable());
}
}
package com.clx.performance.service.impl.settle;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.IdGenerateSnowFlake;
......@@ -217,7 +218,24 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
public IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(NetworkDriverPageParam param) {
Long userNo = TokenUtil.getLoginUserInfo().getUserNo();
param.setUserNo(userNo);
return networkDriverRunningWaterRecordDao.runningWaterList(param);
IPage<APPNetworkDriverRunningWaterRecordVO> page = networkDriverRunningWaterRecordDao.runningWaterList(param);
if (NetworkDriverAccountEnum.FundType.EXPENDITURE.getCode().equals(param.getFundType())) {
if (CollectionUtil.isNotEmpty(page.getRecords())) {
for (APPNetworkDriverRunningWaterRecordVO record : page.getRecords()) {
record.setAlterationBalance(record.getAlterationBalance().negate());
}
}
} else if (param.getFundType() == null ) {
if (CollectionUtil.isNotEmpty(page.getRecords())) {
for (APPNetworkDriverRunningWaterRecordVO record : page.getRecords()) {
if (NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getCode().equals( record.getRunningWaterType())){
record.setAlterationBalance(record.getAlterationBalance().negate());
}
}
}
}
return page;
}
@Override
......
......@@ -131,7 +131,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
}
else {
log.info("结初始化货主结算单");
log.info("拉运完成结初始化货主结算单");
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(), settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 拉运完成初始化
......
......@@ -2,56 +2,41 @@ package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OwnerAccountDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.settle.NetworkDriverAccountDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.enums.IdTypeEnum;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.enums.OwnerAccountEnum;
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.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerAccount;
import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.settle.NetworkCaseOutRecord;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementService;
import com.clx.performance.vo.feign.transport.ThirdOrderChildBrokerResultVO;
import com.msl.common.dto.HttpDTO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
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 org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class SettlementServiceImpl implements SettlementService {
@Autowired
private OrderChildDao orderChildDao;
@Autowired
......@@ -61,22 +46,13 @@ public class SettlementServiceImpl implements SettlementService {
@Autowired
private SettlementMqService settlementMqService;
@Autowired
private TransportSyncService transportSyncService;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private OwnerRunningWaterRecordDao ownerRunningWaterRecordDao;
@Autowired
private IdGenerateSnowFlake idGenerateSnowFlake;
@Autowired
private TransportFeignService transportFeignService;
@Autowired
private OwnerAccountDao ownerAccountDao;
@Autowired
private NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
private RabbitTemplate rabbitTemplate;
@Override
......@@ -96,71 +72,77 @@ public class SettlementServiceImpl implements SettlementService {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
} else {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
//是否通过风控,调用网络货运
ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
HttpDTO httpDTOResult = transportFeignService.orderChildSync(param);
String decrypt = ThirdComponent.decrypt(httpDTOResult.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
log.info("OrderChildSyncDTO信息为:{}", JSONUtil.parse(bean));
if (bean.getCode() == 0) {
Integer status = bean.getData().getStatus();
if (status == 1) {
//通过风控
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
;
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode())
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
;
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
//设置预付运费金额
BigDecimal ans = getPrepayFreightPay(orderChild.getSettlementWay(), settlementOwnerDetail, frozen);
BigDecimal subtract = frozen.subtract(takeOut);
log.info("冻结预付运费:{}, 扣除的流水总和:{}", frozen, takeOut);
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
settlementDriverDetail.setPrepayFreight(ans);
//冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} else {
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
//账户扣钱并生成扣除流水
generateTakeOutRunningWatter(orderChild, ans, settlementOwnerDetail, settlementDriverDetail);
try {
//网络货运钱包账户
networkDriverRunningWaterRecordService.generateNetworkDriverRunningWaterRecord(
settlementDriverDetail,
NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()
);
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
}catch (Exception e) {
log.info("运单同步网络货运生成司机运单结算流水失败:{}", e.getMessage());
}
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
}
}
} else {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
} else {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SYNC_ERROR);
}
//TODO 发送MQ异步
Message message = MessageBuilder.withBody(JSONUtil.parse(orderChild).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_EXCHANGE, RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_ROUTE_KEY, message
);
return;
// OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
// //是否通过风控,调用网络货运
// ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// HttpDTO httpDTOResult = transportFeignService.orderChildSync(param);
// String decrypt = ThirdComponent.decrypt(httpDTOResult.getData());
// OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
// log.info("OrderChildSyncDTO信息为:{}", JSONUtil.parse(bean));
// if (bean.getCode() == 0) {
// Integer status = bean.getData().getStatus();
// if (status == 1) {
// //通过风控
// List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
// BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
// return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
// && item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
// ;
// }).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
//
// BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> {
// return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode())
// && item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
// ;
// }).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
// //设置预付运费金额
// BigDecimal ans = getPrepayFreightPay(orderChild.getSettlementWay(), settlementOwnerDetail, frozen);
// BigDecimal subtract = frozen.subtract(takeOut);
// log.info("冻结预付运费:{}, 扣除的流水总和:{}", frozen, takeOut);
// invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
// settlementDriverDetail.setPrepayFreight(ans);
// //冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑
// if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
// settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
// settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
// } else {
// if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
// //账户扣钱并生成扣除流水
// generateTakeOutRunningWatter(orderChild, ans, settlementOwnerDetail, settlementDriverDetail);
// try {
// //网络货运钱包账户
// networkDriverRunningWaterRecordService.generateNetworkDriverRunningWaterRecord(
// settlementDriverDetail,
// NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()
// );
// //生成提现记录
// networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
// }catch (Exception e) {
// log.info("运单同步网络货运生成司机运单结算流水失败:{}", e.getMessage());
// }
//
// } else {
// settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
// settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
//
// }
// }
//
// } else {
// settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
// settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
// settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
// }
// } else {
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SYNC_ERROR);
//
// }
}
// 结算金额
......
package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.nbbank.NbBankRecordEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankNotifyService;
import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.msl.common.exception.ServiceSystemException;
import com.nbopen.api.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@Slf4j
@Service
public class NbBankNotifyServiceImpl implements NbBankNotifyService {
@Autowired
private NbBankService bankService;
@Autowired
private NbBankThirdpartyService nbBankThirdpartyService;
/**
* 支付回调
* 6.2异步通知交易结果
* 解密后
* {
* "data": {
* "clearDate": "20231205",
* "merId": "EFT33021200556315",
* "merSeqNo": "20231205165038",
* "payMethod": "L",
* "pyerInfList": [
* {
* "coreSeqNo": "",
* "customerId": "",
* "pyerAcctBankName": "",
* "pyerAcctBankNo": "",
* "pyerAcctName": "黑玫瑰",
* "pyerAcctNo": "86041110000076809",
* "signNo": "00",
* "transAmt": "0.01",
* "transDtTm": "2023-12-05 16:54:22"
* }
* ],
* "realTrxAmt": "0.01",
* "transDate": "20231205",
* "transSeqNo": "2023120516503906838128gg6DOzjP",
* "transStatus": "00",
* "trxAmt": "0.01"
* },
* "head": {
* "rqsJrnlNo": "16071726224843844",
* "rspCode": "000000",
* "rspDate": "2023-12-05",
* "rspMsg": "处理成功",
* "rspTime": "17:13:43:943"
* }
* }
*/
@Override
public void payNotify(String body) {
log.info("宁波银行回调, data:{}", JSON.toJSONString(body));
try {
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey("77667c76_3503_4c04_95f7_fc10938c7942");
requestApiData.setData(JSON.parseObject(body));
requestApiData.setServiceId("notifyMerchant");
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("宁波银行, 回调:{}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.decryptMessage(request);
log.info("宁波银行, 回调解密:{}", JSON.toJSONString(response));
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
nbBankThirdpartyService.recordSave(NbBankRecordEnum.Type.NOTIFY_MERCHANT.getCode(), request, response);
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(notifyMerchant), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
String merSeqNo = data.getString("merSeqNo");
String transSeqNo = data.getString("transSeqNo");
BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transStatus = data.getString("transStatus");
String signNo = data.getString("signNo");
// 回调
bankService.orderPayCallback(merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
}catch (Exception e){
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_NOTIFY_ERROR);
}
}
}
package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* 易付通
*/
@Slf4j
@Service
public class NbBankServiceImpl implements NbBankService {
@Autowired
private NbBankThirdpartyService bankThirdpartyService;
/**
* 订单支付
* @return
* 第三方流水号
*/
@Override
public NbBankOrderPayResultVO orderPay(Integer payType) {
if (payType == 1){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, "EFT33021200556315", 1);
String transSeqNo = data.getString("transSeqNo");
String signNo = data.getString("signNo");
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return result;
}
else if (payType == 2){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.unionPayDirectOrder(merSeqNo, "EFT33021200556315", 1,
"313332082914","86041110000076809", "黑玫瑰");
String transSeqNo = data.getString("transSeqNo");
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
return result;
}
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_PAY_TYPE_ERROR);
}
/**
* 获取交易状态
* @return
*/
@Override
public NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo) {
JSONObject data = bankThirdpartyService.queryOrder(merSeqNo);
NbBankOrderPayStatusResultVO result = new NbBankOrderPayStatusResultVO();
String transStatus = data.getString("transStatus");
if (StringUtils.equals(transStatus, "00")){result.setTransStatus(1);} //交易成功
else if (StringUtils.equals(transStatus, "01")){result.setTransStatus(2);} //交易失败
else if (StringUtils.equals(transStatus, "02")){result.setTransStatus(3);} //交易已受理
else if (StringUtils.equals(transStatus, "80")){result.setTransStatus(4);} //订单初始状态
else if (StringUtils.equals(transStatus, "90")){result.setTransStatus(5);} //交易不存在
else if (StringUtils.equals(transStatus, "99")){result.setTransStatus(6);} //交易超时,须发起交易结果查询
BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transSeqNo = data.getString("transSeqNo");
String signNo = data.getString("signNo");
result.setAmount(trxAmt==null? null : trxAmt.movePointLeft(2).intValue());
result.setRealAmount(trxAmt==null? null : realTrxAmt.movePointLeft(2).intValue());
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return result;
}
@Override
public void orderPayCallback(String merSeqNo, String transSeqNo,
BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo) {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
if (StringUtils.equals(transStatus, "00")){ //交易成功
}
if (StringUtils.equals(transStatus, "01")){ //交易失败
}
if (StringUtils.equals(transStatus, "02")){ //交易已受理
}
if (StringUtils.equals(transStatus, "80")){ //订单初始状态
}
if (StringUtils.equals(transStatus, "90")){ //交易不存在
}
if (StringUtils.equals(transStatus, "99")){ //交易超时,须发起交易结果查询
}
}
}
package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.config.nbbank.NbBankConfig;
import com.clx.performance.dao.nbbank.NbBankRecordDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.nbbank.NbBankRecordEnum;
import com.clx.performance.model.nbbank.NbBankRecord;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.msl.common.exception.ServiceSystemException;
import com.nbopen.api.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Objects;
/**
* 易付通
*/
@Slf4j
@Service
public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
@Autowired
private NbBankConfig nbBankConfig;
@Autowired
private NbBankRecordDao nbBankRecordDao;
static {
ClassPathResource classPathResource = new ClassPathResource("bank/config-nbbank.json");
InputStream inputStream;
try {
inputStream = classPathResource.getInputStream();
boolean initResult = NBOpenSDK.init(inputStream);
log.info("NBSDK初始化状态:{}", initResult);
log.info("sdk版本信息:{}", NBOpenSDK.getVersionInfo());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 下单
* 5.5转账直连下单
* 商户号:EFT33021200556315
* 银行转账:86041110000075918(户名:客户客户)
* 订单支付:结算账号(86041110000075926(户名:客户客户))
* 响应结果:
*{
* "data": {
* "acctNm": "客户客户",
* "acctOpenBankNm": "宁波银行股份有限公司",
* "bankId": "313332082914",
* "cardNo": "86041110000075918",
* "errorCode": "000000",
* "errorMsg": "成功",
* "signNo": "2976409",
* "transSeqNo": "20231129142846065496766yDTQtg2",
* "virtualDays": "2024-05-26"
* },
* "head": {
* "rqsJrnlNo": "15543427719351510",
* "rspCode": "000000",
* "rspDate": "2023-11-29",
* "rspMsg": "交易成功",
* "rspTime": "14:28:49:600"
* }
* }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
*/
@Override
public JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填
// jsonObject.put("closeDtTm", "2023-11-29 13:39:16"); //关单时间
// jsonObject.put("mobilePhone", "13000000000"); //手机号
HashMap<String,String> httpHeader = new HashMap<>();
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(jsonObject);
requestApiData.setProductId("YFT");
requestApiData.setServiceId("directBankTransferOrder");
requestApiData.setHttpHeader(httpHeader);
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("宁波银行, 下单(directBankTransferOrder), 参数: {}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.send(request);
log.info("宁波银行, 下单(directBankTransferOrder), 结果: {}", JSON.toJSONString(response));
recordSave(NbBankRecordEnum.Type.DIRECT_BANK_TRANSFER_ORDER.getCode(), request, response);
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(directBankTransferOrder), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
return data;
} catch (Exception e) {
e.printStackTrace();
}
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
/**
* 订单支付收款模式
* 易付通接口编程-含订单支付
* 5.13银联订单支付收款模式
* 商户号:EFT33021200556315
* 银行转账:86041110000075918(户名:客户客户)
* 订单支付:结算账号(86041110000075926(户名:客户客户))
* 86041110000076809:黑玫瑰
* 响应结果:
* {
* "data": {
* "errorCode": "000000",
* "errorMsg": "成功",
* "frontUrl": "",
* "merId": "EFT33021200556315",
* "merSeqNo": "20231129133913",
* "signData": "",
* "transSeqNo": "2023112913391406547689VYvNioNz"
* },
* "head": {
* "rqsJrnlNo": "14414965925389704",
* "rspCode": "000000",
* "rspDate": "2023-11-29",
* "rspMsg": "交易成功",
* "rspTime": "13:39:16:035"
* }
* }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
* payAcctOpenBankId: 开户行号
* payAcctNo: 付款账号
* payAcctNm: 付款户名
*/
@Override
public JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填
jsonObject.put("bankType", "00"); //账户类型 必填
jsonObject.put("payAcctOpenBankId", payAcctOpenBankId); //开户行号 必填
jsonObject.put("payAcctNo", payAcctNo); //付款账号 必填
jsonObject.put("payAcctNm", payAcctNm); //付款户名 必填
// jsonObject.put("mobilePhone", "13000000000"); //手机号
HashMap<String,String> httpHeader = new HashMap<>();
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(jsonObject);
requestApiData.setProductId("YFT");
requestApiData.setServiceId("unionPayDirectOrder");
requestApiData.setHttpHeader(httpHeader);
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("宁波银行, 下单(unionPayDirectOrder), 参数: {}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.send(request);
log.info("宁波银行, 下单(unionPayDirectOrder), 结果: {}", JSON.toJSONString(response));
recordSave(NbBankRecordEnum.Type.UNION_PAY_DIRECT_ORDER.getCode(), request, response);
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(unionPayDirectOrder), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
return data;
} catch (Exception e) {
e.printStackTrace();
}
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
/**
* 结果查询
* 6.1交易结果查询
* 商户号:EFT33021200556315
* 返回结果: 90:交易不存在
* {
* "data": {
* "chargesAmt": "",
* "chargesType": "",
* "clearDate": "",
* "errorCode": "000000",
* "errorMsg": "成功",
* "merId": "EFT33021200556315",
* "merSeqNo": "20231129135754",
* "payeeAcctBankName": "",
* "payeeAcctBankNo": "",
* "payeeAcctName": "",
* "payeeAcctNo": "",
* "payMethod": "",
* "pyerInfList": [
* {
* "customerId": "",
* "pyerAcctBankName": "",
* "pyerAcctName": "",
* "pyerAcctNo": "",
* "signNo": "",
* "transAmt": "",
* "transDtTm": ""
* }
* ],
* "realTrxAmt": "",
* "transSeqNo": "",
* "transStatus": "90",
* "trxAmt": ""
* },
* "head": {
* "rqsJrnlNo": "15541586367762936",
* "rspCode": "000000",
* "rspDate": "2023-11-29",
* "rspMsg": "交易成功",
* "rspTime": "13:57:54:343"
* }
* }
* 返回结果: 02:交易已受理
* {
* "data": {
* "chargesAmt": "",
* "chargesType": "",
* "clearDate": "20231129",
* "errorCode": "000000",
* "errorMsg": "成功",
* "merId": "EFT33021200556315",
* "merSeqNo": "20231129142845",
* "payeeAcctBankName": "宁波银行股份有限公司",
* "payeeAcctBankNo": "313332082914",
* "payeeAcctName": "客户客户",
* "payeeAcctNo": "860411100000759182976409",
* "payMethod": "4",
* "pyerInfList": [
* {
* "customerId": "",
* "pyerAcctBankName": "",
* "pyerAcctName": "",
* "pyerAcctNo": "",
* "signNo": "",
* "transAmt": "",
* "transDtTm": ""
* }
* ],
* "realTrxAmt": "0",
* "transSeqNo": "20231129142846065496766yDTQtg2",
* "transStatus": "02",
* "trxAmt": "1.23"
* },
* "head": {
* "rqsJrnlNo": "15543431902274569",
* "rspCode": "000000",
* "rspDate": "2023-11-29",
* "rspMsg": "交易成功",
* "rspTime": "14:28:51:431"
* }
* }
*
* transStatus:
* 00:交易成功
* 01:交易失败
* 02:交易已受理
* 80:订单初始状态
* 90:交易不存在
* 99:交易超时,须发起交易结果查询
*/
@Override
public JSONObject queryOrder(String merSeqNo) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", "EFT33021200556315"); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
HashMap<String,String> httpHeader = new HashMap<>();
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(jsonObject);
requestApiData.setProductId("YFT");
requestApiData.setServiceId("queryOrder");
requestApiData.setHttpHeader(httpHeader);
RequestHead requestHead = new RequestHead();
requestHead.setRqsJrnlNo(NBOpenSDK.getRandom());
SDKRequest request = new SDKRequest();
request.setData(requestApiData);
request.setHead(requestHead);
log.info("宁波银行, 查询交易结果(queryOrder), 参数: {}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.send(request);
log.info("宁波银行, 查询交易结果(queryOrder), 结果: {}", JSON.toJSONString(response));
recordSave(NbBankRecordEnum.Type.QUERY_ORDER.getCode(), request, response);
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(queryOrder), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
return data;
} catch (Exception e) {
e.printStackTrace();
}
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
@Override
public void recordSave(Integer type, SDKRequest request, SDKResponse response) {
if (Objects.equals(type, NbBankRecordEnum.Type.DIRECT_BANK_TRANSFER_ORDER.getCode())) {
RequestApiData requestData = (RequestApiData) (request.getData());
JSONObject requestDataJson = (JSONObject) (requestData.getData());
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject responseDataJson = responseJson.getJSONObject("data");
recordSave(type
, requestDataJson.getString("merId")
, requestDataJson.getString("merSeqNo")
, responseDataJson.getString("transSeqNo")
, requestDataJson.getBigDecimal("trxAmt").movePointRight(2).intValue()
, JSON.toJSONString(request)
, JSON.toJSONString(response)
, responseDataJson.getString("errorCode")
, responseDataJson.getString("errorMsg")
, null
);
}
else if (Objects.equals(type, NbBankRecordEnum.Type.UNION_PAY_DIRECT_ORDER.getCode())) {
RequestApiData requestData = (RequestApiData) (request.getData());
JSONObject requestDataJson = (JSONObject) (requestData.getData());
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject responseDataJson = responseJson.getJSONObject("data");
recordSave(type
, requestDataJson.getString("merId")
, requestDataJson.getString("merSeqNo")
, responseDataJson.getString("transSeqNo")
, requestDataJson.getBigDecimal("trxAmt").movePointRight(2).intValue()
, JSON.toJSONString(request)
, JSON.toJSONString(response)
, responseDataJson.getString("errorCode")
, responseDataJson.getString("errorMsg")
, null
);
}
else if (Objects.equals(type, NbBankRecordEnum.Type.QUERY_ORDER.getCode())) {
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject responseDataJson = responseJson.getJSONObject("data");
recordSave(type
, responseDataJson.getString("merId")
, responseDataJson.getString("merSeqNo")
, responseDataJson.getString("transSeqNo")
, responseDataJson.getBigDecimal("trxAmt").movePointRight(2).intValue()
, JSON.toJSONString(request)
, JSON.toJSONString(response)
, null
, null
, responseDataJson.getString("transStatus")
);
}
else if (Objects.equals(type, NbBankRecordEnum.Type.NOTIFY_MERCHANT.getCode())) {
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject responseDataJson = responseJson.getJSONObject("data");
recordSave(type
, responseDataJson.getString("merId")
, responseDataJson.getString("merSeqNo")
, responseDataJson.getString("transSeqNo")
, responseDataJson.getBigDecimal("trxAmt").movePointRight(2).intValue()
, JSON.toJSONString(request)
, JSON.toJSONString(response)
, null
, null
, responseDataJson.getString("transStatus")
);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void recordSave(Integer type,
String merId, String merSeqNo, String transSeqNo,
Integer amount,
String param, String result,
String errorCode, String errorMsg,
String transStatus
){
NbBankRecord record = new NbBankRecord();
record.setType(type);
record.setMerId(merId);
record.setMerSeqNo(merSeqNo);
record.setTransSeqNo(transSeqNo);
record.setAmount(amount);
record.setParam(param);
record.setResult(result);
record.setErrorCode(errorCode);
record.setErrorMsg(errorMsg);
record.setTransStatus(transStatus);
nbBankRecordDao.saveEntity(record);
}
}
package com.clx.performance.service.thirdparty.nbbank;
public interface NbBankNotifyService {
void payNotify(String data);
}
package com.clx.performance.service.thirdparty.nbbank;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import java.math.BigDecimal;
public interface NbBankService {
NbBankOrderPayResultVO orderPay(Integer payType);
NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo);
void orderPayCallback(String merSeqNo, String transSeqNo,
BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo
);
}
package com.clx.performance.service.thirdparty.nbbank;
import com.alibaba.fastjson.JSONObject;
import com.nbopen.api.SDKRequest;
import com.nbopen.api.SDKResponse;
public interface NbBankThirdpartyService {
JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount);
JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm);
JSONObject queryOrder(String merSeqNo);
void recordSave(Integer type, SDKRequest request, SDKResponse response);
}
package com.clx.performance.sqlProvider.borrower;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.borrower.PageBorrowerConfigParam;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class BorrowerConfigSqlProvider {
public String pageByParam(@Param("page") Page<BorrowerConfigVO> page, @Param("param") PageBorrowerConfigParam param) {
return new SQL(){{
SELECT(" id, borrower_id as borrowerId, borrower_name as borrowerName, " +
" type, day, " +
" delete_status as deleteStatus, status, " +
" op_user_no as opUserNo, op_user_name as opUserName, date_format(op_time, '%Y-%m-%d %H:%i:%s') as opTime, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime "
);
FROM("borrower_config");
WHERE("delete_status = 0");
if (StringUtils.isNotBlank(param.getBorrowerName())) {WHERE("borrower_name = #{param.borrowerName}");}
if (Objects.nonNull(param.getStatus())) {WHERE("status = #{param.status}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
package com.clx.performance.sqlProvider.borrower;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.borrower.PageBorrowerParam;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class BorrowerSqlProvider {
public String pageByParam(@Param("page") Page<BorrowerVO> page, @Param("param") PageBorrowerParam param) {
return new SQL(){{
SELECT(" id, name, bank_name as bankName, bank_card_no as bankCardNo, " +
" delete_status, status, " +
" op_user_no as opUserNo, op_user_name as opUserName, date_format(op_time, '%Y-%m-%d %H:%i:%s') as opTime, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime "
);
FROM("borrower");
WHERE("delete_status = 0");
if (StringUtils.isNotBlank(param.getName())) {WHERE("name = #{param.name}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
......@@ -62,7 +62,11 @@ public class NetworkDriverRunningWaterRecordProvider {
}
if (ObjectUtil.isNotNull(param.getFundType())) {
WHERE("a.fund_type = #{param.fundType}");
} else {
WHERE("a.fund_type != " + NetworkDriverAccountEnum.FundType.FROZEN.getCode());
}
WHERE("a.running_water_type != " + NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode());
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
......
......@@ -11,12 +11,15 @@ import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.utils.SpringContextUtils;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
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.core.env.Environment;
import java.time.LocalDateTime;
import java.util.*;
......@@ -25,6 +28,9 @@ import java.util.stream.Collectors;
@Slf4j
public abstract class GoodsOrderStrategy {
@Autowired
private Environment environment;
/**
* 不同的用车需求执行不同的策略 1:one 2:two 3:three
......@@ -43,6 +49,16 @@ public abstract class GoodsOrderStrategy {
if (Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())) {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "订单已暂停,无法进行提量");
}
String transportBeginTime = orderInfo.getTransportBeginTime();
if (!"test".equals(environment.getActiveProfiles()[0])) {
for (OrderGoodsChildParams param : orderGoodsParams.getOrderGoodsChildParams()) {
String pendingOrderTime = param.getPendingOrderTime();
if (DateUtils.parseDateTime(pendingOrderTime).get().isBefore(DateUtils.parseDateTime(transportBeginTime).get())) {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "挂单时间不能早于拉运开始时间");
}
}
}
//多个定向单不允许车辆重复
List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams();
Set<String> set = new HashSet<>();
......
package com.clx.performance.struct.borrower;
import com.clx.performance.model.borrower.BorrowerConfig;
import com.clx.performance.vo.pc.borrower.BorrowerConfigVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface BorrowerConfigStruct {
BorrowerConfigVO convert(BorrowerConfig item);
List<BorrowerConfigVO> convert(List<BorrowerConfig> list);
}
package com.clx.performance.struct.borrower;
import com.clx.performance.model.borrower.Borrower;
import com.clx.performance.vo.pc.borrower.BorrowerVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface BorrowerStruct {
BorrowerVO convert(Borrower item);
List<BorrowerVO> convert(List<Borrower> list);
}
{
"api": [
{
"appKey": "77667c76_3503_4c04_95f7_fc10938c7942",
"publicUrl": "https://open-test.nbcb.com.cn/sit/nbcb/api",
"platfromPublicKeyPath": "/app/clx-performance/nbbank/bankPubKey-test.cer",
"merchantPrivateKeyPath":"/app/clx-performance/nbbank/77667c76_3503_4c04_95f7_fc10938c7942.sm2",
"merchantPrivateKeyPwd":"cfca",
"connectTimeout": 10000,
"readTimeout": 30000,
"merchantName":"",
"subMerchantName":"",
"subMerchantId":"",
"isProxy":false,
"proxyIp":"",
"proxyPort":80
}
],
"file": [
{
"uid":"TEST",
"publicFileUrl":"https://file-test.nbcb.com.cn/sit",
"clientIp":"127.0.0.1",
"passwd":"nbcb123456",
"apiVersion":"201809101526",
"isProxy":false,
"proxyIp":"",
"proxyPort":80
}
]
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论