|
|
|
@ -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"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|