Browse Source

修改拆单问题

dev
陈龙 6 days ago
parent
commit
a7d5605429
  1. 183
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSplitOrderTaskServiceImpl.java

183
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSplitOrderTaskServiceImpl.java

@ -24,11 +24,11 @@ import com.logpm.distribution.service.IDistributionStockArticleService;
import com.logpm.distribution.vo.SplitPackageOrderVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.order.OrderReservationStatusConstant;
import org.springblade.common.constant.order.OrderSplitAllTaskStateConstant;
import org.springblade.common.constant.order.OrderSplitStateConstant;
import org.springblade.common.constant.orderpackage.OrderPackageReservationStatusConstant;
import org.springblade.common.constant.orderpackage.OrderPackageSplitStateConstant;
import org.springblade.common.constant.orderpackage.OrderPackageStatusConstant;
import org.springblade.common.constant.order.OrderStatusConstant;
import org.springblade.common.constant.orderpackage.*;
import org.springblade.common.exception.CustomerException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
@ -43,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@ -106,6 +107,27 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
if (distributionStockArticle == null) {
return R.fail("原订单信息错误");
}
if (!Objects.equals(distributionStockArticle.getOrderStatus(), OrderStatusConstant.ruku.getValue())
|| Objects.equals(distributionStockArticle.getReservationStatus(), OrderReservationStatusConstant.yiyueyue.getValue())) {
return R.fail("订单"+ distributionStockArticle.getOrderCode() +"不允许拆单");
}
long packageAllowCount = distributionParcelListService.count(
Wrappers.<DistributionParcelListEntity>lambdaQuery()
.in(DistributionParcelListEntity::getStockArticleId, stockArticleId)
.ne(DistributionParcelListEntity::getOrderPackageStatus, OrderPackageStatusConstant.yiqianshou.getValue())
.eq(DistributionParcelListEntity::getOrderPackageReservationStatus, OrderPackageReservationStatusConstant.daiyuyue.getValue())
.eq(DistributionParcelListEntity::getOrderPackageLoadingStatus, OrderPackageLoadingStatusConstant.weizhuancghe.getValue())
.eq(DistributionParcelListEntity::getOrderPackageFreezeStatus, OrderPackageFreezeStatusConstant.weidongjie.getValue())
.eq(DistributionParcelListEntity::getIsTransfer, 0)
);
long packageAllCount = distributionParcelListService.count(
Wrappers.<DistributionParcelListEntity>lambdaQuery()
.in(DistributionParcelListEntity::getStockArticleId, stockArticleId)
);
if (packageAllowCount == 0 || packageAllCount == 1) {
return R.fail("订单"+ distributionStockArticle.getOrderCode() +"包件数量不足,不允许拆单");
}
taskLock(stockArticleId, () -> {
String allTaskNo = getAllTaskNo();
@ -210,6 +232,28 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
return R.fail("拆单任务已完成,无法添加");
}
// 预约、签收状态的不允许拆单
long count = distributionParcelListService.count(
Wrappers.<DistributionParcelListEntity>lambdaQuery()
.in(DistributionParcelListEntity::getOrderPackageCode, packageCodes)
.ne(DistributionParcelListEntity::getOrderPackageStatus, OrderPackageStatusConstant.yiqianshou.getValue())
.eq(DistributionParcelListEntity::getOrderPackageReservationStatus, OrderPackageReservationStatusConstant.daiyuyue.getValue())
.eq(DistributionParcelListEntity::getOrderPackageLoadingStatus, OrderPackageLoadingStatusConstant.weizhuancghe.getValue())
.eq(DistributionParcelListEntity::getOrderPackageFreezeStatus, OrderPackageFreezeStatusConstant.weidongjie.getValue())
.eq(DistributionParcelListEntity::getIsTransfer, 0)
);
if (count != packageCodes.size()) {
return R.fail("提交包件包含预约、签收状态的包件");
}
long currentOrderCount = distributionParcelListService.count(
Wrappers.<DistributionParcelListEntity>lambdaQuery()
.in(DistributionParcelListEntity::getOrderPackageCode, packageCodes)
.eq(DistributionParcelListEntity::getStockArticleId, task.getStockArticleId())
);
if (currentOrderCount < packageCodes.size()){
return R.fail("提交包件包含不属于当前拆单订单的包件");
}
try {
List<DistributionSplitOrderDetailEntity> existsList = distributionSplitOrderDetailService.list(Wrappers.<DistributionSplitOrderDetailEntity>lambdaQuery()
.in(DistributionSplitOrderDetailEntity::getOrderPackageCode, packageCodes)
@ -617,48 +661,12 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
try {
List<DistributionSplitOrderDetailEntity> packageList = distributionSplitOrderDetailService.list(Wrappers.<DistributionSplitOrderDetailEntity>lambdaQuery()
.eq(DistributionSplitOrderDetailEntity::getSplitOrderTaskId, taskId)
.eq(DistributionSplitOrderDetailEntity::getState, OrderPackageSplitStateConstant.finish.getValue())
);
DistributionStockArticleEntity originalOrder = distributionStockArticleService.getById(task.getStockArticleId());
originalOrder.setTotalNumber(originalOrder.getTotalNumber() - packageList.size());
originalOrder.setHandQuantity(Math.max(originalOrder.getHandQuantity() - packageList.size(), 0));
originalOrder.setIncomingNum(Math.max(originalOrder.getIncomingNum() - packageList.size(), 0));
distributionStockArticleService.updateById(originalOrder);
DistributionStockArticleEntity newOrder = distributionStockArticleService.getById(task.getNewStockArticleId());
if (newOrder == null) {
newOrder = SerializationUtils.clone(originalOrder);
newOrder.setId(null);
newOrder.setOrderCode(task.getNewOrderCode());
}
newOrder.setTotalNumber(packageList.size());
newOrder.setHandQuantity(packageList.size());
newOrder.setIncomingNum(packageList.size());
if (newOrder.getId() != null) {
distributionStockArticleService.updateById(newOrder);
}else{
distributionStockArticleService.save(newOrder);
}
task.setNewStockArticleId(newOrder.getId());
task.setState(OrderSplitStateConstant.finish.getValue());
task.setFinishTime(DateUtil.now());
task.setFinishUsername(AuthUtil.getUser().getUserName());
task.setFinishUser(AuthUtil.getUser().getUserId());
updateById(task);
distributionParcelListService.update(Wrappers.<DistributionParcelListEntity>lambdaUpdate()
.in(DistributionParcelListEntity::getOrderPackageCode, packageList.stream().map(DistributionSplitOrderDetailEntity::getOrderPackageCode).collect(Collectors.toList()))
.eq(DistributionParcelListEntity::getStockArticleId, task.getStockArticleId())
.set(DistributionParcelListEntity::getStockArticleId, task.getNewStockArticleId())
.set(DistributionParcelListEntity::getOrderCode, task.getNewOrderCode())
);
distributionSplitOrderLogService.record(task, "完成拆单任务", AuthUtil.getUser().getUserName());
} catch (Exception e) {
if (e instanceof CustomerException) {
throw new CustomerException(e.getMessage());
@ -670,50 +678,67 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
return R.success("success");
}
private void packageTransfer(DistributionSplitOrderTaskEntity task) {
List<DistributionSplitOrderDetailEntity> packageList = distributionSplitOrderDetailService.list(Wrappers.<DistributionSplitOrderDetailEntity>lambdaQuery()
.eq(DistributionSplitOrderDetailEntity::getSplitOrderTaskId, task.getId())
.eq(DistributionSplitOrderDetailEntity::getState, OrderPackageSplitStateConstant.finish.getValue())
);
DistributionStockArticleEntity originalOrder = distributionStockArticleService.getById(task.getStockArticleId());
originalOrder.setTotalNumber(originalOrder.getTotalNumber() - packageList.size());
originalOrder.setHandQuantity(Math.max(originalOrder.getHandQuantity() - packageList.size(), 0));
originalOrder.setIncomingNum(Math.max(originalOrder.getIncomingNum() - packageList.size(), 0));
distributionStockArticleService.updateById(originalOrder);
DistributionStockArticleEntity newOrder = distributionStockArticleService.getById(task.getNewStockArticleId());
if (newOrder == null) {
newOrder = SerializationUtils.clone(originalOrder);
newOrder.setId(null);
newOrder.setOrderCode(task.getNewOrderCode());
}
newOrder.setTotalNumber(packageList.size());
newOrder.setHandQuantity(packageList.size());
newOrder.setIncomingNum(packageList.size());
if (newOrder.getId() != null) {
distributionStockArticleService.updateById(newOrder);
}else{
distributionStockArticleService.save(newOrder);
}
task.setNewStockArticleId(newOrder.getId());
updateById(task);
distributionParcelListService.update(Wrappers.<DistributionParcelListEntity>lambdaUpdate()
.in(DistributionParcelListEntity::getOrderPackageCode, packageList.stream().map(DistributionSplitOrderDetailEntity::getOrderPackageCode).collect(Collectors.toList()))
.eq(DistributionParcelListEntity::getStockArticleId, task.getStockArticleId())
.set(DistributionParcelListEntity::getStockArticleId, task.getNewStockArticleId())
.set(DistributionParcelListEntity::getOrderCode, task.getNewOrderCode())
);
distributionSplitOrderLogService.record(task, "完成拆单任务", AuthUtil.getUser().getUserName());
}
/**
* 取消完成
* @param taskId
* @return
*/
@Override
public R<String> cancelTask(Long taskId) {
DistributionSplitOrderTaskEntity task = getById(taskId);
if (!task.getState().equals(OrderSplitStateConstant.InProgress.getValue())) {
return R.fail("任务未已完成或已取消,无法操作");
return R.fail("任务未已完成,无法操作");
}
DistributionSplitOrderAllTaskEntity allTask = distributionSplitOrderAllTaskService.getById(task.getSplitOrderAllTaskId());
if (!allTask.getState().equals(OrderSplitAllTaskStateConstant.InProgress.getValue())) {
return R.fail("拆单总任务已完成或已取消,无法操作");
return R.fail("拆单总任务已完成,无法操作");
}
try {
List<DistributionSplitOrderDetailEntity> packageList = distributionSplitOrderDetailService.list(Wrappers.<DistributionSplitOrderDetailEntity>lambdaQuery()
.eq(DistributionSplitOrderDetailEntity::getSplitOrderTaskId, taskId)
.eq(DistributionSplitOrderDetailEntity::getState, OrderPackageSplitStateConstant.finish.getValue())
);
DistributionStockArticleEntity originalOrder = distributionStockArticleService.getById(task.getStockArticleId());
originalOrder.setTotalNumber(originalOrder.getTotalNumber() + packageList.size());
originalOrder.setHandQuantity(originalOrder.getHandQuantity() + packageList.size());
distributionStockArticleService.updateById(originalOrder);
DistributionStockArticleEntity newOrder = distributionStockArticleService.getById(task.getNewStockArticleId());
if (newOrder != null) {
newOrder.setTotalNumber(0);
newOrder.setHandQuantity(0);
distributionStockArticleService.updateById(newOrder);
}
task.setNumber(0);
task.setState(OrderSplitStateConstant.cancel.getValue());
updateById(task);
if (!packageList.isEmpty()) {
distributionParcelListService.update(Wrappers.<DistributionParcelListEntity>lambdaUpdate()
.in(DistributionParcelListEntity::getOrderPackageCode, packageList.stream().map(DistributionSplitOrderDetailEntity::getOrderPackageCode).collect(Collectors.toList()))
.eq(DistributionParcelListEntity::getStockArticleId, task.getNewStockArticleId())
.set(DistributionParcelListEntity::getStockArticleId, task.getStockArticleId())
.set(DistributionParcelListEntity::getOrderCode, task.getOrderCode())
);
}
distributionSplitOrderLogService.record(task, "撤消拆单任务", AuthUtil.getUser().getUserName());
} catch (Exception e) {
@ -731,16 +756,24 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
public R<String> cancelAllTask(Long allTaskId) {
DistributionSplitOrderAllTaskEntity allTask = distributionSplitOrderAllTaskService.getById(allTaskId);
if (!allTask.getState().equals(OrderSplitAllTaskStateConstant.finish.getValue())) {
return R.fail("拆单总任务未完成或已取消,无法操作");
return R.fail("拆单总任务已完成,无法操作");
}
allTask.setState(OrderSplitAllTaskStateConstant.InProgress.getValue());
if (!list(Wrappers.<DistributionSplitOrderTaskEntity>lambdaQuery()
.eq(DistributionSplitOrderTaskEntity::getSplitOrderAllTaskId, allTaskId)
.eq(DistributionSplitOrderTaskEntity::getState, OrderSplitStateConstant.finish.getValue())
).isEmpty()) {
return R.fail("拆单总任务中存在已完成拆单任务,无法操作");
}
allTask.setState(OrderSplitAllTaskStateConstant.cancel.getValue());
distributionSplitOrderAllTaskService.updateById(allTask);
return R.success("success");
}
@Override
@Transactional
public R<String> finishAllTask(Long allTaskId) {
DistributionSplitOrderAllTaskEntity allTask = distributionSplitOrderAllTaskService.getById(allTaskId);
if (!allTask.getState().equals(OrderSplitAllTaskStateConstant.InProgress.getValue())) {
@ -756,8 +789,16 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
}
allTask.setState(OrderSplitAllTaskStateConstant.finish.getValue());
allTask.setFinishTime(DateUtil.now());
allTask.setFinishUsername(AuthUtil.getUser().getUserName());
allTask.setFinishUser(AuthUtil.getUser().getUserId());
distributionSplitOrderAllTaskService.updateById(allTask);
list(Wrappers.<DistributionSplitOrderTaskEntity>lambdaQuery()
.eq(DistributionSplitOrderTaskEntity::getSplitOrderAllTaskId, allTaskId)
.eq(DistributionSplitOrderTaskEntity::getState, OrderSplitStateConstant.finish.getValue())
).forEach(this::packageTransfer);
return R.success("success");
}

Loading…
Cancel
Save