提交 de234430 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v20.8_add_sub_weight_20240805'

# Conflicts: # performance-web/src/main/java/com/clx/performance/constant/RedisConstants.java # performance-web/src/main/java/com/clx/performance/service/OrderChildService.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
......@@ -177,6 +177,14 @@ public enum OrderChildEnum {
);
public static final List<Integer> CARRIER_CAN_CANCEL_STATUS_LIST = Arrays.asList(
Status.CREATED.getCode(),
Status.GO_TO_SEND.getCode(),
Status.ARRIVE_SEND.getCode()
);
public static ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap();
static {
for(OrderChildEnum.Status
......
......@@ -11,6 +11,7 @@ import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.param.pc.owner.UpdateStatusParam;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.feign.PlatformServiceFeeConfigFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
......@@ -153,4 +154,16 @@ public interface PerformanceFeign {
*/
@GetMapping(value = {"clx-performance/feign/platformServiceFee/getPlatformServiceFeeConfig"})
Result<PlatformServiceFeeConfigFeignVO> getPlatformServiceFeeConfig();
@GetMapping(value = {"clx-performance/feign/order/weight/getOrderResidueWeight"})
Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo") String orderNo);
@GetMapping(value = {"clx-performance/feign/order/weight/getOrderCanExtractWeight"})
Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo") String orderNo);
}
package com.clx.performance.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
......@@ -44,4 +45,11 @@ public interface PerformanceSDKFeign {
@GetMapping("clx-performance/feign/sdk/queryPerformanceProgressLog")
Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action);
@GetMapping(value = {"clx-performance/feign/sdk/getOrderCanExtractWeight"})
Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo);
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class OrderChildCarrierBatchCancelParam {
@ApiModelProperty(value = "运单编号集合", example = "")
@NotEmpty(message = "运单编号集合不能为空")
private List<String> childNoList;
@ApiModelProperty(value = "取消原因", example = "信息错误")
private String remark;
}
......@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
......@@ -29,6 +29,11 @@ public class OrderGoodsAPPVO {
@ApiModelProperty("剩余拉运吨数")
private String residueTransportWeight;
public String getResidueTransportWeight(){
return new BigDecimal(extractWeight).subtract(StringUtils.isNotBlank(alreadyTransportWeight)
?new BigDecimal(alreadyTransportWeight):BigDecimal.ZERO).toString();
}
@ApiModelProperty("已拉运吨数")
private String alreadyTransportWeight;
......
package com.clx.performance.vo.feign;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
/**
* @ClassName OrderExtractWeightVO
* @Description
* @Author kavin
* @Date 2024/8/5 11:54
* @Version 1.0
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderExtractWeightVO {
@ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆")
private Integer truckDemand;
@ApiModelProperty(value = "拉运吨数")
private BigDecimal transportWeight;
@ApiModelProperty("可提取吨数")
private BigDecimal canExtractWeight;
@ApiModelProperty("平台承运吨数")
private BigDecimal platformCarryWeight;
@ApiModelProperty("自有承运吨数")
private BigDecimal ownCarryWeight;
@ApiModelProperty("平台可提取吨数")
private BigDecimal platCanExtractWeight;
@ApiModelProperty("自有可提取吨数")
private BigDecimal ownCanExtractWeight;
}
......@@ -30,4 +30,12 @@ public class OrderChildPCVO {
@ApiModelProperty("司机手机号")
private String driverMobile;
@ApiModelProperty("接单时间")
private String createTime;
@ApiModelProperty("完成时间")
private String finishTime;
}
\ No newline at end of file
......@@ -197,4 +197,8 @@ public class OrderGoodsVO {
public String getSendWaitModeMsg() {
return OrderGoodsEnum.SendWaitModeEnum.getMsgByCode(sendWaitMode);
}
@ApiModelProperty("当前货单总吨数是否超过总拉运量 1:超过 ")
private Integer overOrderWeight;
}
\ No newline at end of file
package com.clx.performance.vo.pc.child;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @ClassName UpdateCarrierBatchCancelVO
* @Description
* @Author kavin
* @Date 2024/8/6 15:17
* @Version 1.0
*/
@Getter
@Setter
public class UpdateCarrierBatchCancelVO {
@ApiModelProperty("成功取消运单数量")
private Integer successCount;
@ApiModelProperty("失败的运单编号集合")
private List<String> failChildNoList;
}
......@@ -99,23 +99,6 @@ public class GoodsOrderTruckRecordComponent {
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatusExpire(orderGoodsNo, truckNo);
}
//货单剩余吨数低于35吨时,自动恢复到订单,并释放未接单车辆
public void releaseOrderGoodsDriverAndTruck(String orderGoodsNo) {
List<OrderGoodsTruckBind> truckBindList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo);
List<Integer> ids = new ArrayList<>();
for (OrderGoodsTruckBind bind : truckBindList) {
if (Objects.equals(OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),bind.getStatus())) {
ids.add(bind.getId());
this.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
}
}
//释放车辆bind
if(CollectionUtils.isNotEmpty(ids)){
log.info("定向单进行车辆释放,货单编号:{},释放的绑定车辆的id集合:{}",orderGoodsNo,ids);
orderGoodsTruckBindDao.updateTruckBindExpire(ids);
}
}
public Set<String> getFleetPublicTruckList(String orderGoodsNo) {
......
......@@ -3,11 +3,9 @@ package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
......@@ -25,7 +23,6 @@ import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
......@@ -161,7 +158,9 @@ public class OrderCancelComponent implements InitializingBean {
reduce = reduce.add(orderChild.getWeight());
}
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) {
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (orderGoods.getExtractWeight().compareTo(residueTransportWeight.add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
......@@ -191,7 +190,11 @@ public class OrderCancelComponent implements InitializingBean {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (residueTransportWeight.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
......@@ -279,83 +282,6 @@ public class OrderCancelComponent implements InitializingBean {
}
}
/**
* @Author kavin
* @Description 货单低于35吨自动归还吨数到订单/货单吨数不够扣减,从订单上借吨数
* @Param [orderGoods, weight,updateType(1: 增加 2:减少)]
* @return
**/
public void backFillOrderWeight(OrderGoods orderGoods, BigDecimal weight, Integer updateType) {
Integer truckDemand = orderGoods.getTruckDemand();
java.util.Optional<UpdateEnum> byCode1 = UpdateEnum.getByCode(updateType);
String updateTypeMsg = byCode1.isPresent()?byCode1.get().getMsg():"未知调整类型";
java.util.Optional<TruckDemandEnum.TruckType> byCode = TruckDemandEnum.TruckType.getByCode(truckDemand);
String truckDemandValue = byCode.isPresent()?byCode.get().getMsg():"未知用车需求";
log.info("订单号:{},货单号:{},用车需求:{},进行订单剩余吨数{} ,调整吨数:{}",
orderGoods.getOrderNo(),orderGoods.getOrderGoodsNo(),truckDemandValue,updateTypeMsg,weight);
String orderNo = orderGoods.getOrderNo();
Optional<FeignOrderInfoVO> optional = orderService.getOrderInfo(orderNo);
if(!optional.isPresent()){
log.warn("通过订单号未查询到对应的订单信息,订单号:{}",orderNo);
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
FeignOrderInfoVO orderInfo = optional.get();
boolean isSub = Objects.equals(UpdateEnum.SUB.getCode(), updateType);
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(orderGoods.getOrderNo());
rollbackOrderWeightParam.setResidueWeight(weight);
rollbackOrderWeightParam.setUpdateType(updateType);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
if(isSub && weight.compareTo(orderInfo.getResidueWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),orderInfo.getPlatformResidueCarryWeight()
,weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
if(isSub && weight.compareTo(orderInfo.getResidueWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),orderInfo.getOwnResidueCarryWeight()
,weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
}
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (Objects.equals(orderGoods.getVehicleUsage(),VehicleUsageEnum.Status.OWN.getCode())) {
if(isSub && weight.compareTo(orderInfo.getOwnResidueCarryWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减",
TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getMsg(),orderNo,orderGoods.getOrderGoodsNo(),
orderInfo.getOwnResidueCarryWeight(),weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
} else {
if(isSub && weight.compareTo(orderInfo.getPlatformResidueCarryWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),
orderInfo.getPlatformResidueCarryWeight(),weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
}
}
Result<Object> result = orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
if (!result.succeed()) {
log.warn("订单号:{} 的订单做吨数调整,对应货单号:{} 调整失败,调整吨数:{},调整类型:{}",
orderNo,orderGoods.getOrderGoodsNo(),weight,updateTypeMsg);
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
}
/**
* 客服取消归还吨数
*
......@@ -400,7 +326,6 @@ public class OrderCancelComponent implements InitializingBean {
}
ArrayList<OrderGoods> list = new ArrayList<>();
list.add(orderGoods);
orderGoodsService.batchUpdateResidueWeight(list);
} else {
//返回到货单
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId());
......
package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
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.*;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.utils.spring.ApplicationContextUtils;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional;
import com.msl.common.utils.DateUtils;
......@@ -30,7 +33,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* 货单最晚接单时间、最晚到达货源地时间处理
......@@ -61,6 +66,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final OrderChildPostService orderChildPostService;
//根据货单最晚接单时间处理
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());
......@@ -90,7 +96,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
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_LAST_ORDER_TIME,
0, nowTimeMillis //延时任务score最小值
......@@ -118,11 +123,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue;
}
OrderGoods orderGoods = optional.get();
// if(Objects.equals(orderGoods.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CANCEL.getCode())){
// continue;
// }
BigDecimal residueTransportWeight = ApplicationContextUtils.getBean(OrderGoodsService.class).
calcOrderGoodsResidueWeight(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());;
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
if (residueTransportWeight.compareTo(BigDecimal.ZERO) <= 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
if (CollectionUtil.isNotEmpty(orderChildren)) {
//更新货单已完结
......@@ -134,33 +138,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
}
} else {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//大于35吨的归还吨数在这里处理
if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){
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 {
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);
//更新剩余吨数
update.setResidueTransportWeight(BigDecimal.ZERO);
}
//更新已完结
orderGoodsDao.updateEntityByKey(update);
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
......@@ -238,35 +219,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统自动取消,未按照最晚装货时间到达货源地", now, now, childNoList);
}
//更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(childSum);
//当前情况需要回填订单的余量
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
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);
}
}
//只更新货单已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
orderFeign.rollbackOrderWeight(param);
} else {
//只更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
......
package com.clx.performance.constant;
import java.math.BigDecimal;
/**
* @ClassName BusinessConstants
* @Description
* @Author kavin
* @Date 2024/7/22 15:26
* @Version 1.0
*/
public class BusinessConstants {
//承运订单需要减去的吨数
public static final BigDecimal ORDER_SUB_WEIGHT = new BigDecimal("35");
}
......@@ -51,4 +51,10 @@ public class RedisConstants {
*/
public static final String NOTICE_MESSAGE_LIMIT_UNSUPERVISED = "clx-performance:notice_message_limit_unsupervised:";
/**
* 订单最后一车
*/
public static final String ORDER_LAST_TRUCK_CHILD = "clx-performance:order:last:truck:child:";
}
......@@ -16,4 +16,9 @@ public class RedissonConstants {
public static final String OWNER_LOAN_EVENT_USERID_LOCK = "clx-performance:ownerLoanEvent:ownerUserId:";
public static final String CALC_ORDER_LAST_TRUCK_LOCK = "clx-performance:order:last:truck:orderNo:";
}
package com.clx.performance.controller.feign;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/feign/order/weight")
@Validated
@Api(tags = "订单量查询")
@AllArgsConstructor
public class OrderWeightFeignController {
private final OrderWeightService orderWeightService;
@ApiOperation(value = "查询订单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderCanExtractWeight(orderNo));
}
@ApiOperation(value = "查询订单剩余量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderResidueWeight")
public Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderResidueWeight(orderNo));
}
}
package com.clx.performance.controller.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
......@@ -8,9 +9,11 @@ import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.PerformanceProgressService;
import com.clx.performance.service.breakcontract.BreakContractOwnerRuleService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.PerformanceProgressOperationLogVO;
import com.clx.performance.vo.pc.PerformanceProgressVO;
......@@ -21,6 +24,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -28,6 +32,7 @@ import java.math.BigDecimal;
import java.util.List;
import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON;
import javax.validation.constraints.NotBlank;
@Slf4j
@RestController
......@@ -46,6 +51,10 @@ public class PerformanceSdkFeignController {
private final BreakContractOwnerRuleService breakContractOwnerRuleService;
private final OrderWeightService orderWeightService;
private final PerformanceProgressService performanceProgressService;
......@@ -88,4 +97,15 @@ public class PerformanceSdkFeignController {
Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action){
return Result.ok(performanceProgressService.getOperationLog(action.getOrderNo(),PERFORMANCE_ABNORMAL_REASON.getCode()));
}
@ApiOperation(value = "获取当前订单的可提取吨数", notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(orderNo);
OrderCanExtractWeightDTO data = new OrderCanExtractWeightDTO();
BeanUtils.copyProperties(orderCanExtractWeight,data);
return Result.ok(data);
}
}
......@@ -2,11 +2,13 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.pc.OrderChildCarrierBatchCancelParam;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
......@@ -127,4 +129,11 @@ public class CarrierOrderChildController {
}
@ApiOperation(value = "批量取消运单", notes = "<br>By:刘海泉")
@PostMapping("/updateCarrierBatchCancel")
public Result<UpdateCarrierBatchCancelVO> updateCarrierBatchCancel(@RequestBody @Validated OrderChildCarrierBatchCancelParam param) {
return Result.ok(orderChildService.updateCarrierBatchCancel(param));
}
}
......@@ -7,10 +7,8 @@ import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsAdjustmentPriceService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.*;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.pc.*;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
......@@ -71,6 +69,9 @@ public class GoodsOrderController {
@Autowired
private OrderGoodsAdjustmentPriceService orderGoodsAdjustmentPriceService;
@Autowired
private OrderWeightService orderWeightService;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder")
@UnitCovert(result = false)
......@@ -88,7 +89,11 @@ public class GoodsOrderController {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
//1平台车辆 2部分平台车辆 3自有车辆
Integer truckDemand = orderInfo.getTruckDemand();
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate);
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(orderNo);
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo,
orderCanExtractWeight,now);
} catch (Exception e) {
log.info(e.getMessage());
......
package com.clx.performance.controller.pc;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.vo.app.OrderChildVO;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/lastTruck")
@Validated
@Api(tags = "最后一车")
@AllArgsConstructor
public class LastTruckController {
private final LastTruckService lastTruckService;
private final OrderChildStruct orderChildStruct;
@ApiOperation(value = "查询订单下的最后一车",notes = "<br>By:刘海泉")
@GetMapping("/getOrderLastTruck")
public Result<OrderChildVO> getOrderLastTruck(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) throws Exception{
OrderChild child = lastTruckService.getOrderLastTruck(orderNo);
return Result.ok(orderChildStruct.convert(child));
}
}
package com.clx.performance.controller.pc;
import com.clx.performance.service.OrderGoodsWeightService;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/orderGoods/weight")
@Validated
@Api(tags = "货单量查询")
@AllArgsConstructor
public class OrderGoodsWeightController {
private final OrderGoodsWeightService orderGoodsWeightService;
@ApiOperation(value = "查询货单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderGoodsCanExtractWeight")
public Result<BigDecimal> getOrderGoodsCanExtractWeight(@RequestParam("orderGoodsNo")
@NotBlank(message = "货单编号不能为空") String orderGoodsNo) {
return Result.ok(orderGoodsWeightService.getOrderGoodsCanExtractWeight(orderGoodsNo));
}
}
package com.clx.performance.controller.pc;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/order/weight")
@Validated
@Api(tags = "订单量查询")
@AllArgsConstructor
public class OrderWeightController {
private final OrderWeightService orderWeightService;
@ApiOperation(value = "查询订单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderCanExtractWeight(orderNo));
}
@ApiOperation(value = "查询订单剩余量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderResidueWeight")
public Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderResidueWeight(orderNo));
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild;
......@@ -204,4 +205,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listCompleteByOrderNos(List<String> strings);
List<OrderChild> listBeforeUnloadOrderChild(LocalDateTime startTime,LocalDateTime endTime);
List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList);
void batchUpdateCancel(List<OrderChild> canCancelOrderChildList);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsFleetOpenTruck;
......@@ -14,7 +15,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -26,7 +26,6 @@ import java.util.List;
* Time 16:45
*/
public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Integer> {
boolean updateWeight(@Param("orderId")Integer orderId, @Param("weight") BigDecimal weight);
String getMaxOrderGoodsId();
......@@ -41,7 +40,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus);
void updateOrderGoodsWeightAlreadyAndStatus(Integer id, BigDecimal residueWeight,Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam,List<String> orderGoodsNoList);
......@@ -72,7 +71,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeight(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer id);
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer status, Integer id);
Integer updateOrderGoodsSetAlreadyWeightAndStatus( BigDecimal alreadyWeight, Integer status, Integer id);
OrderGoodsVO findOrderGoodsById(Integer id);
......@@ -83,7 +82,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
boolean batchUpdateOrderGoodsStatus(Integer status, List<Integer> ids);
boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids);
void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId);
......@@ -99,7 +97,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param);
void batchUpdateResidueWeight(List<Integer> list, BigDecimal residueWeight);
List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList();
......@@ -111,4 +108,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> listAfterCreatedByOrderNo(String orderNo);
void batchUpdateOrderGoodsPaying(List<OrderGoods> updateOrderGoods);
void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList);
}
......@@ -69,4 +69,6 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNo);
List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList);
void batchCancelTruckList(List<OrderGoodsTruckBind> updateList);
}
......@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.mapper.OrderChildMapper;
......@@ -684,4 +685,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.le(OrderChild :: getCreateTime,endTime)
);
}
@Override
public List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList) {
return baseMapper.countValidByOrderGoodsNoList(orderGoodsList);
}
@Override
public void batchUpdateCancel(List<OrderChild> canCancelOrderChildList) {
baseMapper.batchUpdateCancel(canCancelOrderChildList);
}
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
......@@ -18,7 +19,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
......@@ -33,11 +33,6 @@ import java.util.List;
@Repository
public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, Integer> implements OrderGoodsDao {
@Override
public boolean updateWeight(@Param("orderId") Integer orderId, @Param("weight") BigDecimal weight) {
return baseMapper.updateWeight(orderId, weight) > 0;
}
@Override
public String getMaxOrderGoodsId() {
return baseMapper.getMaxOrderGoodsId();
......@@ -82,8 +77,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
}
@Override
public void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightResidueAndAlreadyAndStatus(id, alreadyTransportWeight, residueTransportWeight, orderGoodsStatus);
public void updateOrderGoodsWeightAlreadyAndStatus(Integer id, BigDecimal residueWeight,Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightAlreadyAndStatus(id, residueWeight, orderGoodsStatus);
}
@Override
......@@ -191,8 +186,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
}
@Override
public Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer status, Integer id) {
return baseMapper.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(residueWeight,alreadyWeight,status,id);
public Integer updateOrderGoodsSetAlreadyWeightAndStatus(BigDecimal alreadyWeight, Integer status, Integer id) {
return baseMapper.updateOrderGoodsSetAlreadyWeightAndStatus(alreadyWeight,status,id);
}
@Override
......@@ -217,13 +212,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
;
}
@Override
public boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids) {
return update(lUdWrapper().in(OrderGoods :: getId,ids)
.set(OrderGoods::getResidueTransportWeight, residueWeight)
);
}
@Override
public List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
......@@ -273,14 +261,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
return baseMapper.indexOrderGoodsListSearch(page,param);
}
@Override
public void batchUpdateResidueWeight(List<Integer> list, BigDecimal residueWeight) {
update(lUdWrapper()
.in(OrderGoods::getId, list)
.set(OrderGoods::getResidueTransportWeight, residueWeight)
);
}
@Override
public List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList() {
return baseMapper.queryProcessFleetOpenTruckList();
......@@ -312,7 +292,15 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
.ne(OrderGoods::getOrderGoodsStatus,OrderGoodsStatusEnum.Status.CREATED.getCode())
.orderByDesc(OrderGoods :: getPendingOrderTime)
);
}
@Override
public void batchUpdateOrderGoodsPaying(List<OrderGoods> updateOrderGoods) {
baseMapper.batchUpdateOrderGoodsPaying(updateOrderGoods);
}
@Override
public void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList) {
baseMapper.batchCancelOrderGoodsWeight(cancelOrderGoodsList);
}
}
......@@ -231,4 +231,9 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getOrderGoodsNo, cancelTruckBindOrderGoodsNoList)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode()));
}
@Override
public void batchCancelTruckList(List<OrderGoodsTruckBind> updateList) {
baseMapper.batchCancelTruckList(updateList);
}
}
package com.clx.performance.dto;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @ClassName OrderGoodsNotCancelChildDTO
* @Description
* @Author kavin
* @Date 2024/8/6 10:52
* @Version 1.0
*/
@Getter
@Setter
public class OrderGoodsCancelWeightDTO {
private String orderGoodsNo; //货单编号
private BigDecimal weight; //归还货单的吨数
}
package com.clx.performance.dto;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName OrderGoodsNotCancelChildDTO
* @Description
* @Author kavin
* @Date 2024/8/6 10:52
* @Version 1.0
*/
@Getter
@Setter
public class OrderGoodsNotCancelChildDTO {
private String orderGoodsNo; //货单编号
private Long count; //货单下未取消的运单数量
}
package com.clx.performance.extranal.user;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.FeignDriverTruckModelVo;
import com.msl.common.base.Optional;
import java.util.List;
public interface DriverService {
......@@ -18,4 +21,7 @@ public interface DriverService {
Optional<FeignDriverTruckModelVo> getDumpType(String truckModel);//通过车型获取自卸非自卸
//批量恢复司机和车辆状态
void batchUpdateDriverAndTruckStatusCancel(List<BatchUpdateDriverAndTruckParam> list);
}
......@@ -5,6 +5,7 @@ import com.msl.common.base.Optional;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
public interface OrderService {
......@@ -14,4 +15,8 @@ public interface OrderService {
Optional<List<String>> getMonthSameLineOrderList(String orderNo);
Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.extranal.user.impl;
import com.clx.performance.extranal.user.DriverService;
import com.clx.user.feign.DriverFeign;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.FeignDriverTruckModelVo;
......@@ -13,6 +14,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Slf4j
......@@ -66,4 +68,10 @@ public class DriverServiceImpl implements DriverService {
return Optional.ofNullable(result.getData());
}
@Override
public void batchUpdateDriverAndTruckStatusCancel(List<BatchUpdateDriverAndTruckParam> list) {
Optional.ofNullable(driverFeign.batchUpdateOrderStatus(list))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL);
}
}
......@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
......@@ -31,4 +32,11 @@ public class OrderServiceImpl implements OrderService {
.filter(Result::succeed)
.map(Result::getData);
}
@Override
public Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList) {
return Optional.ofNullable(orderFeign.queryListOrderByOrderNoList(orderNoList))
.filter(Result::succeed)
.map(Result::getData);
}
}
......@@ -166,7 +166,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo());
child = lastTruckService.getOrderLastTruck(after.getOrderNo());
}
if (Objects.nonNull(child)) {
log.info("开始同步新货主客户端最后一车的运单,运单编号:{}", child.getChildNo());
......@@ -217,7 +217,7 @@ public class OrderChildDtsListener {
}
}
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after) {
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(Objects.equals(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode(),after.getStatus()) ||
(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode())){
......@@ -229,7 +229,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo());
child = lastTruckService.getOrderLastTruck(after.getOrderNo());
}
if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child);
......
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
......@@ -10,8 +8,6 @@ import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderGoodsLogsEnum;
import com.clx.performance.enums.OrderGoodsPendingOrderWayStatusEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsAdjustmentPrice;
......@@ -57,7 +53,6 @@ public class OrderGoodsDtsListener {
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after));
backFillOrderWeight(after);
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
......@@ -69,31 +64,6 @@ public class OrderGoodsDtsListener {
}
}
//货单剩余吨数不足35吨,自动恢复吨数到订单上
public void backFillOrderWeight(OrderGoods after){
//剩余吨数小于35吨并且大于0,自动归还订单上
if(new BigDecimal("35").compareTo(after.getResidueTransportWeight()) > 0 &&
after.getResidueTransportWeight().compareTo(BigDecimal.ZERO) > 0){
log.info("开始自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}",
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
orderCancelComponent.backFillOrderWeight(after,after.getResidueTransportWeight(), UpdateEnum.ADD.getCode());
OrderGoods orderGoods = new OrderGoods();
orderGoods.setId(after.getId());
orderGoods.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(orderGoods);
orderGoodsLogService.saveLog(after.getOrderGoodsNo(), 0L, "系统", OrderGoodsLogsEnum.Type.SYSTEM_RELEASE.getName(),
String.format("系统自动释放:%s吨", after.getResidueTransportWeight()));
//释放定向单(非自由车辆)对应的定向车辆
if( ( Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())
|| Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.FLEET_EXCLUSIVE.getCode()) )
&& !Objects.equals(after.getVehicleUsage(), VehicleUsageEnum.Status.OWN.getCode())){
goodsOrderTruckRecordComponent.releaseOrderGoodsDriverAndTruck(after.getOrderGoodsNo());
}
log.info("结束自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}",
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
}
}
public void syncPerformanceProgress(OrderGoods before,OrderGoods after, Integer updateType) {
boolean isSend = false;
......@@ -135,6 +105,8 @@ public class OrderGoodsDtsListener {
|| //挂单中之后的状态的挂单运费发生变化
(after.getOrderGoodsStatus() >= OrderGoodsStatusEnum.Status.PAYING.getCode() &&
!Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight()))
//提取吨数发生变化
|| (after.getExtractWeight().compareTo(BigDecimal.ZERO) != 0)
)
){
isSend = true;
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
......@@ -173,4 +174,13 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
" group by order_goods_no " +
"</script>")
List<CancelOrderGoodsWeightDTO> statisticsCancelOrderGoodsWeight(@Param("list") List<String> childNos);
@SelectProvider(type = OrderChildSqlProvider.class, method = "countValidByOrderGoodsNoList")
List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(@Param("orderGoodsList") List<String> orderGoodsList);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateCancel")
void batchUpdateCancel(List<OrderChild> canCancelOrderChildList);
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsFleetOpenTruck;
import com.clx.performance.param.app.AppGoodsOrderSearchParam;
......@@ -24,11 +25,6 @@ import java.util.List;
*/
public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{weight} " +
" where id = #{orderId}")
int updateWeight(@Param("orderId") Integer orderId, @Param("weight") BigDecimal weight);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getMaxOrderGoodsId")
String getMaxOrderGoodsId();
......@@ -36,18 +32,16 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
IPage<OrderGoodsVO> pageOrderGoodsList(@Param("page") Page<OrderGoodsVO> page, @Param("param") PageOrderGoodsListParam param);
@Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{weight}," +
" already_transport_weight = already_transport_weight+#{weight}," +
"order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}")
void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
@Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{residueTransportWeight}," +
" already_transport_weight = already_transport_weight+#{alreadyTransportWeight}," +
" already_transport_weight = already_transport_weight - #{residueWeight}," +
"order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}")
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(@Param("id") Integer id, @Param("alreadyTransportWeight") BigDecimal alreadyTransportWeight, @Param("residueTransportWeight") BigDecimal residueTransportWeight,@Param("orderGoodsStatus") Integer orderGoodsStatus);
void updateOrderGoodsWeightAlreadyAndStatus(@Param("id") Integer id, @Param("residueWeight") BigDecimal residueWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList")
......@@ -76,8 +70,8 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoods")
Integer updateOrderGoods(@Param(value = "params") OrderGoodsEditParams orderGoodsEditParams);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus")
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetAlreadyWeightAndStatus")
Integer updateOrderGoodsSetAlreadyWeightAndStatus(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight")
BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo);
......@@ -108,4 +102,11 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "batchUpdateOrderGoodsPaying")
void batchUpdateOrderGoodsPaying(@Param("updateOrderGoods") List<OrderGoods> updateOrderGoods);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "batchCancelOrderGoodsWeight")
void batchCancelOrderGoodsWeight(@Param("cancelOrderGoodsList") List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList);
}
......@@ -38,4 +38,8 @@ public interface OrderGoodsTruckBindMapper extends BaseMapper<OrderGoodsTruckBin
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "queryOrderGoodsTruckNum")
List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList);
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "batchCancelTruckList")
void batchCancelTruckList(List<OrderGoodsTruckBind> updateList);
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import com.msl.common.result.Result;
public interface LastTruckService {
OrderChild getLastTruckChild(String orderNo);
Result<?> syncLastTruckChild(OrderChild child);
......@@ -14,4 +13,8 @@ public interface LastTruckService {
Result<?> syncLastTruckChild4OrderTrigger(String orderNo);
OrderChild getOrderLastTruck(String orderNo);
}
......@@ -16,4 +16,5 @@ public interface OrderChildLogService {
void saveBatchOrderChildLog(List<OrderChildLog> logs);
void batchSaveCarrierOrderChildLogs(List<OrderChild> canCancelOrderChildList,Long userNo,String userName);
}
......@@ -11,6 +11,7 @@ import com.clx.performance.param.pc.*;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.msl.common.base.PageParam;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
......@@ -115,4 +116,6 @@ public interface OrderChildService {
NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param);
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
}
......@@ -34,9 +34,6 @@ public interface OrderGoodsService {
void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void borrowWeight(OrderGoods orderGoods,String orderChildNo,BigDecimal subOrderGoodsResidue, BigDecimal addAlready,BigDecimal borrowOrderWeight,
Integer orderGoodsStatus);
void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus);
......@@ -102,8 +99,6 @@ public interface OrderGoodsService {
IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param);
void batchUpdateResidueWeight(List<OrderGoods> list);
void saveBindTruck(DistributionTruckParam param);
......@@ -113,4 +108,7 @@ public interface OrderGoodsService {
List<DriverFreightPriceVO> getDriverFreightPriceList(String orderNo);
List<OrderGoodsPendingVO> getOrderGoodsPendingList(String orderNo);
BigDecimal calcOrderGoodsResidueWeight(BigDecimal extractWeight,BigDecimal alreadyWeight);
}
package com.clx.performance.service;
import java.math.BigDecimal;
public interface OrderGoodsWeightService {
BigDecimal getOrderGoodsCanExtractWeight(String orderGoodsNo);
}
package com.clx.performance.service;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import java.math.BigDecimal;
public interface OrderWeightService {
OrderExtractWeightVO getOrderCanExtractWeight(String orderNo);
BigDecimal getOrderResidueWeight(String orderNo);
//计算货单真实的提取量
BigDecimal calcOrderGoodsRealExtractWeight(OrderGoods item);
}
......@@ -4,20 +4,29 @@ import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.open.sdk.enums.ResultStatusEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @ClassName LastTruckServiceImpl
......@@ -35,31 +44,9 @@ public class LastTruckServiceImpl implements LastTruckService {
private final OrderChildDao orderChildDao;
private final OrderChildStruct orderChildStruct;
private final ThirdAppConfig thirdAppConfig;
/**
* @Author kavin
* @Description 判断最后一车的逻辑
* @Param [orderNo]
* @return
**/
@Override
public OrderChild getLastTruckChild(String orderNo) {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
//判断当前订单下所有到达目的地之后的运单的装车吨数 >= (订单拉运吨数 -35吨)
log.info("订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 订单拉运吨数:{}",
orderNo,weight,orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.compareTo(orderInfo.getTransportWeight().subtract(new BigDecimal("35"))) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
return child;
}
return null;
}
private final RedissonClient redissonClient;
private final RedisTemplate<String, String> redisTemplate;
/**
* @Author kavin
* @Description 同步最后一车
......@@ -79,16 +66,24 @@ public class LastTruckServiceImpl implements LastTruckService {
return result;
}
//在没有算出最后一车的前提下,订单变成已完结或者已完成状态,但是订单量可能并没有提取完,所以只需要判断订单下是否还有未到达 目的地的运单,没有则进行最后一车运算
@Override
public OrderChild getOrderCompleteLastTruck(String orderNo) {
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单
Long count = orderChildDao.haveArriveReceiveChild(orderNo);
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count);
if(count == 0 ){
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车
return orderChildDao.getOrderCompleteLastTruck(orderNo);
String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
//已经计算出最后一车,则直接返回运单信息
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
}else{
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单
Long count = orderChildDao.haveArriveReceiveChild(orderNo);
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count);
if(count == 0 ){
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车
return orderChildDao.getOrderCompleteLastTruck(orderNo);
}
return null;
}
return null;
}
......@@ -106,4 +101,54 @@ public class LastTruckServiceImpl implements LastTruckService {
}
return Result.ok("订单完成/完结状态下未查询最后一车,订单编号:" + orderNo);
}
//调用此方法前查订单是否存在最后一车,存在则不进行该方法调用
@Override
public OrderChild getOrderLastTruck(String orderNo){
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算订单最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
RLock lock = redissonClient.getLock(RedissonConstants.CALC_ORDER_LAST_TRUCK_LOCK + orderNo);
try{
String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
//已经计算出最后一车,则直接返回运单信息
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
}
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(ResultEnum.TRY_LOCK_ERROR,"计算最后一车请求排队超时");
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
log.info("计算订单最后一车,订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 订单拉运吨数:{}",
orderNo,weight,orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.subtract(orderInfo.getTransportWeight()).compareTo(BigDecimal.ZERO) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
//更新订单最后一车到缓存,并设置有效期为60天
redisTemplate.opsForValue().set(getLastTruckCacheKey(orderNo),child.getChildNo(),60, TimeUnit.DAYS);
return child;
}
return null;
} catch (InterruptedException e){
log.warn("计算订单最后一车发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return null;
}
public String getLastTruckCacheKey(String orderNo){
return RedisConstants.ORDER_LAST_TRUCK_CHILD + orderNo;
}
}
......@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.param.mq.FreezeTriggerMqParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
......@@ -154,7 +153,10 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//没有运单,直接是取消
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) != 0) {
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (residueTransportWeight.compareTo(BigDecimal.ZERO) != 0) {
//货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else {
......@@ -208,128 +210,35 @@ public class OrderCancelServiceImpl implements OrderCancelService {
@Override
public void ownerConfirmCancelProcess(String orderNo) {
log.info("开始执行订单取消吨数回填");
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());
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)));
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(sum, sum, orderGoods.getId());
}
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已取消
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
}
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);
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setResidueWeight(residueWeight);
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
orderFeign.rollbackOrderWeight(param);
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
} else {
Map<Integer, BigDecimal> vehicleUsageMap = new HashMap<>();
vehicleUsageMap.put(1, BigDecimal.ZERO);
vehicleUsageMap.put(2, BigDecimal.ZERO);
if (OrderEnum.Status.COMPLETED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
//已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
//货单
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
//运单
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
for (Map.Entry<String, List<OrderGoods>> entry : orderGoodsMap.entrySet()) {
String orderGoodsNo = entry.getKey();
OrderGoods orderGoods = entry.getValue().get(0);
//已完结
List<OrderChild> orderChildrenList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
Map<String, List<OrderGoods>> orderGoodsMap = orderGoodsList.stream()
.collect(Collectors.groupingBy(OrderGoods::getOrderGoodsNo));
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)));
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(sum, sum, orderGoods.getId());
}
} else if (OrderEnum.Status.CANCELED.getCode().equals(orderInfoFeignVO.getOrderStatus())) {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
Map<String, List<OrderChild>> orderChildMap = orderChildrenList.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
//归还吨数
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);
try {
Result<Object> result = orderFeign.rollbackOrderWeight(param);
if (!result.succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
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);
}
// if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
// }
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(sum, sum, orderGoods.getId());
}
}
//取消订单更新货单剩余吨数
orderGoodsService.batchUpdateResidueWeight(orderGoodsList);
}
......@@ -508,48 +417,29 @@ public class OrderCancelServiceImpl implements OrderCancelService {
@Override
@Transactional(rollbackFor = Exception.class)
public void orderCancelProcess(OrderCancelParam param) {
Map<Integer, BigDecimal> truckDemandMap = new HashMap<>();
truckDemandMap.put(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode(), BigDecimal.ZERO);
truckDemandMap.put(TruckDemandEnum.TruckType.OWNER_CAR.getCode(), BigDecimal.ZERO);
Map<Integer, BigDecimal> vehicleUsageMap = new HashMap<>();
vehicleUsageMap.put(1, BigDecimal.ZERO);
vehicleUsageMap.put(2, BigDecimal.ZERO);
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
String orderNo = param.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
Integer truckDemand = orderInfoFeign.getTruckDemand();
List<OrderGoods> orderGoodsList = null;
switch (param.getCancelType()) {
case 1: //单纯取消订单及货单
orderGoodsList = getOrderGoods(orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
getOrderGoods(orderNo);
break;
case 2: //取消未拉运吨数的货单及订单
orderGoodsList = getGoods(orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
getGoods(orderNo);
break;
case 3: //取消未拉运+未到达货源地吨数
orderGoodsList = getOrderGoods(param, orderNo, orderInfoFeign, truckDemandMap, vehicleUsageMap, rollbackOrderWeightParam, truckDemand);
getOrderGoods(param, orderNo);
break;
default:
return;
}
if (!orderFeign.rollbackOrderWeight(rollbackOrderWeightParam).succeed()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
// if (!orderFeign.saveOrderSettlementJobRecord(orderNo).succeed()) {
// throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用结算单锁定失败");
// }
//订单取消恢复货单的剩余吨数为0
orderGoodsService.batchUpdateResidueWeight(orderGoodsList);
//触发自动冻结的mq消费逻辑
triggerAutoFreeze(orderInfoFeign.getOwnerUserNo(),orderNo);
}
private List<OrderGoods> getOrderGoods(OrderCancelParam param, String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
private List<OrderGoods> getOrderGoods(OrderCancelParam param, String orderNo) {
List<OrderGoods> orderGoodsList;
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
Map<String, List<OrderChild>> orderChildMap = new HashMap<>();
......@@ -557,162 +447,26 @@ public class OrderCancelServiceImpl implements OrderCancelService {
List<OrderChild> orderChildren = orderChildDao.selectInOrderChildNoList(param.getChildNoList());
orderChildMap = orderChildren.stream().collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
}
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(
orderGoods.getAlreadyTransportWeight()
.subtract(
childSum
)
);
update.setResidueTransportWeight(orderGoods.getResidueTransportWeight().add(childSum));
vehicleUsageMap.put(orderGoods.getTruckDemand(),
vehicleUsageMap.get(orderGoods.getTruckDemand())
.add(childSum));
orderGoodsDao.updateEntityByKey(update);
}
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
if (CollectionUtil.isNotEmpty(orderChildMap.get(orderGoods.getOrderGoodsNo()))) {
BigDecimal childSum = orderChildMap.get(orderGoods.getOrderGoodsNo()).stream()
.map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
update.setAlreadyTransportWeight(orderGoods.getAlreadyTransportWeight().subtract(childSum)
);
orderGoodsDao.updateEntityByKey(update);
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
}
private List<OrderGoods> getGoods(String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
private List<OrderGoods> getGoods(String orderNo) {
return orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
}
private List<OrderGoods> getOrderGoods(String orderNo, FeignOrderVO orderInfoFeign, Map<Integer, BigDecimal> truckDemandMap, Map<Integer, BigDecimal> vehicleUsageMap, RollbackOrderWeightParam rollbackOrderWeightParam, Integer truckDemand) {
List<OrderGoods> orderGoodsList;
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
for (OrderGoods orderGoods : orderGoodsList) {
truckDemandMap.put(orderGoods.getTruckDemand(),
truckDemandMap.get(orderGoods.getTruckDemand())
.add(orderGoods.getResidueTransportWeight()));
}
} else {
for (OrderGoods orderGoods : orderGoodsList) {
vehicleUsageMap.put(orderGoods.getVehicleUsage(),
vehicleUsageMap.get(orderGoods.getVehicleUsage())
.add(orderGoods.getResidueTransportWeight()));
}
}
//归还吨数
if (!orderInfoFeign.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setOrderNo(orderNo);
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(truckDemandMap.get(truckDemand));
}
if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setOwnResidueCarryWeight(truckDemandMap.get(truckDemand));
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
} else {
BigDecimal platformResidueSum = vehicleUsageMap.get(1);
BigDecimal ownResidueSum = vehicleUsageMap.get(2);
BigDecimal residueSum = platformResidueSum.add(ownResidueSum);
rollbackOrderWeightParam.setOrderNo(orderNo);
rollbackOrderWeightParam.setResidueWeight(residueSum);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(platformResidueSum);
rollbackOrderWeightParam.setOwnResidueCarryWeight(ownResidueSum);
}
return orderGoodsList;
private List<OrderGoods> getOrderGoods(String orderNo) {
return orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
}
//订单取消增加自动冻结的消息触发
......
......@@ -2,12 +2,14 @@ package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderChildLogDao;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildLog;
import com.clx.performance.service.OrderChildLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
......@@ -52,4 +54,22 @@ public class OrderChildLogServiceImpl implements OrderChildLogService {
public void saveBatchOrderChildLog(List<OrderChildLog> logs) {
orderChildLogDao.saveBatchList(logs);
}
@Override
public void batchSaveCarrierOrderChildLogs(List<OrderChild> canCancelOrderChildList,Long userNo,String userName) {
List<OrderChildLog> logs = new ArrayList<>();
OrderChildLog orderChildLog;
for (OrderChild child : canCancelOrderChildList) {
orderChildLog = new OrderChildLog();
orderChildLog.setChildNo(child.getChildNo());
orderChildLog.setType(OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode());
orderChildLog.setRemark(OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg());
orderChildLog.setCreateType(OrderChildLogEnum.CreateType.PLATFORM.getCode());
orderChildLog.setCreateBy(userNo);
orderChildLog.setCreateName(userName);
logs.add(orderChildLog);
}
orderChildLogDao.saveBatchList(logs);
}
}
......@@ -27,6 +27,8 @@ import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.dto.payment.PaymentDTO;
import com.clx.performance.dto.payment.WalletResidueCardDTO;
......@@ -64,9 +66,11 @@ import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.enums.idcard.IdCardEnum;
import com.clx.user.feign.DocumentFeign;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -255,6 +259,8 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired
private DocumentFeign documentFeign;
@Autowired
private OrderWeightService orderWeightService;
@Autowired
private UserClxFeign userClxFeign;
@Autowired
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
......@@ -447,18 +453,10 @@ public class OrderChildServiceImpl implements OrderChildService {
}
}
// 库存验证
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
// if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException
// (PerformanceResultEnum.ORDER_WEIGHT_LACK);}
// 订单数量限制
// 订单已拉运吨数
BigDecimal alreadyTransportWeight = orderGoodsDao.sumAlreadyTransportWeightByOrderNo(orderGoods.getOrderNo());
if (alreadyTransportWeight.compareTo(orderInfo.getTransportWeight().subtract(new BigDecimal("35"))) > 0){
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
// 验证是否有足量去接该运单
if(judgeNotEnoughWeightOrdered(residueTransportWeight,orderInfo.getOrderNo())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
......@@ -503,23 +501,13 @@ public class OrderChildServiceImpl implements OrderChildService {
Integer overWeight = orderInfo.getOverWeight();
if(Objects.equals(overWeight,OrderGoodsOverWeightEnum.NO.getCode())){
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal(35)) < 0) {
orderChild.setWeight(orderGoods.getResidueTransportWeight());
} else {
orderChild.setWeight(new BigDecimal(35));
}
orderChild.setWeight(new BigDecimal(35));
} else{
if (orderGoods.getResidueTransportWeight().compareTo(new BigDecimal(50)) < 0) {
orderChild.setWeight(orderGoods.getResidueTransportWeight());
} else {
orderChild.setWeight(new BigDecimal(50));
}
orderChild.setWeight(new BigDecimal(50));
}
//orderChild.setWeight(orderChild.getTruckLoad());
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setPayTime(now);
......@@ -584,6 +572,18 @@ public class OrderChildServiceImpl implements OrderChildService {
return result;
}
//判断当前运单的吨数,货单剩余量是否足够,不足够直接拦截,足够需要判断订单是否还有拉运量
public boolean judgeNotEnoughWeightOrdered(BigDecimal orderGoodsResidueWeight,String orderNo){
//货单无剩余量
if(orderGoodsResidueWeight.compareTo(BigDecimal.ZERO) <= 0 ){
return true;
}
//订单无剩余量
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(orderNo);
return orderResidueWeight.compareTo(BigDecimal.ZERO) <= 0;
}
/**
* @Author kavin
* @Description 计算接单时,车辆距离发货地和收货地的用时时间
......@@ -2245,7 +2245,17 @@ public class OrderChildServiceImpl implements OrderChildService {
orderGoodsStatus = orderGoods.getOrderGoodsStatus();
}
if (dif.compareTo(BigDecimal.ZERO) != 0) {
//判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(orderGoods.getOrderNo());
//增加吨数 && 订单剩余吨数小于等于0 ,则提示吨数不足
if(dif.compareTo(BigDecimal.ZERO) > 0 && orderResidueWeight.compareTo(BigDecimal.ZERO) <= 0){
throw new ServiceSystemException(ORDER_WEIGHT_LACK);
}
//运单修改装车吨数,从货单进行扣减
log.info("货单号:{},运单号 :{},扣减吨数:{}",orderGoods.getOrderGoodsNo(),childNo, dif);
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
/* //判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
//货单吨数不够扣减,从订单进行借吨数
orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif,
......@@ -2254,7 +2264,7 @@ public class OrderChildServiceImpl implements OrderChildService {
log.info("货单吨数有剩余,归还吨数:{}", dif);
// 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
}
}*/
}
}
......@@ -2309,7 +2319,10 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateOrderGoodsComplete(OrderGoods orderGoods, OrderChild orderChild, long count){
if (count > 1) {return;}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo(),orderChild.getTruckNo());
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (residueTransportWeight.compareTo(BigDecimal.ZERO) <= 0){
//orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.SUCCESS.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo());
......@@ -3556,4 +3569,170 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setNeedAlert(OrderChildEnum.NeedAlertEnum.OK.getCode());
return result;
}
@Transactional(rollbackFor = Exception.class)
@Override
public UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
List<OrderChild> orderChildList = orderChildDao.listInField(OrderChild::getChildNo, param.getChildNoList());
List<OrderChild> canCancelOrderChildList = new ArrayList<>(); //可以取消的运单集合
List<OrderChild> notCancelOrderChildList = new ArrayList<>(); //不可以取消的运单集合
//已接单、前往货源地、到达货源地 的运单才可以取消
for (OrderChild child : orderChildList) {
if(OrderChildEnum.CARRIER_CAN_CANCEL_STATUS_LIST.contains(child.getStatus())){
canCancelOrderChildList.add(child);
}else{
notCancelOrderChildList.add(child);
}
}
//如果可取消的订单为空。直接返回
if(CollectionUtils.isEmpty(canCancelOrderChildList)){
UpdateCarrierBatchCancelVO result = new UpdateCarrierBatchCancelVO();
result.setFailChildNoList(notCancelOrderChildList.stream().map(OrderChild :: getChildNo).collect(Collectors.toList()));
result.setSuccessCount(canCancelOrderChildList.size());
return result;
}
// 返回吨数
batchUpdateOrderGoodsWeightReturn(canCancelOrderChildList);
// 更新出车状态
batchUpdateDriverAndTruckStatusCancel(canCancelOrderChildList);
canCancelOrderChildList.forEach(orderChild->{
//到达货源地的设置取消原因
if(Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.ARRIVE_SEND.getCode())){
orderChild.setCancelRemark(param.getRemark());
}
orderChild.setCancelTime(LocalDateTime.now());
orderChild.setFinishTime(orderChild.getCancelTime());
orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
});
//取消运单
orderChildDao.batchUpdateCancel(canCancelOrderChildList);
// 取消定向
batchUpdateOrderGoodsDirectCancel(canCancelOrderChildList);
// 批量保存日志
orderChildLogService.batchSaveCarrierOrderChildLogs(canCancelOrderChildList,loginUserInfo.getUserNo(),loginUserInfo.getUserName());
// 承运取消后置逻辑
canCancelOrderChildList.forEach(orderChild-> orderChildPostService.orderChildCancelByCarrier(orderChild,
UserTypeEnum.CARRIER.getCode(), loginUserInfo.getUserNo(), loginUserInfo.getUserName()));
UpdateCarrierBatchCancelVO result = new UpdateCarrierBatchCancelVO();
result.setFailChildNoList(notCancelOrderChildList.stream().map(OrderChild :: getChildNo).collect(Collectors.toList()));
result.setSuccessCount(canCancelOrderChildList.size());
return result;
}
private void batchUpdateOrderGoodsWeightReturn(List<OrderChild> canCancelOrderChildList) {
//按照货单分组,每个货单下取消的运单个数map
Map<String, Long> orderGoodsChildsMap = new HashMap<>();
//货单归还吨数Map
Map<String, BigDecimal> cancelOrderGoodsWeightMap = new HashMap<>();
for (OrderChild child : canCancelOrderChildList) {
Long count = Objects.nonNull(orderGoodsChildsMap.get(child.getOrderGoodsNo()))?
orderGoodsChildsMap.get(child.getOrderGoodsNo()) + 1:1;
orderGoodsChildsMap.put(child.getOrderGoodsNo(),count);
BigDecimal weight = Objects.nonNull(cancelOrderGoodsWeightMap.get(child.getOrderGoodsNo()))?
cancelOrderGoodsWeightMap.get(child.getOrderGoodsNo()).add(child.getWeight()):child.getWeight();
cancelOrderGoodsWeightMap.put(child.getOrderGoodsNo(),weight);
}
List<String> orderGoodsList = new ArrayList<>(orderGoodsChildsMap.keySet());
//查询当前货单下的运单个数Map
List<OrderGoodsNotCancelChildDTO> list = orderChildDao.countValidByOrderGoodsNoList(orderGoodsList);
//货单下全部运单都已取消。则重置货单状态为挂单中
List<OrderGoods> updateOrderGoods = new ArrayList<>();
for(OrderGoodsNotCancelChildDTO dto : list){
if(Objects.nonNull(orderGoodsChildsMap.get(dto.getOrderGoodsNo()))){
//此时取消的货单下运单数量等于该货单下未取消的运单数量,则设置货单状态为挂单中
if(Objects.equals(orderGoodsChildsMap.get(dto.getOrderGoodsNo()),dto.getCount())){
OrderGoods orderGoods = new OrderGoods();
orderGoods.setOrderGoodsNo(dto.getOrderGoodsNo());
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.PAYING.getCode());
updateOrderGoods.add(orderGoods);
}
}
}
//货单还吨集合
List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList = new ArrayList<>();
OrderGoodsCancelWeightDTO dto;
for(Map.Entry<String,BigDecimal> entry : cancelOrderGoodsWeightMap.entrySet()){
dto = new OrderGoodsCancelWeightDTO();
dto.setOrderGoodsNo(entry.getKey());
dto.setWeight(entry.getValue());
cancelOrderGoodsList.add(dto);
}
//更新货到状态
if(CollectionUtils.isNotEmpty(updateOrderGoods)){
orderGoodsDao.batchUpdateOrderGoodsPaying(updateOrderGoods);
}
//归还货单吨数
if(CollectionUtils.isNotEmpty(cancelOrderGoodsList)){
orderGoodsDao.batchCancelOrderGoodsWeight(cancelOrderGoodsList);
}
}
private void batchUpdateDriverAndTruckStatusCancel(List<OrderChild> list) {
if(CollectionUtils.isEmpty(list)){
return;
}
List<BatchUpdateDriverAndTruckParam> paramList = new ArrayList<>();
BatchUpdateDriverAndTruckParam param;
for (OrderChild child : list) {
param = new BatchUpdateDriverAndTruckParam();
param.setTruckId(child.getTruckId());
param.setDriverUserNo(child.getDriverUserNo());
param.setDriverOrderStatus(DriverInfoEnum.DriverStatus.NO.getCode());
param.setTruckOrderStatus(DriverTruckEnum.TruckOrderStatus.EMPTY.getCode());
paramList.add(param);
}
driverService.batchUpdateDriverAndTruckStatusCancel(paramList);
}
private void batchUpdateOrderGoodsDirectCancel(List<OrderChild> list) {
Map<String, List<OrderChild>> orderGoodsChildListMap = list.stream().collect(
Collectors.groupingBy(OrderChild::getOrderGoodsNo));
List<String> orderGoodsList = new ArrayList<>(orderGoodsChildListMap.keySet());
List<OrderGoods> orderGoods = orderGoodsDao.listInField(OrderGoods::getOrderGoodsNo, orderGoodsList);
List<OrderGoodsTruckBind> updateList = new ArrayList<>();
OrderGoodsTruckBind update;
for (OrderGoods orderGood : orderGoods) {
if(Objects.equals(orderGood.getVehicleUsage(),VehicleUsageEnum.Status.OWN.getCode())){
//定向平台车辆取消绑定,自由车辆状态绑定状态不变
continue;
}
List<OrderChild> orderChildList = orderGoodsChildListMap.get(orderGood.getOrderGoodsNo());
for (OrderChild item : orderChildList) {
update = new OrderGoodsTruckBind();
update.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
update.setOrderNo(item.getOrderNo());
update.setOrderGoodsNo(item.getOrderGoodsNo());
update.setTruckNo(item.getTruckNo());
updateList.add(update);
//删除绑定的缓存
goodsOrderTruckRecordComponent.deleteTruckRecord(item.getOrderGoodsNo(), item.getTruckNo());
}
}
if(CollectionUtils.isNotEmpty(updateList)){
orderGoodsTruckBindDao.batchCancelTruckList(updateList);
}
}
}
......@@ -6,11 +6,11 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.InvoicingCompanyEnum;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.OrderCancelReasonParam;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
......@@ -24,20 +24,19 @@ import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.*;
import com.clx.performance.param.app.AppGoodsOrderSearchParam;
import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.feign.DistributionTruckParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsLogService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.*;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import com.clx.performance.vo.pc.DriverFreightPriceVO;
......@@ -124,6 +123,12 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Autowired
private OrderGoodsFleetOpenTruckDao orderGoodsFleetOpenTruckDao;
@Autowired
OrderWeightService orderWeightService;
@Autowired
OrderService orderService;
private static Map<Integer, Consumer<OrderGoodsCancelDTO>> orderGoodsCancelMap = new HashMap<>();
......@@ -154,6 +159,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForAPP(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForAPP(orderGoodsNo).map(orderGoodsStruct::convert).get();
BigDecimal residueWeight = this.calcOrderGoodsResidueWeight(orderGoodsVO.getExtractWeight(),
orderGoodsVO.getAlreadyTransportWeight());
String orderNo = orderGoodsVO.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
orderGoodsVO.setReveiveAddressAll(orderInfoFeign.getReveiveAddressAll());
......@@ -162,7 +169,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
orderGoodsVO.setResidueTransportWeight(residueWeight);
//货源地信息
orderGoodsVO.setSendContact(orderInfoFeign.getSendContact());
orderGoodsVO.setSendContactPhone(orderInfoFeign.getSendContactPhone());
......@@ -191,9 +198,15 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
IPage<OrderGoodsVO> page = orderGoodsDao.pageOrderGoodsList(param);
if(CollectionUtils.isNotEmpty(page.getRecords())){
List<String> fleetNoList = page.getRecords().stream()
.filter(item->Objects.equals(item.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode()))
.map(OrderGoodsVO :: getOrderGoodsNo).collect(Collectors.toList());
List<String> fleetNoList = new ArrayList<>();
List<String> orderNoList = new ArrayList<>();
for (OrderGoodsVO record : page.getRecords()) {
if(Objects.equals(record.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
fleetNoList.add(record.getOrderGoodsNo());
}
orderNoList.add(record.getOrderNo());
}
if(CollectionUtils.isNotEmpty(fleetNoList)){
List<OrderGoodsBindTruckNumDTO> bindTruckNumList = orderGoodsTruckBindDao.queryOrderGoodsTruckNum(fleetNoList);
......@@ -201,6 +214,35 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
Collectors.toMap(OrderGoodsBindTruckNumDTO::getOrderGoodsNo,OrderGoodsBindTruckNumDTO :: getTruckNum));
page.getRecords().forEach(item->item.setDispatchedOrders(map.get(item.getOrderGoodsNo())));
}
Optional<Map<String, FeignOrderInfoVO>> orderListOption = orderService.queryListOrderByOrderNoList(orderNoList);
if(!orderListOption.isPresent()){
log.warn("通过订单号批量查询订单信息失败,失败原因");
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"查询货单对应的订单信息失败");
}
List<OrderGoods> orderGoods = orderGoodsDao.listInField(OrderGoods::getOrderNo, orderNoList);
Map<String, BigDecimal> orderExtractWeightMap = new HashMap<>();
for (OrderGoods orderGood : orderGoods) {
//计算货单真实的提取量
BigDecimal weight = orderWeightService.calcOrderGoodsRealExtractWeight(orderGood);
String orderNo = orderGood.getOrderNo();
orderExtractWeightMap.put(orderNo,Objects.nonNull(orderExtractWeightMap.get(orderNo))?
orderExtractWeightMap.get(orderNo).add(weight): weight);
}
Map<String, FeignOrderInfoVO> orderInfoMap = orderListOption.get();
page.getRecords().forEach(item->{
FeignOrderInfoVO orderInfo = orderInfoMap.get(item.getOrderNo());
BigDecimal orderExtractWeight = orderExtractWeightMap.get(item.getOrderNo());
if(Objects.nonNull(orderInfo) && Objects.nonNull(orderExtractWeight)){
if(orderExtractWeight.compareTo(orderInfo.getTransportWeight()) > 0 ){
item.setOverOrderWeight(1);
}
}
item.setResidueTransportWeight(calcOrderGoodsResidueWeight(item.getExtractWeight(),item.getAlreadyTransportWeight()));
});
}
return page;
}
......@@ -228,7 +270,9 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
public void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus) {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight(), orderGoodsStatus);
//货单没有辆,并且货单用车非自有车
if (orderGoods.getResidueTransportWeight().compareTo(orderChild.getWeight()) <= 0
BigDecimal residueTransportWeight = this.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (residueTransportWeight.compareTo(orderChild.getWeight()) <= 0
&& !Objects.equals(orderGoods.getVehicleUsage(),VehicleUsageEnum.Status.OWN.getCode())) {
//释放其他车辆
goodsOrderTruckRecordComponent.releaseDriverAndTruckBind(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo());
......@@ -314,6 +358,11 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
public List<OrderGoodsFeignVO> getOrderGoodsListByOrderNo(String orderNo) {
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
if(CollectionUtils.isNotEmpty(list)){
list.forEach(item-> item.setResidueTransportWeight(this.calcOrderGoodsResidueWeight(item.getExtractWeight(),
item.getAlreadyTransportWeight())));
}
return orderGoodsStruct.convertList(list);
}
......@@ -364,42 +413,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
public BigDecimal orderCancelResidueWeight(String orderNo, String optionType) {
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
List<OrderGoods> orderGoodsList = null;
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
String residueWeight = orderInfoFeign.getResidueWeight();
BigDecimal ans = new BigDecimal(residueWeight);
BigDecimal residueWeight = orderWeightService.getOrderResidueWeight(orderNo);
switch (optionType) {
case "1":
return ans;
return residueWeight;
case "2":
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
ans = orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
return residueWeight;
case "3":
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) {
childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
ans = ans.add(orderGoodsResidueWeight).add(childResidueWeight);
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
residueWeight = residueWeight.add(childResidueWeight);
return residueWeight;
default:throw new RuntimeException("参数错误");
}
......@@ -414,77 +442,35 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEditOrderGoods(UpdateEditOrderGoodsParam param) {
UserSessionData loginUserInfo = null;
loginUserInfo = TokenUtil.getLoginUserInfo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
OrderGoodsEditParams orderGoodsParams = param.getOrderGoodsParams();
OrderGoods oldOrderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsParams.getOrderGoodsNo()).get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(param.getOrderNo());
if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数");
}
//考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数
BigDecimal realExtractWeight = oldOrderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getAlreadyTransportWeight().add(oldOrderGoods.getResidueTransportWeight());
oldOrderGoods.setExtractWeight(realExtractWeight);
//本次提取增加或者减少的吨数 = 本次提取的吨数 - 货单原实际提取吨数
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(realExtractWeight);
int flag = answer.compareTo(BigDecimal.ZERO);
//归还吨数
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(param.getOrderNo());
log.info("flag:{}",flag);
if (flag > 0) {
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight().add(answer));
//限制剩余吨数
limitOrderGoodsResidueWeight(orderGoodsParams.getResidueTransportWeight());
rollbackOrderWeightParam.setUpdateType(UpdateEnum.SUB.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer);
}else if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (orderGoodsParams.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(answer);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
rollbackOrderWeightParam.setResidueWeight(answer);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer);
}
BigDecimal oldResidueTransportWeight = this.calcOrderGoodsResidueWeight
(oldOrderGoods.getExtractWeight(),oldOrderGoods.getAlreadyTransportWeight());
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(param.getOrderNo());
BigDecimal canExtractWeight = orderCanExtractWeight.getCanExtractWeight();
BigDecimal changeWeight = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight());
//当计算出的订单可提取量为负数时,说明订单下调吨数,货单超过订单量,所以货单编辑吨数的时候只能进行下调操作
if(canExtractWeight.compareTo(BigDecimal.ZERO) < 0 && changeWeight.compareTo(BigDecimal.ZERO) > 0){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总量已超吨,只能做吨数下调操作");
}
log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam));
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
}else if (flag < 0 ){
orderGoodsParams.setResidueTransportWeight(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getAlreadyTransportWeight()));
//限制剩余吨数
limitOrderGoodsResidueWeight(orderGoodsParams.getResidueTransportWeight());
rollbackOrderWeightParam.setUpdateType(UpdateEnum.ADD.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate());
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate());
}else if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate());
if (VehicleUsageEnum.Status.OWN.getCode().equals(oldOrderGoods.getVehicleUsage())) {
rollbackOrderWeightParam.setOwnResidueCarryWeight(answer.negate());
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(answer.negate());
}
}
log.info("回填吨数:{}", JSONUtil.parse(rollbackOrderWeightParam));
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
} else {
//当编辑吨数等于0 的时候,不进行拦截
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight());
}
BigDecimal realExtractWeight = oldResidueTransportWeight.compareTo(BigDecimal.ZERO) <= 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getExtractWeight();
oldOrderGoods.setExtractWeight(realExtractWeight);
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(param.getOrderNo());
if (new BigDecimal(orderInfoFeign.getResidueWeight()).compareTo(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight())) < 0) {
if (orderResidueWeight.compareTo(changeWeight) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数已超订单可提取吨数");
}
......@@ -570,15 +556,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.EDIT.getName(), "");
}
/**
* 限制货单更新剩余吨数不能小于35吨
**/
private void limitOrderGoodsResidueWeight(BigDecimal residueTransportWeight){
if(residueTransportWeight.compareTo(BigDecimal.ZERO) != 0 && residueTransportWeight.compareTo(new BigDecimal("35")) < 0){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"当前货单剩余吨数不足35吨,无法挂单");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateOrderGoodsPrice(UpdateOrderGoodsPriceParam param) {
......@@ -664,7 +641,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
BigDecimal sum = BigDecimal.ZERO;
OrderGoods orderGoods = dto.getOrderGoods();
List<String> childNoList = dto.getChildNoList();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(),
OrderChildEnum.Status.DRIVER_CANCEL.getCode(), dto.getOrderGoodsCancelParam().getTruckList());
......@@ -691,49 +667,32 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
dto.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(orderGoods.getResidueTransportWeight(),
sum, dto.getOrderGoodsStatus(), orderGoods.getId());
}
orderGoodsDao.updateOrderGoodsSetAlreadyWeightAndStatus(sum, dto.getOrderGoodsStatus(), orderGoods.getId());
}
private void cancelOperateTwoTypeStrategy(OrderGoodsCancelDTO dto) {
BigDecimal sum = BigDecimal.ZERO;
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
OrderGoods orderGoods = dto.getOrderGoods();
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
List<String> childNoList = dto.getChildNoList();
BigDecimal childResidueWeight = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) {
List<OrderChild> filterOrderChildList = orderChildList.stream().filter(item -> item.getStatus() < OrderChildEnum.Status.ARRIVE_SEND.getCode()).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterOrderChildList)) {
for (OrderChild orderChild : filterOrderChildList) {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
childNoList.add(orderChild.getChildNo());
sum = sum.add(orderChild.getWeight());
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), 0L, OrderChildLogEnum.CreateType.PLATFORM.getMsg()
);
childResidueWeight = childResidueWeight.add(orderChild.getWeight());
}
orderChildDao.batchUpdateOrderChildStatus(
OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), OrderChildEnum.Status.PLATFORM_CANCEL.getName(),
......@@ -744,67 +703,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
dto.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
}
BigDecimal residueWeight = orderGoods.getResidueTransportWeight().add(sum);
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
}
orderGoodsDao.updateOrderGoodsWeightAlreadyAndStatus(orderGoods.getId(),childResidueWeight,OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
private void cancelOperateOneTypeStrategy(OrderGoodsCancelDTO dto) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
OrderGoods orderGoods = dto.getOrderGoods();
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.DRIVER_CANCEL.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单已产生运单");
}
BigDecimal residueWeight = dto.getOrderGoods().getResidueTransportWeight();
param.setResidueWeight(residueWeight);
param.setOrderNo(orderGoods.getOrderNo());
if (!orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(residueWeight);
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(residueWeight);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setResidueTransportWeight(BigDecimal.ZERO);
update.setOrderGoodsStatus(dto.getOrderGoodsStatus());
orderGoodsDao.updateEntityByKey(update);
}
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(dto.getOrderGoodsStatus());
orderGoodsDao.updateEntityByKey(update);
}
/**
......@@ -814,38 +727,37 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
*/
@Override
public BigDecimal orderGoodsCancelResidueWeight(OrderGoodsCancelParam goodsCancelParam) {
String orderGoodsNo = goodsCancelParam.getOrderGoodsNo();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.HTTP_ERROR, "未查询到货单");
List<OrderChild> orderChildList = null;
BigDecimal residueWeight = null;
BigDecimal sum = BigDecimal.ZERO;
Integer cancelOperateType = goodsCancelParam.getCancelOperateType();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(goodsCancelParam.getOrderGoodsNo()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
//订单剩余吨数
BigDecimal orderResidueWeight = orderWeightService.getOrderResidueWeight(orderGoods.getOrderNo());
//获取货单剩余吨数
BigDecimal orderGoodsResidueWeight = this.calcOrderGoodsResidueWeight(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
//货单剩余量大于订单剩余量,取订单剩余量,否则取货单剩余量
BigDecimal residueWeight = orderGoodsResidueWeight.compareTo(orderResidueWeight) > 0? orderResidueWeight : orderGoodsResidueWeight;
// 1:弹窗1 2:取消未接单及未到达货源地的车辆 3:取消未接单及未装车的车辆
switch (cancelOperateType) {
switch (goodsCancelParam.getCancelOperateType()) {
case 1:
return orderGoods.getResidueTransportWeight();
return residueWeight;
case 2:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
return residueWeight;
case 3:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.LOAD.getCode(), goodsCancelParam.getTruckList());
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(goodsCancelParam.getOrderNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
childResidueWeight = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
residueWeight = residueWeight.add(childResidueWeight);
return residueWeight;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数类型有误");
default:throw new RuntimeException("参数错误");
}
}
......@@ -862,23 +774,28 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
public OrderGoodsEditVO findOrderGoodsById(Integer id) {
OrderGoodsEditVO result = new OrderGoodsEditVO();
OrderGoodsVO orderGoodsVO = orderGoodsDao.findOrderGoodsById(id);
if(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) == 0 ){
//如果借吨或者恢复吨数,会导致提取吨数不准确,所以这里取准确提取吨数
orderGoodsVO.setExtractWeight(orderGoodsVO.getAlreadyTransportWeight());
}else{
orderGoodsVO.setExtractWeight(orderGoodsVO.getAlreadyTransportWeight().add(orderGoodsVO.getResidueTransportWeight()));
}
orderGoodsVO.setResidueTransportWeight(
this.calcOrderGoodsResidueWeight(orderGoodsVO.getExtractWeight(),orderGoodsVO.getAlreadyTransportWeight())
);
String orderNo = orderGoodsVO.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
//查询订单可提取吨数
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(orderNo);
//查询订单剩余吨数
BigDecimal residueWeight = orderWeightService.getOrderResidueWeight(orderNo);
result.setOrderNo(orderInfoFeign.getOrderNo());
result.setTransportWeight(orderInfoFeign.getTransportWeight());
result.setTransportWeight(orderCanExtractWeight.getTransportWeight());
result.setValidFreightPrice(orderInfoFeign.getValidFreightPrice());
result.setTruckDemand(orderInfoFeign.getTruckDemand());
result.setResidueWeight(orderInfoFeign.getResidueWeight());
result.setOwnCarryWeight(orderInfoFeign.getOwnCarryWeight());
result.setOwnResidueCarryWeight(orderInfoFeign.getOwnResidueCarryWeight());
result.setPlatformCarryWeight(orderInfoFeign.getPlatformCarryWeight());
result.setPlatformResidueCarryWeight(orderInfoFeign.getPlatformResidueCarryWeight());
result.setResidueWeight(String.valueOf(residueWeight));
result.setOwnCarryWeight(String.valueOf(orderCanExtractWeight.getOwnCarryWeight()));
result.setOwnResidueCarryWeight(String.valueOf(orderCanExtractWeight.getOwnCanExtractWeight()));
result.setPlatformCarryWeight(String.valueOf(orderCanExtractWeight.getPlatformCarryWeight()));
result.setPlatformResidueCarryWeight(String.valueOf(orderCanExtractWeight.getPlatCanExtractWeight()));
result.setDownFloatWeight(orderInfoFeign.getDownFloatWeight());
result.setUpFloatWeight(orderInfoFeign.getUpFloatWeight());
......@@ -929,29 +846,6 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
return orderGoodsDao.indexOrderGoodsListSearch(param);
}
@Override
public void borrowWeight(OrderGoods orderGoods,String orderChildNo, BigDecimal subOrderGoodsResidue, BigDecimal addAlready,BigDecimal borrowOrderWeight,
Integer orderGoodsStatus) {
log.info("运单号:{} 进行订单借量,货单剩余吨数需扣减:{} 吨,货单已拉运吨数需增加:{} 吨,订单借用吨数:{} 吨",orderChildNo,
subOrderGoodsResidue,addAlready,borrowOrderWeight);
//更新订单吨数
orderCancelComponent.backFillOrderWeight(orderGoods,borrowOrderWeight, UpdateEnum.SUB.getCode());
//更新货单吨数
orderGoodsDao.updateOrderGoodsWeightResidueAndAlreadyAndStatus(orderGoods.getId(),addAlready,subOrderGoodsResidue,orderGoodsStatus);
orderGoodsLogService.saveLog(orderGoods.getOrderGoodsNo(), 0L, "系统", OrderGoodsLogsEnum.Type.SYSTEM_INCREASE.getName(),
String.format("系统自动提量:%s吨", borrowOrderWeight));
}
@Override
public void batchUpdateResidueWeight(List<OrderGoods> list) {
if(CollectionUtils.isEmpty(list)){
return;
}
List<Integer> collect = list.stream().map(OrderGoods::getId).collect(Collectors.toList());
orderGoodsDao.batchUpdateResidueWeight(collect,BigDecimal.ZERO);
}
@Override
public void updateFrightPrice(String orderNo, BigDecimal pendingOrderFreight) {
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNo(orderNo);
......@@ -1044,8 +938,9 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsLog.setCreateBy(0L);
orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消");
orderGoodsLogs.add(orderGoodsLog);
totalCancelWeight = totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
orderGoods.getResidueTransportWeight() : BigDecimal.ZERO);
BigDecimal residueTransportWeight = this.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
totalCancelWeight = totalCancelWeight.add(residueTransportWeight);
if(Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.DX.getCode())
|| Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
cancelTruckBindOrderGoodsNoList.add(orderGoods.getOrderGoodsNo());
......@@ -1087,4 +982,11 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
.collect(Collectors.toList());
return orderGoodsStruct.convertOrderGoodsPendingList(sort);
}
@Override
public BigDecimal calcOrderGoodsResidueWeight(BigDecimal extractWeight, BigDecimal alreadyWeight) {
BigDecimal weight1 = Objects.nonNull(extractWeight)?extractWeight:BigDecimal.ZERO;
BigDecimal weight2 = Objects.nonNull(alreadyWeight)?alreadyWeight:BigDecimal.ZERO;
return weight1.subtract(weight2);
}
}
package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsWeightService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* @ClassName OrderGoodsWeightServiceImpl
* @Description
* @Author kavin
* @Date 2024/8/5 14:16
* @Version 1.0
*/
@Slf4j
@Service
@AllArgsConstructor
public class OrderGoodsWeightServiceImpl implements OrderGoodsWeightService {
private final OrderGoodsDao orderGoodsDao;
@Override
public BigDecimal getOrderGoodsCanExtractWeight(String orderGoodsNo) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
return orderGoods.getExtractWeight().subtract(orderGoods.getAlreadyTransportWeight());
}
}
package com.clx.performance.service.impl;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @ClassName OrderWeightServiceImpl
* @Description
* @Author kavin
* @Date 2024/8/5 11:52
* @Version 1.0
*/
@Slf4j
@Service
@AllArgsConstructor
public class OrderWeightServiceImpl implements OrderWeightService {
private final OrderService orderService;
private final OrderGoodsDao orderGoodsDao;
private final OrderChildDao orderChildDao;
@Override
public OrderExtractWeightVO getOrderCanExtractWeight(String orderNo) {
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderNo).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
List<OrderGoods> orderGoodsList = orderGoodsDao.listByField(OrderGoods::getOrderNo, orderNo);
if(CollectionUtils.isEmpty(orderGoodsList)){
BigDecimal canExtractWeight = Objects.nonNull(orderInfo.getPlatformCarryWeight())?
orderInfo.getPlatformCarryWeight():BigDecimal.ZERO.add(
Objects.nonNull(orderInfo.getOwnCarryWeight())?
orderInfo.getOwnCarryWeight():BigDecimal.ZERO);
return OrderExtractWeightVO.builder().transportWeight(orderInfo.getTransportWeight())
.truckDemand(orderInfo.getTruckDemand())
.ownCarryWeight(orderInfo.getOwnCarryWeight())
.platformCarryWeight(orderInfo.getPlatformCarryWeight())
.ownCanExtractWeight(orderInfo.getOwnCarryWeight())
.platCanExtractWeight(orderInfo.getPlatformCarryWeight())
.canExtractWeight(canExtractWeight)
.build();
}
//已发布的自有车辆吨数
BigDecimal ownOrderGoodsWeight = BigDecimal.ZERO;
//已发布的平台车辆吨数
BigDecimal platOrderGoodsWeight = BigDecimal.ZERO;
for (OrderGoods item : orderGoodsList) {
BigDecimal weight = calcOrderGoodsRealExtractWeight(item);
if(Objects.equals(item.getVehicleUsage(), VehicleUsageEnum.Status.OWN.getCode())){
ownOrderGoodsWeight = ownOrderGoodsWeight.add(weight);
}
if(Objects.equals(item.getVehicleUsage(), VehicleUsageEnum.Status.PLATFORM.getCode())){
platOrderGoodsWeight = platOrderGoodsWeight.add(weight);
}
}
if(Objects.equals(orderInfo.getTruckDemand(), TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())){
return OrderExtractWeightVO.builder().transportWeight(orderInfo.getTransportWeight())
.truckDemand(orderInfo.getTruckDemand())
.platformCarryWeight(orderInfo.getPlatformCarryWeight())
.platCanExtractWeight(orderInfo.getTransportWeight().subtract(platOrderGoodsWeight))
.ownCarryWeight(BigDecimal.ZERO)
.ownCanExtractWeight(BigDecimal.ZERO)
.canExtractWeight(orderInfo.getTransportWeight().subtract(platOrderGoodsWeight))
.build();
}
if(Objects.equals(orderInfo.getTruckDemand(), TruckDemandEnum.TruckType.OWNER_CAR.getCode())){
return OrderExtractWeightVO.builder().transportWeight(orderInfo.getTransportWeight())
.truckDemand(orderInfo.getTruckDemand())
.ownCarryWeight(orderInfo.getOwnCarryWeight())
.ownCanExtractWeight(orderInfo.getTransportWeight().subtract(ownOrderGoodsWeight))
.platformCarryWeight(BigDecimal.ZERO)
.platCanExtractWeight(BigDecimal.ZERO)
.canExtractWeight(orderInfo.getTransportWeight().subtract(ownOrderGoodsWeight))
.build();
}
if(Objects.equals(orderInfo.getTruckDemand(), TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())){
//因为自有车辆的货单必须一次性全部提取,所有只要自有车辆吨数,剩下的吨数则为平台可提取吨数
BigDecimal ownCanExtractWeight = BigDecimal.ZERO;
BigDecimal platCanExtractWeight;
if(ownOrderGoodsWeight.compareTo(BigDecimal.ZERO) == 0 ){
//自有的车辆未发布货单,自有可提取吨数则为订单上自有可提取的吨数
ownCanExtractWeight = orderInfo.getOwnCarryWeight();
//平台可提取吨数 = 承运吨数 - 自有可提取吨数 - 平台已提取的吨数
platCanExtractWeight = orderInfo.getTransportWeight().subtract(ownCanExtractWeight).
subtract(platOrderGoodsWeight);
}else{
//平台可提取吨数 = 承运吨数 - 自有已经提取吨数 - 平台已提取的吨数
platCanExtractWeight = orderInfo.getTransportWeight().subtract(ownOrderGoodsWeight).
subtract(platOrderGoodsWeight);
}
return OrderExtractWeightVO.builder().transportWeight(orderInfo.getTransportWeight())
.truckDemand(orderInfo.getTruckDemand())
.ownCarryWeight(orderInfo.getOwnCarryWeight())
.platformCarryWeight(orderInfo.getPlatformCarryWeight())
.ownCanExtractWeight(ownCanExtractWeight)
.platCanExtractWeight(platCanExtractWeight)
.canExtractWeight(platCanExtractWeight.add(ownCanExtractWeight))
.build();
}else{
log.warn("订单号:{} 的用车需求未知",orderNo);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"未知的用车需求");
}
}
@Override
public BigDecimal getOrderResidueWeight(String orderNo) {
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderNo).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);
List<OrderChild> orderChildList = orderChildDao.listByField(OrderChild::getOrderNo, orderNo);
if(CollectionUtils.isEmpty(orderChildList)){
return orderInfo.getTransportWeight();
}
BigDecimal alreadyWeight = BigDecimal.ZERO; //该订单下已经拉运的重量
for (OrderChild child : orderChildList) {
if(child.getStatus() > OrderChildEnum.Status.COMPLETE.getCode()){
continue;
}
if(Objects.nonNull(child.getLoadNet())){
alreadyWeight = alreadyWeight.add(child.getLoadNet());
}else{
alreadyWeight = alreadyWeight.add(child.getWeight());
}
}
return orderInfo.getTransportWeight().subtract(alreadyWeight);
}
//计算货单真实的提取量
@Override
public BigDecimal calcOrderGoodsRealExtractWeight(OrderGoods item){
//取消,完成,完结的货单取 已拉运吨数 作为提取吨数,
BigDecimal weight;
if(Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.SUCCESS.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.COMPLETED.getCode())){
weight = item.getAlreadyTransportWeight();
}else{
//货单的已拉运吨数大于提取吨数,使用已拉运吨数作为提取吨数
if(item.getExtractWeight().compareTo
(Objects.nonNull(item.getAlreadyLoadWeight())?item.getAlreadyLoadWeight():BigDecimal.ZERO) >=0){
weight = item.getExtractWeight();
}else{
weight = item.getAlreadyTransportWeight();
}
}
return weight;
}
}
......@@ -14,7 +14,6 @@ import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.feign.SystemAddressVO;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.BusinessConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.PerformanceProgressDao;
......@@ -45,11 +44,6 @@ import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
......@@ -58,6 +52,11 @@ import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
/**
* @author kavin
......@@ -148,9 +147,9 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
}
if(Objects.nonNull(item.getTaskWeight()) && Objects.nonNull(item.getSumUnloadWeight())){
//任务完成率 = 到站量 / 任务量+35
//任务完成率 = 到站量 / 任务量
BigDecimal taskCompleteRatio = item.getSumUnloadWeight()
.divide(item.getTaskWeight().add(BusinessConstants.ORDER_SUB_WEIGHT),
.divide(item.getTaskWeight(),
3, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
item.setTaskCompleteRatio(taskCompleteRatio);
}
......@@ -353,8 +352,7 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
item.setGoodsNameId(data.getGoodsNameId());
item.setGoodsName(data.getGoodsName());
item.setSendOverStandard(data.getOverWeight());
item.setTaskWeight(data.getTransportWeight().subtract(BusinessConstants.ORDER_SUB_WEIGHT));
item.setPendingWeight(data.getTransportWeight().subtract(data.getResidueWeight()));
item.setTaskWeight(data.getTransportWeight());
item.setTransportTimeSlot(DateUtils.formatDateTime(data.getTransportBeginTime()).get() + "至" +
DateUtils.formatDateTime(data.getTransportEndTime()).get());
......@@ -439,6 +437,7 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
Set<String> seniorLogisticsManagerNameSet = new HashSet<>();
BigDecimal pendingOrderFreight = null; //最新的货单的司机运费,取消的也算
LocalDateTime firstPendingTime = null; //挂单时间,取消的也算
BigDecimal pendingWeight = BigDecimal.ZERO;
for(OrderGoods item : orderGoods){
seniorLogisticsManagerNameSet.add(item.getSeniorLogisticsManagerName());
if(Objects.isNull(pendingOrderFreight)){
......@@ -446,12 +445,15 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
}
//最后一个挂单中的货单的挂单时间为最早的挂单时间
firstPendingTime = item.getPendingOrderTime();
pendingWeight = pendingWeight.add(item.getExtractWeight());
}
PerformanceProgress update = new PerformanceProgress();
update.setId(optional.get().getId());
update.setSeniorLogisticsManagerName(JSON.toJSONString(new ArrayList<>(seniorLogisticsManagerNameSet)));
update.setDriverFreightPrice(pendingOrderFreight);
update.setPendingTime(firstPendingTime);
update.setPendingWeight(pendingWeight);
performanceProgressDao.updateEntityByKey(update);
}
//履约进度表----运单部分
......
......@@ -3,12 +3,14 @@ package com.clx.performance.sqlProvider;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.msl.common.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
......@@ -16,6 +18,7 @@ import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
public class OrderChildSqlProvider {
......@@ -243,4 +246,35 @@ public class OrderChildSqlProvider {
" SELECT count(*) AS monthOrderNumber,sum(freight) total FROM order_child WHERE truck_no = #{truckNo} and AND finish_time >= #{startTime} AND finish_time <= #{endTime}" +
") a";
}
public String countValidByOrderGoodsNoList(@Param("orderGoodsList") List<String> orderGoodsList){
return new SQL(){{
SELECT("order_goods_no,count(1) count ");
FROM("order_child ");
StringJoiner sj = new StringJoiner(",","order_goods_no in (",")");
orderGoodsList.forEach(item -> sj.add("'"+item+"'"));
WHERE(sj.toString());
WHERE(" status < " + OrderChildEnum.Status.DRIVER_CANCEL.getCode());
GROUP_BY(" order_goods_no");
}}.toString();
}
public String batchUpdateCancel(List<OrderChild> list){
StringJoiner sj = new StringJoiner("; ");
for(OrderChild child : list){
sj.add("update order_child " +
"set " +
"cancel_remark = '" + child.getCancelRemark() + "'," +
"cancel_time = '" + DateUtils.formatDateTime(child.getCancelTime()).get() + "'," +
"finish_time = '" + DateUtils.formatDateTime(child.getFinishTime()).get() + "'," +
"status = " + child.getStatus() + " " +
"where id = "+child.getId()
);
}
return sj.toString();
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.sqlProvider;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsStopEnum;
import com.clx.performance.enums.PendingOrderWayStatusEnum;
......@@ -32,7 +33,6 @@ public class OrderGoodsSqlProvider {
String sql = new SQL() {{
SELECT("a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" if(a.residue_transport_weight < 0, '0', a.residue_transport_weight) as residue_transport_weight ," +
" a.already_transport_weight,a.already_load_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
......@@ -95,7 +95,7 @@ public class OrderGoodsSqlProvider {
String sql = new SQL() {{
SELECT("a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" a.residue_transport_weight,a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
" date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time ," +
......@@ -117,7 +117,7 @@ public class OrderGoodsSqlProvider {
}
WHERE("a.last_arrive_send_time >= now()");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35");
WHERE("IFNULL(a.extract_weight,0) - IFNULL(a.already_transport_weight,0) > 0");
ORDER_BY("a.pending_order_time desc");
}}.toString();
return sql;
......@@ -133,7 +133,7 @@ public class OrderGoodsSqlProvider {
WHERE(" a.pending_order_way = " + PendingOrderWayStatusEnum.Status.FLEET_GK.getCode());
WHERE("a.last_arrive_send_time >= now()");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35");
WHERE("IFNULL(a.extract_weight,0) - IFNULL(a.already_transport_weight,0) > 0");
WHERE("b.id is not null");
}}.toString();
return sql;
......@@ -146,7 +146,7 @@ public class OrderGoodsSqlProvider {
StringBuffer sqlList = new StringBuffer();
sqlList.append("select a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status," +
" a.extract_weight,a.residue_transport_weight," +
" a.extract_weight," +
"a.already_transport_weight, a.send_address_id, " +
"a.send_address_shorter,a.send_longitude,a.send_latitude," +
"a.receive_address_id, a.receive_address_shorter,a.receive_longitude," +
......@@ -160,7 +160,7 @@ public class OrderGoodsSqlProvider {
"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 IFNULL(a.extract_weight,0) - IFNULL(a.already_transport_weight,0) > 0" +
" and a.pending_order_way in ( "+ PendingOrderWayStatusEnum.Status.DX.getCode()+","+
PendingOrderWayStatusEnum.Status.FLEET_DX.getCode()+") and a.order_goods_no in (");
......@@ -181,7 +181,7 @@ public class OrderGoodsSqlProvider {
public String saveBatchEntity( List<OrderGoods> orderGoodsList) {
StringBuffer sqlList = new StringBuffer();
sqlList.append("INSERT INTO order_goods(extract_weight,residue_transport_weight,already_transport_weight,loss_price,truck_demand,extract_way," +
sqlList.append("INSERT INTO order_goods(extract_weight,already_transport_weight,loss_price,truck_demand,extract_way," +
"need_truck_num,vehicle_usage,pending_order_way,pending_order_time,pending_order_freight,last_arrive_send_time,senior_logistics_manager_id," +
"senior_logistics_manager_name,order_no,order_goods_no,order_goods_status,send_address_id,send_address_shorter,send_system_address_id,send_longitude," +
"send_latitude,receive_latitude,receive_longitude,receive_address_id,receive_address_shorter,receive_system_address_id,goods_name,goods_id,create_time,modified_time," +
......@@ -191,7 +191,7 @@ public class OrderGoodsSqlProvider {
for (int i = 0; i < orderGoodsList.size(); i++) {
OrderGoods o = orderGoodsList.get(i);
sqlList.append(" ('").append(o.getExtractWeight()).append("','").append(o.getResidueTransportWeight()).append("','").append(o.getAlreadyTransportWeight()).append("','")
sqlList.append(" ('").append(o.getExtractWeight()).append("','").append(o.getAlreadyTransportWeight()).append("','")
.append(o.getLossPrice()).append("','").append(o.getTruckDemand()).append("','").append(o.getExtractWay()).append("','")
.append(o.getNeedTruckNum()).append("','").append(o.getVehicleUsage()).append("','").append(o.getPendingOrderWay()).append("','").append(o.getPendingOrderTime()).append("','")
.append(o.getPendingOrderFreight()).append("','").append(o.getLastArriveSendTime()).append("','").append(o.getSeniorLogisticsManagerId()).append("','")
......@@ -225,7 +225,6 @@ public class OrderGoodsSqlProvider {
public String updateOrderGoodsSetResidueWeightAndAlreadyWeight(@Param(value ="residueWeight") BigDecimal residueWeight, @Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="id") Integer id){
String sql = new SQL() {{
UPDATE("order_goods")
.SET("residue_transport_weight = residue_transport_weight + #{residueWeight}")
.SET("already_transport_weight = already_transport_weight - #{alreadyWeight}")
.WHERE("id = #{id}");
......@@ -237,7 +236,7 @@ public class OrderGoodsSqlProvider {
String sql = new SQL() {{
SELECT("a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" if(a.residue_transport_weight < 0, '0', a.residue_transport_weight) as residue_transport_weight ,a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
" date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time ," +
......@@ -265,7 +264,6 @@ public class OrderGoodsSqlProvider {
UPDATE("order_goods")
.SET("vehicle_usage = #{params.vehicleUsage}")
.SET("extract_weight = #{params.extractWeight}")
.SET("residue_transport_weight = #{params.residueTransportWeight}")
.SET("pending_order_way = #{params.pendingOrderWay}")
.SET("last_order_time = #{params.lastOrderTime}")
.SET("last_arrive_send_time = #{params.lastArriveSendTime}")
......@@ -283,10 +281,9 @@ public class OrderGoodsSqlProvider {
return sql;
}
public String updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value ="residueWeight") BigDecimal residueWeight, @Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="status") Integer status,@Param(value ="id") Integer id){
public String updateOrderGoodsSetAlreadyWeightAndStatus(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value ="status") Integer status,@Param(value ="id") Integer id){
String sql = new SQL() {{
UPDATE("order_goods")
.SET("residue_transport_weight = residue_transport_weight + #{residueWeight}")
.SET("already_transport_weight = already_transport_weight - #{alreadyWeight}")
.SET("order_goods_status = #{status}")
......@@ -301,7 +298,7 @@ public class OrderGoodsSqlProvider {
sqlList.append(" select a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" if(a.residue_transport_weight < 0, '0', a.residue_transport_weight) as residue_transport_weight ,a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
" date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time ," +
......@@ -339,7 +336,7 @@ public class OrderGoodsSqlProvider {
String sql = new SQL() {{
SELECT("a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status, a.extract_weight, " +
" a.residue_transport_weight,a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.already_transport_weight, a.send_address_id, a.send_address_shorter,a.send_longitude," +
" a.send_latitude,a.receive_address_id, a.receive_address_shorter,a.receive_longitude,a.receive_latitude," +
"a.goods_id, a.goods_name, a.pending_order_way," +
" date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time ," +
......@@ -353,7 +350,7 @@ public class OrderGoodsSqlProvider {
WHERE("a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode());
WHERE("a.last_arrive_send_time >= now()");
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 >=35");
WHERE("IFNULL(a.extract_weight,0) - IFNULL(a.already_transport_weight,0) > 0");
if (ObjectUtil.isNotNull(param.getSearchType())) {
if (1 == param.getSearchType()) {
WHERE("a.send_address_shorter like '%"+ param.getSearchName() +"%'");
......@@ -370,8 +367,7 @@ public class OrderGoodsSqlProvider {
public String batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight){
StringJoiner sj = new StringJoiner("; ");
for(CancelOrderGoodsWeightDTO item : cancelOrderGoodsWeight){
sj.add("update order_goods set residue_transport_weight = residue_transport_weight +" + item.getCancelWeight() +
", already_transport_weight = already_transport_weight -" + item.getCancelWeight() +
sj.add("update order_goods set already_transport_weight = already_transport_weight -" + item.getCancelWeight() +
" where order_goods_no = '"+item.getOrderGoodsNo() + "'") ;
}
return sj.toString();
......@@ -379,4 +375,32 @@ public class OrderGoodsSqlProvider {
}
public String batchUpdateOrderGoodsPaying(@Param("updateOrderGoods") List<OrderGoods> updateOrderGoods){
StringJoiner sj = new StringJoiner("; ");
for(OrderGoods dto : updateOrderGoods){
sj.add("update order_goods " +
"set " +
"order_goods_status = " +dto.getOrderGoodsStatus()+" "+
"where order_goods_no = '"+dto.getOrderGoodsNo()+"' " +
"and order_goods_status = " + OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()
);
}
return sj.toString();
}
public String batchCancelOrderGoodsWeight(@Param("cancelOrderGoodsList") List<OrderGoodsCancelWeightDTO> list){
StringJoiner sj = new StringJoiner("; ");
for(OrderGoodsCancelWeightDTO dto : list){
sj.add("update order_goods " +
"set " +
"already_transport_weight = already_transport_weight - " + dto.getWeight() + " " +
"where order_goods_no = '"+dto.getOrderGoodsNo()+"'"
);
}
return sj.toString();
}
}
......@@ -2,6 +2,7 @@ package com.clx.performance.sqlProvider;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoodsTruckBind;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
......@@ -59,4 +60,19 @@ public class OrderGoodsTruckBindSqlProvider {
GROUP_BY("a.order_goods_no");
}}.toString();
}
public String batchCancelTruckList(List<OrderGoodsTruckBind> updateList){
StringJoiner sj = new StringJoiner("; ");
for(OrderGoodsTruckBind bind : updateList){
sj.add("update order_goods_truck_bind " +
"set " +
"status = " + bind.getStatus() + " " +
"where order_no = '" + bind.getOrderNo()+ "' " +
"and order_goods_no = '" + bind.getOrderGoodsNo() + "' " +
"and truck_no = '" + bind.getTruckNo() + "'"
);
}
return sj.toString();
}
}
......@@ -9,13 +9,11 @@ import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.utils.SpringContextUtils;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import java.time.LocalDateTime;
import java.util.HashSet;
......@@ -27,9 +25,6 @@ import java.util.stream.Collectors;
@Slf4j
public abstract class GoodsOrderStrategy {
@Autowired
private Environment environment;
/**
* 不同的用车需求执行不同的策略 1:one 2:two 3:three
......@@ -40,23 +35,15 @@ public abstract class GoodsOrderStrategy {
* @param now
* @return
*/
public abstract LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now);
public abstract LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo,
OrderExtractWeightVO orderCanExtractWeight, LocalDateTime now);
public void saveGoodsOrder(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now, RabbitTemplate rabbitTemplate) {
String orderNo = orderGoodsParams.getOrderNo();
public void saveGoodsOrder(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo,
OrderExtractWeightVO orderCanExtractWeight, LocalDateTime now) {
if (Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())) {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "订单已暂停,无法进行提量");
}
String transportBeginTime = orderInfo.getTransportBeginTime();
/* if (!"test".equals(environment.getActiveProfiles()[0])) {
for (OrderGoodsChildParams param : orderGoodsParams.getOrderGoodsChildParams()) {
String pendingOrderTime = param.getPendingOrderTime();
if (DateUtils.parseDateTime(pendingOrderTime).get().isBefore(DateUtils.parseDateTime(transportBeginTime).get())) {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "挂单时间不能早于拉运开始时间");
}
}
}*/
//多个定向单不允许车辆重复
List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams();
......@@ -81,30 +68,6 @@ public abstract class GoodsOrderStrategy {
throw new ServiceSystemException(ResultEnum.DATA_ERROR, "已被定向单绑定车辆:" + trucks); }
}
//根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
/* Message message = MessageBuilder.withBody(orderNo.getBytes()).build();
BigDecimal epochMilli = null;
if (sendLazyTime.isAfter(now)) {
epochMilli = new BigDecimal(sendLazyTime.minusMinutes(now.getMinute()).getMinute() * 60 * 1000);
log.info("执行订单状态更改,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
}
if (epochMilli == null) {
log.info("执行订单状态更改,epochMilli时间为0,时间为:{}", epochMilli);
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_ON_DEAD_ROUTE_KEY, message
);
} else {
log.info("执行订单状态更改,epochMilli时间不为0,时间为:{}", epochMilli);
rabbitTemplate.send(RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, MessageBuilder.withBody(orderNo.getBytes()).build());
message.getMessageProperties().setHeader("x-delay", epochMilli);
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_EXCHANGE, RabbitKeyConstants.ORDER_ON_ROUTE_KEY, message
);
}*/
goodsOrderProcess(orderGoodsParams, orderInfo,orderCanExtractWeight, now);
}
}
......@@ -3,9 +3,6 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.feign.OrderOwnTruckVo;
import com.clx.performance.component.*;
......@@ -17,8 +14,11 @@ import com.clx.performance.enums.PendingOrderWayStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
......@@ -71,7 +71,8 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo,
OrderExtractWeightVO orderCanExtractWeight, LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if (!OrderEnum.Status.ON_ORDER.getCode().equals(orderInfoFeign.getOrderStatus())&&
......@@ -88,8 +89,7 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (residueWeight.compareTo(childSum) < 0) {
if (orderCanExtractWeight.getOwnCanExtractWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
if (childParamsList.size() > 1) {
......@@ -106,7 +106,6 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
......@@ -213,11 +212,6 @@ public class OwnGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
param.setResidueWeight(residueWeight.subtract(childSum));
orderFeign.updateOrderInfoResidueWeight(param);
sendMq(mqMap, now);
return sendLazyTime;
}
......
......@@ -3,9 +3,6 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.*;
import com.clx.performance.constant.RabbitKeyConstants;
......@@ -13,8 +10,11 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
......@@ -65,7 +65,8 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo,
OrderExtractWeightVO orderCanExtractWeight,LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if (!OrderEnum.Status.ON_ORDER.getCode().equals(orderInfoFeign.getOrderStatus())&&
......@@ -83,12 +84,10 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
BigDecimal.ZERO, BigDecimal::add);
BigDecimal ownSum = childParamsList.stream().filter(i -> !"1".equals(i.getVehicleUsage())).map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
BigDecimal platformCarryWeight = new BigDecimal(orderInfo.getPlatformResidueCarryWeight());
if (platformCarryWeight.compareTo(platSum) < 0) {
if (orderCanExtractWeight.getPlatCanExtractWeight().compareTo(platSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前平台承运货单总吨数已超平台承运订单总吨数");
}
BigDecimal ownCarryWeight = new BigDecimal(orderInfo.getOwnResidueCarryWeight());
if (ownCarryWeight.compareTo(ownSum) < 0) {
if (orderCanExtractWeight.getOwnCanExtractWeight().compareTo(ownSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前自有承运货单总吨数已超自有承运订单总吨数");
}
Map<String, LocalDateTime> mqMap = new HashMap<>();
......@@ -110,7 +109,6 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
......@@ -205,39 +203,6 @@ public class PartGoodsOrderStrategy extends GoodsOrderStrategy implements Initia
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (platSum.compareTo(BigDecimal.ZERO) != 0 && ownSum.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal residuePlatSum = new BigDecimal(orderInfo.getPlatformResidueCarryWeight());
BigDecimal residueOwnSum = new BigDecimal(orderInfo.getOwnResidueCarryWeight());
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("4");
param.setResidueWeight(residueWeight.subtract(platSum).subtract(ownSum));
param.setOwnWeight(residueOwnSum.subtract(ownSum));
param.setPlatWeight(residuePlatSum.subtract(platSum));
orderFeign.updateOrderInfoResidueWeight(param);
} else if (platSum.compareTo(BigDecimal.ZERO) != 0 && ownSum.compareTo(BigDecimal.ZERO) == 0) {
BigDecimal residuePlatSum = new BigDecimal(orderInfo.getPlatformResidueCarryWeight());
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("2");
param.setResidueWeight(residueWeight.subtract(platSum));
param.setPlatWeight(residuePlatSum.subtract(platSum));
orderFeign.updateOrderInfoResidueWeight(param);
} else if (platSum.compareTo(BigDecimal.ZERO) == 0 && ownSum.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal residueOwnSum = new BigDecimal(orderInfo.getOwnResidueCarryWeight());
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("3");
param.setResidueWeight(residueWeight.subtract(ownSum));
param.setOwnWeight(residueOwnSum.subtract(ownSum));
orderFeign.updateOrderInfoResidueWeight(param);
}
sendMq(mqMap, now);
return sendLazyTime;
}
......
......@@ -3,9 +3,6 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.*;
import com.clx.performance.constant.RabbitKeyConstants;
......@@ -13,8 +10,11 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsChildParams;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.service.ordergoods.OrderGoodsPostService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
......@@ -67,7 +67,8 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo,
OrderExtractWeightVO orderCanExtractWeight, LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if (!OrderEnum.Status.ON_ORDER.getCode().equals(orderInfoFeign.getOrderStatus())&&
......@@ -84,8 +85,7 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (residueWeight.compareTo(childSum) < 0) {
if (orderCanExtractWeight.getPlatCanExtractWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(childParamsList.size());
......@@ -107,7 +107,6 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
orderGoods.setTruckDemand(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode());
......@@ -198,12 +197,6 @@ public class PlatformGoodsOrderStrategy extends GoodsOrderStrategy implements In
// 货单新增后置逻辑
orderGoodsPostService.orderGoodsAdd(orderGoodsList);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
param.setResidueWeight(residueWeight.subtract(childSum));
orderFeign.updateOrderInfoResidueWeight(param);
sendMq(mqMap, now);
return sendLazyTime;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论