提交 53644573 authored 作者: liruixin's avatar liruixin

Merge branch 'v5.7_break_contract_reverse_20231020' into v6.3_small_version_20231102

# Conflicts: # performance-api/src/main/java/com/clx/performance/feign/PerformanceFeign.java # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/OrderGoodsDao.java # performance-web/src/main/java/com/clx/performance/mapper/OrderChildMapper.java
package com.clx.performance.constant;
public class ActionConstants {
public static final String CLX_PAYMENT_PAY = "clx.payment.pay";
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
public enum CancelOrderEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
NOT_CHILD(1, "违约无运单"),
NOT_TRANSPORTED(2, "取消未拉运吨数"),
NOT_ARRIVE(3, "取消未到达货源地"),
;
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();
}
}
}
...@@ -33,6 +33,7 @@ public enum OrderChildEnum { ...@@ -33,6 +33,7 @@ public enum OrderChildEnum {
DRIVER_CANCEL(110, "司机取消"), DRIVER_CANCEL(110, "司机取消"),
PLATFORM_CANCEL(111, "承运取消"), PLATFORM_CANCEL(111, "承运取消"),
OWNER_CANCEL(112, "货主取消"), OWNER_CANCEL(112, "货主取消"),
ARTIFICIAL_CANCEL(113, "客服取消"),
// //
// OWNER_CONFIRM(50, "货主确认车辆"),//货主确认车辆 // OWNER_CONFIRM(50, "货主确认车辆"),//货主确认车辆
...@@ -77,11 +78,11 @@ public enum OrderChildEnum { ...@@ -77,11 +78,11 @@ public enum OrderChildEnum {
; ;
private final int code; private final Integer code;
private final String name; private final String name;
public static Optional<Status> getByCode(int code) { public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst(); return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
} }
} }
...@@ -125,7 +126,8 @@ public enum OrderChildEnum { ...@@ -125,7 +126,8 @@ public enum OrderChildEnum {
public static final List<Integer> CANCEL_lIST = Arrays.asList( public static final List<Integer> CANCEL_lIST = Arrays.asList(
Status.DRIVER_CANCEL.getCode(), Status.DRIVER_CANCEL.getCode(),
Status.PLATFORM_CANCEL.getCode(), Status.PLATFORM_CANCEL.getCode(),
Status.OWNER_CANCEL.getCode() Status.OWNER_CANCEL.getCode(),
Status.ARTIFICIAL_CANCEL.getCode()
); );
......
...@@ -56,6 +56,7 @@ public enum OrderChildLogEnum { ...@@ -56,6 +56,7 @@ public enum OrderChildLogEnum {
OWNER(1, "货主"), OWNER(1, "货主"),
PLATFORM(2, "承运"), PLATFORM(2, "承运"),
DRIVER(3, "司机"), DRIVER(3, "司机"),
ARTIFICIAL(4, "客服"),
; ;
......
...@@ -4,9 +4,7 @@ import lombok.AllArgsConstructor; ...@@ -4,9 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
public enum OrderGoodsTruckBindEnum { public enum OrderGoodsTruckBindEnum {
; ;
...@@ -15,11 +13,12 @@ public enum OrderGoodsTruckBindEnum { ...@@ -15,11 +13,12 @@ public enum OrderGoodsTruckBindEnum {
@AllArgsConstructor @AllArgsConstructor
public enum Status { public enum Status {
SUCCESS(1, "正常"), NORMAL(1, "正常"),
CANCEL(2, "取消"), CANCEL(2, "取消"),
GET(3, "已接单"), GET(3, "已接单"),
EXPIRE(4, "已失效") EXPIRE(4, "已失效"),
SUCCESS(5, "结束")
; ;
......
...@@ -55,7 +55,27 @@ public enum OwnerAccountEnum { ...@@ -55,7 +55,27 @@ public enum OwnerAccountEnum {
; ;
private final Integer code; private final Integer code;
private final String msg; private final String msg;
public String getMsg() {
return this.msg;
}
public Integer getCode() {
return this.code;
}
}
@Getter
@AllArgsConstructor
public enum OrderChildTypeStatus {
ORDINARY(1, "普通单"),
NETWORK(2, "网运单"),
;
private final Integer code;
private final String msg;
public Integer getCode() {
return this.code;
}
} }
@Getter @Getter
......
...@@ -84,6 +84,8 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -84,6 +84,8 @@ public enum PerformanceResultEnum implements ResultEnum {
SETTLEMENT_NO_FOUND(1401, "结算单不存在"), SETTLEMENT_NO_FOUND(1401, "结算单不存在"),
MONEY_NO_SAME(1501, "货主提现金额和平台支付金额不一致"), MONEY_NO_SAME(1501, "货主提现金额和平台支付金额不一致"),
ORDER_GOODS_WEIGHT_NOT_HAVE(1601, "货单可拉运吨数不足"),
ORDER_GOODS_STATUS_NOT_GET(1602, "当前货单已关闭不可继续提取")
; ;
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;
@Getter
@AllArgsConstructor
public enum ThirdRequestStatusEnum {
HAVING(0, "请求中"),
SUCCESS(1, "成功"),
FAIL(2, "失败"),
;
private final int code;
private final String mark;
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ThirdRequestTypeEnum {
SEND(1, "发送请求"),
RECEIVE(2, "接收请求"),
;
private final int code;
private final String msg;
}
package com.clx.performance.enums.integral;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
public enum IntegralRecordEnum {
;
@Getter
@AllArgsConstructor
public enum Type{
SYSTEM(1, "系统"),
PROTECTION(2, "保护分"),
PROTECTION_CANCEL(3, "保护分取消"),
SETTLEMENT(4, "结算分"),
BASE(5, "基础分"),
ORDER_CHILD_COMPLETE(11, "运单完成"),
ORDER_CHILD_COMPLETE_NUM(12, "运单完成数量"),
ORDER_CHILD_COMPLETE_WATER(13, "流水单"),
ORDER_CHILD_COMPLETE_SUPPORT(14, "支援单"),
ORDER_CHILD_COMPLETE_TIMEOUT(15, "运单完成超时"),
ORDER_CHILD_CANCEL(21, "运单取消"),
ORDER_CHILD_CANCEL_TIMEOUT(22, "运单取消超时"),
ORDER_CHILD_PLATFORM_CANCEL(23, "平台取消"),
ORDER_CHILD_PLATFORM_COMPENSATION(25, "平台补偿"),
REPORT_TRUCK_INFO(50, "提交基础信息"),
REPORT_REFUEL(51, "油表上报"),
REPORT_TRAFFIC(52, "上报交通拥堵"),
REPORT_SEND_ADDRESS_WAIT(53, "上报货源地需要排队"),
REPORT_SEND_ADDRESS_NO_WAIT(54, "上报货源地无需排队"),
REPORT_RECEIVE_ADDRESS_WAIT(55, "上报目的地需要排队"),
REPORT_RECEIVE_ADDRESS_NO_WAIT(56, "上报目的地无需排队"),
REPORT_QUALITY(57, "上报煤炭质量问题"),
REPORT_ABNORMAL(58, "上报拉运异常问题"),
;
private Integer value;
private String msg;
}
// 取消
public static final List<Integer> DRIVER_REPORT_lIST = Arrays.asList(
Type.REPORT_TRUCK_INFO.value,
Type.REPORT_REFUEL.value,
Type.REPORT_TRAFFIC.value,
Type.REPORT_SEND_ADDRESS_WAIT.value,
Type.REPORT_SEND_ADDRESS_NO_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.value,
Type.REPORT_QUALITY.value,
Type.REPORT_ABNORMAL.value
);
// 取消
public static final List<Integer> PLATFORM_CANCEL_lIST = Arrays.asList(
Type.REPORT_TRUCK_INFO.value,
Type.REPORT_REFUEL.value,
Type.REPORT_TRAFFIC.value,
Type.REPORT_SEND_ADDRESS_WAIT.value,
Type.REPORT_SEND_ADDRESS_NO_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_WAIT.value,
Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.value,
Type.REPORT_QUALITY.value,
Type.REPORT_ABNORMAL.value
);
}
...@@ -6,6 +6,7 @@ import com.clx.performance.param.pc.owner.FrozenAccountParam; ...@@ -6,6 +6,7 @@ import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam; import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.param.pc.owner.UpdateStatusParam; import com.clx.performance.param.pc.owner.UpdateStatusParam;
import com.clx.performance.vo.feign.OrderGoodsFeignVO; import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -87,4 +88,7 @@ public interface PerformanceFeign { ...@@ -87,4 +88,7 @@ public interface PerformanceFeign {
@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);
@GetMapping(value = {"clx-performance/feign/owner/accountInfo"})
Result<OwnerAccountAllVO> accountInfo(@RequestParam Long userNo);
} }
package com.clx.performance.param.pay;
import com.msl.common.enums.ResultEnum;
/**
*
* @author xujianke
* @date 2017年6月01日
* @description
*/
public class NotifyString extends PayResult<String> {
/** 支付操作 参考<MessageTypeEnum> */
private Integer action;
/** 交易单号 */
private String orderNo;
/** 支付请求唯一ID */
private String uuid;
/** 出错时的交易单元编号 */
private String errorNo;
public NotifyString(){
super();
}
public NotifyString(PayResult<String> ret){
this.setCode(ret.getCode());
this.setMsg(ret.getMsg());
this.setData(ret.getData());
}
public NotifyString(ResultEnum e) {
super(e);
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public Integer getAction() {
return action;
}
public void setAction(Integer action) {
this.action = action;
}
public String getErrorNo() {
return errorNo;
}
public void setErrorNo(String errorNo) {
this.errorNo = errorNo;
}
@Override
public String toString() {
return "NotifyString [action=" + action + ", orderNo=" + orderNo + ", uuid=" + uuid
+ ", errorNo=" + errorNo + ", toString()=" + super.toString() + "]";
}
}
package com.clx.performance.param.pay;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.msl.common.enums.ResultEnum;
/**
*
* 类: Result
* 描述:接口返回结果类
* @author wangjf
* 时间:2017年3月23日下午3:46:50
* 版本:v1.0
* 修改人:wangjf
*/
public class PayResult<T> {
private Integer code; // 返回结果代码,0为成功
/**
* 返回结果代码
* 0为成功 ,其他代码请参照代码文档
* @return
*/
public Integer getCode() {
return code;
}
private Long total;//总共记录数
private Integer pageNum;//总共页数
/**
* 0代表成功,其他代码请参考《返回值说明文档》
* 请务必按规定填写!
* @param code 结果代码
*/
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
/**
* 错误消息,接口中的错误处理,请务必填写错误消息<br/>
* 当成功时消息应为“success”
* @param msg 错误消息
*/
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
private String msg;
private T data;
/**
* 默认code = 0,<br/>
* msg = "success"
*/
public PayResult() {
this.code = 0;
this.msg = "success";
}
/**
* 默认code = 0,
* msg = "success",<br/>
* 当成功返回结果时,可使用此方法,直接将返回结果填写即可
* @param data ,返回结果
*/
public PayResult(T data) {
this.code = 0;
this.msg = "success";
this.data = data;
}
/**
* 查询列表返回成功
* @param data
* @param pageNum
* @param total
*/
public PayResult(T data, Integer pageNum, Long total) {
this.code = 0;
this.msg = "success";
this.data = data;
this.pageNum = pageNum;
this.total = total;
}
/**
* 产生错误时,需要在枚举中拼接自定义返回的内容
* @param e
* @param msg
*/
public PayResult(ResultEnum e, String msg) {
this.code = e.getCode();
this.msg = String.format(e.getMsg(), msg);
}
/**
* 产生错误时,可以使用此构造方法,在new时直接填写错误代码及消息即可
* @param code
* @param msg
*/
public PayResult(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public PayResult(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
@JsonIgnore
public void setResultEnum(ResultEnum e){
this.code = e.getCode();
this.msg = e.getMsg();
}
public PayResult(ResultEnum e) {
this.code = e.getCode();
this.msg = e.getMsg();
}
public PayResult(T data, ResultEnum e) {
this.code = e.getCode();
this.msg = e.getMsg();
this.data = data;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
@Override
public String toString() {
return "Result [code=" + code + ", msg=" + msg + ", data=" + data + "]";
}
/**
* 是否成功
* @return
*/
public boolean succeed() {
return code != null && code == 0;
}
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class ArtificialCancelOrderParam {
@NotNull(message = "运单编号不能为空")
@ApiModelProperty("运单编号")
private String orderChildNo;
@ApiModelProperty("取消原因")
private String remark;
}
...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List;
@Data @Data
public class OrderCancelParam { public class OrderCancelParam {
...@@ -20,4 +21,6 @@ public class OrderCancelParam { ...@@ -20,4 +21,6 @@ public class OrderCancelParam {
@ApiModelProperty("取消原因") @ApiModelProperty("取消原因")
private String cancelReason; private String cancelReason;
private List<String> childNoList;
} }
package com.clx.performance.param.pc; package com.clx.performance.param.pc;
import com.msl.common.convertor.type.MoneyInConvert;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -48,6 +50,7 @@ public class OrderGoodsEditParams { ...@@ -48,6 +50,7 @@ public class OrderGoodsEditParams {
private Integer needTruckNum; private Integer needTruckNum;
@ApiModelProperty("挂单运费") @ApiModelProperty("挂单运费")
@MoneyInConvert
private BigDecimal pendingOrderFreight; private BigDecimal pendingOrderFreight;
@ApiModelProperty("创建人用户编号") @ApiModelProperty("创建人用户编号")
......
...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
...@@ -20,6 +21,7 @@ public class PageTruckListParam extends PageParam { ...@@ -20,6 +21,7 @@ public class PageTruckListParam extends PageParam {
@NotNull(message = "需要车数不能为空") @NotNull(message = "需要车数不能为空")
@ApiModelProperty(value = "需要车辆数量", example = "5") @ApiModelProperty(value = "需要车辆数量", example = "5")
@Min(value = 1,message = "需要车数最小为1")
private Integer needTruckNum; private Integer needTruckNum;
@ApiModelProperty(value = "空重车状态 1:空车 2:运单-空车 3:运单-重车", example = "1") @ApiModelProperty(value = "空重车状态 1:空车 2:运单-空车 3:运单-重车", example = "1")
private Integer truckUserStatus; private Integer truckUserStatus;
......
...@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor; ...@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -32,6 +34,8 @@ public class BreakContractDriverRecordAddParam { ...@@ -32,6 +34,8 @@ public class BreakContractDriverRecordAddParam {
@ApiModelProperty("违约金") @ApiModelProperty("违约金")
@NotNull(message = "违约金不能为空") @NotNull(message = "违约金不能为空")
@Max(value = 999_999_999L, message = "金额不能超过999999999元")
@Min(value = 0L, message = "金额不能小于0元")
@MoneyInConvert @MoneyInConvert
private BigDecimal figure; private BigDecimal figure;
......
...@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor; ...@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -32,6 +34,8 @@ public class BreakContractOwnerRecordAddParam { ...@@ -32,6 +34,8 @@ public class BreakContractOwnerRecordAddParam {
@ApiModelProperty("违约金") @ApiModelProperty("违约金")
@NotNull(message = "违约金不能为空") @NotNull(message = "违约金不能为空")
@Max(value = 999_999_999L, message = "金额不能超过999999999元")
@Min(value = 0L, message = "金额不能小于0元")
@MoneyInConvert @MoneyInConvert
private BigDecimal figure; private BigDecimal figure;
......
package com.clx.performance.param.pc.integral;
import com.clx.performance.vo.pc.integral.AppIntegralRuleVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.Valid;
/**
* @Author: aiqingguo
* @Description: 新增积分
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralRuleUpdateParam {
@Valid
@ApiModelProperty(value = "运单完成积分规则")
private AppIntegralRuleVO.OrderChildCompleteRule orderChildCompleteRule;
@Valid
@ApiModelProperty(value = "货单奖励积分规则")
private AppIntegralRuleVO.OrderAwardRule orderAwardRule;
@Valid
@ApiModelProperty(value = "货单扣减积分规则")
private AppIntegralRuleVO.OrderChildCancelRule orderDiscountRule;
@Valid
@ApiModelProperty(value = "运单超时扣减规则")
private AppIntegralRuleVO.OrderChildTimeoutRule orderChildTimeoutRule;
@Valid
@ApiModelProperty(value = "平台补偿积分规则")
private AppIntegralRuleVO.PlatformCompensationRule platformCompensationRule;
@Valid
@ApiModelProperty(value = "司机上报积分规则")
private AppIntegralRuleVO.DriverReportRule driverReportRule;
}
...@@ -16,5 +16,5 @@ public class ThawAccountParam { ...@@ -16,5 +16,5 @@ public class ThawAccountParam {
private String orderNo; private String orderNo;
// 1: 普通单 2:网运单 // 1: 普通单 2:网运单
private String orderType; private Integer orderType;
} }
package com.clx.performance.param.pc.payment;
import lombok.*;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class FreezeUnitDTO {
/** 冻结序列号 */
private String freezeNo;
/** 操作金额(单位分) */
private Long figure;
/** 平台信息费用(单位分) */
private Long fee;
/** 平台信息费收费方式 1from 2to 3all 默认是2 */
private Integer feeType;
/** 返还费用 */
private Long returnFee;
/** 操作类型 1撤销 2完成 3修改*/
private Integer action;
/** 时间戳(单位毫秒) **/
private Long timestamp;
/** 签名使用业务系统私钥签名 不参与签名 **/
private String signature;
/** 备注 不参与签名 可空 */
private String remark;
/** 消费卡列表 */
private List<PayCardDTO> cardList;
/** 分账列表 */
private List<PayChildDTO> childList;
/** 流程标志 1线上2线下 */
private String flag;
/** 补充标记,结合枚举使用(PatchMarkEnum),确定实际业务含义 */
private Integer patchMark;
/** 优惠卷id */
private Integer userCouponId;
}
package com.clx.performance.param.pc.payment;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class PayCardDTO {
/** VIP 消费卡ID*/
private Integer cardId;
/** 金额 */
private Integer figure;
}
package com.clx.performance.param.pc.payment;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class PayChildDTO {
/** 支付给谁 用户钱包编号 支付给系统时为10000 **/
private Integer to;
/** 交易金额(单位分) 必须为正数 **/
private Integer figure;
/** 备注 不参与签名 可空 */
private String remark;
}
package com.clx.performance.param.pc.payment;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayParam {
@NotBlank(message = "支付人不能为空")
@ApiModelProperty(value = "支付来源", example = "2234", dataType = "int")
Integer from;
@NotBlank(message = "支付密码不能为空")
@ApiModelProperty(value = "支付方密码", example = "2356", dataType = "String")
String pwd;
@NotBlank(message = "收款钱包不能为空")
@ApiModelProperty(value = "支付去向", example = "2234", dataType = "int")
Integer to;
@NotBlank(message = "金额不能为空")
@ApiModelProperty(value = "金额", example = "2356", dataType = "int")
Integer figure;
@NotBlank(message = "交易单号不能为空")
@ApiModelProperty(value = "交易单号", example = "2356", dataType = "String")
String tradeNo;
@NotBlank(message = "交易单id不能为空")
@ApiModelProperty(value = "交易单id", example = "23", dataType = "int")
Integer tradeId;
@NotBlank(message = "交易备注不能为空")
@ApiModelProperty(value = "交易备注", example = "23", dataType = "int")
String remark;
}
package com.clx.performance.param.pc.payment;
import lombok.*;
import lombok.experimental.Accessors;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayUnitDTO {
/** 支付单元唯一标识*/
private String id;
/** 谁支付 用户钱包编号 */
private Integer from;
/** 支付给谁 用户钱包编号 支付给系统时为10000 **/
private Integer to;
/** 交易金额(单位分) 必须为正数 **/
private Integer figure;
/** 支付类型 参考 <PayUnitTypeEnum> **/
private Integer type;
/** 时间戳(单位毫秒) **/
private Long timestamp;
/** 签名使用业务系统私钥签名 不参与签名 **/
private String signature;
/** 备注 不参与签名 可空 */
private String remark;
/** 关联名称 不参与签名 可空 */
private String relationName;
/** 优惠卷id */
private Integer userCouponId;
/** 订单编码 批量发送 单独处理的订单号 */
private String orderNo;
}
package com.clx.performance.param.pc.payment;
import lombok.*;
import lombok.experimental.Accessors;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayUserDTO {
/**用户钱包编号 用户发起的操作必填 */
private Integer userCode;
/** 交易密码 用户发起的操作必填 */
private String pwd;
/** 支付单元 */
PayUnitDTO payUnitDTO;
/** 平台服务续费 **/
private Integer fee = 0;
/** 平台服务续费的去向 **/
private Integer feeToUserCode = 10000;
/** 业务系统编码 参考<SystemCodeEnum> */
private Integer system;
/** 支付结果通知回调地址 */
private String notifyUrl;
/** 操作唯一标识 UUID */
private String uuid;
/** 关联单号 */
private String orderNo;
}
...@@ -164,4 +164,13 @@ public class OrderChildVO { ...@@ -164,4 +164,13 @@ public class OrderChildVO {
return freightPrice.multiply(weight).setScale(2, RoundingMode.HALF_UP); return freightPrice.multiply(weight).setScale(2, RoundingMode.HALF_UP);
} }
@ApiModelProperty("状态MSG")
public String statusMsg;
public String getStatusMsg() {
return OrderChildEnum.Status.getByCode(status).get().getName();
}
@ApiModelProperty("货物类型名称")
public String goodTypeName;
} }
\ No newline at end of file
...@@ -105,5 +105,7 @@ public class OrderGoodsAPPVO { ...@@ -105,5 +105,7 @@ public class OrderGoodsAPPVO {
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private String createTime; private String createTime;
@ApiModelProperty("车牌号")
private String truckNo;
} }
\ No newline at end of file
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
import java.util.List;
/**
* @ClassName OrderChildBussInfoVO
* @Description
* @Author kavin
* @Date 2023/9/24 17:41
* @Version 1.0
*/
@ApiModel(description = "司机取消运单-运单详情")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DriverCancelOrderChildInfo {
@ApiModelProperty(value = "取消原因")
private String cancelRemark;
@ApiModelProperty(value = "取消详细原因")
private String cancelDetail;
@ApiModelProperty(value = "图片集合")
private List<String> imageList;
}
package com.clx.performance.vo.pc; package com.clx.performance.vo.pc;
import com.msl.common.convertor.field.Converted;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -16,6 +18,7 @@ public class OrderGoodsEditVO { ...@@ -16,6 +18,7 @@ public class OrderGoodsEditVO {
@ApiModelProperty("拉运吨数") @ApiModelProperty("拉运吨数")
private BigDecimal transportWeight; private BigDecimal transportWeight;
@ApiModelProperty("有效运费") @ApiModelProperty("有效运费")
@MoneyOutConvert
private BigDecimal validFreightPrice; private BigDecimal validFreightPrice;
@ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆") @ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆")
private Integer truckDemand; private Integer truckDemand;
...@@ -40,5 +43,7 @@ public class OrderGoodsEditVO { ...@@ -40,5 +43,7 @@ public class OrderGoodsEditVO {
@ApiModelProperty("1:可以全部编辑 0:不能全部编辑") @ApiModelProperty("1:可以全部编辑 0:不能全部编辑")
private boolean editAllFlag; private boolean editAllFlag;
@ApiModelProperty("货单数据")
@Converted(isDynamic = false)
private OrderGoodsVO orderGoodsVO; private OrderGoodsVO orderGoodsVO;
} }
package com.clx.performance.vo.pc;
import com.msl.common.convertor.field.Converted;
import lombok.Data;
@Data
public class OwnerAccountAllVO {
@Converted(isDynamic = true)
private OwnerAccountVO marginAccount;
@Converted(isDynamic = true)
private OwnerAccountVO prepaidFreightAccount;
}
...@@ -66,8 +66,10 @@ public class BreakContractOwnerRuleVO { ...@@ -66,8 +66,10 @@ public class BreakContractOwnerRuleVO {
@ToString @ToString
@NoArgsConstructor @NoArgsConstructor
public static class OrderAmountReduceRule { public static class OrderAmountReduceRule {
@ApiModelProperty(value = "总运费*X%", example = "1.23") @ApiModelProperty(value = "挂单前:总运费*X%", example = "1.23")
private BigDecimal ratio; private BigDecimal beforeRatio;
@ApiModelProperty(value = "挂单后:总运费*X%", example = "1.23")
private BigDecimal afterRatio;
} }
@Getter @Getter
......
package com.clx.performance.vo.pc.integral;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* @Author: aiqinguo
* @Description: 车辆积分规则
* @Date: 2023/11/06 14:12:53
* @Version: 1.0
*/
@ApiModel(description = "积分规则")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class AppIntegralRuleVO {
@ApiModelProperty(value = "运单完成积分规则")
private OrderChildCompleteRule orderChildCompleteRule;
@ApiModelProperty(value = "货单奖励积分规则")
private OrderAwardRule orderAwardRule;
@ApiModelProperty(value = "货单扣减积分规则")
private OrderChildCancelRule orderChildCancelRule;
@ApiModelProperty(value = "运单超时扣减规则")
private OrderChildTimeoutRule orderChildTimeoutRule;
@ApiModelProperty(value = "平台补偿积分规则")
private PlatformCompensationRule platformCompensationRule;
@ApiModelProperty(value = "司机上报积分规则")
private DriverReportRule driverReportRule;
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class OrderChildCompleteRule{
@ApiModelProperty(value = "当日完成第1笔运单积分x")
@NotNull(message = "参数不能为空")
private Integer integer1;
@ApiModelProperty(value = "当日完成第2笔运单积分x")
@NotNull(message = "参数不能为空")
private Integer integer2;
@ApiModelProperty(value = "当日完成第3笔运单积分x")
@NotNull(message = "参数不能为空")
private Integer integer3;
@ApiModelProperty(value = "当日完成第4笔运单积分x")
@NotNull(message = "参数不能为空")
private Integer integer4;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class OrderAwardRule{
@ApiModelProperty(value = "完成流水单每单附加积分x")
private Integer integerWater;
@ApiModelProperty(value = "当日流水单奖励次数上限x")
private Integer countWaterLimit;
@ApiModelProperty(value = "完成支援单每单附加积分x")
private Integer integerSupport;
@ApiModelProperty(value = "当日支援单奖励次数上限x")
private Integer countSupportLimit;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class OrderChildCancelRule {
@ApiModelProperty(value = "自行取消运单每单扣减积分x")
@NotNull(message = "参数不能为空")
private Integer integralCancel;
@ApiModelProperty(value = "自行取消流水单每单另扣积分x")
private Integer integralWaterCancel;
@ApiModelProperty(value = "自行取消支援单每单另扣积分x")
private Integer integralSupportCancel;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class OrderChildTimeoutRule{
@ApiModelProperty(value = "超时未到达货源地扣积分x")
@NotNull(message = "参数不能为空")
private Integer integralSendAddressTimeout;
@ApiModelProperty(value = "超时未到达目的地扣积分x")
@NotNull(message = "参数不能为空")
private Integer integralReceiveAddressTimeout;
@ApiModelProperty(value = "接单超时扣积分x")
private Integer integralTakeOrderTimeout;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class PlatformCompensationRule{
@ApiModelProperty(value = "平台取消运单补偿积分x")
private Integer integralCancel;
@ApiModelProperty(value = "当日平台补偿积分上限x")
private Integer integralCancelLimit;
@ApiModelProperty(value = "规定时间不能装车补偿x")
private Integer integralLoad;
@ApiModelProperty(value = "规定时间不能卸车补偿x")
private Integer integralUnload;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
public static class DriverReportRule{
@ApiModelProperty(value = "提交基础信息每项积分x")
private Integer integralTruck;
@ApiModelProperty(value = "油表上报积分x")
private Integer integralRefuel;
@ApiModelProperty(value = "上报交通拥堵积分x")
private Integer integralTraffic;
@ApiModelProperty(value = "上报货源地需要排队积分x")
private Integer integralSendAddressWait;
@ApiModelProperty(value = "上报货源地无需排队积分x")
private Integer integralSendAddressNoWait;
@ApiModelProperty(value = "上报目的地需要排队积分x")
private Integer integralReceiveAddressWait;
@ApiModelProperty(value = "上报目的地无需排队积分x")
private Integer integralReceiveAddressNoWait;
@ApiModelProperty(value = "上报煤炭质量问题积分x")
private Integer integralQuality;
@ApiModelProperty(value = "上报拉运异常问题积分x")
private Integer integralAbnormal;
@ApiModelProperty(value = "限制频繁上报奖励间隔x(小时)")
private BigDecimal reportLimit;
@ApiModelProperty(value = "当日上报奖励积分上限x")
private Integer integralLimit;
}
@ApiModelProperty(value = "运单完成积分规则", example = "", hidden = true)
private OrderChildCompleteRule orderChildCompleteRuleJson;
@ApiModelProperty(value = "货单奖励积分规则", example = "", hidden = true)
private OrderAwardRule orderAwardRuleJson;
@ApiModelProperty(value = "货单扣减积分规则", example = "", hidden = true)
private OrderChildCancelRule orderDiscountRuleJson;
@ApiModelProperty(value = "运单超时扣减规则", example = "", hidden = true)
private OrderChildTimeoutRule orderChildTimeoutRuleJson;
@ApiModelProperty(value = "平台补偿积分规则", example = "", hidden = true)
private PlatformCompensationRule platformCompensationRuleJson;
}
\ No newline at end of file
...@@ -3,10 +3,14 @@ package com.clx.performance.component; ...@@ -3,10 +3,14 @@ package com.clx.performance.component;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderGoodsDriverTruckDao; import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoodsDriverTruck; import com.clx.performance.model.OrderGoodsDriverTruck;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -23,6 +27,8 @@ public class GoodsOrderTruckRecordComponent { ...@@ -23,6 +27,8 @@ public class GoodsOrderTruckRecordComponent {
private final OrderGoodsDriverTruckDao orderGoodsDriverTruckDao; private final OrderGoodsDriverTruckDao orderGoodsDriverTruckDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
public void saveTruckRecord(String orderGoodsNo, List<String> truckList) { public void saveTruckRecord(String orderGoodsNo, List<String> truckList) {
redisTemplate.opsForSet().add(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo, truckList.toArray(new String[]{})); redisTemplate.opsForSet().add(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo, truckList.toArray(new String[]{}));
...@@ -33,7 +39,7 @@ public class GoodsOrderTruckRecordComponent { ...@@ -33,7 +39,7 @@ public class GoodsOrderTruckRecordComponent {
public void deleteTruckRecord(String orderGoodsNo) { public void deleteTruckRecord(String orderGoodsNo) {
redisTemplate.delete(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo); redisTemplate.delete(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo);
//redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo,); //redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo,);
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_RECORD, orderGoodsNo); redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_RECORD, RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo);
} }
//删除货单下的指定车牌号 //删除货单下的指定车牌号
...@@ -62,4 +68,24 @@ public class GoodsOrderTruckRecordComponent { ...@@ -62,4 +68,24 @@ public class GoodsOrderTruckRecordComponent {
return truckList; return truckList;
} }
//释放车辆
public void releaseDriverCard(String orderGoodsNo, String truckNo) {
log.info("执行释放车辆,货单号:{},车牌号:{}", orderGoodsNo, truckNo);
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(), truckNo);
this.deleteTruckRecord(orderGoodsNo, truckNo);
}
//定向单接单时,如果接完后没有余量,则释放其他未接单的定向单记录
public void releaseDriverAndTruckBind(String orderGoodsNo, String truckNo) {
List<OrderGoodsTruckBind> truckBindList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo);
for (OrderGoodsTruckBind bind : truckBindList) {
if (StringUtils.equals(truckNo, bind.getTruckNo())) {
continue;
}
this.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatusExpire(orderGoodsNo, truckNo);
}
} }
package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
@Slf4j
@AllArgsConstructor
public class OrderCancelComponent implements InitializingBean {
private final OrderChildDao orderChildDao;
private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsTruckBindService orderGoodsTruckBindService;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final OrderFeign orderFeign;
private final DriverService driverService;
private final BreakContractSettlementOwnerService breakContractSettlementOwnerService;
public static Map<Integer, String> statusCodeMap = new HashMap<>();
private final IntegralMqService integralMqService;
private final OrderChildLogService orderChildLogService;
public List<String> ownerProcess(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
List<String> childNoList = new LinkedList<>();
switch (param.getCancelType()) {
case 1: //单纯取消订单
log.info("1:货主单纯取消订单");
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
}
break;
case 2: //取消未拉运吨数的货单
log.info("2:货主取消未拉运吨数的货单");
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
break;
case 3: //取消未拉运+未到达货源地吨数
log.info("3:货主取消未拉运+未到达货源地吨数");
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
log.info("执行货主取消未拉运+未到达货源地吨数,当前运单个数" + orderChildren.size());
for (OrderChild orderChild : orderChildren) {
log.info("取消的运单:{}", JSONUtil.parse(orderChild));
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(childNoList)) {
log.info("childNoList:{}", childNoList);
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "货主取消",
now, now,childNoList);
orderChildMap = orderChildren.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
BigDecimal reduce = BigDecimal.ZERO;
for (OrderChild orderChild : orderChildMap.get(orderGoods.getOrderGoodsNo())) {
reduce = reduce.add(orderChild.getWeight());
}
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
break;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数有误");
}
this.breakContractSettlementOwner(orderNo, orderStatusCode, param.getCancelType());
log.info("执行货主取消订单更改状态");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
for (String childNo : childNoList) {
integralMqService.orderChildFinish(childNo);
}
return childNoList;
}
public void backFillTonnage(OrderGoods orderGoods, BigDecimal weight) {
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
) {
Integer truckDemand = orderGoods.getTruckDemand();
//返回到货单
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId());
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(orderGoods.getOrderNo());
rollbackOrderWeightParam.setResidueWeight(weight);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
} else {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
}
}
Result<Object> result = orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
}
}
/**
* 客服取消归还吨数
*
* @param orderGoodsNo
* @param weight
*/
public void backFillTonnageForArtificial(String orderGoodsNo, BigDecimal weight) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
) {
Integer truckDemand = orderGoods.getTruckDemand();
//返回到货单
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId());
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(orderGoods.getOrderNo());
rollbackOrderWeightParam.setResidueWeight(weight);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
} else {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
}
}
Result<Object> result = orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
} else {
//返回到货单
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId());
}
}
public void breakContractSettlementOwner(String orderNo, Integer updateStatus, Integer cancelType) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
Integer orderStatus = orderInfoFeign.getOrderStatus();
log.info("执行处理违约,订单号:{}, updateStatus:{}, 订单状态{}", orderNo, updateStatus, orderStatus);
if (OrderEnum.Status.COMPLETED.getCode().equals(updateStatus) || statusCodeMap.containsKey(orderStatus)) {
try {
breakContractSettlementOwnerService.saveSettlementOwnerForCancelOrder(orderInfoFeign.getTransportWeight(), orderInfoFeign.getValidFreightPrice(), orderNo, cancelType);
log.info("执行处理违约完毕");
} catch (Exception e) {
log.info("执行处理违约失败{}", e.getMessage());
}
}
}
@Override
public void afterPropertiesSet() throws Exception {
statusCodeMap.put(OrderEnum.Status.QUOTATION_CONFIRMED.getCode(), OrderEnum.Status.QUOTATION_CONFIRMED.getName());
statusCodeMap.put(OrderEnum.Status.PLATFORM_UNDERTAKING.getCode(), OrderEnum.Status.PLATFORM_UNDERTAKING.getName());
statusCodeMap.put(OrderEnum.Status.POST_ORDER.getCode(), OrderEnum.Status.POST_ORDER.getName());
statusCodeMap.put(OrderEnum.Status.ON_ORDER.getCode(), OrderEnum.Status.ON_ORDER.getName());
statusCodeMap.put(OrderEnum.Status.IN_TRANSIT.getCode(), OrderEnum.Status.IN_TRANSIT.getName());
}
}
...@@ -8,15 +8,15 @@ import com.clx.performance.constant.RedisConstants; ...@@ -8,15 +8,15 @@ import com.clx.performance.constant.RedisConstants;
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.OrderGoodsTruckBindDao; import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.*;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
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.service.OrderChildLogService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -29,7 +29,10 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -29,7 +29,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/** /**
* 货单最晚接单时间、最晚到达货源地时间处理 * 货单最晚接单时间、最晚到达货源地时间处理
...@@ -53,6 +56,11 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -53,6 +56,11 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final DriverService driverService; private final DriverService driverService;
private final BreakContractDriverRecordService breakContractDriverRecordService;
private final OrderChildLogService orderChildLogService;
//根据货单最晚接单时间处理 //根据货单最晚接单时间处理
public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) { public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()); redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
...@@ -119,7 +127,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -119,7 +127,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else { } else {
//更新货单已完成 //更新货单已完成
log.info("当前货单虽然可拉运吨数为0,未存在未拉运完成的运单,所以更新为已完成,货单编号{}", orderGoodsNo); log.info("当前货单可拉运吨数为0,未存在未拉运完成的运单,所以更新为已完成,货单编号{}", orderGoodsNo);
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} }
...@@ -142,8 +150,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -142,8 +150,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} }
} }
orderFeign.rollbackOrderWeight(param); orderFeign.rollbackOrderWeight(param);
//更新已完结,并设置剩余吨数为0 //更新已完结
orderGoodsDao.updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(orderGoods.getId(), OrderGoodsStatusEnum.Status.COMPLETED.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue()); log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
} }
...@@ -165,7 +173,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -165,7 +173,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
public void consumingLastArriveSendTime() { public void consumingLastArriveSendTime() {
log.info("货单-最晚到达货源地时间-定时器启动"); log.info("货单-最晚到达货源地时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis(); long nowTimeMillis = System.currentTimeMillis();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores( Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME,
0, nowTimeMillis //延时任务score最小值 0, nowTimeMillis //延时任务score最小值
...@@ -198,27 +206,34 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -198,27 +206,34 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
BigDecimal childSum = BigDecimal.ZERO; BigDecimal childSum = BigDecimal.ZERO;
List<Integer> ids = new LinkedList<>(); List<String> childNoList = new LinkedList<>();
for (OrderChild orderChild : orderChildrenList) { for (OrderChild orderChild : orderChildrenList) {
childSum = childSum.add(orderChild.getWeight()); childSum = childSum.add(orderChild.getWeight());
ids.add(orderChild.getId()); childNoList.add(orderChild.getChildNo());
//释放车辆 //释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1); driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
orderChild.setCancelTime(DateUtils.parseDateTime(now).get());
orderChild.setFinishTime(DateUtils.parseDateTime(now).get());
breakContractDriverRecordService.saveDriverRecordOfOrderChildCancel(orderChild, 0L, "系统");
//保存运单日志数据
orderChildLogService.saveDriverOrderChildLog(orderChild.getChildNo(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(),
OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(), 0L, "系统");
} }
log.info("取消运单ID集合:{}", ids); log.info("取消运单ID集合:{}", childNoList);
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), ids); orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消", now, now, childNoList);
} }
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据 //当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus()) if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus()) || OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) { ) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(childSum);
//当前情况需要回填订单的余量 //当前情况需要回填订单的余量
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) { if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO); param.setOwnResidueCarryWeight(BigDecimal.ZERO);
...@@ -233,13 +248,15 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -233,13 +248,15 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} }
} }
//只更新货单已拉运吨数 //只更新货单已拉运吨数
orderGoodsDao.updateOrderGoodsSetAlreadyWeight(childSum, orderGoods.getId()); orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
orderFeign.rollbackOrderWeight(param); orderFeign.rollbackOrderWeight(param);
} else { } else {
//只更新货单未拉运吨数,已拉运吨数 //只更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId()); orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
} }
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue()); redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
} }
} }
} }
......
package com.clx.performance.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
@Getter
@Setter
public class MslPaymentConfig {
@Value("${msl.payment.host}")
private String host;
@Value("${msl.payment.notifyhost}")
private String notifyhost;
}
package com.clx.performance.config; package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.*;
import org.springframework.amqp.core.BindingBuilder; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -93,32 +91,32 @@ public class RabbitBeanConfig { ...@@ -93,32 +91,32 @@ public class RabbitBeanConfig {
/** /**
* 货单挂单队列 // * 货单挂单队列
* @return // * @return
*/ // */
@Bean // @Bean
public Queue orderGoodsOnQueue() { // public Queue orderGoodsOnQueue() {
Map<String, Object> params = new HashMap<>(6); // Map<String, Object> params = new HashMap<>(6);
params.put("x-dead-letter-exchange", RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE); // params.put("x-dead-letter-exchange", RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY); // params.put("x-dead-letter-routing-key", RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY);
return new Queue(RabbitKeyConstants.ORDER_GOODS_ON_QUEUE, true, false, false, params); // return new Queue(RabbitKeyConstants.ORDER_GOODS_ON_QUEUE, true, false, false, params);
} // }
//
/** // /**
* 货单挂单中交换机 // * 货单挂单中交换机
**/ // **/
@Bean // @Bean
public DirectExchange orderGoodsOnExchange() { // public DirectExchange orderGoodsOnExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE); // return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE);
} // }
//
/** // /**
* 货单挂单中绑定 // * 货单挂单中绑定
*/ // */
@Bean // @Bean
public Binding orderGoodsOnExchangeBind() { // public Binding orderGoodsOnExchangeBind() {
return BindingBuilder.bind(orderGoodsOnQueue()).to(orderGoodsOnExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY); // return BindingBuilder.bind(orderGoodsOnQueue()).to(orderGoodsOnExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY);
} // }
/** /**
* 死信队列:死信队列处理延迟消息货单挂单 * 死信队列:死信队列处理延迟消息货单挂单
...@@ -133,19 +131,26 @@ public class RabbitBeanConfig { ...@@ -133,19 +131,26 @@ public class RabbitBeanConfig {
* 货单挂单中交换机:死信队列处理延迟消息 * 货单挂单中交换机:死信队列处理延迟消息
**/ **/
@Bean @Bean
public DirectExchange orderGoodsOnDeadExchange() { public CustomExchange orderGoodsOnDeadExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE); Map<String, Object> arguments = new HashMap<>();
//设置路由模式 direct模式
arguments.put("x-delayed-type", "direct");
return new CustomExchange(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE,"x-delayed-message", true, false, arguments);
} }
/** /**
* 货单挂单中绑定:死信队列处理延迟消息 * 货单挂单中绑定:死信队列处理延迟消息
*/ */
// @Bean
// public Binding orderGoodsDeadExchangeBind() {
// return BindingBuilder.bind(orderGoodsOnDeadQueue()).to(orderGoodsOnDeadExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY);
// }
//绑定交换机,队列和routingKey
@Bean @Bean
public Binding orderGoodsDeadExchangeBind() { public Binding delayedQueueBindingDelayedExchange(@Qualifier("orderGoodsOnDeadQueue")Queue queue,@Qualifier("orderGoodsOnDeadExchange")CustomExchange customExchange) {
return BindingBuilder.bind(orderGoodsOnDeadQueue()).to(orderGoodsOnDeadExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY); return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY).noargs();
} }
/** /**
* 订单取消队列 * 订单取消队列
* @return * @return
......
...@@ -2,20 +2,27 @@ package com.clx.performance.controller.app; ...@@ -2,20 +2,27 @@ package com.clx.performance.controller.app;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderGoodsListPageParam; import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.app.OrderGoodsAPPVO; import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
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.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.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;
/** /**
* @ClassName GoodsOrderController * @ClassName GoodsOrderController
* @Description * @Description
...@@ -28,14 +35,13 @@ import org.springframework.web.bind.annotation.*; ...@@ -28,14 +35,13 @@ import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping("/app/goodsOrder") @RequestMapping("/app/goodsOrder")
@Validated @Validated
@AllArgsConstructor
@Api(tags = "APP-货单") @Api(tags = "APP-货单")
public class AppGoodsOrderController { public class AppGoodsOrderController {
@Autowired private final OrderGoodsService orderGoodsService;
OrderGoodsService orderGoodsService;
@Autowired private final OrderGoodsTruckBindService orderGoodsTruckBindService;
OrderGoodsMapper orderGoodsMapper;
@ApiOperation(value = "查看货单详情", notes = "<br>By:胡宇帆") @ApiOperation(value = "查看货单详情", notes = "<br>By:胡宇帆")
...@@ -55,10 +61,9 @@ public class AppGoodsOrderController { ...@@ -55,10 +61,9 @@ public class AppGoodsOrderController {
} }
// @ApiOperation(value = "专属货单", notes = "<br>By:胡宇帆") @ApiOperation(value = "司机端无接单位置上报", notes = "<br>By:胡宇帆")
// @PostMapping("/exclusiveOrderGoodsList") @GetMapping("/getCancelOrderGoods")
// @UnitCovert(param = false) public Result<List<OrderGoodsAPPVO>> getCancelOrderGoods(@RequestParam(value = "userNo") Long userNo) {
// public Result<List<OrderGoodsVO>> exclusiveOrderGoodsList(@Validated @RequestBody OrderGoodsListParam orderGoodsListParam) { return Result.ok(orderGoodsTruckBindService.getCancelOrderGoods(userNo));
// return Result.ok(orderGoodsService.openOrderPageGoodsList(orderGoodsListParam)); }
// }
} }
...@@ -26,7 +26,7 @@ public class OrderCancelFeignController { ...@@ -26,7 +26,7 @@ public class OrderCancelFeignController {
private final OrderCancelService orderCancelService; private final OrderCancelService orderCancelService;
@ApiOperation(value = "货主端订单取消", notes = "<br>By:胡宇帆") @ApiOperation(value = "承运单发起订单取消货主端进行确认", notes = "<br>By:胡宇帆")
@PostMapping("/orderCancel") @PostMapping("/orderCancel")
public Result<Object> orderCancel(@RequestBody OrderCancelFeignParam param) { public Result<Object> orderCancel(@RequestBody OrderCancelFeignParam param) {
// OrderCancelParam cancelParam = new OrderCancelParam(); // OrderCancelParam cancelParam = new OrderCancelParam();
...@@ -34,7 +34,7 @@ public class OrderCancelFeignController { ...@@ -34,7 +34,7 @@ public class OrderCancelFeignController {
// cancelParam.setCancelType(3); // cancelParam.setCancelType(3);
// cancelParam.setCreateByType(1); // cancelParam.setCreateByType(1);
// orderCancelService.platformCancelOrderPrePC(cancelParam); // orderCancelService.platformCancelOrderPrePC(cancelParam);
orderCancelService.ownerCancelOrderPre(param.getOrderNo()); orderCancelService.ownerConfirmCancelOrderPre(param.getOrderNo());
return Result.ok(); return Result.ok();
} }
} }
...@@ -4,16 +4,14 @@ import cn.hutool.json.JSONUtil; ...@@ -4,16 +4,14 @@ import cn.hutool.json.JSONUtil;
import com.clx.performance.param.pc.owner.FrozenAccountParam; import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam; import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService; import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
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.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@RestController @RestController
...@@ -40,4 +38,10 @@ public class OwnerAccountFeignController { ...@@ -40,4 +38,10 @@ public class OwnerAccountFeignController {
ownerAccountService.ownerAccountThaw(param); ownerAccountService.ownerAccountThaw(param);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "查询用户预付运费和保证金账户", notes = "<br>By:胡宇帆")
@GetMapping("/accountInfo")
public Result<OwnerAccountAllVO> accountInfo(@RequestParam Long userNo) {
return Result.ok(ownerAccountService.accountInfo(userNo));
}
} }
package com.clx.performance.controller.payment;
import com.clx.performance.param.pay.NotifyString;
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.*;
import java.util.Objects;
@Slf4j
@RestController
@RequestMapping(value="/payment/notify")
@Validated
@Api(tags = "承运端-支付回调")
@AllArgsConstructor
public class PayNotifyController {
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayNotify", method = RequestMethod.POST)
public Result<Object> userPayNotify(@RequestBody NotifyString notify) {
log.info("用户支付完成回调接口 传参 {}", notify);
if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
return new Result<>();
}
if (notify.getCode() != 0) {
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
} else {
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
}
Result<Object> ret = new Result<>();
return ret;
}
}
...@@ -91,6 +91,12 @@ public class CarrierOrderChildController { ...@@ -91,6 +91,12 @@ public class CarrierOrderChildController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages()); return Result.page(page.getRecords(), page.getTotal(), page.getPages());
} }
@ApiOperation(value = "司机取消运单-运单详情", notes = "<br>By:胡宇帆")
@GetMapping("/driverCancelOrderChildInfo")
public Result<DriverCancelOrderChildInfo> driverCancelOrderChildInfo(@NotBlank(message = "运单编号不能为空") String orderChildNo) {
return Result.ok(orderChildService.driverCancelOrderChildInfo(orderChildNo));
}
//模拟 //模拟
@GetMapping("/orderChildExpect") @GetMapping("/orderChildExpect")
public void getMonitorOrerChildListsByParam() { public void getMonitorOrerChildListsByParam() {
......
...@@ -2,6 +2,7 @@ package com.clx.performance.controller.pc; ...@@ -2,6 +2,7 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsCancelParam; import com.clx.performance.param.pc.OrderGoodsCancelParam;
import com.clx.performance.param.pc.UpdateEditOrderGoodsParam; import com.clx.performance.param.pc.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.OrderGoodsParams; import com.clx.performance.param.pc.OrderGoodsParams;
...@@ -13,6 +14,7 @@ import com.clx.performance.enums.PerformanceResultEnum; ...@@ -13,6 +14,7 @@ import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam; import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.pc.OrderChildPCVO; import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.OrderGoodsEditVO; import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
...@@ -20,6 +22,7 @@ import com.msl.common.base.PageData; ...@@ -20,6 +22,7 @@ import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
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 io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -69,6 +72,9 @@ public class GoodsOrderController { ...@@ -69,6 +72,9 @@ public class GoodsOrderController {
@Autowired @Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext; private GoodsOrderStrategyContext goodsOrderStrategyContext;
@Autowired
private OrderGoodsTruckBindService orderGoodsTruckBindService;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆") @ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder") @PostMapping("/saveGoodsOrder")
@UnitCovert(result = false) @UnitCovert(result = false)
...@@ -89,11 +95,11 @@ public class GoodsOrderController { ...@@ -89,11 +95,11 @@ public class GoodsOrderController {
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate); goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate);
} catch (Exception e) { } catch (Exception e) {
log.error(ExceptionUtils.getStackTrace(e)); log.info(e.getMessage());
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage()); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
} finally { } finally {
try { try {
if (rLock != null && rLock.isLocked()) { if (rLock != null && rLock.isLocked() && rLock.isHeldByCurrentThread()) {
rLock.unlock(); rLock.unlock();
} }
log.info("锁释放完成"); log.info("锁释放完成");
...@@ -130,6 +136,7 @@ public class GoodsOrderController { ...@@ -130,6 +136,7 @@ public class GoodsOrderController {
@ApiOperation(value = "货单编辑查询", notes = "<br>By:胡宇帆") @ApiOperation(value = "货单编辑查询", notes = "<br>By:胡宇帆")
@GetMapping("/findOrderGoodsByBatchNumber") @GetMapping("/findOrderGoodsByBatchNumber")
@UnitCovert
public Result<OrderGoodsEditVO> findOrderGoodsByBatchNumber(@RequestParam(value = "id") Integer id){ public Result<OrderGoodsEditVO> findOrderGoodsByBatchNumber(@RequestParam(value = "id") Integer id){
OrderGoodsEditVO orderGoodsVO = orderGoodsService.findOrderGoodsById(id); OrderGoodsEditVO orderGoodsVO = orderGoodsService.findOrderGoodsById(id);
return Result.ok(orderGoodsVO); return Result.ok(orderGoodsVO);
...@@ -137,6 +144,7 @@ public class GoodsOrderController { ...@@ -137,6 +144,7 @@ public class GoodsOrderController {
@ApiOperation(value = "货单编辑提交", notes = "<br>By:刘海泉") @ApiOperation(value = "货单编辑提交", notes = "<br>By:刘海泉")
@PostMapping("/updateEditOrderGoods") @PostMapping("/updateEditOrderGoods")
@UnitCovert
public Result<Object> updateEditOrderGoods(@RequestBody @Validated UpdateEditOrderGoodsParam param) { public Result<Object> updateEditOrderGoods(@RequestBody @Validated UpdateEditOrderGoodsParam param) {
orderGoodsService.updateEditOrderGoods(param); orderGoodsService.updateEditOrderGoods(param);
return Result.ok(); return Result.ok();
...@@ -188,4 +196,5 @@ public class GoodsOrderController { ...@@ -188,4 +196,5 @@ public class GoodsOrderController {
return Result.ok(); return Result.ok();
} }
} }
package com.clx.performance.controller.pc; package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.PageOrderGoodsListParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
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.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;
...@@ -11,6 +19,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -11,6 +19,8 @@ import lombok.extern.slf4j.Slf4j;
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/")
...@@ -24,7 +34,6 @@ public class OrderCancelController { ...@@ -24,7 +34,6 @@ public class OrderCancelController {
@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) {
param.setCancelType(1);
orderCancelService.platformCancelOrderPre(param); orderCancelService.platformCancelOrderPre(param);
return Result.ok(); return Result.ok();
} }
...@@ -32,8 +41,29 @@ public class OrderCancelController { ...@@ -32,8 +41,29 @@ public class OrderCancelController {
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆") @ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre") @PostMapping("/ownCancelOrderPre")
public Result<Object> ownCancelOrderPre(@RequestBody OrderCancelParam param) { public Result<Object> ownCancelOrderPre(@RequestBody OrderCancelParam param) {
param.setCancelType(2);
orderCancelService.ownerCancelOrderPre(param); orderCancelService.ownerCancelOrderPre(param);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "客服取消运单查询", notes = "<br>By:胡宇帆")
@GetMapping("/findArtificialCancelOrder")
public Result<OrderChildVO> findArtificialCancelOrder(@RequestParam String orderChildNo) {
OrderChildVO vo = orderCancelService.findArtificialCancelOrder(orderChildNo);
return Result.ok(vo);
}
@ApiOperation(value = "客服取消运单", notes = "<br>By:胡宇帆")
@PostMapping("/artificialCancelOrder")
public Result<Object> artificialCancelOrder(@RequestBody ArtificialCancelOrderParam param) {
orderCancelService.artificialCancelOrder(param.getOrderChildNo(), param.getRemark());
return Result.ok();
}
@ApiOperation(value = "取消运单记录", notes = "<br>By:胡宇帆")
@PostMapping("/orderChildCancelRecord")
public Result<PageData<OrderChildVO>> orderChildCancelRecord(PageParam pageParam) {
IPage<OrderChildVO> page = orderCancelService.orderChildCancelRecord(pageParam);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
} }
...@@ -45,6 +45,7 @@ public class CarrierBreakContractOwnerRuleController { ...@@ -45,6 +45,7 @@ public class CarrierBreakContractOwnerRuleController {
if (StringUtils.isBlank(param.getRule().get("A-b"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);}; if (StringUtils.isBlank(param.getRule().get("A-b"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);};
if (StringUtils.isBlank(param.getRule().get("A-c"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);}; if (StringUtils.isBlank(param.getRule().get("A-c"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);};
if (StringUtils.isBlank(param.getRule().get("A-d"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);}; if (StringUtils.isBlank(param.getRule().get("A-d"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);};
if (StringUtils.isBlank(param.getRule().get("A-e"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);};
breakContractOwnerRuleService.saveRule(param); breakContractOwnerRuleService.saveRule(param);
......
...@@ -56,9 +56,9 @@ public class OwnerAccountController { ...@@ -56,9 +56,9 @@ public class OwnerAccountController {
@ApiOperation(value = "账户信息", notes = "<br>By:胡宇帆") @ApiOperation(value = "账户信息", notes = "<br>By:胡宇帆")
@GetMapping("/accountInfo") @GetMapping("/accountInfo")
@UnitCovert(param = false) @UnitCovert(param = false)
public Result<Map> accountInfo() { public Result<OwnerAccountAllVO> accountInfo() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Map<String,OwnerAccountVO> result = ownerAccountService.accountInfo(loginUserInfo.getUserNo()); OwnerAccountAllVO result = ownerAccountService.accountInfo(loginUserInfo.getUserNo());
return Result.ok(result); return Result.ok(result);
} }
......
...@@ -9,8 +9,11 @@ import lombok.extern.slf4j.Slf4j; ...@@ -9,8 +9,11 @@ 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
/** /**
* @Author: aiqingguo * @Author: aiqingguo
...@@ -56,4 +59,14 @@ public class TempController { ...@@ -56,4 +59,14 @@ public class TempController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "测试支付划账 (临时接口)", notes = "<br>By:胡宁宁")
@RequestMapping(value = "/paymentTest", method = RequestMethod.GET)
public Result<Void> paymentTest(@RequestParam("fromUser") @NotBlank(message = "扣款方") String fromUser,
@RequestParam("toUser") @NotBlank(message = "收款方") String toUser,
@RequestParam("figure") @NotBlank(message = "金额") String figure) {
tempService.paymentTest(fromUser,toUser,figure);
return Result.ok();
}
} }
...@@ -8,6 +8,8 @@ import com.clx.performance.vo.pc.IntegralRecordVO; ...@@ -8,6 +8,8 @@ import com.clx.performance.vo.pc.IntegralRecordVO;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
* @Description: 积分记录 * @Description: 积分记录
...@@ -21,6 +23,7 @@ public interface IntegralRecordDao extends BaseDao<IntegraRecordMapper, Integral ...@@ -21,6 +23,7 @@ public interface IntegralRecordDao extends BaseDao<IntegraRecordMapper, Integral
Integer sumIntegral(@Param("statisticsId") Integer statisticsId); Integer sumIntegral(@Param("statisticsId") Integer statisticsId);
IntegralRecord selectByStatisticsIdAndType(@Param("statisticsId") Integer statisticsId, @Param("type") Integer type); IntegralRecord selectByStatisticsIdAndType(@Param("statisticsId") Integer statisticsId, @Param("type") Integer type);
Integer sumByStatisticsIdAndTypes(@Param("statisticsId") Integer statisticsId, @Param("list") List<Integer> typeList);
Integer sumByStatisticsIdAndTypeAndTime(@Param("statisticsId") Integer statisticsId, Integer sumByStatisticsIdAndTypeAndTime(@Param("statisticsId") Integer statisticsId,
@Param("type") Integer type, @Param("type") Integer type,
......
...@@ -13,6 +13,7 @@ import com.clx.performance.vo.app.OrderChildVO; ...@@ -13,6 +13,7 @@ import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.base.PageParam;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -96,8 +97,15 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -96,8 +97,15 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
*/ */
List<OrderChild> selectArriveSendOrderChild(String orderGoodsNo); List<OrderChild> selectArriveSendOrderChild(String orderGoodsNo);
/**
* 查询到达货源地之后的运单
* @param orderGoodsNo
* @return
*/
List<OrderChild> selectArriveSendOrderChildGe(String orderGoodsNo);
void batchUpdateOrderChildStatus(Integer status, List<Integer> ids); void batchUpdateOrderChildStatus(Integer status, String remark, String cancelTime, String finishTime, List<String> childNoList);
List<OrderChild> selectOrderChildListByOrderGoodsNoAndStatusGE(String orderGoodsNo, Integer status); List<OrderChild> selectOrderChildListByOrderGoodsNoAndStatusGE(String orderGoodsNo, Integer status);
...@@ -105,8 +113,18 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -105,8 +113,18 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listOrderChildByOrderNoAndStatus(String orderNo,List<Integer> status); List<OrderChild> listOrderChildByOrderNoAndStatus(String orderNo,List<Integer> status);
/**
* 通过订单号查询在途运单
* @param orderNo
* @return
*/
List<OrderChild> selectInTransitOrderChild(String orderNo); List<OrderChild> selectInTransitOrderChild(String orderNo);
/**
* 通过货单号查询在途运单
* @param orderGoodsNo
* @return
*/
List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo); List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo);
BigDecimal getLinePoundDifferenceRatioAvg(@Param("sendSystemAddressId") Integer sendSystemAddressId, BigDecimal getLinePoundDifferenceRatioAvg(@Param("sendSystemAddressId") Integer sendSystemAddressId,
...@@ -119,4 +137,14 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -119,4 +137,14 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId); void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId);
void updateReceiveSystemAddress(Integer ownerAddressId, Integer systemAddressId); void updateReceiveSystemAddress(Integer ownerAddressId, Integer systemAddressId);
/**
* 客服查询可以取消的运单
* @param orderChildNo
* @return
*/
OrderChildVO findArtificialCancelOrder(String orderChildNo);
IPage<OrderChildVO> orderChildCancelRecord(PageParam pageParam);
List<OrderChild> selectInOrderChildNoList(List<String> childNoList);
} }
...@@ -38,6 +38,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -38,6 +38,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam); IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam);
IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam, List<String> orderGoodsNoList); IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam, List<String> orderGoodsNoList);
...@@ -71,7 +73,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -71,7 +73,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
OrderGoodsVO findOrderGoodsById(Integer id); OrderGoodsVO findOrderGoodsById(Integer id);
List<OrderGoods> selectListByOrderGoodsList(List<String> orderNos); List<OrderGoods> selectListByOrderGoodsList(List<String> orderGoodsNo);
Integer updateOrderGoods(OrderGoodsEditParams orderGoodsEditParams); Integer updateOrderGoods(OrderGoodsEditParams orderGoodsEditParams);
...@@ -82,4 +84,11 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -82,4 +84,11 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId); void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId);
void updateReceiveSystemAddress(Integer ownerAddressId, Integer systemAddressId); void updateReceiveSystemAddress(Integer ownerAddressId, Integer systemAddressId);
List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> list);
BigDecimal sumAlreadyTransportWeightByOrderNo(String orderNo);
} }
...@@ -33,10 +33,11 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -33,10 +33,11 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, List<String> truckList); void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, List<String> truckList);
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, String truckNo);
List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo); List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo);
void updateOrderGoodsBindStatusExpire(String orderGoodsNo); void updateOrderGoodsBindStatusExpire(String orderGoodsNo, String truckNo);
List<OrderGoodsTruckBind> getTrucksBindByOrderGoodsNo(String orderGoodsNo,String truckNo); List<OrderGoodsTruckBind> getTrucksBindByOrderGoodsNo(String orderGoodsNo,String truckNo);
...@@ -44,4 +45,10 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -44,4 +45,10 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set); List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set);
void deleteByIds(List<Integer> ids); void deleteByIds(List<Integer> ids);
List<OrderGoodsTruckBind> selectCancelRecord(String orderGoodsNo, List<String> truckList);
List<OrderGoodsTruckBind> getCancelOrderGoods(List<String> truckList, String beginTime, String endTime);
void deleteByOrderGoods(String orderGoodsNo);
} }
package com.clx.performance.dao;
import com.clx.performance.mapper.ThirdPartRequestLogMapper;
import com.clx.performance.model.ThirdPartRequestLog;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface ThirdPartRequestLogDao extends BaseDao<ThirdPartRequestLogMapper, ThirdPartRequestLog, Integer> {
/**
* 查询发送请求失败的数据
*
* @param time
* @return
*/
List<ThirdPartRequestLog> listThirdPartRequestLogError(String time);
/**
* 修改重试次数
*
* @param logId
* @param retryTimes
*/
void updateLogRetryTimes(Integer logId, Integer retryTimes);
}
...@@ -11,6 +11,8 @@ import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractDriverRecord ...@@ -11,6 +11,8 @@ import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractDriverRecord
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;
/** /**
* @author liruixin * @author liruixin
* Date 2023-10-24 * Date 2023-10-24
...@@ -20,7 +22,7 @@ public interface BreakContractDriverRecordDao extends BaseDao<BreakContractDrive ...@@ -20,7 +22,7 @@ public interface BreakContractDriverRecordDao extends BaseDao<BreakContractDrive
boolean updateSettlementNo(BreakContractDriverRecord item); boolean updateSettlementNo(BreakContractDriverRecord item);
Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo); Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo, LocalDateTime time);
IPage<BreakContractDriverRecordVO> pageByParam(PageBreakContractDriverRecordParam param); IPage<BreakContractDriverRecordVO> pageByParam(PageBreakContractDriverRecordParam param);
IPage<DriverBreakContractDriverRecordVO> driverPageByParam(DriverPageBreakContractDriverRecordParam param); IPage<DriverBreakContractDriverRecordVO> driverPageByParam(DriverPageBreakContractDriverRecordParam param);
......
...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional; ...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
...@@ -40,6 +42,11 @@ public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, Inte ...@@ -40,6 +42,11 @@ public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, Inte
.eq(IntegralRecord::getType, type)); .eq(IntegralRecord::getType, type));
} }
@Override
public Integer sumByStatisticsIdAndTypes(Integer statisticsId, List<Integer> typeList) {
return baseMapper.sumByStatisticsIdAndTypes(statisticsId, typeList);
}
@Override @Override
public Integer sumByStatisticsIdAndTypeAndTime(Integer statisticsId, Integer type, String beginTime, String endTime) { public Integer sumByStatisticsIdAndTypeAndTime(Integer statisticsId, Integer type, String beginTime, String endTime) {
return baseMapper.sumByStatisticsIdAndTypeAndTime(statisticsId, type, beginTime, endTime); return baseMapper.sumByStatisticsIdAndTypeAndTime(statisticsId, type, beginTime, endTime);
......
...@@ -15,9 +15,11 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam; ...@@ -15,9 +15,11 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam; import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam; import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.base.PageParam;
import com.msl.common.dao.impl.BaseDaoImpl; 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;
...@@ -304,8 +306,17 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -304,8 +306,17 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
} }
@Override @Override
public void batchUpdateOrderChildStatus(Integer status, List<Integer> ids) { public List<OrderChild> selectArriveSendOrderChildGe(String orderGoodsNo) {
baseMapper.updateOrderGoodsSetResidueWeight(status, ids); //查询大于 40 未到达货源地的运单
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.ge(OrderChild::getStatus, OrderChildEnum.Status.ARRIVE_SEND.getCode())
.le(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode())
);
}
@Override
public void batchUpdateOrderChildStatus(Integer status, String remark, String cancelTime, String finishTime, List<String> childNoList) {
baseMapper.updateOrderGoodsSetResidueWeight(status,remark, cancelTime, finishTime, childNoList);
} }
@Override @Override
...@@ -364,14 +375,31 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -364,14 +375,31 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public List<OrderChild> selectInTransitOrderChild(String orderNo) { public List<OrderChild> selectInTransitOrderChild(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderNo, orderNo) return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderNo, orderNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode()) .lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.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)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode()) .lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode())
); }
@Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
return baseMapper.findArtificialCancelOrder(orderChildNo);
}
@Override
public IPage<OrderChildVO> orderChildCancelRecord(PageParam param) {
Page<OrderGoodsVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.orderChildCancelRecord(page);
}
@Override
public List<OrderChild> selectInOrderChildNoList(List<String> childNoList) {
return baseMapper.selectList(lQrWrapper()
.in(OrderChild::getChildNo, childNoList)
); } ); }
@Override @Override
......
...@@ -78,6 +78,11 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -78,6 +78,11 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
baseMapper.updateOrderGoodsWeightAndStatus(id, orderChildWeight, orderGoodsStatus); baseMapper.updateOrderGoodsWeightAndStatus(id, orderChildWeight, orderGoodsStatus);
} }
@Override
public void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightResidueAndAlreadyAndStatus(id, alreadyTransportWeight, residueTransportWeight, orderGoodsStatus);
}
@Override @Override
public IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam param) { public IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam param) {
Page<OrderGoodsAPPVO> page = Page.of(param.getPage(), param.getPageSize()); Page<OrderGoodsAPPVO> page = Page.of(param.getPage(), param.getPageSize());
...@@ -159,8 +164,7 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -159,8 +164,7 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
@Override @Override
public boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status) { public boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,orderGoodsId) return update(lUdWrapper().eq(OrderGoods :: getGoodsId,orderGoodsId)
.set(OrderGoods :: getOrderGoodsStatus, status) .set(OrderGoods :: getOrderGoodsStatus, status))
.set(OrderGoods::getResidueTransportWeight, BigDecimal.ZERO))
; ;
} }
...@@ -185,8 +189,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -185,8 +189,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override @Override
public List<OrderGoods> selectListByOrderGoodsList(List<String> orderNos) { public List<OrderGoods> selectListByOrderGoodsList(List<String> orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().in(OrderGoods::getOrderGoodsNo, orderNos)); return baseMapper.selectList(lQrWrapper().in(OrderGoods::getOrderGoodsNo, orderGoodsNo));
} }
@Override @Override
...@@ -208,6 +212,26 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -208,6 +212,26 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
); );
} }
@Override
public List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
.ne(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.SUCCESS.getCode())
.ne(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
.ne(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.COMPLETED.getCode())
);
}
@Override
public List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> param) {
return baseMapper.getCancelOrderGoods(param);
}
@Override
public BigDecimal sumAlreadyTransportWeightByOrderNo(String orderNo) {
return baseMapper.sumAlreadyTransportWeightByOrderNo(orderNo);
}
@Override @Override
public void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId) { public void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId) {
......
package com.clx.performance.dao.impl; package com.clx.performance.dao.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.clx.performance.dao.OrderGoodsTruckBindDao; import com.clx.performance.dao.OrderGoodsTruckBindDao;
...@@ -73,7 +74,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -73,7 +74,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
@Override @Override
public Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList) { public Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList) {
return Optional.ofNullable(baseMapper.selectList(new QueryWrapper<OrderGoodsTruckBind>().lambda() return Optional.ofNullable(baseMapper.selectList(new QueryWrapper<OrderGoodsTruckBind>().lambda()
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode()) .eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.in(OrderGoodsTruckBind::getTruckNo,truckList).select(OrderGoodsTruckBind::getOrderGoodsNo))); .in(OrderGoodsTruckBind::getTruckNo,truckList).select(OrderGoodsTruckBind::getOrderGoodsNo)));
} }
...@@ -90,17 +91,23 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -90,17 +91,23 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
update(lUdWrapper() update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code) .set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo) .eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.in(OrderGoodsTruckBind::getTruckNo, truckList) .notIn(CollectionUtil.isNotEmpty(truckList), OrderGoodsTruckBind::getTruckNo, truckList)
.or() );
}
@Override
public void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, String truckNo) {
update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo) .eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode()) .eq(OrderGoodsTruckBind::getTruckNo, truckNo)
); );
} }
@Override @Override
public List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo) { public List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo) return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode()) .eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.or() .or()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo) .eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.GET.getCode()) .eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.GET.getCode())
...@@ -108,10 +115,11 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -108,10 +115,11 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
} }
@Override @Override
public void updateOrderGoodsBindStatusExpire(String orderGoodsNo) { public void updateOrderGoodsBindStatusExpire(String orderGoodsNo, String truckNo) {
update(lUdWrapper() update(lUdWrapper()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo) .eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode()) .ne(OrderGoodsTruckBind::getTruckNo, truckNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.set(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode()) .set(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode())
); );
} }
...@@ -124,7 +132,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -124,7 +132,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
if(StringUtils.isNotBlank(truckNo)){ if(StringUtils.isNotBlank(truckNo)){
query.eq(OrderGoodsTruckBind::getTruckNo, truckNo); query.eq(OrderGoodsTruckBind::getTruckNo, truckNo);
} }
query.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode()); query.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode());
query.orderByDesc(OrderGoodsTruckBind :: getCreateTime); query.orderByDesc(OrderGoodsTruckBind :: getCreateTime);
return baseMapper.selectList(query); return baseMapper.selectList(query);
} }
...@@ -133,7 +141,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -133,7 +141,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set) { public List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set) {
LambdaQueryWrapper<OrderGoodsTruckBind> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrderGoodsTruckBind> query = new LambdaQueryWrapper<>();
query.in(OrderGoodsTruckBind::getTruckNo, set); query.in(OrderGoodsTruckBind::getTruckNo, set);
query.in(OrderGoodsTruckBind :: getStatus,OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode()); query.in(OrderGoodsTruckBind :: getStatus,OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode());
return baseMapper.selectList(query); return baseMapper.selectList(query);
} }
...@@ -141,4 +149,25 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -141,4 +149,25 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public void deleteByIds(List<Integer> ids) { public void deleteByIds(List<Integer> ids) {
baseMapper.deleteBatchIds(ids); baseMapper.deleteBatchIds(ids);
} }
@Override
public List<OrderGoodsTruckBind> selectCancelRecord(String orderGoodsNo, List<String> truckList) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.in(CollectionUtil.isNotEmpty(truckList), OrderGoodsTruckBind::getTruckNo, truckList)
);
}
@Override
public List<OrderGoodsTruckBind> getCancelOrderGoods(List<String> truckList, String beginTime, String endTime) {
return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getTruckNo, truckList)
// .eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.CANCEL.getCode())
.le(OrderGoodsTruckBind::getCreateTime, endTime)
.ge(OrderGoodsTruckBind::getCreateTime, beginTime)
);
}
@Override
public void deleteByOrderGoods(String orderGoodsNo) {
baseMapper.delete(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo));
}
} }
package com.clx.performance.dao.impl;
import com.clx.performance.dao.SeniorLogisticsManagerDao;
import com.clx.performance.dao.ThirdPartRequestLogDao;
import com.clx.performance.enums.ThirdRequestStatusEnum;
import com.clx.performance.enums.ThirdRequestTypeEnum;
import com.clx.performance.mapper.SeniorLogisticsManagerMapper;
import com.clx.performance.mapper.ThirdPartRequestLogMapper;
import com.clx.performance.model.SeniorLogisticsManager;
import com.clx.performance.model.ThirdPartRequestLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.Collections;
import java.util.List;
/**
* @author kavin
* Date 2023-09-17
* Time 16:45
*/
@Repository
public class ThirdPartRequestLogDaoImpl extends BaseDaoImpl<ThirdPartRequestLogMapper, ThirdPartRequestLog, Integer> implements ThirdPartRequestLogDao {
/**
* 查询发送请求失败的数据
*
* @param time
* @return
*/
@Override
public List<ThirdPartRequestLog> listThirdPartRequestLogError(String time) {
return Optional.ofBlank(time)
.map(t -> lQrWrapper()
.eq(ThirdPartRequestLog::getRequestType, ThirdRequestTypeEnum.SEND.getCode())
.le(ThirdPartRequestLog::getRetryTimes, 5)
.in(ThirdPartRequestLog::getStatus, ThirdRequestStatusEnum.HAVING.getCode())
.le(ThirdPartRequestLog::getCreateTime, t))
.map(super::list)
.orElseGet(Collections::emptyList);
}
/**
* 修改重试次数
*
* @param logId
* @param retryTimes
*/
@Override
public void updateLogRetryTimes(Integer logId, Integer retryTimes) {
super.update(lUdWrapper().eq(ThirdPartRequestLog::getId, logId)
.set(ThirdPartRequestLog::getRetryTimes, retryTimes));
}
}
\ No newline at end of file
...@@ -14,6 +14,8 @@ import com.msl.common.base.Optional; ...@@ -14,6 +14,8 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
/** /**
* @author liruixin * @author liruixin
* Date 2023-10-24 * Date 2023-10-24
...@@ -31,11 +33,12 @@ public class BreakContractDriverRecordDaoImpl extends BaseDaoImpl<BreakContractD ...@@ -31,11 +33,12 @@ public class BreakContractDriverRecordDaoImpl extends BaseDaoImpl<BreakContractD
} }
@Override @Override
public Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo) { public Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo, LocalDateTime time) {
return Optional.of(driverUserNo) return Optional.of(driverUserNo)
.map(item -> lQrWrapper() .map(item -> lQrWrapper()
.eq(BreakContractDriverRecord::getDriverUserNo, item) .eq(BreakContractDriverRecord::getDriverUserNo, item)
.isNotNull(BreakContractDriverRecord::getLimitTime) .isNotNull(BreakContractDriverRecord::getLimitTime)
.ge(BreakContractDriverRecord::getLimitTime, time)
.orderByDesc(BreakContractDriverRecord::getLimitTime) .orderByDesc(BreakContractDriverRecord::getLimitTime)
.last("limit 1") .last("limit 1")
) )
......
package com.clx.performance.dao.impl.integral;
import com.clx.performance.dao.integral.IntegralRuleDao;
import com.clx.performance.mapper.integral.IntegralRuleMapper;
import com.clx.performance.model.integral.IntegralRule;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @Author: aiqinguo
* @Description: 积分规则
* @Date: 2023-10-9 12:00:54
* @Version: 1.0
*/
@Repository
public class IntegralRuleDaoImpl extends BaseDaoImpl<IntegralRuleMapper, IntegralRule, Integer> implements IntegralRuleDao {
@Override
public boolean update(IntegralRule item) {
return update(lUdWrapper()
.eq(IntegralRule::getId, item.getId())
.set(IntegralRule::getOrderChildCompleteRuleJson, item.getOrderChildCompleteRuleJson())
.set(IntegralRule::getOrderAwardRuleJson, item.getOrderAwardRuleJson())
.set(IntegralRule::getOrderDiscountRuleJson, item.getOrderDiscountRuleJson())
.set(IntegralRule::getOrderChildTimeoutRuleJson, item.getOrderChildTimeoutRuleJson())
.set(IntegralRule::getPlatformCompensationRuleJson, item.getPlatformCompensationRuleJson())
.set(IntegralRule::getDriverReportRuleJson, item.getDriverReportRuleJson())
);
}
}
package com.clx.performance.dao.integral;
import com.clx.performance.mapper.integral.IntegralRuleMapper;
import com.clx.performance.model.integral.IntegralRule;
import com.msl.common.dao.BaseDao;
/**
* @Author: aiqinguo
* @Description: 积分规则
* @Date: 2023-10-9 11:55:36
* @Version: 1.0
*/
public interface IntegralRuleDao extends BaseDao<IntegralRuleMapper, IntegralRule, Integer> {
boolean update(IntegralRule item);
}
package com.clx.performance.encryption.oldmsl;
import com.clx.performance.param.pc.payment.FreezeUnitDTO;
import com.clx.performance.param.pc.payment.PayUnitDTO;
import java.util.List;
/**
*
* @author xujianke
* @date 2017年4月18日
* @description
*/
public class PayEncryptTools {
/**
* 生成签名,签名结果直接赋值到PayUnitDTO签名字段
* @param
* @param privateKeyBytes
* @return 签名是否成功
*/
public static boolean sign(PayUnitDTO payDTO, byte[] privateKeyBytes){
if(payDTO == null ){//参数错误
return false;
}
byte[] data=makeByte(payDTO);
String sign = RSACoder.sign(data, privateKeyBytes);
if(sign == null){//签名失败
return false;
}
payDTO.setSignature(sign);
return true;
}
/**
* 生成签名,签名结果直接赋值到FreezeUnitDTO签名字段
* @param freezeDTO
* @param privateKeyBytes
* @return 签名是否成功
*/
public static boolean sign(FreezeUnitDTO freezeDTO, byte[] privateKeyBytes){
if(freezeDTO == null ){//参数错误
return false;
}
byte[] data=makeByte(freezeDTO);
String sign = RSACoder.sign(data, privateKeyBytes);
if(sign == null){//签名失败
return false;
}
freezeDTO.setSignature(sign);
return true;
}
/**
* 验证签名
* @param payDTO
* @param publicKeyBytes
* @return
*/
public static boolean verify(PayUnitDTO payDTO, byte[] publicKeyBytes){
if(payDTO == null || payDTO.getSignature() == null){
//参数错误
return false;
}
byte[] data=makeByte(payDTO);
return RSACoder.verify(data, publicKeyBytes, payDTO.getSignature());
}
/**
* 验证签名
* @param freezeDTO
* @param publicKeyBytes
* @return
*/
public static boolean verify(FreezeUnitDTO freezeDTO, byte[] publicKeyBytes){
if(freezeDTO == null || freezeDTO.getSignature() == null){
//参数错误
return false;
}
byte[] data=makeByte(freezeDTO);
return RSACoder.verify(data, publicKeyBytes, freezeDTO.getSignature());
}
/**
* 组装需要签名的字符串
* @param payDTO
* @return 字符串的字节数组
*/
public static byte[] makeByte(PayUnitDTO payDTO){
StringBuilder sb = new StringBuilder();
sb.append(payDTO.getFigure());
sb.append(':').append(payDTO.getId());
sb.append(':').append(payDTO.getFrom());
sb.append(':').append(payDTO.getTimestamp());
sb.append(':').append(payDTO.getTo());
sb.append(':').append(payDTO.getType());
String text = sb.toString();
return text.getBytes();
}
/**
* 组装需要签名的字符串
* @param freezeDTO
* @return 字符串的字节数组
*/
public static byte[] makeByte(FreezeUnitDTO freezeDTO){
StringBuilder sb = new StringBuilder();
sb.append(freezeDTO.getAction());
sb.append(':').append(freezeDTO.getFigure());
sb.append(':').append(freezeDTO.getFee());
sb.append(':').append(freezeDTO.getFeeType());
sb.append(':').append(freezeDTO.getFreezeNo());
sb.append(':').append(freezeDTO.getTimestamp());
if(freezeDTO.getReturnFee() != null){
sb.append(':').append(freezeDTO.getReturnFee());
}
String text = sb.toString();
return text.getBytes();
}
/**
* 批量签名
* @param privateKeyBytes
* @return 成功签名的个数
*/
public static int signBatch(List<PayUnitDTO> list, byte[] privateKeyBytes){
int count = 0;
boolean b;
for(PayUnitDTO payDTO:list){
b = sign(payDTO, privateKeyBytes);
if(b){
count++;
}
}
return count;
}
/**
* 批量验证签名
* @param publicKeyBytes
* @return
*/
public static int verifyBatch(List<PayUnitDTO> list, byte[] publicKeyBytes){
boolean ret = true;
int i;
PayUnitDTO payDTO;
for(i= 0; i<list.size();i++){
payDTO = list.get(i);
ret = verify(payDTO,publicKeyBytes);
if(!ret){
break;
}
}
return i;
}
}
package com.clx.performance.encryption.oldmsl;
import org.bouncycastle.util.encoders.Base64;
/**
* 加密使用的私钥配置类(等于商户的)
*/
public class PrivateKeyConfig {
/** 非对称加密RSA私钥 私钥长度1024字节 单次最多加密53个字符
* 对应公钥为 SecretConfig.PAYMENT_PUBLIC_KEY
* */
private static final String privateKey="MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOT9q9k4SE5s"
+ "RC1xOtbRzKCwPa2Zp0j9/IGGQ1DUQzhJ1dtMaOzUs66ddMTokoG7nzUyFk8+50QbSb8AQTd+CoGa47oM4P48W9n91"
+ "fAsA1QHpSv4cBrVRbkZv77/XCPZgibnGSoP3IdaMp/GTGwUVnNuUtszNglG8mRB/IFLWMNLAgMBAAECgYBc0eqHuU"
+ "Wt7DrShLRKAW7Fr8rAhKkHcFSbGBZPPEsnFN7H7rgVT76pyA9eBbvlNG07fdsHMkNCGyGQd4T3/nI5BH/xwgT7P4E"
+ "pYy8PnyrIj185CEY7VplgH4l9cHPMcY8pKCwJZjbHBUlgS6ZCA3+DRB7c+7MZZiV/DX2Ay3IBeQJBAPdlTO7i9ncr"
+ "QWMI7So6byt9OSHQz6Gxdml6YS51gQTFKTCMc8n45yAhr7D7XxhgHSDqkSCmkcWkLlKm15XXkvUCQQDs9ICzCWE+I"
+ "viGhVNu2XZQwMiMLQZoC1go+ZBo0mPoxt8YDWVBJ+PqJ4y1fkASKQTdphuoEtpqCx4mzGAL15U/AkA6BiVcJhlea+"
+ "PDIZXWgKwQTCd5Oeto5iF6rbxbVC31e3SksVx684jp7VyyqtJr+ib60GlHeinYbCB9PCp2N4B9AkEAtJLTbRzNzUN"
+ "rL2B1J3lzL7DqY+CADFPw2DDvOuJyHtdG9hZnPlL+3ddL5JeUjgJSYfMPCnNrnPph/OEspHmikwJAIcOTlQmik37h"
+ "BsaoRTEoJG4X5NrqGx5apjXwkIbf4jjfMP4TdyZBX73yjWKNbPdXLd7Aixoqam5CP0nUg3uWKg==";
public static final byte[] privateKeyByte = Base64.decode(privateKey);
}
package com.clx.performance.encryption.oldmsl;
import org.bouncycastle.util.encoders.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
* RSA非对称加密工具类
*
* @author xujianke
* @date 2017年4月13日
* @description
*/
public class RSACoder {
public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
private static final String PUBLIC_KEY = "RSAPublicKey";
private static final String PRIVATE_KEY = "RSAPrivateKey";
/**
* 用字符串私钥对信息生成数字签名
*
* @param data 加密数据
* @param privateKey 私钥字符串
* @return
* @throws Exception
*/
public static String sign(byte[] data, String privateKey) throws Exception {
// 解密由base64编码的私钥
byte[] keyBytes = Base64.decode(privateKey);
return sign(data,keyBytes);
}
/**
* 用字节私钥对信息生成数字签名
*
* @param data 加密数据
* @param keyBytes 私钥字节
* @return
* @throws Exception
*/
public static String sign(byte[] data, byte[] keyBytes){
String ret = null;
try {
// 构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取私钥匙对象
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 用私钥对信息生成数字签名
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(priKey);
signature.update(data);
byte[] dataBytes = Base64.encode(signature.sign());
ret = new String(dataBytes);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 校验数字签名
*
* @param data 加密数据
* @param publicKey 公钥
* @param sign 数字签名
* @return 校验成功返回true 失败返回false
* @throws Exception
*
*/
public static boolean verify(byte[] data, String publicKey, String sign){
// 解密由base64编码的公钥
byte[] keyBytes = Base64.decode(publicKey);
return verify(data,keyBytes,sign);
}
/**
* 校验数字签名
*
* @param data 加密数据
* @param publicKey 公钥
* @param sign 数字签名
* @return 校验成功返回true 失败返回false
* @throws Exception
*
*/
public static boolean verify(byte[] data, byte[] keyBytes, String sign){
boolean ret = false;
try {
// 构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取公钥匙对象
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(pubKey);
signature.update(data);
// 验证签名是否正常
ret = signature.verify(Base64.decode(sign));
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 解密<br>
* 用字符串私钥解密
*
* @param data
* @param key
* @return byte[]
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] data, String key)
throws Exception {
// 对密钥解密
byte[] keyBytes = Base64.decode(key);
return decryptByPrivateKey(data, keyBytes);
}
/**
* 解密<br>
* 用字符串私钥解密
*
* @param data
* @param key
* @return String
* @throws Exception
*/
public static String decryptByPrivateKeyToString(byte[] data, String key){
// 对密钥解密
byte[] keyBytes = Base64.decode(key);
byte[] bytes = decryptByPrivateKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 解密<br>
* 用字节私钥解密
*
* @param data
* @param keyBytes
* @return byte[]
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] data, byte[] keyBytes) {
byte[] ret = null;
try {
// 取得私钥
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory;
keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 对数据解密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
ret = cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 解密<br>
* 用字节私钥解密
*
* @param data
* @param keyBytes
* @return String
* @throws Exception
*/
public static String decryptByPrivateKeyToString(byte[] data, byte[] keyBytes) {
byte[] bytes = decryptByPrivateKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 解密<br>
* 用字符串公钥解密
*
* @param data
* @param key
* @return byte[]
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] data, String key) {
// 对密钥解密
byte[] bytes = Base64.decode(key);
return decryptByPublicKey(data, bytes);
}
/**
* 解密<br>
* 用字符串公钥解密
*
* @param data
* @param key
* @return String
* @throws Exception
*/
public static String decryptByPublicKeyToString(byte[] data, String key) {
// 对密钥解密
byte[] keyBytes = Base64.decode(key);
byte[] bytes = decryptByPublicKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 解密<br>
* 用字节公钥解密
*
* @param data
* @param keyBytes
* @return byte[]
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] data, byte[] keyBytes) {
byte[] ret = null;
try {
// 取得公钥
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(x509KeySpec);
// 对数据解密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicKey);
ret = cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 加密<br>
* 用字符串公钥加密
*
* @param data
* @param key
* @return byte[]
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String key) {
// 对公钥解密
byte[] keyBytes = Base64.decode(key);
return encryptByPublicKey(data, keyBytes);
}
/**
* 加密<br>
* 用字符串公钥加密
*
* @param data
* @param key
* @return String
* @throws Exception
*/
public static String encryptByPublicKeyToString(byte[] data, String key) {
// 对公钥解密
byte[] keyBytes = Base64.decode(key);
byte[] bytes = encryptByPublicKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 加密<br>
* 用字节公钥加密
*
* @param data
* @param keyBytes
* @return byte[]
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, byte[] keyBytes) {
byte[] ret = null;
try {
// 取得公钥
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory;
keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
ret = cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 加密<br>
* 用字节公钥加密
*
* @param data
* @param keyBytes
* @return String
* @throws Exception
*/
public static String encryptByPublicKeyToString(byte[] data, byte[] keyBytes) {
// 对公钥解密
byte[] bytes = encryptByPublicKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 加密<br>
* 用字符串私钥加密
*
* @param data
* @param key
* @return byte[]
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, String key){
// 对密钥解密
byte[] keyBytes = Base64.decode(key);
return encryptByPrivateKey(data, keyBytes);
}
/**
* 加密<br>
* 用字符串私钥加密
*
* @param data
* @param key
* @return byte[]
* @throws Exception
*/
public static String encryptByPrivateKeyToString(byte[] data, String key){
// 对密钥解密
byte[] keyBytes = Base64.decode(key);
byte[] bytes = encryptByPrivateKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 加密<br>
* 用字节私钥加密
*
* @param data
* @param keyBytes
* @return byte[]
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, byte[] keyBytes){
byte[] ret = null;
try {
// 取得私钥
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
ret = cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* 加密<br>
* 用字节私钥加密
*
* @param data
* @param keyBytes
* @return String
* @throws Exception
*/
public static String encryptByPrivateKeyToString(byte[] data, byte[] keyBytes){
byte[] bytes = encryptByPrivateKey(data, keyBytes);
if (bytes == null) {
return null;
}
return new String(Base64.encode(bytes));
}
/**
* 取得私钥
*
* @param keyMap
* @return
* @throws Exception
*/
public static String getPrivateKey(Map<String, Object> keyMap)
throws Exception {
Key key = (Key) keyMap.get(PRIVATE_KEY);
byte[] keyBytes = Base64.encode(key.getEncoded());
return new String(keyBytes);
}
/**
* 取得公钥
*
* @param keyMap
* @return
* @throws Exception
*/
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
byte[] keyBytes = Base64.encode(key.getEncoded());
return new String(keyBytes);
}
/**
* 初始化密钥
*
* @return
* @throws Exception
*/
public static Map<String, Object> initKey(int keySize) throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(keySize);
KeyPair keyPair = keyPairGen.generateKeyPair();
// 公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// 私钥
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, Object> keyMap = new HashMap<String, Object>(2);
keyMap.put(PUBLIC_KEY, publicKey);
keyMap.put(PRIVATE_KEY, privateKey);
return keyMap;
}
}
package com.clx.performance.encryption.oldmsl;
/**
* 业务系统编码枚举类
* @author xujianke
* @date 2017年4月21日
* @description
*/
public enum SystemCodeEnum {
USER_SERVICE(1,"用户服务"),ORDER_SERVICE(2,"订单服务"),PAYMENT_SERVICE(3,"支付服务"),
MESSAGE_SERVICE(4,"消息服务"),MANAGE_SERVICE(5,"管理服务"),MERCHANT_SERVICE(6,"商户服务"),
TRADE_SERVICE(7,"交易平台服务"),AUCTION_SERVICE(8,"竞拍服务"),PERFORMANCE_SERVICE(9,"履约服务");
// 成员变量
private String msg;
private int code;
// 构造方法
private SystemCodeEnum(int code, String msg) {
this.msg = msg;
this.code = code;
}
// 普通方法
public static String getMsg(int code) {
for (SystemCodeEnum c : SystemCodeEnum.values()) {
if (c.getCode() == code) {
return c.msg;
}
}
return null;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum HttpEnum {
PERFORMANCE_PAY_CLX_PAYMENT(10000, "履约服务向老马上来发起钱包转账","/payment-service/performance/payUserWalletTransfer"),
;
private final int code;
private final String mark;
private final String url;
public static HttpEnum getMsg(int code) {
for (HttpEnum httpEnum : HttpEnum.values()) {
if (httpEnum.getCode() == code) {
return httpEnum;
}
}
return null;
}
}
package com.clx.performance.enums;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by cuiwanzhe on 2017/6/2.
* 支付备注枚举
*/
public enum PayRemarkEnum {
OWNER_CREDIT(1, "货主冻结押金"),
DRIVER_CREDIT(2, "司机冻结押金"),
OWNER_FREIGHT(3, "货主冻结运费"),
OWNER_INSURANCE(4, "货主冻结保险"),
DRIVER_UNFREEZE(5, "司机解冻押金"),
INSURANCE_UNFREEZE(6, "解冻保险到系统账户"),
COMPENSATION_TO_DRIVER(7, "司机赔偿货主"),
FREIGHT_TO_OWNER(8, "货主支付运费给司机"),
UPDATE_FREIGHT(9, "修正运费"),
UPDATE_INSURANCE(10, "修正保险"),
OWNER_UNFREEZE(11, "解冻货主的押金"),
DRIVER_SALE(12, "冻结司机的消费"),
DRIVER_SALE_UNFREEZE(13, "司机支付货款给货主"),
//v78 解冻保险
UNFREEZE_INSURANCE(14, "解冻保险"),
;
private static Map<Integer, String> map = new ConcurrentHashMap<>();
static {
for(PayRemarkEnum payRemarkEnum : PayRemarkEnum.values()){
map.put(payRemarkEnum.getValue(), payRemarkEnum.getDisplayValue());
}
}
private int value;
private String displayValue;
public void setValue(int value) {
this.value = value;
}
public String getDisplayValue() {
return displayValue;
}
public void setDisplayValue(String displayValue) {
this.displayValue = displayValue;
}
private PayRemarkEnum(int value, String displayValue){
this.value = value;
this.displayValue = displayValue;
}
public int getValue(){
return value;
}
public static String toString(int value){
return map.get(value);
}
}
package com.clx.performance.enums;
public enum PayUnitTypeEnum {
FREEZE(100,"冻结"),
FREEZE_OWNER_DEPOSIT(101,"冻结货主保证金"),FREEZE_FREIGHT(102,"冻结货主运费"),FREEZE_DRIVER_DEPOSIT(103,"冻结司机保证金"),
FREEZE_INSURANCE_FEE(104,"冻结货物担保"),FREEZE_PLATFORM_FEE(105,"冻结平台信息费"),FREEZE_WITHDRAW_DEPOSIT(106,"冻结提现金额"),
FREEZE_SALE(107,"冻结货款"),FREEZE_SETTLEMENT_FEE(108,"冻结提现手续费"),FREEZE_SETTLEMENT_MER(109, "冻结子钱包提现金额"),
FREEZE_SETTLEMENT_MER_FEE(110,"冻结提现手续费"),FREEZE_TRANSFER_WITHDRAW_DEPOSIT(111,"冻结转账提现金额"),FREEZE_TRANSFER_DEPOSIT(112,"转账收入"),
FREEZE_TRADE_DEPOSIT(113,"冻结交易平台保证金"),FREEZE_TRADE_PAYMENT_GOODS(114,"冻结交易平台货款"),
FREEZE_OIL_DRIVER_TO_MERCHANT(115,"冻结司机余额给商户用于加油"),FREEZE_AUCTION_DEPOSIT(116,"冻结竞拍保证金"),
FREEZE_GROUP_SIGN_UP_DEPOSIT(117,"集采集销的保证金冻结"),FREEZE_WALLET_CARD(118,"消费卡消费到钱包冻结"),FREEZE_MERCHANT_CARD(119,"消费卡消费到商户冻结"),
FREEZE_ORDER_CHILD(120, "冻结提现金额-运费自动提现"),
UNFREEZE(200,"解冻"),
UNFREEZE_OWNER_DEPOSIT(201,"解冻货主保证金"),UNFREEZE_FREIGHT(202,"解冻货主运费"),UNFREEZE_DRIVER_DEPOSIT(203,"解冻司机保证金"),
UNFREEZE_INSURANCE_FEE(204,"解冻货物担保"),UNFREEZE_PLATFORM_FEE(205,"解冻平台信息费"),UNFREEZE_WITHDRAW_DEPOSIT(206,"解冻提现金额"),
UNFREEZE_SALE(207,"解冻货款"),UNFREEZE_SETTLEMENT_FEE(208,"解冻提现手续费"),UNFREEZE_SETTLEMENT_MER(209, "解冻子钱包提现金额"),
UNFREEZE_SETTLEMENT_MER_FEE(210,"解冻提现手续费"),UNFREEZE_TRANSFER_DEPOSIT(212,"解冻转账收入"),
UNFREEZE_TRADE_DEPOSIT(213,"解冻交易平台保证金"),UNFREEZE_TRADE_PAYMENT_GOODS(214,"解冻交易平台货款"),
UNFREEZE_OIL_DRIVER_TO_MERCHANT(215,"解冻司机余额给商户用于加油"),UNFREEZE_AUCTION_DEPOSIT(216,"解冻竞拍保证金"),
UNFREEZE_FREEZE_GROUP_SIGN_UP_DEPOSIT(217,"集采集销的保证金冻结解冻"),UNFREEZE_WALLET_CARD(218,"消费卡消费到钱包解冻"),UNFREEZE_MERCHANT_CARD(219,"消费卡消费到商户解冻"),
FREEZE_PAY(300,"从冻结支付"),
FREEZE_PAY_OWNER_DEPOSIT(301,"支付货主保证金"),FREEZE_PAY_FREIGHT(302,"支付货物运费"),
FREEZE_PAY_DRIVER_DEPOSIT(303,"支付司机保证金"),FREEZE_PAY_INSURANCE_FEE(304,"支付货物担保"),
FREEZE_PAY_PLATFORM_FEE(305,"支付平台信息费"),FREEZE_PAY_WITHDRAW_DEPOSIT(306,"支付提现金额"),
FREEZE_PAY_SALE(307,"支付货款"),FREEZE_PAY_SETTLEMENT_FEE(308,"支付提现手续费"),
FREEZE_PAY_SETTLEMENT_MER(309, "支付子钱包提现金额"),FREEZE_PAY_SETTLEMENT_MER_FEE(310, "支付子钱包手续费"),
FREEZE_PAY_TRANSFER_WITHDRAW_DEPOSIT(311,"支付余额转账提现金额"),FREEZE_PAY_TRANSFER_DEPOSIT(312,"支付转账收入"),
FREEZE_PAY_TRADE_DEPOSIT(313,"保证金冻结"),FREEZE_PAY_TRADE_PAYMENT_GOODS(314,"货款扣款"),
FREEZE_PAY_OIL_DRIVER_TO_MERCHANT(315,"消费"),FREEZE_PAY_AUCTION_DEPOSIT(316,"竞拍保证金冻结"),
FREEZE_PAY_GROUP_SIGN_UP_DEPOSIT(317,"集采集销的保证金冻结"),FREEZE_PAY_WALLET_CARD(318,"消费"),FREEZE_PAY_MERCHANT_CARD(319,"消费"),
FREEZE_PAY_ORDER_CHILD(320, "自动支付提现金额"),
FREEZE_MODIFY(400,"修正冻结资金"),
FREEZE_MODIFY_OWNER_DEPOSIT(401,"修正货主保证金"),FREEZE_MODIFY_FREIGHT(402,"修正货主运费"),
FREEZE_MODIFY_DRIVER_DEPOSIT(403,"修正司机保证金"),FREEZE_MODIFY_INSURANCE_FEE(404,"修正货物担保"),
FREEZE_MODIFY_PLATFORM_FEE(405,"修正平台信息费"),FREEZE_MODIFY_WITHDRAW_DEPOSIT(406,"修正提现金额"),
FREEZE_MODIFY_SALE(407,"修正货款"),FREEZE_MODIFY_SETTLEMENT_FEE(408,"修正提现手续费"),
FREEZE_MODIFY_SETTLEMENT_MER(409, "修正子钱包提现金额"), FREEZE_MODIFY_SETTLEMENT_MER_FEE(410, "修正子钱包提现手续费"),
FREEZE_MODIFY_TRANSFER_DEPOSIT(412,"修正转账收入"),FREEZE_MODIFY_TRADE_PAYMENT_GOODS(414,"修正交易平台冻结货款"),
RESIDUE_PAY(500,"余额支付"),RESIDUE_ACTIVITY_RETURN(502,"余额活动返现"),RESIDUE_ACTIVITY_RETURN_CARD(503,"余额活动返现到消费卡"),
/** 支付违约金 */
RESIDUE_PAY_DEFAULT(501,"支付违约金"),
CARD_PAY(600,"消费卡支付到钱包"),CARD_PAY_WALLET(601,"消费卡支付到子钱包"),
SYSTEM_PAY(701, "系统支付到用户余额"),SYSTEM_PAY_CARD(702, "系统支付到用户消费卡"),SYSTEM_ACTIVITY_PAY(703, "系统活动返现到余额"),
;
// 成员变量
private String msg;
private int code;
// 构造方法
private PayUnitTypeEnum(int code, String msg) {
this.msg = msg;
this.code = code;
}
// 普通方法
public static String getMsg(int code) {
for (PayUnitTypeEnum c : PayUnitTypeEnum.values()) {
if (c.getCode() == code) {
return c.msg;
}
}
return null;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
...@@ -7,6 +7,7 @@ import com.clx.performance.enums.RoleEnum; ...@@ -7,6 +7,7 @@ import com.clx.performance.enums.RoleEnum;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService; import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -19,29 +20,17 @@ import java.util.Objects; ...@@ -19,29 +20,17 @@ import java.util.Objects;
*/ */
@Slf4j @Slf4j
@Component @Component
@AllArgsConstructor
public class OrderCancelHandler { public class OrderCancelHandler {
@Autowired private final OrderCancelService orderCancelService;
private OrderCancelService orderCancelService;
@Autowired
private BreakContractSettlementOwnerService breakContractSettlementOwnerService;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CANCEL_QUEUE) @RabbitListener(queues = RabbitKeyConstants.ORDER_CANCEL_QUEUE)
public void onMessage(String message) { public void onMessage(String message) {
log.info("处理订单取消监听器执行,订单No为{}", message); log.info("处理订单取消监听器执行,订单No为{}", message);
OrderCancelParam param = JSONUtil.toBean(message, OrderCancelParam.class); OrderCancelParam param = JSONUtil.toBean(message, OrderCancelParam.class);
if (ObjectUtil.equals(param.getCancelType(), 1)) {
orderCancelService.orderCancelProcess(param); orderCancelService.orderCancelProcess(param);
} else {
orderCancelService.orderCancelProcess(param);
}
// //货主端取消订单进行违约计费
// if(Objects.equals(param.getCreateByType(), RoleEnum.Type.OWNER)){
// breakContractSettlementOwnerService.saveSettlementOwnerForCancelOrder(param.getOrderNo());
// }
} }
} }
...@@ -42,9 +42,14 @@ public class RabbitOrderGoodsStatusOnHandler { ...@@ -42,9 +42,14 @@ public class RabbitOrderGoodsStatusOnHandler {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.PAYING.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.PAYING.getCode());
// 添加积分货单 // 添加积分货单
try {
integralMqService.orderGoodsAdd(orderGoods.getOrderGoodsNo(), integralMqService.orderGoodsAdd(orderGoods.getOrderGoodsNo(),
orderGoods.getSendAddressId(), orderGoods.getSendAddressShorter(), orderGoods.getSendAddressId(), orderGoods.getSendAddressShorter(),
orderGoods.getReceiveAddressId(), orderGoods.getReceiveAddressShorter()); orderGoods.getReceiveAddressId(), orderGoods.getReceiveAddressShorter());
}catch (Exception e) {
e.printStackTrace();
}
} }
} }
......
...@@ -6,13 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -6,13 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.IntegralRecord; import com.clx.performance.model.IntegralRecord;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam; import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.sqlProvider.IntegralRecordSqlProvider; import com.clx.performance.sqlProvider.IntegralRecordSqlProvider;
import com.clx.performance.sqlProvider.IntegralTruckSqlProvider;
import com.clx.performance.vo.pc.IntegralRecordVO; import com.clx.performance.vo.pc.IntegralRecordVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
* @Description: 积分记录 * @Description: 积分记录
...@@ -29,6 +30,12 @@ public interface IntegraRecordMapper extends BaseMapper<IntegralRecord> { ...@@ -29,6 +30,12 @@ public interface IntegraRecordMapper extends BaseMapper<IntegralRecord> {
@SelectProvider(type = IntegralRecordSqlProvider.class, method = "pageByParam") @SelectProvider(type = IntegralRecordSqlProvider.class, method = "pageByParam")
IPage<IntegralRecordVO> pageByParam(@Param("page") Page<IntegralRecordVO> page, @Param("param") pageIntegralStatisticsDetailParam param); IPage<IntegralRecordVO> pageByParam(@Param("page") Page<IntegralRecordVO> page, @Param("param") pageIntegralStatisticsDetailParam param);
@Select("<script>select sum(integral) from integral_record where " +
" type in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" and statistics_id = #{statisticsId}" +
"</script>")
Integer sumByStatisticsIdAndTypes(@Param("statisticsId") Integer statisticsId, @Param("list") List<Integer> typeList);
@Select("select sum(integral) from integral_record where statistics_id = #{statisticsId} and type = #{type} and create_time >= #{beginTime} and create_time < #{endTime}") @Select("select sum(integral) from integral_record where statistics_id = #{statisticsId} and type = #{type} and create_time >= #{beginTime} and create_time < #{endTime}")
Integer sumByStatisticsIdAndTypeAndTime(@Param("statisticsId") Integer statisticsId, Integer sumByStatisticsIdAndTypeAndTime(@Param("statisticsId") Integer statisticsId,
@Param("type") Integer type, @Param("type") Integer type,
......
...@@ -10,11 +10,13 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam; ...@@ -10,11 +10,13 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PagePoundAuditParam; import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.sqlProvider.OrderChildSqlProvider; import com.clx.performance.sqlProvider.OrderChildSqlProvider;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
...@@ -66,4 +68,14 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -66,4 +68,14 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@Param("receiveSystemAddressId") Integer receiveSystemAddressId, @Param("receiveSystemAddressId") Integer receiveSystemAddressId,
@Param("beginTime") String beginTime); @Param("beginTime") String beginTime);
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark,
@Param(value = "cancelTime") String cancelTime, @Param(value = "finishTime") String finishTime,
@Param(value = "childNoList") List<String> childNoList);
@SelectProvider(type = OrderChildSqlProvider.class, method = "findArtificialCancelOrder")
OrderChildVO findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo);
@SelectProvider(type = OrderChildSqlProvider.class, method = "orderChildCancelRecord")
IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderGoodsVO> page);
} }
\ No newline at end of file
...@@ -9,10 +9,7 @@ import com.clx.performance.model.OrderGoods; ...@@ -9,10 +9,7 @@ import com.clx.performance.model.OrderGoods;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider; import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
import com.clx.performance.vo.app.OrderGoodsAPPVO; import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -42,6 +39,14 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -42,6 +39,14 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
" where id = #{id}") " where id = #{id}")
void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus); void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
@Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{residueTransportWeight}," +
" already_transport_weight = already_transport_weight+#{alreadyTransportWeight}," +
"order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}")
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(@Param("id") Integer id, @Param("alreadyTransportWeight") BigDecimal alreadyTransportWeight, @Param("residueTransportWeight") BigDecimal residueTransportWeight,@Param("orderGoodsStatus") Integer orderGoodsStatus);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList") @SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList")
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(Page<OrderGoodsAPPVO> page); IPage<OrderGoodsAPPVO> openOrderPageGoodsList(Page<OrderGoodsAPPVO> page);
...@@ -66,8 +71,15 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -66,8 +71,15 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
OrderGoodsVO findOrderGoodsById(Integer id); OrderGoodsVO findOrderGoodsById(Integer id);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoods") @UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoods")
Integer updateOrderGoods(@Param(value = "param") OrderGoodsEditParams orderGoodsEditParams); Integer updateOrderGoods(@Param(value = "params") OrderGoodsEditParams orderGoodsEditParams);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus") @UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus")
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id); Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getCancelOrderGoods")
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param);
@Select("select sum(already_transport_weight) from order_goods where order_no=#{orderNo}")
BigDecimal sumAlreadyTransportWeightByOrderNo(@Param("orderNo")String orderNo);
} }
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.ThirdPartRequestLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ThirdPartRequestLogMapper extends BaseMapper<ThirdPartRequestLog> {
}
package com.clx.performance.mapper.integral;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.integral.IntegralRule;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: aiqinguo
* @Description: 积分规则
* @Date: 2023-10-9 11:52:22
* @Version: 1.0
*/
@Mapper
public interface IntegralRuleMapper extends BaseMapper<IntegralRule> {
}
\ No newline at end of file
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
@Getter
@Setter
@Accessors(chain = true)
@TableName("third_part_request_log")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ThirdPartRequestLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "ID")
private Integer id;
@ApiModelProperty(value = "请求id")
private String requestId;
@ApiModelProperty(value = "应用编号")
private Long appNo;
@ApiModelProperty(value = "请求类型: 1-发送请求;2-接收请求")
private Integer requestType;
@ApiModelProperty(value = "操作类型")
private String action;
@ApiModelProperty(value = "请求地址")
private String url;
@ApiModelProperty(value = "请求参数(JSON格式)")
private String requestContent;
@ApiModelProperty(value = "返回数据(JSON格式)")
private String responseContent;
@ApiModelProperty(value = "返回状态码")
private Integer statusCode;
@ApiModelProperty(value = "状态: 0-请求中,1-成功,2-失败")
private Integer status;
@ApiModelProperty(value = "重试次数")
private Integer retryTimes;
@ApiModelProperty(value = "其他字段")
private String otherFields;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "修改时间")
private LocalDateTime modifiedTime;
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
package com.clx.performance.model.integral;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 积分规则
* @Date: 2023/11/06 16:14:44
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class IntegralRule implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String orderChildCompleteRuleJson; //运单完成积分规则
private String orderAwardRuleJson; //货单奖励积分规则
private String orderDiscountRuleJson; //货单扣减积分规则
private String orderChildTimeoutRuleJson; //运单超时扣减规则
private String platformCompensationRuleJson; //平台补偿积分规则
private String driverReportRuleJson; //司机上报积分规则
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
...@@ -9,6 +9,8 @@ public interface IntegralRecordService { ...@@ -9,6 +9,8 @@ public interface IntegralRecordService {
void addRecord(IntegralRecordAddParam param); void addRecord(IntegralRecordAddParam param);
void addPlatformCompensationRecord(String truckNo);
IntegralRecord save(Integer statisticsId, LocalDateTime statisticsDate, String truckNo, Integer type, Integer integral, String remark); IntegralRecord save(Integer statisticsId, LocalDateTime statisticsDate, String truckNo, Integer type, Integer integral, String remark);
} }
package com.clx.performance.service; package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.base.PageParam;
import java.util.List;
public interface OrderCancelService { public interface OrderCancelService {
// void platformCancelOrderPre(String orderNo); /**
// * 承运端取消订单,货主同意调用此接口
// void platformCancelOrder(String orderNo); * @param orderNo
// */
void ownerCancelOrderPre(String orderNo); void ownerConfirmCancelOrderPre(String orderNo);
//
void ownerCancelOrder(String orderNo); void ownerConfirmCancelProcess(String orderNo);
/** /**
* 货主取消订单前置(只修改订单状态) * 货主取消订单前置(只修改订单状态)
...@@ -30,4 +35,18 @@ public interface OrderCancelService { ...@@ -30,4 +35,18 @@ public interface OrderCancelService {
*/ */
void orderCancelProcess(OrderCancelParam param); void orderCancelProcess(OrderCancelParam param);
/**
* 客服取消
* @param orderChildNo
*/
void artificialCancelOrder(String orderChildNo, String remark);
/**
* 客服取消运单查询
* @param orderChildNo
* @return
*/
OrderChildVO findArtificialCancelOrder(String orderChildNo);
IPage<OrderChildVO> orderChildCancelRecord(PageParam pageParam);
} }
...@@ -77,4 +77,8 @@ public interface OrderChildService { ...@@ -77,4 +77,8 @@ public interface OrderChildService {
* @return * @return
*/ */
List<OrderChild> selectInTransitOrderChild(String orderNo); List<OrderChild> selectInTransitOrderChild(String orderNo);
void orderChildFinish(String childNo);
DriverCancelOrderChildInfo driverCancelOrderChildInfo(String orderChildNo);
} }
...@@ -2,6 +2,7 @@ package com.clx.performance.service; ...@@ -2,6 +2,7 @@ package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.pc.OrderGoodsCancelParam; import com.clx.performance.param.pc.OrderGoodsCancelParam;
import com.clx.performance.param.pc.UpdateEditOrderGoodsParam; import com.clx.performance.param.pc.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.PageOrderGoodsListParam; import com.clx.performance.param.pc.PageOrderGoodsListParam;
...@@ -31,8 +32,8 @@ public interface OrderGoodsService { ...@@ -31,8 +32,8 @@ public interface OrderGoodsService {
IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param); IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param);
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam); IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam);
......
package com.clx.performance.service; package com.clx.performance.service;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import java.util.List; import java.util.List;
public interface OrderGoodsTruckBindService { public interface OrderGoodsTruckBindService {
List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo); List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(Long userNo);
void updateCancelTruckBind(String orderGoodsNo);
} }
...@@ -9,6 +9,7 @@ import com.clx.performance.param.pc.*; ...@@ -9,6 +9,7 @@ import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.owner.CreteAccountParam; import com.clx.performance.param.pc.owner.CreteAccountParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam; import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam; import com.clx.performance.param.pc.owner.ThawAccountParam;
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.param.pc.owner.UpdateOwnerBindCardFeignParam; import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
...@@ -25,7 +26,7 @@ public interface OwnerAccountService { ...@@ -25,7 +26,7 @@ public interface OwnerAccountService {
IPage<OwnerAccountRunningWaterRecordVO> prepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param); IPage<OwnerAccountRunningWaterRecordVO> prepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param);
Map<String,OwnerAccountVO> accountInfo(Long ownerUserNo); OwnerAccountAllVO accountInfo(Long ownerUserNo);
Long accountTopUp(OwnerTopUpParam param); Long accountTopUp(OwnerTopUpParam param);
......
package com.clx.performance.service;
import com.clx.performance.param.pc.payment.PayParam;
import com.msl.common.result.Result;
public interface PaymentService {
Result paymentWallet( PayParam noCheckPwd);
}
...@@ -6,4 +6,6 @@ public interface TempService { ...@@ -6,4 +6,6 @@ public interface TempService {
void updateBreakContractDriverSettlementFinish(String settlementNo); void updateBreakContractDriverSettlementFinish(String settlementNo);
void paymentTest(String fromUser,String toUser,String figure);
} }
package com.clx.performance.service;
import com.clx.performance.model.ThirdPartRequestLog;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
public interface ThirdPartRequestLogService {
/**
* 保存第三方接口调用记录
*
* @param log
*/
void save(ThirdPartRequestLog log);
/**
* 修改第三方接口返回值
*
* @param logId
* @param result
*/
void updateResult(Integer logId, Result<?> result);
/**
* 修改重试次数
*
* @param logId
* @param retryTimes
*/
void updateLogRetryTimes(Integer logId, Integer retryTimes);
/**
* 根据id 查询
*/
Optional<ThirdPartRequestLog> getById(Integer id);
}
...@@ -8,6 +8,8 @@ import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractS ...@@ -8,6 +8,8 @@ import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractS
import com.clx.performance.vo.pc.owner.settle.SettlementPlatformAccountVO; import com.clx.performance.vo.pc.owner.settle.SettlementPlatformAccountVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.math.BigDecimal;
/** /**
* @author liruixin * @author liruixin
* Date 2023-10-24 * Date 2023-10-24
...@@ -38,7 +40,7 @@ public interface BreakContractSettlementOwnerService { ...@@ -38,7 +40,7 @@ public interface BreakContractSettlementOwnerService {
void saveSettlementOwnerForTonnageDown(OrderAdjustTonnageDownParam param); void saveSettlementOwnerForTonnageDown(OrderAdjustTonnageDownParam param);
void saveSettlementOwnerForCancelOrder(String orderNo); void saveSettlementOwnerForCancelOrder(BigDecimal transportWeight, BigDecimal validFreightPrice, String orderNo, Integer cancelType);
SettlementPlatformAccountVO getCarrierSettlementPlatformAccount(Integer id); SettlementPlatformAccountVO getCarrierSettlementPlatformAccount(Integer id);
......
...@@ -4,18 +4,22 @@ import com.clx.performance.dao.IntegralRecordDao; ...@@ -4,18 +4,22 @@ import com.clx.performance.dao.IntegralRecordDao;
import com.clx.performance.dao.IntegralStatisticsDao; import com.clx.performance.dao.IntegralStatisticsDao;
import com.clx.performance.dao.IntegralTruckDao; import com.clx.performance.dao.IntegralTruckDao;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.integral.IntegralRecordEnum;
import com.clx.performance.model.IntegralRecord; import com.clx.performance.model.IntegralRecord;
import com.clx.performance.model.IntegralStatistics; import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.model.IntegralTruck; import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.IntegralRecordAddParam; import com.clx.performance.param.pc.IntegralRecordAddParam;
import com.clx.performance.service.IntegralMqService; import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.IntegralRecordService; import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.service.integral.IntegralRuleService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.integral.AppIntegralRuleVO;
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 java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
@Slf4j @Slf4j
@Service @Service
...@@ -32,6 +36,8 @@ public class IntegralRecordServiceImpl implements IntegralRecordService { ...@@ -32,6 +36,8 @@ public class IntegralRecordServiceImpl implements IntegralRecordService {
@Autowired @Autowired
private IntegralMqService integralMqService; private IntegralMqService integralMqService;
@Autowired
private IntegralRuleService integralRuleService;
@Override @Override
public void addRecord(IntegralRecordAddParam param) { public void addRecord(IntegralRecordAddParam param) {
...@@ -57,6 +63,53 @@ public class IntegralRecordServiceImpl implements IntegralRecordService { ...@@ -57,6 +63,53 @@ public class IntegralRecordServiceImpl implements IntegralRecordService {
} }
@Override
public void addPlatformCompensationRecord(String truckNo) {
// 查找规则
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
Integer type = IntegralRecordEnum.Type.ORDER_CHILD_PLATFORM_COMPENSATION.getValue();
Integer integral = ruleInfo.getPlatformCompensationRule().getIntegralCancel();
String remark = IntegralRecordEnum.Type.ORDER_CHILD_PLATFORM_COMPENSATION.getMsg();
String statisticsDate = LocalDateTimeUtils.getWeekStart();
IntegralTruck truck = integralTruckDao.getByTruckNo(truckNo).orNull();
if (truck == null) {return;}
// 查找最新统计
IntegralStatistics statistics = integralStatisticsDao.selectByTruckNoAndStatisticsDate(truckNo, statisticsDate).orNull();
if (statistics == null) {return;}
Integer sum = integralRecordDao.sumByStatisticsIdAndTypes(statistics.getId(), Arrays.asList(IntegralRecordEnum.Type.ORDER_CHILD_PLATFORM_COMPENSATION.getValue()));
if (sum == null) {sum = 0;}
if (sum > ruleInfo.getPlatformCompensationRule().getIntegralCancelLimit()){
log.info("平台补偿超上限,本次无效, truckNo:{}, type:{}, integral:{}, remark:{}", truckNo, type, integral, remark);
return;
}
else if (sum+integral > ruleInfo.getPlatformCompensationRule().getIntegralCancelLimit()){
integral = ruleInfo.getPlatformCompensationRule().getIntegralCancelLimit()-sum;
}
else {
}
// 更新积分
statistics.setIntegral(statistics.getIntegral()+integral);
integralStatisticsDao.updateIntegral(statistics);
truck.setIntegral(statistics.getIntegral());
integralTruckDao.updateIntegral(truck);
// 新增积分记录
IntegralRecord record = save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), type, integral, remark);
// 发送mq (新增积分记录)
integralMqService.integralRecordAdd(record.getStatisticsId(), record.getTruckNo(), record.getType(), record.getIntegral(), record.getRemark());
}
@Override @Override
public IntegralRecord save(Integer statisticsId, LocalDateTime statisticsDate, String truckNo, Integer type, Integer integral, String remark){ public IntegralRecord save(Integer statisticsId, LocalDateTime statisticsDate, String truckNo, Integer type, Integer integral, String remark){
IntegralRecord record = new IntegralRecord(); IntegralRecord record = new IntegralRecord();
......
...@@ -2,29 +2,36 @@ package com.clx.performance.service.impl; ...@@ -2,29 +2,36 @@ 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.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.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
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.enums.OrderChildEnum; import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum; import com.clx.performance.enums.*;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
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.mq.OrderCancelMqParam;
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.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.OwnerAccountService; import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.PageParam;
import com.msl.common.enums.ResultEnum;
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.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -36,6 +43,7 @@ import org.springframework.stereotype.Service; ...@@ -36,6 +43,7 @@ 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.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
...@@ -60,14 +68,24 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -60,14 +68,24 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OwnerAccountService ownerAccountService; private final OwnerAccountService ownerAccountService;
private final OrderGoodsTruckBindService orderGoodsTruckBindService;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final OrderCancelComponent orderCancelComponent;
private final OrderChildLogService orderChildLogService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(String orderNo) { public void ownerConfirmCancelOrderPre(String orderNo) {
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
if (CollectionUtil.isEmpty(orderGoodsList)) { if (CollectionUtil.isEmpty(orderGoodsList)) {
//未产生货单 //未产生货单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode()); Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode);
if (!result.succeed()) { if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
} }
...@@ -75,10 +93,10 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -75,10 +93,10 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam(); ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo); thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1"); thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam)); log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam); ownerAccountService.ownerAccountThaw(thawAccountParam);
this.ownerCancelOrder(orderNo); this.ownerConfirmCancelProcess(orderNo);
return; return;
} }
...@@ -86,15 +104,38 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -86,15 +104,38 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (CollectionUtil.isEmpty(orderChildrenList)) { if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单 //说明此刻未产生运单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode()); List<Integer> ids = new LinkedList<>();
if (!result.succeed()) { for (OrderGoods orderGoods : orderGoodsList) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
} }
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
ids.add(orderGoods.getId());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(), orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
orderGoodsList.stream().map(OrderGoods::getId).collect(Collectors.toList())); ids);
} else { } else {
List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
List<String> childNoList = new LinkedList<>();
for (OrderChild orderChild : arriveSendChildList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
}
if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消",
now, now,childNoList);
}
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream() Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo)); .collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
...@@ -124,9 +165,14 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -124,9 +165,14 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//虽然没有余量,但是可以取消的运单都是未到达货源地的 //虽然没有余量,但是可以取消的运单都是未到达货源地的
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} }
} }
} }
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
...@@ -135,27 +181,21 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -135,27 +181,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam(); ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo); thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1"); thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam)); log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam); ownerAccountService.ownerAccountThaw(thawAccountParam);
this.ownerCancelOrder(orderNo);
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.COMPLETED.getCode()); Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode);
if (!result.succeed()) { if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
} }
// log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); this.ownerConfirmCancelProcess(orderNo);
// OrderCancelMqParam mqParam = new OrderCancelMqParam();
// mqParam.setType("2");
// mqParam.setOrderNo(orderNo);
// Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
// rabbitTemplate.send(
// RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
// );
} }
@Override @Override
public void ownerCancelOrder(String orderNo) { public void ownerConfirmCancelProcess(String orderNo) {
log.info("开始执行订单取消吨数回填"); log.info("开始执行订单取消吨数回填");
FeignOrderVO orderInfoFeignVO = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfoFeignVO = orderFeign.getOrderInfoFeign(orderNo);
...@@ -166,21 +206,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -166,21 +206,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode().equals(orderInfoFeignVO.getTruckDemand())) { if (!TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode().equals(orderInfoFeignVO.getTruckDemand())) {
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) { if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结 //已完结
List<Integer> ids = new LinkedList<>();
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode()); List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
for (OrderChild orderChild : orderChildrenList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(),
ids);
}
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream() Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo)); .collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
...@@ -200,31 +226,23 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -200,31 +226,23 @@ public class OrderCancelServiceImpl implements OrderCancelService {
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight().add(sum))); .add(orderGoods.getResidueTransportWeight().add(sum)));
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(BigDecimal.ZERO, sum, orderGoods.getId()); orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(sum, sum, orderGoods.getId());
} }
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) { } else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已取消 //已取消
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(), truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
ids.add(orderGoods.getId());
} }
if (CollectionUtil.isNotEmpty(ids)) {
orderGoodsDao.batchUpdateOrderGoodsWeight(BigDecimal.ZERO, ids);
} }
}
Integer truckDemand = orderInfoFeignVO.getTruckDemand(); Integer truckDemand = orderInfoFeignVO.getTruckDemand();
BigDecimal residueWeight = truckDemandMap.get(truckDemand); BigDecimal residueWeight = truckDemandMap.get(truckDemand);
if (residueWeight.compareTo(BigDecimal.ZERO) == 0) { if (residueWeight.compareTo(BigDecimal.ZERO) == 0) {
log.info("当前订单对应的货单无需吨数回填,订单编号{}", orderNo); log.info("当前订单对应的货单无需吨数回填,订单编号{}", orderNo);
return; return;
} }
//归还吨数 //归还吨数
RollbackOrderWeightParam param = new RollbackOrderWeightParam(); RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderInfoFeignVO.getOrderNo()); param.setOrderNo(orderInfoFeignVO.getOrderNo());
...@@ -247,19 +265,6 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -247,19 +265,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) { if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结 //已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode()); List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
List<Integer> ids = new LinkedList<>();
for (OrderChild orderChild : orderChildrenList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(),
ids);
}
//货单 //货单
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream() Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo)); .collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
...@@ -267,7 +272,6 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -267,7 +272,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream() Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo)); .collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) { for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) {
String orderGoodsNo = entry.getKey(); String orderGoodsNo = entry.getKey();
OrderGoods orderGoods = entry.getValue().get(0); OrderGoods orderGoods = entry.getValue().get(0);
...@@ -280,26 +284,16 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -280,26 +284,16 @@ public class OrderCancelServiceImpl implements OrderCancelService {
vehicleUsageMap.put(orderGoods.getVehicleUsage(), vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage()) vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight().add(sum))); .add(orderGoods.getResidueTransportWeight().add(sum)));
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(sum, sum, orderGoods.getId());
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(BigDecimal.ZERO, sum, orderGoods.getId());
} }
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) { } else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已取消
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(), vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage()) vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
ids.add(orderGoods.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderGoodsDao.batchUpdateOrderGoodsWeight(BigDecimal.ZERO, ids);
} }
} }
//归还吨数 //归还吨数
BigDecimal platformResidueSum = vehicleUsageMap.get(1); BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2); BigDecimal ownResidueSum = vehicleUsageMap.get(2);
...@@ -314,14 +308,16 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -314,14 +308,16 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!result.succeed()) { if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
} }
if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
}
} catch (Exception e) { } catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage()); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
} }
} }
} }
...@@ -329,101 +325,8 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -329,101 +325,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(OrderCancelParam param) { public void ownerCancelOrderPre(OrderCancelParam param) {
String orderNo = param.getOrderNo(); String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null; List<String> childNoList = orderCancelComponent.ownerProcess(param);
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode(); param.setChildNoList(childNoList);
switch (param.getCancelType()) {
case 1: //单纯取消订单
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsDao.batchUpdateOrderGoodsStatus(
OrderGoodsStatusEnum.Status.CANCEL.getCode(),
orderGoodsList.stream().map(OrderGoods::getId).collect(Collectors.toList()));
}
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
break;
case 2: //取消未拉运吨数的货单
// if (!orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode()).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
// }
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
orderGoodsDao.updateEntityByKey(update);
}
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
break;
case 3: //取消未拉运+未到达货源地吨数
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtil.isEmpty(orderChildren)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
// if (!orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode()).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
// }
List<Integer> ids = new LinkedList<>();
for (OrderChild orderChild : orderChildren) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId());
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(),
ids);
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = orderChildren.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
BigDecimal reduce = orderChildMap.get(orderGoods.getOrderGoodsNo())
.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
orderGoodsDao.updateEntityByKey(update);
}
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
break;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数有误");
}
OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam(); OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
orderCancelReasonParam.setOrderNo(orderNo); orderCancelReasonParam.setOrderNo(orderNo);
orderCancelReasonParam.setReason(param.getCancelReason()); orderCancelReasonParam.setReason(param.getCancelReason());
...@@ -437,7 +340,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -437,7 +340,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam(); ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo); thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1"); thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam)); log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam); ownerAccountService.ownerAccountThaw(thawAccountParam);
...@@ -451,6 +354,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -451,6 +354,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
/** /**
* 平台取消订单前置(只修改订单相关状态) * 平台取消订单前置(只修改订单相关状态)
*
* @param param * @param param
*/ */
@Override @Override
...@@ -459,7 +363,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -459,7 +363,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
String orderNo = param.getOrderNo(); String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null; List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode(); Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
switch (param.getCancelType()) { switch (param.getCancelType()) {
case 1: //单纯取消订单 case 1: //单纯取消订单
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) { if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
...@@ -468,9 +372,17 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -468,9 +372,17 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) { if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsDao.batchUpdateOrderGoodsStatus( List<Integer> ids = new LinkedList<>();
OrderGoodsStatusEnum.Status.CANCEL.getCode(), for (OrderGoods orderGoods : orderGoodsList) {
orderGoodsList.stream().map(OrderGoods::getId).collect(Collectors.toList())); if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
ids.add(orderGoods.getId());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
} }
break; break;
case 2: //取消未拉运吨数的货单 case 2: //取消未拉运吨数的货单
...@@ -486,6 +398,12 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -486,6 +398,12 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode(); orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} }
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
break; break;
...@@ -495,15 +413,17 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -495,15 +413,17 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (CollectionUtil.isEmpty(orderChildren)) { if (CollectionUtil.isEmpty(orderChildren)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
} }
List<Integer> ids = new LinkedList<>(); List<String > childNoList = new LinkedList<>();
for (OrderChild orderChild : orderChildren) { for (OrderChild orderChild : orderChildren) {
//释放车辆 //释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1); driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId()); childNoList.add(orderChild.getChildNo());
} }
if (CollectionUtil.isNotEmpty(childNoList)) {
orderChildDao.batchUpdateOrderChildStatus( orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getCode(), "平台取消",
ids); now, now, childNoList);
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = orderChildren.stream() Map<String, List<OrderChild>> orderChildMap = orderChildren.stream()
...@@ -525,6 +445,12 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -525,6 +445,12 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} }
} }
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
...@@ -547,7 +473,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -547,7 +473,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2 //TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
ThawAccountParam thawAccountParam = new ThawAccountParam(); ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo); thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1"); thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam)); log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam); ownerAccountService.ownerAccountThaw(thawAccountParam);
...@@ -565,6 +491,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -565,6 +491,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
/** /**
* 执行订单取消后归还吨数 * 执行订单取消后归还吨数
*
* @param param * @param param
*/ */
@Override @Override
...@@ -587,23 +514,15 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -587,23 +514,15 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) { if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(), truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
} }
} else { } else {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(), vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage()) vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
} }
} }
//归还吨数 //归还吨数
...@@ -628,30 +547,21 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -628,30 +547,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum); rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum); rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
} }
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam); break;
return;
case 2: //取消未拉运吨数的货单及订单 case 2: //取消未拉运吨数的货单及订单
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) { if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(), truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
} }
} else { } else {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(), vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage()) vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
} }
} }
//归还吨数 //归还吨数
...@@ -676,14 +586,13 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -676,14 +586,13 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum); rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum); rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
} }
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam); break;
return;
case 3: //取消未拉运+未到达货源地吨数 case 3: //取消未拉运+未到达货源地吨数
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = new HashMap<>(); Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(orderChildren)) { if (CollectionUtil.isNotEmpty(param.getChildNoList())) {
List<OrderChild> orderChildren = orderChildDao.selectInOrderChildNoList(param.getChildNoList());
orderChildMap = orderChildren.stream().collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo)); orderChildMap = orderChildren.stream().collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
} }
...@@ -694,7 +603,6 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -694,7 +603,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
truckDemandMap.put(orderGoods.getTruckDemand(), truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) { if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream() BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); .map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
...@@ -704,12 +612,13 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -704,12 +612,13 @@ public class OrderCancelServiceImpl implements OrderCancelService {
childSum childSum
) )
); );
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
truckDemandMap.put(orderGoods.getTruckDemand(), truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand()) truckDemandMap.get(orderGoods.getTruckDemand())
.add(childSum)); .add(childSum));
}
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
}
} }
} else { } else {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
...@@ -718,7 +627,6 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -718,7 +627,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
vehicleUsageMap.put(orderGoods.getVehicleUsage(), vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage()) vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight())); .add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) { if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream() BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); .map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
...@@ -728,12 +636,15 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -728,12 +636,15 @@ public class OrderCancelServiceImpl implements OrderCancelService {
childSum childSum
) )
); );
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
vehicleUsageMap.put(orderGoods.getTruckDemand(), vehicleUsageMap.put(orderGoods.getTruckDemand(),
vehicleUsageMap.get(orderGoods.getTruckDemand()) vehicleUsageMap.get(orderGoods.getTruckDemand())
.add(childSum)); .add(childSum));
}
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
}
} }
//归还吨数 //归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) { if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
...@@ -757,10 +668,69 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -757,10 +668,69 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum); rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum); rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
} }
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam); break;
default:
return;
}
if (!orderFeign.rollbackOrderWeight(rollbackOrderWeightParam).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
} }
if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
} }
}
@Override
public void artificialCancelOrder(String orderChildNo, String remark) {
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(orderChildNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode());
update.setCancelRemark(remark);
update.setCancelTime(now);
update.setFinishTime(now);
orderChildDao.updateEntityByKey(update);
orderCancelComponent.backFillTonnageForArtificial(orderChild.getOrderGoodsNo(), orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode(), OrderChildEnum.Status.ARTIFICIAL_CANCEL.getName(),
OrderChildLogEnum.CreateType.ARTIFICIAL.getCode(), 0L, OrderChildLogEnum.CreateType.ARTIFICIAL.getMsg()
);
}
@Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
OrderChildVO artificialCancelOrder = orderChildDao.findArtificialCancelOrder(orderChildNo);
if (artificialCancelOrder == null) {
return null;
}
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(artificialCancelOrder.getOrderNo());
if (orderInfoFeign != null) {
artificialCancelOrder.setGoodTypeName(orderInfoFeign.getGoodsTypeName());
}
return artificialCancelOrder;
}
@Override
public IPage<OrderChildVO> orderChildCancelRecord(PageParam pageParam) {
IPage<OrderChildVO> page = orderChildDao.orderChildCancelRecord(pageParam);
if (!page.getRecords().isEmpty()) {
String orderNo = page.getRecords().get(0).getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
for (OrderChildVO record : page.getRecords()) {
record.setGoodTypeName(orderInfoFeign.getGoodsTypeName());
}
}
return page;
}
} }
\ No newline at end of file
...@@ -139,11 +139,25 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -139,11 +139,25 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
* 装车补偿 * 装车补偿
*/ */
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){ private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
if (dif.compareTo(BigDecimal.ZERO) == 0){return;} int i = dif.compareTo(BigDecimal.ZERO);
if (i == 0){
return;
} else if (i > 0) {
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.SUCCESS.getCode())
) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_STATUS_NOT_GET);
}
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_WEIGHT_NOT_HAVE);
}
}
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1; int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
Integer status = orderGoods.getOrderGoodsStatus(); Integer status;
if (count == 0){ if (count == 0){
status = OrderGoodsStatusEnum.Status.PAYING.getCode(); status = OrderGoodsStatusEnum.Status.PAYING.getCode();
} }
...@@ -151,7 +165,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -151,7 +165,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
} }
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, status); orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, dif, status);
} }
/** /**
......
...@@ -6,8 +6,8 @@ import com.clx.order.enums.OrderEnum; ...@@ -6,8 +6,8 @@ import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO; import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO; import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.component.GoodsOrderTruckRecordComponent; import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.*; import com.clx.performance.dao.*;
import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao; import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
...@@ -27,10 +27,6 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam; ...@@ -27,10 +27,6 @@ import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam; import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.PagePoundAuditParam; import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.service.*; import com.clx.performance.service.*;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildPoundLogService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService; import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.settle.SettlementDriverDetailService; import com.clx.performance.service.settle.SettlementDriverDetailService;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
...@@ -51,13 +47,13 @@ import com.msl.common.utils.LocalDateTimeUtils; ...@@ -51,13 +47,13 @@ import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.common.utils.gps.GpsUtil; import com.msl.common.utils.gps.GpsUtil;
import com.msl.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; 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;
...@@ -78,43 +74,73 @@ import java.util.stream.Collectors; ...@@ -78,43 +74,73 @@ import java.util.stream.Collectors;
*/ */
@Slf4j @Slf4j
@Service @Service
@AllArgsConstructor
public class OrderChildServiceImpl implements OrderChildService { public class OrderChildServiceImpl implements OrderChildService {
private final AmqpTemplate rabbitTemplate; @Autowired
private final RedisTemplate redisTemplate; private AmqpTemplate rabbitTemplate;
private final OrderGoodsDao orderGoodsDao; @Autowired
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao; private RedisTemplate redisTemplate;
private final OrderChildDao orderChildDao; @Autowired
private final OrderChildImageDao orderChildImageDao; private OrderGoodsDao orderGoodsDao;
private final OrderChildPoundAuditDao orderChildPoundAuditDao; @Autowired
private final OrderChildLogService orderChildLogService; private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderChildPoundLogService orderChildPoundLogService; @Autowired
private final AddressService addressService; private OrderChildDao orderChildDao;
private final OrderService orderService; @Autowired
private final GdService gdService; private OrderChildImageDao orderChildImageDao;
private final DriverService driverService; @Autowired
private final OrderChildStruct orderChildStruct; private OrderChildPoundAuditDao orderChildPoundAuditDao;
private final OrderGoodsService orderGoodsService; @Autowired
private final OrderChildPoundStruct orderChildPoundStruct; private OrderChildLogService orderChildLogService;
private final OrderChildFreightStruct orderChildFreightStruct; @Autowired
private final AddressStruct addressStruct; private OrderChildPoundLogService orderChildPoundLogService;
private final OrderChildLogStruct orderChildLogStruct; @Autowired
private final UniqueOrderNumService uniqueOrderNumService; private AddressService addressService;
private final OrderFeign orderFeign; @Autowired
private final RedissonClient redissonClient; private OrderService orderService;
@Autowired
private final IntegralMqService integralMqService; private GdService gdService;
@Autowired
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent; private DriverService driverService;
private final BreakContractDriverRecordDao breakContractDriverRecordDao; @Autowired
private OrderChildStruct orderChildStruct;
private final SettlementDriverDetailService settlementDriverDetailService; @Autowired
private final SettlementOwnerDetailService settlementOwnerDetailService; private OrderGoodsService orderGoodsService;
private final SettlementMqService settlementMqService; @Autowired
private final OrderChildMqService orderChildMqService; private OrderChildPoundStruct orderChildPoundStruct;
@Autowired
private final OwnerInfoService ownerInfoService; private OrderChildFreightStruct orderChildFreightStruct;
private final BreakContractDriverRecordService breakContractDriverRecordService; @Autowired
private AddressStruct addressStruct;
@Autowired
private OrderChildLogStruct orderChildLogStruct;
@Autowired
private UniqueOrderNumService uniqueOrderNumService;
@Autowired
private OrderFeign orderFeign;
@Autowired
private RedissonClient redissonClient;
@Autowired
private IntegralMqService integralMqService;
@Autowired
private GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Autowired
private BreakContractDriverRecordDao breakContractDriverRecordDao;
@Autowired
private SettlementDriverDetailService settlementDriverDetailService;
@Autowired
private SettlementOwnerDetailService settlementOwnerDetailService;
@Autowired
private SettlementMqService settlementMqService;
@Autowired
private OrderChildMqService orderChildMqService;
@Autowired
private OwnerInfoService ownerInfoService;
@Autowired
private BreakContractDriverRecordService breakContractDriverRecordService;
@Override @Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) { public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
...@@ -290,11 +316,29 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -290,11 +316,29 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setTruckModel(driverTruckInfo.getModel()); orderChild.setTruckModel(driverTruckInfo.getModel());
Integer overWeight = orderInfo.getOverWeight(); Integer overWeight = orderInfo.getOverWeight();
if(Objects.equals(overWeight,OrderGoodsOverWeightEnum.NO.getCode())){ if(Objects.equals(overWeight,OrderGoodsOverWeightEnum.NO.getCode())){
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal(33)) < 0) {
orderChild.setWeight(orderGoods.getResidueTransportWeight());
} else {
orderChild.setWeight(new BigDecimal(33)); orderChild.setWeight(new BigDecimal(33));
}else{ }
} else{
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal(50)) < 0) {
orderChild.setWeight(orderGoods.getResidueTransportWeight());
} else {
orderChild.setWeight(new BigDecimal(50)); orderChild.setWeight(new BigDecimal(50));
} }
}
// 订单数量限制
// 订单已拉运吨数
BigDecimal alreadyTransportWeight = orderGoodsDao.sumAlreadyTransportWeightByOrderNo(orderGoods.getOrderNo());
if (alreadyTransportWeight.add(orderChild.getWeight()).compareTo(orderInfo.getTransportWeight().subtract(orderInfo.getDownFloatWeight())) > 0){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
//orderChild.setWeight(orderChild.getTruckLoad()); //orderChild.setWeight(orderChild.getTruckLoad());
orderChild.setFreight(orderChildFreightCalc(orderChild)); orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setPayTime(now); orderChild.setPayTime(now);
...@@ -310,7 +354,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -310,7 +354,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setSettlementAccountPeriod(orderGoods.getSettlementAccountPeriod()); orderChild.setSettlementAccountPeriod(orderGoods.getSettlementAccountPeriod());
// 更新货单数据 // 更新货单数据
updateOrderGoodsAmount(orderGoods, orderChild.getWeight()); updateOrderGoodsAmount(orderGoods, orderChild);
// 更新定向单状态 // 更新定向单状态
updateOrderGoodsDirect(bind); updateOrderGoodsDirect(bind);
...@@ -650,6 +694,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -650,6 +694,10 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight()); BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight());
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_WEIGHT_NOT_HAVE);
}
orderChild.setLoadRough(param.getLoadRough()); orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare()); orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet()); orderChild.setLoadNet(param.getLoadNet());
...@@ -790,6 +838,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -790,6 +838,9 @@ public class OrderChildServiceImpl implements OrderChildService {
// 更新出车状态 // 更新出车状态
updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId()); updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId());
//释放车辆
goodsOrderTruckRecordComponent.releaseDriverCard(orderChild.getOrderGoodsNo(), orderChild.getTruckNo());
} }
private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) { private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) {
...@@ -1174,6 +1225,27 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1174,6 +1225,27 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
@Override
public void orderChildFinish(String childNo){
// 运单结束 统计积分
integralMqService.orderChildFinish(childNo);
}
@Override
public DriverCancelOrderChildInfo driverCancelOrderChildInfo(String orderChildNo) {
DriverCancelOrderChildInfo result = new DriverCancelOrderChildInfo();
List<OrderChildImage> images = orderChildImageDao.getImages(orderChildNo, OrderChildImage.Type.DRIVER_CANCEL.getCode());
OrderChild orderChild = orderChildDao.getByChildNo(orderChildNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
result.setCancelDetail(orderChild.getCancelDetail());
result.setCancelRemark(orderChild.getCancelRemark());
if (CollectionUtils.isNotEmpty(images)) {
result.setImageList(images.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
}
return result;
}
/** /**
* 生成计费单 * 生成计费单
*/ */
...@@ -1315,11 +1387,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1315,11 +1387,11 @@ public class OrderChildServiceImpl implements OrderChildService {
/** /**
* 更新货单数据 * 更新货单数据
*/ */
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight) { private void updateOrderGoodsAmount(OrderGoods orderGoods, OrderChild orderChild) {
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods, weight, status); orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods, orderChild, status);
orderFeign.updateOrderStatusByOrderNo(orderGoods.getOrderNo(), OrderEnum.Status.IN_TRANSIT.getCode()); orderFeign.updateOrderStatusByOrderNo(orderGoods.getOrderNo(), OrderEnum.Status.IN_TRANSIT.getCode());
} }
...@@ -1336,7 +1408,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1336,7 +1408,7 @@ public class OrderChildServiceImpl implements OrderChildService {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
} }
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate(), orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, orderChild.getWeight().negate(),
status); status);
} }
...@@ -1344,13 +1416,25 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1344,13 +1416,25 @@ public class OrderChildServiceImpl implements OrderChildService {
* 装车补偿 * 装车补偿
*/ */
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif) { private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif) {
if (dif.compareTo(BigDecimal.ZERO) == 0) { int i = dif.compareTo(BigDecimal.ZERO);
if (i == 0){
return; return;
} else if (i > 0) {
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.SUCCESS.getCode())
) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_STATUS_NOT_GET);
}
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_WEIGHT_NOT_HAVE);
}
} }
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode(); Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, status); orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, dif, status);
} }
/** /**
...@@ -1407,7 +1491,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1407,7 +1491,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* 司机接单限制 * 司机接单限制
*/ */
private void driverTakeOrderLimit(Long driverUserNo){ private void driverTakeOrderLimit(Long driverUserNo){
Optional<BreakContractDriverRecord> limitOptional = breakContractDriverRecordDao.selectLastLimitTimeByDriverUserNo(driverUserNo); Optional<BreakContractDriverRecord> limitOptional = breakContractDriverRecordDao.selectLastLimitTimeByDriverUserNo(driverUserNo, LocalDateTime.now());
if (limitOptional.isPresent()){ if (limitOptional.isPresent()){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DRIVER_TAKE_ORDER_TIME_LIMIT, throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DRIVER_TAKE_ORDER_TIME_LIMIT,
PerformanceResultEnum.ORDER_CHILD_DRIVER_TAKE_ORDER_TIME_LIMIT.getMsg()+LocalDateTimeUtils.convertLocalDateTimeToString(limitOptional.get().getLimitTime(), "yyyy-MM-dd HH:mm")); PerformanceResultEnum.ORDER_CHILD_DRIVER_TAKE_ORDER_TIME_LIMIT.getMsg()+LocalDateTimeUtils.convertLocalDateTimeToString(limitOptional.get().getLimitTime(), "yyyy-MM-dd HH:mm"));
...@@ -1418,7 +1502,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1418,7 +1502,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* 拉运吨数检测 * 拉运吨数检测
*/ */
private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad) { private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad) {
if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) { if (weight.compareTo(new BigDecimal("99")) > 0) {
return false; return false;
} }
return true; return true;
...@@ -1559,7 +1643,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1559,7 +1643,10 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
//实付运费(元) //实付运费(元)
BigDecimal realFreight = payableFreight.subtract(lossDeduction); BigDecimal realFreight = null;
if(Objects.equals(orderChild.getPoundStatus(),OrderChildPoundAuditEnum.Status.APPROVED.getCode())){
realFreight = payableFreight.subtract(lossDeduction);
}
carrierOrderChildDetailVO.setPayableFreight(payableFreight); carrierOrderChildDetailVO.setPayableFreight(payableFreight);
carrierOrderChildDetailVO.setLossDeduction(lossDeduction); carrierOrderChildDetailVO.setLossDeduction(lossDeduction);
carrierOrderChildDetailVO.setRealFreight(realFreight); carrierOrderChildDetailVO.setRealFreight(realFreight);
...@@ -1864,6 +1951,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1864,6 +1951,7 @@ public class OrderChildServiceImpl implements OrderChildService {
return orderChildDao.selectInTransitOrderChild(orderNo); return orderChildDao.selectInTransitOrderChild(orderNo);
} }
/** /**
* @return * @return
* @Author kavin * @Author kavin
......
...@@ -5,10 +5,12 @@ import cn.hutool.json.JSONUtil; ...@@ -5,10 +5,12 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
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.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum; import com.clx.order.enums.VehicleUsageEnum;
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.performance.component.OrderCancelComponent;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.param.pc.OrderGoodsEditParams; import com.clx.performance.param.pc.OrderGoodsEditParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam; import com.clx.performance.param.pc.PageOrderGoodsListParam;
...@@ -28,8 +30,7 @@ import com.clx.performance.param.app.OrderGoodsListPageParam; ...@@ -28,8 +30,7 @@ import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.pc.OrderGoodsCancelParam; import com.clx.performance.param.pc.OrderGoodsCancelParam;
import com.clx.performance.param.pc.UpdateEditOrderGoodsParam; import com.clx.performance.param.pc.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam; import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam;
import com.clx.performance.service.OrderGoodsLogService; import com.clx.performance.service.*;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.struct.OrderGoodsStruct; import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.vo.app.OrderGoodsAPPVO; import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO; import com.clx.performance.vo.feign.OrderGoodsFeignVO;
...@@ -92,10 +93,17 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -92,10 +93,17 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
private GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent; private GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent; private OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
private DriverService driverService; private DriverService driverService;
private OrderCancelComponent orderCancelComponent;
private final IntegralMqService integralMqService;
private final OrderChildLogService orderChildLogService;
@Override @Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) { public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get(); OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
...@@ -125,15 +133,30 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -125,15 +133,30 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
@Override @Override
public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus) { public void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus) {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(id, orderChildWeight, orderGoodsStatus); if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.SUCCESS.getCode())
) {
if (orderChildWeight.compareTo(BigDecimal.ZERO) < 0) {
orderChildWeight = orderChildWeight.negate();
}
//当前订单已经取消或完结
orderCancelComponent.backFillTonnage(orderGoods, orderChildWeight);
} else {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChildWeight, orderGoodsStatus);
}
} }
@Override @Override
public void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus) { public void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus) {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChildWeight, orderGoodsStatus); orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight(), orderGoodsStatus);
if (orderGoods.getResidueTransportWeight().compareTo(orderChildWeight) <= 0) { if (orderGoods.getResidueTransportWeight().compareTo(orderChild.getWeight()) <= 0) {
orderGoodsTruckBindDao.updateOrderGoodsBindStatusExpire(orderGoods.getOrderGoodsNo()); //释放其他车辆
goodsOrderTruckRecordComponent.releaseDriverAndTruckBind(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo());
} }
} }
...@@ -232,26 +255,26 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -232,26 +255,26 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
List<OrderGoods> orderGoodsList = null; List<OrderGoods> orderGoodsList = null;
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO; BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
String residueWeight = orderInfoFeign.getResidueWeight();
switch (optionType) { switch (optionType) {
case "1": case "1":
return new BigDecimal(orderInfoFeign.getResidueWeight()); return new BigDecimal(residueWeight);
case "2": case "2":
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) { if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add); orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
} }
return orderGoodsResidueWeight; return orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
case "3": case "3":
String residueWeight = orderInfoFeign.getResidueWeight();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode()); List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO; BigDecimal childResidueWeight = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) { if (CollectionUtils.isNotEmpty(orderChildList)) {
childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
} }
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo); orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) { if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add); orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
} }
...@@ -272,7 +295,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -272,7 +295,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateEditOrderGoods(UpdateEditOrderGoodsParam param) { public void updateEditOrderGoods(UpdateEditOrderGoodsParam param) {
UserSessionData loginUserInfo = null;
try {
loginUserInfo = TokenUtil.getLoginUserInfo();
}catch (Exception e) {
}
OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams(); OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams();
OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get(); OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(param.getOrderNo()); FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(param.getOrderNo());
...@@ -281,26 +310,57 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -281,26 +310,57 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight()); BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight());
int flag = answer.compareTo(BigDecimal.ZERO); int flag = answer.compareTo(BigDecimal.ZERO);
if (flag >= 0) {
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight().add(answer));
}else {
orderGoodsParams.setResidueTransportWeight(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getAlreadyTransportWeight()));
//归还吨数 //归还吨数
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam(); RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(param.getOrderNo()); rollbackOrderWeightParam.setOrderNo(param.getOrderNo());
log.info("falg:{}",flag);
if (flag > 0) {
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight().add(answer));
rollbackOrderWeightParam.setUpdateType(UpdateEnum.SUB.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer);
}else if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (orderGoodsParams.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(answer);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer);
}
}
log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam));
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
}else if (flag < 0 ){
orderGoodsParams.setResidueTransportWeight(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getAlreadyTransportWeight()));
rollbackOrderWeightParam.setUpdateType(UpdateEnum.ADD.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) { if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate()); rollbackOrderWeightParam.setResidueWeight(answer.negate());
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO); rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate()); rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate());
}else if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) { }else if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate()); rollbackOrderWeightParam.setResidueWeight(answer.negate());
if (VehicleUsageEnum.Status.OWN.getCode().equals(oldOrderGoods.getVehicleUsage())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(answer.negate()); rollbackOrderWeightParam.setOwnResidueCarryWeight(answer.negate());
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO); rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate());
} }
}
log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam));
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam); orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
} else {
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight());
} }
if (new BigDecimal(orderInfoFeign.getResidueWeight()).compareTo(orderGoodsParams.getExtractWeight()) < 0) {
if (new BigDecimal(orderInfoFeign.getResidueWeight()).compareTo(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight())) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数已超订单可提取吨数"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数已超订单可提取吨数");
} }
...@@ -330,17 +390,33 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -330,17 +390,33 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
List<OrderGoodsTruckBind> deleteList = truckBindList.stream().filter(i -> !i.getStatus().equals(OrderGoodsTruckBindEnum.Status.GET.getCode())).collect(Collectors.toList()); List<OrderGoodsTruckBind> deleteList = truckBindList.stream().filter(i -> !i.getStatus().equals(OrderGoodsTruckBindEnum.Status.GET.getCode())).collect(Collectors.toList());
//已接单的记录 //已接单的记录
getChildList = truckBindList.stream().filter(i -> i.getStatus().equals(OrderGoodsTruckBindEnum.Status.GET.getCode())).collect(Collectors.toList()); getChildList = truckBindList.stream().filter(i -> i.getStatus().equals(OrderGoodsTruckBindEnum.Status.GET.getCode())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(deleteList)) {
orderGoodsTruckBindDao.deleteByIds(deleteList.stream().map(OrderGoodsTruckBind::getId).collect(Collectors.toList())); orderGoodsTruckBindDao.deleteByIds(deleteList.stream().map(OrderGoodsTruckBind::getId).collect(Collectors.toList()));
}
for (OrderGoodsTruckBind bind : deleteList) { for (OrderGoodsTruckBind bind : deleteList) {
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo, bind.getTruckNo()); goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
} }
} }
if (!oldOrderGoods.getPendingOrderWay().equals(orderGoodsParams.getPendingOrderWay())) {
orderGoodsTruckBindDao.deleteByOrderGoods(orderGoodsNo);
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
}
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
List<String> truckList = orderGoodsParams.getTruckList(); List<String> truckList = orderGoodsParams.getTruckList();
if (CollectionUtil.isNotEmpty(truckList)) { if (CollectionUtil.isNotEmpty(truckList)) {
if (CollectionUtil.isNotEmpty(getChildList)) { if (CollectionUtil.isNotEmpty(getChildList)) {
truckList.retainAll(getChildList.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList())); for (OrderGoodsTruckBind bind : getChildList) {
if (!truckList.contains(bind.getTruckNo())) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前取消的车辆已经接单,车牌号为:" + bind.getTruckNo());
} else {
//已存在的记录不需要重新创建绑定记录
truckList.remove(bind.getTruckNo());
}
}
} }
orderGoodsTruckBindDao.saveBatchEntity(param.getOrderNo(), orderGoodsNo, truckList, now); orderGoodsTruckBindDao.saveBatchEntity(param.getOrderNo(), orderGoodsNo, truckList, now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList); goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
...@@ -352,10 +428,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -352,10 +428,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(DateUtils.parseDateTime(orderGoodsParams.getLastOrderTime(), "yyyy-MM-dd HH:mm:ss").get(), orderGoodsNo); orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(DateUtils.parseDateTime(orderGoodsParams.getLastOrderTime(), "yyyy-MM-dd HH:mm:ss").get(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastArriveSendTime(DateUtils.parseDateTime(orderGoodsParams.getLastArriveSendTime(), "yyyy-MM-dd HH:mm:ss").get(), orderGoodsNo); orderGoodsStatusLazyComponent.expireProduceByLastArriveSendTime(DateUtils.parseDateTime(orderGoodsParams.getLastArriveSendTime(), "yyyy-MM-dd HH:mm:ss").get(), orderGoodsNo);
orderGoodsParams.setUserNo(loginUserInfo.getUserNo());
orderGoodsParams.setUserName(loginUserInfo.getUserName());
orderGoodsDao.updateOrderGoods(orderGoodsParams); orderGoodsDao.updateOrderGoods(orderGoodsParams);
//日志提交 //日志提交
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.EDIT.getName(), ""); orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.EDIT.getName(), "");
} }
...@@ -396,19 +474,19 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -396,19 +474,19 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void orderGoodsCancel(OrderGoodsCancelParam goodsCancelParam) { public void orderGoodsCancel(OrderGoodsCancelParam goodsCancelParam) {
String orderGoodsNo = goodsCancelParam.getOrderGoodsNo(); String orderGoodsNo = goodsCancelParam.getOrderGoodsNo();
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.HTTP_ERROR, "数据错误");
if (!optional.isPresent()) { String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
return;
}
OrderGoods orderGoods = optional.get();
List<OrderChild> orderChildList = null; List<OrderChild> orderChildList = null;
BigDecimal residueWeight = null; BigDecimal residueWeight = null;
BigDecimal sum = BigDecimal.ZERO; BigDecimal sum = BigDecimal.ZERO;
List<String> childNoList = new LinkedList<>();
RollbackOrderWeightParam param = new RollbackOrderWeightParam(); RollbackOrderWeightParam param = new RollbackOrderWeightParam();
Integer cancelOperateType = goodsCancelParam.getCancelOperateType(); Integer cancelOperateType = goodsCancelParam.getCancelOperateType();
Integer orderGoodsStatus = OrderGoodsStatusEnum.Status.CANCEL.getCode();
switch (cancelOperateType) { switch (cancelOperateType) {
case 1: case 1:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), null); orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) { if (CollectionUtils.isNotEmpty(orderChildList)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单");
} }
...@@ -434,16 +512,35 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -434,16 +512,35 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
if (orderFeign.rollbackOrderWeight(param).succeed()) { if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods(); OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId()); update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode()); update.setOrderGoodsStatus(orderGoodsStatus);
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
break; break;
case 2: case 2:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode()); orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) { if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.ARRIVE_SEND.getCode()).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterOrderChildList)) {
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消",
now,now,childNoList);
}
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
} }
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum); residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight); param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo()); param.setOrderNo(orderGoods.getOrderNo());
...@@ -460,25 +557,40 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -460,25 +557,40 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
} }
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode()); orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, orderGoodsStatus);
if (CollectionUtils.isNotEmpty(orderChildList)) {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), orderChildList.stream().map(OrderChild::getId).collect(Collectors.toList()));
}
log.info("取消货单,参数:{}", JSONUtil.parse(param)); log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) { if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods(); OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId()); update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
} }
break; break;
case 3: case 3:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.LOAD.getCode(), goodsCancelParam.getTruckList()); orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode(),goodsCancelParam.getTruckList());
if (CollectionUtils.isNotEmpty(orderChildList)) { if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add); List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.LOAD.getCode()).collect(Collectors.toList());
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), OrderChildEnum.Status.OWNER_CANCEL.getName(),
OrderChildLogEnum.CreateType.OWNER.getCode(), 0L, OrderChildLogEnum.CreateType.OWNER.getMsg()
);
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(),"系统取消",
now, now, childNoList);
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
} }
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum); residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight); param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo()); param.setOrderNo(orderGoods.getOrderNo());
...@@ -495,18 +607,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -495,18 +607,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
} }
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode()); orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<Integer> ids = new LinkedList<>();
for (OrderChild orderChild : orderChildList) {
ids.add(orderChild.getId());
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
}
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), ids);
}
log.info("取消货单,参数:{}", JSONUtil.parse(param)); log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) { if (orderFeign.rollbackOrderWeight(param).succeed()) {
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(residueWeight, sum, OrderGoodsStatusEnum.Status.CANCEL.getCode(), orderGoods.getId()); orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(orderGoods.getResidueTransportWeight(), sum, orderGoodsStatus, orderGoods.getId());
} }
break; break;
default: default:
...@@ -520,9 +624,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -520,9 +624,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo()); orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName()); orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderFeign.orderCancelReason(orderCancelReasonParam); orderFeign.orderCancelReason(orderCancelReasonParam);
for (String childNo : childNoList) {
integralMqService.orderChildFinish(childNo);
}
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.CANCEL.getName(), ""); orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.CANCEL.getName(), "");
} }
...@@ -592,6 +700,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -592,6 +700,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
result.setOwnCarryWeight(orderInfoFeign.getOwnCarryWeight()); result.setOwnCarryWeight(orderInfoFeign.getOwnCarryWeight());
result.setOwnResidueCarryWeight(orderInfoFeign.getOwnResidueCarryWeight()); result.setOwnResidueCarryWeight(orderInfoFeign.getOwnResidueCarryWeight());
result.setPlatformCarryWeight(orderInfoFeign.getPlatformCarryWeight()); result.setPlatformCarryWeight(orderInfoFeign.getPlatformCarryWeight());
result.setPlatformResidueCarryWeight(orderInfoFeign.getPlatformResidueCarryWeight());
result.setDownFloatWeight(orderInfoFeign.getDownFloatWeight()); result.setDownFloatWeight(orderInfoFeign.getDownFloatWeight());
result.setUpFloatWeight(orderInfoFeign.getUpFloatWeight()); result.setUpFloatWeight(orderInfoFeign.getUpFloatWeight());
result.setStopFlag(orderInfoFeign.getStopFlag()); result.setStopFlag(orderInfoFeign.getStopFlag());
......
package com.clx.performance.service.impl; package com.clx.performance.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao; import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.service.OrderGoodsTruckBindService; import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.app.driver.truck.DriverTruckAppVo;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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 java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Service @Service
@AllArgsConstructor
@Slf4j
public class OrderGoodsTruckBindServiceImpl implements OrderGoodsTruckBindService { public class OrderGoodsTruckBindServiceImpl implements OrderGoodsTruckBindService {
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao; private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsDao orderGoodsDao;
private final TruckFeign truckFeign;
private final OrderChildDao orderChildDao;
@Override @Override
public List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo) { public List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo) {
return orderGoodsTruckBindDao.getTrucksByOrderGoodsNo(orderGoodsNo); return orderGoodsTruckBindDao.getTrucksByOrderGoodsNo(orderGoodsNo);
} }
@Override
public List<OrderGoodsAPPVO> getCancelOrderGoods(Long userNo) {
Result<List<DriverTruckAppVo>> result = truckFeign.driverTruckList(userNo);
if (!result.succeed() || CollectionUtil.isEmpty(result.getData())) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
List<String> truckList = result.getData().stream().map(DriverTruckAppVo::getTruckNo).collect(Collectors.toList());
LocalDateTime now = LocalDateTime.now();
List<OrderGoodsTruckBind> list = orderGoodsTruckBindDao.getCancelOrderGoods(truckList,
DateUtils.formatDateTime(now.plusDays(-3), "yyyy-MM-dd HH:mm:ss").get(),
DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get());
if (CollectionUtil.isEmpty(list)) {
return null;
}
return orderGoodsDao.getCancelOrderGoods(list.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList()));
}
@Override
public void updateCancelTruckBind(String orderGoodsNo) {
List<OrderChild> arriveSendOrderChild = orderChildDao.selectArriveSendOrderChildGe(orderGoodsNo);
List<String> truckList = null;
if (CollectionUtils.isNotEmpty(arriveSendOrderChild)) {
truckList = arriveSendOrderChild.stream().map(OrderChild::getTruckNo).collect(Collectors.toList());
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode(), truckList);
// List<OrderGoodsTruckBind> truckBindList = orderGoodsTruckBindDao.selectCancelRecord(orderGoodsNo, truckList);
// if (CollectionUtils.isNotEmpty(truckBindList)) {
// for (OrderGoodsTruckBind bind : truckBindList) {
// goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
// }
// }
}
} }
...@@ -23,6 +23,7 @@ import com.clx.performance.utils.excel.ExcelData; ...@@ -23,6 +23,7 @@ import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField; import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet; 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.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.enums.driver.DriverTruckEnum; import com.clx.user.enums.driver.DriverTruckEnum;
...@@ -85,14 +86,14 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -85,14 +86,14 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
} }
@Override @Override
public Map<String, OwnerAccountVO> accountInfo(Long ownerUserNo) { public OwnerAccountAllVO accountInfo(Long ownerUserNo) {
Map<String, OwnerAccountVO> result = new HashMap<>(2); OwnerAccountAllVO result = new OwnerAccountAllVO();
List<OwnerAccountVO> list = ownerAccountStruct.convertList(ownerAccountDao.accountInfo(ownerUserNo)); List<OwnerAccountVO> list = ownerAccountStruct.convertList(ownerAccountDao.accountInfo(ownerUserNo));
for (OwnerAccountVO ownerAccountVO : list) { for (OwnerAccountVO ownerAccountVO : list) {
if (OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode().equals(ownerAccountVO.getAccountType())) { if (OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode().equals(ownerAccountVO.getAccountType())) {
result.put("marginAccount", ownerAccountVO); result.setMarginAccount(ownerAccountVO);
} else { } else {
result.put("prepaidFreightAccount", ownerAccountVO); result.setPrepaidFreightAccount(ownerAccountVO);
} }
} }
return result; return result;
...@@ -654,6 +655,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -654,6 +655,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
String ownerName = ""; String ownerName = "";
BigDecimal frozenBalance = param.getFrozenBalance(); BigDecimal frozenBalance = param.getFrozenBalance();
BigDecimal ensureBalance = param.getEnsureBalance(); BigDecimal ensureBalance = param.getEnsureBalance();
boolean ensureBalanceZeroFlag = false;
boolean frozenBalanceZeroFlag = false;
Integer orderId = param.getOrderId(); Integer orderId = param.getOrderId();
String orderNo = param.getOrderNo(); String orderNo = param.getOrderNo();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
...@@ -676,6 +679,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -676,6 +679,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
if (ownerAccount.getUsableBalance().compareTo(ensureBalance) < 0) { if (ownerAccount.getUsableBalance().compareTo(ensureBalance) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货主保证金账户可用余额不够冻结"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货主保证金账户可用余额不够冻结");
} }
if (ensureBalance.compareTo(BigDecimal.ZERO) == 0) {
flag += 1;
ensureBalanceZeroFlag = true;
} else {
//冻结金额 //冻结金额
entity.setFrozenBalance(ensureBalance); entity.setFrozenBalance(ensureBalance);
//可用余额 //可用余额
...@@ -685,10 +692,16 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -685,10 +692,16 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
//updateList.add(entity); //updateList.add(entity);
flag += ownerAccountDao.updateAccountCAS(entity, now, false); flag += ownerAccountDao.updateAccountCAS(entity, now, false);
}
} else { } else {
if (ownerAccount.getUsableBalance().compareTo(frozenBalance) < 0) { if (ownerAccount.getUsableBalance().compareTo(frozenBalance) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货主预付运费账户可用余额不够冻结"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货主预付运费账户可用余额不够冻结");
} }
if (frozenBalance.compareTo(BigDecimal.ZERO) == 0) {
flag += 1;
frozenBalanceZeroFlag = true;
} else {
//冻结金额 //冻结金额
entity.setFrozenBalance(frozenBalance); entity.setFrozenBalance(frozenBalance);
//可用余额 //可用余额
...@@ -699,6 +712,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -699,6 +712,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
flag += ownerAccountDao.updateAccountCAS(entity, now, false); flag += ownerAccountDao.updateAccountCAS(entity, now, false);
} }
} }
}
if (flag == 2) { if (flag == 2) {
log.info("冻结账户完毕"); log.info("冻结账户完毕");
log.info("插入保证金冻结流水"); log.info("插入保证金冻结流水");
...@@ -706,6 +720,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -706,6 +720,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
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())) {
log.info("插入保证金冻结流水"); log.info("插入保证金冻结流水");
if (ensureBalanceZeroFlag) {
log.info("保证金账户需冻结金额为0,不产生流水");
continue;
}
OwnerRunningWaterRecord marginAccount = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord marginAccount = new OwnerRunningWaterRecord();
marginAccount.setOwnerUserName(ownerName); marginAccount.setOwnerUserName(ownerName);
marginAccount.setMobile(mobile); marginAccount.setMobile(mobile);
...@@ -727,6 +745,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -727,6 +745,10 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
ownerRunningWaterRecordDao.saveEntity(marginAccount); ownerRunningWaterRecordDao.saveEntity(marginAccount);
} else { } else {
log.info("插入预付运费冻结流水"); log.info("插入预付运费冻结流水");
if (frozenBalanceZeroFlag) {
log.info("保证金账户需冻结金额为0,不产生流水");
continue;
}
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord(); OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(ownerName); prepaidFreight.setOwnerUserName(ownerName);
prepaidFreight.setMobile(mobile); prepaidFreight.setMobile(mobile);
...@@ -782,9 +804,9 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -782,9 +804,9 @@ 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();
if (StringUtils.equals(param.getOrderType(), "1")) { if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(param.getOrderType())) {
List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo); List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo);
if (null == list || list.size() != 2) { if (CollectionUtil.isEmpty(list)) {
log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param)); log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param));
return; return;
} }
...@@ -801,7 +823,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService { ...@@ -801,7 +823,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
entity.setFrozenBalance(runningWaterRecord.getAlterationBalance()); entity.setFrozenBalance(runningWaterRecord.getAlterationBalance());
flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now()); flag += ownerAccountDao.thawAccount(entity, LocalDateTime.now());
} }
if (flag == 2) { if (flag == list.size()) {
log.info("解冻预付运费、保证金账户,账户扣款已处理,开始执行插入相关流水"); log.info("解冻预付运费、保证金账户,账户扣款已处理,开始执行插入相关流水");
for (OwnerRunningWaterRecord runningWaterRecord : list) { for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType()); OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
......
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.config.MslAppConfig;
import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.ActionConstants;
import com.clx.performance.dao.ThirdPartRequestLogDao;
import com.clx.performance.encryption.oldmsl.PayEncryptTools;
import com.clx.performance.encryption.oldmsl.PrivateKeyConfig;
import com.clx.performance.encryption.oldmsl.SystemCodeEnum;
import com.clx.performance.enums.PayUnitTypeEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ThirdRequestTypeEnum;
import com.clx.performance.service.PaymentService;
import com.clx.performance.model.ThirdPartRequestLog;
import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayUnitDTO;
import com.clx.performance.param.pc.payment.PayUserDTO;
import com.clx.performance.service.ThirdPartRequestLogService;
import com.msl.common.dto.HttpDTO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil;
import com.msl.common.utils.HttpUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.security.GeneralSecurityException;
import java.util.UUID;
import static com.clx.performance.enums.HttpEnum.PERFORMANCE_PAY_CLX_PAYMENT;
@Service
@Slf4j
@AllArgsConstructor
public class PaymentServiceImpl implements PaymentService {
public static final String TRANSPORT_USER = "13403503399";
public static final String TRANSPORT_KEY = "9Y1N5AUP8N2TI359";
/** 转账回调地址 **/
public static final String NOTIFY_URL = "/clx-performance/payment/notify/userPayNotify";
@Autowired
private final MslPaymentConfig mslPaymentConfig;
@Autowired
ThirdPartRequestLogDao thirdPartRequestLogDao;
@Autowired
ThirdPartRequestLogService thirdPartRequestLogService;
/**
* 钱包直接划账给钱包
*
* @param payDTO
* @return
*/
@Override
public Result paymentWallet(PayParam payDTO) {
/** 构建支付单元 **/
PayUnitDTO payUnitDTO = PayUnitDTO.builder()
.id(payDTO.getTradeId().toString())
.from(payDTO.getFrom())
.to(payDTO.getTo())
.figure(payDTO.getFigure())
.type(PayUnitTypeEnum.RESIDUE_PAY.getCode())
.timestamp(System.currentTimeMillis() / 1000)
.remark(payDTO.getRemark()).build();
/** 生成签名**/
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);
/** 构建支付支付 ***/
PayUserDTO payUserDTO = PayUserDTO.builder()
.pwd(payDTO.getPwd())
.system(SystemCodeEnum.PERFORMANCE_SERVICE.getCode())
.userCode(payDTO.getFrom())
.orderNo(payDTO.getTradeNo())
.uuid(UUID.randomUUID().toString().replaceAll("-", ""))
.notifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_URL)
.payUnitDTO(payUnitDTO).build();
log.info("发起支付请求日志 {}", payUserDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "支付服务返回异常");
}
return notify;
}
/**
* post请求
*/
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public Result<?> postRequest(String requestUrl, String param) {
ThirdPartRequestLog log = ThirdPartRequestLog.builder()
.requestId(UUID.randomUUID().toString())
//应用编号 10000 默认诚联信
.appNo(Long.valueOf(10000))
.requestType(ThirdRequestTypeEnum.SEND.getCode())
.action(ActionConstants.CLX_PAYMENT_PAY)
.url(requestUrl)
.requestContent(param)
//状态: 0-请求中,1-成功,2-失败
.status(0)
.build();
thirdPartRequestLogDao.saveEntity(log);
return encryptPost(requestUrl, param, log.getId());
}
private Result<?> encryptPost(String url, String param, Integer httpLogId) {
try {
return HttpUtil.post(url, null,
EncryptUtil.buildDTO(TRANSPORT_USER, param, TRANSPORT_KEY, System.currentTimeMillis()))
.map(r -> JSON.parseObject(r, new TypeReference<HttpDTO>() {
}))
.peek(dto -> log.info("http请求返回------dto->{}", dto))
.mapTry(dto -> EncryptUtil.decrypt(dto.getData(), TRANSPORT_KEY))
.map(this::covertResult)
.peek(result -> thirdPartRequestLogService.updateResult(httpLogId, result))
.filter(Result::succeed)
.orElseThrow();
} catch (GeneralSecurityException e) {
log.error("解密失败", e);
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "http 请求异常");
}
}
private <T> Result<?> covertResult(String result) {
return JSON.parseObject(result, Result.class);
}
}
...@@ -2,7 +2,10 @@ package com.clx.performance.service.impl; ...@@ -2,7 +2,10 @@ package com.clx.performance.service.impl;
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.PayRemarkEnum;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.service.PaymentService;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.TempService; import com.clx.performance.service.TempService;
import com.clx.performance.service.settle.SettlementService; import com.clx.performance.service.settle.SettlementService;
...@@ -10,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -10,6 +13,8 @@ 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 java.util.UUID;
@Slf4j @Slf4j
@Service @Service
public class TempServiceImpl implements TempService { public class TempServiceImpl implements TempService {
...@@ -19,7 +24,8 @@ public class TempServiceImpl implements TempService { ...@@ -19,7 +24,8 @@ public class TempServiceImpl implements TempService {
@Autowired @Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao; private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private PaymentService paymentService;
@Override @Override
public void updateInvoiceType(String childNo, Integer invoiceType) { public void updateInvoiceType(String childNo, Integer invoiceType) {
...@@ -33,4 +39,20 @@ public class TempServiceImpl implements TempService { ...@@ -33,4 +39,20 @@ public class TempServiceImpl implements TempService {
settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode()); settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode());
} }
@Override
public void paymentTest(String fromUser, String toUser, String figure) {
PayParam noCheckPwd = PayParam.builder().from(
Integer.valueOf(fromUser))
.to(Integer.valueOf(toUser))
.figure(Integer.valueOf(figure))
.tradeNo(UUID.randomUUID().toString().replaceAll("-", ""))
.tradeId(12345)
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
paymentService.paymentWallet(noCheckPwd);
}
} }
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.performance.dao.ThirdPartRequestLogDao;
import com.clx.performance.enums.ThirdRequestStatusEnum;
import com.clx.performance.model.ThirdPartRequestLog;
import com.clx.performance.service.ThirdPartRequestLogService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class ThirdPartRequestLogServiceImpl implements ThirdPartRequestLogService {
@Autowired
ThirdPartRequestLogDao thirdPartRequestLogDao;
@Override
public void save(ThirdPartRequestLog log) {
thirdPartRequestLogDao.saveEntity(log);
}
@Override
public void updateResult(Integer logId, Result<?> result) {
thirdPartRequestLogDao.updateEntityByKey(new ThirdPartRequestLog()
.setId(logId)
.setResponseContent(JSON.toJSONString(result))
.setStatusCode(result.getCode())
.setStatus(result.succeed() ? ThirdRequestStatusEnum.SUCCESS.getCode() : ThirdRequestStatusEnum.FAIL.getCode()));
}
/**
* 修改重试次数
*
* @param logId
* @param retryTimes
*/
@Override
public void updateLogRetryTimes(Integer logId, Integer retryTimes) {
thirdPartRequestLogDao.updateLogRetryTimes(logId, retryTimes);
}
/**
* 根据id 查询
*
* @param id
*/
@Override
public Optional<ThirdPartRequestLog> getById(Integer id) {
return thirdPartRequestLogDao.getEntityByKey(id);
}
}
...@@ -250,7 +250,6 @@ public class TruckServiceImpl implements TruckService { ...@@ -250,7 +250,6 @@ public class TruckServiceImpl implements TruckService {
private Map<String,Integer> getTruckStatusMap(){ private Map<String,Integer> getTruckStatusMap(){
//查询平台所有车辆的出车状态信息 //查询平台所有车辆的出车状态信息
Result<List<TruckUseStatusVO>> result = userClxFeign.getPlatformTruckStatus(); Result<List<TruckUseStatusVO>> result = userClxFeign.getPlatformTruckStatus();
log.info("通过clx-user服务获取平台认证成功车辆出车状态列表,返回结果:{}", JSON.toJSONString(result));
if(!Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){ if(!Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"查询车辆出车状态信息失败"); throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"查询车辆出车状态信息失败");
......
...@@ -15,6 +15,7 @@ import com.clx.performance.model.breakcontract.BreakContractDriverRule; ...@@ -15,6 +15,7 @@ import com.clx.performance.model.breakcontract.BreakContractDriverRule;
import com.clx.performance.param.app.breakcontract.DriverPageBreakContractDriverRecordParam; import com.clx.performance.param.app.breakcontract.DriverPageBreakContractDriverRecordParam;
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractDriverRecordAddParam; import com.clx.performance.param.pc.breakcontract.carrier.BreakContractDriverRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractDriverRecordParam; import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractDriverRecordParam;
import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService; import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.breakcontract.BreakContractMqService; import com.clx.performance.service.breakcontract.BreakContractMqService;
import com.clx.performance.service.impl.UniqueOrderNumService; import com.clx.performance.service.impl.UniqueOrderNumService;
...@@ -57,6 +58,8 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive ...@@ -57,6 +58,8 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
private BreakContractMqService breakContractMqService; private BreakContractMqService breakContractMqService;
@Autowired @Autowired
private UniqueOrderNumService uniqueOrderNumService; private UniqueOrderNumService uniqueOrderNumService;
@Autowired
private IntegralRecordService integralRecordService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -101,6 +104,11 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive ...@@ -101,6 +104,11 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
// 发送mq (违约记录新增) // 发送mq (违约记录新增)
breakContractMqService.driverRecordAdd(record.getId()); breakContractMqService.driverRecordAdd(record.getId());
// 保存平台补偿积分
if (Objects.equals(param.getBreakContractPartyType(), BreakContractRecordEnum.BreakContractPartyType.PLATFORM.getCode())) {
integralRecordService.addPlatformCompensationRecord(record.getTruckNo());
}
} }
@Override @Override
...@@ -265,7 +273,7 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive ...@@ -265,7 +273,7 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
private BigDecimal arriveSendAddressFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){ private BigDecimal arriveSendAddressFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderGoods.getLastArriveSendTime(), orderChild.getArriveSendTime()); long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderGoods.getLastArriveSendTime(), orderChild.getArriveSendTime());
BigDecimal money = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(3600), 0, RoundingMode.HALF_UP).multiply(rule.getSendAddressRule().getFigurePerHour()); BigDecimal money = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(3600), 2, RoundingMode.HALF_UP).multiply(rule.getSendAddressRule().getFigurePerHour()).setScale(2, RoundingMode.HALF_UP);
return money.movePointRight(2); return money.movePointRight(2);
} }
......
...@@ -55,10 +55,11 @@ public class BreakContractOwnerRuleServiceImpl implements BreakContractOwnerRul ...@@ -55,10 +55,11 @@ public class BreakContractOwnerRuleServiceImpl implements BreakContractOwnerRul
autoRule.setOrderCancelRule(new BreakContractOwnerRuleVO.OrderCancelRule()); autoRule.setOrderCancelRule(new BreakContractOwnerRuleVO.OrderCancelRule());
autoRule.setOrderAmountReduceRule(new BreakContractOwnerRuleVO.OrderAmountReduceRule()); autoRule.setOrderAmountReduceRule(new BreakContractOwnerRuleVO.OrderAmountReduceRule());
autoRule.getOrderAmountReduceRule().setRatio(new BigDecimal(param.getRule().get("A-a")).movePointLeft(2)); autoRule.getOrderAmountReduceRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-a")).movePointLeft(2));
autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-b")).movePointLeft(2)); autoRule.getOrderAmountReduceRule().setAfterRatio(new BigDecimal(param.getRule().get("A-b")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-c")).movePointLeft(2)); autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-c")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-d")).movePointLeft(2)); autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-d")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-e")));
rule.setAutoRuleJson(JSON.toJSONString(autoRule)); rule.setAutoRuleJson(JSON.toJSONString(autoRule));
breakContractOwnerRuleDao.saveEntity(rule); breakContractOwnerRuleDao.saveEntity(rule);
......
...@@ -54,9 +54,10 @@ public class BreakContractSettlementDriverDetailServiceImpl implements BreakCon ...@@ -54,9 +54,10 @@ public class BreakContractSettlementDriverDetailServiceImpl implements BreakCon
List<ExcelField> fieldList = new ArrayList<>(); List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000)); fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "违约单号", "breakNo", 5000)); fieldList.add(new ExcelField(1, "违约单号", "breakNo", 5000));
fieldList.add(new ExcelField(2, "车主编码", "truckOwnUserNo", 5000)); fieldList.add(new ExcelField(2, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(3, "车主名称", "truckOwnUserName", 5000)); fieldList.add(new ExcelField(3, "车主编码", "truckOwnUserNo", 5000));
fieldList.add(new ExcelField(4, "运单编号", "childNo", 5000)); fieldList.add(new ExcelField(4, "车主名称", "truckOwnUserName", 5000));
fieldList.add(new ExcelField(5, "司机名称", "driverName", 5000)); fieldList.add(new ExcelField(5, "司机名称", "driverName", 5000));
fieldList.add(new ExcelField(6, "违约方", "breakContractPartyType", 5000)); fieldList.add(new ExcelField(6, "违约方", "breakContractPartyType", 5000));
...@@ -74,9 +75,10 @@ public class BreakContractSettlementDriverDetailServiceImpl implements BreakCon ...@@ -74,9 +75,10 @@ public class BreakContractSettlementDriverDetailServiceImpl implements BreakCon
rowData.add(new ExcelData(i+1)); rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getBreakNo())); rowData.add(new ExcelData(dto.getBreakNo()));
rowData.add(new ExcelData(dto.getChildNo()));
rowData.add(new ExcelData(dto.getTruckOwnUserNo()+"")); rowData.add(new ExcelData(dto.getTruckOwnUserNo()+""));
rowData.add(new ExcelData(dto.getTruckOwnName())); rowData.add(new ExcelData(dto.getTruckOwnName()));
rowData.add(new ExcelData(dto.getChildNo()));
rowData.add(new ExcelData(dto.getDriverName())); rowData.add(new ExcelData(dto.getDriverName()));
rowData.add(new ExcelData(dto.getBreakContractPartyTypeMsg())); rowData.add(new ExcelData(dto.getBreakContractPartyTypeMsg()));
......
...@@ -57,15 +57,16 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe ...@@ -57,15 +57,16 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
fieldList.add(new ExcelField(1, "结算单号", "settlementNo", 5000)); fieldList.add(new ExcelField(1, "结算单号", "settlementNo", 5000));
fieldList.add(new ExcelField(2, "运单编号", "childNo", 5000)); fieldList.add(new ExcelField(2, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(3, "车主编号", "truckOwnerNo", 5000)); fieldList.add(new ExcelField(3, "车主编号", "truckOwnerNo", 5000));
fieldList.add(new ExcelField(4, "车主名称", "truckOwnerName", 5000));
fieldList.add(new ExcelField(4, "司机名称", "driverName", 5000)); fieldList.add(new ExcelField(5, "司机名称", "driverName", 5000));
fieldList.add(new ExcelField(5, "违约方", "breakContractPartyType", 5000)); fieldList.add(new ExcelField(6, "违约方", "breakContractPartyType", 5000));
fieldList.add(new ExcelField(6, "违约金额", "figure", 5000)); fieldList.add(new ExcelField(7, "违约金额", "figure", 5000));
fieldList.add(new ExcelField(7, "创建人", "createName", 5000)); fieldList.add(new ExcelField(8, "创建人", "createName", 5000));
fieldList.add(new ExcelField(8, "创建时间", "createTime", 5000)); fieldList.add(new ExcelField(9, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(9, "结算平台", "settlePlatform", 5000)); fieldList.add(new ExcelField(10, "结算平台", "settlePlatform", 5000));
fieldList.add(new ExcelField(9, "结算状态", "settleStatus", 5000)); fieldList.add(new ExcelField(11, "结算状态", "settleStatus", 5000));
fieldList.add(new ExcelField(9, "结算时间", "settleTime", 5000)); fieldList.add(new ExcelField(12, "结算时间", "settleTime", 5000));
// 组装数据 // 组装数据
List<List<ExcelData>> dataList = new ArrayList<>(); List<List<ExcelData>> dataList = new ArrayList<>();
...@@ -78,6 +79,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe ...@@ -78,6 +79,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
rowData.add(new ExcelData(dto.getSettlementNo())); rowData.add(new ExcelData(dto.getSettlementNo()));
rowData.add(new ExcelData(dto.getChildNo())); rowData.add(new ExcelData(dto.getChildNo()));
rowData.add(new ExcelData(dto.getTruckOwnUserNo()+"")); rowData.add(new ExcelData(dto.getTruckOwnUserNo()+""));
rowData.add(new ExcelData(dto.getTruckOwnName()));
rowData.add(new ExcelData(dto.getDriverName())); rowData.add(new ExcelData(dto.getDriverName()));
rowData.add(new ExcelData(dto.getBreakContractPartyTypeMsg())); rowData.add(new ExcelData(dto.getBreakContractPartyTypeMsg()));
......
...@@ -9,6 +9,7 @@ import com.clx.order.feign.OrderFeign; ...@@ -9,6 +9,7 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO; import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRecordDao; import com.clx.performance.dao.breakcontract.BreakContractOwnerRecordDao;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRuleDao; import com.clx.performance.dao.breakcontract.BreakContractOwnerRuleDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao;
...@@ -17,6 +18,7 @@ import com.clx.performance.dao.settle.SettlementPlatformAccountDao; ...@@ -17,6 +18,7 @@ import com.clx.performance.dao.settle.SettlementPlatformAccountDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.extranal.order.QuotationService; import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord; import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.model.breakcontract.BreakContractOwnerRule; import com.clx.performance.model.breakcontract.BreakContractOwnerRule;
import com.clx.performance.model.breakcontract.BreakContractSettlementLog; import com.clx.performance.model.breakcontract.BreakContractSettlementLog;
...@@ -80,6 +82,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -80,6 +82,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
private final QuotationService quotationService; private final QuotationService quotationService;
private final BreakContractOwnerRecordService breakContractOwnerRecordService; private final BreakContractOwnerRecordService breakContractOwnerRecordService;
private final BreakContractOwnerRecordDao breakContractOwnerRecordDao; private final BreakContractOwnerRecordDao breakContractOwnerRecordDao;
private final OrderGoodsDao orderGoodsDao;
...@@ -271,6 +275,12 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -271,6 +275,12 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
param.setStatus(BreakContractSettlementOwnerEnum.Status.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode()); param.setStatus(BreakContractSettlementOwnerEnum.Status.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode());
breakContractSettlementOwnerDao.saveCarrierBreakContractPayee(param); breakContractSettlementOwnerDao.saveCarrierBreakContractPayee(param);
BreakContractOwnerRecord record = new BreakContractOwnerRecord();
record.setSettlementNo(settlementOwner.getSettlementNo());
record.setPayStatus(BreakContractOwnerRecordEnum.PayStatus.YES.getCode());
record.setPayTime(LocalDateTime.now());
breakContractOwnerRecordDao.uploadPayTime(record);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----货主付款 //保存结算单日志----货主付款
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(), breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
...@@ -308,6 +318,16 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -308,6 +318,16 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
return ; return ;
} }
//违约金方案
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(param.getLiquidatedDamagesPlanId())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(ownerRule.getStatus(),2)){
throw new ServiceSystemException(PerformanceResultEnum.BREAK_CONTRACT_RULE_NO_FOUND);
}
String autoRuleJson = ownerRule.getAutoRuleJson();//系统自动违规
BreakContractOwnerRuleVO.AutoRule autoRule = JSONObject.parseObject(autoRuleJson, BreakContractOwnerRuleVO.AutoRule.class);
BreakContractOwnerRuleVO.OrderAmountReduceRule reduceRule = autoRule.getOrderAmountReduceRule();//订单吨数减少规则
//运单状态(不包括取消) //运单状态(不包括取消)
List<Integer> statusList = Arrays.asList( List<Integer> statusList = Arrays.asList(
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(), new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
...@@ -316,15 +336,29 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -316,15 +336,29 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()}); OrderChildEnum.Status.UNSETTLE.getCode()});
BigDecimal totalFreight ;//总费用 BigDecimal figure ;//总费用
//订单号查询货单
List<OrderGoods> orderGoods = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
if(CollectionUtils.isEmpty(orderGoods)){
BigDecimal totalFreight = param.getTransportWeight().multiply(param.getValidFreightPrice());
figure = totalFreight.multiply(reduceRule.getBeforeRatio()).multiply(param.getWeight())
.divide(param.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
}else{
List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(param.getOrderNo(), statusList); List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(param.getOrderNo(), statusList);
if(CollectionUtils.isEmpty(orderChilds)){ if(CollectionUtils.isEmpty(orderChilds)){
totalFreight = param.getTransportWeight().multiply(param.getValidFreightPrice()); BigDecimal totalFreight = param.getTransportWeight().multiply(param.getValidFreightPrice());
figure = totalFreight.multiply(reduceRule.getAfterRatio()).multiply(param.getWeight())
.divide(param.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
}else{ }else{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量 BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用 BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用
for(OrderChild orderChild : orderChilds){ for(OrderChild orderChild : orderChilds){
if(orderChild.getLoadNet() != null){ if(orderChild.getLoadNet() == null){
deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ; deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight())); deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight()));
}else{ }else{
...@@ -335,25 +369,15 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -335,25 +369,15 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
} }
BigDecimal noTransitWeight = param.getTransportWeight().subtract(deliveredWeight);//未拉运的重量 BigDecimal noTransitWeight = param.getTransportWeight().subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(param.getValidFreightPrice());//未拉运的费用 BigDecimal noTransitFreight = noTransitWeight.multiply(param.getValidFreightPrice());//未拉运的费用
totalFreight = deliveredFreight.add(noTransitFreight); BigDecimal totalFreight = deliveredFreight.add(noTransitFreight);
figure = totalFreight.multiply(reduceRule.getAfterRatio()).multiply(param.getWeight())
.divide(param.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
} }
//违约金方案
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(param.getLiquidatedDamagesPlanId())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(ownerRule.getStatus(),2)){
throw new ServiceSystemException(PerformanceResultEnum.BREAK_CONTRACT_RULE_NO_FOUND);
} }
String autoRuleJson = ownerRule.getAutoRuleJson();//系统自动违规
BreakContractOwnerRuleVO.AutoRule autoRule = JSONObject.parseObject(autoRuleJson, BreakContractOwnerRuleVO.AutoRule.class);
BreakContractOwnerRuleVO.OrderAmountReduceRule reduceRule = autoRule.getOrderAmountReduceRule();//订单吨数减少规则
BigDecimal ratio = reduceRule.getRatio();//比例
//组装参数 生成违约记录 违约计费 违约结算单 //组装参数 生成违约记录 违约计费 违约结算单
BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam(); BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam();
ownerRecordAddParam.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode()); ownerRecordAddParam.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode());
BigDecimal figure = totalFreight.multiply(ratio).multiply(param.getWeight())
.divide(param.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
ownerRecordAddParam.setFigure(figure); ownerRecordAddParam.setFigure(figure);
ownerRecordAddParam.setOrderNo(param.getOrderNo()); ownerRecordAddParam.setOrderNo(param.getOrderNo());
ownerRecordAddParam.setRemark("下调吨数产生违约"); ownerRecordAddParam.setRemark("下调吨数产生违约");
...@@ -383,13 +407,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -383,13 +407,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
} }
@Override @Override
public void saveSettlementOwnerForCancelOrder(String orderNo) { public void saveSettlementOwnerForCancelOrder(BigDecimal transportWeight,BigDecimal validFreightPrice,String orderNo,Integer cancelType) {
//获取订单信息
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfoFeign)){
log.info("货主取消保存违约结算单获取订单数据为空");
return;
}
//获取订单配置的违约金方案 //获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
...@@ -408,28 +426,45 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -408,28 +426,45 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
BreakContractOwnerRuleVO.AutoRule autoRule = JSONObject.parseObject(autoRuleJson, BreakContractOwnerRuleVO.AutoRule.class); BreakContractOwnerRuleVO.AutoRule autoRule = JSONObject.parseObject(autoRuleJson, BreakContractOwnerRuleVO.AutoRule.class);
BreakContractOwnerRuleVO.OrderCancelRule orderCancelRule = autoRule.getOrderCancelRule();//订单取消规则 BreakContractOwnerRuleVO.OrderCancelRule orderCancelRule = autoRule.getOrderCancelRule();//订单取消规则
//运单状态(不包括取消) //运单状态(包括货主取消)
List<Integer> statusList = Arrays.asList( //运单状态(包括货主取消)
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(), List<Integer> statusList = new ArrayList<>();
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(), statusList.add(OrderChildEnum.Status.CREATED.getCode());
OrderChildEnum.Status.LOAD.getCode(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode(), statusList.add(OrderChildEnum.Status.PAY.getCode());
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(), statusList.add(OrderChildEnum.Status.GO_TO_SEND.getCode());
OrderChildEnum.Status.UNSETTLE.getCode()}); statusList.add(OrderChildEnum.Status.ARRIVE_SEND.getCode());
statusList.add(OrderChildEnum.Status.LOAD.getCode());
statusList.add(OrderChildEnum.Status.GO_TO_RECEIVE.getCode());
statusList.add(OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
statusList.add(OrderChildEnum.Status.UNLOAD.getCode());
statusList.add(OrderChildEnum.Status.UNSETTLE.getCode());
//由于已经更新了订单状态为货主取消了
if(Objects.equals(cancelType,CancelOrderEnum.Type.NOT_ARRIVE.getCode())){
statusList.add(OrderChildEnum.Status.OWNER_CANCEL.getCode());
}
BigDecimal figure ;//总费用 BigDecimal figure ;//总费用
//订单号查询货单
List<OrderGoods> orderGoods = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if(CollectionUtils.isEmpty(orderGoods)){
figure = transportWeight.multiply(validFreightPrice).multiply(orderCancelRule.getBeforeRatio());
}else{
List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(orderNo, statusList); List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(orderNo, statusList);
LocalDateTime now = LocalDateTime.now();//当前时间
//没有司机拉运 //没有司机拉运
if(CollectionUtils.isEmpty(orderChilds)){ if(CollectionUtils.isEmpty(orderChilds)){
figure = orderInfoFeign.getTransportWeight().multiply(orderInfoFeign.getValidFreightPrice()).multiply(orderCancelRule.getBeforeRatio()); figure = transportWeight.multiply(validFreightPrice).multiply(orderCancelRule.getAfterRatio());
}else{ }else{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量 BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal cancelWeight = BigDecimal.ZERO;//可取消的重量 BigDecimal cancelWeight = BigDecimal.ZERO;//可取消的重量
BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用 BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用
BigDecimal seconds = BigDecimal.ZERO;//总毫秒数 BigDecimal seconds = BigDecimal.ZERO;//总毫秒数
for(OrderChild orderChild : orderChilds){ for(OrderChild orderChild : orderChilds){
if(orderChild.getLoadNet() != null){ if(orderChild.getLoadNet() == null){
deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ; deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight())); deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight()));
}else{ }else{
...@@ -437,23 +472,37 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -437,23 +472,37 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getLoadNet())); deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getLoadNet()));
} }
if(Objects.equals(cancelType,CancelOrderEnum.Type.NOT_ARRIVE.getCode())){
if(Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.OWNER_CANCEL.getCode())) {
cancelWeight = cancelWeight.add(orderChild.getWeight());
seconds = seconds.add(new BigDecimal(LocalDateTimeUtils.getSecondsDiff(orderChild.getPayTime(),orderChild.getCancelTime())));
}
}else{
if(Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.CREATED.getCode()) if(Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.PAY.getCode()) || Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.GO_TO_SEND.getCode())) { || Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.GO_TO_SEND.getCode())) {
cancelWeight = cancelWeight.add(orderChild.getWeight()); cancelWeight = cancelWeight.add(orderChild.getWeight());
seconds = seconds.add(new BigDecimal(LocalDateTimeUtils.getSecondsDiff(orderChild.getPayTime(),now))); }
} }
} }
BigDecimal noTransitWeight = orderInfoFeign.getTransportWeight().subtract(deliveredWeight);//未拉运的重量 BigDecimal noTransitWeight = transportWeight.subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(orderInfoFeign.getValidFreightPrice());//未拉运的费用 BigDecimal noTransitFreight = noTransitWeight.multiply(validFreightPrice);//未拉运的费用
BigDecimal totalFreight = deliveredFreight.add(noTransitFreight); BigDecimal totalFreight = deliveredFreight.add(noTransitFreight);//总运费
BigDecimal baseFigure = totalFreight.multiply(orderCancelRule.getAfterRatio()).multiply(cancelWeight) BigDecimal baseFigure = totalFreight.multiply(orderCancelRule.getAfterRatio()).multiply(cancelWeight)
.divide(orderInfoFeign.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP); .divide(transportWeight,2, BigDecimal.ROUND_HALF_UP);//基础违约金
BigDecimal truckFigure = seconds.multiply(orderCancelRule.getAfterFigurePerHour())
.divide(new BigDecimal(60),2, BigDecimal.ROUND_HALF_UP); //挂单后,车辆违约金
BigDecimal truckFigure = BigDecimal.ZERO;
if(Objects.equals(cancelType,CancelOrderEnum.Type.NOT_ARRIVE.getCode())){
truckFigure = seconds.multiply(orderCancelRule.getAfterFigurePerHour())
.divide(new BigDecimal(3600),2, BigDecimal.ROUND_HALF_UP).movePointRight(2);
}
figure = baseFigure.add(truckFigure); figure = baseFigure.add(truckFigure);
} }
}
//组装参数 生成违约记录 违约计费 违约结算单 //组装参数 生成违约记录 违约计费 违约结算单
BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam(); BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam();
......
package com.clx.performance.service.impl.integral;
import com.alibaba.fastjson.JSON;
import com.clx.performance.dao.integral.IntegralRuleDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.integral.IntegralRule;
import com.clx.performance.param.pc.integral.IntegralRuleUpdateParam;
import com.clx.performance.service.integral.IntegralRuleService;
import com.clx.performance.vo.pc.integral.AppIntegralRuleVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class IntegralRuleServiceImpl implements IntegralRuleService {
@Autowired
private IntegralRuleDao integralRuleDao;
@Override
public void updateRule(IntegralRuleUpdateParam param) {
IntegralRule rule = integralRuleDao.getEntityByKey(1).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
rule.setOrderChildCompleteRuleJson(JSON.toJSONString(param.getOrderChildCompleteRule()));
rule.setOrderAwardRuleJson(JSON.toJSONString(param.getOrderAwardRule()));
rule.setOrderDiscountRuleJson(JSON.toJSONString(param.getOrderDiscountRule()));
rule.setOrderChildTimeoutRuleJson(JSON.toJSONString(param.getOrderChildTimeoutRule()));
rule.setPlatformCompensationRuleJson(JSON.toJSONString(param.getPlatformCompensationRule()));
rule.setDriverReportRuleJson(JSON.toJSONString(param.getDriverReportRule()));
integralRuleDao.update(rule);
}
@Override
public AppIntegralRuleVO getRuleInfo() {
IntegralRule rule = integralRuleDao.getEntityByKey(1).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
AppIntegralRuleVO vo = new AppIntegralRuleVO();
vo.setOrderChildCompleteRule(JSON.parseObject(rule.getOrderChildCompleteRuleJson(), AppIntegralRuleVO.OrderChildCompleteRule.class));
vo.setOrderAwardRule(JSON.parseObject(rule.getOrderAwardRuleJson(), AppIntegralRuleVO.OrderAwardRule.class));
vo.setOrderChildCancelRule(JSON.parseObject(rule.getOrderDiscountRuleJson(), AppIntegralRuleVO.OrderChildCancelRule.class));
vo.setOrderChildTimeoutRule(JSON.parseObject(rule.getOrderChildTimeoutRuleJson(), AppIntegralRuleVO.OrderChildTimeoutRule.class));
vo.setPlatformCompensationRule(JSON.parseObject(rule.getPlatformCompensationRuleJson(), AppIntegralRuleVO.PlatformCompensationRule.class));
vo.setDriverReportRule(JSON.parseObject(rule.getDriverReportRuleJson(), AppIntegralRuleVO.DriverReportRule.class));
return vo;
}
}
package com.clx.performance.service.integral;
import com.clx.performance.param.pc.integral.IntegralRuleUpdateParam;
import com.clx.performance.vo.pc.integral.AppIntegralRuleVO;
public interface IntegralRuleService {
void updateRule(IntegralRuleUpdateParam param);
AppIntegralRuleVO getRuleInfo();
}
...@@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL; import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -126,20 +127,64 @@ public class OrderChildSqlProvider { ...@@ -126,20 +127,64 @@ public class OrderChildSqlProvider {
} }
public String batchUpdateOrderChildStatus(@Param(value ="status") Integer status, @Param(value = "ids") List<Integer> ids ){ public String batchUpdateOrderChildStatus(@Param(value ="status") Integer status, @Param(value ="remark") String remark,
@Param(value = "cancelTime") String cancelTime, @Param(value = "finishTime") String finishTime,
@Param(value = "childNoList") List<String> childNoList ){
StringBuffer sqlList = new StringBuffer(); StringBuffer sqlList = new StringBuffer();
sqlList.append("update order_child set status = " + status + " where id in ("); sqlList.append("update order_child set cancel_remark = '"+ remark +"' ,status = " + status + ",cancel_time = '"
for (int i = 0; i < ids.size(); i++) { + cancelTime +"',finish_time = '" + finishTime + "' where child_no in (");
Integer id = ids.get(i); for (int i = 0; i < childNoList.size(); i++) {
String childNo = childNoList.get(i);
sqlList.append("'").append(id).append("'"); sqlList.append("'").append(childNo).append("'");
if (i < ids.size() - 1) { if (i < childNoList.size() - 1) {
sqlList.append(","); sqlList.append(",");
} }
} }
sqlList.append(")"); sqlList.append(")");
return sqlList.toString(); return sqlList.toString();
} }
public String findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo) {
String sql = "select child_no,goods_name,freight_price," +
"send_address,receive_address," +
"driver_user_no, driver_name,driver_mobile," +
"truck_no," +
"unload_pound_no,weight," +
"cancel_remark," +
"pound_status,status," +
"date_format(load_deadline, '%Y-%m-%d %H:%i:%s') as loadDeadline," +
"date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime," +
"date_format(unload_time, '%Y-%m-%d %H:%i:%s') as unloadTime from order_child where child_no = #{orderChildNo}";
sql += " and status >="+ OrderChildEnum.Status.LOAD.getCode();
sql += " and status <="+ OrderChildEnum.Status.COMPLETE.getCode();
return sql;
}
public String orderChildCancelRecord(@Param("page") Page<OrderChildVO> page) {
return new SQL(){{
SELECT("child_no,goods_name,freight_price," +
"send_address,receive_address," +
"driver_user_no, driver_name,driver_mobile," +
"truck_no," +
"unload_pound_no,weight," +
"cancel_remark,order_no," +
"pound_status,status," +
"date_format(load_deadline, '%Y-%m-%d %H:%i:%s') as loadDeadline," +
"date_format(load_deadline, '%Y-%m-%d %H:%i:%s') as loadDeadline," +
"date_format(cancel_time, '%Y-%m-%d %H:%i:%s') as cancelTime "
);
FROM("order_child ");
WHERE("status in (" + StringUtils.join(OrderChildEnum.CANCEL_lIST, ",")+")");
ORDER_BY("create_time desc");
}}.toString();
}
} }
...@@ -36,7 +36,7 @@ public class OrderGoodsSqlProvider { ...@@ -36,7 +36,7 @@ public class OrderGoodsSqlProvider {
" date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," + " date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," +
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," + " date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," + "a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," +
"a.user_no,a.user_name,a.stop_flag,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time"); "a.user_no,a.user_name,a.stop_flag,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time,a.vehicle_usage");
FROM("order_goods a"); FROM("order_goods a");
if (StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime())) { if (StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime())) {
...@@ -177,7 +177,7 @@ public class OrderGoodsSqlProvider { ...@@ -177,7 +177,7 @@ public class OrderGoodsSqlProvider {
public String updateOrderGoodsSetAlreadyWeight(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="id") Integer id){ public String updateOrderGoodsSetAlreadyWeight(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="id") Integer id){
String sql = new SQL() {{ String sql = new SQL() {{
UPDATE("order_goods") UPDATE("order_goods")
.SET("already_transport_weight = already_transport_weight - #{residueWeight}") .SET("already_transport_weight = already_transport_weight - #{alreadyWeight}")
.WHERE("id = #{id}"); .WHERE("id = #{id}");
}}.toString(); }}.toString();
...@@ -237,7 +237,6 @@ public class OrderGoodsSqlProvider { ...@@ -237,7 +237,6 @@ public class OrderGoodsSqlProvider {
.SET("pending_order_freight = #{params.pendingOrderFreight}") .SET("pending_order_freight = #{params.pendingOrderFreight}")
.SET("user_no = #{params.userNo}") .SET("user_no = #{params.userNo}")
.SET("user_name = #{params.userName}") .SET("user_name = #{params.userName}")
.SET("batch_number = #{params.batchNumber}")
.WHERE("id = #{params.id}"); .WHERE("id = #{params.id}");
}}.toString(); }}.toString();
...@@ -247,9 +246,9 @@ public class OrderGoodsSqlProvider { ...@@ -247,9 +246,9 @@ public class OrderGoodsSqlProvider {
public String updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value ="residueWeight") BigDecimal residueWeight, @Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="status") Integer status,@Param(value ="id") Integer id){ public String updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value ="residueWeight") BigDecimal residueWeight, @Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="status") Integer status,@Param(value ="id") Integer id){
String sql = new SQL() {{ String sql = new SQL() {{
UPDATE("order_goods") UPDATE("order_goods")
.SET("residue_transport_weight = residue_transport_weight - #{residueWeight}") .SET("residue_transport_weight = residue_transport_weight + #{residueWeight}")
.SET("already_transport_weight = already_transport_weight - #{alreadyWeight}") .SET("already_transport_weight = already_transport_weight - #{alreadyWeight}")
.SET("status = #{status}") .SET("order_goods_status = #{status}")
.WHERE("id = #{id}"); .WHERE("id = #{id}");
...@@ -257,4 +256,34 @@ public class OrderGoodsSqlProvider { ...@@ -257,4 +256,34 @@ public class OrderGoodsSqlProvider {
return sql; return sql;
} }
public String getCancelOrderGoods(@Param("param") List<String> param) {
StringBuffer sqlList = new StringBuffer();
sqlList.append(" select a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" if(a.residue_transport_weight < 0, '0', a.residue_transport_weight) as residue_transport_weight ,a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
" date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time ," +
" date_format(a.last_arrive_send_time, '%Y-%m-%d %H:%i:%s') as last_arrive_send_time ," +
" date_format(a.pending_order_time, '%Y-%m-%d %H:%i:%s') as pending_order_time," +
" date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," +
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," +
"a.user_no,a.user_name,a.stop_flag,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time,a.vehicle_usage,ab.truck_no as truckNo"
+ " from order_goods a left join order_goods_truck_bind ab on ab.order_goods_no = a.order_goods_no where ab.truck_no in (");
if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) {
sqlList.append("'" + param.get(i) + "'");
if (i < param.size() -1) {
sqlList.append(",");
}
}
}
sqlList.append(") order by ab.create_time desc");
return sqlList.toString();
}
} }
package com.clx.performance.sqlProvider; package com.clx.performance.sqlProvider;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoodsTruckBind; import com.clx.performance.model.OrderGoodsTruckBind;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -14,7 +15,7 @@ public class OrderGoodsTruckBindSqlProvider { ...@@ -14,7 +15,7 @@ public class OrderGoodsTruckBindSqlProvider {
for (int i = 0; i < trackList.size(); i++) { for (int i = 0; i < trackList.size(); i++) {
String truckNo = trackList.get(i); String truckNo = trackList.get(i);
sqlList.append(" ('").append(orderNo).append("','").append(orderGoodsNo).append("','").append(truckNo).append("','") sqlList.append(" ('").append(orderNo).append("','").append(orderGoodsNo).append("','").append(truckNo).append("','")
.append(now).append("','").append(now).append("','").append(OrderGoodsTruckBind.Status.NORMAL.getCode()) .append(now).append("','").append(now).append("','").append(OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.append("')"); .append("')");
if (i < trackList.size() - 1) { if (i < trackList.size() - 1) {
sqlList.append(","); sqlList.append(",");
......
...@@ -219,9 +219,9 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial ...@@ -219,9 +219,9 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli); log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli); log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli)); message.getMessageProperties().setHeader("x-delay", epochMilli);
rabbitTemplate.send( rabbitTemplate.send(
RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY, message RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY, message
); );
} }
} }
......
...@@ -233,9 +233,9 @@ public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements Initi ...@@ -233,9 +233,9 @@ public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements Initi
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli); log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli); log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli)); message.getMessageProperties().setHeader("x-delay", epochMilli);
rabbitTemplate.send( rabbitTemplate.send(
RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY, message RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY, message
); );
} }
} }
......
...@@ -251,9 +251,9 @@ public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements Initial ...@@ -251,9 +251,9 @@ public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli); log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli); log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli)); message.getMessageProperties().setHeader("x-delay", epochMilli);
rabbitTemplate.send( rabbitTemplate.send(
RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY, message RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY, message
); );
} }
} }
......
...@@ -46,7 +46,7 @@ public class GdService { ...@@ -46,7 +46,7 @@ public class GdService {
public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude, public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) { BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
log.info("高德线路规划开始"); //log.info("高德线路规划开始");
List<GdRouteDTO> routeList = new ArrayList<>(); List<GdRouteDTO> routeList = new ArrayList<>();
String url = DIRECTION_API+"?origin=" + originLongitude.doubleValue()+","+originLatitude.doubleValue() String url = DIRECTION_API+"?origin=" + originLongitude.doubleValue()+","+originLatitude.doubleValue()
...@@ -154,7 +154,7 @@ public class GdService { ...@@ -154,7 +154,7 @@ public class GdService {
// 按距离升序 // 按距离升序
routeList.sort(Comparator.comparingInt(GdRouteDTO::getDistance)); routeList.sort(Comparator.comparingInt(GdRouteDTO::getDistance));
log.info("高德线路规划结束, route:{}", routeList.size()); //log.info("高德线路规划结束, route:{}", routeList.size());
return routeList; return routeList;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论