refactor(wms): 优化调拨任务创建逻辑

- 支持 Web 端覆盖模式:允许删除现有任务并重新创建
- 将每包数量的数据类型从 Long 改为 BigDecimal,提高精度
- 优化任务创建流程,适应新的业务需求
master
zangch@mesnac.com 3 months ago
parent cf2ed1ceaa
commit fb61d20f3a

@ -1,16 +1,14 @@
package org.dromara.wms.domain.bo;
import org.dromara.wms.domain.WmsAllocateTask;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.wms.domain.WmsAllocateTask;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* wms_allocate_task
@ -41,7 +39,7 @@ public class WmsAllocateTaskBo extends BaseEntity {
/**
*
*/
private Long materialQty;
private BigDecimal materialQty;
/**
*

@ -1,17 +1,14 @@
package org.dromara.wms.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.wms.domain.WmsAllocateTask;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.wms.domain.WmsAllocateTask;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@ -52,7 +49,7 @@ public class WmsAllocateTaskVo implements Serializable {
*
*/
@ExcelProperty(value = "每包数量")
private Long materialQty;
private BigDecimal materialQty;
/**
*

@ -1,11 +1,11 @@
package org.dromara.wms.service;
import org.dromara.wms.domain.WmsAllocateTask;
import org.dromara.wms.domain.vo.WmsAllocateTaskVo;
import org.dromara.wms.domain.bo.WmsAllocateTaskBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.wms.domain.bo.WmsAllocateTaskBo;
import org.dromara.wms.domain.vo.WmsAllocateTaskVo;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
@ -69,7 +69,7 @@ public interface IWmsAllocateTaskService {
/**
*
*
*
* @param allocateCode
* @param aoDId ID
* @param packageQtyList
@ -77,12 +77,12 @@ public interface IWmsAllocateTaskService {
* @param printCopies
* @return
*/
Boolean allocatePackagePrint(String allocateCode, Long aoDId, List<Integer> packageQtyList,
Boolean allocatePackagePrint(String allocateCode, Long aoDId, List<Integer> packageQtyList,
Integer splitPackageCount, Integer printCopies);
/**
*
*
*
* @param allocateTaskId ID
* @return
*/
@ -90,7 +90,7 @@ public interface IWmsAllocateTaskService {
/**
*
*
*
* @param aoDId ID
* @param packageQtyList
* @param splitPackageCount
@ -100,17 +100,17 @@ public interface IWmsAllocateTaskService {
/**
*
*
*
* @param allocateTaskId ID
* @param batchCode
* @param materialQty
* @return
*/
Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, Long materialQty);
Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, BigDecimal materialQty);
/**
*
*
*
* @param aoDId ID
* @return
*/
@ -118,7 +118,7 @@ public interface IWmsAllocateTaskService {
/**
*
*
*
* @param aoDId ID
* @return
*/
@ -126,7 +126,7 @@ public interface IWmsAllocateTaskService {
/**
*
*
*
* @param aoDId ID
* @return
*/

@ -196,10 +196,17 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
materialInfoVo = baseMaterialInfoService.queryById(detailVo.getMaterialId());
}
// 检查是否已经打印过
// Web端覆盖模式如果已有打印记录先删除再新增
List<WmsAllocateTaskVo> existingTasks = queryTasksByDetailId(aoDId);
if (!existingTasks.isEmpty()) {
throw new ServiceException("该调拨明细已经打印过,不允许重复打印");
// 检查是否有已开始执行的任务
for (WmsAllocateTaskVo task : existingTasks) {
if ("1".equals(task.getInboundStatus()) || "2".equals(task.getInboundStatus())) {
throw new ServiceException("存在已开始执行的任务,不允许覆盖");
}
}
// 删除现有任务
deleteTasksByDetailId(aoDId);
}
int splitInt = splitPackageCount != null ? splitPackageCount : 1;
@ -233,7 +240,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
BigDecimal currentPackageQty = BigDecimal.valueOf(packageQtyList.get(i - 1)); // 当前包的物料数量
WmsAllocateTask task = createAllocateTask(detailVo, materialInfoVo, allocateCode, batchCode, currentPackageQty.longValue(), 1L, aoDId);
WmsAllocateTask task = createAllocateTask(detailVo, materialInfoVo, allocateCode, batchCode, currentPackageQty, 1L, aoDId);
baseMapper.insert(task);
totalPackaged = totalPackaged.add(currentPackageQty);
}
@ -246,7 +253,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
String batchCode = generateBatchCode(allocateCode, materialInfoVo != null ? materialInfoVo.getMaterialCode() : "", baseOrder);
WmsAllocateTask task = createAllocateTask(detailVo, materialInfoVo, allocateCode, batchCode,
detailVo.getAllocateOrderQty().longValue(), (long) copiesInt, aoDId);
detailVo.getAllocateOrderQty(), (long) copiesInt, aoDId);
baseMapper.insert(task);
totalPackaged = detailVo.getAllocateOrderQty(); // 全部调拨数量都被打印
}
@ -265,7 +272,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
*/
private WmsAllocateTask createAllocateTask(org.dromara.wms.domain.vo.WmsAllocateOrderDetailVo detailVo,
org.dromara.wms.domain.vo.BaseMaterialInfoVo materialInfoVo,
String allocateCode, String batchCode, Long materialQty,
String allocateCode, String batchCode, BigDecimal materialQty,
Long apportionQty, Long aoDId) {
WmsAllocateTask task = new WmsAllocateTask();
task.setAllocateCode(allocateCode);
@ -374,7 +381,7 @@ public class WmsAllocateTaskServiceImpl implements IWmsAllocateTaskService {
* @return
*/
@Override
public Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, Long materialQty) {
public Boolean updateTaskBarcode(Long allocateTaskId, String batchCode, BigDecimal materialQty) {
WmsAllocateTask task = baseMapper.selectById(allocateTaskId);
if (task == null) {
throw new ServiceException("调拨任务不存在");

Loading…
Cancel
Save