提交 8090bfdb authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into…

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into v6.2_sync_trade_20231102
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 {
DRIVER_CANCEL(110, "司机取消"),
PLATFORM_CANCEL(111, "承运取消"),
OWNER_CANCEL(112, "货主取消"),
ARTIFICIAL_CANCEL(113, "客服取消"),
//
// OWNER_CONFIRM(50, "货主确认车辆"),//货主确认车辆
......
......@@ -4,9 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
public enum OrderGoodsTruckBindEnum {
;
......@@ -15,11 +13,12 @@ public enum OrderGoodsTruckBindEnum {
@AllArgsConstructor
public enum Status {
SUCCESS(1, "正常"),
NORMAL(1, "正常"),
CANCEL(2, "取消"),
GET(3, "已接单"),
EXPIRE(4, "已失效")
EXPIRE(4, "已失效"),
SUCCESS(5, "结束")
;
......
......@@ -55,7 +55,27 @@ public enum OwnerAccountEnum {
;
private final Integer code;
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
......
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;
}
......@@ -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.UpdateStatusParam;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -84,4 +85,7 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/orderChild/selectInTransitOrderChild"})
Result<Boolean> selectInTransitOrderChild(@RequestParam("orderNo") String orderNo);
@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 com.msl.common.convertor.type.MoneyInConvert;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -48,6 +50,7 @@ public class OrderGoodsEditParams {
private Integer needTruckNum;
@ApiModelProperty("挂单运费")
@MoneyInConvert
private BigDecimal pendingOrderFreight;
@ApiModelProperty("创建人用户编号")
......
......@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
......@@ -32,6 +34,8 @@ public class BreakContractDriverRecordAddParam {
@ApiModelProperty("违约金")
@NotNull(message = "违约金不能为空")
@Max(value = 999_999_999L, message = "金额不能超过999999999元")
@Min(value = 0L, message = "金额不能小于0元")
@MoneyInConvert
private BigDecimal figure;
......
......@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
......@@ -32,6 +34,8 @@ public class BreakContractOwnerRecordAddParam {
@ApiModelProperty("违约金")
@NotNull(message = "违约金不能为空")
@Max(value = 999_999_999L, message = "金额不能超过999999999元")
@Min(value = 0L, message = "金额不能小于0元")
@MoneyInConvert
private BigDecimal figure;
......
......@@ -16,5 +16,5 @@ public class ThawAccountParam {
private String orderNo;
// 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;
}
......@@ -105,5 +105,7 @@ public class OrderGoodsAPPVO {
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("车牌号")
private String truckNo;
}
\ No newline at end of file
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 lombok.Data;
......@@ -11,9 +13,12 @@ public class OrderGoodsEditVO {
@ApiModelProperty("订单编号")
private String orderNo;
@ApiModelProperty("拉运结束时间")
private String transportEndTime;
@ApiModelProperty("拉运吨数")
private BigDecimal transportWeight;
@ApiModelProperty("有效运费")
@MoneyOutConvert
private BigDecimal validFreightPrice;
@ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆")
private Integer truckDemand;
......@@ -38,5 +43,7 @@ public class OrderGoodsEditVO {
@ApiModelProperty("1:可以全部编辑 0:不能全部编辑")
private boolean editAllFlag;
@ApiModelProperty("货单数据")
@Converted(isDynamic = false)
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 {
@ToString
@NoArgsConstructor
public static class OrderAmountReduceRule {
@ApiModelProperty(value = "总运费*X%", example = "1.23")
private BigDecimal ratio;
@ApiModelProperty(value = "挂单前:总运费*X%", example = "1.23")
private BigDecimal beforeRatio;
@ApiModelProperty(value = "挂单后:总运费*X%", example = "1.23")
private BigDecimal afterRatio;
}
@Getter
......
......@@ -3,6 +3,8 @@ package com.clx.performance.component;
import cn.hutool.core.util.StrUtil;
import com.clx.performance.constant.RedisConstants;
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.msl.common.base.Optional;
import lombok.AllArgsConstructor;
......@@ -23,6 +25,8 @@ public class GoodsOrderTruckRecordComponent {
private final OrderGoodsDriverTruckDao orderGoodsDriverTruckDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
public void saveTruckRecord(String orderGoodsNo, List<String> truckList) {
redisTemplate.opsForSet().add(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo, truckList.toArray(new String[]{}));
......@@ -33,7 +37,7 @@ public class GoodsOrderTruckRecordComponent {
public void deleteTruckRecord(String orderGoodsNo) {
redisTemplate.delete(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 +66,11 @@ public class GoodsOrderTruckRecordComponent {
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);
}
}
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.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.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 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.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<>();
public void ownerProcess(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
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());
List<Integer> ids = new LinkedList<>();
for (OrderChild orderChild : orderChildren) {
log.info("取消的运单:{}", JSONUtil.parse(orderChild));
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId());
}
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(ids)) {
log.info("ids:{}", ids);
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "货主取消",
ids);
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, "货主取消订单失败,原因:远程调用取消订单失败");
}
}
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());
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(weight);
rollbackOrderWeightParam.setResidueWeight(residueWeight);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(residueWeight);
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(residueWeight);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(residueWeight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(residueWeight);
}
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());
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(weight);
rollbackOrderWeightParam.setResidueWeight(residueWeight);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(residueWeight);
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(residueWeight);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(residueWeight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(residueWeight);
}
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());
}
}
......@@ -15,6 +15,7 @@ import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
......@@ -53,6 +54,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final DriverService driverService;
private final BreakContractDriverRecordService breakContractDriverRecordService;
//根据货单最晚接单时间处理
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());
......@@ -60,12 +63,12 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
//删除货单最晚接单时间处理
public void deleteRedisRecordForLastOrderTime(String orderGoodsNo) {
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo);
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo);
}
//删除货单最晚到达货源地时间处理
public void deleteRedisRecordForLastArriveSendTime(String orderGoodsNo) {
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsNo);
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsNo);
}
//根据货单最晚到达货源地时间处理
......@@ -142,8 +145,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
}
}
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());
}
......@@ -183,7 +186,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
log.info("货单-最晚到达货源地时间-定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚到达货源地时间");
log.info("货单" + orderGoodsId.getValue() + "过了最晚到达货源地时间");
String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
......@@ -204,11 +207,13 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
ids.add(orderChild.getId());
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
breakContractDriverRecordService.saveDriverRecordOfOrderChildCancel(orderChild, 0L, "系统");
}
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), ids);
log.info("取消运单ID集合:{}", ids);
if (CollectionUtil.isNotEmpty(ids)) {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消", ids);
}
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
......
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;
import com.clx.performance.constant.RabbitKeyConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
......@@ -93,32 +91,32 @@ public class RabbitBeanConfig {
/**
* 货单挂单队列
* @return
*/
@Bean
public Queue orderGoodsOnQueue() {
Map<String, Object> params = new HashMap<>(6);
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);
return new Queue(RabbitKeyConstants.ORDER_GOODS_ON_QUEUE, true, false, false, params);
}
/**
* 货单挂单中交换机
**/
@Bean
public DirectExchange orderGoodsOnExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE);
}
/**
* 货单挂单中绑定
*/
@Bean
public Binding orderGoodsOnExchangeBind() {
return BindingBuilder.bind(orderGoodsOnQueue()).to(orderGoodsOnExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY);
}
// * 货单挂单队列
// * @return
// */
// @Bean
// public Queue orderGoodsOnQueue() {
// Map<String, Object> params = new HashMap<>(6);
// 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);
// return new Queue(RabbitKeyConstants.ORDER_GOODS_ON_QUEUE, true, false, false, params);
// }
//
// /**
// * 货单挂单中交换机
// **/
// @Bean
// public DirectExchange orderGoodsOnExchange() {
// return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_EXCHANGE);
// }
//
// /**
// * 货单挂单中绑定
// */
// @Bean
// public Binding orderGoodsOnExchangeBind() {
// return BindingBuilder.bind(orderGoodsOnQueue()).to(orderGoodsOnExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_ROUTE_KEY);
// }
/**
* 死信队列:死信队列处理延迟消息货单挂单
......@@ -133,19 +131,26 @@ public class RabbitBeanConfig {
* 货单挂单中交换机:死信队列处理延迟消息
**/
@Bean
public DirectExchange orderGoodsOnDeadExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_EXCHANGE);
public CustomExchange orderGoodsOnDeadExchange() {
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
public Binding orderGoodsDeadExchangeBind() {
return BindingBuilder.bind(orderGoodsOnDeadQueue()).to(orderGoodsOnDeadExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY);
public Binding delayedQueueBindingDelayedExchange(@Qualifier("orderGoodsOnDeadQueue")Queue queue,@Qualifier("orderGoodsOnDeadExchange")CustomExchange customExchange) {
return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY).noargs();
}
/**
* 订单取消队列
* @return
......
......@@ -2,20 +2,27 @@ package com.clx.performance.controller.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
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.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @ClassName GoodsOrderController
* @Description
......@@ -28,14 +35,13 @@ import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/app/goodsOrder")
@Validated
@AllArgsConstructor
@Api(tags = "APP-货单")
public class AppGoodsOrderController {
@Autowired
OrderGoodsService orderGoodsService;
private final OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
private final OrderGoodsTruckBindService orderGoodsTruckBindService;
@ApiOperation(value = "查看货单详情", notes = "<br>By:胡宇帆")
......@@ -55,10 +61,9 @@ public class AppGoodsOrderController {
}
// @ApiOperation(value = "专属货单", notes = "<br>By:胡宇帆")
// @PostMapping("/exclusiveOrderGoodsList")
// @UnitCovert(param = false)
// public Result<List<OrderGoodsVO>> exclusiveOrderGoodsList(@Validated @RequestBody OrderGoodsListParam orderGoodsListParam) {
// return Result.ok(orderGoodsService.openOrderPageGoodsList(orderGoodsListParam));
// }
@ApiOperation(value = "司机端无接单位置上报", notes = "<br>By:胡宇帆")
@GetMapping("/getCancelOrderGoods")
public Result<List<OrderGoodsAPPVO>> getCancelOrderGoods(@RequestParam(value = "userNo") Long userNo) {
return Result.ok(orderGoodsTruckBindService.getCancelOrderGoods(userNo));
}
}
......@@ -26,7 +26,7 @@ public class OrderCancelFeignController {
private final OrderCancelService orderCancelService;
@ApiOperation(value = "货主端订单取消", notes = "<br>By:胡宇帆")
@ApiOperation(value = "承运单发起订单取消货主端进行确认", notes = "<br>By:胡宇帆")
@PostMapping("/orderCancel")
public Result<Object> orderCancel(@RequestBody OrderCancelFeignParam param) {
// OrderCancelParam cancelParam = new OrderCancelParam();
......@@ -34,7 +34,7 @@ public class OrderCancelFeignController {
// cancelParam.setCancelType(3);
// cancelParam.setCreateByType(1);
// orderCancelService.platformCancelOrderPrePC(cancelParam);
orderCancelService.ownerCancelOrderPre(param.getOrderNo());
orderCancelService.ownerConfirmCancelOrderPre(param.getOrderNo());
return Result.ok();
}
}
......@@ -4,16 +4,14 @@ import cn.hutool.json.JSONUtil;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
......@@ -40,4 +38,10 @@ public class OwnerAccountFeignController {
ownerAccountService.ownerAccountThaw(param);
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;
}
}
......@@ -2,6 +2,7 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.OrderGoodsParams;
......@@ -13,6 +14,7 @@ import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam;
import com.clx.performance.service.OrderChildService;
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.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
......@@ -20,6 +22,7 @@ import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -69,6 +72,9 @@ public class GoodsOrderController {
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
@Autowired
private OrderGoodsTruckBindService orderGoodsTruckBindService;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder")
@UnitCovert(result = false)
......@@ -89,11 +95,11 @@ public class GoodsOrderController {
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate);
} catch (Exception e) {
log.error(ExceptionUtils.getStackTrace(e));
log.info(e.getMessage());
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
} finally {
try {
if (rLock != null && rLock.isLocked()) {
if (rLock != null && rLock.isLocked() && rLock.isHeldByCurrentThread()) {
rLock.unlock();
}
log.info("锁释放完成");
......@@ -130,6 +136,7 @@ public class GoodsOrderController {
@ApiOperation(value = "货单编辑查询", notes = "<br>By:胡宇帆")
@GetMapping("/findOrderGoodsByBatchNumber")
@UnitCovert
public Result<OrderGoodsEditVO> findOrderGoodsByBatchNumber(@RequestParam(value = "id") Integer id){
OrderGoodsEditVO orderGoodsVO = orderGoodsService.findOrderGoodsById(id);
return Result.ok(orderGoodsVO);
......@@ -137,6 +144,7 @@ public class GoodsOrderController {
@ApiOperation(value = "货单编辑提交", notes = "<br>By:刘海泉")
@PostMapping("/updateEditOrderGoods")
@UnitCovert
public Result<Object> updateEditOrderGoods(@RequestBody @Validated UpdateEditOrderGoodsParam param) {
orderGoodsService.updateEditOrderGoods(param);
return Result.ok();
......@@ -188,4 +196,5 @@ public class GoodsOrderController {
return Result.ok();
}
}
......@@ -24,7 +24,6 @@ public class OrderCancelController {
@ApiOperation(value = "承运端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/platformCancelOrderPre")
public Result<Object> platformCancelOrderPre(@RequestBody OrderCancelParam param) {
param.setCancelType(1);
orderCancelService.platformCancelOrderPre(param);
return Result.ok();
}
......@@ -32,7 +31,6 @@ public class OrderCancelController {
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre")
public Result<Object> ownCancelOrderPre(@RequestBody OrderCancelParam param) {
param.setCancelType(2);
orderCancelService.ownerCancelOrderPre(param);
return Result.ok();
}
......
......@@ -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-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-e"))){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER);};
breakContractOwnerRuleService.saveRule(param);
......
......@@ -56,9 +56,9 @@ public class OwnerAccountController {
@ApiOperation(value = "账户信息", notes = "<br>By:胡宇帆")
@GetMapping("/accountInfo")
@UnitCovert(param = false)
public Result<Map> accountInfo() {
public Result<OwnerAccountAllVO> accountInfo() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Map<String,OwnerAccountVO> result = ownerAccountService.accountInfo(loginUserInfo.getUserNo());
OwnerAccountAllVO result = ownerAccountService.accountInfo(loginUserInfo.getUserNo());
return Result.ok(result);
}
......
......@@ -7,8 +7,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
/**
* @Author: aiqingguo
......@@ -51,4 +54,14 @@ public class TempController {
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();
}
}
......@@ -95,8 +95,15 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
*/
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, List<Integer> ids);
List<OrderChild> selectOrderChildListByOrderGoodsNoAndStatusGE(String orderGoodsNo, Integer status);
......@@ -104,8 +111,18 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listOrderChildByOrderNoAndStatus(String orderNo,List<Integer> status);
/**
* 通过订单号查询在途运单
* @param orderNo
* @return
*/
List<OrderChild> selectInTransitOrderChild(String orderNo);
/**
* 通过货单号查询在途运单
* @param orderGoodsNo
* @return
*/
List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo);
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsEditParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
import com.clx.performance.mapper.OrderGoodsMapper;
......@@ -38,6 +39,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
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> exclusiveOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam, List<String> orderGoodsNoList);
......@@ -71,11 +74,15 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
OrderGoodsVO findOrderGoodsById(Integer id);
List<OrderGoods> selectListByOrderGoodsList(List<String> orderNos);
List<OrderGoods> selectListByOrderGoodsList(List<String> orderGoodsNo);
Integer updateOrderGoods(OrderGoodsEditParams orderGoodsEditParams);
boolean batchUpdateOrderGoodsStatus(Integer status, List<Integer> ids);
boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids);
List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(List<OrderGoodsTruckBind> list);
}
......@@ -33,6 +33,7 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, List<String> truckList);
void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, String truckNo);
List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo);
......@@ -44,4 +45,10 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set);
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
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
/**
* @author liruixin
* Date 2023-10-24
......@@ -20,7 +22,7 @@ public interface BreakContractDriverRecordDao extends BaseDao<BreakContractDrive
boolean updateSettlementNo(BreakContractDriverRecord item);
Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo);
Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo, LocalDateTime time);
IPage<BreakContractDriverRecordVO> pageByParam(PageBreakContractDriverRecordParam param);
IPage<DriverBreakContractDriverRecordVO> driverPageByParam(DriverPageBreakContractDriverRecordParam param);
......
......@@ -303,8 +303,17 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public void batchUpdateOrderChildStatus(Integer status, List<Integer> ids) {
baseMapper.updateOrderGoodsSetResidueWeight(status, ids);
public List<OrderChild> selectArriveSendOrderChildGe(String orderGoodsNo) {
//查询大于 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, List<Integer> ids) {
baseMapper.updateOrderGoodsSetResidueWeight(status,remark, ids);
}
@Override
......@@ -363,13 +372,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public List<OrderChild> selectInTransitOrderChild(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderNo, orderNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode())
.lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode())
);
}
@Override
public List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode())
.lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode())
); }
}
......@@ -3,6 +3,7 @@ package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsEditParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
import com.clx.performance.dao.OrderGoodsDao;
......@@ -78,6 +79,11 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
baseMapper.updateOrderGoodsWeightAndStatus(id, orderChildWeight, orderGoodsStatus);
}
@Override
public void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightResidueAndAlreadyAndStatus(id, alreadyTransportWeight, residueTransportWeight, orderGoodsStatus);
}
@Override
public IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam param) {
Page<OrderGoodsAPPVO> page = Page.of(param.getPage(), param.getPageSize());
......@@ -159,8 +165,7 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
@Override
public boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,orderGoodsId)
.set(OrderGoods :: getOrderGoodsStatus, status)
.set(OrderGoods::getResidueTransportWeight, BigDecimal.ZERO))
.set(OrderGoods :: getOrderGoodsStatus, status))
;
}
......@@ -185,8 +190,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
}
@Override
public List<OrderGoods> selectListByOrderGoodsList(List<String> orderNos) {
return baseMapper.selectList(lQrWrapper().in(OrderGoods::getOrderGoodsNo, orderNos));
public List<OrderGoods> selectListByOrderGoodsList(List<String> orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().in(OrderGoods::getOrderGoodsNo, orderGoodsNo));
}
@Override
......@@ -208,5 +213,20 @@ 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<OrderGoodsTruckBind> param) {
return baseMapper.getCancelOrderGoods(param);
}
}
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.QueryWrapper;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
......@@ -73,7 +74,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
@Override
public Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList) {
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)));
}
......@@ -90,17 +91,23 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.in(OrderGoodsTruckBind::getTruckNo, truckList)
.or()
.notIn(CollectionUtil.isNotEmpty(truckList), OrderGoodsTruckBind::getTruckNo, truckList)
);
}
@Override
public void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code, String truckNo) {
update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode())
.eq(OrderGoodsTruckBind::getTruckNo, truckNo)
);
}
@Override
public List<OrderGoodsTruckBind> selectListByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode())
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.or()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.GET.getCode())
......@@ -111,7 +118,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public void updateOrderGoodsBindStatusExpire(String orderGoodsNo) {
update(lUdWrapper()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.SUCCESS.getCode())
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.set(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode())
);
}
......@@ -124,7 +131,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
if(StringUtils.isNotBlank(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);
return baseMapper.selectList(query);
}
......@@ -133,7 +140,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set) {
LambdaQueryWrapper<OrderGoodsTruckBind> query = new LambdaQueryWrapper<>();
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);
}
......@@ -141,4 +148,25 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public void deleteByIds(List<Integer> 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;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
/**
* @author liruixin
* Date 2023-10-24
......@@ -31,11 +33,12 @@ public class BreakContractDriverRecordDaoImpl extends BaseDaoImpl<BreakContractD
}
@Override
public Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo) {
public Optional<BreakContractDriverRecord> selectLastLimitTimeByDriverUserNo(Long driverUserNo, LocalDateTime time) {
return Optional.of(driverUserNo)
.map(item -> lQrWrapper()
.eq(BreakContractDriverRecord::getDriverUserNo, item)
.isNotNull(BreakContractDriverRecord::getLimitTime)
.ge(BreakContractDriverRecord::getLimitTime, time)
.orderByDesc(BreakContractDriverRecord::getLimitTime)
.last("limit 1")
)
......
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;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -19,29 +20,17 @@ import java.util.Objects;
*/
@Slf4j
@Component
@AllArgsConstructor
public class OrderCancelHandler {
@Autowired
private OrderCancelService orderCancelService;
@Autowired
private BreakContractSettlementOwnerService breakContractSettlementOwnerService;
private final OrderCancelService orderCancelService;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CANCEL_QUEUE)
public void onMessage(String message) {
log.info("处理订单取消监听器执行,订单No为{}", message);
OrderCancelParam param = JSONUtil.toBean(message, OrderCancelParam.class);
if (ObjectUtil.equals(param.getCancelType(), 1)) {
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 {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.PAYING.getCode());
// 添加积分货单
try {
integralMqService.orderGoodsAdd(orderGoods.getOrderGoodsNo(),
orderGoods.getSendAddressId(), orderGoods.getSendAddressShorter(),
orderGoods.getReceiveAddressId(), orderGoods.getReceiveAddressShorter());
}catch (Exception e) {
e.printStackTrace();
}
}
}
......
......@@ -47,5 +47,5 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
int countValidByOrderGoodsNo(String orderGoodsNo);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "ids") List<Integer> ids);
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark, @Param(value = "ids") List<Integer> ids);
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsEditParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
import com.clx.performance.model.OrderGoods;
......@@ -42,6 +43,14 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
" where id = #{id}")
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")
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(Page<OrderGoodsAPPVO> page);
......@@ -66,8 +75,11 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
OrderGoodsVO findOrderGoodsById(Integer id);
@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")
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<OrderGoodsTruckBind> param);
}
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.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;
}
}
......@@ -4,13 +4,13 @@ import com.clx.performance.param.pc.OrderCancelParam;
public interface OrderCancelService {
// void platformCancelOrderPre(String orderNo);
//
// void platformCancelOrder(String orderNo);
//
void ownerCancelOrderPre(String orderNo);
//
void ownerCancelOrder(String orderNo);
/**
* 承运端取消订单,货主同意调用此接口
* @param orderNo
*/
void ownerConfirmCancelOrderPre(String orderNo);
void ownerConfirmCancelProcess(String orderNo);
/**
* 货主取消订单前置(只修改订单状态)
......@@ -30,4 +30,10 @@ public interface OrderCancelService {
*/
void orderCancelProcess(OrderCancelParam param);
/**
* 客服取消
* @param orderChildNo
*/
void artificialCancelOrder(String orderChildNo);
}
......@@ -77,4 +77,5 @@ public interface OrderChildService {
* @return
*/
List<OrderChild> selectInTransitOrderChild(String orderNo);
}
......@@ -29,7 +29,7 @@ public interface OrderGoodsService {
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);
IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam);
......
package com.clx.performance.service;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import java.util.List;
public interface OrderGoodsTruckBindService {
List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(Long userNo);
void updateCancelTruckBind(String orderGoodsNo);
}
......@@ -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.FrozenAccountParam;
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.OwnerAccountVO;
import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
......@@ -25,7 +26,7 @@ public interface OwnerAccountService {
IPage<OwnerAccountRunningWaterRecordVO> prepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param);
Map<String,OwnerAccountVO> accountInfo(Long ownerUserNo);
OwnerAccountAllVO accountInfo(Long ownerUserNo);
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 {
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
import com.clx.performance.vo.pc.owner.settle.SettlementPlatformAccountVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.math.BigDecimal;
/**
* @author liruixin
* Date 2023-10-24
......@@ -38,7 +40,7 @@ public interface BreakContractSettlementOwnerService {
void saveSettlementOwnerForTonnageDown(OrderAdjustTonnageDownParam param);
void saveSettlementOwnerForCancelOrder(String orderNo);
void saveSettlementOwnerForCancelOrder(BigDecimal transportWeight, BigDecimal validFreightPrice, String orderNo, Integer cancelType);
SettlementPlatformAccountVO getCarrierSettlementPlatformAccount(Integer id);
......
......@@ -7,22 +7,24 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
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.mq.OrderCancelMqParam;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.enums.ResultEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.user.data.UserSessionData;
......@@ -60,14 +62,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OwnerAccountService ownerAccountService;
private final OrderGoodsTruckBindService orderGoodsTruckBindService;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final OrderCancelComponent orderCancelComponent;
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(String orderNo) {
public void ownerConfirmCancelOrderPre(String orderNo) {
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
if (CollectionUtil.isEmpty(orderGoodsList)) {
//未产生货单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode);
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
......@@ -75,10 +84,10 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
this.ownerCancelOrder(orderNo);
this.ownerConfirmCancelProcess(orderNo);
return;
}
......@@ -86,15 +95,34 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
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(),
orderGoodsList.stream().map(OrderGoods::getId).collect(Collectors.toList()));
ids);
} else {
List<OrderChild> arriveSendChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
List<Integer> ids = new LinkedList<>();
for (OrderChild orderChild : arriveSendChildList) {
//释放车辆
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
ids.add(orderChild.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消",
ids);
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
}
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
......@@ -124,9 +152,14 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//虽然没有余量,但是可以取消的运单都是未到达货源地的
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);
}
......@@ -135,27 +168,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(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()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
// log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", 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
// );
this.ownerConfirmCancelProcess(orderNo);
}
@Override
public void ownerCancelOrder(String orderNo) {
public void ownerConfirmCancelProcess(String orderNo) {
log.info("开始执行订单取消吨数回填");
FeignOrderVO orderInfoFeignVO = orderFeign.getOrderInfoFeign(orderNo);
......@@ -166,21 +193,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode().equals(orderInfoFeignVO.getTruckDemand())) {
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
List<Integer> ids = new LinkedList<>();
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()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
......@@ -200,31 +213,23 @@ public class OrderCancelServiceImpl implements OrderCancelService {
truckDemandMap.get(orderGoods.getTruckDemand())
.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())) {
//已取消
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
ids.add(orderGoods.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderGoodsDao.batchUpdateOrderGoodsWeight(BigDecimal.ZERO, ids);
}
}
Integer truckDemand = orderInfoFeignVO.getTruckDemand();
BigDecimal residueWeight = truckDemandMap.get(truckDemand);
if (residueWeight.compareTo(BigDecimal.ZERO) == 0) {
log.info("当前订单对应的货单无需吨数回填,订单编号{}", orderNo);
return;
}
//归还吨数
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderInfoFeignVO.getOrderNo());
......@@ -247,19 +252,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
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()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
......@@ -267,7 +259,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) {
String orderGoodsNo = entry.getKey();
OrderGoods orderGoods = entry.getValue().get(0);
......@@ -280,26 +271,16 @@ public class OrderCancelServiceImpl implements OrderCancelService {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.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())) {
//已取消
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
ids.add(orderGoods.getId());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderGoodsDao.batchUpdateOrderGoodsWeight(BigDecimal.ZERO, ids);
}
}
//归还吨数
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
......@@ -314,14 +295,16 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
}
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
}
}
}
......@@ -329,101 +312,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
Integer orderStatusCode = OrderEnum.Status.CANCELED.getCode();
switch (param.getCancelType()) {
case 1: //单纯取消订单
if (CollectionUtil.isNotEmpty(orderChildDao.getOrderChildByOrderNo(orderNo))) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前订单已发生变化,请重新选择取消方式");
}
orderCancelComponent.ownerProcess(param);
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.setOrderNo(orderNo);
orderCancelReasonParam.setReason(param.getCancelReason());
......@@ -437,7 +327,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
......@@ -449,6 +339,11 @@ public class OrderCancelServiceImpl implements OrderCancelService {
);
}
/**
* 平台取消订单前置(只修改订单相关状态)
*
* @param param
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void platformCancelOrderPre(OrderCancelParam param) {
......@@ -464,37 +359,39 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsDao.batchUpdateOrderGoodsStatus(
OrderGoodsStatusEnum.Status.CANCEL.getCode(),
orderGoodsList.stream().map(OrderGoods::getId).collect(Collectors.toList()));
List<Integer> ids = new LinkedList<>();
for (OrderGoods orderGoods : orderGoodsList) {
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
ids.add(orderGoods.getId());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
orderGoodsDao.batchUpdateOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode(),
ids);
}
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 (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
orderGoodsDao.updateEntityByKey(update);
}
break;
......@@ -503,18 +400,17 @@ public class OrderCancelServiceImpl implements OrderCancelService {
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());
}
if (CollectionUtil.isNotEmpty(ids)) {
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.OWNER_CANCEL.getCode(),
OrderChildEnum.Status.OWNER_CANCEL.getCode(), "平台取消",
ids);
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = orderChildren.stream()
......@@ -528,6 +424,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} 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 {
......@@ -535,12 +432,15 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
orderGoodsDao.updateEntityByKey(update);
if (orderGoods.getPendingOrderWay().equals(PendingOrderWayStatusEnum.Status.DX.getCode())) {
orderGoodsTruckBindService.updateCancelTruckBind(orderGoods.getOrderGoodsNo());
}
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderGoodsDao.updateEntityByKey(update);
}
break;
default:
......@@ -548,23 +448,28 @@ public class OrderCancelServiceImpl implements OrderCancelService {
}
log.info("执行承运端订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
log.info("记录订单取消原因");
OrderCancelReasonParam orderCancelReasonParam = new OrderCancelReasonParam();
orderCancelReasonParam.setOrderNo(orderNo);
orderCancelReasonParam.setReason(param.getCancelReason());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
orderFeign.orderCancelReason(orderCancelReasonParam);
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
ThawAccountParam thawAccountParam = new ThawAccountParam();
thawAccountParam.setOrderNo(orderNo);
thawAccountParam.setOrderType("1");
thawAccountParam.setOrderType(OwnerAccountEnum.OrderChildTypeStatus.NETWORK.getCode());
log.info("执行解冻账户,参数:{}", JSONUtil.parse(thawAccountParam));
ownerAccountService.ownerAccountThaw(thawAccountParam);
log.info("执行订单状态更改");
if (!orderFeign.updateOrderStatusByOrderNo(orderNo, orderStatusCode).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
log.info("执行承运端订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(param).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
......@@ -573,6 +478,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
/**
* 执行订单取消后归还吨数
*
* @param param
*/
@Override
......@@ -595,23 +501,15 @@ public class OrderCancelServiceImpl implements OrderCancelService {
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
}
}
//归还吨数
......@@ -636,30 +534,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
return;
break;
case 2: //取消未拉运吨数的货单及订单
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(update);
}
}
//归还吨数
......@@ -684,11 +573,14 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
return;
break;
case 3: //取消未拉运+未到达货源地吨数
List<OrderChild> orderChildren = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
List<Integer> list = new LinkedList<>();
list.add(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
list.add(OrderChildEnum.Status.OWNER_CANCEL.getCode());
List<OrderChild> orderChildren = orderChildDao.listOrderChildByOrderNoAndStatus(orderNo, list);
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(orderChildren)) {
......@@ -702,7 +594,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
......@@ -715,9 +606,9 @@ public class OrderCancelServiceImpl implements OrderCancelService {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(childSum));
}
orderGoodsDao.updateEntityByKey(update);
}
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
......@@ -726,7 +617,6 @@ public class OrderCancelServiceImpl implements OrderCancelService {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
update.setResidueTransportWeight(BigDecimal.ZERO);
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
......@@ -739,9 +629,10 @@ public class OrderCancelServiceImpl implements OrderCancelService {
vehicleUsageMap.put(orderGoods.getTruckDemand(),
vehicleUsageMap.get(orderGoods.getTruckDemand())
.add(childSum));
}
orderGoodsDao.updateEntityByKey(update);
}
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
......@@ -765,10 +656,35 @@ public class OrderCancelServiceImpl implements OrderCancelService {
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
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) {
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(OrderChildEnum.Status.ARTIFICIAL_CANCEL.getName());
orderChildDao.updateEntityByKey(update);
orderCancelComponent.backFillTonnageForArtificial(orderChild.getOrderGoodsNo(), orderChild.getWeight());
}
}
\ No newline at end of file
......@@ -151,7 +151,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, status);
orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, dif, status);
}
/**
......
......@@ -288,11 +288,20 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setTruckModel(driverTruckInfo.getModel());
Integer overWeight = orderInfo.getOverWeight();
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));
}else{
}
} else{
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal(50)) < 0) {
orderChild.setWeight(orderGoods.getResidueTransportWeight());
} else {
orderChild.setWeight(new BigDecimal(50));
}
}
//orderChild.setWeight(orderChild.getTruckLoad());
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setPayTime(now);
......@@ -465,9 +474,9 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
// 装货超时
if (orderChild.getLoadDeadline().isBefore(LocalDateTime.now())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
}
// if (orderChild.getLoadDeadline().isBefore(LocalDateTime.now())) {
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
// }
// 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(
......@@ -648,6 +657,10 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight());
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet());
......@@ -788,6 +801,9 @@ public class OrderChildServiceImpl implements OrderChildService {
// 更新出车状态
updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId());
//释放车辆
goodsOrderTruckRecordComponent.releaseDriverCard(orderChild.getOrderGoodsNo(), orderChild.getTruckNo());
}
private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) {
......@@ -1334,7 +1350,7 @@ public class OrderChildServiceImpl implements OrderChildService {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate(),
orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, orderChild.getWeight().negate(),
status);
}
......@@ -1346,9 +1362,10 @@ public class OrderChildServiceImpl implements OrderChildService {
return;
}
Integer status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, status);
orderGoodsService.updateOrderGoodsReduceWeightAndStatusAmountLoad(orderGoods, dif, status);
}
/**
......@@ -1405,7 +1422,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* 司机接单限制
*/
private void driverTakeOrderLimit(Long driverUserNo){
Optional<BreakContractDriverRecord> limitOptional = breakContractDriverRecordDao.selectLastLimitTimeByDriverUserNo(driverUserNo);
Optional<BreakContractDriverRecord> limitOptional = breakContractDriverRecordDao.selectLastLimitTimeByDriverUserNo(driverUserNo, LocalDateTime.now());
if (limitOptional.isPresent()){
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"));
......@@ -1862,6 +1879,7 @@ public class OrderChildServiceImpl implements OrderChildService {
return orderChildDao.selectInTransitOrderChild(orderNo);
}
/**
* @return
* @Author kavin
......
......@@ -5,10 +5,12 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.param.pc.OrderGoodsEditParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
......@@ -95,6 +97,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
private DriverService driverService;
private OrderCancelComponent orderCancelComponent;
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
......@@ -124,8 +128,18 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
@Override
public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus) {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(id, orderChildWeight, orderGoodsStatus);
public void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus) {
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
) {
//当前订单已经取消或完结
orderCancelComponent.backFillTonnage(orderGoods, orderChildWeight);
} else {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChildWeight, orderGoodsStatus);
}
}
@Override
......@@ -229,25 +243,37 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Override
public BigDecimal orderCancelResidueWeight(String orderNo, String optionType) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if (StringUtils.equals(optionType, "1")) {
return new BigDecimal(orderInfoFeign.getResidueWeight());
} else {
List<OrderGoods> orderGoodsList = null;
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
String residueWeight = orderInfoFeign.getResidueWeight();
switch (optionType) {
case "1":
return new BigDecimal(residueWeight);
case "2":
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
case "3":
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) {
childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return new BigDecimal(residueWeight).add(orderGoodsResidueWeight).add(childResidueWeight);
default:throw new RuntimeException("参数错误");
}
}
......@@ -259,7 +285,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEditOrderGoods(UpdateEditOrderGoodsParam param) {
UserSessionData loginUserInfo = null;
try {
loginUserInfo = TokenUtil.getLoginUserInfo();
}catch (Exception e) {
}
OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams();
OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(param.getOrderNo());
......@@ -268,26 +300,57 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight());
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.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())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate());
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
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());
if (VehicleUsageEnum.Status.OWN.getCode().equals(oldOrderGoods.getVehicleUsage())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(answer.negate());
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate());
}
}
log.info("回填吨数:{}", JSONUtil.parse(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, "当前货单提取吨数已超订单可提取吨数");
}
......@@ -317,12 +380,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
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());
if (CollectionUtils.isNotEmpty(deleteList)) {
orderGoodsTruckBindDao.deleteByIds(deleteList.stream().map(OrderGoodsTruckBind::getId).collect(Collectors.toList()));
}
for (OrderGoodsTruckBind bind : deleteList) {
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
}
}
if (!oldOrderGoods.getPendingOrderWay().equals(orderGoodsParams.getPendingOrderWay())) {
orderGoodsTruckBindDao.deleteByOrderGoods(orderGoodsNo);
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
}
LocalDateTime now = LocalDateTime.now();
List<String> truckList = orderGoodsParams.getTruckList();
if (CollectionUtil.isNotEmpty(truckList)) {
......@@ -339,10 +411,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
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);
orderGoodsParams.setUserNo(loginUserInfo.getUserNo());
orderGoodsParams.setUserName(loginUserInfo.getUserName());
orderGoodsDao.updateOrderGoods(orderGoodsParams);
//日志提交
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.EDIT.getName(), "");
}
......@@ -383,19 +457,19 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Transactional(rollbackFor = Exception.class)
public void orderGoodsCancel(OrderGoodsCancelParam goodsCancelParam) {
String orderGoodsNo = goodsCancelParam.getOrderGoodsNo();
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
return;
}
OrderGoods orderGoods = optional.get();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.HTTP_ERROR, "数据错误");
List<OrderChild> orderChildList = null;
BigDecimal residueWeight = null;
BigDecimal sum = BigDecimal.ZERO;
List<Integer> ids = new LinkedList<>();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
Integer cancelOperateType = goodsCancelParam.getCancelOperateType();
Integer orderGoodsStatus = OrderGoodsStatusEnum.Status.CANCEL.getCode();
switch (cancelOperateType) {
case 1:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), null);
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单");
}
......@@ -421,16 +495,31 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(orderGoodsStatus);
orderGoodsDao.updateEntityByKey(update);
}
break;
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)) {
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);
ids.add(orderChild.getId());
sum = sum.add(orderChild.getWeight());
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统取消",
ids);
}
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
}
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
......@@ -447,25 +536,36 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), orderChildList.stream().map(OrderChild::getId).collect(Collectors.toList()));
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, orderGoodsStatus);
}
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
break;
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)) {
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);
ids.add(orderChild.getId());
sum = sum.add(orderChild.getWeight());
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(),"系统取消",
ids);
orderChildList.removeAll(filterOrderChildList);
if (CollectionUtil.isNotEmpty(orderChildList)) {
orderGoodsStatus = OrderGoodsStatusEnum.Status.COMPLETED.getCode();
}
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
......@@ -482,18 +582,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
}
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));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(residueWeight, sum, OrderGoodsStatusEnum.Status.CANCEL.getCode(), orderGoods.getId());
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(residueWeight, sum, orderGoodsStatus, orderGoods.getId());
}
break;
default:
......@@ -507,6 +599,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
orderCancelReasonParam.setCreateNo(loginUserInfo.getUserNo());
orderCancelReasonParam.setCreateName(loginUserInfo.getUserName());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
orderFeign.orderCancelReason(orderCancelReasonParam);
......@@ -579,11 +672,13 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
result.setOwnCarryWeight(orderInfoFeign.getOwnCarryWeight());
result.setOwnResidueCarryWeight(orderInfoFeign.getOwnResidueCarryWeight());
result.setPlatformCarryWeight(orderInfoFeign.getPlatformCarryWeight());
result.setPlatformResidueCarryWeight(orderInfoFeign.getPlatformResidueCarryWeight());
result.setDownFloatWeight(orderInfoFeign.getDownFloatWeight());
result.setUpFloatWeight(orderInfoFeign.getUpFloatWeight());
result.setStopFlag(orderInfoFeign.getStopFlag());
result.setSettlementAccountPeriod(orderInfoFeign.getSettlementAccountPeriod());
result.setTransportEndTime(orderInfoFeign.getTransportEndTime());
List<OrderChild> orderChildList = orderChildDao.selectListByOrderGoodsNo(orderGoodsVO.getOrderGoodsNo());
if (CollectionUtils.isNotEmpty(orderChildList)) {
result.setEditAllFlag(false);
......
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.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.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.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
@Slf4j
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
public List<Integer> getTrucksByOrderGoodsNo(String 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);
}
@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;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.user.enums.driver.DriverTruckEnum;
......@@ -85,14 +86,14 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
}
@Override
public Map<String, OwnerAccountVO> accountInfo(Long ownerUserNo) {
Map<String, OwnerAccountVO> result = new HashMap<>(2);
public OwnerAccountAllVO accountInfo(Long ownerUserNo) {
OwnerAccountAllVO result = new OwnerAccountAllVO();
List<OwnerAccountVO> list = ownerAccountStruct.convertList(ownerAccountDao.accountInfo(ownerUserNo));
for (OwnerAccountVO ownerAccountVO : list) {
if (OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode().equals(ownerAccountVO.getAccountType())) {
result.put("marginAccount", ownerAccountVO);
result.setMarginAccount(ownerAccountVO);
} else {
result.put("prepaidFreightAccount", ownerAccountVO);
result.setPrepaidFreightAccount(ownerAccountVO);
}
}
return result;
......@@ -782,7 +783,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
@Transactional(rollbackFor = Exception.class)
public void ownerAccountThaw(ThawAccountParam param) {
String orderNo = param.getOrderNo();
if (StringUtils.equals(param.getOrderType(), "1")) {
if (OwnerAccountEnum.OrderChildTypeStatus.ORDINARY.getCode().equals(param.getOrderType())) {
List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo);
if (null == list || list.size() != 2) {
log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param));
......
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;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PayRemarkEnum;
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.service.TempService;
import com.clx.performance.service.settle.SettlementService;
......@@ -10,6 +13,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Slf4j
@Service
public class TempServiceImpl implements TempService {
......@@ -19,7 +24,8 @@ public class TempServiceImpl implements TempService {
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private PaymentService paymentService;
@Override
public void updateInvoiceType(String childNo, Integer invoiceType) {
......@@ -33,4 +39,20 @@ public class TempServiceImpl implements TempService {
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);
}
}
......@@ -246,7 +246,7 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
* 费用计算 (运单取消)
*/
private BigDecimal orderChildCancelFigureCalc(OrderChild orderChild, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderChild.getCancelTime(), orderChild.getPayTime());
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderChild.getPayTime(), orderChild.getCancelTime());
long baseTime = rule.getDriverCancelRule().getBaseTime().multiply(BigDecimal.valueOf(3600)).setScale(0, RoundingMode.HALF_UP).longValue();
if (time < baseTime) {
......@@ -254,7 +254,7 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
}
else {
BigDecimal money = rule.getDriverCancelRule().getBaseFigure();
money = money.add(BigDecimal.valueOf(time-baseTime).divide(BigDecimal.valueOf(1800), 0, RoundingMode.UP).multiply(rule.getDriverCancelRule().getBaseFigure()));
money = money.add(BigDecimal.valueOf(time-baseTime).divide(BigDecimal.valueOf(1800), 0, RoundingMode.UP).multiply(rule.getDriverCancelRule().getFigurePerHour()));
return money.movePointRight(2);
}
}
......@@ -263,9 +263,9 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
* 费用计算 (到达货源地超时)
*/
private BigDecimal arriveSendAddressFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderChild.getArriveSendTime(), orderGoods.getLastArriveSendTime());
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);
}
......@@ -273,7 +273,7 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
* 费用计算 (到达目的地超时)
*/
private BigDecimal arriveReceiveAddressFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderChild.getArriveReceiveTime(), orderGoods.getLastArriveReceiveTime());
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderGoods.getLastArriveReceiveTime(), orderChild.getArriveReceiveTime());
BigDecimal money = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(3600), 0, RoundingMode.UP).multiply(rule.getReceiveAddressRule().getFigurePerHour()).multiply(orderChild.getWeight()).setScale(2, RoundingMode.HALF_UP);
return money.movePointRight(2);
......
......@@ -55,10 +55,11 @@ public class BreakContractOwnerRuleServiceImpl implements BreakContractOwnerRul
autoRule.setOrderCancelRule(new BreakContractOwnerRuleVO.OrderCancelRule());
autoRule.setOrderAmountReduceRule(new BreakContractOwnerRuleVO.OrderAmountReduceRule());
autoRule.getOrderAmountReduceRule().setRatio(new BigDecimal(param.getRule().get("A-a")).movePointLeft(2));
autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-b")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-c")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-d")).movePointLeft(2));
autoRule.getOrderAmountReduceRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-a")).movePointLeft(2));
autoRule.getOrderAmountReduceRule().setAfterRatio(new BigDecimal(param.getRule().get("A-b")).movePointLeft(2));
autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-c")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-d")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-e")).movePointLeft(2));
rule.setAutoRuleJson(JSON.toJSONString(autoRule));
breakContractOwnerRuleDao.saveEntity(rule);
......
......@@ -9,6 +9,7 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
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.BreakContractOwnerRuleDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao;
......@@ -17,6 +18,7 @@ import com.clx.performance.dao.settle.SettlementPlatformAccountDao;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.order.QuotationService;
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.BreakContractOwnerRule;
import com.clx.performance.model.breakcontract.BreakContractSettlementLog;
......@@ -80,6 +82,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
private final QuotationService quotationService;
private final BreakContractOwnerRecordService breakContractOwnerRecordService;
private final BreakContractOwnerRecordDao breakContractOwnerRecordDao;
private final OrderGoodsDao orderGoodsDao;
......@@ -271,6 +275,12 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
param.setStatus(BreakContractSettlementOwnerEnum.Status.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode());
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();
//保存结算单日志----货主付款
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
......@@ -308,6 +318,16 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
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(
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
......@@ -316,15 +336,29 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.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);
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{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用
for(OrderChild orderChild : orderChilds){
if(orderChild.getLoadNet() != null){
if(orderChild.getLoadNet() == null){
deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight()));
}else{
......@@ -335,25 +369,15 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
}
BigDecimal noTransitWeight = param.getTransportWeight().subtract(deliveredWeight);//未拉运的重量
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();
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.setOrderNo(param.getOrderNo());
ownerRecordAddParam.setRemark("下调吨数产生违约");
......@@ -383,13 +407,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
}
@Override
public void saveSettlementOwnerForCancelOrder(String orderNo) {
//获取订单信息
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfoFeign)){
log.info("货主取消保存违约结算单获取订单数据为空");
return;
}
public void saveSettlementOwnerForCancelOrder(BigDecimal transportWeight,BigDecimal validFreightPrice,String orderNo,Integer cancelType) {
//获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......@@ -414,22 +432,30 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()});
OrderChildEnum.Status.OWNER_CANCEL.getCode(),OrderChildEnum.Status.UNSETTLE.getCode()});
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);
LocalDateTime now = LocalDateTime.now();//当前时间
//没有司机拉运
if(CollectionUtils.isEmpty(orderChilds)){
figure = orderInfoFeign.getTransportWeight().multiply(orderInfoFeign.getValidFreightPrice()).multiply(orderCancelRule.getBeforeRatio());
figure = transportWeight.multiply(validFreightPrice).multiply(orderCancelRule.getAfterRatio());
}else{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal cancelWeight = BigDecimal.ZERO;//可取消的重量
BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用
BigDecimal seconds = BigDecimal.ZERO;//总毫秒数
for(OrderChild orderChild : orderChilds){
if(orderChild.getLoadNet() != null){
if(orderChild.getLoadNet() == null){
deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight()));
}else{
......@@ -445,15 +471,20 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
}
}
BigDecimal noTransitWeight = orderInfoFeign.getTransportWeight().subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(orderInfoFeign.getValidFreightPrice());//未拉运的费用
BigDecimal noTransitWeight = transportWeight.subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(validFreightPrice);//未拉运的费用
BigDecimal totalFreight = deliveredFreight.add(noTransitFreight);
BigDecimal baseFigure = totalFreight.multiply(orderCancelRule.getAfterRatio()).multiply(cancelWeight)
.divide(orderInfoFeign.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
BigDecimal truckFigure = seconds.multiply(orderCancelRule.getAfterFigurePerHour())
.divide(new BigDecimal(60),2, BigDecimal.ROUND_HALF_UP);
.divide(transportWeight,2, BigDecimal.ROUND_HALF_UP);
BigDecimal truckFigure = BigDecimal.ZERO;
if(Objects.equals(cancelType,CancelOrderEnum.Type.NOT_ARRIVE)){
truckFigure = seconds.multiply(orderCancelRule.getAfterFigurePerHour())
.divide(new BigDecimal(3600),2, BigDecimal.ROUND_HALF_UP);
}
figure = baseFigure.add(truckFigure);
}
}
//组装参数 生成违约记录 违约计费 违约结算单
BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam();
......
......@@ -126,10 +126,10 @@ 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 = "ids") List<Integer> ids ){
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 + " where id in (");
for (int i = 0; i < ids.size(); i++) {
Integer id = ids.get(i);
......
......@@ -36,7 +36,7 @@ public class OrderGoodsSqlProvider {
" 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.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");
if (StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime())) {
......@@ -149,7 +149,7 @@ public class OrderGoodsSqlProvider {
"need_truck_num,vehicle_usage,pending_order_way,pending_order_time,pending_order_freight,last_arrive_send_time,senior_logistics_manager_id," +
"senior_logistics_manager_name,order_no,order_goods_no,order_goods_status,send_address_id,send_address_shorter,send_longitude," +
"send_latitude,receive_latitude,receive_longitude,receive_address_id,receive_address_shorter,goods_name,goods_id,create_time,modified_time," +
"user_name,user_no,batch_number,last_arrive_receive_time,last_load_time,last_order_time) VALUES ");
"user_name,user_no,batch_number,last_arrive_receive_time,last_load_time,last_order_time,settlement_account_period) VALUES ");
for (int i = 0; i < orderGoodsList.size(); i++) {
OrderGoods o = orderGoodsList.get(i);
......@@ -164,7 +164,7 @@ public class OrderGoodsSqlProvider {
.append(o.getReceiveAddressId()).append("','").append(o.getReceiveAddressShorter()).append("','").append(o.getGoodsName()).append("','")
.append(o.getGoodsId()).append("','").append(o.getCreateTime()).append("','").append(o.getModifiedTime()).append("','").append(o.getUserName()).append("','")
.append(o.getUserNo()).append("','").append(o.getBatchNumber()).append("','").append(o.getLastArriveReceiveTime()).append("','")
.append(o.getLastLoadTime()).append("','").append(o.getLastOrderTime())
.append(o.getLastLoadTime()).append("','").append(o.getLastOrderTime()).append("','").append(o.getSettlementAccountPeriod())
.append("')");
if (i < orderGoodsList.size() - 1) {
......@@ -177,7 +177,7 @@ public class OrderGoodsSqlProvider {
public String updateOrderGoodsSetAlreadyWeight(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="id") Integer id){
String sql = new SQL() {{
UPDATE("order_goods")
.SET("already_transport_weight = already_transport_weight - #{residueWeight}")
.SET("already_transport_weight = already_transport_weight - #{alreadyWeight}")
.WHERE("id = #{id}");
}}.toString();
......@@ -237,7 +237,6 @@ public class OrderGoodsSqlProvider {
.SET("pending_order_freight = #{params.pendingOrderFreight}")
.SET("user_no = #{params.userNo}")
.SET("user_name = #{params.userName}")
.SET("batch_number = #{params.batchNumber}")
.WHERE("id = #{params.id}");
}}.toString();
......@@ -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){
String sql = new SQL() {{
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("status = #{status}")
.SET("order_goods_status = #{status}")
.WHERE("id = #{id}");
......@@ -257,4 +256,25 @@ public class OrderGoodsSqlProvider {
return sql;
}
public String getCancelOrderGoods(@Param("param") PageOrderGoodsListParam param) {
String sql = " 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"
;
return sql;
}
}
package com.clx.performance.sqlProvider;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoodsTruckBind;
import java.time.LocalDateTime;
......@@ -14,7 +15,7 @@ public class OrderGoodsTruckBindSqlProvider {
for (int i = 0; i < trackList.size(); i++) {
String truckNo = trackList.get(i);
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("')");
if (i < trackList.size() - 1) {
sqlList.append(",");
......
......@@ -214,9 +214,9 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
message.getMessageProperties().setHeader("x-delay", epochMilli);
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
);
}
}
......
......@@ -229,9 +229,9 @@ public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements Initi
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
message.getMessageProperties().setHeader("x-delay", epochMilli);
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
);
}
}
......
......@@ -247,9 +247,9 @@ public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
log.info("货单更改挂单中,epochMilli时间不为0,时间为:{}", epochMilli);
log.info("货单更改挂单中发送延迟消息,因为挂单时间大于当前时间{}", epochMilli);
message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
message.getMessageProperties().setHeader("x-delay", epochMilli);
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 {
public static List<GdRouteDTO> getRoute(String key, BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
log.info("高德线路规划开始");
//log.info("高德线路规划开始");
List<GdRouteDTO> routeList = new ArrayList<>();
String url = DIRECTION_API+"?origin=" + originLongitude.doubleValue()+","+originLatitude.doubleValue()
......@@ -154,7 +154,7 @@ public class GdService {
// 按距离升序
routeList.sort(Comparator.comparingInt(GdRouteDTO::getDistance));
log.info("高德线路规划结束, route:{}", routeList.size());
//log.info("高德线路规划结束, route:{}", routeList.size());
return routeList;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论