提交 1f2943dc authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/master' into v8.6_small_version_fix_20231218

# Conflicts: # performance-web/src/main/java/com/clx/performance/dao/settle/SettlementOwnerDetailDao.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderGoodsServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/settle/SettlementOwnerServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/settle/SettlementMqHandlerService.java # performance-web/src/main/java/com/clx/performance/service/settle/SettlementOwnerService.java
...@@ -27,4 +27,5 @@ mvnw.cmd ...@@ -27,4 +27,5 @@ mvnw.cmd
/nbbuild/ /nbbuild/
/dist/ /dist/
/nbdist/ /nbdist/
/.nb-gradle/ /.nb-gradle/
\ No newline at end of file /nbsdk/
...@@ -18,7 +18,8 @@ public enum IdTypeEnum { ...@@ -18,7 +18,8 @@ public enum IdTypeEnum {
CASE_OUT_SUCCESS(4L, "提现成功"), CASE_OUT_SUCCESS(4L, "提现成功"),
TOP_UP_SUCCESS(5L, "充值成功"), TOP_UP_SUCCESS(5L, "充值成功"),
FROZEN(6L, "冻结"), FROZEN(6L, "冻结"),
THAW(7L, "解冻") THAW(7L, "解冻"),
TAKE_OUT(8L, "扣除")
; ;
private final Long code; private final Long code;
private final String msg; private final String msg;
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
@Getter
@AllArgsConstructor
@SuppressWarnings("all")
public enum NetworkDriverAccountEnum {
;
@Getter
@AllArgsConstructor
public enum RunningWaterStatus {
SETTLEMENT(10, "运单结算"),
CASE_OUT_FROZEN(20, "提现冻结"),
CASE_OUT_SUCCESS(30, "提现成功"),
;
private final Integer code;
private final String msg;
public static Optional<NetworkDriverAccountEnum.RunningWaterStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public Integer getCode() {
return this.code;
}
public String getMsg() {
return this.msg;
}
}
@Getter
@AllArgsConstructor
public enum FundType {
INCOME(10, "收入"),
FROZEN(20, "冻结"),
EXPENDITURE(30, "支出"),
;
private final Integer code;
private final String msg;
public static Optional<NetworkDriverAccountEnum.FundType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public Integer getCode() {
return this.code;
}
public String getMsg() {
return this.msg;
}
}
@Getter
@AllArgsConstructor
public enum CaseOutRecordStatus {
WAIT_PLATFORM_PAY(10, "待平台付款"),
PAYED(20, "已付款"),
;
private final Integer code;
private final String msg;
public static Optional<CaseOutRecordStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public Integer getCode() {
return this.code;
}
public String getMsg() {
return this.msg;
}
}
}
...@@ -67,8 +67,8 @@ public enum OwnerAccountEnum { ...@@ -67,8 +67,8 @@ public enum OwnerAccountEnum {
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum OrderChildTypeStatus { public enum OrderChildTypeStatus {
ORDINARY(1, "普通单"), NETWORK(1, "网运单"),
NETWORK(2, "网运单"), ORDINARY(2, "普通单"),
; ;
private final Integer code; private final Integer code;
private final String msg; private final String msg;
......
...@@ -111,6 +111,8 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -111,6 +111,8 @@ public enum PerformanceResultEnum implements ResultEnum {
PASSWORD_RESET_IS_FAIL(1909, "重置密码出现异常"), PASSWORD_RESET_IS_FAIL(1909, "重置密码出现异常"),
PASSWORD_CHECK_FAIL(1910, "交易密码填写错误,请重新输入"), PASSWORD_CHECK_FAIL(1910, "交易密码填写错误,请重新输入"),
SLIDER_CHECK_FAIL(1911, "滑块验证错误"), SLIDER_CHECK_FAIL(1911, "滑块验证错误"),
ORDER_CHILD_SYNC_ERROR(1912, "承运同步网络货运异常"),
; ;
private final int code; private final int code;
private final String msg; 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;
//"车辆燃料类型 1:柴油 2 天然气 3其他 4新能源/电"
public enum PowerTypeEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
DIESEL_OIL(1, "柴油"),
NATURAL_GAS(2, "天然气"),
OTHER(3, "其他"),
NEW_ENERGY(4, "新能源/电"),
;
private final Integer code;
private final String name;
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.getName(), name)).findFirst();
}
public static Integer getCodeByName(String name) {
return getByName(name).map(PowerTypeEnum.Type::getCode).orElse(3);
}
}
}
...@@ -47,6 +47,21 @@ public enum SettlementDriverEnum { ...@@ -47,6 +47,21 @@ public enum SettlementDriverEnum {
} }
} }
@Getter
@AllArgsConstructor
public enum PrepayFreightFlag {
PAYED(1, "已预付"),
NO_PAY(0, "未预付");
private final Integer code;
private final String msg;
public static Optional<PrepayFreightFlag> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(PrepayFreightFlag::getMsg).orElse(null);
}
}
} }
...@@ -33,7 +33,10 @@ public enum SettlementOwnerEnum { ...@@ -33,7 +33,10 @@ public enum SettlementOwnerEnum {
public enum InvoiceStatus { public enum InvoiceStatus {
INVOICED(1, "已开票"), INVOICED(1, "已开票"),
NOT_INVOICE(2, "未开票"), NOT_INVOICE(2, "未开票"),
NO_NEED_INVOICE(3, "无需开票"); NO_NEED_INVOICE(3, "无需开票"),
PART_INVOICE(4, "部分开票")
;
private final Integer code; private final Integer code;
private final String msg; private final String msg;
......
package com.clx.performance.feign;
import com.clx.performance.param.pc.driver.NetworkDriverAccountParam;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "clx-performance",configuration = PerformanceClientConfiguration.class)
public interface NetworkFeign {
@ApiOperation(value = "新增网络货运司机账户")
@PostMapping("clx-performance/feign/driver/createNetworkDriverAccount")
Result<Object> createNetworkDriverAccount(@RequestBody @Validated NetworkDriverAccountParam param);
}
...@@ -26,6 +26,8 @@ public interface OrderChildFeign { ...@@ -26,6 +26,8 @@ public interface OrderChildFeign {
Result<?> syncLastTruck(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo); Result<?> syncLastTruck(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo);
@RequestMapping(value = "clx-performance/feign/orderChild/getInvoiceType", method = RequestMethod.GET)
Result<Integer> getInvoiceType(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo);
} }
...@@ -90,6 +90,10 @@ public interface PerformanceFeign { ...@@ -90,6 +90,10 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/orderChild/selectInTransitOrderChild"}) @GetMapping(value = {"clx-performance/feign/orderChild/selectInTransitOrderChild"})
Result<Boolean> selectInTransitOrderChild(@RequestParam("orderNo") String orderNo); Result<Boolean> selectInTransitOrderChild(@RequestParam("orderNo") String orderNo);
@GetMapping(value = {"clx-performance/feign/orderChild/selectInTransitOrderChildLtUnsettle"})
Result<Boolean> selectInTransitOrderChildLtUnsettle(@RequestParam("orderNo") String orderNo);
@GetMapping(value = {"clx-performance/feign/orderGoods/updateSystemAddressId"}) @GetMapping(value = {"clx-performance/feign/orderGoods/updateSystemAddressId"})
Result<Boolean> updateSystemAddressId(@RequestParam("ownerAddressId") Integer ownerAddressId,@RequestParam("systemAddressId") Integer systemAddressId); Result<Boolean> updateSystemAddressId(@RequestParam("ownerAddressId") Integer ownerAddressId,@RequestParam("systemAddressId") Integer systemAddressId);
......
package com.clx.performance.feign;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "clx-performance",configuration = PerformanceClientConfiguration.class)
public interface SettlementFeign {
@ApiOperation(value = "查询当前订单号是否已经生成货主结算单明细")
@GetMapping("clx-performance/feign/settlement/thawAndLockSettlement")
Result<Boolean> thawAndLockSettlement(@RequestParam String orderNo);
}
package com.clx.performance.param.app;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class NetworkDriverPageParam extends PageParam {
private Long userNo;
@ApiModelProperty("资金类型 全部:不需要传 10:收入 30:支出 ")
private Integer fundType;
}
...@@ -16,4 +16,10 @@ public class DriverPageIntegralTruckRankParam extends PageParam { ...@@ -16,4 +16,10 @@ public class DriverPageIntegralTruckRankParam extends PageParam {
@ApiModelProperty(value = "车牌列表", hidden = true) @ApiModelProperty(value = "车牌列表", hidden = true)
List<String> truckNoList; List<String> truckNoList;
@ApiModelProperty(value = "车辆添加截止时间", hidden = true)
private String time;
@ApiModelProperty(value = "统计时间(周一)", hidden = true)
private String statisticsDate;
} }
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 OrderChildBankInfoDTO {
// @ApiModelProperty(value = "运单号", dataType="String", required = true)
// private String childNo;
// @ApiModelProperty(value = "用户钱包", dataType="Integer", required = true)
// private Integer userCode;
@ApiModelProperty(value = "持卡人姓名", dataType="String", required = true)
private String name;
@ApiModelProperty(value = "银行卡卡号", dataType="String", required = true)
private String cardNo;
@ApiModelProperty(value = "手机号", dataType="String", required = true)
private String mobile;
@ApiModelProperty(value = "账户类型 11个人 12企业账户", dataType="Integer", required = true)
private Integer accountType;
@ApiModelProperty(value = "银行卡类型10借记卡20借贷卡", dataType="String", required = true)
private String type;
// @ApiModelProperty(value = "是否允许提现: 允许提现1 ,禁止提现0", dataType="Integer", required = true)
// private Integer cashOut;
@ApiModelProperty(value = "身份证号", dataType="String", required = true)
@NotBlank(message = "身份证号不能为空")
private String idCard;
@ApiModelProperty(value = "银行", dataType="String", required = true)
@NotBlank(message = "银行不能为空")
private String bank;
@ApiModelProperty(value = "银行编码", dataType="String", required = true)
@NotBlank(message = "银行编码不能为空")
private String bankCode;
@ApiModelProperty(value = "身份证正面图片", required = true)
@NotBlank(message = "身份证正面图片不能为空")
private String idCardFrontImg;
@ApiModelProperty(value = "身份证背面图片", required = true)
@NotBlank(message = "身份证背面图片不能为空")
private String idCardBackImg;
}
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;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderChildDriverInfoDTO {
// @ApiModelProperty(value = "运单号", dataType="String", required = true)
// private String childNo;
// @ApiModelProperty(value = "司机ID", dataType="Integer", required = true)
// private Integer driverId;
@ApiModelProperty(value = "手机号", dataType="String", required = true)
@NotBlank(message = "手机号不能为空")
private String mobile;
@ApiModelProperty(value = "姓名", dataType="String", required = true)
@NotBlank(message = "姓名手机号不能为空")
private String name;
@ApiModelProperty(value = "性别1男2女", dataType="Integer", required = true)
private Integer sex;
// @ApiModelProperty(value = "头像相对地址", dataType="String", required = true)
// private String headImg;
// @ApiModelProperty(value = "钱包账号", dataType="String", required = true)
// private String walletCode;
@ApiModelProperty(value = "身份证号", dataType="String", required = true)
@NotBlank(message = "身份证号不能为空")
private String cardNo;
@ApiModelProperty(value = "身份证有效期起始时间", dataType="String", required = true)
@NotBlank(message = "身份证有效期起始时间不能为空")
private String cardStartTime;
@ApiModelProperty(value = "身份证有效期终止时间", dataType="String")
private String cardEndTime;
@ApiModelProperty(value = "是否是长期 0-非长期 1-长期", dataType="Integer", required = true)
@NotNull(message = "是否是长期不能为空")
private Integer cardLongTerm;
@ApiModelProperty(value = "身份证正面图片地址", dataType="String", required = true)
@NotBlank(message = "身份证正面图片地址不能为空")
private String cardFrontImg;
@ApiModelProperty(value = "身份证背面图片地址", dataType="String", required = true)
@NotBlank(message = "身份证背面图片地址不能为空")
private String cardBackImg;
@ApiModelProperty(value = "手持身份证照片地址", dataType="String")
private String faceCardImg;
@ApiModelProperty(value = "驾驶证号码", dataType="String", required = true)
// @NotBlank(message = "驾驶证号码不能为空")
private String licenceNo;
@ApiModelProperty(value = "初次领证日期", dataType="String", required = true)
// @NotBlank(message = "初次领证日期不能为空")
private String licenseTime;
@ApiModelProperty(value = "驾照类型", dataType="String", required = true)
// @NotBlank(message = "驾照类型不能为空")
private String licenceClass;
@ApiModelProperty(value = "驾驶证正面图片", dataType="String", required = true)
// @NotBlank(message = "驾驶证正面图片不能为空")
private String licenceImg;
@ApiModelProperty(value = "驾驶证背面图片", dataType="String", required = true)
// @NotBlank(message = "驾驶证背面图片不能为空")
private String licenceBackImg;
@ApiModelProperty(value = "驾驶证有效期起始时间", dataType="String", required = true)
// @NotBlank(message = "驾驶证有效期起始时间不能为空")
private String licenceStartTime;
@ApiModelProperty(value = "驾驶证有效期终止时间", dataType="String", required = true)
// @NotBlank(message = "驾驶证有效期终止时间不能为空")
private String licenceEndTime;
// @ApiModelProperty(value = "道路运输许可证图片地址", dataType="String", required = true)
// @NotBlank(message = "道路运输许可证图片地址不能为空")
// private String transportLicenceImg;
@ApiModelProperty(value = "道路运输从业资格证号", dataType="String", required = true)
// @NotBlank(message = "道路运输从业资格证号不能为空")
private String occupationalLicenceNo;
@ApiModelProperty(value = "道路运输从业资格证图片地址", dataType="String", required = true)
// @NotBlank(message = "道路运输从业资格证图片地址不能为空")
private String occupationalLicenceImg;
@ApiModelProperty(value = "从业资格证有效期起始时间", dataType="String", required = true)
// @NotBlank(message = "从业资格证有效期起始时间不能为空")
private String occupationalStartTime;
@ApiModelProperty(value = "从业资格证有效期终止时间", dataType="String", required = true)
// @NotBlank(message = "从业资格证有效期终止时间不能为空")
private String occupationalEndTime;
@ApiModelProperty(value = "驾驶证发证机关", required = true)
// @NotBlank(message = "驾驶证发证机关不能为空")
private String licenceIssueOrganization;
@ApiModelProperty(value = "身份证住址", required = true)
// @NotBlank(message = "身份证住址不能为空")
private String idCardAddress = "手动";
}
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.NotEmpty;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderChildPaySyncParam {
@ApiModelProperty(value = "运单编号列表")
@NotEmpty(message = "运单编号不能为空")
private List<String> childNoList;
}
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;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderChildTruckInfoDTO {
// @ApiModelProperty(value = "运单号", dataType="String", required = true)
// private String childNo;
// @ApiModelProperty(value = "车辆ID", dataType="Integer", required = true)
// private Integer truckId;
// @ApiModelProperty(value = "车主id", dataType="Integer", required = true)
// private Integer userId;
@ApiModelProperty(value = "车主手机号", dataType="String", required = true)
@NotBlank(message = "车主手机号不能为空")
private String mobile;
@ApiModelProperty(value = "车牌号", dataType="String", required = true)
@NotBlank(message = "车牌号不能为空")
private String truckNo;
// @ApiModelProperty(value = "车头车牌颜色代码", dataType="Integer", required = true)
// private Integer truckNoColorCode;
@ApiModelProperty(value = "车头车牌颜色", dataType="String", required = true)
@NotBlank(message = "车头车牌颜色不能为空")
private String truckNoColor;
@ApiModelProperty(value = "型号", dataType="String", required = true)
@NotBlank(message = "型号不能为空")
private String model;
@ApiModelProperty(value = "载重单位吨", dataType="Integer", required = true)
@NotNull(message = "载重单位吨不能为空")
private Integer load;
@ApiModelProperty(value = "吨位 单位吨", dataType="Integer", required = true)
@NotNull(message = "吨位不能为空")
private Integer grossMass;
@ApiModelProperty(value = "车头道路运输许可证编号", dataType="String", required = true)
@NotBlank(message = "车头道路运输许可证编号不能为空")
private String roadTransportCertificateNo;
@ApiModelProperty(value = "行驶证主页照片", dataType="String", required = true)
@NotBlank(message = "行驶证主页照片不能为空")
private String licenceImgMain;
@ApiModelProperty(value = "行驶证副业正面照片", dataType="String", required = true)
@NotBlank(message = "行驶证副业正面照片不能为空")
private String licenceImgSecond;
@ApiModelProperty(value = "行驶证副业背面照片", dataType="String", required = true)
@NotBlank(message = "行驶证副业背面照片不能为空")
private String licenceImgSecondBack;
@ApiModelProperty(value = "道路运输许可证图片地址", dataType="String", required = true)
@NotBlank(message = "道路运输许可证图片地址不能为空")
private String transportLicenceImg;
@ApiModelProperty(value = "行驶证有效期开始时间")
private String drivingLicenseBeginTime;
@ApiModelProperty(value = "行驶证有效期结束时间", required = true)
@NotBlank(message = "行驶证有效期结束时间不能为空")
private String drivingLicenseEndTime;
@ApiModelProperty(value = "运输证有效期开始时间")
private String transportationLicenseBeginTime;
@ApiModelProperty(value = "运输证有效期结束时间")
private String transportationLicenseEndTime;
@ApiModelProperty(value = "挂车牌号")
private String truckNo2;
@ApiModelProperty("挂车行驶证主页")
private String licenceImgMain2;
@ApiModelProperty("挂车行驶证副页")
private String licenceImgSecond2;
@ApiModelProperty("挂车行驶证副页背面")
private String licenceImgSecond2Back;
@ApiModelProperty("挂车年检有效期至")
private String licenceImgMain2EndTime;
@ApiModelProperty("挂车道路运输许可证编号")
private String roadTransportCertificateNo2;
@ApiModelProperty("挂车道路运输许可证图片地址")
private String transportLicenceImg2;
@ApiModelProperty(value = "车辆燃料类型 1:柴油 2 天然气 3其他 4新能源/电", dataType="Integer", required = true)
@NotNull(message = "车辆燃料类型不能为空")
private Integer powerType;
@ApiModelProperty(value = "使用性质", required = true)
@NotBlank(message = "使用性质不能为空")
private String useNature;
@ApiModelProperty(value = "车辆识别代码", required = true)
@NotBlank(message = "车辆识别代码不能为空")
private String identifyCode;
@ApiModelProperty(value = "行驶证发证机关", required = true)
@NotBlank(message = "行驶证发证机关不能为空")
private String licenceIssueOrganization;
@ApiModelProperty(value = "注册日期", required = true)
@NotBlank(message = "注册日期不能为空")
private String registerDate;
@ApiModelProperty(value = "行驶证发证日期", required = true)
@NotBlank(message = "行驶证发证日期不能为空")
private String licenceIssueDate;
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @description:
* @Author:liumingchao
* @Date:2022/11/4 13:50
*/
@Getter
@Setter
@NoArgsConstructor
public class OrderChildTruckTraceDTO {
@ApiModelProperty(value = "运单号", required = true)
private String childNo;
@ApiModelProperty(value = "定位时间", required = true)
@NotBlank(message = "定位时间不能为空")
private String locationTime;
@ApiModelProperty(value = "定位经度", required = true)
@NotBlank(message = "定位经度不能为空")
private String locationLon;
@ApiModelProperty(value = "定位纬度", required = true)
@NotBlank(message = "定位纬度不能为空")
private String locationLat;
@ApiModelProperty(value = "定位详细位置信息")
private String locationAddress;
}
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;
import java.io.Serializable;
/**
* 法人货主同步
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OwnerLegalSyncParam implements Serializable {
@ApiModelProperty(value = " 法人姓名 ", required = true)
@NotBlank(message = "货主登录手机号不可为空")
private String name;
@ApiModelProperty(value = " 货主手机号码 ", required = true)
@NotBlank(message = "货主姓名不可为空")
private String mobile;
@ApiModelProperty(value = " 身份证号 ", required = true)
@NotBlank(message = "身份证号不可为空")
private String cardNo;
@ApiModelProperty(value = " 企业名称 ", required = true)
private String company;
@ApiModelProperty(value = " 注册时间 ", required = true)
private String registerTime;
@ApiModelProperty(value = " 省 ", required = true)
private String province;
@ApiModelProperty(value = " 省code ", required = true)
private Integer provinceCode;
@ApiModelProperty(value = " 市 ", required = true)
private String city;
@ApiModelProperty(value = " 市code ", required = true)
private Integer cityCode;
@ApiModelProperty(value = " 区县 ", required = true)
private String county;
@ApiModelProperty(value = " 区县code ", required = true)
private Integer countyCode;
@ApiModelProperty(value = " 乡镇 ", required = true)
private String town;
@ApiModelProperty(value = " 乡镇code ", required = true)
private Integer townCode;
@ApiModelProperty(value = " 街道 ", required = true)
private String street;
@ApiModelProperty(value = " 街道code ", required = true)
private Integer streetCode;
@ApiModelProperty(value = " 详细地址 ", required = true)
private String address;
@ApiModelProperty(value = " 申请类型:1法人认证2代理人认证 ", required = true)
private Integer applyType;
@ApiModelProperty(value = " 法人姓名 ")
private String legalName;
@ApiModelProperty(value = " 法人手机号 ")
private String legalMobile;
@ApiModelProperty(value = " 法人身份证号 ")
private String legalCardNo;
@ApiModelProperty(value = " 法人身份证正面图片地址 ")
private String legalFrontImg;
@ApiModelProperty(value = " 法人身份证背面图片地址 ")
private String legalBackImg;
@ApiModelProperty(value = " 法人统一社会信用代码 ")
private String legalGroupCode;
@ApiModelProperty(value = " 法人营业执照图片地址 ")
private String legalBusinessImg;
@ApiModelProperty(value = " 代理人姓名 ")
private String agentName;
@ApiModelProperty(value = " 代理人手机号 ")
private String agentMobile;
@ApiModelProperty(value = " 代理人身份证号 ")
private String agentCardNo;
@ApiModelProperty(value = " 代理人身份证正面图片地址 ")
private String agentFrontImg;
@ApiModelProperty(value = " 代理人身份证背面图片地址 ")
private String agentBackImg;
@ApiModelProperty(value = " 代理人统一社会信用代码 ")
private String agentGroupCode;
@ApiModelProperty(value = " 代理人授权书图片地址 ")
private String agentBusinessImg;
@ApiModelProperty(value = " 企业联系人姓名 ", required = true)
private String businessName;
@ApiModelProperty(value = " 企业联系人手机号 ", required = true)
private String businessMobile;
@ApiModelProperty(value = " 企业类型 ", required = true)
private Integer businessType;
@ApiModelProperty(value = " 注册机构名称 ")
private String registerOrgName;
@ApiModelProperty(value = " 注册资本(单位:万元) ")
private Double registerAmount;
@ApiModelProperty(value = " 组织机构代码 ")
private String orgGroupCode;
@ApiModelProperty(value = " 企业邮箱 ")
private String businessEmail;
@ApiModelProperty(value = " 核准时间 ")
private String checkTime;
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* 自然人货主同步
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class OwnerPersonalSyncParam {
@ApiModelProperty(value = " 登陆手机号 ", required = true)
@NotBlank(message = "货主登录手机号不可为空")
private String mobile;
@ApiModelProperty(value = " 货主姓名 ", required = true)
@NotBlank(message = "货主姓名不可为空")
private String name;
@ApiModelProperty(value = " 身份证号 ", required = true)
@NotBlank(message = "身份证号不可为空")
private String cardNo;
@ApiModelProperty(value = " 省 ", required = true)
private String province;
@ApiModelProperty(value = " 省code ", required = true)
private Integer provinceCode;
@ApiModelProperty(value = " 市 ", required = true)
private String city;
@ApiModelProperty(value = " 市code ", required = true)
private Integer cityCode;
@ApiModelProperty(value = " 区县 ", required = true)
private String county;
@ApiModelProperty(value = " 区县code ", required = true)
private Integer countyCode;
// @ApiModelProperty(value = " 乡镇 ", required = false)
// private String town;
// @ApiModelProperty(value = " 乡镇code ", required = false)
// private Integer townCode;
// @ApiModelProperty(value = " 街道 ", required = false)
// private String street;
// @ApiModelProperty(value = " 街道code ", required = false)
// private Integer streetCode;
@NotBlank(message = "详细地址不可为空")
@ApiModelProperty(value = " 详细地址 ", required = true)
private String address;
@NotBlank(message = "身份证正面图片不可为空")
@ApiModelProperty(value = " 身份证正面图片地址 ", required = true)
private String legalFrontImg;
@NotBlank(message = "身份证背面图片不可为空")
@ApiModelProperty(value = " 身份证背面图片地址 ", required = true)
private String legalBackImg;
@ApiModelProperty(value = "手持身份证")
private String personHandheldImg;
@ApiModelProperty(value = " 个人邮箱 ")
private String businessEmail;
}
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.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OwnerSettlementSyncParam {
@ApiModelProperty(value = "货主手机")
@NotBlank(message = "货主手机不能为空")
private String ownerMobile;
@ApiModelProperty(value = "结算单列表")
@Valid
@NotEmpty(message = "结算单列表不能空")
private List<SettlementItem> settlementList;
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class SettlementItem{
@ApiModelProperty(value = "运单编号列表")
@NotEmpty(message = "运单编号不能空")
private String childNo;
@ApiModelProperty(value = "结算单编号")
@NotEmpty(message = "结算单编号不能空")
private String settlementNo;
}
}
package com.clx.performance.param.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ThirdOrderChildBrokerParam {
@ApiModelProperty(value = "运单编码", dataType="String", required = true)
@NotBlank(message = "订单编码不能为空")
private String childNo;
@ApiModelProperty(value = "订单编码", dataType="String", required = true)
@NotBlank(message = "货单编码不能为空")
private String orderNo;
@ApiModelProperty(value = "车牌号", dataType="String", required = true)
@NotBlank(message = "车牌号不能为空")
private String truckNo;
@ApiModelProperty(value = "运费单价 单位分 (司机运费单价)", dataType="Integer", required = true)
@NotNull(message = "运费单价不能为空")
private Integer freightPrice;
@ApiModelProperty(value = "运费 单位分 (含税金额)", dataType="Integer", required = true)
@NotNull(message = "运费不能为空")
private Integer freight;
@ApiModelProperty(value = "实付运费 单位分 (司机运费总价)", dataType="Integer", required = true)
@NotNull(message = "实付运费不能为空")
private Integer freightNoCard;
@ApiModelProperty(value = "溢价金额", dataType = "Integer", required = true)
@NotNull(message = "溢价金额不能为空")
private Integer orderChildBrokerBeyondFreight = 0;
@ApiModelProperty(value = "司机实际净重", dataType="BigDecimal", required = true)
@NotNull(message = "司机实际净重不能为空")
private BigDecimal net;
@ApiModelProperty(value = "装车净重", dataType="BigDecimal")
@NotNull(message = "装车净重不能为空")
private BigDecimal loadNet;
@ApiModelProperty(value = "发货地址", dataType="String", required = true)
@NotBlank(message = "发货地址不能为空")
private String sendAddress;
@ApiModelProperty(value = "货源所在省份", dataType="String", required = true)
@NotBlank(message = "货源所在省份不能为空")
private String sendProvince;
@ApiModelProperty(value = "货源所在城市", dataType="String", required = true)
@NotBlank(message = "货源所在城市不能为空")
private String sendCity;
@ApiModelProperty(value = "货源所在区县", dataType="String", required = true)
@NotBlank(message = "货源所在区县不能为空")
private String sendCounty;
@ApiModelProperty(value = "货源所在乡镇", dataType="String", required = true)
// @NotBlank(message = "货源所在乡镇不能为空")
private String sendTown;
@ApiModelProperty(value = "发货人", dataType="String", required = true)
@NotBlank(message = "发货人不能为空")
private String sendName;
@ApiModelProperty(value = "发货人手机号", dataType="String", required = true)
@NotBlank(message = "发货人手机号不能为空")
private String sendMobile;
@ApiModelProperty(value = "收货人所在省", dataType="String", required = true)
@NotBlank(message = "收货人所在省不能为空")
private String receiveProvince;
@ApiModelProperty(value = "收货人所在城市", dataType="String", required = true)
@NotBlank(message = "收货人所在城市不能为空")
private String receiveCity;
@ApiModelProperty(value = "收货人所在区县", dataType="String", required = true)
@NotBlank(message = "收货人所在区县不能为空")
private String receiveCounty;
@ApiModelProperty(value = "收货人所在乡镇", dataType="String", required = true)
// @NotBlank(message = "收货人所在乡镇不能为空")
private String receiveTown = "手动";
@ApiModelProperty(value = "收货地址", dataType="String", required = true)
@NotBlank(message = "收货地址不能为空")
private String receiveAddress;
@ApiModelProperty(value = "收货人", dataType="String", required = true)
@NotBlank(message = "收货人不能为空")
private String receiveName;
@ApiModelProperty(value = "收货人手机号", dataType="String", required = true)
@NotBlank(message = "收货人手机号不能为空")
private String receiveMobile;
@ApiModelProperty(value = "装车地址经度", required = true)
@NotBlank(message = "装车地址经度不能为空")
private String loadLongitude;
@ApiModelProperty(value = "装车地址纬度", required = true)
@NotBlank(message = "装车地址纬度不能为空")
private String loadLatitude;
@ApiModelProperty(value = "卸车地址经度", required = true)
@NotBlank(message = "卸车地址经度不能为空")
private String unloadLongitude;
@ApiModelProperty(value = "卸车地址纬度", required = true)
@NotBlank(message = "卸车地址纬度不能为空")
private String unloadLatitude;
@ApiModelProperty(value = "运输距离(公里)", required = true)
@NotNull(message = "运输距离不能为空")
private BigDecimal distance;
@ApiModelProperty(value = "接单时间", dataType="String", required = true)
@NotBlank(message = "接单时间不能为空")
private String payTime;
@ApiModelProperty(value = "装车时间", dataType="String", required = true)
@NotBlank(message = "装车时间不能为空")
private String loadTime;
@ApiModelProperty(value = "卸车时间", dataType="String", required = true)
@NotBlank(message = "卸车时间不能为空")
private String unloadTime;
@ApiModelProperty(value = "支付完成时间", dataType="String", required = true)
@NotBlank(message = "支付完成时间不能为空")
private String payFinishedTime;
// @ApiModelProperty(value = "备注", dataType="String")
// private String remark;
@ApiModelProperty(value = "创建时间", dataType="String", required = true)
private String createTime;
@ApiModelProperty(value = "收货单位", dataType="String")
private String receiveCompany;
@ApiModelProperty(value = "发货单位", dataType="String")
private String sendCompany;
@ApiModelProperty(value = "卸车净重", dataType="BigDecimal", required = true)
@NotNull(message = "卸车净重不能为空")
private BigDecimal receiveNet;
@ApiModelProperty(value = "货物名称", dataType="String", required = true)
@NotBlank(message = "货物名称不能为空")
private String goodsName;
// @ApiModelProperty(value = "是否车主本人:1是,0否", dataType="Integer", required = true)
// private Integer personalDriverFlag;
@ApiModelProperty(value = "垫付类型 0 全额垫付 1 不垫付服务费", dataType="Integer", required = true)
@NotNull(message = "垫付类型不能为空")
private Integer advanceType;
@ApiModelProperty(value = "货物价格 单位 分", required = true)
@NotNull(message = "货物价格不能为空")
private Integer goodsPrice;
@ApiModelProperty(value = "源订单号 (承运平台订单号)")
@NotBlank(message = "源订单号不能为空")
private String sourceOrderNo;
@ApiModelProperty(value = "源货单号 (承运平台货单号)")
@NotBlank(message = "源货单号不能为空")
private String sourceGoodsNo;
@ApiModelProperty(value = "源开票方式 (开票方式) :1 装车 2 卸车")
@NotNull(message = "源开票方式不能为空")
private Integer sourceInvoicingType;
@ApiModelProperty(value = "源单价 (承运单价)")
@NotNull(message = "源单价不能为空")
private BigDecimal sourceFreightPrice;
@ApiModelProperty(value = "源开票金额 (开票金额)")
@NotNull(message = "源开票金额不能为空")
private BigDecimal sourceInvoicingPrice;
@ApiModelProperty(value = "源亏吨金额 (亏吨金额)")
@NotNull(message = "源亏吨金额不能为空")
private BigDecimal sourceLossPrice;
@ApiModelProperty(value = "装车磅单图片", required = true)
@NotEmpty(message = "装车磅单图片不能为空")
private List<String> loadPoundImages;
@ApiModelProperty(value = "卸车磅单图片", required = true)
@NotEmpty(message = "卸车磅单图片不能为空")
private List<String> unLoadPoundImages;
@ApiModelProperty(value = "关联账号(货主手机号)", required = true)
@NotBlank(message = "关联账号不能为空")
private String invoiceRelationNo;
@ApiModelProperty(value = "货单信息", required = true)
@Valid
private ThirdOrderInfoDTO orderInfoDTO;
@ApiModelProperty(value = "车主信息", required = true)
@Valid
private OrderChildDriverInfoDTO truckDriverInfoDTO;
@ApiModelProperty(value = "司机信息", required = true)
@Valid
private OrderChildDriverInfoDTO driverInfoDTO;
@ApiModelProperty(value = "车主银行卡信息", required = true)
@Valid
private OrderChildBankInfoDTO truckDriverBankInfoDTO;
@ApiModelProperty(value = "司机银行卡信息", required = true)
@Valid
private OrderChildBankInfoDTO driverBankInfoDTO;
@ApiModelProperty(value = "车辆信息", required = true)
@Valid
private OrderChildTruckInfoDTO truckInfoDTO;
@ApiModelProperty(value = "运单轨迹", required = true)
@Valid
@NotEmpty(message = "运单轨迹不能为空")
private List<OrderChildTruckTraceDTO> brokerTraceList;
// @ApiModelProperty(value = "来源:0-货易来,1-诚联信 2承运", hidden = true)
// private Integer source;
}
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 ThirdOrderChildRiskStatusParam {
@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 javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class ThirdOrderInfoDTO {
@ApiModelProperty(value = "货单编码", required = true)
private String orderNo;
@ApiModelProperty(value = "货物名称", required = true)
private String goodsName;
@ApiModelProperty(value = "发货单位")
private String sendCompany;
@ApiModelProperty(value = "发货所在省份", required = true)
@NotBlank(message = "发货所在省份不能为空")
private String sendProvince;
@ApiModelProperty(value = "发货所在城市", required = true)
@NotBlank(message = "发货所在城市不能为空")
private String sendCity;
@ApiModelProperty(value = "发货所在区县", required = true)
@NotBlank(message = "发货所在区县不能为空")
private String sendCounty;
@ApiModelProperty(value = "发货所在乡镇", required = true)
// @NotBlank(message = "发货所在乡镇不能为空")
private String sendTown;
@ApiModelProperty(value = "发货详细地址", required = true)
@NotBlank(message = "发货详细地址不能为空")
private String sendAddress;
@ApiModelProperty(value = "发货联系人", required = true)
@NotBlank(message = "发货联系人不能为空")
private String sendName;
@ApiModelProperty(value = "发货联系人手机号", required = true)
@NotBlank(message = "发货联系人手机号不能为空")
private String sendMobile;
@ApiModelProperty(value = "发货地址经度", required = true)
@NotBlank(message = "发货地址经度不能为空")
private String loadLongitude;
@ApiModelProperty(value = "发货地址纬度", required = true)
@NotBlank(message = "发货地址纬度不能为空")
private String loadLatitude;
@ApiModelProperty(value = "收货单位")
private String receiveCompany;
@ApiModelProperty(value = "收货人所在省", required = true)
@NotBlank(message = "收货人所在省不能为空")
private String receiveProvince;
@ApiModelProperty(value = "收货人所在城市", required = true)
@NotBlank(message = "收货人所在城市不能为空")
private String receiveCity;
@ApiModelProperty(value = "收货人所在区县", required = true)
@NotBlank(message = "收货人所在区县不能为空")
private String receiveCounty;
@ApiModelProperty(value = "收货人所在乡镇", required = true)
// @NotBlank(message = "收货人所在乡镇不能为空")
private String receiveTown;
@ApiModelProperty(value = "收货详细地址", required = true)
@NotBlank(message = "收货详细地址不能为空")
private String receiveAddress;
@ApiModelProperty(value = "收货联系人", required = true)
@NotBlank(message = "收货联系人不能为空")
private String receiveName;
@ApiModelProperty(value = "收货联系人手机号", required = true)
@NotBlank(message = "收货联系人手机号不能为空")
private String receiveMobile;
@ApiModelProperty(value = "收货地址经度", required = true)
@NotBlank(message = "收货地址经度不能为空")
private String unloadLongitude;
@ApiModelProperty(value = "收货地址纬度", required = true)
@NotBlank(message = "收货地址纬度不能为空")
private String unloadLatitude;
@ApiModelProperty(value = "货物单价(单位:分)", required = true)
@NotNull(message = "货物单价不能为空")
private Integer goodsPrice;
@ApiModelProperty(value = "运费单价(单位:分)", required = true)
@NotNull(message = "运费单价不能为空")
private Integer transPrice;
@ApiModelProperty(value = "货物总重量(吨)", required = true)
@NotNull(message = "货物总重量不能为空")
private BigDecimal goodsAmount;
@ApiModelProperty(value = "最晚装货时间", required = true)
@NotBlank(message = "最晚装货时间不能为空")
private String extractTime;
@ApiModelProperty(value = "司机最晚到达时间", required = true)
@NotBlank(message = "司机最晚到达时间不能为空")
private String arriveTime;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PageNetworkAccountInfoListParam extends PageParam {
@ApiModelProperty(value = "手机号", example = "13966554477")
private String mobile;
@ApiModelProperty(value = "网络货运流水类型")
private Integer runningWaterType;
@ApiModelProperty(value = "司机编码")
private String driverUserNo;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PageNetworkAccountListParam extends PageParam {
@ApiModelProperty(value = "手机号", example = "13966554477")
private String mobile;
@ApiModelProperty(value = "车主名称")
private String driverUserName;
@ApiModelProperty(value = "司机编码")
private String driverUserNo;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PageNetworkCaseOutRecordListParam extends PageParam {
@ApiModelProperty(value = "手机号", example = "13966554477")
private String mobile;
@ApiModelProperty(value = "运单编号")
private String childNo;
@ApiModelProperty(value = "车主编码")
private String driverUserNo;
}
package com.clx.performance.param.pc.breakcontract.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName BatchUpdatePayDriverSettlementParam
* @Description
* @Author kavin
* @Date 2023/12/4 19:58
* @Version 1.0
*/
@Getter
@Setter
public class BatchUpdatePayDriverBreakContractSettlementParam {
@ApiModelProperty("结算单id集合")
@NotNull(message = "ids不能为空")
private List<Integer> ids;
}
package com.clx.performance.param.pc.driver;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName BatchUpdatePayDriverSettlementParam
* @Description
* @Author kavin
* @Date 2023/12/4 19:58
* @Version 1.0
*/
@Getter
@Setter
public class BatchUpdatePayDriverSettlementParam {
@ApiModelProperty("结算单id集合")
@NotNull(message = "ids不能为空")
private List<Integer> ids;
}
package com.clx.performance.param.pc.driver;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class NetworkDriverAccountParam {
private Long driverUserNo;
private String driverUserName;
private String mobile;
private LocalDateTime creteTime;
}
...@@ -30,4 +30,8 @@ public class PageCarrierSettlementOwnerParam extends PageParam { ...@@ -30,4 +30,8 @@ public class PageCarrierSettlementOwnerParam extends PageParam {
@ApiModelProperty("结算方式 1装车净重 2卸车净重") @ApiModelProperty("结算方式 1装车净重 2卸车净重")
private Integer settlementWay; private Integer settlementWay;
@ApiModelProperty("订单编号")
private String orderNo;
} }
package com.clx.performance.vo.app;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class APPNetworkDriverRunningWaterRecordVO {
private Integer id;
@ApiModelProperty("流水号")
private Long runningWaterNo;
@ApiModelProperty("司机编码")
private Long driverUserNo;
@ApiModelProperty("司机名称")
private String driverUserName;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("流水类型 10:运单结算 20:提现冻结 30:提现成功")
private Integer runningWaterType;
@ApiModelProperty("流水类型简介")
private String runningWaterTypeMsg;
@ApiModelProperty("资金类型 10:收入 20:冻结 30:支出")
private Integer fundType;
@ApiModelProperty("资金类型简介")
private String fundTypeMsg;
@ApiModelProperty("")
private Long relationId;
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("运单编号")
private String childNo;
@ApiModelProperty("变动金额")
@MoneyOutConvert
private BigDecimal alterationBalance;
@ApiModelProperty("冻结金额")
@MoneyOutConvert
private BigDecimal frozenBalance;
@ApiModelProperty("可用余额")
@MoneyOutConvert
private BigDecimal usableBalance;
@ApiModelProperty("账户余额")
@MoneyOutConvert
private BigDecimal accountBalance;
@ApiModelProperty("扣除金额")
@MoneyOutConvert
private BigDecimal takeOutBalance;
@ApiModelProperty("操作人")
private String createBy;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("修改时间")
private String modifiedTime;
}
...@@ -181,4 +181,13 @@ public class OrderChildVO { ...@@ -181,4 +181,13 @@ public class OrderChildVO {
@ApiModelProperty("最晚装货时间") @ApiModelProperty("最晚装货时间")
private String lastLoadTime; private String lastLoadTime;
//运单详情增加字段
@ApiModelProperty(value = "亏吨重量", example = "1.23")
private BigDecimal lossWeight;
@ApiModelProperty(value = "亏吨扣款", example = "1.23")
@MoneyOutConvert
private BigDecimal lossAmount;
} }
\ No newline at end of file
package com.clx.performance.vo.feign.transport;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class ThirdOrderChildBrokerResultVO {
@ApiModelProperty(value = "风控结果列表,空未风控")
private List<RiskItem> riskList;
@ApiModelProperty(value = "合规状态:0不合规 1合规")
private Integer status;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public static class RiskItem {
@ApiModelProperty(value = "类型", example = "PRICE_LOW")
private String type;
@ApiModelProperty(value = "风控原因", example = "运费单价过低")
private String msg;
}
}
package com.clx.performance.vo.pc;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Getter
@Setter
@Accessors(chain = true)
public class NetworkCaseOutRecordVO {
private Integer id;
@ApiModelProperty("提现单号")
private Long caseOutNo;
@ApiModelProperty("司机编码")
private String driverUserNo;
@ApiModelProperty("司机名称")
private String driverUserName;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("收款人")
private String payee;
@ApiModelProperty("开户行")
private String bank;
@ApiModelProperty("收款银行账户")
private String collectionBankCode;
@ApiModelProperty("状态 10:待平台付款 20:已付款")
private Integer status;
@ApiModelProperty("状态简介")
private String statusMsg;
@ApiModelProperty("平台")
private String platform;
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@ApiModelProperty("运单编号")
private String childNo;
@ApiModelProperty("变动金额")
@MoneyOutConvert
private BigDecimal alterationBalance;
@ApiModelProperty("操作人")
private String createBy;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("提现完成时间")
private String finishTime;
@ApiModelProperty("修改时间")
private String modifiedTime;
}
package com.clx.performance.vo.pc;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Getter
@Setter
@Accessors(chain = true)
public class NetworkDriverAccountVO {
private Integer id;
@ApiModelProperty("司机编码")
private String driverUserNo;
@ApiModelProperty("司机名称")
private String driverUserName;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("账户余额")
@MoneyOutConvert
private BigDecimal accountBalance;
@ApiModelProperty("可用余额")
@MoneyOutConvert
private BigDecimal usableBalance;
@ApiModelProperty("冻结余额")
@MoneyOutConvert
private BigDecimal frozenBalance;
@ApiModelProperty("钱包code")
private String walletCode;
@ApiModelProperty("创建人")
private String createBy;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("修改时间")
private String modifiedTime;
}
package com.clx.performance.vo.pc;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Getter
@Setter
@Accessors(chain = true)
public class NetworkDriverRunningWaterRecordVO{
private Integer id;
@ApiModelProperty("流水号")
private Long runningWaterNo;
@ApiModelProperty("司机编码")
private String driverUserNo;
@ApiModelProperty("司机名称")
private String driverUserName;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("流水类型 10:运单结算 20:提现冻结 30:提现成功")
private Integer runningWaterType;
@ApiModelProperty("流水类型简介")
private String runningWaterTypeMsg;
@ApiModelProperty("资金类型 10:收入 20:冻结 30:支出")
private Integer fundType;
@ApiModelProperty("资金类型简介")
private String fundTypeMsg;
@ApiModelProperty("")
private Long relationId;
@ApiModelProperty("订单ID")
private Integer orderId;
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("运单ID")
private Integer orderChildId;
@ApiModelProperty("运单编号")
private String orderChildNo;
@ApiModelProperty("变动金额")
@MoneyOutConvert
private BigDecimal alterationBalance;
@ApiModelProperty("冻结金额")
@MoneyOutConvert
private BigDecimal frozenBalance;
@ApiModelProperty("可用余额")
@MoneyOutConvert
private BigDecimal usableBalance;
@ApiModelProperty("账户余额")
@MoneyOutConvert
private BigDecimal accountBalance;
@ApiModelProperty("扣除金额")
@MoneyOutConvert
private BigDecimal takeOutBalance;
@ApiModelProperty("操作人")
private String createBy;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("修改时间")
private String modifiedTime;
}
...@@ -56,6 +56,7 @@ public class OwnerAccountVO { ...@@ -56,6 +56,7 @@ public class OwnerAccountVO {
@ApiModelProperty(value = "冻结金额") @ApiModelProperty(value = "冻结金额")
@MoneyOutConvert @MoneyOutConvert
private BigDecimal frozenBalance; private BigDecimal frozenBalance;
/** /**
* 创建人 * 创建人
*/ */
......
...@@ -58,6 +58,8 @@ public class CarrierPageSettlementDriverVO { ...@@ -58,6 +58,8 @@ public class CarrierPageSettlementDriverVO {
@MoneyOutConvert @MoneyOutConvert
@ApiModelProperty(value = "预付运费金额") @ApiModelProperty(value = "预付运费金额")
private BigDecimal prepayFreight; private BigDecimal prepayFreight;
@ApiModelProperty(value = "预付运费标示 0:未预付 1:已预付")
private Integer prepayFreightFlag;
@MoneyOutConvert @MoneyOutConvert
@ApiModelProperty(value = "结算金额") @ApiModelProperty(value = "结算金额")
private BigDecimal settlementFreight; private BigDecimal settlementFreight;
...@@ -67,6 +69,9 @@ public class CarrierPageSettlementDriverVO { ...@@ -67,6 +69,9 @@ public class CarrierPageSettlementDriverVO {
private String createTime; private String createTime;
@ApiModelProperty(value = "结算平台 1:马上来 2:网运平台") @ApiModelProperty(value = "结算平台 1:马上来 2:网运平台")
private String settlementPlatform; private String settlementPlatform;
@ApiModelProperty(value = "支付失败原因")
private String payErrorMsg;
......
package com.clx.performance.component;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.OwnerSettlementSyncParam;
import com.clx.user.feign.OwnerFeign;
import com.msl.common.dto.HttpDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.LinkedList;
import java.util.List;
@Component
@Slf4j
@AllArgsConstructor
public class NetworkSyncComponent {
private final TransportFeignService transportFeignService;
private final OwnerFeign ownerFeign;
public void ownerSettlementSync(SettlementOwner settlementOwner, List<SettlementOwnerDetail> settlementOwnerDetailList){
//TODO 通知网络货运做货主计费开票标识通知
OwnerSettlementSyncParam param = new OwnerSettlementSyncParam();
String mobile = ownerFeign.getOwnerInfo(settlementOwner.getOwnerUserNo()).getData().getMobile();
param.setOwnerMobile(mobile);
List<OwnerSettlementSyncParam.SettlementItem> settlementList = new LinkedList<>();
for (SettlementOwnerDetail settlementOwnerDetail : settlementOwnerDetailList) {
String childNo = settlementOwnerDetail.getChildNo();
OwnerSettlementSyncParam.SettlementItem item = new OwnerSettlementSyncParam.SettlementItem();
item.setChildNo(childNo);
item.setSettlementNo(settlementOwnerDetail.getSettlementNo());
settlementList.add(item);
}
param.setSettlementList(settlementList);
HttpDTO httpDTO = transportFeignService.ownerSettlementSync(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
log.info("通知网络货运做货主计费开票标识通知请求解密后:{}", decrypt);
}
}
...@@ -11,16 +11,19 @@ import com.clx.order.vo.feign.FeignOrderInfoVO; ...@@ -11,16 +11,19 @@ import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService; import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam; 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.IntegralMqService;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService; import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService; import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
...@@ -80,6 +83,12 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -80,6 +83,12 @@ public class OrderCancelComponent implements InitializingBean {
@Autowired @Autowired
private OrderGoodsService orderGoodsService; private OrderGoodsService orderGoodsService;
@Autowired
SettlementOwnerDetailDao settlementOwnerDetailDao;
@Autowired
OwnerAccountService ownerAccountService;
public List<String> ownerProcess(OrderCancelParam param) { public List<String> ownerProcess(OrderCancelParam param) {
String orderNo = param.getOrderNo(); String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null; List<OrderGoods> orderGoodsList = null;
...@@ -108,6 +117,19 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -108,6 +117,19 @@ public class OrderCancelComponent implements InitializingBean {
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(), orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids); 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; break;
case 2: //取消未拉运吨数的货单 case 2: //取消未拉运吨数的货单
log.info("2:货主取消未拉运吨数的货单"); log.info("2:货主取消未拉运吨数的货单");
......
...@@ -136,6 +136,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -136,6 +136,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} else { } else {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//大于35吨的归还吨数在这里处理 //大于35吨的归还吨数在这里处理
if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){ if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){
RollbackOrderWeightParam param = new RollbackOrderWeightParam(); RollbackOrderWeightParam param = new RollbackOrderWeightParam();
...@@ -155,10 +158,11 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -155,10 +158,11 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} }
} }
orderFeign.rollbackOrderWeight(param); orderFeign.rollbackOrderWeight(param);
//更新剩余吨数
update.setResidueTransportWeight(BigDecimal.ZERO);
} }
//更新已完结 //更新已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode()); orderGoodsDao.updateEntityByKey(update);
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue()); log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
} }
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode()); orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
......
package com.clx.performance.component;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.msl.common.dto.HttpDTO;
import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil;
import com.msl.common.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import java.security.GeneralSecurityException;
@Slf4j
public class ThirdComponent {
public static final String TRANSPORT_USER = "13403503399";
public static final String TRANSPORT_KEY = "9Y1N5AUP8N2TI359";
public static String encrypt(String param){
HttpDTO httpDTO = null;
try {
httpDTO = EncryptUtil.buildDTO(TRANSPORT_USER, param, TRANSPORT_KEY, System.currentTimeMillis());
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
return JSONUtil.parse(httpDTO).toString();
}
public static String decrypt(String data) {
try {
String decrypt = EncryptUtil.decrypt(data, TRANSPORT_KEY);
log.info("解密:{}", decrypt);
return decrypt;
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
}
...@@ -5,5 +5,9 @@ public class RedissonConstants { ...@@ -5,5 +5,9 @@ public class RedissonConstants {
// 接单锁 // 接单锁
public static final String ORDER_CHILD_SAVE_USER_TRUCK_LOCK = "clx-performance:orderChild:save:userTruck:"; public static final String ORDER_CHILD_SAVE_USER_TRUCK_LOCK = "clx-performance:orderChild:save:userTruck:";
public static final String ORDER_CHILD_SAVE_ORDER_GOODS_NO_LOCK = "clx-performance:orderChild:save:orderGoodsNo:"; public static final String ORDER_CHILD_SAVE_ORDER_GOODS_NO_LOCK = "clx-performance:orderChild:save:orderGoodsNo:";
//货主结算单支付锁
public static final String SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK = "clx-performance:settlementOwner:batchPay:id:";
//货主违约结算单支付锁
public static final String BREAK_CONTRACT_SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK = "clx-performance:breakContractSettlementOwner:batchPay:id:";
} }
package com.clx.performance.controller.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.service.settle.NetworkDriverAccountService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.user.vo.feign.WalletResidueCardVO;
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.*;
@Slf4j
@RestController
@RequestMapping("/app/driver")
@Validated
@AllArgsConstructor
@Api(tags = "APP-司机资金管理")
public class AppDriverAccountController {
private final NetworkDriverAccountService networkDriverAccountService;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
@ApiOperation(value = "APP司机账户", notes = "<br>By:胡宇帆")
@GetMapping("/account")
@UnitCovert(param = false)
public Result<WalletResidueCardVO> account(@RequestParam(value = "userCode") Integer userCode) {
WalletResidueCardVO walletResidueCardVO = networkDriverAccountService.account(userCode);
return Result.ok(walletResidueCardVO);
}
@ApiOperation(value = "APP司机账户冻结明细", notes = "<br>By:胡宇帆")
@PostMapping("/frozenList")
@UnitCovert(param = false)
public Result<PageData<APPNetworkDriverRunningWaterRecordVO>> frozenList(@RequestBody NetworkDriverPageParam param) {
IPage<APPNetworkDriverRunningWaterRecordVO> page = networkDriverRunningWaterRecordService.pageFrozenList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "APP司机账户流水明细", notes = "<br>By:胡宇帆")
@PostMapping("/runningWaterList")
@UnitCovert(param = false)
public Result<PageData<APPNetworkDriverRunningWaterRecordVO>> runningWaterList(@RequestBody NetworkDriverPageParam param) {
IPage<APPNetworkDriverRunningWaterRecordVO> page = networkDriverRunningWaterRecordService.runningWaterList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.feign;
import cn.hutool.json.JSONUtil;
import com.clx.performance.param.pc.driver.NetworkDriverAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.settle.NetworkDriverAccountService;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/feign/driver")
@Validated
@AllArgsConstructor
public class DriverAccountFeignController {
private final NetworkDriverAccountService networkDriverAccountService;
@ApiOperation(value = "创建司机网络货运账户", notes = "<br>By:胡宇帆")
@PostMapping("/createNetworkDriverAccount")
public Result<Object> createNetworkDriverAccount(@RequestBody NetworkDriverAccountParam param) {
log.info("进行创建司机网络货运账户,相关参数{}", JSONUtil.parse(param).toString());
networkDriverAccountService.createNetworkDriverAccount(param);
return Result.ok();
}
}
...@@ -5,6 +5,7 @@ import com.clx.performance.model.OrderChild; ...@@ -5,6 +5,7 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService; import com.clx.performance.service.LastTruckService;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.child.FeignOrderChildService; import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO; import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -30,6 +31,8 @@ public class OrderChildFeignController { ...@@ -30,6 +31,8 @@ public class OrderChildFeignController {
private final LastTruckService lastTruckService; private final LastTruckService lastTruckService;
private final SettlementOwnerDetailService settlementOwnerDetailService;
@GetMapping({"/getOrderChildTotalByUserNo"}) @GetMapping({"/getOrderChildTotalByUserNo"})
Integer getTrucksByOrderGoodsNo(@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo) { Integer getTrucksByOrderGoodsNo(@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo) {
...@@ -53,6 +56,16 @@ public class OrderChildFeignController { ...@@ -53,6 +56,16 @@ public class OrderChildFeignController {
} }
} }
@GetMapping({"/selectInTransitOrderChildLtUnsettle"})
Result<Boolean> selectInTransitOrderChildLtUnsettle(@RequestParam("orderNo") String orderNo) {
List<OrderChild> orderChildren = orderChildService.selectInTransitOrderChildLtUnsettle(orderNo);
if (CollectionUtil.isNotEmpty(orderChildren)) {
return Result.ok(true);
} else {
return Result.ok(false);
}
}
@ApiOperation(value = "线路运单统计", notes = "<br>By:艾庆国") @ApiOperation(value = "线路运单统计", notes = "<br>By:艾庆国")
@RequestMapping(value = "/lineStatistics", method = RequestMethod.GET) @RequestMapping(value = "/lineStatistics", method = RequestMethod.GET)
Result<OrderChildLineStatisticsVO> lineStatistics(@RequestParam @NotNull(message = "发货地址不可为空") Integer sendSystemAddressId, Result<OrderChildLineStatisticsVO> lineStatistics(@RequestParam @NotNull(message = "发货地址不可为空") Integer sendSystemAddressId,
...@@ -69,4 +82,10 @@ public class OrderChildFeignController { ...@@ -69,4 +82,10 @@ public class OrderChildFeignController {
} }
@ApiOperation(value = "获取当前订单是否有存在网运单", notes = "<br>By:胡宇帆")
@GetMapping({"/getInvoiceType"})
Result<Integer> getInvoiceType(@RequestParam("orderNo") @NotNull(message = "订单编号不能为空") String orderNo) {
return Result.ok(settlementOwnerDetailService.getInvoiceType(orderNo));
}
} }
package com.clx.performance.controller.feign;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.util.List;
@RestController
@RequestMapping("/feign/settlement")
@Validated
@Api(tags = "货单Feign")
@AllArgsConstructor
public class SettlementFeignController {
private final SettlementOwnerDetailService settlementOwnerDetailService;
@GetMapping({"/thawAndLockSettlement"})
Result<Boolean> selectListByOrderNo(@RequestParam("orderNo") @NotNull(message = "订单号不能为空") String orderNo) {
return Result.ok(settlementOwnerDetailService.thawAndLockSettlement(orderNo));
}
}
...@@ -2,26 +2,27 @@ package com.clx.performance.controller.pc; ...@@ -2,26 +2,27 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.param.pc.ArtificialCancelOrderParam; import com.clx.performance.param.pc.ArtificialCancelOrderParam;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam; import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.base.PageParam;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping(value="/pc/order/") @RequestMapping(value="/pc/order/")
...@@ -32,6 +33,7 @@ public class OrderCancelController { ...@@ -32,6 +33,7 @@ public class OrderCancelController {
private final OrderCancelService orderCancelService; private final OrderCancelService orderCancelService;
@ApiOperation(value = "承运端取消订单", notes = "<br>By:胡宇帆") @ApiOperation(value = "承运端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/platformCancelOrderPre") @PostMapping("/platformCancelOrderPre")
public Result<Object> platformCancelOrderPre(@RequestBody OrderCancelParam param) { public Result<Object> platformCancelOrderPre(@RequestBody OrderCancelParam param) {
...@@ -67,4 +69,6 @@ public class OrderCancelController { ...@@ -67,4 +69,6 @@ public class OrderCancelController {
IPage<OrderChildVO> page = orderCancelService.orderChildCancelRecord(param); IPage<OrderChildVO> page = orderCancelService.orderChildCancelRecord(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages()); return Result.page(page.getRecords(), page.getTotal(), page.getPages());
} }
} }
package com.clx.performance.controller.pc.breakcontract.carrier; package com.clx.performance.controller.pc.breakcontract.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam; import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService; import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO; import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
...@@ -58,4 +59,12 @@ public class CarrierBreakContractSettlementDriverController { ...@@ -58,4 +59,12 @@ public class CarrierBreakContractSettlementDriverController {
return Result.ok(breakContractSettlementDriverService.getDetailBySettlementNo(settlementNo)); return Result.ok(breakContractSettlementDriverService.getDetailBySettlementNo(settlementNo));
} }
@ApiOperation(value = "批量结算车主违约结算单",notes = "<br>By:刘海泉")
@PostMapping("/updateBatchPayDriverBreakContractSettlement")
public Result<Object> updateBatchPayDriverBreakContractSettlement(@RequestBody @Validated BatchUpdatePayDriverBreakContractSettlementParam param) {
breakContractSettlementDriverService.updateBatchPayDriverBreakContractSettlement(param);
return Result.ok();
}
} }
package com.clx.performance.controller.pc.carrier; package com.clx.performance.controller.pc.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.service.settle.SettlementDriverService; import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
...@@ -36,6 +37,11 @@ public class CarrierSettlementDriverController { ...@@ -36,6 +37,11 @@ public class CarrierSettlementDriverController {
return Result.page(page.getRecords(),page.getTotal(),page.getPages()); return Result.page(page.getRecords(),page.getTotal(),page.getPages());
} }
@ApiOperation(value = "批量结算车主结算单",notes = "<br>By:刘海泉")
@PostMapping("/updateBatchPayDriverSettlement")
public Result<Object> updateBatchPayDriverSettlement(@RequestBody @Validated BatchUpdatePayDriverSettlementParam param) {
settlementDriverService.updateBatchPayDriverSettlement(param);
return Result.ok();
}
} }
...@@ -110,7 +110,6 @@ public class CarrierSettlementOwnerController { ...@@ -110,7 +110,6 @@ public class CarrierSettlementOwnerController {
@ApiOperation(value = "编辑结算单状态",notes = "<br>By:姜文业") @ApiOperation(value = "编辑结算单状态",notes = "<br>By:姜文业")
@PostMapping("/updateStatusByOrderNo") @PostMapping("/updateStatusByOrderNo")
public Result updateStatusByOrderNo(@RequestBody @Validated UpdateStatusParam param) { public Result updateStatusByOrderNo(@RequestBody @Validated UpdateStatusParam param) {
log.info("履约服务进行结算单状态更改,参数{}", JSONUtil.parse(param));
settlementOwnerService.updateStatusByOrderNo(param.getOrderNo(), param.getSettlementPeriodType(), param.getFromStatus(), param.getToStatus()); settlementOwnerService.updateStatusByOrderNo(param.getOrderNo(), param.getSettlementPeriodType(), param.getFromStatus(), param.getToStatus());
return Result.ok(); return Result.ok();
} }
......
package com.clx.performance.controller.pc.driver;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.settle.NetworkCaseOutRecordService;
import com.clx.performance.service.settle.NetworkDriverAccountService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.vo.pc.*;
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.*;
@Slf4j
@RestController
@RequestMapping("/pc/driver")
@Validated
@AllArgsConstructor
@Api(tags = "PC-车主网络货运")
public class NetworkDriverAccountController {
private final NetworkDriverAccountService networkDriverAccountService;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
private final NetworkCaseOutRecordService networkCaseOutRecordService;
@ApiOperation(value = "网络货运账户列表", notes = "<br>By:胡宇帆")
@PostMapping("/networkAccountList")
@UnitCovert(param = false)
public Result<PageData<NetworkDriverAccountVO>> networkAccountList(@RequestBody PageNetworkAccountListParam param) {
IPage<NetworkDriverAccountVO> page = networkDriverAccountService.networkAccountList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "网络货运账户详情", notes = "<br>By:胡宇帆")
@PostMapping("/networkAccountInfoList")
@UnitCovert(param = false)
public Result<PageData<NetworkDriverRunningWaterRecordVO>> networkAccountInfoList(@RequestBody PageNetworkAccountInfoListParam param) {
IPage<NetworkDriverRunningWaterRecordVO> page = networkDriverRunningWaterRecordService.networkDriverRunningWaterRecordList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "车主提现", notes = "<br>By:胡宇帆")
@PostMapping("/networkCaseOutRecord")
@UnitCovert(param = false)
public Result<PageData<NetworkCaseOutRecordVO>> networkCaseOutRecord(@RequestBody PageNetworkCaseOutRecordListParam param) {
IPage<NetworkCaseOutRecordVO> page = networkCaseOutRecordService.networkCaseOutRecord(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.pc.transport;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.InvoicingStatusNotifyDTO;
import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.msl.common.dto.HttpDTO;
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.*;
@Slf4j
@RestController
@RequestMapping(value="/pc/transport/")
@Validated
@Api(tags = "PC-网络货运相关")
@AllArgsConstructor
public class TransportSyncController {
private final TransportSyncService transportSyncService;
private final OrderChildDao orderChildDao;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final OrderGoodsDao orderGoodsDao;
private final TransportFeignService transportFeignService;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final OrderChildSyncTransportRecordService orderChildSyncTransportRecordService;
private final SettlementOwnerService settlementOwnerService;
/**
* 支付结果
* @param param
* @return
*/
@ApiOperation(value = "payStatusNotify", notes = "<br>By:胡宇帆")
@PostMapping("/payStatusNotify")
public Object payStatusNotify(@RequestBody String param) {
HttpDTO bean = JSONUtil.toBean(param, HttpDTO.class);
log.info("payStatusNotify 原始报文:{}", bean);
String decrypt = ThirdComponent.decrypt(bean.getData());
log.info("payStatusNotify 解密后:{}", decrypt);
PayStatusNotifyDTO payStatusNotifyDTO = JSONUtil.toBean(decrypt, PayStatusNotifyDTO.class);
log.info("支付回调payStatusNotifyDTO:{}", JSONUtil.parse(payStatusNotifyDTO));
orderChildSyncTransportRecordService.updateStatus(payStatusNotifyDTO);
return ThirdComponent.encrypt(JSON.toJSONString(Result.ok()));
}
/**
* 开票结果
* @param param
* @return
*/
@ApiOperation(value = "invoicingStatusNotify", notes = "<br>By:胡宇帆")
@PostMapping("/invoicingStatusNotify")
public Object invoicingStatusNotify(@RequestBody String param) {
HttpDTO bean = JSONUtil.toBean(param, HttpDTO.class);
log.info("invoicingStatusNotify 原始报文:{}", bean);
String decrypt = ThirdComponent.decrypt(bean.getData());
log.info("invoicingStatusNotify 解密后:{}", decrypt);
InvoicingStatusNotifyDTO invoicingStatusNotifyDTO = JSONUtil.toBean(decrypt, InvoicingStatusNotifyDTO.class);
settlementOwnerService.invoicingStatusNotify(invoicingStatusNotifyDTO);
return ThirdComponent.encrypt(JSON.toJSONString(Result.ok()));
}
/**
* 风控结果
* @param param
* @return
*/
@ApiOperation(value = "riskStatusNotify", notes = "<br>By:艾庆国")
@PostMapping("/riskStatusNotify")
public Object riskStatusNotify(@RequestBody String param) {
HttpDTO bean = JSONUtil.toBean(param, HttpDTO.class);
log.info("riskStatusNotify 原始报文:{}", bean);
String decrypt = ThirdComponent.decrypt(bean.getData());
log.info("riskStatusNotify 解密后:{}", decrypt);
ThirdOrderChildRiskStatusParam invoicingStatusNotifyDTO = JSONUtil.toBean(decrypt, ThirdOrderChildRiskStatusParam.class);
return ThirdComponent.encrypt(JSON.toJSONString(Result.ok()));
}
@ApiOperation(value = "syncTest", notes = "<br>By:胡宇帆")
@GetMapping("/syncTest")
public Result<OrderChildSyncDTO> syncTest(@RequestParam String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).get();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
ThirdOrderChildBrokerParam param = transportSyncService.generateOrderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
log.info("=======================生成Param{}", JSONUtil.parse(param));
HttpDTO httpDTOResult = transportFeignService.orderChildSync(param);
String decrypt = ThirdComponent.decrypt(httpDTOResult.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
return Result.ok(bean);
}
}
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.component.ThirdComponent;
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.service.TempService; import com.clx.performance.service.TempService;
import com.clx.performance.service.child.FeignOrderChildService; import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO; import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO;
import com.msl.common.dto.HttpDTO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
...@@ -30,6 +33,10 @@ public class TempController { ...@@ -30,6 +33,10 @@ public class TempController {
private TempService tempService; private TempService tempService;
@Autowired @Autowired
private FeignOrderChildService carrierOrderChildService; private FeignOrderChildService carrierOrderChildService;
@Autowired
private TransportService transportService;
@Autowired
private TransportFeignService transportFeignService;
...@@ -69,4 +76,37 @@ public class TempController { ...@@ -69,4 +76,37 @@ public class TempController {
return Result.ok(); return Result.ok();
} }
// @ApiOperation(value = "承运同步网络货运 (临时接口)", notes = "<br>By:艾庆国")
// @RequestMapping(value = "/orderChildSync", method = RequestMethod.GET)
// public Result<Void> orderChildSync(@RequestBody ThirdOrderChildBrokerParam param1) {
// ThirdOrderChildBrokerParam param = new ThirdOrderChildBrokerParam();
// param.setChildNo("123");
//
// transportService.orderChildSync(param);
//
// return Result.ok();
// }
@ApiOperation(value = "运单支付运费同步 (临时接口)", notes = "<br>By:艾庆国")
@RequestMapping(value = "/orderChildPaySync", method = RequestMethod.POST)
public Result<Void> orderChildPaySync(@RequestBody OrderChildPaySyncParam param) {
HttpDTO httpDTO = transportFeignService.orderChildPaySync(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
log.info("{}", decrypt);
return Result.ok();
}
@ApiOperation(value = "货主结算单同步 (临时接口)", notes = "<br>By:艾庆国")
@RequestMapping(value = "/ownerSettlementSync", method = RequestMethod.POST)
public Result<Void> ownerSettlementSync(@RequestBody OwnerSettlementSyncParam param) {
HttpDTO httpDTO = transportFeignService.ownerSettlementSync(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
log.info("{}", decrypt);
return Result.ok();
}
} }
...@@ -117,6 +117,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -117,6 +117,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
*/ */
List<OrderChild> selectInTransitOrderChild(String orderNo); List<OrderChild> selectInTransitOrderChild(String orderNo);
List<OrderChild> selectInTransitOrderChildLtUnsettle(String orderNo);
/** /**
* 通过货单号查询在途运单 * 通过货单号查询在途运单
* @param orderGoodsNo * @param orderGoodsNo
......
...@@ -33,4 +33,7 @@ public interface OwnerRunningWaterRecordDao extends BaseDao<OwnerRunningWaterRec ...@@ -33,4 +33,7 @@ public interface OwnerRunningWaterRecordDao extends BaseDao<OwnerRunningWaterRec
List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo); List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo);
List<OwnerAccountRunningWaterRecordVO> marginAccountList(PagePlatformMarginAccountParam param); List<OwnerAccountRunningWaterRecordVO> marginAccountList(PagePlatformMarginAccountParam param);
OwnerRunningWaterRecord getOneByOrderNoAndRunningWaterTypeAndAccountType(String orderNo, Integer runningWaterType, Integer accountType);
} }
...@@ -378,6 +378,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -378,6 +378,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
); );
} }
@Override
public List<OrderChild> selectInTransitOrderChildLtUnsettle(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderNo, orderNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.UNSETTLE.getCode())
);
}
@Override @Override
public List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo) { public List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo) return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
......
...@@ -56,8 +56,8 @@ public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWate ...@@ -56,8 +56,8 @@ public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWate
@Override @Override
public List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo) { public List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OwnerRunningWaterRecord::getOrderNo, orderNo) return baseMapper.selectList(lQrWrapper().eq(OwnerRunningWaterRecord::getOrderNo, orderNo)
.eq(OwnerRunningWaterRecord::getRunningWaterType, OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode()) // .eq(OwnerRunningWaterRecord::getRunningWaterType, OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
.isNull(OwnerRunningWaterRecord::getOrderChildNo) //.isNull(OwnerRunningWaterRecord::getOrderChildNo)
); );
} }
...@@ -65,4 +65,12 @@ public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWate ...@@ -65,4 +65,12 @@ public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWate
public List<OwnerAccountRunningWaterRecordVO> marginAccountList(PagePlatformMarginAccountParam param) { public List<OwnerAccountRunningWaterRecordVO> marginAccountList(PagePlatformMarginAccountParam param) {
return baseMapper.marginAccountList(param); return baseMapper.marginAccountList(param);
} }
@Override
public OwnerRunningWaterRecord getOneByOrderNoAndRunningWaterTypeAndAccountType(String orderNo, Integer runningWaterType, Integer accountType) {
return baseMapper.selectOne(lQrWrapper().eq(OwnerRunningWaterRecord::getOrderNo, orderNo)
.eq(OwnerRunningWaterRecord::getRunningWaterType, runningWaterType)
.eq(OwnerRunningWaterRecord::getAccountType, accountType)
);
}
} }
package com.clx.performance.dao.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.mapper.settle.NetworkCaseOutRecordMapper;
import com.clx.performance.model.settle.NetworkCaseOutRecord;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import com.clx.performance.vo.pc.NetworkCaseOutRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Repository
public class NetworkCaseOutRecordDaoImpl extends BaseDaoImpl<NetworkCaseOutRecordMapper, NetworkCaseOutRecord, Integer> implements NetworkCaseOutRecordDao {
@Override
public IPage<NetworkCaseOutRecordVO> networkCaseOutRecord(PageNetworkCaseOutRecordListParam param) {
Page<OwnerAccountVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.networkCaseOutRecord(page, param);
}
@Override
public void updateStatus(String childNo, Integer code, String msg) {
update(lUdWrapper().eq(NetworkCaseOutRecord::getChildNo, childNo)
.set(NetworkCaseOutRecord::getStatus, code)
.set(NetworkCaseOutRecord::getFinishTime, LocalDateTime.now())
.set(NetworkCaseOutRecord::getStatusMsg, msg)
);
}
}
package com.clx.performance.dao.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.NetworkDriverAccountDao;
import com.clx.performance.mapper.settle.NetworkDriverAccountMapper;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.msl.common.utils.DateUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Repository
public class NetworkDriverAccountDaoImpl extends BaseDaoImpl<NetworkDriverAccountMapper, NetworkDriverAccount, Integer> implements NetworkDriverAccountDao {
@Override
public IPage<NetworkDriverAccountVO> networkAccountList(PageNetworkAccountListParam param) {
Page<NetworkDriverAccountVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.networkAccountList(page, param);
}
public Integer updateAccountCAS(NetworkDriverAccount account, LocalDateTime now, boolean flag) {
String nowStr = DateUtils.formatDateTime(now).get();
if (flag) {
return baseMapper.addAccount(account, nowStr);
} else {
return baseMapper.subAccount(account, nowStr);
}
}
}
package com.clx.performance.dao.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.NetworkDriverRunningWaterRecordDao;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.mapper.settle.NetworkDriverRunningWaterRecordMapper;
import com.clx.performance.model.settle.NetworkDriverRunningWaterRecord;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Repository
public class NetworkDriverRunningWaterRecordDaoImpl extends BaseDaoImpl<NetworkDriverRunningWaterRecordMapper, NetworkDriverRunningWaterRecord, Integer> implements NetworkDriverRunningWaterRecordDao {
@Override
public IPage<NetworkDriverRunningWaterRecordVO> networkDriverRunningWaterRecordDao(PageNetworkAccountInfoListParam param) {
Page<NetworkDriverRunningWaterRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.networkDriverRunningWaterRecordDao(page, param);
}
@Override
public IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(NetworkDriverPageParam param) {
Page<APPNetworkDriverRunningWaterRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageFrozenList(page, param);
}
@Override
public IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(NetworkDriverPageParam param) {
Page<APPNetworkDriverRunningWaterRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.runningWaterList(page, param);
}
@Override
public void updateFrozenFlagByChildNo(String childNo) {
update(lUdWrapper().set(NetworkDriverRunningWaterRecord::getFrozenFlag, 1)
.eq(NetworkDriverRunningWaterRecord::getChildNo, childNo)
.eq(NetworkDriverRunningWaterRecord::getRunningWaterType, NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode())
);
}
}
package com.clx.performance.dao.impl.settle;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.mapper.settle.OrderChildSyncTransportRecordMapper;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
@Repository
public class OrderChildSyncTransportRecordDaoImpl extends BaseDaoImpl<OrderChildSyncTransportRecordMapper, OrderChildSyncTransportRecord, Integer> implements OrderChildSyncTransportRecordDao {
@Override
public List<OrderChildSyncTransportRecord> selectListForJob() {
return baseMapper.selectList(lQrWrapper().eq(OrderChildSyncTransportRecord::getStatus, 0));
}
@Override
public void updateStatus(String childNo) {
update(lUdWrapper().eq(OrderChildSyncTransportRecord::getChildNo, childNo)
.set(OrderChildSyncTransportRecord::getStatus, 2)
);
}
}
...@@ -12,6 +12,8 @@ import com.msl.common.dao.impl.BaseDaoImpl; ...@@ -12,6 +12,8 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -23,10 +25,12 @@ import java.util.Objects; ...@@ -23,10 +25,12 @@ import java.util.Objects;
@Repository @Repository
public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> implements SettlementDriverDetailDao { public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> implements SettlementDriverDetailDao {
@Override @Override
public boolean updateInvoiceType(SettlementDriverDetail item) { public boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item) {
return update(lUdWrapper() return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId()) .eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getInvoiceType, item.getInvoiceType()) .set(SettlementDriverDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementDriverDetail::getPrepayFreight, item.getPrepayFreight())
.set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag())
); );
} }
...@@ -65,4 +69,14 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD ...@@ -65,4 +69,14 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
query.orderByDesc(SettlementDriverDetail :: getCreateTime); query.orderByDesc(SettlementDriverDetail :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
@Override
public List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime) {
return baseMapper.listUnPay(beginTime);
}
@Override
public List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids) {
return baseMapper.findByDriverSettlementIds(ids);
}
} }
...@@ -67,6 +67,14 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S ...@@ -67,6 +67,14 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
); );
} }
@Override
public boolean updateInvoiceStatusBySettlementNo(String settlementNo, Integer invoiceStatus) {
return update(lUdWrapper()
.eq(SettlementOwner::getSettlementNo, settlementNo)
.set(SettlementOwner::getInvoiceStatus, invoiceStatus)
);
}
@Override @Override
public boolean updateInvoiceStatusById(Integer id, Integer invoiceStatus){ public boolean updateInvoiceStatusById(Integer id, Integer invoiceStatus){
return update(lUdWrapper() return update(lUdWrapper()
...@@ -107,6 +115,9 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S ...@@ -107,6 +115,9 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
if(Objects.nonNull(param.getSettlementWay())){ if(Objects.nonNull(param.getSettlementWay())){
query.like(SettlementOwner :: getSettlementWay,param.getSettlementWay()); query.like(SettlementOwner :: getSettlementWay,param.getSettlementWay());
} }
if(StringUtils.isNotBlank(param.getOrderNo())){
query.eq(SettlementOwner :: getOrderNo,param.getOrderNo());
}
query.orderByDesc(SettlementOwner :: getCreateTime); query.orderByDesc(SettlementOwner :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(),param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(),param.getPageSize()),query);
......
...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.mapper.settle.SettlementOwnerDetailMapper; import com.clx.performance.mapper.settle.SettlementOwnerDetailMapper;
import com.clx.performance.model.settle.SettlementOwnerDetail; import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
...@@ -30,6 +32,9 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet ...@@ -30,6 +32,9 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
return update(lUdWrapper() return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId()) .eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoiceType, item.getInvoiceType()) .set(SettlementOwnerDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementOwnerDetail::getInvoiceFreight, item.getInvoiceFreight())
.set(SettlementOwnerDetail::getSettlementFreight, item.getSettlementFreight())
.set(SettlementOwnerDetail::getFinalPaymentStatus, item.getFinalPaymentStatus())
.set(SettlementOwnerDetail::getPrepayFreight, item.getPrepayFreight()) .set(SettlementOwnerDetail::getPrepayFreight, item.getPrepayFreight())
); );
} }
...@@ -71,6 +76,14 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet ...@@ -71,6 +76,14 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
return list(lQrWrapper().eq(SettlementOwnerDetail::getSettlementNo, settlementNo)); return list(lQrWrapper().eq(SettlementOwnerDetail::getSettlementNo, settlementNo));
} }
@Override
public List<SettlementOwnerDetail> getBySettlementNoAndInvoiceType(String settlementNo, Integer invoiceType, Integer invoiceStatus) {
return list(lQrWrapper().eq(SettlementOwnerDetail::getSettlementNo, settlementNo)
.eq(SettlementOwnerDetail::getInvoiceType, invoiceType)
.eq(SettlementOwnerDetail::getInvoiceStatus, invoiceStatus)
);
}
@Override @Override
public IPage<SettlementOwnerDetail> pageSettlementOwnerDetail( public IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(
...@@ -92,6 +105,36 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet ...@@ -92,6 +105,36 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
@Override
public Integer getInvoiceType(String orderNo) {
return baseMapper.getInvoiceType(orderNo);
}
@Override
public void updateSettlementByChildNoList(List<String> childNoList) {
update(lUdWrapper()
.in(SettlementOwnerDetail::getChildNo, childNoList)
.set(SettlementOwnerDetail::getInvoiceStatus, SettlementOwnerDetailEnum.InvoiceStatus.YES.getCode())
);
}
@Override
public void updateFinalPaymentStatusBySettlementNoForOnline(String settlementNo, Integer finalPaymentStatus) {
update(lUdWrapper()
.eq(SettlementOwnerDetail::getSettlementNo, settlementNo)
.eq(SettlementOwnerDetail::getFinalPaymentStatus, SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode())
.set(SettlementOwnerDetail::getFinalPaymentStatus, finalPaymentStatus)
);
}
@Override
public List<SettlementOwnerDetail> selectListByOrderNo(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(SettlementOwnerDetail::getOrderNo, orderNo)
.isNull(SettlementOwnerDetail::getSettlementNo)
);
}
@Override @Override
public IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param) { public IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param) {
LambdaQueryWrapper<SettlementOwnerDetail> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SettlementOwnerDetail> query = new LambdaQueryWrapper<>();
......
package com.clx.performance.dao.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.NetworkCaseOutRecordMapper;
import com.clx.performance.model.settle.NetworkCaseOutRecord;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import com.clx.performance.vo.pc.NetworkCaseOutRecordVO;
import com.msl.common.dao.BaseDao;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkCaseOutRecordDao extends BaseDao<NetworkCaseOutRecordMapper, NetworkCaseOutRecord, Integer> {
IPage<NetworkCaseOutRecordVO> networkCaseOutRecord(PageNetworkCaseOutRecordListParam param);
void updateStatus(String childNo, Integer code, String msg);
}
package com.clx.performance.dao.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.NetworkDriverAccountMapper;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverAccountDao extends BaseDao<NetworkDriverAccountMapper, NetworkDriverAccount, Integer> {
IPage<NetworkDriverAccountVO> networkAccountList(PageNetworkAccountListParam param);
Integer updateAccountCAS(NetworkDriverAccount account, LocalDateTime now, boolean flag);
}
package com.clx.performance.dao.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.NetworkDriverRunningWaterRecordMapper;
import com.clx.performance.model.settle.NetworkDriverRunningWaterRecord;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import com.msl.common.dao.BaseDao;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverRunningWaterRecordDao extends BaseDao<NetworkDriverRunningWaterRecordMapper, NetworkDriverRunningWaterRecord, Integer> {
IPage<NetworkDriverRunningWaterRecordVO> networkDriverRunningWaterRecordDao(PageNetworkAccountInfoListParam param);
IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(NetworkDriverPageParam param);
IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(NetworkDriverPageParam param);
void updateFrozenFlagByChildNo(String childNo);
}
package com.clx.performance.dao.settle;
import com.clx.performance.mapper.settle.OrderChildSyncTransportRecordMapper;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
public interface OrderChildSyncTransportRecordDao extends BaseDao<OrderChildSyncTransportRecordMapper, OrderChildSyncTransportRecord, Integer> {
List<OrderChildSyncTransportRecord> selectListForJob();
void updateStatus(String childNo);
}
...@@ -7,6 +7,9 @@ import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailPara ...@@ -7,6 +7,9 @@ import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailPara
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
* @Description: 车主运单计费明细 * @Description: 车主运单计费明细
...@@ -15,7 +18,7 @@ import com.msl.common.dao.BaseDao; ...@@ -15,7 +18,7 @@ import com.msl.common.dao.BaseDao;
*/ */
public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> { public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> {
boolean updateInvoiceType(SettlementDriverDetail item); boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item);
boolean updateSettlementNo(SettlementDriverDetail item); boolean updateSettlementNo(SettlementDriverDetail item);
...@@ -23,4 +26,8 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai ...@@ -23,4 +26,8 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
IPage<SettlementDriverDetail> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param); IPage<SettlementDriverDetail> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param);
List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime);
List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids);
} }
...@@ -22,6 +22,9 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl ...@@ -22,6 +22,9 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
boolean updateStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("status")Integer status); boolean updateStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("status")Integer status);
boolean updateInvoiceStatusBySettlementNo(@Param("settlementNo")String settlementNo, @Param("status")Integer status);
boolean updateInvoiceStatusById(@Param("id")Integer id, @Param("invoiceStatus")Integer invoiceStatus); boolean updateInvoiceStatusById(@Param("id")Integer id, @Param("invoiceStatus")Integer invoiceStatus);
boolean updatePayment(SettlementOwner settlementOwner); boolean updatePayment(SettlementOwner settlementOwner);
......
...@@ -30,9 +30,20 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM ...@@ -30,9 +30,20 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
Optional<SettlementOwnerDetail> getByChildNo(String childNo); Optional<SettlementOwnerDetail> getByChildNo(String childNo);
List<SettlementOwnerDetail> getBySettlementNo(String settlementNo); List<SettlementOwnerDetail> getBySettlementNo(String settlementNo);
List<SettlementOwnerDetail> getBySettlementNoAndInvoiceType(String settlementNo, Integer invoiceType, Integer invoiceStatus);
IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param); IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param); IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
Integer getInvoiceType(String orderNo);
void updateSettlementByChildNoList(List<String> childNoList);
void updateFinalPaymentStatusBySettlementNoForOnline(String settlementNo, Integer finalPaymentStatus);
List<SettlementOwnerDetail> selectListByOrderNo(String orderNo);
void updateSettlementMerge(String settlementNo, List<String> settlementNos); void updateSettlementMerge(String settlementNo, List<String> settlementNos);
} }
package com.clx.performance.dto;
import lombok.Data;
import java.util.List;
@Data
public class InvoicingStatusNotifyDTO {
List<String> childNoList;
}
package com.clx.performance.dto;
import lombok.Data;
@Data
public class OrderChildSyncDTO {
private Integer code;
private OrderChildSyncResultDTO data;
}
package com.clx.performance.dto;
import lombok.Data;
import java.util.List;
@Data
public class OrderChildSyncResultDTO {
@Data
class Res {
private String msg;
private String type;
}
private List<Res> riskList;
//1: 通过风控 0:未通过风控
private Integer status;
}
package com.clx.performance.dto;
import lombok.Data;
@Data
public class PayStatusNotifyDTO {
private String childNo;
}
package com.clx.performance.extranal.transport;
import com.clx.performance.param.feign.transport.OwnerLegalSyncParam;
import com.clx.performance.param.feign.transport.OwnerPersonalSyncParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.vo.feign.transport.ThirdOrderChildBrokerResultVO;
public interface TransportService {
ThirdOrderChildBrokerResultVO orderChildSync(ThirdOrderChildBrokerParam param);
Integer ownerLegalSync(OwnerLegalSyncParam param);
Integer ownerPersonalSync(OwnerPersonalSyncParam param);
boolean ownerExistCheck(String mobile);
Integer getOwnerId(String mobile);
}
package com.clx.performance.extranal.transport.impl;
import com.clx.performance.extranal.transport.TransportService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.param.feign.transport.OwnerLegalSyncParam;
import com.clx.performance.param.feign.transport.OwnerPersonalSyncParam;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
import com.clx.performance.vo.feign.transport.ThirdOrderChildBrokerResultVO;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class TransportServiceImpl implements TransportService {
@Autowired
private TransportFeignService transportFeignService;
@Override
public ThirdOrderChildBrokerResultVO orderChildSync(ThirdOrderChildBrokerParam param) {
// return Optional.ofNullable(transportFeignService.orderChildSync(param))
// .filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL).getData();
return null;
}
@Override
public Integer ownerLegalSync(OwnerLegalSyncParam param) {
return Optional.ofNullable(transportFeignService.ownerLegalSync(param))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL).getData();
}
@Override
public Integer ownerPersonalSync(OwnerPersonalSyncParam param) {
return Optional.ofNullable(transportFeignService.ownerPersonalSync(param))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL).getData();
}
@Override
public boolean ownerExistCheck(String mobile) {
return Optional.ofNullable(transportFeignService.ownerExistCheck(mobile))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL).getData() == 1;
}
@Override
public Integer getOwnerId(String mobile) {
return Optional.ofNullable(transportFeignService.getOwnerId(mobile))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL).getData();
}
}
package com.clx.performance.feign;
import com.clx.performance.component.ThirdComponent;
import com.msl.common.result.Result;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
@Slf4j
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template){
// 通过template获取到请求体(已经被转成json)
String jsonBody = template.requestBody().asString();
log.info("请求参数:{}", jsonBody);
try {
//调用网络货运请求需要加密处理
jsonBody = ThirdComponent.encrypt(jsonBody);
} catch (Exception e) {
throw new RuntimeException(e);
}
template.body(jsonBody);
}
@Bean
public Request.Options requestOptions() {
return new Request.Options(30000, 30000);
}
}
\ No newline at end of file
package com.clx.performance.feign;
import com.clx.performance.param.feign.transport.*;
import com.msl.common.dto.HttpDTO;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
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 {
/**
* 运单同步
*/
@RequestMapping(value = "/transport-service/thirdParty/order/orderChildSync", method = RequestMethod.POST)
HttpDTO orderChildSync(@RequestBody ThirdOrderChildBrokerParam param);
/**
* 获取风控状态
* @return
* @see com.clx.performance.param.feign.transport.ThirdOrderChildRiskStatusParam
*/
@RequestMapping(value = "/transport-service/thirdParty/order/getRiskStatus", method = RequestMethod.POST)
HttpDTO getRiskStatus(@RequestBody @NotBlank(message = "运单编号不能为空") String childNo);
/**
* 运单支付运费同步
*/
@RequestMapping(value = "/transport-service/thirdParty/order/orderChildPaySync", method = RequestMethod.POST)
HttpDTO orderChildPaySync(@RequestBody OrderChildPaySyncParam param);
/**
* 获取运单开票状态
* @return 0-未申请,10-已申请,20-审核失败,30-已开票
*/
@RequestMapping(value = "/transport-service/thirdParty/order/getInvoiceStatus", method = RequestMethod.POST)
Result<Integer> getInvoiceStatus(@RequestBody @NotBlank(message = "运单编号不能为空") String childNo);
/**
* 货主结算单同步 (只推同一货主)
*/
@RequestMapping(value = "/transport-service/thirdParty/order/ownerSettlementSync", method = RequestMethod.POST)
HttpDTO ownerSettlementSync(@RequestBody OwnerSettlementSyncParam param);
/**
* 货主同步(法人模式)
* @return 货主用户id
*/
@RequestMapping(value = "/transport-service/thirdParty/owner/ownerLegalSync", method = RequestMethod.POST)
Result<Integer> ownerLegalSync(@RequestBody OwnerLegalSyncParam param);
/**
* 货主同步(自然人模式)
* @return 货主用户id
*/
@RequestMapping(value = "/transport-service/thirdParty/owner/ownerPersonalSync", method = RequestMethod.POST)
Result<Integer> ownerPersonalSync(@RequestBody OwnerPersonalSyncParam param);
/**
* 检测货主是否注册
* @return 0不存在 1存在
*/
@RequestMapping(value = "/transport-service/thirdParty/owner/ownerExistCheck", method = RequestMethod.POST)
Result<Integer> ownerExistCheck(@Validated @NotBlank(message = "手机不能为空") String mobile);
/**
* 获取货主用户id
* @Return null未注册
*/
@RequestMapping(value = "/transport-service/thirdParty/owner/getOwnerId", method = RequestMethod.POST)
Result<Integer> getOwnerId(@Validated @NotBlank(message = "手机不能为空") String mobile);
}
...@@ -4,6 +4,7 @@ import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao; ...@@ -4,6 +4,7 @@ import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService; import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.utils.JobHandlerService; import com.clx.performance.utils.JobHandlerService;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -26,24 +27,18 @@ public class BreakContractSettlementJob { ...@@ -26,24 +27,18 @@ public class BreakContractSettlementJob {
private BreakContractJobHandlerService breakContractJobHandlerService; private BreakContractJobHandlerService breakContractJobHandlerService;
/** /**
* 违约结算单支付 (每10分钟) * 车主违约结算单支付 (每天凌晨2点)
* @Scheduled(cron = "0 0/10 * * * ?")
*/ */
@XxlJob("breakContractSettlementPay") @XxlJob("breakContractSettlementPay")
public void breakContractSettlementPay() { public void breakContractSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusMonths(1);
LocalDateTime beginTime = LocalDateTime.now().minusHours(1); log.info("查询未结算的车主违约结算单,查询开始时间:{}", DateUtils.formatDateTime(beginTime));
jobHandlerService.handler("违约结算单-支付", ()->{ jobHandlerService.handler("违约结算单-支付", ()->{
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listUnpay(beginTime); List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listUnpay(beginTime);
log.info("违约结算单支付,数量:{}", list.size()); log.info("车主违约结算单支付,数量:{}", list.size());
for (BreakContractSettlementDriver item : list) { for (BreakContractSettlementDriver item : list) {
jobHandlerService.subHandler("违约结算单-支付", item.getId(), breakContractJobHandlerService::pay); jobHandlerService.subHandler("车主违约结算单-支付", item.getId(), breakContractJobHandlerService::pay);
} }
}); });
} }
} }
package com.clx.performance.job;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.utils.JobHandlerService;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class DriverSettlementJob {
@Autowired
private JobHandlerService jobHandlerService;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
/**
* 车主结算单支付 (每天凌晨2点)
*/
@XxlJob("driverSettlementPay")
public void driverSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusMonths(1);
log.info("查询未结算的车主结算单,查询开始时间:{}", DateUtils.formatDateTime(beginTime));
jobHandlerService.handler("车主结算单-支付", ()->{
List<SettlementDriverDetail> list = settlementDriverDetailDao.listUnPay(beginTime);
log.info("车主结算单支付,数量:{}", list.size());
for (SettlementDriverDetail item : list) {
jobHandlerService.subHandler("车主结算单-支付", item, settlementMqHandlerService::paySettlementDriver);
}
});
}
}
package com.clx.performance.job;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.param.pc.driver.NetworkDriverAccountParam;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.settle.NetworkDriverAccountService;
import com.clx.user.feign.DriverFeign;
import com.clx.user.vo.pc.driver.user.DriverInfoVo;
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 java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
@AllArgsConstructor
public class NetworkDriverAccountSyncJob {
private final DriverFeign driverFeign;
private final NetworkDriverAccountService networkDriverAccountService;
/**
* 网络货运同步司机账户信息
*/
@XxlJob("networkDriverAccountSync")
public void networkDriverAccountSync() {
Result<List<DriverInfoVo>> result = driverFeign.getDriverInfoList();
List<DriverInfoVo> data = result.getData();
log.info("查询出所有司机信息:{}", JSONUtil.parse(data));
for (DriverInfoVo vo : data) {
if (ObjectUtil.isNull(vo.getUserNo())) {
continue;
}
NetworkDriverAccountParam param = new NetworkDriverAccountParam();
param.setDriverUserName(vo.getName());
param.setDriverUserNo(vo.getUserNo());
param.setMobile(vo.getMobile());
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
networkDriverAccountService.createNetworkDriverAccount(param);
}
}
}
package com.clx.performance.job;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.ThirdComponent;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.param.feign.transport.OrderChildPaySyncParam;
import com.msl.common.dto.HttpDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
@AllArgsConstructor
public class OrderChildPaySyncTransportJob {
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
private final TransportFeignService transportFeignService;
/**
* 同步网络货运
*/
@XxlJob("orderChildPaySyncTransportJob")
public void orderChildPaySyncTransportJob() {
List<OrderChildSyncTransportRecord> recordList = orderChildSyncTransportRecordDao.selectListForJob();
if (CollectionUtil.isEmpty(recordList)) {
return;
}
List<String> orderChilList = recordList.stream().map(OrderChildSyncTransportRecord::getChildNo).collect(Collectors.toList());
OrderChildPaySyncParam param = new OrderChildPaySyncParam();
param.setChildNoList(orderChilList);
HttpDTO httpDTO = transportFeignService.orderChildPaySync(param);
String decrypt = ThirdComponent.decrypt(httpDTO.getData());
OrderChildSyncDTO bean = JSONUtil.toBean(decrypt, OrderChildSyncDTO.class);
if (bean.getCode() == 0) {
for (OrderChildSyncTransportRecord record : recordList) {
OrderChildSyncTransportRecord update = new OrderChildSyncTransportRecord();
update.setId(record.getId());
update.setStatus(1);
orderChildSyncTransportRecordDao.updateEntityByKey(update);
}
}
}
}
...@@ -47,5 +47,4 @@ public class OwnerBreakContractSettlementJob { ...@@ -47,5 +47,4 @@ public class OwnerBreakContractSettlementJob {
} }
package com.clx.performance.mapper.settle;
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.settle.NetworkCaseOutRecord;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import com.clx.performance.sqlProvider.settle.NetworkCaseOutRecordProvider;
import com.clx.performance.vo.pc.NetworkCaseOutRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkCaseOutRecordMapper extends BaseMapper<NetworkCaseOutRecord> {
@SelectProvider(type = NetworkCaseOutRecordProvider.class, method = "networkCaseOutRecord")
IPage<NetworkCaseOutRecordVO> networkCaseOutRecord(Page<OwnerAccountVO> page, PageNetworkCaseOutRecordListParam param);
}
package com.clx.performance.mapper.settle;
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.settle.NetworkDriverAccount;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.sqlProvider.settle.NetworkDriverAccountProvider;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverAccountMapper extends BaseMapper<NetworkDriverAccount> {
@SelectProvider(type = NetworkDriverAccountProvider.class, method = "networkAccountList")
IPage<NetworkDriverAccountVO> networkAccountList(@Param("page")Page<NetworkDriverAccountVO> page, @Param("param")PageNetworkAccountListParam param);
@Update("update network_driver_account set usable_balance = usable_balance + #{account.usableBalance}"
+ ",account_balance = account_balance + #{account.accountBalance}"
+ ",modified_time= #{now}"
+ "where id = #{account.id} and modified_time = #{account.modifiedTime}"
)
Integer addAccount(@Param("account") NetworkDriverAccount account, @Param("now") String now);
@Update("update network_driver_account set usable_balance = usable_balance - #{account.usableBalance}," +
"frozen_balance = frozen_balance + #{account.frozenBalance},account_balance = account_balance - #{account.accountBalance}," +
"modified_time=#{now}"
+ "where id = #{account.id} and modified_time = #{account.modifiedTime}"
)
Integer subAccount(@Param("account") NetworkDriverAccount account, @Param("now") String now);
}
package com.clx.performance.mapper.settle;
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.settle.NetworkDriverRunningWaterRecord;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.sqlProvider.settle.NetworkDriverRunningWaterRecordProvider;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverRunningWaterRecordMapper extends BaseMapper<NetworkDriverRunningWaterRecord> {
@SelectProvider(type = NetworkDriverRunningWaterRecordProvider.class, method = "networkDriverRunningWaterRecordDao")
IPage<NetworkDriverRunningWaterRecordVO> networkDriverRunningWaterRecordDao(Page<NetworkDriverRunningWaterRecordVO> page, PageNetworkAccountInfoListParam param);
@SelectProvider(type = NetworkDriverRunningWaterRecordProvider.class, method = "pageFrozenList")
IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(Page<APPNetworkDriverRunningWaterRecordVO> page, NetworkDriverPageParam param);
@SelectProvider(type = NetworkDriverRunningWaterRecordProvider.class, method = "runningWaterList")
IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(Page<APPNetworkDriverRunningWaterRecordVO> page, NetworkDriverPageParam param);
}
package com.clx.performance.mapper.settle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
public interface OrderChildSyncTransportRecordMapper extends BaseMapper<OrderChildSyncTransportRecord> {
}
...@@ -2,9 +2,21 @@ package com.clx.performance.mapper.settle; ...@@ -2,9 +2,21 @@ package com.clx.performance.mapper.settle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.sqlProvider.settle.SettlementDriverDetailSqlProvider;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import java.time.LocalDateTime;
import java.util.List;
@Mapper @Mapper
public interface SettlementDriverDetailMapper extends BaseMapper<SettlementDriverDetail> { public interface SettlementDriverDetailMapper extends BaseMapper<SettlementDriverDetail> {
@SelectProvider(type = SettlementDriverDetailSqlProvider.class, method = "listUnPay")
List<SettlementDriverDetail> listUnPay(@Param("beginTime") LocalDateTime beginTime);
@SelectProvider(type = SettlementDriverDetailSqlProvider.class, method = "findByDriverSettlementIds")
List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids);
} }
\ No newline at end of file
...@@ -20,4 +20,6 @@ public interface SettlementOwnerDetailMapper extends BaseMapper<SettlementOwnerD ...@@ -20,4 +20,6 @@ public interface SettlementOwnerDetailMapper extends BaseMapper<SettlementOwnerD
IPage<PageOwnerSettlementOwnerDetailVO> pageOwnerSettlementOrderDetailList(@Param("page") Page<PageOwnerSettlementOwnerDetailVO> page, IPage<PageOwnerSettlementOwnerDetailVO> pageOwnerSettlementOrderDetailList(@Param("page") Page<PageOwnerSettlementOwnerDetailVO> page,
@Param("param") PageOwnerSettlementOwnerDetailParam param); @Param("param") PageOwnerSettlementOwnerDetailParam param);
@SelectProvider(type = SettlementOwnerDetailSqlProvider.class, method = "getInvoiceType")
Integer getInvoiceType(@Param("orderNo") String orderNo);
} }
\ No newline at end of file
package com.clx.performance.model.settle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("network_case_out_record")
@Builder
public class NetworkCaseOutRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("case_out_no")
@ApiModelProperty("提现单号")
private Long caseOutNo;
@TableField("driver_user_no")
@ApiModelProperty("司机编码")
private Long driverUserNo;
@TableField("driver_user_name")
@ApiModelProperty("司机名称")
private String driverUserName;
@TableField("mobile")
@ApiModelProperty("联系电话")
private String mobile;
@TableField("payee")
@ApiModelProperty("收款人")
private String payee;
@TableField("bank")
@ApiModelProperty("开户行")
private String bank;
@TableField("collection_bank_code")
@ApiModelProperty("收款银行账户")
private String collectionBankCode;
@TableField("status")
@ApiModelProperty("状态 10:待平台付款 20:已付款")
private Integer status;
@TableField("status_msg")
@ApiModelProperty("状态简介")
private String statusMsg;
@TableField("platform")
@ApiModelProperty("平台")
private String platform;
@TableField("order_no")
@ApiModelProperty("订单编号")
private String orderNo;
@TableField("order_goods_no")
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@TableField("child_no")
@ApiModelProperty("运单编号")
private String childNo;
@TableField("alteration_balance")
@ApiModelProperty("变动金额")
private BigDecimal alterationBalance;
@TableField("create_by")
@ApiModelProperty("操作人")
private String createBy;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@TableField("finish_time")
@ApiModelProperty("提现完成时间")
private LocalDateTime finishTime;
@TableField("modified_time")
@ApiModelProperty("修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.model.settle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Data
@Accessors(chain = true)
@TableName("network_driver_account")
@Builder
public class NetworkDriverAccount implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("driver_user_no")
@ApiModelProperty("司机编码")
private Long driverUserNo;
@TableField("driver_user_name")
@ApiModelProperty("司机名称")
private String driverUserName;
@TableField("mobile")
@ApiModelProperty("联系电话")
private String mobile;
@TableField("account_balance")
@ApiModelProperty("账户余额")
private BigDecimal accountBalance;
@TableField("usable_balance")
@ApiModelProperty("可用余额")
private BigDecimal usableBalance;
@TableField("frozen_balance")
@ApiModelProperty("冻结余额")
private BigDecimal frozenBalance;
@TableField("wallet_code")
@ApiModelProperty("钱包code")
private String walletCode;
@TableField("create_by")
@ApiModelProperty("创建人")
private String createBy;
@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.settle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("network_driver_running_water_record")
@Builder
public class NetworkDriverRunningWaterRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("running_water_no")
@ApiModelProperty("流水号")
private Long runningWaterNo;
@TableField("driver_user_no")
@ApiModelProperty("司机编码")
private Long driverUserNo;
@TableField("driver_user_name")
@ApiModelProperty("司机名称")
private String driverUserName;
@TableField("mobile")
@ApiModelProperty("联系电话")
private String mobile;
@TableField("running_water_type")
@ApiModelProperty("流水类型 10:运单结算 20:提现冻结 30:提现成功")
private Integer runningWaterType;
@TableField("running_water_type_msg")
@ApiModelProperty("流水类型简介")
private String runningWaterTypeMsg;
@TableField("frozen_flag")
@ApiModelProperty("冻结标记:如果是1代表当前冻结流水已经提现成功")
private Integer frozenFlag;
@TableField("fund_type")
@ApiModelProperty("资金类型 10:收入 20:冻结 30:支出")
private Integer fundType;
@TableField("fund_type_msg")
@ApiModelProperty("资金类型简介")
private String fundTypeMsg;
@TableField("order_no")
@ApiModelProperty("订单编号")
private String orderNo;
@TableField("order_goods_no")
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@TableField("child_no")
@ApiModelProperty("运单编号")
private String childNo;
@TableField("alteration_balance")
@ApiModelProperty("变动金额")
private BigDecimal alterationBalance;
@TableField("frozen_balance")
@ApiModelProperty("冻结金额")
private BigDecimal frozenBalance;
@TableField("usable_balance")
@ApiModelProperty("可用余额")
private BigDecimal usableBalance;
@TableField("account_balance")
@ApiModelProperty("账户余额")
private BigDecimal accountBalance;
@TableField("take_out_balance")
@ApiModelProperty("扣除金额")
private BigDecimal takeOutBalance;
@TableField("create_by")
@ApiModelProperty("操作人")
private String createBy;
@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.settle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_sync_transport_record")
public class OrderChildSyncTransportRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("driver_user_no")
@ApiModelProperty("车主用户编号")
private Long driverUserNo;
@TableField("driver_name")
@ApiModelProperty("车主名称")
private String driverName;
@TableField("settlement_no")
@ApiModelProperty("结算单号")
private String settlementNo;
@TableField("child_no")
@ApiModelProperty("运单编号")
private String childNo;
@TableField("order_goods_no")
@ApiModelProperty("货单编号")
private String orderGoodsNo;
@TableField("order_no")
@ApiModelProperty("订单编号")
private String orderNo;
@TableField("goods_id")
@ApiModelProperty("货物id")
private Integer goodsId;
@TableField("goods_name")
@ApiModelProperty("货物名称")
private String goodsName;
@TableField("truck_no")
@ApiModelProperty("车牌号")
private String truckNo;
@TableField("weight")
@ApiModelProperty("拉运重量(单位吨)")
private BigDecimal weight;
@TableField("freight_price")
@ApiModelProperty("运费单价(分)")
private BigDecimal freightPrice;
@TableField("freight")
@ApiModelProperty("实际运费(分)")
private BigDecimal freight;
@TableField("loss_price")
@ApiModelProperty("损耗单价(分)")
private BigDecimal lossPrice;
@TableField("loss_weight")
@ApiModelProperty("货损吨数")
private BigDecimal lossWeight;
@TableField("loss_freight")
@ApiModelProperty("货损金额(分)")
private BigDecimal lossFreight;
@TableField("prepay_freight")
@ApiModelProperty("预付运费金额(分)")
private BigDecimal prepayFreight;
@TableField("prepay_freight_flag")
@ApiModelProperty("预付运费标示 0:未预付 1:已预付")
private Integer prepayFreightFlag;
@TableField("settlement_freight")
@ApiModelProperty("结算金额(分)")
private BigDecimal settlementFreight;
@TableField("invoice_type")
@ApiModelProperty("开票标识:1网运单 2普通单")
private Integer invoiceType;
@TableField("status")
@ApiModelProperty("状态 0: 未同步, 1:已同步 2:回调成功 3:回调失败")
private Integer status;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@TableField("modified_time")
@ApiModelProperty("修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
...@@ -45,6 +45,7 @@ public class SettlementDriver implements HasKey<Integer> { ...@@ -45,6 +45,7 @@ public class SettlementDriver implements HasKey<Integer> {
private BigDecimal settlementFreight; //结算金额(分) private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单 private Integer invoiceType; //开票标识:1网运单 2普通单
private String settlementPlatform; //结算平台 private String settlementPlatform; //结算平台
private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付
private String payErrorMsg; //支付失败原因 private String payErrorMsg; //支付失败原因
private Integer status; //状态 private Integer status; //状态
private LocalDateTime createTime; //创建时间 private LocalDateTime createTime; //创建时间
......
...@@ -43,6 +43,7 @@ public class SettlementDriverDetail implements HasKey<Integer> { ...@@ -43,6 +43,7 @@ public class SettlementDriverDetail implements HasKey<Integer> {
private BigDecimal lossWeight; //货损吨数 private BigDecimal lossWeight; //货损吨数
private BigDecimal lossFreight; //货损金额(分) private BigDecimal lossFreight; //货损金额(分)
private BigDecimal prepayFreight; //预付运费金额(分) private BigDecimal prepayFreight; //预付运费金额(分)
private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付
private BigDecimal settlementFreight; //结算金额(分) private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单 private Integer invoiceType; //开票标识:1网运单 2普通单
private Integer status; //状态 private Integer status; //状态
......
...@@ -75,12 +75,14 @@ public interface OrderChildService { ...@@ -75,12 +75,14 @@ public interface OrderChildService {
void orderChildExpect(); void orderChildExpect();
/** /**
* 查询在途运单 * 查询是否存在未通过榜单审核的运单
* @param orderNo * @param orderNo
* @return * @return
*/ */
List<OrderChild> selectInTransitOrderChild(String orderNo); List<OrderChild> selectInTransitOrderChild(String orderNo);
List<OrderChild> selectInTransitOrderChildLtUnsettle(String orderNo);
DriverCancelOrderChildInfo driverCancelOrderChildInfo(String orderChildNo); DriverCancelOrderChildInfo driverCancelOrderChildInfo(String orderChildNo);
void updateOrderGoodsAmountLoad(OrderGoods orderGoods,String childNo, BigDecimal dif, Integer orderGoodsStatus); void updateOrderGoodsAmountLoad(OrderGoods orderGoods,String childNo, BigDecimal dif, Integer orderGoodsStatus);
......
package com.clx.performance.service;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.feign.transport.ThirdOrderChildBrokerParam;
public interface TransportSyncService {
ThirdOrderChildBrokerParam generateOrderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail
);
}
...@@ -2,6 +2,6 @@ package com.clx.performance.service.breakcontract; ...@@ -2,6 +2,6 @@ package com.clx.performance.service.breakcontract;
public interface BreakContractJobHandlerService { public interface BreakContractJobHandlerService {
void pay(Integer settlementId); String pay(Integer settlementId);
} }
package com.clx.performance.service.breakcontract; package com.clx.performance.service.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam; import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO; import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO; import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
...@@ -19,4 +20,6 @@ public interface BreakContractSettlementDriverService { ...@@ -19,4 +20,6 @@ public interface BreakContractSettlementDriverService {
SXSSFWorkbook exportCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param); SXSSFWorkbook exportCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param);
CarrierBreakContractSettlementDriverDetailVO getDetailBySettlementNo(String settlementNo); CarrierBreakContractSettlementDriverDetailVO getDetailBySettlementNo(String settlementNo);
void updateBatchPayDriverBreakContractSettlement(BatchUpdatePayDriverBreakContractSettlementParam param);
} }
...@@ -170,19 +170,12 @@ public class IntegralTruckServiceImpl implements IntegralTruckService { ...@@ -170,19 +170,12 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
List<String> truckNoList = driverTruckList.stream().map(item -> item.getTruckNo()).collect(Collectors.toList()); List<String> truckNoList = driverTruckList.stream().map(item -> item.getTruckNo()).collect(Collectors.toList());
param.setTruckNoList(truckNoList); param.setTruckNoList(truckNoList);
param.setTime(LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek()));
param.setStatisticsDate(time);
IPage<IntegralTruckVO> page = integralTruckDao.driverPageTruckRank(param); IPage<IntegralTruckVO> page = integralTruckDao.driverPageTruckRank(param);
truckNoList = page.getRecords().stream().map(item -> item.getTruckNo()).collect(Collectors.toList()); truckNoList = page.getRecords().stream().map(item -> item.getTruckNo()).collect(Collectors.toList());
if (!truckNoList.isEmpty()) { if (!truckNoList.isEmpty()) {
List<IntegralStatistics> statisticsList = integralStatisticsDao.selectListByStatisticsDateAndTruckNoList(time, truckNoList);
Map<String, Integer> rankMap = statisticsList.stream().collect(Collectors.toMap(item -> item.getTruckNo(), item -> item.getRank()));
Map<String, Integer> integralMap = statisticsList.stream().collect(Collectors.toMap(item -> item.getTruckNo(), item -> item.getIntegral()));
for (IntegralTruckVO item : page.getRecords()) {
item.setRank(rankMap.get(item.getTruckNo()));
item.setIntegral(integralMap.get(item.getTruckNo()));
}
Map<String, IntegralTruckVO> truckMap = page.getRecords().stream().collect(Collectors.toMap(item -> item.getTruckNo(), item -> item)); Map<String, IntegralTruckVO> truckMap = page.getRecords().stream().collect(Collectors.toMap(item -> item.getTruckNo(), item -> item));
......
...@@ -2,19 +2,24 @@ package com.clx.performance.service.impl; ...@@ -2,19 +2,24 @@ package com.clx.performance.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.order.enums.OrderEnum; import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam; import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam; import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.param.mq.FreezeTriggerMqParam;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.GoodsOrderTruckRecordComponent; import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent; import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
...@@ -24,6 +29,8 @@ import com.clx.performance.service.*; ...@@ -24,6 +29,8 @@ import com.clx.performance.service.*;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.enums.owner.FreezeSettingEnum;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
...@@ -31,6 +38,7 @@ import com.msl.user.data.UserSessionData; ...@@ -31,6 +38,7 @@ import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder; import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
...@@ -39,10 +47,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -39,10 +47,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -75,6 +80,11 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -75,6 +80,11 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OrderGoodsService orderGoodsService; private final OrderGoodsService orderGoodsService;
private final OwnerInfoService ownerInfoService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -89,10 +99,17 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -89,10 +99,17 @@ public class OrderCancelServiceImpl implements OrderCancelService {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
} }
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2 //TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
//1网运单 2普通单
Integer invoiceType = settlementOwnerDetailDao.getInvoiceType(orderNo);
log.info("invoiceType={}", invoiceType);
ThawAccountParam thawAccountParam = new ThawAccountParam(); 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); thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam)); log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam); ownerAccountService.ownerAccountThaw(thawAccountParam);
this.ownerConfirmCancelProcess(orderNo); this.ownerConfirmCancelProcess(orderNo);
...@@ -114,6 +131,20 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -114,6 +131,20 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} }
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(), orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids); 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());
} else {
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
}
thawAccountParam.setOrderNo(orderNo);
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
} else { } else {
List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode()); List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
...@@ -176,13 +207,6 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -176,13 +207,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} }
} }
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode); Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode);
if (!result.succeed()) { if (!result.succeed()) {
...@@ -336,13 +360,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -336,13 +360,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderFeign.orderCancelReason(orderCancelReasonParam); orderFeign.orderCancelReason(orderCancelReasonParam);
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2 //TODO 注意判断普通单还是网运单 普通单类型 2 网运单 1
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
...@@ -469,13 +487,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -469,13 +487,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo()); orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName()); orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
orderFeign.orderCancelReason(orderCancelReasonParam); orderFeign.orderCancelReason(orderCancelReasonParam);
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2 //TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
log.info("执行订单状态更改"); log.info("执行订单状态更改");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) { if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
...@@ -686,6 +698,28 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -686,6 +698,28 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//订单取消恢复货单的剩余吨数为0 //订单取消恢复货单的剩余吨数为0
orderGoodsService.batchUpdateResidueWeight(orderGoodsList); orderGoodsService.batchUpdateResidueWeight(orderGoodsList);
//触发自动冻结的mq消费逻辑
triggerAutoFreeze(orderInfoFeign.getOwnerUserNo(),orderNo);
}
//订单取消增加自动冻结的消息触发
private void triggerAutoFreeze(Long ownerUserNo,String orderNo){
try{
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(ownerUserNo);
//充值成功并且当前货主是冻结方式是自动冻结,则触发自动冻结的mq监听
if(Objects.equals(ownerInfo.getFreezeSetting(), FreezeSettingEnum.AUTO.getCode())){
log.info("货主取消订单,发送自动冻结的mq消息,货主编号:{},订单编号:{}",ownerUserNo,orderNo);
FreezeTriggerMqParam mq = new FreezeTriggerMqParam();
mq.setUserNo(ownerUserNo);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
//设置延时5秒处理,防止事务未提交
message.getMessageProperties().setHeader("x-delay", 5000);
rabbitTemplate.send(RabbitKeyConstants.FREEZE_TRIGGER_EXCHANGE, RabbitKeyConstants.FREEZE_TRIGGER_ROUTING_KEY,message);
}
}catch (Exception e){
log.warn("货主取消订单,自动冻结发生异常:{}", ExceptionUtils.getStackTrace(e));
}
} }
@Override @Override
......
...@@ -162,6 +162,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -162,6 +162,9 @@ public class OrderChildServiceImpl implements OrderChildService {
private UserService userService; private UserService userService;
@Autowired
private OwnerRunningWaterRecordDao ownerRunningWaterRecordDao;
@Override @Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) { public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
...@@ -1047,6 +1050,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1047,6 +1050,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode()); orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChild.setConfirmTime(LocalDateTime.now()); orderChild.setConfirmTime(LocalDateTime.now());
orderChildDao.updateDriverConfirm(orderChild); orderChildDao.updateDriverConfirm(orderChild);
// 更新车辆状态 // 更新车辆状态
...@@ -1308,9 +1312,29 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1308,9 +1312,29 @@ public class OrderChildServiceImpl implements OrderChildService {
if (sendAndReceiveAddress.isPresent()) { if (sendAndReceiveAddress.isPresent()) {
result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress())); result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress()));
} }
//亏吨吨数
result.setLossWeight(calcLossWeight(orderChild));
//亏吨扣款
result.setLossAmount(calcLossAmount(result.getLossWeight(),orderChild.getLossPrice()));
return result; return result;
} }
//计算亏吨吨数
private BigDecimal calcLossWeight(OrderChild orderChild){
if (Objects.nonNull(orderChild.getUnloadNet())){
return orderChild.getUnloadNet().subtract(orderChild.getLoadNet()).compareTo(BigDecimal.ZERO) < 0 ?
orderChild.getLoadNet().subtract(orderChild.getUnloadNet()) : BigDecimal.ZERO;
}
return null;
}
//计算亏吨金额
private BigDecimal calcLossAmount(BigDecimal lossWeight, BigDecimal lossPrice){
if (Objects.nonNull(lossWeight)){
return lossWeight.multiply(lossPrice).setScale(0, RoundingMode.HALF_UP);
}
return null;
}
@Override @Override
public IPage<OrderChildVO> pageOrderChild(PageOrderChildOfDriverParam param) { public IPage<OrderChildVO> pageOrderChild(PageOrderChildOfDriverParam param) {
...@@ -2015,6 +2039,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2015,6 +2039,11 @@ public class OrderChildServiceImpl implements OrderChildService {
return orderChildDao.selectInTransitOrderChild(orderNo); return orderChildDao.selectInTransitOrderChild(orderNo);
} }
@Override
public List<OrderChild> selectInTransitOrderChildLtUnsettle(String orderNo) {
return orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo);
}
/** /**
* @return * @return
......
...@@ -309,11 +309,11 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -309,11 +309,11 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) { if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数");
} }
//考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数 //考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数
BigDecimal realExtractWeight = oldOrderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0? BigDecimal realExtractWeight = oldOrderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getAlreadyTransportWeight().add(oldOrderGoods.getResidueTransportWeight()); oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getAlreadyTransportWeight().add(oldOrderGoods.getResidueTransportWeight());
oldOrderGoods.setExtractWeight(realExtractWeight); oldOrderGoods.setExtractWeight(realExtractWeight);
//本次提取增加或者减少的吨数 = 本次提取的吨数 - 货单原实际提取吨数 //本次提取增加或者减少的吨数 = 本次提取的吨数 - 货单原实际提取吨数
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(realExtractWeight); BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(realExtractWeight);
int flag = answer.compareTo(BigDecimal.ZERO); int flag = answer.compareTo(BigDecimal.ZERO);
...@@ -366,7 +366,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -366,7 +366,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam)); log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam));
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam); orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
} else { } else {
//当编辑吨数等于0 的时候,不进行拦截 //当编辑吨数等于0 的时候,不进行拦截
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight()); orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight());
} }
...@@ -462,7 +461,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -462,7 +461,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
* 限制货单更新剩余吨数不能小于35吨 * 限制货单更新剩余吨数不能小于35吨
**/ **/
private void limitOrderGoodsResidueWeight(BigDecimal residueTransportWeight){ private void limitOrderGoodsResidueWeight(BigDecimal residueTransportWeight){
if(residueTransportWeight.compareTo(BigDecimal.ZERO) != 0 && residueTransportWeight.compareTo(new BigDecimal("35")) < 0){ if(residueTransportWeight.compareTo(BigDecimal.ZERO) != 0 && residueTransportWeight.compareTo(new BigDecimal("35")) < 0){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"当前货单剩余吨数不足35吨,无法挂单"); throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"当前货单剩余吨数不足35吨,无法挂单");
} }
......
...@@ -12,8 +12,8 @@ import com.clx.order.param.mq.FreezeTriggerMqParam; ...@@ -12,8 +12,8 @@ import com.clx.order.param.mq.FreezeTriggerMqParam;
import com.clx.performance.common.MqWrapper; import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.IdGenerateSnowFlake; import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.config.ClxMessageConfig; import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.*; import com.clx.performance.dao.*;
import com.clx.performance.enums.IdTypeEnum; import com.clx.performance.enums.IdTypeEnum;
import com.clx.performance.enums.OwnerAccountEnum; import com.clx.performance.enums.OwnerAccountEnum;
...@@ -41,8 +41,8 @@ import com.clx.performance.utils.excel.ExcelUtil; ...@@ -41,8 +41,8 @@ import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OwnerAccountAllVO; import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO; import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO; import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.user.feign.OwnerFeign;
import com.clx.user.enums.owner.FreezeSettingEnum; import com.clx.user.enums.owner.FreezeSettingEnum;
import com.clx.user.feign.OwnerFeign;
import com.clx.user.feign.OwnerInfoFeign; import com.clx.user.feign.OwnerInfoFeign;
import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam; import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
...@@ -57,23 +57,21 @@ import lombok.AllArgsConstructor; ...@@ -57,23 +57,21 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder; import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.UUID;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
@Slf4j @Slf4j
@Service @Service
...@@ -415,7 +413,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -415,7 +413,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
mq.setUserNo(ownerUserNo); mq.setUserNo(ownerUserNo);
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build(); Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(mq)).getBytes()).build();
//设置延时5秒处理,防止事务未提交 //设置延时5秒处理,防止事务未提交
message.getMessageProperties().setExpiration("5000"); message.getMessageProperties().setHeader("x-delay", 5000);
rabbitTemplate.send(RabbitKeyConstants.FREEZE_TRIGGER_EXCHANGE, RabbitKeyConstants.FREEZE_TRIGGER_ROUTING_KEY,message); rabbitTemplate.send(RabbitKeyConstants.FREEZE_TRIGGER_EXCHANGE, RabbitKeyConstants.FREEZE_TRIGGER_ROUTING_KEY,message);
} }
} }
...@@ -822,7 +820,6 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -822,7 +820,6 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
} }
if (flag == 2) { if (flag == 2) {
log.info("冻结账户完毕"); log.info("冻结账户完毕");
log.info("插入保证金冻结流水");
accountList = ownerAccountDao.accountInfo(userNo); accountList = ownerAccountDao.accountInfo(userNo);
for (OwnerAccount ownerAccount : accountList) { for (OwnerAccount ownerAccount : accountList) {
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) { if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) {
...@@ -911,75 +908,217 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -911,75 +908,217 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void ownerAccountThaw(ThawAccountParam param) { public void ownerAccountThaw(ThawAccountParam param) {
String orderNo = param.getOrderNo(); String orderNo = param.getOrderNo();
List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo);
if (CollectionUtil.isEmpty(list)) {
log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param));
return;
}
List<OwnerRunningWaterRecord> thawList = list.stream().filter(i -> {
return i.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
}
).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(thawList)) {
log.info("当前订单已经产生了解冻流水,参数为{}", JSONUtil.parse(param));
return;
}
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(param.getOrderType())) { if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(param.getOrderType())) {
List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo); generateOrdinary(list);
if (CollectionUtil.isEmpty(list)) { }
log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param)); else {
return; generateNetwork(list);
}
}
//处理网运单
private void generateNetwork(List<OwnerRunningWaterRecord> runningWaterRecordList) {
//保证金冻结金额
BigDecimal frozenMargin = BigDecimal.ZERO;
//预付运费冻结金额
BigDecimal frozenFreight = BigDecimal.ZERO;
//预付运费扣除金额
BigDecimal takeOutFreight = BigDecimal.ZERO;
List<OwnerRunningWaterRecord> list = new LinkedList<>();
for (OwnerRunningWaterRecord runningWaterRecord : runningWaterRecordList) {
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())
&& runningWaterRecord.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
) {
frozenMargin = runningWaterRecord.getAlterationBalance();
list.add(runningWaterRecord);
} }
while (true) { if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
int flag = 0; && runningWaterRecord.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
for (OwnerRunningWaterRecord runningWaterRecord : list) { ) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType()); frozenFreight = runningWaterRecord.getAlterationBalance();
list.add(runningWaterRecord);
}
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
&& runningWaterRecord.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode())
) {
takeOutFreight = takeOutFreight.add(runningWaterRecord.getAlterationBalance());
}
}
BigDecimal subtract = frozenFreight.subtract(takeOutFreight);
log.info("执行网运单账户释放: 保证金冻结金额:{}, 预付运费冻结金额{}, 预付运费扣除金额, {},有效流水记录:{}", frozenMargin, frozenFreight, takeOutFreight, JSONUtil.parse(list));
while (true) {
int flag = 0;
for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
if (account.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) {
OwnerAccount entity = new OwnerAccount(); OwnerAccount entity = new OwnerAccount();
entity.setId(account.getId()); entity.setId(account.getId());
entity.setModifiedTime(account.getModifiedTime()); entity.setModifiedTime(account.getModifiedTime());
entity.setAccountBalance(BigDecimal.ZERO); entity.setAccountBalance(BigDecimal.ZERO);
entity.setUsableBalance(runningWaterRecord.getAlterationBalance()); entity.setUsableBalance(frozenMargin);
entity.setFrozenBalance(runningWaterRecord.getAlterationBalance()); entity.setFrozenBalance(frozenMargin);
flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now());
} else {
OwnerAccount entity = new OwnerAccount();
entity.setId(account.getId());
entity.setModifiedTime(account.getModifiedTime());
entity.setAccountBalance(BigDecimal.ZERO);
entity.setUsableBalance(subtract);
entity.setFrozenBalance(subtract);
flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now()); flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now());
} }
if (flag == list.size()) { }
log.info("解冻预付运费、保证金账户,账户扣款已处理,开始执行插入相关流水");
for (OwnerRunningWaterRecord runningWaterRecord : list) { if (flag == list.size()) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType()); for (OwnerRunningWaterRecord runningWaterRecord : list) {
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) { OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
log.info("插入预付运费解冻流水"); if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) {
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord(); log.info("插入网运单预付运费解冻流水");
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName()); OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setMobile(runningWaterRecord.getMobile()); prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setCreateBy("系统"); prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setOrderId(runningWaterRecord.getOrderId()); prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo()); prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance()); prepaidFreight.setRelationId(null);
prepaidFreight.setFrozenBalance(account.getFrozenBalance()); prepaidFreight.setAlterationBalance(subtract);
prepaidFreight.setUsableBalance(account.getUsableBalance()); prepaidFreight.setFrozenBalance(account.getFrozenBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO); prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setAccountBalance(account.getAccountBalance()); prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo()); prepaidFreight.setAccountBalance(account.getUsableBalance().add(account.getFrozenBalance()));
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode()); prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode())); prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
ownerRunningWaterRecordDao.saveEntity(prepaidFreight); prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
} else { ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
log.info("插入保证金解冻流水"); } else {
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord(); log.info("插入网运单保证金解冻流水");
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName()); OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setMobile(runningWaterRecord.getMobile()); prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setCreateBy("系统"); prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setOrderId(runningWaterRecord.getOrderId()); prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo()); prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance()); prepaidFreight.setRelationId(null);
prepaidFreight.setFrozenBalance(account.getFrozenBalance()); prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance());
prepaidFreight.setUsableBalance(account.getUsableBalance()); prepaidFreight.setFrozenBalance(account.getFrozenBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO); prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setAccountBalance(account.getAccountBalance()); prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo()); prepaidFreight.setAccountBalance(account.getAccountBalance());
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode()); prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode())); prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
ownerRunningWaterRecordDao.saveEntity(prepaidFreight); prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
} ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
} }
break;
} }
break;
}
}
}
//处理普通单
private void generateOrdinary(List<OwnerRunningWaterRecord> runningWaterRecordList) {
List<OwnerRunningWaterRecord> list = new LinkedList<>();
for (OwnerRunningWaterRecord runningWaterRecord : runningWaterRecordList) {
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())
&& runningWaterRecord.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
) {
list.add(runningWaterRecord);
}
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
&& runningWaterRecord.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
) {
list.add(runningWaterRecord);
}
}
log.info("执行普通单解冻,有效流水记录{}", JSONUtil.parse(list) );
while (true) {
int flag = 0;
for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
OwnerAccount entity = new OwnerAccount();
entity.setId(account.getId());
entity.setModifiedTime(account.getModifiedTime());
entity.setAccountBalance(BigDecimal.ZERO);
entity.setUsableBalance(runningWaterRecord.getAlterationBalance());
entity.setFrozenBalance(runningWaterRecord.getAlterationBalance());
flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now());
}
if (flag == list.size()) {
log.info("解冻普通单预付运费、保证金账户,账户扣款已处理,开始执行插入相关流水");
for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) {
log.info("插入预付运费解冻流水");
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance());
prepaidFreight.setFrozenBalance(account.getFrozenBalance());
prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setAccountBalance(account.getAccountBalance());
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
} else {
log.info("插入保证金解冻流水");
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance());
prepaidFreight.setFrozenBalance(account.getFrozenBalance());
prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setAccountBalance(account.getAccountBalance());
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
}
}
break;
} }
} }
} }
......
...@@ -2,7 +2,6 @@ package com.clx.performance.service.impl; ...@@ -2,7 +2,6 @@ package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.clx.performance.config.MslAppConfig;
import com.clx.performance.config.MslPaymentConfig; import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.ActionConstants; import com.clx.performance.constant.ActionConstants;
import com.clx.performance.dao.ThirdPartRequestLogDao; import com.clx.performance.dao.ThirdPartRequestLogDao;
...@@ -12,23 +11,20 @@ import com.clx.performance.encryption.oldmsl.SystemCodeEnum; ...@@ -12,23 +11,20 @@ import com.clx.performance.encryption.oldmsl.SystemCodeEnum;
import com.clx.performance.enums.PayUnitTypeEnum; import com.clx.performance.enums.PayUnitTypeEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ThirdRequestTypeEnum; import com.clx.performance.enums.ThirdRequestTypeEnum;
import com.clx.performance.service.PaymentService;
import com.clx.performance.model.ThirdPartRequestLog; import com.clx.performance.model.ThirdPartRequestLog;
import com.clx.performance.param.pc.payment.PayParam; import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayUnitDTO; import com.clx.performance.param.pc.payment.PayUnitDTO;
import com.clx.performance.param.pc.payment.PayUserDTO; import com.clx.performance.param.pc.payment.PayUserDTO;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.ThirdPartRequestLogService; import com.clx.performance.service.ThirdPartRequestLogService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.msl.common.dto.HttpDTO; import com.msl.common.dto.HttpDTO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil; import com.msl.common.utils.EncryptUtil;
import com.msl.common.utils.HttpUtil; import com.msl.common.utils.HttpUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
......
package com.clx.performance.service.impl;
import com.clx.order.feign.AddressFeign;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.dto.gd.GdPosDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.PowerTypeEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildImage;
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.*;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.utils.gd.GdService;
import com.clx.user.feign.DocumentFeign;
import com.clx.user.feign.DriverFeign;
import com.clx.user.feign.OwnerFeign;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.feign.*;
import com.msl.common.base.Optional;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
@Service
@Slf4j
@AllArgsConstructor
public class TransportSyncServiceImpl implements TransportSyncService {
private final OrderChildImageDao orderChildImageDao;
private final AddressFeign addressFeign;
private final OrderFeign orderFeign;
private final TruckFeign truckFeign;
private final DriverFeign driverFeign;
private final GdService gdService;
private final DocumentFeign documentFeign;
private final OwnerFeign ownerFeign;
@Override
public ThirdOrderChildBrokerParam generateOrderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,SettlementDriverDetail settlementDriverDetail) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
String host = documentFeign.getHost().getData();
ThirdOrderChildBrokerParam param = new ThirdOrderChildBrokerParam();
FeignAddressVO data = addressFeign.getSendAndReceiveAddress(orderChild.getSendAddressId(), orderChild.getReceiveAddressId()).getData();
FeignAddressVO.Address receiveAddress = data.getReceiveAddress();
FeignAddressVO.Address sendAddress = data.getSendAddress();
//生成基础参数
generateBaseInfo(orderChild, orderGoods, param, sendAddress, receiveAddress, orderInfoFeign, settlementOwnerDetail,settlementDriverDetail, host);
//生成货单数据
generateOrderGoods(orderGoods, orderChild, sendAddress, receiveAddress, param);
//生成车辆信息
generateTruckInfo(orderChild, param, host);
List<GdRouteDTO> route = gdService.getRoute(orderGoods.getSendLongitude().setScale(4, RoundingMode.DOWN)
, orderGoods.getSendLatitude().setScale(4, RoundingMode.DOWN),
orderGoods.getReceiveLongitude().setScale(4, RoundingMode.DOWN),
orderGoods.getReceiveLatitude().setScale(4, RoundingMode.DOWN));
GdRouteDTO gdRouteDTO = route.get(0);
BigDecimal divide = new BigDecimal(gdRouteDTO.getDistance()).divide(new BigDecimal(1000));
param.setDistance(divide);
SyncOrderChildVO syncOrderChildVO = driverFeign.getSyncOrderChild(orderChild.getDriverUserNo(), orderChild.getTruckOwnUserNo()).getData();
DriverInfoFeignVo truckOwnerInfo = syncOrderChildVO.getTruckOwnerInfo();
DriverInfoFeignVo diverInfo = syncOrderChildVO.getDiverInfo();
BankCardVO driverBankCard = syncOrderChildVO.getDriverBankCard();
UserIdCardVO driverUserIdCardVO = syncOrderChildVO.getDriverUserIdCardVO();
BankCardVO truckOwnerBankCard = syncOrderChildVO.getTruckOwnerBankCard();
UserIdCardVO truckOwnerUserIdCardVO = syncOrderChildVO.getTruckOwnerUserIdCardVO();
DriverLicenceFeignVO driverLicenceFeignVO = syncOrderChildVO.getDriverLicenceFeignVO();
DriverLicenceFeignVO truckOwnerLicenceFeignVO = syncOrderChildVO.getTruckOwnerLicenceFeignVO();
//设置司机银行卡
generateDriverBankCard(driverBankCard, driverUserIdCardVO, param, host);
//设置车主银行卡
generateTruckDriverBankCard(truckOwnerBankCard, truckOwnerUserIdCardVO, param, host);
//司机信息
generateDriverInfoDTO(diverInfo, driverLicenceFeignVO, driverUserIdCardVO, param, host);
//车主信息
generateTruckDriverInfoDTO(truckOwnerInfo, truckOwnerLicenceFeignVO, truckOwnerUserIdCardVO, param, host);
//设置轨迹
generateRouteList(gdRouteDTO, param);
return param;
}
private void generateBaseInfo(OrderChild orderChild, OrderGoods orderGoods, ThirdOrderChildBrokerParam param,
FeignAddressVO.Address sendAddress,
FeignAddressVO.Address receiveAddress, FeignOrderVO orderInfoFeign,
SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail, String host
) {
param.setChildNo(orderChild.getChildNo());
param.setCreateTime(DateUtils.formatDateTime(orderChild.getCreateTime()).get());
param.setTruckNo(orderChild.getTruckNo());
param.setFreightPrice(Integer.valueOf(orderChild.getFreightPrice().toString()));
param.setFreight(settlementOwnerDetail.getFreight().intValue()); //货主结算金额
param.setLoadNet(orderChild.getLoadNet());
param.setNet(settlementDriverDetail.getWeight());
param.setSendAddress(orderGoods.getSendAddressShorter());
param.setSendProvince(sendAddress.getProvince());
param.setSendCity(sendAddress.getCity());
param.setSendCounty(sendAddress.getCounty());
param.setSendTown(sendAddress.getTown());
param.setSendName(sendAddress.getContact());
param.setSendMobile(sendAddress.getContactPhone());
param.setFreightNoCard(settlementDriverDetail.getSettlementFreight().intValue()); //司机结算金额
param.setReceiveAddress(receiveAddress.getAddress());
param.setReceiveProvince(receiveAddress.getProvince());
param.setReceiveCity(receiveAddress.getCity());
param.setReceiveCounty(receiveAddress.getCounty());
param.setReceiveTown(receiveAddress.getTown());
param.setReceiveName(receiveAddress.getContact());
param.setReceiveMobile(receiveAddress.getContactPhone());
param.setLoadLongitude(orderGoods.getSendLongitude().toString());
param.setLoadLatitude(orderGoods.getSendLatitude().toString());
param.setUnloadLongitude(orderGoods.getReceiveLongitude().toString());
param.setUnloadLatitude(orderGoods.getReceiveLatitude().toString());
param.setPayTime(DateUtils.formatDateTime(orderChild.getPayTime()).get());
param.setLoadTime(DateUtils.formatDateTime(orderChild.getLoadTime()).get());
param.setUnloadTime(DateUtils.formatDateTime(orderChild.getUnloadTime()).get());
param.setPayFinishedTime(DateUtils.formatDateTime(orderChild.getConfirmTime()).get());
param.setReceiveNet(orderChild.getUnloadNet());
param.setAdvanceType(0);
param.setSourceOrderNo(orderChild.getOrderNo());
param.setSourceGoodsNo(orderChild.getOrderGoodsNo());
param.setSourceInvoicingType(settlementOwnerDetail.getSettlementWay());
param.setSourceFreightPrice(settlementOwnerDetail.getFreightPrice());
param.setSourceInvoicingPrice(settlementOwnerDetail.getInvoiceFreight());
param.setSourceLossPrice(settlementOwnerDetail.getLossFreight());
param.setInvoiceRelationNo(ownerFeign.getOwnerInfo(orderInfoFeign.getOwnerUserNo()).getData().getMobile());
Optional<List<OrderChildImage>> listOptional = orderChildImageDao.listLoadAndUnload(orderChild.getChildNo());
if (listOptional.isPresent()) {
List<String> loadPoundImages = new LinkedList<>();
List<String> unLoadPoundImages = new LinkedList<>();
List<OrderChildImage> orderChildImages = listOptional.get();
for (OrderChildImage image : orderChildImages) {
if (image.getType().equals(1)) {
loadPoundImages.add(host + image.getImage());
} else {
unLoadPoundImages.add(host + image.getImage());
}
}
param.setLoadPoundImages(loadPoundImages);
param.setUnLoadPoundImages(unLoadPoundImages);
}
}
//处理货单数据
private void generateOrderGoods(OrderGoods orderGoods, OrderChild orderChild, FeignAddressVO.Address sendAddress,
FeignAddressVO.Address receiveAddress, ThirdOrderChildBrokerParam param) {
ThirdOrderInfoDTO orderGoodsDto = new ThirdOrderInfoDTO();
orderGoodsDto.setOrderNo(orderGoods.getOrderGoodsNo());
orderGoodsDto.setGoodsName(orderGoods.getGoodsName());
orderGoodsDto.setSendProvince(sendAddress.getProvince());
orderGoodsDto.setSendCity(sendAddress.getCity());
orderGoodsDto.setSendCounty(sendAddress.getCounty());
orderGoodsDto.setSendTown(sendAddress.getTown());
orderGoodsDto.setSendAddress(sendAddress.getAddress());
orderGoodsDto.setSendName(sendAddress.getContact());
orderGoodsDto.setSendMobile(sendAddress.getContactPhone());
orderGoodsDto.setLoadLongitude(orderGoods.getSendLongitude().toString());
orderGoodsDto.setLoadLatitude(orderGoods.getSendLatitude().toString());
orderGoodsDto.setReceiveAddress(receiveAddress.getAddress());
orderGoodsDto.setReceiveProvince(receiveAddress.getProvince());
orderGoodsDto.setReceiveCity(receiveAddress.getCity());
orderGoodsDto.setReceiveCounty(receiveAddress.getCounty());
orderGoodsDto.setReceiveTown(receiveAddress.getTown());
orderGoodsDto.setReceiveName(receiveAddress.getContact());
orderGoodsDto.setReceiveMobile(receiveAddress.getContactPhone());
orderGoodsDto.setUnloadLongitude(orderGoods.getReceiveLongitude().toString());
orderGoodsDto.setUnloadLatitude(orderGoods.getReceiveLatitude().toString());
orderGoodsDto.setGoodsPrice(Integer.valueOf(orderChild.getOrderFreightPrice().toString()));
orderGoodsDto.setTransPrice(Integer.valueOf(orderChild.getFreightPrice().toString()));
orderGoodsDto.setGoodsAmount(orderGoods.getExtractWeight());
orderGoodsDto.setExtractTime(DateUtils.formatDateTime(orderGoods.getLastLoadTime()).get());
orderGoodsDto.setArriveTime(DateUtils.formatDateTime(orderGoods.getLastArriveSendTime()).get());
param.setOrderInfoDTO(orderGoodsDto);
}
//车辆信息
public void generateTruckInfo(OrderChild orderChild, ThirdOrderChildBrokerParam param, String host) {
TruckInfoFeignVo truckInfoFeignVo = truckFeign.getTruckInfoWithTransport(orderChild.getTruckId()).getData();
OrderChildTruckInfoDTO truckInfoDTO = new OrderChildTruckInfoDTO();
DriverInfoFeignVo ownerInfo = driverFeign.getDriverInfo(orderChild.getTruckOwnUserNo()).getData();
truckInfoDTO.setMobile(ownerInfo.getMobile());
truckInfoDTO.setTruckNo(orderChild.getTruckNo());
truckInfoDTO.setTruckNoColor(truckInfoFeignVo.getTruckNoColor());
truckInfoDTO.setModel(truckInfoFeignVo.getModel());
truckInfoDTO.setLoad(truckInfoFeignVo.getLoad());
truckInfoDTO.setGrossMass(truckInfoFeignVo.getGrossMass() == null ? null : truckInfoFeignVo.getGrossMass().intValue());
truckInfoDTO.setRoadTransportCertificateNo(truckInfoFeignVo.getRoadTransportCertificateNo());
truckInfoDTO.setLicenceImgMain(host + truckInfoFeignVo.getLicenceImgMain());
truckInfoDTO.setLicenceImgSecond(host + truckInfoFeignVo.getLicenceImgSecond());
truckInfoDTO.setLicenceImgSecondBack(host + truckInfoFeignVo.getLicenceImgSecondBack());
truckInfoDTO.setTransportLicenceImg(host + truckInfoFeignVo.getTransportLicenceImg());
if (StringUtils.isNotBlank(truckInfoFeignVo.getPowerType())) {
//"车辆燃料类型 1:柴油 2 天然气 3其他 4新能源/电"
truckInfoDTO.setPowerType(PowerTypeEnum.Type.getCodeByName(truckInfoFeignVo.getPowerType()));
}
truckInfoDTO.setUseNature(truckInfoFeignVo.getUseNature());
truckInfoDTO.setIdentifyCode(truckInfoFeignVo.getIdentifyCode());
truckInfoDTO.setLicenceIssueOrganization(truckInfoFeignVo.getLicenceIssueOrganization());
truckInfoDTO.setRegisterDate(truckInfoFeignVo.getRegisterDate() == null ? null : DateUtils.formatDateTime(truckInfoFeignVo.getRegisterDate()).get());
truckInfoDTO.setLicenceIssueDate(truckInfoFeignVo.getLicenceIssueDate() == null ? null : DateUtils.formatDateTime(truckInfoFeignVo.getLicenceIssueDate()).get());
truckInfoDTO.setDrivingLicenseEndTime(truckInfoFeignVo.getLicenceImgMainEndTime() == null ? null : DateUtils.formatDateTime(truckInfoFeignVo.getLicenceImgMainEndTime()).get());
// 挂车
if (Objects.equals(truckInfoFeignVo.getTruckType(), 1)) {
truckInfoDTO.setTruckNo2(truckInfoFeignVo.getTruckNo2());
truckInfoDTO.setLicenceImgMain2(StringUtils.isBlank(truckInfoFeignVo.getLicenceImgMain2())? null : host + truckInfoFeignVo.getLicenceImgMain2());
truckInfoDTO.setLicenceImgSecond2(StringUtils.isBlank(truckInfoFeignVo.getLicenceImgSecond2())? null : host + truckInfoFeignVo.getLicenceImgSecond2());
truckInfoDTO.setLicenceImgSecond2Back(StringUtils.isBlank(truckInfoFeignVo.getLicenceImgSecond2Back())? null : host + truckInfoFeignVo.getLicenceImgSecond2Back());
truckInfoDTO.setLicenceImgMain2EndTime(truckInfoFeignVo.getLicenceImgMain2EndTime()==null? null : DateUtils.formatDateTime(truckInfoFeignVo.getLicenceImgMain2EndTime()).get());
truckInfoDTO.setRoadTransportCertificateNo2(truckInfoFeignVo.getRoadTransportCertificateNo2());
truckInfoDTO.setTransportLicenceImg2(StringUtils.isBlank(truckInfoFeignVo.getTransportLicenceImg2())? null : host + truckInfoFeignVo.getTransportLicenceImg2());
}
param.setTruckInfoDTO(truckInfoDTO);
}
//车主信息
public void generateTruckDriverInfoDTO(DriverInfoFeignVo truckOwnerInfo, DriverLicenceFeignVO licenceVO, UserIdCardVO idCardVO, ThirdOrderChildBrokerParam param, String host) {
OrderChildDriverInfoDTO dto = new OrderChildDriverInfoDTO();
dto.setMobile(truckOwnerInfo.getMobile());
dto.setName(truckOwnerInfo.getName());
dto.setSex(idCardVO.getSex());
dto.setCardNo(idCardVO.getCardNo());
dto.setCardStartTime(idCardVO.getCardStartTime());
dto.setCardEndTime(idCardVO.getCardEndTime());
dto.setCardLongTerm(idCardVO.getCardLongTerm());
dto.setCardFrontImg(host + idCardVO.getCardFaceImg());
dto.setCardBackImg(host + idCardVO.getCardBackImg());
dto.setFaceCardImg(host + idCardVO.getCardFaceImg());
if (null != licenceVO) {
dto.setLicenceNo(licenceVO.getLicenceNo());
dto.setLicenseTime(licenceVO.getLicenceTime() == null ? null : DateUtils.formatDateTime(licenceVO.getLicenceTime()).get());
dto.setLicenceClass(licenceVO.getLicenceClass());
dto.setLicenceImg(host + licenceVO.getLicenceImg());
dto.setLicenceBackImg(host + licenceVO.getLicenceBackImg());
dto.setLicenceStartTime(Optional.ofNullable(licenceVO.getLicenceStartTime()).isPresent() ? DateUtils.formatDateTime(licenceVO.getLicenceStartTime()).get() : null);
dto.setLicenceEndTime(Optional.ofNullable(licenceVO.getLicenceEndTime()).isPresent() ? DateUtils.formatDateTime(licenceVO.getLicenceEndTime()).get() : "2099-12-31 00:00:00");
dto.setOccupationalLicenceNo(licenceVO.getOccupationalLicenceNo());
dto.setOccupationalLicenceImg(host + licenceVO.getOccupationalLicenceImg());
dto.setOccupationalStartTime(licenceVO.getOccupationalLicenceStartTime() == null ? null : DateUtils.formatDateTime(licenceVO.getOccupationalLicenceStartTime()).get());
dto.setOccupationalEndTime(licenceVO.getOccupationalLicenceEndTime() == null ? null : DateUtils.formatDateTime(licenceVO.getOccupationalLicenceEndTime()).get());
dto.setLicenceIssueOrganization(licenceVO.getLicenceIssueOrganization());
}
dto.setIdCardAddress(idCardVO.getAddress());
param.setTruckDriverInfoDTO(dto);
}
//司机信息
public void generateDriverInfoDTO(DriverInfoFeignVo driverInfo, DriverLicenceFeignVO licenceVO, UserIdCardVO idCardVO, ThirdOrderChildBrokerParam param, String host) {
OrderChildDriverInfoDTO dto = new OrderChildDriverInfoDTO();
dto.setMobile(driverInfo.getMobile());
dto.setName(driverInfo.getName());
dto.setSex(idCardVO.getSex());
dto.setCardNo(idCardVO.getCardNo());
dto.setCardStartTime(idCardVO.getCardStartTime());
dto.setCardEndTime(idCardVO.getCardEndTime());
dto.setCardLongTerm(idCardVO.getCardLongTerm());
dto.setCardFrontImg(host + idCardVO.getCardFaceImg());
dto.setCardBackImg(host + idCardVO.getCardBackImg());
dto.setFaceCardImg(host + idCardVO.getCardFaceImg());
dto.setLicenceNo(licenceVO.getLicenceNo());
dto.setLicenseTime(licenceVO.getLicenceTime() == null ? null : DateUtils.formatDateTime(licenceVO.getLicenceTime()).get());
dto.setLicenceClass(licenceVO.getLicenceClass());
dto.setLicenceImg(host + licenceVO.getLicenceImg());
dto.setLicenceBackImg(host + licenceVO.getLicenceBackImg());
dto.setLicenceStartTime(licenceVO.getLicenceStartTime() == null ? null : DateUtils.formatDateTime(licenceVO.getLicenceStartTime()).get());
dto.setLicenceEndTime(Optional.ofNullable(licenceVO.getLicenceEndTime()).isPresent() ? DateUtils.formatDateTime(licenceVO.getLicenceEndTime()).get() : "2099-12-31 00:00:00");
dto.setOccupationalLicenceNo(licenceVO.getOccupationalLicenceNo());
dto.setOccupationalLicenceImg(host + licenceVO.getOccupationalLicenceImg());
dto.setOccupationalStartTime(licenceVO.getOccupationalLicenceStartTime() == null ? null : DateUtils.formatDateTime(licenceVO.getOccupationalLicenceStartTime()).get());
dto.setOccupationalEndTime(licenceVO.getOccupationalLicenceEndTime() == null ? null : DateUtils.formatDateTime(licenceVO.getOccupationalLicenceEndTime()).get());
dto.setLicenceIssueOrganization(licenceVO.getLicenceIssueOrganization());
dto.setIdCardAddress(idCardVO.getAddress());
param.setDriverInfoDTO(dto);
}
//司机银行卡
public void generateDriverBankCard(BankCardVO bankCardVO, UserIdCardVO idCardVO, ThirdOrderChildBrokerParam param, String host) {
OrderChildBankInfoDTO dto = new OrderChildBankInfoDTO();
if (null != bankCardVO) {
dto.setName(bankCardVO.getName());
dto.setCardNo(bankCardVO.getCardNo());
dto.setMobile(bankCardVO.getMobile());
dto.setAccountType(StringUtils.isBlank(bankCardVO.getAccountType()) ? null : Integer.valueOf(bankCardVO.getAccountType()));
dto.setType(bankCardVO.getType());
dto.setIdCard(bankCardVO.getIdCard());
dto.setBank(bankCardVO.getBank());
dto.setBankCode(bankCardVO.getBankCode());
}
dto.setIdCardFrontImg(host + idCardVO.getCardFaceImg());
dto.setIdCardBackImg(host + idCardVO.getCardBackImg());
param.setDriverBankInfoDTO(dto);
}
//车主银行卡
public void generateTruckDriverBankCard(BankCardVO bankCardVO, UserIdCardVO idCardVO, ThirdOrderChildBrokerParam param, String host) {
OrderChildBankInfoDTO dto = new OrderChildBankInfoDTO();
if (null != bankCardVO) {
dto.setName(bankCardVO.getName());
dto.setCardNo(bankCardVO.getCardNo());
dto.setMobile(bankCardVO.getMobile());
dto.setAccountType(StringUtils.isBlank(bankCardVO.getAccountType()) ? null : Integer.valueOf(bankCardVO.getAccountType()));
dto.setType(bankCardVO.getType());
dto.setIdCard(bankCardVO.getIdCard());
dto.setBank(bankCardVO.getBank());
dto.setBankCode(bankCardVO.getBankCode());
}
dto.setIdCardFrontImg(host + idCardVO.getCardFaceImg());
dto.setIdCardBackImg(host + idCardVO.getCardBackImg());
param.setTruckDriverBankInfoDTO(dto);
}
public void generateRouteList(GdRouteDTO gdRouteDTO, ThirdOrderChildBrokerParam param) {
List<OrderChildTruckTraceDTO> list = new LinkedList<>();
for (int i = 0; i < gdRouteDTO.getPosList().size(); i++) {
if (i == 6) {
OrderChildTruckTraceDTO dto = new OrderChildTruckTraceDTO();
GdPosDTO gdPosDTO = gdRouteDTO.getPosList().get(gdRouteDTO.getPosList().size() - 1);
BigDecimal longitude = gdPosDTO.getLongitude();
BigDecimal latitude = gdPosDTO.getLatitude();
String address = gdService.getLonLat(longitude + "," + latitude);
dto.setLocationAddress(address);
dto.setLocationTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
dto.setLocationLon(longitude.toString());
dto.setLocationLat(latitude.toString());
dto.setChildNo(param.getChildNo());
list.add(dto);
param.setBrokerTraceList(list);
return;
}
if (i == 0) {
OrderChildTruckTraceDTO dto = new OrderChildTruckTraceDTO();
GdPosDTO gdPosDTO = gdRouteDTO.getPosList().get(i);
BigDecimal longitude = gdPosDTO.getLongitude();
BigDecimal latitude = gdPosDTO.getLatitude();
String address = gdService.getLonLat(longitude + "," + latitude);
dto.setLocationAddress(address);
dto.setLocationTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
dto.setLocationLon(longitude.toString());
dto.setLocationLat(latitude.toString());
dto.setChildNo(param.getChildNo());
list.add(dto);
} else {
OrderChildTruckTraceDTO dto = new OrderChildTruckTraceDTO();
int randomNum = (int) (Math.random() * (gdRouteDTO.getPosList().size() - 1) + 1);
GdPosDTO gdPosDTO = gdRouteDTO.getPosList().get(randomNum);
BigDecimal longitude = gdPosDTO.getLongitude();
BigDecimal latitude = gdPosDTO.getLatitude();
String address = gdService.getLonLat(longitude + "," + latitude);
dto.setLocationAddress(address);
dto.setLocationTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
dto.setLocationLon(longitude.toString());
dto.setLocationLat(latitude.toString());
dto.setChildNo(param.getChildNo());
list.add(dto);
}
}
}
}
package com.clx.performance.service.impl.breakcontract; package com.clx.performance.service.impl.breakcontract;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum; import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService; import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.service.payment.PayService; import com.clx.performance.service.payment.PayService;
import com.clx.performance.utils.RedisUtil;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
@Slf4j @Slf4j
@Service @Service
...@@ -24,22 +28,42 @@ public class BreakContractJobHandlerServiceImpl implements BreakContractJobHandl ...@@ -24,22 +28,42 @@ public class BreakContractJobHandlerServiceImpl implements BreakContractJobHandl
@Autowired @Autowired
private PayService payService; private PayService payService;
@Autowired
RedisUtil redisUtil;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void pay(Integer settlementId){ public String pay(Integer settlementId){
String uuid = UUID.randomUUID().toString();
String key = RedissonConstants.BREAK_CONTRACT_SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK + settlementId;
try{
boolean flag = redisUtil.lock(key, uuid,180);
if(!flag){
return "获取支付锁失败,操作频繁,请稍后重试";
}
String msg = null;
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.getEntityByKey(settlementId).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.getEntityByKey(settlementId).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES.getMsg())){
return msg;
}
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES)){ try {
return; pay(breakContractSettlementDriver);
}catch (ServiceSystemException e){
breakContractSettlementDriver.setPayRemark(e.getMessage());
breakContractSettlementDriverDao.updatePayFail(breakContractSettlementDriver);
msg = e.getMessage();
}
return msg;
}catch (Exception e){
log.warn("违约结算单支付上锁失败,结算单ID:{},异常原因:{}", settlementId, ExceptionUtils.getStackTrace(e));
//解锁
redisUtil.unlock(key,uuid);
throw new ServiceSystemException(PerformanceResultEnum.TRY_LOCK_ERROR);
} }
try {
pay(breakContractSettlementDriver);
}catch (ServiceSystemException e){
breakContractSettlementDriver.setPayRemark(e.getMessage());
breakContractSettlementDriverDao.updatePayFail(breakContractSettlementDriver);
}
} }
......
...@@ -3,9 +3,12 @@ package com.clx.performance.service.impl.breakcontract; ...@@ -3,9 +3,12 @@ package com.clx.performance.service.impl.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam; import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService; import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService;
import com.clx.performance.struct.breakcontract.BreakContractSettlementDriverStruct; import com.clx.performance.struct.breakcontract.BreakContractSettlementDriverStruct;
import com.clx.performance.utils.excel.ExcelData; import com.clx.performance.utils.excel.ExcelData;
...@@ -14,13 +17,17 @@ import com.clx.performance.utils.excel.ExcelSheet; ...@@ -14,13 +17,17 @@ import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil; import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO; import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO; import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author liruixin * @author liruixin
...@@ -34,6 +41,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe ...@@ -34,6 +41,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
private final BreakContractSettlementDriverDao breakContractSettlementDriverDao; private final BreakContractSettlementDriverDao breakContractSettlementDriverDao;
private final BreakContractSettlementDriverStruct breakContractSettlementStruct; private final BreakContractSettlementDriverStruct breakContractSettlementStruct;
private BreakContractJobHandlerService breakContractJobHandlerService;
@Override @Override
public IPage<PageCarrierBreakContractSettlementDriverVO> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param) { public IPage<PageCarrierBreakContractSettlementDriverVO> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param) {
...@@ -106,4 +114,36 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe ...@@ -106,4 +114,36 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
CarrierBreakContractSettlementDriverDetailVO vo = breakContractSettlementStruct.convertDetail(settlement); CarrierBreakContractSettlementDriverDetailVO vo = breakContractSettlementStruct.convertDetail(settlement);
return vo; return vo;
} }
@Override
public void updateBatchPayDriverBreakContractSettlement(BatchUpdatePayDriverBreakContractSettlementParam param) {
if(CollectionUtils.isEmpty(param.getIds())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"参数不能为空");
}
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listInField(BreakContractSettlementDriver :: getId,param.getIds());
if(CollectionUtils.isEmpty(list)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
list.forEach(item->{
if(!Objects.equals(item.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.NO.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"所选数据有误,请重新选择");
}
});
list.forEach(item-> {
String msg = breakContractJobHandlerService.pay(item.getId());
if(StringUtils.isNotBlank(msg)){
log.warn("违约结算单对应的的运单编号:{} 进行结算,结算失败,返回结果:{}",item.getChildNo(),msg);
}
});
}
public static String formatPayMsg(Integer settlementStatus,String payMsg) {
if (!Objects.equals(settlementStatus, BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())) {
return null;
}
return payMsg;
}
} }
package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import com.clx.performance.service.settle.NetworkCaseOutRecordService;
import com.clx.performance.vo.pc.NetworkCaseOutRecordVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Service
@AllArgsConstructor
@Slf4j
public class NetworkCaseOutRecordServiceImpl implements NetworkCaseOutRecordService {
private final NetworkCaseOutRecordDao networkCaseOutRecordDao;
@Override
public IPage<NetworkCaseOutRecordVO> networkCaseOutRecord(PageNetworkCaseOutRecordListParam param) {
return networkCaseOutRecordDao.networkCaseOutRecord(param);
}
}
package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.settle.NetworkDriverAccountDao;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.param.pc.driver.NetworkDriverAccountParam;
import com.clx.performance.service.settle.NetworkDriverAccountService;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import com.clx.user.feign.PaymentServiceFeign;
import com.clx.user.vo.feign.WalletResidueCardVO;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Service
@AllArgsConstructor
@Slf4j
public class NetworkDriverAccountServiceImpl implements NetworkDriverAccountService {
private final NetworkDriverAccountDao networkDriverAccountDao;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final PaymentServiceFeign paymentServiceFeign;
@Override
public IPage<NetworkDriverAccountVO> networkAccountList(PageNetworkAccountListParam param) {
return networkDriverAccountDao.networkAccountList(param);
}
@Override
public void createNetworkDriverAccount(NetworkDriverAccountParam param) {
Optional<NetworkDriverAccount> optional = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, param.getDriverUserNo());
if (optional.isPresent()) {
log.info("当前用户已经存在,相关参数:{}", JSONUtil.parse(param));
return;
}
String walletCode = idGenerateSnowFlake.nextIdToString(1L);
NetworkDriverAccount entity = NetworkDriverAccount.builder().driverUserNo(param.getDriverUserNo())
.mobile(param.getMobile())
.driverUserName(param.getDriverUserName())
.accountBalance(BigDecimal.ZERO)
.usableBalance(BigDecimal.ZERO)
.frozenBalance(BigDecimal.ZERO)
.createBy("系统")
.walletCode(walletCode).build();
networkDriverAccountDao.saveEntity(entity);
}
@Override
public WalletResidueCardVO account(Integer userCode) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Result<WalletResidueCardVO> result = paymentServiceFeign.getWallet(userCode);
WalletResidueCardVO data = result.getData();
NetworkDriverAccount account = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, loginUserInfo.getUserNo()).get();
data.setAssetSum(data.getAssetSum().add(account.getAccountBalance().movePointLeft(2)));
data.setFrozen(new BigDecimal(data.getFrozen()).add(account.getFrozenBalance().movePointLeft(2)).longValue());
data.setResidue(new BigDecimal(data.getResidue()).add(account.getUsableBalance().movePointLeft(2)).longValue());
return data;
}
}
package com.clx.performance.service.impl.settle;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.dao.settle.NetworkDriverAccountDao;
import com.clx.performance.dao.settle.NetworkDriverRunningWaterRecordDao;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.model.settle.NetworkCaseOutRecord;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.model.settle.NetworkDriverRunningWaterRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import com.clx.user.feign.DriverFeign;
import com.clx.user.vo.feign.BankCardVO;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
@Service
@AllArgsConstructor
@Slf4j
public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriverRunningWaterRecordService, InitializingBean {
private final static Map<Integer, Consumer<SettlementDriverDetail>> strategyMap = new HashMap<>();
private final NetworkDriverRunningWaterRecordDao networkDriverRunningWaterRecordDao;
private final NetworkDriverAccountDao networkDriverAccountDao;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final DriverFeign driverFeign;
private final NetworkCaseOutRecordDao networkCaseOutRecordDao;
@Override
public IPage<NetworkDriverRunningWaterRecordVO> networkDriverRunningWaterRecordList(PageNetworkAccountInfoListParam param) {
return networkDriverRunningWaterRecordDao.networkDriverRunningWaterRecordDao(param);
}
/**
* 运单同步网络货运生成司机运单结算流水
* @param settlementDriverDetail
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void generateSettlementRunningWaterRecord(SettlementDriverDetail settlementDriverDetail) {
log.info("运单同步网络货运生成司机运单结算流水");
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.usableBalance(settlementDriverDetail.getSettlementFreight())
.frozenBalance(BigDecimal.ZERO)
.accountBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
Integer i = networkDriverAccountDao.updateAccountCAS(build, LocalDateTime.now(), true);
log.info("网络货运账户更新成功");
if (i == 1) {
account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.mobile(networkDriverAccount.getMobile())
.usableBalance(account.getUsableBalance())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.INCOME.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.INCOME.getMsg())
.driverUserName(account.getDriverUserName())
.driverUserNo(account.getDriverUserNo())
.runningWaterNo(idGenerateSnowFlake.nextId(2L))
.runningWaterTypeMsg(NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getMsg())
.runningWaterType(NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode())
.childNo(settlementDriverDetail.getChildNo())
.orderNo(settlementDriverDetail.getOrderNo())
.orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.build();
networkDriverRunningWaterRecordDao.saveEntity(entity);
break;
}
}
}
/**
* 运单同步网络货运后司机运单提现冻结流水
* @param settlementDriverDetail
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void generateCaseOutFrozenRunningWaterRecord(SettlementDriverDetail settlementDriverDetail) {
log.info("运单同步网络货运后司机运单提现冻结流水");
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.frozenBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(BigDecimal.ZERO)
.usableBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
Integer i = networkDriverAccountDao.updateAccountCAS(build, LocalDateTime.now(), false);
log.info("网络货运账户更新成功");
if (i == 1) {
account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.usableBalance(account.getUsableBalance())
.mobile(networkDriverAccount.getMobile())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.FROZEN.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.FROZEN.getMsg())
.driverUserName(account.getDriverUserName())
.driverUserNo(account.getDriverUserNo())
.runningWaterNo(idGenerateSnowFlake.nextId(3L))
.runningWaterTypeMsg(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getMsg())
.frozenFlag(0)
.runningWaterType(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode())
.childNo(settlementDriverDetail.getChildNo())
.orderNo(settlementDriverDetail.getOrderNo())
.orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.build();
networkDriverRunningWaterRecordDao.saveEntity(entity);
break;
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void generateCaseOutSuccessRunningWaterRecord(SettlementDriverDetail settlementDriverDetail) {
log.info("运单同步网络货运生成司机运单提现成功流水");
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.frozenBalance(settlementDriverDetail.getSettlementFreight().negate())
.usableBalance(BigDecimal.ZERO)
.accountBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
Integer i = networkDriverAccountDao.updateAccountCAS(build, LocalDateTime.now(), false);
if (i == 1) {
networkDriverRunningWaterRecordDao.updateFrozenFlagByChildNo(settlementDriverDetail.getChildNo());
account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.usableBalance(account.getUsableBalance())
.mobile(networkDriverAccount.getMobile())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.EXPENDITURE.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.EXPENDITURE.getMsg())
.driverUserName(account.getDriverUserName())
.driverUserNo(account.getDriverUserNo())
.runningWaterNo(idGenerateSnowFlake.nextId(3L))
.runningWaterTypeMsg(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getMsg())
.runningWaterType(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getCode())
.childNo(settlementDriverDetail.getChildNo())
.orderNo(settlementDriverDetail.getOrderNo())
.orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.build();
networkDriverRunningWaterRecordDao.saveEntity(entity);
break;
}
}
}
@Override
public void generateNetworkDriverRunningWaterRecord(SettlementDriverDetail settlementDriverDetail, Integer runningWaterType) {
if (NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode().equals(runningWaterType)) {
log.info("执行生成网络货运钱包相关,参数userNo:{},money{},runningWaterType:{}", settlementDriverDetail.getDriverUserNo(), settlementDriverDetail.getSettlementFreight(), runningWaterType);
strategyMap.get(NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()).accept(settlementDriverDetail);
strategyMap.get(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode()).accept(settlementDriverDetail);
}
}
@Override
public IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(NetworkDriverPageParam param) {
Long userNo = TokenUtil.getLoginUserInfo().getUserNo();
param.setUserNo(userNo);
return networkDriverRunningWaterRecordDao.pageFrozenList(param);
}
@Override
public IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(NetworkDriverPageParam param) {
Long userNo = TokenUtil.getLoginUserInfo().getUserNo();
param.setUserNo(userNo);
return networkDriverRunningWaterRecordDao.runningWaterList(param);
}
@Override
public void generateNetworkCaseOutRecord(SettlementDriverDetail settlementDriverDetail) {
BankCardVO bankCardVO = Optional.ofNullable(driverFeign.getDriverCardInfo(settlementDriverDetail.getDriverUserNo()))
.filter(Result::succeed).map(Result::getData).orElseThrow(ResultCodeEnum.FAIL);
NetworkCaseOutRecord build = NetworkCaseOutRecord.builder()
.caseOutNo(idGenerateSnowFlake.nextId(4L))
.driverUserNo(settlementDriverDetail.getDriverUserNo())
.driverUserName(settlementDriverDetail.getDriverName()).mobile(bankCardVO.getMobile())
.status(NetworkDriverAccountEnum.CaseOutRecordStatus.WAIT_PLATFORM_PAY.getCode())
.statusMsg(NetworkDriverAccountEnum.CaseOutRecordStatus.WAIT_PLATFORM_PAY.getMsg())
.bank(bankCardVO.getBank()).collectionBankCode(bankCardVO.getCardNo())
.payee(bankCardVO.getName()).alterationBalance(settlementDriverDetail.getSettlementFreight())
.orderNo(settlementDriverDetail.getOrderNo()).orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.childNo(settlementDriverDetail.getChildNo())
.platform("网运平台").createBy("系统").build();
networkCaseOutRecordDao.saveEntity(build);
}
@Override
public void afterPropertiesSet() throws Exception {
strategyMap.put(NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode(), this::generateSettlementRunningWaterRecord);
strategyMap.put(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode(), this::generateCaseOutFrozenRunningWaterRecord);
strategyMap.put(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_SUCCESS.getCode(), this::generateCaseOutSuccessRunningWaterRecord);
}
}
package com.clx.performance.service.impl.settle;
import com.clx.performance.dao.settle.NetworkCaseOutRecordDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService;
import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.struct.settle.SettlementDriverDetailStruct;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
@Service
@Slf4j
@AllArgsConstructor
public class OrderChildSyncTransportRecordServiceImpl implements OrderChildSyncTransportRecordService {
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
private final SettlementDriverDetailStruct struct;
private final NetworkCaseOutRecordDao networkCaseOutRecordDao;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
private final SettlementDriverDetailService settlementDriverDetailService;
@Override
public void addOrderChildSyncTransportRecord(SettlementDriverDetail detail) {
OrderChildSyncTransportRecord record = struct.convertRecord(detail);
//0:未同步
record.setStatus(0);
orderChildSyncTransportRecordDao.saveEntity(record);
}
@Override
public void updateStatus(PayStatusNotifyDTO payStatusNotifyDTO) {
String childNo = payStatusNotifyDTO.getChildNo();
orderChildSyncTransportRecordDao.updateStatus(childNo);
networkCaseOutRecordDao.updateStatus(payStatusNotifyDTO.getChildNo(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getCode(),
NetworkDriverAccountEnum.CaseOutRecordStatus.PAYED.getMsg()
);
SettlementDriverDetail driverDetail = settlementDriverDetailService.selectOneByChildNo(childNo);
networkDriverRunningWaterRecordService.generateCaseOutSuccessRunningWaterRecord(driverDetail);
}
}
...@@ -115,4 +115,9 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai ...@@ -115,4 +115,9 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
List<CarrierPageSettlementDriverDetailVO> list = settlementOwnerDetailStruct.covertList(result.getRecords()); List<CarrierPageSettlementDriverDetailVO> list = settlementOwnerDetailStruct.covertList(result.getRecords());
return new Page<CarrierPageSettlementDriverDetailVO>().setRecords(list).setTotal(result.getTotal()).setPages(result.getPages()); return new Page<CarrierPageSettlementDriverDetailVO>().setRecords(list).setTotal(result.getTotal()).setPages(result.getPages());
} }
@Override
public SettlementDriverDetail selectOneByChildNo(String childNo) {
return settlementDriverDetailDao.getByChildNo(childNo).get();
}
} }
...@@ -3,28 +3,43 @@ package com.clx.performance.service.impl.settle; ...@@ -3,28 +3,43 @@ package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementDriverDao; import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.model.settle.SettlementDriver; import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.service.settle.SettlementDriverService; import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.struct.settle.SettlementDriverStruct; import com.clx.performance.struct.settle.SettlementDriverStruct;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author liruixin * @author liruixin
* Date 2023-10-12 * Date 2023-10-12
* Time 09:43 * Time 09:43
*/ */
@Slf4j
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class SettlementDriverServiceImpl implements SettlementDriverService { public class SettlementDriverServiceImpl implements SettlementDriverService {
SettlementDriverDao settlementDriverDao; SettlementDriverDao settlementDriverDao;
SettlementDriverDetailDao settlementDriverDetailDao;
SettlementDriverStruct settlementDriverStruct; SettlementDriverStruct settlementDriverStruct;
SettlementMqHandlerService settlementMqHandlerService;
@Override @Override
...@@ -34,4 +49,31 @@ public class SettlementDriverServiceImpl implements SettlementDriverService { ...@@ -34,4 +49,31 @@ public class SettlementDriverServiceImpl implements SettlementDriverService {
page.getRecords()); page.getRecords());
return new Page<CarrierPageSettlementDriverVO>().setRecords(list).setTotal(page.getTotal()).setPages(page.getPages()); return new Page<CarrierPageSettlementDriverVO>().setRecords(list).setTotal(page.getTotal()).setPages(page.getPages());
} }
@Override
public void updateBatchPayDriverSettlement(BatchUpdatePayDriverSettlementParam param) {
if(CollectionUtils.isEmpty(param.getIds())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"参数不能为空");
}
List<SettlementDriverDetail> list = settlementDriverDetailDao.findByDriverSettlementIds(param.getIds());
if(CollectionUtils.isEmpty(list)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
if(!Objects.equals(param.getIds().size(),list.size())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"所选数据有误,请重新选择");
}
list.forEach(item-> {
String msg = settlementMqHandlerService.paySettlementDriver(item);
if(StringUtils.isNotBlank(msg)){
log.warn("结算单对应的的运单编号:{} 进行结算,结算失败,返回结果:{}",item.getChildNo(),msg);
}
});
}
public static String formatPayMsg(Integer settlementStatus,String payMsg) {
if (!Objects.equals(settlementStatus, SettlementDriverEnum.Status.SETTLED.getCode())) {
return null;
}
return payMsg;
}
} }
package com.clx.performance.service.impl.settle; package com.clx.performance.service.impl.settle;
import com.clx.performance.config.MslPaymentConfig; import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDao; import com.clx.performance.dao.settle.SettlementDriverDao;
...@@ -17,6 +18,7 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum; ...@@ -17,6 +18,7 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementPlatformEnum; import com.clx.performance.enums.settle.SettlementPlatformEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService; import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriver; import com.clx.performance.model.settle.SettlementDriver;
...@@ -27,17 +29,21 @@ import com.clx.performance.param.pc.payment.PayParam; ...@@ -27,17 +29,21 @@ import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.PaymentService; import com.clx.performance.service.PaymentService;
import com.clx.performance.service.impl.UniqueOrderNumService; import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.service.settle.OrderChildSyncTransportRecordService;
import com.clx.performance.service.settle.SettlementLogService; import com.clx.performance.service.settle.SettlementLogService;
import com.clx.performance.service.settle.SettlementMqHandlerService; import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementService; import com.clx.performance.service.settle.SettlementService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.RedisUtil;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.user.vo.feign.DriverInfoFeignVo; import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.enums.ResultCodeEnum; import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -91,6 +97,12 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -91,6 +97,12 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired @Autowired
private OrderChildLogService orderChildLogService; private OrderChildLogService orderChildLogService;
@Autowired
RedisUtil redisUtil;
@Autowired
private OrderChildSyncTransportRecordService childSyncTransportRecordService;
...@@ -107,7 +119,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -107,7 +119,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(settlementOwnerDetail.getOrderGoodsNo()).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(settlementOwnerDetail.getOrderGoodsNo()).get();
if (Objects.equals(orderGoods.getSettlementAccountPeriod(),2)){ //月结 if (Objects.equals(orderGoods.getSettlementAccountPeriod(),2)){ //月结
log.info("月结初始化货主结算单");
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate(); LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodMonth(settlementOwnerDetail.getOrderNo(), settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull(); settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodMonth(settlementOwnerDetail.getOrderNo(), settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 月结初始化 if (settlementOwner == null){ // 月结初始化
...@@ -119,6 +131,8 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -119,6 +131,8 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
} }
} }
else { else {
log.info("月结初始化货主结算单");
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(), settlementOwnerDetail.getInvoiceType()).orNull(); settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(), settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 拉运完成初始化 if (settlementOwner == null){ // 拉运完成初始化
settlementNo = settlementPeriodImmediateInit(settlementOwnerDetail,ownerInfo); settlementNo = settlementPeriodImmediateInit(settlementOwnerDetail,ownerInfo);
...@@ -132,7 +146,16 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -132,7 +146,16 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
//生成车主结算单 //生成车主结算单
settlementDriverSave(settlementDriverDetail,settlementNo); settlementDriverSave(settlementDriverDetail,settlementNo);
//车主结算单自动支付 //车主结算单自动支付
paySettlementDriver(settlementDriverDetail); if (!settlementDriverDetail.getInvoiceType().equals(SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
paySettlementDriver(settlementDriverDetail);
} else {
if (settlementDriverDetail.getPrepayFreightFlag().equals(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode())
&& settlementDriverDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) > 0) {
settlementDriverDetail.setSettlementNo(settlementNo);
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
}
}
// 更新结算单 // 更新结算单
settlementOwnerDetail.setSettlementNo(settlementNo); settlementOwnerDetail.setSettlementNo(settlementNo);
...@@ -144,9 +167,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -144,9 +167,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void settlementDetailAdd(SettlementDetailAddMqParam mq) { public void settlementDetailAdd(SettlementDetailAddMqParam mq) {
//查询网络货运运单是否合规
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getEntityByKey(mq.getSettlementOwnerDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getEntityByKey(mq.getSettlementOwnerDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getEntityByKey(mq.getSettlementDriverDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); //SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getEntityByKey(mq.getSettlementDriverDetailId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
...@@ -170,10 +190,19 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -170,10 +190,19 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriver.setLossPrice(detail.getLossPrice()); settlementDriver.setLossPrice(detail.getLossPrice());
settlementDriver.setLossWeight(detail.getLossWeight()); settlementDriver.setLossWeight(detail.getLossWeight());
settlementDriver.setLossFreight(detail.getLossFreight()); settlementDriver.setLossFreight(detail.getLossFreight());
settlementDriver.setPrepayFreightFlag(detail.getPrepayFreightFlag());
settlementDriver.setSettlementFreight(detail.getSettlementFreight()); settlementDriver.setSettlementFreight(detail.getSettlementFreight());
settlementDriver.setInvoiceType(detail.getInvoiceType()); settlementDriver.setInvoiceType(detail.getInvoiceType());
settlementDriver.setSettlementPlatform(String.valueOf(SettlementPlatformEnum.Platform.MSL.getCode())); settlementDriver.setSettlementPlatform(detail.getInvoiceType() == 1 ?
settlementDriver.setStatus(SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode()); String.valueOf(SettlementPlatformEnum.Platform.WY.getCode()):
String.valueOf(SettlementPlatformEnum.Platform.MSL.getCode()));
if (settlementDriver.getInvoiceType().equals(SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
settlementDriver.setStatus(SettlementDriverEnum.Status.SETTLED.getCode());
} else {
settlementDriver.setStatus(SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode());
}
settlementDriverDao.saveEntity(settlementDriver); settlementDriverDao.saveEntity(settlementDriver);
} }
...@@ -206,38 +235,55 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -206,38 +235,55 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
/** /**
* 车主结算单自动支付 * 车主结算单自动支付
*/ */
private void paySettlementDriver(SettlementDriverDetail detail){ public String paySettlementDriver(SettlementDriverDetail detail){
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(detail.getDriverUserNo()).orElseThrow(ResultCodeEnum.FAIL); String uuid = UUID.randomUUID().toString();
PayParam noCheckPwd = null ; String key = RedissonConstants.SETTLEMENT_OWNER_BATCH_PAY_ID_LOCK + detail.getId();
if(detail.getSettlementFreight().compareTo(BigDecimal.ZERO) > 0){
noCheckPwd = PayParam.builder().from(mslPaymentConfig.getTransportWalletCode())
.to(driverInfoFeignVo.getWalletCode())
.figure(detail.getSettlementFreight().intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}else{
BigDecimal freight = detail.getSettlementFreight().abs();
noCheckPwd = PayParam.builder().from(driverInfoFeignVo.getWalletCode())
.to(mslPaymentConfig.getTransportWalletCode())
.figure(freight.intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}
Result result = null;
try{ try{
result = paymentService.paymentWallet(noCheckPwd); boolean flag = redisUtil.lock(key, uuid,180);
if(!flag){
return "获取支付锁失败,操作频繁,请稍后重试";
}
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(detail.getDriverUserNo()).orElseThrow(ResultCodeEnum.FAIL);
PayParam noCheckPwd = null ;
if(detail.getSettlementFreight().compareTo(BigDecimal.ZERO) > 0){
noCheckPwd = PayParam.builder().from(mslPaymentConfig.getTransportWalletCode())
.to(driverInfoFeignVo.getWalletCode())
.figure(detail.getSettlementFreight().intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}else{
BigDecimal freight = detail.getSettlementFreight().abs();
noCheckPwd = PayParam.builder().from(driverInfoFeignVo.getWalletCode())
.to(mslPaymentConfig.getTransportWalletCode())
.figure(freight.intValue())
.tradeNo(detail.getChildNo())
.tradeId(detail.getChildNo())
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
}
Result result = null;
String msg = null;
try{
result = paymentService.paymentWallet(noCheckPwd);
}catch (Exception e){
settlementDriverNotify(detail.getChildNo(),0,e.getMessage());
msg = e.getMessage();
}
if(Objects.nonNull(result)){
settlementDriverNotify(detail.getChildNo(),0,result.getMsg());
}
return msg;
}catch (Exception e){ }catch (Exception e){
settlementDriverNotify(detail.getChildNo(),0,e.getMessage()); log.warn("结算单支付上锁失败,结算单ID:{},异常原因:{}", detail.getId(), ExceptionUtils.getStackTrace(e));
} //解锁
if(Objects.nonNull(result)){ redisUtil.unlock(key,uuid);
settlementDriverNotify(detail.getChildNo(),0,result.getMsg()); throw new ServiceSystemException(PerformanceResultEnum.TRY_LOCK_ERROR);
} }
} }
...@@ -361,6 +407,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -361,6 +407,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setCompanyContactMobile(ownerInfo.getContactsTelephone()); settlementOwner.setCompanyContactMobile(ownerInfo.getContactsTelephone());
settlementOwner.setCompanyContactAddress(ownerInfo.getContactsAddress()); settlementOwner.setCompanyContactAddress(ownerInfo.getContactsAddress());
settlementOwner.setSettlementWay(settlementOwnerDetail.getSettlementWay()); settlementOwner.setSettlementWay(settlementOwnerDetail.getSettlementWay());
settlementOwner.setInvoiceStatus(SettlementOwnerEnum.InvoiceStatus.NOT_INVOICE.getCode());
settlementOwnerDao.saveEntity(settlementOwner); settlementOwnerDao.saveEntity(settlementOwner);
......
package com.clx.performance.service.impl.settle; package com.clx.performance.service.impl.settle;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OwnerAccountDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.IdTypeEnum;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum; import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum; import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerAccount;
import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.settle.SettlementOwnerDetail; import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
...@@ -18,6 +27,7 @@ import com.clx.performance.utils.excel.ExcelSheet; ...@@ -18,6 +27,7 @@ import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil; import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO; import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
...@@ -28,6 +38,7 @@ import java.math.RoundingMode; ...@@ -28,6 +38,7 @@ import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
/** /**
* @author liruixin * @author liruixin
...@@ -41,6 +52,10 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -41,6 +52,10 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
private final SettlementOwnerDetailDao settlementOwnerDetailDao; private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDetailStruct settlementOwnerDetailStruct; private final SettlementOwnerDetailStruct settlementOwnerDetailStruct;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final OwnerRunningWaterRecordDao ownerRunningWaterRecordDao;
private final OwnerAccountDao ownerAccountDao;
private final OrderChildDao orderChildDao;
@Override @Override
...@@ -75,17 +90,60 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -75,17 +90,60 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setLossFreight(lossFreightCalc(settlementOwnerDetail.getLossPrice(), settlementOwnerDetail.getLossWeight())); settlementOwnerDetail.setLossFreight(lossFreightCalc(settlementOwnerDetail.getLossPrice(), settlementOwnerDetail.getLossWeight()));
// 预付运费 // 预付运费
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO); BigDecimal ans = settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight());
if (ans.compareTo(BigDecimal.ZERO) <= 0) {
// 开票金额 settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail)); } else {
/*List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
// 结算金额 BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail)); return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode());
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode());
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal subtract = frozen.subtract(takeOut);
if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
}
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(orderChild.getOwnerUserNo(),
OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
settlementOwnerDetail.setPrepayFreight(ans);
//生成扣除流水
OwnerRunningWaterRecord runningWaterRecord = new OwnerRunningWaterRecord();
runningWaterRecord.setOwnerUserName(orderChild.getOwnerName());
runningWaterRecord.setMobile(orderChild.getDriverMobile());
runningWaterRecord.setCreateBy("系统");
runningWaterRecord.setOrderId(orderChild.getId());
runningWaterRecord.setOrderNo(orderChild.getOrderNo());
runningWaterRecord.setRelationId(null);
runningWaterRecord.setAlterationBalance(ans);
runningWaterRecord.setFrozenBalance(ans);
runningWaterRecord.setUsableBalance(account.getUsableBalance());
runningWaterRecord.setTakeOutBalance(BigDecimal.ZERO);
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);
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
}*/
}
// // 开票金额
// settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
//
// // 结算金额
// settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderGoods.getSettlementWay(),settlementOwnerDetail));
//
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode()); settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
settlementOwnerDetailDao.saveEntity(settlementOwnerDetail); settlementOwnerDetailDao.saveEntity(settlementOwnerDetail);
return settlementOwnerDetail.getId(); return settlementOwnerDetail.getId();
...@@ -179,25 +237,24 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -179,25 +237,24 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
fieldList.add(new ExcelField(0, "序号", "index", 2000)); fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "运单编号", "childNo", 5000)); fieldList.add(new ExcelField(1, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(2, "货主编码", "ownerUserNno", 5000)); fieldList.add(new ExcelField(2, "货主编码", "ownerUserNno", 5000));
fieldList.add(new ExcelField(3, "货物名称", "goodsName", 5000)); fieldList.add(new ExcelField(3, "结算方式", "settlementWay", 5000));
fieldList.add(new ExcelField(4, "货物名称", "goodsName", 5000));
fieldList.add(new ExcelField(4, "实际净重(吨)", "weight", 5000)); fieldList.add(new ExcelField(5, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(5, "平台运费报价", "freightPrice", 5000)); fieldList.add(new ExcelField(6, "平台运费报价", "freightPrice", 5000));
fieldList.add(new ExcelField(6, "实际运费金额", "freight", 5000)); fieldList.add(new ExcelField(7, "实际运费金额", "freight", 5000));
fieldList.add(new ExcelField(7, "货损吨数", "lossWeight", 5000)); fieldList.add(new ExcelField(8, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(8, "货损单价", "lossPrice", 5000)); fieldList.add(new ExcelField(9, "货损单价", "lossPrice", 5000));
fieldList.add(new ExcelField(9, "货损金额", "lossFreight", 5000)); fieldList.add(new ExcelField(10, "货损金额", "lossFreight", 5000));
fieldList.add(new ExcelField(10, "预付运费金额", "prepayFreight", 5000)); fieldList.add(new ExcelField(11, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(11, "结算金额", "settlementFreight", 5000)); fieldList.add(new ExcelField(12, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(12, "开票金额", "invoiceFreight", 5000)); fieldList.add(new ExcelField(13, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(14, "开票标识", "invoiceType", 5000));
fieldList.add(new ExcelField(13, "开票标识", "invoiceType", 5000)); fieldList.add(new ExcelField(15, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(14, "订单编号", "orderNo", 5000)); fieldList.add(new ExcelField(16, "结算单号", "settlementNo", 15000));
fieldList.add(new ExcelField(15, "结算单号", "settlementNo", 15000)); fieldList.add(new ExcelField(17, "结算子单号", "settlementSubNo", 15000));
fieldList.add(new ExcelField(16, "结算子单号", "settlementSubNo", 15000)); fieldList.add(new ExcelField(18, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(17, "创建时间", "createTime", 5000)); fieldList.add(new ExcelField(19, "是否已付尾款", "finalPaymentStatus", 5000));
fieldList.add(new ExcelField(18, "是否已付尾款", "finalPaymentStatus", 5000)); fieldList.add(new ExcelField(20, "是否已开票", "invoiceStatus", 5000));
fieldList.add(new ExcelField(19, "是否已开票", "invoiceStatus", 5000));
// 组装数据 // 组装数据
List<List<ExcelData>> dataList = new ArrayList<>(); List<List<ExcelData>> dataList = new ArrayList<>();
...@@ -206,11 +263,13 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -206,11 +263,13 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
PageOwnerSettlementOwnerDetailVO dto = list.get(i); PageOwnerSettlementOwnerDetailVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>(); List<ExcelData> rowData = new ArrayList<>();
Optional<SettlementWayEnum.WayType> byCode = SettlementWayEnum.WayType.getByCode(dto.getSettlementWay());
String settlementWay = byCode.isPresent()?byCode.get().getMsg():"";
rowData.add(new ExcelData(i+1)); rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getChildNo())); rowData.add(new ExcelData(dto.getChildNo()));
rowData.add(new ExcelData(dto.getOwnerUserNo()+"")); rowData.add(new ExcelData(dto.getOwnerUserNo()+""));
rowData.add(new ExcelData(settlementWay));
rowData.add(new ExcelData(dto.getGoodsName())); rowData.add(new ExcelData(dto.getGoodsName()));
rowData.add(new ExcelData(dto.getWeight())); rowData.add(new ExcelData(dto.getWeight()));
rowData.add(new ExcelData(dto.getFreightPrice().movePointLeft(2))); rowData.add(new ExcelData(dto.getFreightPrice().movePointLeft(2)));
rowData.add(new ExcelData(dto.getFreight().movePointLeft(2))); rowData.add(new ExcelData(dto.getFreight().movePointLeft(2)));
...@@ -220,7 +279,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -220,7 +279,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
rowData.add(new ExcelData(dto.getPrepayFreight().movePointLeft(2))); rowData.add(new ExcelData(dto.getPrepayFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getSettlementFreight().movePointLeft(2))); rowData.add(new ExcelData(dto.getSettlementFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getInvoiceFreight().movePointLeft(2))); rowData.add(new ExcelData(dto.getInvoiceFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getInvoiceTypeMsg())); rowData.add(new ExcelData(dto.getInvoiceTypeMsg()));
rowData.add(new ExcelData(dto.getOrderNo())); rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getSettlementNo())); rowData.add(new ExcelData(dto.getSettlementNo()));
...@@ -228,8 +286,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -228,8 +286,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
rowData.add(new ExcelData(dto.getCreateTime())); rowData.add(new ExcelData(dto.getCreateTime()));
rowData.add(new ExcelData(dto.getFinalPaymentStatusMsg())); rowData.add(new ExcelData(dto.getFinalPaymentStatusMsg()));
rowData.add(new ExcelData(dto.getInvoiceStatusMsg())); rowData.add(new ExcelData(dto.getInvoiceStatusMsg()));
dataList.add(rowData); dataList.add(rowData);
} }
...@@ -238,4 +294,30 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -238,4 +294,30 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
//创建excel //创建excel
return ExcelUtil.create(excelSheet); return ExcelUtil.create(excelSheet);
} }
@Override
public Integer getInvoiceType(String orderNo) {
return settlementOwnerDetailDao.getInvoiceType(orderNo);
}
@Override
public Boolean thawAndLockSettlement(String orderNo) {
boolean orderChildrenFlag = false;
boolean ownerDetailsFlag = false;
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo);
List<SettlementOwnerDetail> ownerDetails = settlementOwnerDetailDao.selectListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(ownerDetails)) {
ownerDetailsFlag = true;
}
if (CollectionUtil.isNotEmpty(orderChildren)) {
orderChildrenFlag = true;
}
if (ownerDetailsFlag || orderChildrenFlag) {
return true;
} else {
return false;
}
}
} }
package com.clx.performance.service.impl.settle; package com.clx.performance.service.impl.settle;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.component.NetworkSyncComponent;
import com.clx.performance.dao.settle.SettlementLogDao; import com.clx.performance.dao.settle.SettlementLogDao;
import com.clx.performance.dao.settle.SettlementOwnerDao; import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dao.settle.SettlementPlatformAccountDao; import com.clx.performance.dao.settle.SettlementPlatformAccountDao;
import com.clx.performance.dto.InvoicingStatusNotifyDTO;
import com.clx.performance.enums.OrderChildLogEnum; import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementLogEnum; import com.clx.performance.enums.settle.*;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.settle.SettlementLog; import com.clx.performance.model.settle.SettlementLog;
import com.clx.performance.model.settle.SettlementOwner; import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.model.settle.SettlementPlatformAccount; import com.clx.performance.model.settle.SettlementPlatformAccount;
import com.clx.performance.param.pc.owner.*; import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.OwnerAccountService; import com.clx.performance.service.OwnerAccountService;
...@@ -71,6 +72,7 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -71,6 +72,7 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
private final OwnerAccountService ownerAccountService; private final OwnerAccountService ownerAccountService;
private final NetworkSyncComponent networkSyncComponent;
private final SettlementMqHandlerService settlementMqHandlerService; private final SettlementMqHandlerService settlementMqHandlerService;
...@@ -132,6 +134,16 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -132,6 +134,16 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
if(settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0){ if(settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0){
settlementOwnerDetailDao.updateFinalPaymentStatusBySettlementNo(settlementNo, SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode()); settlementOwnerDetailDao.updateFinalPaymentStatusBySettlementNo(settlementNo, SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
} }
} else {
if (settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0 &&
settlementOwner.getInvoiceFreight().compareTo(BigDecimal.ZERO) >= 0
) {
//TODO 通知网络货运做货主计费开票标识通知
List<SettlementOwnerDetail> settlementOwnerDetailList = settlementOwnerDetailDao.getBySettlementNoAndInvoiceType(settlementNo,
SettlementDriverEnum.InvoiceType.ONLINE.getCode(),SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode());
networkSyncComponent.ownerSettlementSync(settlementOwner, settlementOwnerDetailList);
}
} }
//更新状态 //更新状态
...@@ -462,11 +474,14 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -462,11 +474,14 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode(); finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode();
} }
}else{ //网运单 }else{ //网运单
if(settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) > 0){ //结算金额>0的,结算单收款方付款确认后,更新状态为“是” settlementOwnerDetailDao.updateFinalPaymentStatusBySettlementNoForOnline(settlementNo, SettlementOwnerDetailEnum.FinalPaymentStatus.YES.getCode());
finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.YES.getCode();
}else if(settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0){ //结算金额=0的,默认“无需支付”。 // if(settlementOwner.getPrepayFreight().compareTo(BigDecimal.ZERO) == 0){ //结算金额>0的,结算单收款方付款确认后,更新状态为“是”
finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode(); // finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.YES.getCode();
} // }
///* else if(settlementOwner.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0){ //结算金额=0的,默认“无需支付”。
// finalPaymentStatus = SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode();
// }*/
} }
if(Objects.nonNull(finalPaymentStatus)){ if(Objects.nonNull(finalPaymentStatus)){
settlementOwnerDetailDao.updateFinalPaymentStatusBySettlementNo(settlementNo, finalPaymentStatus); settlementOwnerDetailDao.updateFinalPaymentStatusBySettlementNo(settlementNo, finalPaymentStatus);
...@@ -476,6 +491,11 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -476,6 +491,11 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
}else{ }else{
if (Objects.equals(settlementOwner.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) { if (Objects.equals(settlementOwner.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,SettlementOwnerEnum.Status.COMPLETED.getCode()); settlementOwnerDao.updateStatusBySettlementNo(settlementNo,SettlementOwnerEnum.Status.COMPLETED.getCode());
//TODO 通知网络货运做货主计费开票标识通知
List<SettlementOwnerDetail> settlementOwnerDetailList = settlementOwnerDetailDao.getBySettlementNoAndInvoiceType(settlementNo,
SettlementDriverEnum.InvoiceType.ONLINE.getCode(),SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode());
networkSyncComponent.ownerSettlementSync(settlementOwner,settlementOwnerDetailList);
}else{ }else{
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,SettlementOwnerEnum.Status.INVOICE_TO_BE_MAILED.getCode()); settlementOwnerDao.updateStatusBySettlementNo(settlementNo,SettlementOwnerEnum.Status.INVOICE_TO_BE_MAILED.getCode());
} }
...@@ -494,6 +514,32 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -494,6 +514,32 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName()); OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
} }
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void invoicingStatusNotify(InvoicingStatusNotifyDTO invoicingStatusNotifyDTO) {
List<String> childNoList = invoicingStatusNotifyDTO.getChildNoList();
if (CollectionUtil.isEmpty(childNoList)) {
return;
}
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNoList.get(0)).get();
String settlementNo = settlementOwnerDetail.getSettlementNo();
List<SettlementOwnerDetail> list = settlementOwnerDetailDao.getBySettlementNoAndInvoiceType(settlementNo,
SettlementOwnerEnum.InvoiceType.ONLINE.getCode(),SettlementOwnerDetailEnum.InvoiceStatus.NO.getCode());
if (CollectionUtil.isEmpty(list)) {
log.info("开票结果回调查询当前结算单均已开完票,结算单信息为{}", settlementNo);
return;
}
settlementOwnerDetailDao.updateSettlementByChildNoList(childNoList);
if (list.size() == childNoList.size()) {
log.info("当前是结算单所有计费都已经开票");
settlementOwnerDao.updateInvoiceStatusBySettlementNo(settlementNo, SettlementOwnerEnum.InvoiceStatus.INVOICED.getCode());
} else {
log.info("当前是结算单部分开票");
settlementOwnerDao.updateInvoiceStatusBySettlementNo(settlementNo, SettlementOwnerEnum.InvoiceStatus.NO_NEED_INVOICE.getCode());
}
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void mergeOwnerSettlement(MergeOwnerSettlementParam param) { public void mergeOwnerSettlement(MergeOwnerSettlementParam param) {
...@@ -519,7 +565,7 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -519,7 +565,7 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
for (SettlementOwner item : settlementOwnersList) { for (SettlementOwner item : settlementOwnersList) {
if(Objects.equals(SettlementOwnerEnum.MergeSettlementFlag.MERGE.getCode(),item.getMergeSettlementFlag()) if(Objects.equals(SettlementOwnerEnum.MergeSettlementFlag.MERGE.getCode(),item.getMergeSettlementFlag())
|| Objects.equals(SettlementOwnerEnum.MergeStatus.YES.getCode(),item.getMergeStatus())){ || Objects.equals(SettlementOwnerEnum.MergeStatus.YES.getCode(),item.getMergeStatus())){
log.warn("货主结算单号:{} 结算单不允许二次合并",item.getSettlementNo()); log.warn("货主结算单号:{} 结算单不允许二次合并",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,"结算单不允许二次合并"); throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,"结算单不允许二次合并");
} }
...@@ -573,4 +619,5 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService { ...@@ -573,4 +619,5 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
//更新货主运单计费明细 //更新货主运单计费明细
settlementOwnerDetailDao.updateSettlementMerge(settlementNo,settlementNos); settlementOwnerDetailDao.updateSettlementMerge(settlementNo,settlementNos);
} }
} }
package com.clx.performance.service.impl.settle; 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.dao.OrderChildDao; 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.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; 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.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.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.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.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail; 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.SettlementMqService;
import com.clx.performance.service.settle.SettlementService; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
@Slf4j @Slf4j
...@@ -31,6 +60,23 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -31,6 +60,23 @@ public class SettlementServiceImpl implements SettlementService {
private SettlementDriverDetailDao settlementDriverDetailDao; private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired @Autowired
private SettlementMqService settlementMqService; 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;
@Override @Override
...@@ -40,42 +86,208 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -40,42 +86,208 @@ public class SettlementServiceImpl implements SettlementService {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (settlementOwnerDetail.getInvoiceType() != null) {return;} if (settlementOwnerDetail.getInvoiceType() != null) {
return;
// 结算金额<0走普通单 }
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) < 0){ // 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) <= 0) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(); invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
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);
}
} }
// 结算金额
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); settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType); settlementDriverDetail.setInvoiceType(invoiceType);
// 网运单更新预付运费 log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
if (Objects.equals(settlementOwnerDetail.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
settlementOwnerDetail.setPrepayFreight(updatePrepayFreightPay(settlementOwnerDetail.getChildNo(),
settlementOwnerDetail.getFreight(), settlementOwnerDetail.getLossFreight()));
}
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail); settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceType(settlementDriverDetail); settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
// 发送mq 通过开票标识 // 发送mq 通过开票标识
settlementMqService.invoiceTypeSync(childNo, invoiceType); settlementMqService.invoiceTypeSync(childNo, 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 updatePrepayFreightPay(String childNo, BigDecimal freight, BigDecimal lossFreight){ private BigDecimal updatePrepayFreightPay(String childNo, BigDecimal freight, BigDecimal lossFreight) {
//开票金额
BigDecimal prepayFreight = freight.subtract(lossFreight); BigDecimal prepayFreight = freight.subtract(lossFreight);
if (prepayFreight.compareTo(BigDecimal.ZERO) <= 0) {return BigDecimal.ZERO;} if (prepayFreight.compareTo(BigDecimal.ZERO) <= 0) {
return BigDecimal.ZERO;
}
//扣减预付运费 //扣减预付运费
return prepayFreight; return prepayFreight;
} }
private BigDecimal getPrepayFreightPay(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail, BigDecimal accountFrozenPrefreght) {
//订单结算方式为“装车净重”时
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) {
BigDecimal subtract = settlementOwnerDetail.getFreight().subtract(settlementOwnerDetail.getLossFreight());
if (accountFrozenPrefreght.compareTo(subtract) >= 0) {
return subtract;
} else {
return BigDecimal.ZERO;
}
} else {
if (accountFrozenPrefreght.compareTo(settlementOwnerDetail.getFreight()) >= 0) {
return settlementOwnerDetail.getFreight();
} else {
return BigDecimal.ZERO;
}
}
}
/**
* 开票金额
*/
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());
}
}
/**
* 结算金额
*/
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());
}
}
} }
package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import com.clx.performance.vo.pc.NetworkCaseOutRecordVO;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkCaseOutRecordService {
IPage<NetworkCaseOutRecordVO> networkCaseOutRecord(PageNetworkCaseOutRecordListParam param);
}
package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.param.pc.driver.NetworkDriverAccountParam;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import com.clx.user.vo.feign.WalletResidueCardVO;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverAccountService {
IPage<NetworkDriverAccountVO> networkAccountList(PageNetworkAccountListParam param);
void createNetworkDriverAccount(NetworkDriverAccountParam param);
WalletResidueCardVO account(Integer userCode);
}
package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.vo.app.APPNetworkDriverRunningWaterRecordVO;
import com.clx.performance.vo.pc.NetworkDriverRunningWaterRecordVO;
import java.math.BigDecimal;
/**
* @author kavin
* Date 2023-12-19
* Time 11:34
*/
public interface NetworkDriverRunningWaterRecordService {
IPage<NetworkDriverRunningWaterRecordVO> networkDriverRunningWaterRecordList(PageNetworkAccountInfoListParam param);
void generateSettlementRunningWaterRecord(SettlementDriverDetail settlementDriverDetail);
void generateCaseOutFrozenRunningWaterRecord(SettlementDriverDetail settlementDriverDetail);
void generateCaseOutSuccessRunningWaterRecord(SettlementDriverDetail settlementDriverDetail);
void generateNetworkDriverRunningWaterRecord(SettlementDriverDetail settlementDriverDetail, Integer runningWaterType);
IPage<APPNetworkDriverRunningWaterRecordVO> pageFrozenList(NetworkDriverPageParam param);
IPage<APPNetworkDriverRunningWaterRecordVO> runningWaterList(NetworkDriverPageParam param);
void generateNetworkCaseOutRecord(SettlementDriverDetail settlementDriverDetail);
}
package com.clx.performance.service.settle;
import com.clx.performance.dto.PayStatusNotifyDTO;
import com.clx.performance.model.settle.SettlementDriverDetail;
/**
* @author kavin
* Date 2023-12-08
* Time 11:42
*/
public interface OrderChildSyncTransportRecordService {
void addOrderChildSyncTransportRecord(SettlementDriverDetail detail);
void updateStatus(PayStatusNotifyDTO payStatusNotifyDTO);
}
...@@ -2,6 +2,7 @@ package com.clx.performance.service.settle; ...@@ -2,6 +2,7 @@ package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO;
...@@ -15,4 +16,6 @@ public interface SettlementDriverDetailService { ...@@ -15,4 +16,6 @@ public interface SettlementDriverDetailService {
Integer saveSettlementDetail(OrderChild orderChild); Integer saveSettlementDetail(OrderChild orderChild);
IPage<CarrierPageSettlementDriverDetailVO> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param); IPage<CarrierPageSettlementDriverDetailVO> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param);
SettlementDriverDetail selectOneByChildNo(String childNo);
} }
package com.clx.performance.service.settle; package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
...@@ -11,4 +12,6 @@ import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO; ...@@ -11,4 +12,6 @@ import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
*/ */
public interface SettlementDriverService { public interface SettlementDriverService {
IPage<CarrierPageSettlementDriverVO> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param); IPage<CarrierPageSettlementDriverVO> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param);
void updateBatchPayDriverSettlement(BatchUpdatePayDriverSettlementParam param);
} }
package com.clx.performance.service.settle; package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
...@@ -11,6 +12,8 @@ public interface SettlementMqHandlerService { ...@@ -11,6 +12,8 @@ public interface SettlementMqHandlerService {
void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg); void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg);
String paySettlementDriver(SettlementDriverDetail detail);
String settlementNoGenerate(); String settlementNoGenerate();
} }
...@@ -24,4 +24,8 @@ public interface SettlementOwnerDetailService { ...@@ -24,4 +24,8 @@ public interface SettlementOwnerDetailService {
IPage<CarrierPageSettlementOwnerDetailVO> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param); IPage<CarrierPageSettlementOwnerDetailVO> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
SXSSFWorkbook exportOwnerSettlementOrderDetail(PageOwnerSettlementOwnerDetailParam param); SXSSFWorkbook exportOwnerSettlementOrderDetail(PageOwnerSettlementOwnerDetailParam param);
Integer getInvoiceType(String orderNo);
Boolean thawAndLockSettlement(String orderNo);
} }
package com.clx.performance.service.settle; package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.InvoicingStatusNotifyDTO;
import com.clx.performance.param.pc.owner.*; import com.clx.performance.param.pc.owner.*;
import com.clx.performance.vo.pc.carrier.settle.*; import com.clx.performance.vo.pc.carrier.settle.*;
import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO; import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO;
...@@ -52,6 +53,7 @@ public interface SettlementOwnerService { ...@@ -52,6 +53,7 @@ public interface SettlementOwnerService {
void payeeConfirm(String settlementNo); void payeeConfirm(String settlementNo);
void invoicingStatusNotify(InvoicingStatusNotifyDTO invoicingStatusNotifyDTO);
void mergeOwnerSettlement(MergeOwnerSettlementParam param); void mergeOwnerSettlement(MergeOwnerSettlementParam param);
} }
...@@ -53,17 +53,20 @@ public class IntegralTruckSqlProvider { ...@@ -53,17 +53,20 @@ public class IntegralTruckSqlProvider {
public String driverPageTruckRank(@Param("page") Page<IntegralTruckVO> page, @Param("param")DriverPageIntegralTruckRankParam param) { public String driverPageTruckRank(@Param("page") Page<IntegralTruckVO> page, @Param("param")DriverPageIntegralTruckRankParam param) {
return new SQL(){{ return new SQL(){{
SELECT(" id, truck_no, " + SELECT(" a.id, a.truck_no, " +
" driver_name, driver_mobile, " + " a.driver_name, a.driver_mobile, " +
" echelon, integral, rank, " + " a.echelon, b.integral, b.rank, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " + " date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime "); " date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime ");
FROM("integral_truck"); FROM("integral_truck a");
LEFT_OUTER_JOIN("integral_statistics b on a.truck_no = b.truck_no and b.statistics_date = #{param.statisticsDate}");
WHERE("truck_no in (\""+ StringUtils.join(param.getTruckNoList(), "\",\"") +"\") ");
ORDER_BY("integral desc, create_time desc"); WHERE("a.truck_no in (\""+ StringUtils.join(param.getTruckNoList(), "\",\"") +"\") ");
WHERE("a.create_time < #{param.time}");
ORDER_BY("b.integral desc, a.create_time desc");
}}.toString(); }}.toString();
} }
......
...@@ -20,7 +20,7 @@ public class OwnerAccountSqlProvider { ...@@ -20,7 +20,7 @@ public class OwnerAccountSqlProvider {
String sql = new SQL() {{ String sql = new SQL() {{
SELECT("a.id, a.owner_user_no," + SELECT("a.id, a.owner_user_no," +
" a.owner_user_name, a.mobile, a.account_type, " + " a.owner_user_name, a.mobile, a.account_type, " +
" a.account_balance,a.usable_balance, a.frozen_balance,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time"); " a.account_balance,a.usable_balance,a.frozen_balance,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("owner_account a"); FROM("owner_account a");
......
package com.clx.performance.sqlProvider.settle;
import com.clx.performance.param.pc.PageNetworkCaseOutRecordListParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class NetworkCaseOutRecordProvider {
public String networkCaseOutRecord(@Param("param") PageNetworkCaseOutRecordListParam param) {
String sql = new SQL() {{
SELECT("a.id,a.case_out_no,a.driver_user_no," +
" a.driver_user_name,a.payee,a.bank,a.collection_bank_code,a.status,a.status_msg,a.platform,a.order_no,a.order_goods_no," +
"a.child_no,a.mobile,a.alteration_balance, " +
"a.create_by," +
"date_format(a.finish_time, '%Y-%m-%d %H:%i:%s') as finish_time,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("network_case_out_record a");
if (StringUtils.isNotBlank(param.getDriverUserNo())) {
WHERE("a.driver_user_no = #{param.driverUserNo}");
}
if (StringUtils.isNotBlank(param.getMobile())) {
WHERE("a.mobile = #{param.mobile}");
}
if (StringUtils.isNotBlank(param.getChildNo())) {
WHERE("a.child_no = #{param.childNo}");
}
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
}
package com.clx.performance.sqlProvider.settle;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class NetworkDriverAccountProvider {
public String networkAccountList(@Param("page") Page<NetworkDriverAccountVO> page, @Param("param") PageNetworkAccountListParam param) {
String sql = new SQL() {{
SELECT("a.id, a.driver_user_no," +
" a.driver_user_name, a.mobile, a.account_balance, " +
" a.usable_balance,a.frozen_balance,a.wallet_code,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("network_driver_account a");
if (StringUtils.isNotBlank(param.getDriverUserNo())) {
WHERE("a.driver_user_no = #{param.driverUserNo}");
}
if (StringUtils.isNotBlank(param.getMobile())) {
WHERE("a.mobile = #{param.mobile}");
}
if (StringUtils.isNotBlank(param.getDriverUserName())) {
WHERE("a.driver_user_name like CONCAT('%',#{param.driverUserName},'%')");
}
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
}
package com.clx.performance.sqlProvider.settle;
import cn.hutool.core.util.ObjectUtil;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.param.app.NetworkDriverPageParam;
import com.clx.performance.param.pc.PageNetworkAccountInfoListParam;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class NetworkDriverRunningWaterRecordProvider {
public String networkDriverRunningWaterRecordDao(@Param("param") PageNetworkAccountInfoListParam param) {
String sql = new SQL() {{
SELECT("a.id, a.running_water_no," +
" a.driver_user_no,a.driver_user_name, a.mobile,a.running_water_type,a.running_water_type_msg,a.fund_type_msg,a.account_balance, " +
" a.fund_type,a.order_no,a.order_goods_no,a.child_no,a.alteration_balance," +
"a.usable_balance,a.frozen_balance,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("network_driver_running_water_record a");
if (StringUtils.isNotBlank(param.getDriverUserNo())) {
WHERE("a.driver_user_no = #{param.driverUserNo}");
}
if (StringUtils.isNotBlank(param.getMobile())) {
WHERE("a.mobile = #{param.mobile}");
}
if (ObjectUtil.isNotNull(param.getRunningWaterType())) {
WHERE("a.running_water_type = #{param.runningWaterType}");
}
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
public String pageFrozenList(@Param("param") NetworkDriverPageParam param) {
String sql = new SQL() {{
SELECT("a.id, a.running_water_no," +
" a.driver_user_no,a.driver_user_name, a.mobile,a.running_water_type,a.running_water_type_msg,a.fund_type_msg, a.account_balance,a.frozen_flag, " +
" a.fund_type,a.order_no,a.order_goods_no,a.child_no,a.alteration_balance," +
"a.usable_balance,a.frozen_balance,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("network_driver_running_water_record a");
WHERE("a.driver_user_no = #{param.userNo}");
WHERE("a.running_water_type = " + NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode());
WHERE("a.frozen_flag != 1");
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
public String runningWaterList(@Param("param") NetworkDriverPageParam param) {
String sql = new SQL() {{
SELECT("a.id, a.running_water_no," +
" a.driver_user_no,a.driver_user_name, a.mobile,a.running_water_type,a.running_water_type_msg,a.fund_type_msg,a.account_balance, " +
" a.fund_type,a.order_no,a.order_goods_no,a.child_no,a.alteration_balance," +
"a.usable_balance,a.frozen_balance,a.create_by,date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time");
FROM("network_driver_running_water_record a");
if (ObjectUtil.isNotNull(param.getUserNo())) {
WHERE("a.driver_user_no = #{param.userNo}");
}
if (ObjectUtil.isNotNull(param.getFundType())) {
WHERE("a.fund_type = #{param.fundType}");
}
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
}
package com.clx.performance.sqlProvider.settle;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
import java.util.stream.Collectors;
public class SettlementDriverDetailSqlProvider {
public String listUnPay() {
return new SQL(){{
SELECT("a.* ");
FROM("settlement_owner_detail a ");
LEFT_OUTER_JOIN("settlement_driver b on a.settlement_no = b.settlement_no ");
WHERE("b.create_time >= #{beginTime}");
WHERE("b.status = " + SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode());
ORDER_BY("b.create_time");
}}.toString();
}
public String findByDriverSettlementIds(List<Integer> ids) {
return new SQL(){{
SELECT("a.* ");
FROM("settlement_driver_detail a ");
LEFT_OUTER_JOIN("settlement_driver b on a.child_no = b.child_no ");
WHERE("b.id IN ( " + ids.stream().map(code -> "'"+code+"'").collect(Collectors.joining(","))+ ")" );
WHERE("b.status = " + SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode() );
ORDER_BY("b.create_time");
}}.toString();
}
}
...@@ -28,7 +28,14 @@ public class SettlementOwnerDetailSqlProvider { ...@@ -28,7 +28,14 @@ public class SettlementOwnerDetailSqlProvider {
} }
public String getInvoiceType( @Param("orderNo") String orderNo) {
return new SQL(){{
SELECT("invoice_type");
FROM("settlement_owner_detail");
WHERE("order_no = '" + orderNo + "'");
LIMIT(1);
}}.toString();
}
} }
...@@ -22,6 +22,7 @@ public interface BreakContractSettlementDriverStruct { ...@@ -22,6 +22,7 @@ public interface BreakContractSettlementDriverStruct {
@Mapping(target = "settleStatusMsg", expression = "java(BreakContractSettlementDriverEnum.SettleStatus.getMsgByCode(detail.getSettleStatus()))") @Mapping(target = "settleStatusMsg", expression = "java(BreakContractSettlementDriverEnum.SettleStatus.getMsgByCode(detail.getSettleStatus()))")
@Mapping(target = "settlePlatformMsg", expression = "java(BreakContractSettlementDriverEnum.SettlePlatform.getMsgByCode(detail.getSettlePlatform()))") @Mapping(target = "settlePlatformMsg", expression = "java(BreakContractSettlementDriverEnum.SettlePlatform.getMsgByCode(detail.getSettlePlatform()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))") @Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "payRemark", expression = "java(com.clx.performance.service.impl.breakcontract.BreakContractSettlementDriverServiceImpl.formatPayMsg(detail.getSettleStatus(),detail.getPayRemark()))")
PageCarrierBreakContractSettlementDriverVO convert(BreakContractSettlementDriver detail); PageCarrierBreakContractSettlementDriverVO convert(BreakContractSettlementDriver detail);
@IterableMapping(qualifiedByName = "toBaseVo") @IterableMapping(qualifiedByName = "toBaseVo")
......
package com.clx.performance.struct.settle; package com.clx.performance.struct.settle;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO;
import com.msl.common.utils.DateStructUtil; import com.msl.common.utils.DateStructUtil;
...@@ -11,4 +12,6 @@ import java.util.List; ...@@ -11,4 +12,6 @@ import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class}) @Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface SettlementDriverDetailStruct { public interface SettlementDriverDetailStruct {
List<CarrierPageSettlementDriverDetailVO> covertList(List<SettlementDriverDetail> records); List<CarrierPageSettlementDriverDetailVO> covertList(List<SettlementDriverDetail> records);
OrderChildSyncTransportRecord convertRecord(SettlementDriverDetail detail);
} }
...@@ -4,11 +4,21 @@ import com.clx.performance.model.settle.SettlementDriver; ...@@ -4,11 +4,21 @@ import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
import com.msl.common.utils.DateStructUtil; import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
import org.mapstruct.IterableMapping;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import java.util.List; import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class}) @Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface SettlementDriverStruct { public interface SettlementDriverStruct {
@Named("toBaseVo")
@Mapping(target = "payErrorMsg", expression = "java(com.clx.performance.service.impl.settle.SettlementDriverServiceImpl.formatPayMsg(detail.getStatus(),detail.getPayErrorMsg()))")
CarrierPageSettlementDriverVO convert(SettlementDriver detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<CarrierPageSettlementDriverVO> covertList(List<SettlementDriver> records); List<CarrierPageSettlementDriverVO> covertList(List<SettlementDriver> records);
} }
...@@ -75,11 +75,14 @@ public class RedisUtil { ...@@ -75,11 +75,14 @@ public class RedisUtil {
this.redisTemplate.delete(key); this.redisTemplate.delete(key);
return true; return true;
} }
public boolean lock(String key, String lockSeqId) { public boolean lock(String key, String lockSeqId) {
return setAtomicLockKey(key, lockSeqId); return setAtomicLockKey(key, lockSeqId);
} }
public boolean lock(String key, String lockSeqId, Integer expire) {
return setAtomicLockKey(key, lockSeqId,expire);
}
public boolean lock(String key, String lockSeqId, int second) { public boolean lock(String key, String lockSeqId, int second) {
return setAtomicLockKey(key, lockSeqId, second); return setAtomicLockKey(key, lockSeqId, second);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论