|
|
|
|
@ -199,13 +199,12 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
|
|
|
|
|
// Web端覆盖模式:如果已有打印记录,先删除再新增
|
|
|
|
|
List<WmsAllocateTaskVo> existingTasks = queryTasksByDetailId(aoDId);
|
|
|
|
|
if (!existingTasks.isEmpty()) {
|
|
|
|
|
// 检查是否有已开始执行的任务
|
|
|
|
|
for (WmsAllocateTaskVo task : existingTasks) {
|
|
|
|
|
if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {
|
|
|
|
|
throw new ServiceException("存在已开始执行的任务,不允许覆盖");
|
|
|
|
|
}
|
|
|
|
|
// 新业务规则:只有出库数量等于调拨数量时才允许重新打印
|
|
|
|
|
BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum());
|
|
|
|
|
if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) {
|
|
|
|
|
throw new ServiceException("只有出库数量等于调拨数量时才能重新打印,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty());
|
|
|
|
|
}
|
|
|
|
|
// 删除现有任务
|
|
|
|
|
// 删除现有任务(移除inboundStatus验证)
|
|
|
|
|
deleteTasksByDetailId(aoDId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -381,22 +380,21 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
|
|
|
|
|
* @return 是否修改成功
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, BigDecimal materialQty) {
|
|
|
|
|
WmsAllocateTask task = baseMapper.selectById(allocateTaskId);
|
|
|
|
|
if (task == null) {
|
|
|
|
|
throw new ServiceException("调拨任务不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查任务状态
|
|
|
|
|
if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {//入库状态(0-待入库,1-已入库,2-入库中)
|
|
|
|
|
throw new ServiceException("该任务已开始执行,不允许修改");
|
|
|
|
|
}
|
|
|
|
|
// 移除inboundStatus验证,允许直接修改条码和分包数量
|
|
|
|
|
// 只允许修改条码和分包数量,其他字段保持不变
|
|
|
|
|
WmsAllocateTask updateTask = new WmsAllocateTask();
|
|
|
|
|
updateTask.setAllocateTaskId(allocateTaskId);
|
|
|
|
|
updateTask.setBatchCode(batchCode);
|
|
|
|
|
updateTask.setMaterialQty(materialQty);
|
|
|
|
|
|
|
|
|
|
// 更新任务信息
|
|
|
|
|
task.setBatchCode(batchCode);
|
|
|
|
|
task.setMaterialQty(materialQty);
|
|
|
|
|
|
|
|
|
|
return baseMapper.updateById(task) > 0;
|
|
|
|
|
return baseMapper.updateById(updateTask) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -408,24 +406,28 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean deleteTasksByDetailId(Long aoDId) {
|
|
|
|
|
// 获取调拨明细信息,验证删除条件
|
|
|
|
|
org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo detailVo = allocateOrderDetailService.queryById(aoDId);
|
|
|
|
|
if (detailVo == null) {
|
|
|
|
|
throw new ServiceException("调拨明细不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证删除条件:只有出库数量等于调拨数量时才能删除
|
|
|
|
|
BigDecimal outSum = BigDecimal.valueOf(detailVo.getOutSum());
|
|
|
|
|
if (outSum.compareTo(detailVo.getAllocateOrderQty()) != 0) {
|
|
|
|
|
throw new ServiceException("只有出库数量等于调拨数量时才能删除任务,当前出库数量:" + outSum + ",调拨数量:" + detailVo.getAllocateOrderQty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MPJLambdaWrapper<WmsAllocateTask> wrapper = JoinWrappers.lambda(WmsAllocateTask.class)
|
|
|
|
|
.eq(WmsAllocateTask::getAoDId, aoDId);
|
|
|
|
|
|
|
|
|
|
List<WmsAllocateTask> tasks = baseMapper.selectList(wrapper);
|
|
|
|
|
|
|
|
|
|
// 检查是否有已开始执行的任务
|
|
|
|
|
for (WmsAllocateTask task : tasks) {
|
|
|
|
|
if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {//入库状态(0-待入库,1-已入库,2-入库中)
|
|
|
|
|
throw new ServiceException("存在已开始执行的任务,不允许删除");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!tasks.isEmpty()) {
|
|
|
|
|
List<Long> taskIds = tasks.stream().map(WmsAllocateTask::getAllocateTaskId).toList();
|
|
|
|
|
int deleteCount = baseMapper.deleteByIds(taskIds);
|
|
|
|
|
|
|
|
|
|
// 更新调拨明细的已分包数量
|
|
|
|
|
org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo detailVo = allocateOrderDetailService.queryById(aoDId);
|
|
|
|
|
if (detailVo != null) {
|
|
|
|
|
org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo detailBo = new org.dromara.wms.domain.bo.WmsAllocateOrderDetailBo();
|
|
|
|
|
detailBo.setAoDId(detailVo.getAoDId());
|
|
|
|
|
|