提交 c497bbdc 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 v5.7_break_contract_reverse_20231020 # Conflicts: # performance-web/src/main/java/com/clx/performance/service/impl/OrderGoodsServiceImpl.java
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum BreakContractOwnerRecordEnum {
;
@Getter
@AllArgsConstructor
public enum PayStatus {
NOT(0, "未缴费"),
YES(1, "已缴费"),
;
private final Integer code;
private final String msg;
public static Optional<PayStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(PayStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum CompensationStatusStatus {
NOT(0, "未赔付"),
YES(1, "已赔付"),
;
private final Integer code;
private final String msg;
public static Optional<CompensationStatusStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(CompensationStatusStatus::getMsg).orElse(null);
}
}
}
......@@ -25,7 +25,7 @@ public enum BreakContractRecordEnum {
}
@Getter
@AllArgsConstructor
public enum BreachContractPartyType {
public enum BreakContractPartyType {
PLATFORM(1, "平台"),
OWNER(2, "货主"),
DRIVER(3, "司机"),
......@@ -34,7 +34,7 @@ public enum BreakContractRecordEnum {
private final Integer code;
private final String msg;
public static Optional<BreachContractPartyType> getByCode(int code) {
public static Optional<BreakContractPartyType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
......
......@@ -11,7 +11,7 @@ public enum BreakContractSettlementDriverEnum {
@Getter
@AllArgsConstructor
public enum BreachContractPartyType {
public enum BreakContractPartyType {
PLATFORM(1, "平台"),
OWNER(2, "货主"),
DRIVER(3, "司机"),
......@@ -20,20 +20,20 @@ public enum BreakContractSettlementDriverEnum {
private final Integer code;
private final String msg;
public static Optional<BreachContractPartyType> getByCode(int code) {
public static Optional<BreakContractPartyType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(BreachContractPartyType::getMsg).orElse(null);
return getByCode(code).map(BreakContractPartyType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum SettleStatus {
NO(0, "待结算"),
YES(1, "已结算"),
NO(1, "待结算"),
YES(2, "已结算"),
;
private final Integer code;
......
......@@ -13,16 +13,16 @@ public enum OrderGoodsPendingVehicleUsageEnum {
@AllArgsConstructor
public enum Status {
PLATFORM_TRUCK("1", "平台车辆配货"),
PLATFORM_TRUCK(1, "平台车辆配货"),
OWN_TRUCK("2", "自有车辆配货"),
OWN_TRUCK(2, "自有车辆配货"),
;
private final String code;
private final Integer code;
private final String name;
public static Optional<Status> getByCode(String code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
public static Optional<Status> getByCode(String c) {
return Arrays.stream(values()).filter(e -> e.code.equals(c)).findFirst();
}
}
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum OrderGoodsStopEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
NO(0, "未暂停"),
YES(1, "已暂停")
;
private final Integer code;
private final String name;
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
package com.clx.performance.feign;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
......@@ -49,4 +52,18 @@ public interface PerformanceFeign {
Result<List<String>> getPrivateTruckList(@RequestParam("orderGoodsNo") @NotBlank(message = "货单编号不可为空") String orderGoodsNo,
@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo);
@PostMapping(value = {"clx-performance/feign/order/orderCancel"})
Result<Object> orderCancel(@RequestBody OrderCancelParam param);
/**
* 更新货单暂停标志
* @param orderNo
* @return
*/
@GetMapping(value = {"clx-performance/feign/orderGoods/updateOrderGoodsStopFlag"})
Result<Boolean> updateOrderGoodsStopFlag(@RequestParam("orderNo") String orderNo,@RequestParam("stopFlag") Integer stopFlag);
}
package com.clx.performance.param.mq;
import lombok.Data;
@Data
public class OrderCancelMqParam {
private String orderNo;
// 1:平台 2:货主
private String type;
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
public class OrderCancelParam {
@NotNull(message = "订单编号不能为空")
@ApiModelProperty("订单编号")
private String orderNo;
}
......@@ -24,7 +24,7 @@ public class BreakContractDriverRecordAddParam {
@ApiModelProperty("违约方类型:1平台 3司机")
@NotNull(message = "违约方类型不能为空")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@ApiModelProperty("违约运单")
@NotBlank(message = "违约运单不能为空")
......
......@@ -24,7 +24,7 @@ public class BreakContractOwnerRecordAddParam {
@ApiModelProperty("违约方类型:1平台 2货主")
@NotNull(message = "违约方类型不能为空")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@ApiModelProperty("违约订单")
@NotBlank(message = "违约订单不能为空")
......
......@@ -43,4 +43,7 @@ public class CarrierBreakContractSavePayeeParam {
@ApiModelProperty(value = "付款银行卡卡号", example = "62213545878787")
private String paymentBankCardNo;
@ApiModelProperty(value = "状态", example = "1",hidden = true)
private Integer status;
}
package com.clx.performance.param.pc.breakcontract.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class OwnerConfirmSettlementParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value = "id", example = "100")
private Integer id;
}
......@@ -16,6 +16,9 @@ public class PageBreakContractDriverRecordParam extends PageParam {
@ApiModelProperty(value = "运单", example = "1000000000")
private String childNo;
@ApiModelProperty("触发类型:1系统触发 2手动触发")
private Integer triggerType;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
......
......@@ -16,6 +16,9 @@ public class PageBreakContractOwnerRecordParam extends PageParam {
@ApiModelProperty(value = "订单号", example = "1000000000")
private String orderNo;
@ApiModelProperty("触发类型:1系统触发 2手动触发")
private Integer triggerType;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
......
......@@ -20,6 +20,12 @@ public class PageCarrierBreakContractSettlementDriverParam extends PageParam {
@ApiModelProperty(value="车主编号",example = "201457878")
private Long truckOwnUserNo;
@ApiModelProperty("车主名称")
private String truckOwnName;
@ApiModelProperty("结算状态 1待结算;2已结算")
private Integer settleStatus;
@ApiModelProperty(value = "违约方类型:1平台 2货主 3车主", example = "1")
private Integer breakContractPartyType;
......
......@@ -13,6 +13,11 @@ import lombok.ToString;
@NoArgsConstructor
public class PageCarrierBreakContractSettlementOwnerParam extends PageParam {
@ApiModelProperty(value="货主编号",example = "201457878",hidden = true)
private Long ownerUserNo;
@ApiModelProperty("货主名称")
private String ownerName;
@ApiModelProperty(value="订单编号",example = "201457878")
private String orderNo;
......@@ -23,6 +28,9 @@ public class PageCarrierBreakContractSettlementOwnerParam extends PageParam {
@ApiModelProperty(value = "违约方类型:1平台 2货主 3车主", example = "1")
private Integer breakContractPartyType;
@ApiModelProperty(value = "状态:10-待锁定,20-待货主确认,30-待货主付款,40-待平台确认付款,50-待平台付款,60-待货主确认付款,70-已完结,80-已取消", example = "1")
private Integer status;
@ApiModelProperty(value="开始时间",example = "2012-01-01 00:00:00")
private String beginTime;
......
package com.clx.performance.param.pc.breakcontract.owner;
public class AA {
}
package com.clx.performance.param.pc.breakcontract.owner;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class PageOwnerBreakContractOwnerRecordParam extends PageParam {
@ApiModelProperty(value = "货主编号", example = "1",hidden = true)
private Long ownerUserNo;
@ApiModelProperty(value = "订单号", example = "1000000000")
private String orderNo;
@NotNull(message = "违约方类型不能为空")
@ApiModelProperty(value = "违约方类型:1平台 2货主 3司机", example = "1")
private Integer breakContractPartyType;
@ApiModelProperty(value = "缴费状态:0未缴费;1已缴费/赔付状态:0未赔付;1已赔付", example = "1")
private Integer payStatus;
@ApiModelProperty(value = "开始时间", example = "2012-01-01 00:00:00")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "2012-01-01 00:00:00")
private String endTime;
}
......@@ -27,7 +27,7 @@ public class DriverBreakContractDriverRecordVO {
private Integer triggerType;
@ApiModelProperty("违约方类型:1平台 2货主 3司机")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@ApiModelProperty("违约运单")
private String childNo;
......
......@@ -27,7 +27,7 @@ public class BreakContractDriverRecordVO {
private Integer triggerType;
@ApiModelProperty("违约方类型:1平台 2货主 3司机")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@ApiModelProperty("违约运单")
private String childNo;
......
......@@ -27,7 +27,7 @@ public class BreakContractOwnerRecordVO {
private Integer triggerType;
@ApiModelProperty("违约方类型:1平台 2货主 3司机")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@ApiModelProperty("违约订单")
private String orderNo;
......
......@@ -27,6 +27,9 @@ public class PageCarrierBreakContractSettlementDriverVO {
@ApiModelProperty("车主用户编号")
private Long truckOwnUserNo;
@ApiModelProperty("车主名称")
private String truckOwnName;
@ApiModelProperty("司机名称")
private String driverName;
......@@ -39,10 +42,10 @@ public class PageCarrierBreakContractSettlementDriverVO {
@ApiModelProperty("违约说明")
private String breakContractRemark;
@ApiModelProperty("结算状态 0待结算;1已结算")
@ApiModelProperty("结算状态 1待结算;2已结算")
private String settleStatusMsg;
@ApiModelProperty("结算状态 0待结算;1已结算")
@ApiModelProperty("结算状态 1待结算;2已结算")
private Integer settleStatus;
@ApiModelProperty("结算平台 0马上来")
......
package com.clx.performance.vo.pc.breakcontract.owner;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @author liruixin
* Date 2023-10-24
* Time 16:02
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class PageOwnerBreakContractOwnerRecordVO {
@ApiModelProperty("违约订单")
private String orderNo;
@ApiModelProperty("违约金")
@MoneyOutConvert
private BigDecimal figure;
@ApiModelProperty("结算单编号")
private String settlementNo;
@ApiModelProperty("缴费状态:0未缴费;1已缴费")
private String payStatusMsg;
@ApiModelProperty("赔付状态:0未赔付;1已赔付")
private String compensationStatusMsg;
@ApiModelProperty("缴费状态:0未缴费;1已缴费 /赔付状态:0未赔付;1已赔付")
private Integer payStatus;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("违约时间")
private String createTime;
@ApiModelProperty("赔付时间")
private String payTime;
}
package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
......@@ -24,10 +27,11 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
*
*/
@Component
@Slf4j
@AllArgsConstructor
......@@ -43,107 +47,183 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
public void expireProduce(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
private final OrderChildDao orderChildDao;
//根据货单最晚接单时间处理的
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());
}
public void expireProduceByLastArriveSendTime(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
}
/**
* 根据货单最晚接单时间处理的
*/
@XxlJob("OrderGoodsSuccess")
@Transactional(rollbackFor = Exception.class)
public void consuming() {
log.info("货单已完结定时器启动");
public void consumingLastOrderTime() {
log.info("货单-最晚接单时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY,
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME,
0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间)
);
if (orderGoodsIds == null) {
log.info("货单已完结定时器查询redis条数为null");
log.info("货单-最晚接单时间-定时器查询redis条数为null");
return;
}
if (orderGoodsIds.isEmpty()) {
log.info("货单已完结定时器查询redis条数为空");
log.info("货单-最晚接单时间-定时器查询redis条数为空");
return;
}
if (!CollectionUtil.isEmpty(orderGoodsIds)) {
log.info("货单已完结定时器查询redis条数:{}", orderGoodsIds.size());
log.info("货单-最晚接单时间-定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚拉运时间");
log.info("货单" + orderGoodsId + "过了最晚接单时间");
String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsId.getValue());
log.info("当前货单编号未查询出货单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
}
OrderGoods orderGoods = optional.get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
if (orderInfoFeign == null) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("当前货单编号未查询出订单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
} else {
log.info("当前货单编号已经查出数据{}", orderGoodsNo);
}
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())) {
log.info("当前货单状态判断为已完成");
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
//更新货单已完成
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else {
log.info("当前货单状态判断不是已完成:货单状态为{}", orderGoods.getOrderGoodsStatus());
}
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())) {
log.info("当前货单状态为已完成");
//如果当前货单已完成,则判断之前所有货单是否等于订单总吨数,等于则更新订单为已完成
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(orderGoods.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight());
if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) {
log.info("已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成");
//已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setOrderStatus(OrderEnum.Status.SUCCESS.getCode());
orderFeign.updateOrderInfo(updateOrderInfoParam);
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
if (orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())
|| orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
log.info("判断吨数不一致:childSum{}, transportWeight {}", childSum, new BigDecimal(orderInfoFeign.getTransportWeight()));
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderFeign.rollbackOrderWeight(param);
//更新已完结,并设置剩余吨数为0
orderGoodsDao.updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(orderGoods.getId(), OrderGoodsStatusEnum.Status.COMPLETED.getCode());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
}
} else {
log.info("当前货单状态为已完结");
//更新货单已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight();
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setResidueWeight(residueTransportWeight.add(new BigDecimal(orderInfoFeign.getResidueWeight())));
updateOrderInfoParam.setVehicleUsage(orderGoods.getVehicleUsage());
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsId.getValue());
log.info("订单ID:{},返还订单剩余吨数{}", orderInfoFeign.getId(), residueTransportWeight);
}
}
}
/**
* 最晚到达货源地运单关闭
*/
@XxlJob("OrderChildCancel")
@Transactional(rollbackFor = Exception.class)
public void consumingLastArriveSendTime() {
log.info("货单-最晚到达货源地时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis();
//返还订单剩余吨数
orderFeign.updateOrderInfo(updateOrderInfoParam);
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME,
0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间)
);
if (orderGoodsIds == null) {
log.info("货单-最晚到达货源地时间-定时器查询redis条数为null");
return;
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
if (orderGoodsIds.isEmpty()) {
log.info("货单-最晚到达货源地时间-定时器查询redis条数为空");
return;
}
if (!CollectionUtil.isEmpty(orderGoodsIds)) {
log.info("货单-最晚到达货源地时间-定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚到达货源地时间");
String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
log.info("当前货单编号未查询出货单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
}
OrderGoods orderGoods = optional.get();
List<OrderChild> orderChildrenList = orderChildDao.selectInTransitOrderChild(orderGoodsNo);
BigDecimal childSum = BigDecimal.ZERO;
for (OrderChild orderChild : orderChildrenList) {
childSum.add(orderChild.getWeight());
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
//TODO 补充批量更新接口 关闭运单状态
orderChildDao.updateEntityByKey(update);
}
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) {
//当前情况需要回填订单的余量
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderFeign.rollbackOrderWeight(param);
} else {
//只更新货单未拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeight(childSum, orderGoods.getId());
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
}
}
}
@Override
public void afterPropertiesSet() throws Exception {
Optional<List<OrderGoods>> optional = orderGoodsDao.getOrderGoodsList();
if (optional.isPresent()) {
for (OrderGoods orderGoods : optional.get()) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoods.getOrderGoodsNo(), orderGoods.getLastArriveSendTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
//处理最晚接单时间,货单处理,并回退吨数
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoods.getOrderGoodsNo(), orderGoods.getLastOrderTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
//处理最晚到达货源地,运单取消处理,并回退吨数
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoods.getOrderGoodsNo(), orderGoods.getLastArriveSendTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
}
}
}
......
......@@ -144,4 +144,30 @@ public class RabbitBeanConfig {
public Binding orderGoodsDeadExchangeBind() {
return BindingBuilder.bind(orderGoodsOnDeadQueue()).to(orderGoodsOnDeadExchange()).with(RabbitKeyConstants.ORDER_GOODS_ON_DEAD_ROUTE_KEY);
}
/**
* 订单取消队列
* @return
*/
@Bean
public Queue orderCancelQueue() {
return new Queue(RabbitKeyConstants.ORDER_CANCEL_QUEUE, true, false, false);
}
/**
* 订单取消队列交换机
**/
@Bean
public DirectExchange orderCancelExchange() {
return new DirectExchange(RabbitKeyConstants.ORDER_CANCEL_EXCHANGE);
}
/**
* 订单取消队列绑定
*/
@Bean
public Binding orderCancelExchangeBind() {
return BindingBuilder.bind(orderCancelQueue()).to(orderCancelExchange()).with(RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY);
}
}
......@@ -52,4 +52,10 @@ public class RabbitKeyConstants {
public static final String ORDER_GOODS_ON_DEAD_ROUTE_KEY ="clx-order.order.goods.on.dead.route.key";
public static final String ORDER_CANCEL_QUEUE ="clx-order.order.cancel.queue";
public static final String ORDER_CANCEL_EXCHANGE ="clx-order.order.cancel.exchange";
public static final String ORDER_CANCEL_ROUTE_KEY ="clx-order.order.cancel.route.key";
}
......@@ -19,7 +19,10 @@ public class RedisConstants {
public static final String CARRIER_ORDER_NUM_POOL_KEY = "clx-performance:order:orderNumPool:{date}";
public static final String ORDER_GOODS_STATUS_LAZY = "clx:order:goods:status:lazy:";
public static final String ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME = "clx:order:goods:status:lazy:lastOrderTime";
public static final String ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME = "clx:order:goods:status:lazy:lastOrderTime";
public static final String ORDER_GOODS_TRUCK_RECORD = "clx:order:goods:truck:record:";
public static final String ORDER_GOODS_RECORD = "clx:order:goods:record:";
......
package com.clx.performance.controller.feign;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/feign/order")
@Validated
@AllArgsConstructor
@Api(tags = "PC-订单取消")
public class OrderCancelFeignController {
private final OrderCancelService orderCancelService;
@ApiOperation(value = "查看货单列表", notes = "<br>By:胡宇帆")
@PostMapping("/orderCancel")
public Result<Object> orderCancel(@RequestBody OrderCancelParam param) {
orderCancelService.ownerCancelOrderPre(param.getOrderNo());
return Result.ok();
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.controller.feign;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
......@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
......@@ -27,4 +29,11 @@ public class OrderGoodsFeignController {
List<OrderGoodsFeignVO> getOrderGoodsListByOrderNo(@RequestParam("userNo") @NotNull(message = "订单编号不可为空") String orderNo) {
return orderGoodsService.getOrderGoodsListByOrderNo(orderNo);
}
@GetMapping({"/updateOrderGoodsStopFlag"})
Result<Boolean> updateOrderGoodsStopFlag(@RequestParam("orderNo") @NotBlank(message = "订单编号不可为空") String orderNo,
@RequestParam("stopFlag") @NotNull(message = "暂停标志不可为空") Integer stopFlag) {
return Result.ok(orderGoodsService.updateOrderGoodsStopFlag(orderNo,stopFlag));
}
}
......@@ -133,9 +133,22 @@ public class GoodsOrderController {
@ApiOperation(value = "取消订单获取弹窗样式", notes = "<br>By:胡宇帆")
@GetMapping("/orderCancel")
public Result<String> orderCancel(@RequestParam(value = "orderNo") String orderNo) {
return Result.ok(orderGoodsService.orderCancel(orderNo));
@GetMapping("/orderCancelStyle")
public Result<String> orderCancelStyle(@RequestParam(value = "orderNo") String orderNo) {
return Result.ok(orderGoodsService.orderCancelStyle(orderNo));
}
@ApiOperation(value = "取消货单获取弹窗样式", notes = "<br>By:胡宇帆")
@GetMapping("/orderGoodsCancelStyle")
public Result<String> orderGoodsCancelStyle(@RequestParam(value = "orderGoodsNo") String orderGoodsNo) {
return Result.ok(orderGoodsService.orderGoodsCancelStyle(orderGoodsNo));
}
@ApiOperation(value = "取消货单", notes = "<br>By:胡宇帆")
@GetMapping("/orderGoodsCancel")
public Result<Object> orderGoodsCancel(@RequestParam(value = "orderGoodsNo") String orderGoodsNo) {
orderGoodsService.orderGoodsCancel(orderGoodsNo);
return Result.ok();
}
@ApiOperation(value = "获取当前订单可取消吨数", notes = "<br>By:胡宇帆")
......
package com.clx.performance.controller.pc.breakcontract.owner;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping(value="/pc/owner/breakContract/ownerRecord")
@Validated
@Api(tags = "货主端-违约管理")
@AllArgsConstructor
public class OwnerBreakContractOwnerRecordController {
private final BreakContractOwnerRecordService breakContractOwnerRecordService;
@ApiOperation(value = "列表",notes = "<br>By:李瑞新")
@PostMapping("/pageOwnerRecord")
@UnitCovert(param = false)
public Result<PageData<PageOwnerBreakContractOwnerRecordVO>> pageOwnerRecord(@RequestBody @Validated PageOwnerBreakContractOwnerRecordParam param) {
IPage<PageOwnerBreakContractOwnerRecordVO> page = breakContractOwnerRecordService.pageOwnerRecord(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.pc.breakcontract.owner;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.CarrierBreakContractSavePayeeParam;
import com.clx.performance.param.pc.breakcontract.carrier.CarrierBreakPayeeConfirmParam;
import com.clx.performance.param.pc.breakcontract.carrier.OwnerConfirmSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementOwnerParam;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementOwnerVO;
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.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
......@@ -29,8 +40,51 @@ public class OwnerBreakContractSettlementOwnerController {
@ApiOperation(value = "详情",notes = "<br>By:李瑞新")
@GetMapping("/getOwnerBreakContractSettlementOwnerDetail")
@UnitCovert(param = false)
public Result<CarrierBreakContractSettlementOwnerDetailVO> getCarrierBreakContractSettlementOwnerDetail(@NotNull(message = "id不能为空") Integer id) {
public Result<CarrierBreakContractSettlementOwnerDetailVO> getOwnerBreakContractSettlementOwnerDetail(@NotNull(message = "id不能为空") Integer id) {
return Result.ok(breakContractSettlementOwnerService.getCarrierBreakContractSettlementOwnerDetail(id));
}
@ApiOperation(value = "列表",notes = "<br>By:李瑞新")
@PostMapping("/pageOwnerBreakContractSettlementOwnerList")
@UnitCovert(param = false)
public Result<PageData<PageCarrierBreakContractSettlementOwnerVO>> pageOwnerBreakContractSettlementOwnerList(@RequestBody PageCarrierBreakContractSettlementOwnerParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
param.setOwnerUserNo(loginUserInfo.getUserNo());
IPage<PageCarrierBreakContractSettlementOwnerVO> page = breakContractSettlementOwnerService.pageCarrierBreakContractSettlementOwnerList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "导出")
@PostMapping("/exportOwnerBreakContractSettlementOwnerList")
public Result exportOwnerBreakContractSettlementOwnerList(@RequestBody PageCarrierBreakContractSettlementOwnerParam param, HttpServletResponse response) throws Exception {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
param.setOwnerUserNo(loginUserInfo.getUserNo());
SXSSFWorkbook workbook = breakContractSettlementOwnerService.exportCarrierBreakContractSettlementOwnerList(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
return null;
}
@ApiOperation(value = "确认结算单",notes = "<br>By:李瑞新")
@PostMapping("/updateOwnerConfirmSettlement")
public Result updateOwnerConfirmSettlement(@RequestBody @Validated OwnerConfirmSettlementParam param) {
breakContractSettlementOwnerService.updateConfirmSettlement(param);
return Result.ok();
}
@ApiOperation(value = "付款",notes = "<br>By李瑞新")
@PostMapping("/saveOwnerBreakContractPayee")
public Result saveOwnerBreakContractPayee(@RequestBody @Validated CarrierBreakContractSavePayeeParam param) {
breakContractSettlementOwnerService.saveOwnerBreakContractPayee(param);
return Result.ok();
}
@ApiOperation(value = "付款确认",notes = "<br>By:李瑞新")
@PostMapping("/updateOwnerBreakContractPayeeConfirm")
public Result updateOwnerBreakContractPayeeConfirm(@RequestBody @Validated CarrierBreakPayeeConfirmParam param ) {
breakContractSettlementOwnerService.updateOwnerBreakContractPayeeConfirm(param);
return Result.ok();
}
}
......@@ -63,6 +63,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> getOrderChildBussInfo(String truckNo);
List<OrderChild> selectListByOrderGoodsNo(String orderGoodsNo);
Page<OrderChild> pageOrderChild(PageMonitorOrderChildQCParam param);
List<OrderChild> listOrderChild(List<Integer> status);
......@@ -78,5 +80,12 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
@Param("list")List<String> orderGoodsNoList
);
List<OrderChild> selectResidueWeight(String orderNo);
List<OrderChild> selectResidueWeight(String orderNo,Integer status);
/**
* 查询在途运单
* @param orderGoodsNo
* @return
*/
List<OrderChild> selectInTransitOrderChild(String orderGoodsNo);
}
......@@ -56,4 +56,10 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> listIntegralOrderGoodsSync();
boolean updatePendingOrderFreightById(Integer id, BigDecimal pendingOrderFreight);
Boolean updateStopFlagByOrderNo(String orderNo, Integer stopFlag);
boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status);
Integer updateOrderGoodsSetResidueWeight(BigDecimal residueWeight, Integer id);
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.breakcontract.BreakContractOwnerRecordMapper;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.msl.common.dao.BaseDao;
......@@ -17,4 +18,6 @@ public interface BreakContractOwnerRecordDao extends BaseDao<BreakContractOwnerR
IPage<BreakContractOwnerRecordVO> pageByParam(PageBreakContractOwnerRecordParam param);
IPage<BreakContractOwnerRecord> pageOwnerBreakContractOwnerRecordList(PageOwnerBreakContractOwnerRecordParam param);
}
package com.clx.performance.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -259,9 +260,18 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public List<OrderChild> selectResidueWeight(String orderNo) {
return baseMapper.selectList(lambdaQuery().eq(OrderChild::getOrderNo,orderNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.ARRIVE_SEND.getCode())
public List<OrderChild> selectResidueWeight(String orderNo, Integer status) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.lt(ObjectUtil.isNotEmpty(status),OrderChild::getStatus, status)
);
}
@Override
public List<OrderChild> selectInTransitOrderChild(String orderGoodsNo) {
//查询小于 100(完成)的运单都属于在途
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode())
);
}
......@@ -289,4 +299,12 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
return baseMapper.selectList(query);
}
@Override
public List<OrderChild> selectListByOrderGoodsNo(String orderGoodsNo) {
//查询小于 100(完成)的运单都属于在途
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.notIn(OrderChild::getStatus, OrderChildEnum.Status.DRIVER_CANCEL.getCode(),OrderChildEnum.Status.PLATFORM_CANCEL.getCode(),OrderChildEnum.Status.OWNER_CANCEL.getCode())
);
}
}
......@@ -149,4 +149,22 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
public boolean updatePendingOrderFreightById(Integer id, BigDecimal pendingOrderFreight) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,id).set(OrderGoods :: getPendingOrderFreight,pendingOrderFreight));
}
@Override
public Boolean updateStopFlagByOrderNo(String orderNo, Integer stopFlag) {
return update(lUdWrapper().eq(OrderGoods :: getOrderNo,orderNo).set(OrderGoods :: getStopFlag,stopFlag));
}
@Override
public boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,orderGoodsId)
.set(OrderGoods :: getOrderGoodsStatus, status)
.set(OrderGoods::getResidueTransportWeight, BigDecimal.ZERO))
;
}
@Override
public Integer updateOrderGoodsSetResidueWeight(BigDecimal residueWeight, Integer id) {
return baseMapper.updateOrderGoodsSetResidueWeight(residueWeight,id);
}
}
package com.clx.performance.dao.impl.breakcontract;
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.dao.breakcontract.BreakContractOwnerRecordDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.mapper.breakcontract.BreakContractOwnerRecordMapper;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.Objects;
/**
* @author liruixin
* Date 2023-10-24
......@@ -24,4 +30,22 @@ public class BreakContractOwnerRecordDaoImpl extends BaseDaoImpl<BreakContractOw
Page<BreakContractOwnerRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
@Override
public IPage<BreakContractOwnerRecord> pageOwnerBreakContractOwnerRecordList(PageOwnerBreakContractOwnerRecordParam param) {
LambdaQueryWrapper<BreakContractOwnerRecord> query = new LambdaQueryWrapper<>();
query.eq(StringUtils.isNotBlank(param.getOrderNo()),BreakContractOwnerRecord :: getOrderNo,param.getOrderNo());
query.eq(Objects.nonNull(param.getOwnerUserNo()),BreakContractOwnerRecord :: getOwnerUserNo,param.getOwnerUserNo());
query.eq(Objects.nonNull(param.getBreakContractPartyType()),BreakContractOwnerRecord :: getBreakContractPartyType,param.getBreakContractPartyType());
query.eq(Objects.nonNull(param.getPayStatus()),BreakContractOwnerRecord :: getPayStatus,param.getPayStatus());
if(Objects.equals(param.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())){
query.ge(StringUtils.isNotBlank(param.getBeginTime()), BreakContractOwnerRecord:: getPayTime,param.getBeginTime());
query.le(StringUtils.isNotBlank(param.getEndTime()),BreakContractOwnerRecord :: getPayTime,param.getEndTime());
}else{
query.ge(StringUtils.isNotBlank(param.getBeginTime()), BreakContractOwnerRecord:: getCreateTime,param.getBeginTime());
query.le(StringUtils.isNotBlank(param.getEndTime()),BreakContractOwnerRecord :: getCreateTime,param.getEndTime());
}
query.orderByDesc(BreakContractOwnerRecord::getId);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
}
......@@ -23,13 +23,17 @@ import java.util.Objects;
public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> implements BreakContractSettlementDriverDao {
@Override
public IPage<BreakContractSettlementDriver> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param) {
LambdaQueryWrapper<BreakContractSettlementDriver> query = new LambdaQueryWrapper<>();
query.eq(StringUtils.isNotBlank(param.getChildNo()),BreakContractSettlementDriver :: getChildNo,param.getChildNo());
query.eq(StringUtils.isNotBlank(param.getTruckOwnName()),BreakContractSettlementDriver :: getTruckOwnName,param.getTruckOwnName());
query.eq(Objects.nonNull(param.getSettleStatus()),BreakContractSettlementDriver :: getSettleStatus,param.getSettleStatus());
query.eq(Objects.nonNull(param.getTruckOwnUserNo()),BreakContractSettlementDriver :: getTruckOwnUserNo,param.getTruckOwnUserNo());
query.eq(Objects.nonNull(param.getBreakContractPartyType()),BreakContractSettlementDriver :: getBreakContractPartyType,param.getBreakContractPartyType());
query.ge(StringUtils.isNotBlank(param.getBeginTime()),BreakContractSettlementDriver :: getCreateTime,param.getBeginTime());
query.le(StringUtils.isNotBlank(param.getEndTime()),BreakContractSettlementDriver :: getCreateTime,param.getEndTime());
query.orderByDesc(BreakContractSettlementDriver::getId);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
}
......@@ -29,6 +29,8 @@ public class BreakContractSettlementOwnerDaoImpl extends BaseDaoImpl<BreakContra
public IPage<BreakContractSettlementOwner> pageCarrierBreakContractSettlementOwnerList(PageCarrierBreakContractSettlementOwnerParam param) {
LambdaQueryWrapper<BreakContractSettlementOwner> query = new LambdaQueryWrapper<>();
query.eq(StringUtils.isNotBlank(param.getOrderNo()),BreakContractSettlementOwner :: getOrderNo,param.getOrderNo());
query.eq(Objects.nonNull(param.getOwnerUserNo()),BreakContractSettlementOwner :: getOwnerUserNo,param.getOwnerUserNo());
query.eq(StringUtils.isNotBlank(param.getOwnerName()),BreakContractSettlementOwner ::getOwnerName ,param.getOwnerName());
query.eq(StringUtils.isNotBlank(param.getSettlementNo()),BreakContractSettlementOwner ::getSettlementNo ,param.getSettlementNo());
query.eq(Objects.nonNull(param.getBreakContractPartyType()),BreakContractSettlementOwner :: getBreakContractPartyType,param.getBreakContractPartyType());
query.ge(StringUtils.isNotBlank(param.getBeginTime()), BreakContractSettlementOwner:: getCreateTime,param.getBeginTime());
......@@ -57,6 +59,7 @@ public class BreakContractSettlementOwnerDaoImpl extends BaseDaoImpl<BreakContra
.set(BreakContractSettlementOwner::getPaymentImg, param.getPaymentImg())
.set(BreakContractSettlementOwner::getPaymentBankCardNo, param.getPaymentBankCardNo())
.set(BreakContractSettlementOwner::getPaymentBankName, param.getPaymentBankName())
.set(BreakContractSettlementOwner::getStatus, param.getStatus())
);
}
......
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.mq.OrderCancelMqParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderCancelService;
import com.msl.common.base.Optional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 处理货单取消吨数回填
*/
@Slf4j
@Component
public class OrderCancelHandler {
@Autowired
private OrderCancelService orderCancelService;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CANCEL_QUEUE)
public void onMessage(String message) {
log.info("处理订单取消监听器执行,订单No为{}", message);
OrderCancelMqParam param = JSONUtil.toBean(message, OrderCancelMqParam.class);
if (StringUtils.equals(param.getType(), "1")) {
orderCancelService.platformCancelOrder(param.getOrderNo());
} else {
orderCancelService.ownerCancelOrder(param.getOrderNo());
}
return;
// if (StringUtils.isBlank(message)) {
// return;
// }
// orderCancelService.ownerCancelOrder(message);
}
}
......@@ -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.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
......@@ -12,6 +13,7 @@ import com.clx.performance.vo.pc.OrderGoodsVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import java.math.BigDecimal;
import java.util.List;
......@@ -55,4 +57,6 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "saveBatchEntity")
void saveBatchEntity(List<OrderGoods> orderGoodsList);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeight")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "residueWeight") BigDecimal residueWeight, @Param(value = "id") Integer id);
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
......@@ -85,6 +86,8 @@ public class OrderChild implements HasKey<Integer> {
private LocalDateTime expectSendTime; //预计到达货源地时间
private LocalDateTime expectReceiveTime; //预计到达目的地时间
private Integer settlementAccountPeriod; //结算账期 1拉运完成结 2月结
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -165,6 +165,15 @@ public class OrderGoods implements HasKey<Integer> {
@ApiModelProperty("创建人姓名")
private String userName;
@TableField("settlement_account_period")
@ApiModelProperty("结算账期 1拉运完成结 2月结")
private String settlementAccountPeriod;
@TableField("stop_flag")
@ApiModelProperty("是否暂停 0:否 1:是")
private Integer stopFlag;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
......
......@@ -31,9 +31,9 @@ public class BreakContractDriverRecord implements HasKey<Integer> {
@ApiModelProperty("触发类型:1系统触发 2手动触发")
private Integer triggerType;
@TableField("breach_contract_party_type")
@TableField("break_contract_party_type")
@ApiModelProperty("违约方类型:1平台 2货主 3车主")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@TableField("break_no")
@ApiModelProperty(value = "违约单号", example = "")
......
......@@ -31,9 +31,9 @@ public class BreakContractOwnerRecord implements HasKey<Integer> {
@ApiModelProperty("触发类型:1系统触发 2手动触发")
private Integer triggerType;
@TableField("breach_contract_party_type")
@TableField("break_contract_party_type")
@ApiModelProperty("违约方类型:1平台 2货主 3车主")
private Integer breachContractPartyType;
private Integer breakContractPartyType;
@TableField("break_no")
@ApiModelProperty(value = "违约单号", example = "")
......@@ -59,6 +59,14 @@ public class BreakContractOwnerRecord implements HasKey<Integer> {
@ApiModelProperty("结算单编号")
private String settlementNo;
@TableField("pay_status")
@ApiModelProperty("缴费状态:0未缴费;1已缴费")
private Integer payStatus;
@TableField("pay_time")
@ApiModelProperty("支付时间")
private LocalDateTime payTime;
@TableField("remark")
@ApiModelProperty("备注")
private String remark;
......
......@@ -31,6 +31,10 @@ public class BreakContractSettlementDriver implements HasKey<Integer> {
@ApiModelProperty("违约方类型:1平台 2货主 3车主")
private Integer breakContractPartyType;
@TableField("break_no")
@ApiModelProperty("违约单号")
private String breakNo;
@TableField("settlement_no")
@ApiModelProperty("结算单编号")
private String settlementNo;
......@@ -64,7 +68,7 @@ public class BreakContractSettlementDriver implements HasKey<Integer> {
private String breakContractRemark;
@TableField("settle_status")
@ApiModelProperty("结算状态 0待结算;1已结算")
@ApiModelProperty("结算状态 1待结算;2已结算")
private Integer settleStatus;
@TableField("settle_platform")
......
package com.clx.performance.service;
public interface OrderCancelService {
void platformCancelOrderPre(String orderNo);
void platformCancelOrder(String orderNo);
void ownerCancelOrderPre(String orderNo);
void ownerCancelOrder(String orderNo);
}
......@@ -36,11 +36,31 @@ public interface OrderGoodsService {
List<OrderGoods> getOrderGoodsList(String orderNo, LocalDateTime lastArriveSendTime);
String orderCancel(String orderNo);
/**
* 获取订单取消的时候订单样式
* @param orderNo
* @return
*/
String orderCancelStyle(String orderNo);
BigDecimal orderCancelResidueWeight(String orderNo,String optionType);
void updateEditOrderGoods(UpdateEditOrderGoodsParam param);
void updateOrderGoodsPrice(UpdateOrderGoodsPriceParam param);
Boolean updateOrderGoodsStopFlag(String orderNo,Integer stopFlag);
/**
* 获取货单取消的时候弹窗样式
* @param orderGoodsNo
* @return
*/
String orderGoodsCancelStyle(String orderGoodsNo);
/**
* 取消货单
* @param orderGoodsNo
*/
void orderGoodsCancel(String orderGoodsNo);
}
......@@ -3,7 +3,9 @@ package com.clx.performance.service.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractOwnerRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
/**
* @author liruixin
......@@ -15,5 +17,7 @@ public interface BreakContractOwnerRecordService {
IPage<BreakContractOwnerRecordVO> pageRecord(PageBreakContractOwnerRecordParam param);
IPage<PageOwnerBreakContractOwnerRecordVO> pageOwnerRecord(PageOwnerBreakContractOwnerRecordParam param);
}
......@@ -12,6 +12,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook;
* Time 16:02
*/
public interface BreakContractSettlementOwnerService {
IPage<PageCarrierBreakContractSettlementOwnerVO> pageCarrierBreakContractSettlementOwnerList(PageCarrierBreakContractSettlementOwnerParam param);
......@@ -26,4 +27,12 @@ public interface BreakContractSettlementOwnerService {
void saveCarrierBreakContractPayee(CarrierBreakContractSavePayeeParam param);
void updateCarrierBreakContractPayeeConfirm(CarrierBreakPayeeConfirmParam param);
void updateConfirmSettlement(OwnerConfirmSettlementParam param);
void saveOwnerBreakContractPayee(CarrierBreakContractSavePayeeParam param);
void updateOwnerBreakContractPayeeConfirm(CarrierBreakPayeeConfirmParam param);
}
package com.clx.performance.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject;
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.param.feign.UpdateOrderInfoResidueWeightParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderChildEnum;
......@@ -12,10 +16,14 @@ import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.mq.OrderCancelMqParam;
import com.clx.performance.service.OrderCancelService;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -37,11 +45,14 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OrderGoodsDao orderGoodsDao;
private final RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(String orderNo) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
BigDecimal orderTransportWeight = new BigDecimal(orderInfoFeign.getTransportWeight());
public void platformCancelOrderPre(String orderNo) {
// FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
// BigDecimal orderTransportWeight = new BigDecimal(orderInfoFeign.getTransportWeight());
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isEmpty(orderGoodsList)) {
......@@ -50,17 +61,26 @@ public class OrderCancelServiceImpl implements OrderCancelService {
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("1");
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
);
return;
}
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo);
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, null);
if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
//说明此刻未产生运单
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
......@@ -69,16 +89,38 @@ public class OrderCancelServiceImpl implements OrderCancelService {
}
} else {
BigDecimal orderChildResidueWeight = orderChildrenList.stream()
.map(OrderChild::getWeight)
.reduce(BigDecimal.ZERO, BigDecimal::add);
if (orderChildResidueWeight.compareTo(orderTransportWeight) == 0) {
throw new RuntimeException("当前订单已无余量可取消");
}
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
List<OrderChild> orderChildren = orderChildMap.get(orderGoods.getOrderGoodsNo());
if (CollectionUtil.isEmpty(orderChildren)) {
//没有运单,直接是取消
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) != 0) {
//货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else {
List<OrderChild> orderChildrenListComplete = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.COMPLETE.getCode());
if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) {
Map<String, List<OrderChild>> orderChildCompleteMap = orderChildrenListComplete.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
//没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结
List<OrderChild> childList = orderChildCompleteMap.get(orderGoods.getOrderGoodsNo());
BigDecimal reduce = childList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
}
}
orderGoodsDao.updateEntityByKey(update);
}
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.COMPLETED.getCode());
......@@ -87,11 +129,273 @@ public class OrderCancelServiceImpl implements OrderCancelService {
}
}
log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("1");
mqParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void platformCancelOrder(String orderNo) {
log.info("开始执行平台订单取消吨数回填");
FeignOrderVO orderInfoFeignVO = orderFeign.getOrderInfoFeign(orderNo);
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<Integer, BigDecimal> truckDemandMap = new HashMap<>();
truckDemandMap.put(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode(), BigDecimal.ZERO);
truckDemandMap.put(TruckDemandEnum.TruckType.OWNER_CAR.getCode(), BigDecimal.ZERO);
//非部分平台车辆拉运
if (!TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode().equals(orderInfoFeignVO.getTruckDemand())) {
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
for (OrderChild orderChild : orderChildrenList) {
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
//TODO 补充批量更新接口 关闭运单状态
orderChildDao.updateEntityByKey(update);
}
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
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);
List<OrderChild> orderChildren = orderChildMap.get(orderGoodsNo);
BigDecimal sum = BigDecimal.ZERO;
if (CollectionUtil.isNotEmpty(orderChildren)) {
sum = orderChildren.stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight().add(sum)));
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态 注意判断货单是已完结还是已完成
update.setResidueTransportWeight(BigDecimal.ZERO);
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已取消
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
orderGoodsDao.updateEntityByKey(update);
}
}
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());
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
orderFeign.rollbackOrderWeight(param);
} else {
Map<Integer, BigDecimal> vehicleUsageMap = new HashMap<>();
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
for (OrderChild orderChild : orderChildrenList) {
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
//TODO 补充批量更新接口 关闭运单状态
orderChildDao.updateEntityByKey(update);
}
//货单
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
//运单
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);
BigDecimal sum = BigDecimal.ZERO;
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoodsNo))) {
sum = orderChildMap.get(orderGoodsNo).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight().add(sum)));
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
//update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已取消
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
//update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
}
//归还吨数
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderInfoFeignVO.getOrderNo());
param.setResidueWeight(residueSum);
param.setPlatformResidueCarryWeight(platformResidueSum);
param.setOwnResidueCarryWeight(ownResidueSum);
orderFeign.rollbackOrderWeight(param);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrderPre(String orderNo) {
//FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (CollectionUtil.isEmpty(orderGoodsList)) {
//未产生货单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
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
);
return;
}
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, null);
if (CollectionUtil.isEmpty(orderChildrenList)) {
//说明此刻未产生运单
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.CANCELED.getCode());
if (!result.succeed()) {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
}
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
orderGoodsDao.updateEntityByKey(update);
}
} else {
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
List<OrderChild> orderChildren = orderChildMap.get(orderGoods.getOrderGoodsNo());
if (CollectionUtil.isEmpty(orderChildren)) {
//没有运单,直接是取消
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) != 0) {
//货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else {
List<OrderChild> orderChildrenListComplete = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.COMPLETE.getCode());
if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) {
Map<String, List<OrderChild>> orderChildCompleteMap = orderChildrenListComplete.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
//没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结
List<OrderChild> childList = orderChildCompleteMap.get(orderGoods.getOrderGoodsNo());
BigDecimal reduce = childList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
}
}
orderGoodsDao.updateEntityByKey(update);
}
Result<Object> result = orderFeign.updateOrderStatusByOrderNo(orderNo, OrderEnum.Status.COMPLETED.getCode());
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
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerCancelOrder(String orderNo) {
log.info("开始执行订单取消吨数回填");
FeignOrderVO orderInfoFeignVO = orderFeign.getOrderInfoFeign(orderNo);
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
......@@ -101,7 +405,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<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo);
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
for (OrderChild orderChild : orderChildrenList) {
OrderChild update = new OrderChild();
......@@ -119,18 +423,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) {
String orderGoodsNo = entry.getKey();
OrderGoods orderGoods = entry.getValue().get(0);
BigDecimal sum = orderChildMap.get(orderGoodsNo).stream()
List<OrderChild> orderChildren = orderChildMap.get(orderGoodsNo);
BigDecimal sum = BigDecimal.ZERO;
if (CollectionUtil.isNotEmpty(orderChildren)) {
sum = orderChildren.stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight().add(sum)));
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
//TODO 补充批量更新接口 关闭货单状态 注意判断货单是已完结还是已完成
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
......@@ -144,37 +451,43 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
// update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
orderGoodsDao.updateEntityByKey(update);
}
}
Integer truckDemand = orderInfoFeignVO.getTruckDemand();
BigDecimal residueWeight = truckDemandMap.get(truckDemand);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfoFeignVO.getId());
if (residueWeight.compareTo(BigDecimal.ZERO) == 0) {
log.info("当前订单对应的货单无需吨数回填,订单编号{}", orderNo);
return;
}
//归还吨数
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderInfoFeignVO.getOrderNo());
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
param.setUpdateType("2");
param.setResidueWeight(residueWeight.add(new BigDecimal(orderInfoFeignVO.getResidueWeight())));
param.setPlatWeight(residueWeight);
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setUpdateType("3");
param.setResidueWeight(residueWeight.add(new BigDecimal(orderInfoFeignVO.getResidueWeight())));
param.setOwnWeight(residueWeight);
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
orderFeign.updateOrderInfoResidueWeight(param);
orderFeign.rollbackOrderWeight(param);
} else {
Map<Integer, BigDecimal> vehicleUsageMap = new HashMap<>();
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo);
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
for (OrderChild orderChild : orderChildrenList) {
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.OWNER_CANCEL.getCode());
update.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
//TODO 补充批量更新接口 关闭运单状态
orderChildDao.updateEntityByKey(update);
}
......@@ -189,8 +502,12 @@ public class OrderCancelServiceImpl implements OrderCancelService {
for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) {
String orderGoodsNo = entry.getKey();
OrderGoods orderGoods = entry.getValue().get(0);
BigDecimal sum = orderChildMap.get(orderGoodsNo).stream()
BigDecimal sum = BigDecimal.ZERO;
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoodsNo))) {
sum = orderChildMap.get(orderGoodsNo).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight().add(sum)));
......@@ -198,7 +515,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
......@@ -213,24 +530,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
update.setId(orderGoods.getId());
//TODO 补充批量更新接口 关闭货单状态
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
}
String platformResidueCarryWeight = orderInfoFeignVO.getPlatformResidueCarryWeight();
String ownResidueCarryWeight = orderInfoFeignVO.getOwnResidueCarryWeight();
BigDecimal platformResidueSum = new BigDecimal(platformResidueCarryWeight).add(vehicleUsageMap.get(1));
BigDecimal ownResidueSum = new BigDecimal(ownResidueCarryWeight).add(vehicleUsageMap.get(2));
BigDecimal residueSum = new BigDecimal(orderInfoFeignVO.getResidueWeight()).add(platformResidueSum).add(ownResidueSum);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfoFeignVO.getId());
param.setUpdateType("4");
//归还吨数
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderInfoFeignVO.getOrderNo());
param.setResidueWeight(residueSum);
param.setPlatWeight(platformResidueSum);
param.setOwnWeight(ownResidueSum);
orderFeign.updateOrderInfoResidueWeight(param);
param.setPlatformResidueCarryWeight(platformResidueSum);
param.setOwnResidueCarryWeight(ownResidueSum);
orderFeign.rollbackOrderWeight(param);
}
......
......@@ -172,6 +172,12 @@ public class OrderChildServiceImpl implements OrderChildService {
LocalDateTime now = LocalDateTime.now();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.ORDER_INVALID);
if(Objects.equals(orderGoods.getStopFlag(),OrderGoodsStopEnum.Status.YES.getCode())){
log.warn("货单已暂停");
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID,"当前货单无效");
}
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode()) &&
!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())) {
......@@ -1278,7 +1284,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (count > 1) {return;}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
//orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
}
......
......@@ -170,7 +170,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
@Override
public String orderCancel(String orderNo) {
public String orderCancelStyle(String orderNo) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
Integer orderStatus = orderInfoFeign.getOrderStatus();
......@@ -213,12 +213,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
public BigDecimal orderCancelResidueWeight(String orderNo, String optionType) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if (StringUtils.equals(optionType,"1")) {
if (StringUtils.equals(optionType, "1")) {
return new BigDecimal(orderInfoFeign.getResidueWeight());
} else {
String residueWeight = orderInfoFeign.getResidueWeight();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo);
BigDecimal childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal::add).get();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal orderGoodsResidueWeight = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo).stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal::add).get();
return childResidueWeight.add(new BigDecimal(residueWeight)).add(orderGoodsResidueWeight);
......@@ -235,13 +235,61 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Transactional(rollbackFor = Exception.class)
@Override
public void updateOrderGoodsPrice(UpdateOrderGoodsPriceParam param) {
OrderGoods orderGoods= orderGoodsDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
BigDecimal oldPendingOrderFreight = orderGoods.getPendingOrderFreight().divide(new BigDecimal("100"));
orderGoodsDao.updatePendingOrderFreightById(param.getId(),param.getPendingOrderFreight());
orderGoodsDao.updatePendingOrderFreightById(param.getId(), param.getPendingOrderFreight());
BigDecimal newPendingOrderFreight = param.getPendingOrderFreight().divide(new BigDecimal("100"));
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//记录货单调价日志
orderGoodsLogService.saveLog(orderGoods.getOrderGoodsNo(),loginUserInfo.getUserNo(),loginUserInfo.getUserName(),
OrderGoodsLogsEnum.Type.ADJUST_PRICE.getName(),String.format("调价前%s元,调价后%s元",oldPendingOrderFreight,newPendingOrderFreight) );
}
@Override
public Boolean updateOrderGoodsStopFlag(String orderNo, Integer stopFlag) {
return orderGoodsDao.updateStopFlagByOrderNo(orderNo, stopFlag);
}
@Override
public String orderGoodsCancelStyle(String orderGoodsNo) {
List<OrderChild> orderChildren = orderChildDao.selectListByOrderGoodsNo(orderGoodsNo);
if (CollectionUtils.isNotEmpty(orderChildren)) {
return "selectTruck";
} else {
return "onlyRemark";
}
}
@Override
public void orderGoodsCancel(String orderGoodsNo) {
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
return;
}
OrderGoods orderGoods = optional.get();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal sum = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
log.info("取消货单,参数:{}", JSONUtil.parse(param));
orderFeign.rollbackOrderWeight(param);
}
}
......@@ -3,15 +3,22 @@ package com.clx.performance.service.impl.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDetailDao;
import com.clx.performance.enums.BreakContractRecordEnum;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriverDetail;
import com.clx.performance.param.app.breakcontract.DriverPageBreakContractDriverRecordParam;
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractDriverRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractDriverRecordParam;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.struct.breakcontract.BreakContractSettlementDriverDetailStruct;
import com.clx.performance.struct.breakcontract.BreakContractSettlementDriverStruct;
import com.clx.performance.vo.app.breakcontract.DriverBreakContractDriverRecordVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractDriverRecordVO;
import com.msl.common.utils.LocalDateTimeUtils;
......@@ -20,6 +27,7 @@ import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -40,13 +48,22 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
private OrderChildDao orderChildDao;
@Autowired
private UniqueOrderNumService uniqueOrderNumService;
@Autowired
private BreakContractSettlementDriverDetailStruct breakContractSettlementDriverDetailStruct;
@Autowired
private BreakContractSettlementDriverStruct breakContractSettlementDriverStruct;
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private BreakContractSettlementDriverDetailDao breakContractSettlementDriverDetailDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveRecord(BreakContractDriverRecordAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
String breakNo = childNoGenerate();
String breakNo = "WYD"+childNoGenerate();
OrderChild orderChild = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
LocalDateTime time = LocalDateTime.now();
......@@ -54,15 +71,15 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
BreakContractDriverRecord record = new BreakContractDriverRecord();
record.setBreakNo(breakNo);
record.setTriggerType(BreakContractRecordEnum.TriggerType.MANUAL.getCode());
if (Objects.equals(param.getBreachContractPartyType(), BreakContractRecordEnum.BreachContractPartyType.DRIVER.getCode())) {
record.setBreachContractPartyType(BreakContractRecordEnum.BreachContractPartyType.DRIVER.getCode());
if (Objects.equals(param.getBreakContractPartyType(), BreakContractRecordEnum.BreakContractPartyType.DRIVER.getCode())) {
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.DRIVER.getCode());
if (param.getTimeLimit() != null) {
record.setTimeLimit(param.getTimeLimit());
record.setLimitTime(time.plusSeconds(param.getTimeLimit().multiply(BigDecimal.valueOf(3600L)).intValue()));
}
}
else {
record.setBreachContractPartyType(BreakContractRecordEnum.BreachContractPartyType.PLATFORM.getCode());
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.PLATFORM.getCode());
}
record.setChildNo(param.getChildNo());
record.setFigure(param.getFigure());
......@@ -78,7 +95,20 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
record.setCreateName(loginUserInfo.getUserName());
record.setCreateTime(time);
//车主违约计费明细
BreakContractSettlementDriverDetail breakDriverDetail = breakContractSettlementDriverDetailStruct.convert(record);
String settlementNo = "WYJSD"+childNoGenerate();
breakDriverDetail.setSettlementNo(settlementNo);
//车主违约结算单
BreakContractSettlementDriver breakDriver = breakContractSettlementDriverStruct.convert(breakDriverDetail);
breakDriver.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.NO.getCode());
breakDriver.setSettlePlatform(BreakContractSettlementDriverEnum.SettlePlatform.MSL.getCode());
record.setSettlementNo(settlementNo);
breakContractDriverRecordDao.saveEntity(record);
breakContractSettlementDriverDao.saveEntity(breakDriver);
breakContractSettlementDriverDetailDao.saveEntity(breakDriverDetail);
}
@Override
......
......@@ -2,27 +2,35 @@ package com.clx.performance.service.impl.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRecordDao;
import com.clx.performance.dao.breakcontract.*;
import com.clx.performance.enums.BreakContractRecordEnum;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.BreakContractSettlementOwnerEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.model.breakcontract.*;
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractOwnerRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.struct.breakcontract.*;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
......@@ -32,24 +40,34 @@ import java.util.Objects;
*/
@Slf4j
@Service
@AllArgsConstructor
public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerRecordService {
@Autowired
private BreakContractOwnerRecordDao breakContractOwnerRecordDao;
@Autowired
private OrderService orderService;
@Autowired
private UniqueOrderNumService uniqueOrderNumService;
@Autowired
private OwnerInfoService ownerInfoService;
private final BreakContractOwnerRecordDao breakContractOwnerRecordDao;
private final OrderService orderService;
private final UniqueOrderNumService uniqueOrderNumService;
private final OwnerInfoService ownerInfoService;
private final BreakContractOwnerRecordStruct breakContractOwnerRecordStruct;
private final BreakContractSettlementOwnerDetailStruct breakContractSettlementOwnerDetailStruct;
private final BreakContractSettlementOwnerStruct breakContractSettlementOwnerStruct;
private final BreakContractSettlementOwnerDao breakContractSettlementOwnerDao;
private final BreakContractSettlementOwnerDetailDao breakContractSettlementOwnerDetailDao;
@Override
public void saveRecord(BreakContractOwnerRecordAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
String breakNo = childNoGenerate();
String breakNo = "WYD"+childNoGenerate();
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(param.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(orderInfo.getOwnerUserNo());
......@@ -57,11 +75,11 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
BreakContractOwnerRecord record = new BreakContractOwnerRecord();
record.setBreakNo(breakNo);
record.setTriggerType(BreakContractRecordEnum.TriggerType.MANUAL.getCode());
if (Objects.equals(param.getBreachContractPartyType(), BreakContractRecordEnum.BreachContractPartyType.OWNER.getCode())) {
record.setBreachContractPartyType(BreakContractRecordEnum.BreachContractPartyType.OWNER.getCode());
if (Objects.equals(param.getBreakContractPartyType(), BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode())) {
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode());
}
else {
record.setBreachContractPartyType(BreakContractRecordEnum.BreachContractPartyType.PLATFORM.getCode());
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.PLATFORM.getCode());
}
record.setOrderNo(param.getOrderNo());
......@@ -74,7 +92,20 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
record.setCreateBy(userNo);
record.setCreateName(loginUserInfo.getUserName());
//货主违约计费明细
BreakContractSettlementOwnerDetail breakOwnerDetail = breakContractSettlementOwnerDetailStruct.convert(record);
String settlementNo = "WYJSD"+childNoGenerate();
breakOwnerDetail.setSettlementNo(settlementNo);
//货主违约结算单
BreakContractSettlementOwner breakOwner = breakContractSettlementOwnerStruct.convert(breakOwnerDetail);
breakOwner.setStatus(BreakContractSettlementOwnerEnum.Status.TO_BE_LOCKED.getCode());
record.setSettlementNo(settlementNo);
breakContractOwnerRecordDao.saveEntity(record);
breakContractSettlementOwnerDao.saveEntity(breakOwner);
breakContractSettlementOwnerDetailDao.saveEntity(breakOwnerDetail);
}
@Override
......@@ -91,4 +122,13 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), LocalDateTimeUtils.DATE_DAY));
}
@Override
public IPage<PageOwnerBreakContractOwnerRecordVO> pageOwnerRecord(PageOwnerBreakContractOwnerRecordParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
param.setOwnerUserNo(loginUserInfo.getUserNo());
IPage<BreakContractOwnerRecord> ownerRecord = breakContractOwnerRecordDao.pageOwnerBreakContractOwnerRecordList(param);
List<PageOwnerBreakContractOwnerRecordVO> ownerRecordVO = breakContractOwnerRecordStruct.covertToOwnerList(ownerRecord.getRecords());
return new Page<PageOwnerBreakContractOwnerRecordVO>().setRecords(ownerRecordVO).setTotal(ownerRecord.getTotal()).setPages(ownerRecord.getPages());
}
}
......@@ -58,7 +58,7 @@ public class BreakContractSettlementDriverDetailServiceImpl implements BreakCon
fieldList.add(new ExcelField(3, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(4, "司机名称", "driverName", 5000));
fieldList.add(new ExcelField(5, "违约方", "breachContractPartyType", 5000));
fieldList.add(new ExcelField(5, "违约方", "breakContractPartyType", 5000));
fieldList.add(new ExcelField(6, "违约金额", "figure", 5000));
fieldList.add(new ExcelField(7, "创建人", "createName", 5000));
fieldList.add(new ExcelField(8, "创建时间", "createTime", 5000));
......
......@@ -57,7 +57,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
fieldList.add(new ExcelField(3, "车主编号", "truckOwnerNo", 5000));
fieldList.add(new ExcelField(4, "司机名称", "driverName", 5000));
fieldList.add(new ExcelField(5, "违约方", "breachContractPartyType", 5000));
fieldList.add(new ExcelField(5, "违约方", "breakContractPartyType", 5000));
fieldList.add(new ExcelField(6, "违约金额", "figure", 5000));
fieldList.add(new ExcelField(7, "创建人", "createName", 5000));
fieldList.add(new ExcelField(8, "创建时间", "createTime", 5000));
......
......@@ -56,7 +56,7 @@ public class BreakContractSettlementOwnerDetailServiceImpl implements BreakCont
fieldList.add(new ExcelField(2, "货主编号", "ownUserNo", 5000));
fieldList.add(new ExcelField(3, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(4, "违约方", "breachContractPartyType", 5000));
fieldList.add(new ExcelField(4, "违约方", "breakContractPartyType", 5000));
fieldList.add(new ExcelField(5, "违约金额", "figure", 5000));
fieldList.add(new ExcelField(6, "创建人", "createName", 5000));
fieldList.add(new ExcelField(7, "创建时间", "createTime", 5000));
......
......@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementOwnerDao;
import com.clx.performance.enums.BreakContractSettlementLogEnum;
import com.clx.performance.enums.BreakContractSettlementOwnerEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.*;
import com.clx.performance.model.breakcontract.BreakContractSettlementLog;
import com.clx.performance.model.breakcontract.BreakContractSettlementOwner;
import com.clx.performance.param.pc.breakcontract.carrier.*;
......@@ -76,7 +73,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
fieldList.add(new ExcelField(2, "货主编号", "ownUserNo", 5000));
fieldList.add(new ExcelField(3, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(4, "违约方", "breachContractPartyType", 5000));
fieldList.add(new ExcelField(4, "违约方", "breakContractPartyType", 5000));
fieldList.add(new ExcelField(5, "违约金额", "figure", 5000));
fieldList.add(new ExcelField(6, "状态", "statusMsg", 5000));
fieldList.add(new ExcelField(7, "结算单号", "settlementNo", 5000));
......@@ -171,6 +168,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
throw new ServiceSystemException(PerformanceResultEnum.STATUS_CHANGED);
}
param.setStatus(BreakContractSettlementOwnerEnum.Status.OWNER_CONFIRMED_PLATFORM_PAYMENT.getCode());
breakContractSettlementOwnerDao.saveCarrierBreakContractPayee(param);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
......@@ -192,7 +190,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----平台付款
//保存结算单日志----平台确认付款
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
BreakContractSettlementLogEnum.Type.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode(),BreakContractSettlementLogEnum.Type.PLATFORM_CONFIRMED_OWNER_PAYMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
......@@ -202,4 +200,63 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
BreakContractSettlementLogEnum.Type.COMPLETED.getCode(),BreakContractSettlementLogEnum.Type.COMPLETED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
public void updateConfirmSettlement(OwnerConfirmSettlementParam param) {
BreakContractSettlementOwner settlementOwner = breakContractSettlementOwnerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(!Objects.equals(settlementOwner.getStatus(), BreakContractSettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.STATUS_CHANGED);
}
int status = BreakContractSettlementOwnerEnum.Status.SHIPPER_TO_PAYMENT.getCode();
if(Objects.equals(settlementOwner.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())){
status = BreakContractSettlementOwnerEnum.Status.PLATFORM_TO_PAYMENT.getCode();
}
breakContractSettlementOwnerDao.updateStatus(param.getId(),BreakContractSettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode(),status);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----确认结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
BreakContractSettlementLogEnum.Type.OWNER_TO_BE_CONFIRMED.getCode(),BreakContractSettlementLogEnum.Type.OWNER_TO_BE_CONFIRMED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
public void saveOwnerBreakContractPayee(CarrierBreakContractSavePayeeParam param) {
BreakContractSettlementOwner settlementOwner = breakContractSettlementOwnerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(!Objects.equals(settlementOwner.getStatus(), BreakContractSettlementOwnerEnum.Status.SHIPPER_TO_PAYMENT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.STATUS_CHANGED);
}
param.setStatus(BreakContractSettlementOwnerEnum.Status.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode());
breakContractSettlementOwnerDao.saveCarrierBreakContractPayee(param);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----货主付款
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
BreakContractSettlementLogEnum.Type.SHIPPER_TO_PAYMENT.getCode(),BreakContractSettlementLogEnum.Type.SHIPPER_TO_PAYMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
public void updateOwnerBreakContractPayeeConfirm(CarrierBreakPayeeConfirmParam param) {
BreakContractSettlementOwner settlementOwner = breakContractSettlementOwnerDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(!Objects.equals(settlementOwner.getStatus(), BreakContractSettlementOwnerEnum.Status.OWNER_CONFIRMED_PLATFORM_PAYMENT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.STATUS_CHANGED);
}
breakContractSettlementOwnerDao.updateStatus(param.getId(),BreakContractSettlementOwnerEnum.Status.OWNER_CONFIRMED_PLATFORM_PAYMENT.getCode(),BreakContractSettlementOwnerEnum.Status.COMPLETED.getCode());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----货主确认付款
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
BreakContractSettlementLogEnum.Type.OWNER_CONFIRMED_PLATFORM_PAYMENT.getCode(),BreakContractSettlementLogEnum.Type.OWNER_CONFIRMED_PLATFORM_PAYMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
//保存结算单日志----已完结
breakContractSettlementLogService.saveBreakSettlementLog(settlementOwner.getSettlementNo(),
BreakContractSettlementLogEnum.Type.COMPLETED.getCode(),BreakContractSettlementLogEnum.Type.COMPLETED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsStopEnum;
import com.clx.performance.enums.PendingOrderWayStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
......@@ -91,10 +96,10 @@ public class OrderGoodsSqlProvider {
"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");
FROM("order_goods a");
WHERE("a.pending_order_way = 1");
WHERE("a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode());
WHERE("a.pending_order_way = " + PendingOrderWayStatusEnum.Status.GK.getCode());
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status = 20 or a.order_goods_status = 30)");
WHERE("(a.order_goods_status = "+OrderGoodsStatusEnum.Status.PAYING.getCode()+" or a.order_goods_status = "+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >0");
ORDER_BY("a.pending_order_time desc");
}}.toString();
......@@ -117,9 +122,11 @@ 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 from order_goods a where a.last_arrive_send_time >= now() and (a.order_goods_status = 20 or a.order_goods_status = 30)" +
"a.pending_order_freight,a.user_no,a.user_name from order_goods a " +
"where a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode()+" and a.last_arrive_send_time >= now() and (a.order_goods_status = "+OrderGoodsStatusEnum.Status.PAYING.getCode()+
" or a.order_goods_status = "+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")" +
"and a.residue_transport_weight > 0" +
" and a.pending_order_way = 2 and a.order_goods_no in (");
" and a.pending_order_way = "+ PendingOrderWayStatusEnum.Status.DX.getCode() +" and a.order_goods_no in (");
if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) {
......@@ -166,4 +173,14 @@ public class OrderGoodsSqlProvider {
return sqlList.toString();
}
public String updateOrderGoodsSetResidueWeight(@Param(value ="residueWeight") BigDecimal residueWeight,@Param(value ="id") Integer id){
String sql = new SQL() {{
UPDATE("order_goods")
.SET("residue_weight = residue_weight + #{residueWeight}")
.WHERE("id = #{id}");
}}.toString();
return sql;
}
}
......@@ -16,7 +16,7 @@ public class BreakContractDriverRecordSqlProvider {
public String pageByParam(@Param("page") Page<BreakContractDriverRecordVO> page, @Param("param") PageBreakContractDriverRecordParam param) {
return new SQL(){{
SELECT(" id, trigger_type, breach_contract_party_type, break_no, " +
SELECT(" id, trigger_type, break_contract_party_type, break_no, " +
" child_no, truck_no, truck_own_user_no, truck_own_name, " +
" driver_user_no, driver_name, figure, time_limit, " +
" date_format(limit_time, '%Y-%m-%d %H:%i:%s') as limitTime, " +
......@@ -30,6 +30,7 @@ public class BreakContractDriverRecordSqlProvider {
FROM("break_contract_driver_record");
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
if (Objects.nonNull(param.getTriggerType())) {WHERE("trigger_type = #{param.triggerType}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......@@ -41,7 +42,7 @@ public class BreakContractDriverRecordSqlProvider {
public String driverPageByParam(@Param("page") Page<DriverBreakContractDriverRecordVO> page, @Param("param") DriverPageBreakContractDriverRecordParam param) {
return new SQL(){{
SELECT(" id, trigger_type, breach_contract_party_type, break_no, " +
SELECT(" id, trigger_type, break_contract_party_type, break_no, " +
" child_no, truck_no, truck_own_user_no, truck_own_name, " +
" driver_user_no, driver_name, figure, time_limit, " +
" date_format(limit_time, '%Y-%m-%d %H:%i:%s') as limitTime, " +
......@@ -54,8 +55,8 @@ public class BreakContractDriverRecordSqlProvider {
FROM("break_contract_driver_record");
WHERE("(truck_own_user_no = #{param.userNo} or driver_user_no = #{param.userNo})");
if (Objects.equals(param.getType(), 1)) {WHERE("breach_contract_party_type = 3");}
if (Objects.equals(param.getType(), 2)) {WHERE("breach_contract_party_type = 1");}
if (Objects.equals(param.getType(), 1)) {WHERE("break_contract_party_type = 3");}
if (Objects.equals(param.getType(), 2)) {WHERE("break_contract_party_type = 1");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......
......@@ -7,12 +7,14 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class BreakContractOwnerRecordSqlProvider {
public String pageByParam(@Param("page") Page<BreakContractOwnerRecordVO> page, @Param("param") PageBreakContractOwnerRecordParam param) {
return new SQL(){{
SELECT(" id, trigger_type, breach_contract_party_type, break_no, " +
SELECT(" id, trigger_type, break_contract_party_type, break_no, " +
" order_no, owner_user_no, owner_name, figure, " +
" settlement_no, " +
" remark, " +
......@@ -24,6 +26,7 @@ public class BreakContractOwnerRecordSqlProvider {
FROM("break_contract_owner_record");
if (StringUtils.isNotBlank(param.getOrderNo())) {WHERE("order_no = #{param.orderNo}");}
if (Objects.nonNull(param.getTriggerType())) {WHERE("trigger_type = #{param.triggerType}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......
package com.clx.performance.strategy;
import com.clx.order.enums.OrderStopEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RabbitKeyConstants;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import java.time.LocalDateTime;
import java.util.Objects;
@Slf4j
public abstract class GoodsOrderStrategy {
......@@ -26,6 +30,9 @@ public abstract class GoodsOrderStrategy {
public void saveGoodsOrder(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now, RabbitTemplate rabbitTemplate) {
String orderNo = orderGoodsParams.getOrderNo();
if(Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"订单已暂停,无法进行提量");
}
//根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
......
......@@ -158,7 +158,7 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......
......@@ -172,7 +172,7 @@ public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements Initi
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
}
mqMap.put(orderNoPrefix + beginOrderGoodsId, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
......
......@@ -166,7 +166,7 @@ public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......
package com.clx.performance.struct.breakcontract;
import com.clx.performance.enums.BreakContractOwnerRecordEnum;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.IterableMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {BreakContractOwnerRecordEnum.class, DateUtils.class})
public interface BreakContractOwnerRecordStruct {
@Named("toBaseVo")
@Mapping(target = "payStatusMsg", expression = "java(BreakContractOwnerRecordEnum.PayStatus.getMsgByCode(detail.getPayStatus()))")
@Mapping(target = "compensationStatusMsg", expression = "java(BreakContractOwnerRecordEnum.CompensationStatusStatus.getMsgByCode(detail.getPayStatus()))")
PageOwnerBreakContractOwnerRecordVO convert(BreakContractOwnerRecord detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<PageOwnerBreakContractOwnerRecordVO> covertToOwnerList(List<BreakContractOwnerRecord> list);
}
package com.clx.performance.struct.breakcontract;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriverDetail;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverDetailVO;
import com.msl.common.utils.DateStructUtil;
......@@ -17,10 +18,13 @@ public interface BreakContractSettlementDriverDetailStruct {
@Named("toBaseVo")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreachContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
PageCarrierBreakContractSettlementDriverDetailVO convert(BreakContractSettlementDriverDetail detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<PageCarrierBreakContractSettlementDriverDetailVO> covertToCarrierList(List<BreakContractSettlementDriverDetail> list);
@Mapping(target = "breakContractRemark", source = "remark")
BreakContractSettlementDriverDetail convert(BreakContractDriverRecord detail);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.struct.breakcontract;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriverDetail;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
......@@ -19,10 +20,12 @@ public interface BreakContractSettlementDriverStruct {
@Named("toBaseVo")
@Mapping(target = "settleStatusMsg", expression = "java(BreakContractSettlementDriverEnum.SettleStatus.getMsgByCode(detail.getSettleStatus()))")
@Mapping(target = "settlePlatformMsg", expression = "java(BreakContractSettlementDriverEnum.SettlePlatform.getMsgByCode(detail.getSettlePlatform()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreachContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
PageCarrierBreakContractSettlementDriverVO convert(BreakContractSettlementDriver detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<PageCarrierBreakContractSettlementDriverVO> covertToCarrierList(List<BreakContractSettlementDriver> list);
BreakContractSettlementDriver convert(BreakContractSettlementDriverDetail detail);
}
package com.clx.performance.struct.breakcontract;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriverDetail;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.model.breakcontract.BreakContractSettlementOwnerDetail;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementOwnerDetailVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
......@@ -19,10 +18,12 @@ public interface BreakContractSettlementOwnerDetailStruct {
@Named("toBaseVo")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreachContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
PageCarrierBreakContractSettlementOwnerDetailVO convert(BreakContractSettlementOwnerDetail detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<PageCarrierBreakContractSettlementOwnerDetailVO> covertToCarrierList(List<BreakContractSettlementOwnerDetail> list);
@Mapping(target = "breakContractRemark", source = "remark")
BreakContractSettlementOwnerDetail convert(BreakContractOwnerRecord detail);
}
......@@ -3,6 +3,7 @@ package com.clx.performance.struct.breakcontract;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.BreakContractSettlementOwnerEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementOwner;
import com.clx.performance.model.breakcontract.BreakContractSettlementOwnerDetail;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementOwnerVO;
import com.msl.common.utils.DateStructUtil;
......@@ -19,15 +20,18 @@ public interface BreakContractSettlementOwnerStruct {
@Named("toBaseVo")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreachContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(detail.getBreakContractPartyType()))")
@Mapping(target = "statusMsg", expression = "java(BreakContractSettlementOwnerEnum.Status.getMsgByCode(detail.getStatus()))")
PageCarrierBreakContractSettlementOwnerVO convert(BreakContractSettlementOwner detail);
@IterableMapping(qualifiedByName = "toBaseVo")
List<PageCarrierBreakContractSettlementOwnerVO> covertToCarrierList(List<BreakContractSettlementOwner> list);
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreachContractPartyType.getMsgByCode(settlementOwner.getBreakContractPartyType()))")
@Mapping(target = "breakContractPartyTypeMsg", expression = "java(BreakContractSettlementDriverEnum.BreakContractPartyType.getMsgByCode(settlementOwner.getBreakContractPartyType()))")
@Mapping(target = "statusMsg", expression = "java(BreakContractSettlementOwnerEnum.Status.getMsgByCode(settlementOwner.getStatus()))")
CarrierBreakContractSettlementOwnerDetailVO convertToDetail(BreakContractSettlementOwner settlementOwner);
BreakContractSettlementOwner convert(BreakContractSettlementOwnerDetail detail);
}
package com.clx.performance;
import cn.hutool.json.JSONUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.OrderOwnTruckVo;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.param.mq.OrderCancelMqParam;
import com.clx.performance.service.OrderCancelService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -40,13 +46,24 @@ public class JobTest {
@Autowired
private GoodsOrderTruckRecordComponent recordComponent;
@Autowired
private OrderCancelService orderCancelService;
@Test
public void test1() {
List<String> list = new ArrayList<>();
list.add("晋A99999");
recordComponent.saveTruckRecord("123", list);
recordComponent.getPrivateTruckList("123", 1001183036834771013L);
OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("2");
mqParam.setOrderNo("123");
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
);
//CX2023092600223 平台已承接的订单,没有产生货单
//CX2023101600386 truckDemand 类型是2,且有货单,有运单, 没有未到达货源地的运单
//PT2023092600207 类型都是1,且有运单
//orderCancelService.ownerCancelOrderPre("PT2023102700469");
//orderCancelService.ownerCancelOrder("PT2023102600466");
System.out.println();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论