diff --git a/pda/manifest.json b/pda/manifest.json index 03ee107..a00b8ea 100644 --- a/pda/manifest.json +++ b/pda/manifest.json @@ -1,6 +1,6 @@ { - "name" : "若依移动端", - "appid" : "__UNI__25A9D80", + "name" : "Fortucky", + "appid" : "__UNI__05FE81B", "description" : "", "versionName" : "1.2.0", "versionCode" : "100", @@ -14,7 +14,9 @@ "autoclose" : true, "delay" : 0 }, - "modules" : {}, + "modules" : { + "Barcode" : {} + }, "distribute" : { "android" : { "permissions" : [ @@ -35,7 +37,9 @@ "" ] }, - "ios" : {}, + "ios" : { + "dSYMs" : false + }, "sdkConfigs" : {} } }, diff --git a/pda/pages.json b/pda/pages.json index ebf9e96..3625229 100644 --- a/pda/pages.json +++ b/pda/pages.json @@ -121,6 +121,26 @@ "navigationBarTitleText": "盘点管理" } }, { + "path": "pages/warehouse/inventory/inventoryConfirm", + "style": { + "navigationBarTitleText": "盘点任务列表" + } + },{ + "path": "pages/warehouse/inventory/inventoryConfirm", + "style": { + "navigationBarTitleText": "扫码盘点确认" + } + }, { + "path": "pages/warehouse/inventory/inventoryConfirm", + "style": { + "navigationBarTitleText": "盘点差异记录" + } + },{ + "path": "pages/warehouse/inventory/inventoryConfirm", + "style": { + "navigationBarTitleText": "盘点报告" + } + },{ "path": "pages/warehouse/stock/index", "style": { "navigationBarTitleText": "库存统计" @@ -158,5 +178,15 @@ "navigationBarTextStyle": "black", "navigationBarTitleText": "RuoYi", "navigationBarBackgroundColor": "#FFFFFF" - } + }, + "condition" : { //模式配置,仅开发期间生效 + "current": 0, //当前激活的模式(list 的索引项) + "list": [ + { + "name": "", //模式名称 + "path": "", //启动页面,必选 + "query": "" //启动参数,在页面的onLoad函数里面得到 + } + ] + } } diff --git a/pda/pages/warehouse/inventory/index.vue b/pda/pages/warehouse/inventory/index.vue index 1bf3427..4566a13 100644 --- a/pda/pages/warehouse/inventory/index.vue +++ b/pda/pages/warehouse/inventory/index.vue @@ -14,7 +14,7 @@ - + 扫码盘点 @@ -39,17 +39,26 @@ - + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java index ba2b551..5fa7b92 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java @@ -21,6 +21,14 @@ public interface BasCargoSpaceMapper */ public BasCargoSpace selectBasCargoSpaceByCargoSpaceId(String cargoSpaceId); + /** + * 查询货位信息 + * + * @param trayCode 货位信息主键 + * @return 货位信息 + */ + public BasCargoSpace selectBasCargoSpaceByTrayCode(String trayCode); + /** * 查询货位信息列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java index 271c2ca..854e975 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java @@ -19,6 +19,14 @@ public interface IBasCargoSpaceService */ public BasCargoSpace selectBasCargoSpaceByCargoSpaceId(String cargoSpaceId); + /** + * 查询货位信息 + * + * @param trayCode 托盘号 + * @return 货位信息 + */ + public BasCargoSpace selectBasCargoSpaceByTrayCode(String trayCode); + /** * 查询货位信息列表 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java index c8a26b2..7c7dced 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java @@ -34,6 +34,18 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService return basCargoSpaceMapper.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); } + /** + * 查询货位信息 + * + * @param trayCode 货位信息主键 + * @return 货位信息 + */ + @Override + public BasCargoSpace selectBasCargoSpaceByTrayCode(String trayCode) + { + return basCargoSpaceMapper.selectBasCargoSpaceByTrayCode(trayCode); + } + /** * 查询货位信息列表 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/BasStockCode.java b/ruoyi-admin/src/main/java/com/ruoyi/common/BasStockCode.java index a0c3876..f138b0e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/BasStockCode.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/BasStockCode.java @@ -12,7 +12,11 @@ public class BasStockCode { public static final String STOCK_STATUS_EXCEPTION = "3"; + /** 产品状态 - 正常 */ + public static final String PRODUCT_STATUS_NORMAL = "1"; + /** 产品状态 - 异常待检产品 */ + public static final String PRODUCT_STATUS_EXCEPTION = "2"; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskIdType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskIdType.java index da82128..f482be4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskIdType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskIdType.java @@ -37,6 +37,11 @@ public class TaskIdType { */ public static final String TASK_STOCKOUT = "21"; + /** + * 出库任务 + */ + public static final String TASK_STOCKOUT_INVENTORY = "22"; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java index b18b2ca..2d73b8a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java @@ -243,21 +243,17 @@ public class MydoJobServiceImpl implements IMydoJobService public AjaxResult cancelJob(String jobId) { //任务主表 - List jobs = mydoJobMapper.selectMydoJobList( - new MydoJob().builder().jobId(jobId).build() - ); + MydoJob mydoJob = selectMydoJobByJobId(jobId); - if (jobs.isEmpty()){ + if (ObjUtil.isEmpty(mydoJob)){ log.warn("【操作异常】找不到该作业信息,作业号:{}", jobId); return AjaxResult.error("找不到该作业信息"); } - for (MydoJob mydoJob : jobs){ - //任务状态标记为【作废】 - mydoJob.setStatus(TaskStatusEnum.CANCEL.getCode()); - updateMydoJob(mydoJob); - log.warn("【手动作废】执行成功,当前作业已标记为<手动作废>,作业号:{}", jobId); - } + //任务状态标记为【作废】 + mydoJob.setStatus(TaskStatusEnum.CANCEL.getCode()); + updateMydoJob(mydoJob); + log.warn("【手动作废】执行成功,当前作业已标记为<手动作废>,作业号:{}", jobId); return AjaxResult.success("操作成功,当前作业已标记为<手动作废>,作业号:" + jobId); } @@ -311,20 +307,16 @@ public class MydoJobServiceImpl implements IMydoJobService public AjaxResult manualCompleteJob(String jobId) { //任务主表 - List jobs = mydoJobMapper.selectMydoJobList( - new MydoJob().builder().jobId(jobId).build() - ); + MydoJob mydoJob = selectMydoJobByJobId(jobId); - if (jobs.isEmpty()){ + if (ObjUtil.isEmpty(mydoJob)){ log.warn("【操作异常】找不到该作业信息,作业号:{}", jobId); return AjaxResult.error("找不到该作业信息"); } - - for (MydoJob mydoJob : jobs){ - //任务状态标记为【手动完成】 - mydoJob.setStatus(TaskStatusEnum.MANUAL_FINISHED.getCode()); - updateMydoJob(mydoJob); - } + + //任务状态标记为【手动完成】 + mydoJob.setStatus(TaskStatusEnum.MANUAL_FINISHED.getCode()); + updateMydoJob(mydoJob); log.warn("【手动操作】执行成功,当前作业已标记为<手动完成>,作业号:{}", jobId); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/controller/PdStockpdController.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/controller/PdStockpdController.java index 68ba9d7..99d42ed 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/controller/PdStockpdController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/controller/PdStockpdController.java @@ -1,6 +1,8 @@ package com.ruoyi.pd.stockpd.controller; import java.util.List; + +import com.ruoyi.in.job.service.IMydoJobService; import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -151,7 +153,8 @@ public class PdStockpdController extends BaseController @PutMapping("/autoAssign/{stockpdId}") public AjaxResult autoAssign(@PathVariable("stockpdId") String stockpdId) { - return pdStockpdService.autoAssignPdStockpd(stockpdId); +// return pdStockpdService.autoAssignPdStockpd(stockpdId); + return pdStockpdService.autoAssignPdStock(stockpdId); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/domain/PdStockpd.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/domain/PdStockpd.java index c3b6385..88ac37e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/domain/PdStockpd.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/domain/PdStockpd.java @@ -1,6 +1,10 @@ package com.ruoyi.pd.stockpd.domain; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; @@ -15,6 +19,10 @@ import java.util.Date; * @author ruoyi * @date 2026-05-27 */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class PdStockpd extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/IPdStockpdService.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/IPdStockpdService.java index 558295b..af6b627 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/IPdStockpdService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/IPdStockpdService.java @@ -21,6 +21,7 @@ public interface IPdStockpdService */ public PdStockpd selectPdStockpdByStockpdId(String stockpdId); + /** * 查询盘点单据主信息列表 * @@ -29,6 +30,7 @@ public interface IPdStockpdService */ public List selectPdStockpdList(PdStockpd pdStockpd); + /** * 新增盘点单据主信息 * @@ -37,6 +39,7 @@ public interface IPdStockpdService */ public int insertPdStockpd(PdStockpd pdStockpd); + /** * 修改盘点单据主信息 * @@ -45,6 +48,7 @@ public interface IPdStockpdService */ public int updatePdStockpd(PdStockpd pdStockpd); + /** * 批量删除盘点单据主信息 * @@ -53,6 +57,7 @@ public interface IPdStockpdService */ public int deletePdStockpdByStockpdIds(String[] stockpdIds); + /** * 删除盘点单据主信息信息 * @@ -61,6 +66,7 @@ public interface IPdStockpdService */ public int deletePdStockpdByStockpdId(String stockpdId); + /** * 手动作废盘点单据 * @@ -69,6 +75,7 @@ public interface IPdStockpdService */ public AjaxResult cancelPdStockpd(String stockpdId); + /** * 审核盘点单据 * @@ -77,6 +84,7 @@ public interface IPdStockpdService */ public AjaxResult auditPdStockpd(String stockpdId); + /** * 完成盘点单据 * @@ -85,14 +93,25 @@ public interface IPdStockpdService */ public AjaxResult finishPdStockpd(String stockpdId); + /** - * 自动分配盘点单据 + * 自动分配盘点单据(存储过程) * * @param stockpdId 盘点订单ID * @return 结果 */ public AjaxResult autoAssignPdStockpd(String stockpdId); + + /** + * 自动分配盘点单据(非过程) + * + * @param stockpdId 盘点订单ID + * @return 结果 + */ + public AjaxResult autoAssignPdStock(String stockpdId); + + /** * 查询盘点单据完成列表 * @@ -101,6 +120,7 @@ public interface IPdStockpdService */ List selectPdStockpdFinishList(PdStockpd pdStockpd); + /** * 保存盘点单据(主单+明细) * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/impl/PdStockpdServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/impl/PdStockpdServiceImpl.java index 5381351..b95d2ea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/impl/PdStockpdServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpd/service/impl/PdStockpdServiceImpl.java @@ -1,14 +1,27 @@ package com.ruoyi.pd.stockpd.service.impl; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Date; + +import cn.hutool.core.util.ObjUtil; +import com.ruoyi.bas.cargospace.domain.BasCargoSpace; +import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; +import com.ruoyi.bas.id.taskno.service.IBasTaskNoService; +import com.ruoyi.bas.stock.domain.BasStock; +import com.ruoyi.bas.stock.service.IBasStockService; +import com.ruoyi.common.*; +import com.ruoyi.in.job.domain.MydoJob; +import com.ruoyi.in.job.service.IMydoJobService; +import com.ruoyi.in.jobdetail.service.IMydoJobDetailService; +import com.ruoyi.pd.stockpddetail.service.IPdStockpdDetailService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.bas.id.job.service.IBasJobIdService; -import com.ruoyi.common.PdStockpdStatusEnum; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.SecurityUtils; @@ -27,19 +40,31 @@ import com.ruoyi.pd.stockpddetail.domain.PdStockpdDetail; * @date 2026-05-27 */ @Service +@Slf4j public class PdStockpdServiceImpl implements IPdStockpdService { @Autowired private PdStockpdMapper pdStockpdMapper; - @Autowired private PdStockpdDetailMapper pdStockpdDetailMapper; - @Autowired private SysDeptMapper sysDeptMapper; - @Autowired - private IBasJobIdService IBasJobIdService; + private IBasJobIdService basJobIdService; + @Autowired + IBasTaskNoService basTaskNoService; + @Autowired + IPdStockpdDetailService pdStockpdDetailService; + @Autowired + IMydoJobService mydoJobService; + @Autowired + IMydoJobDetailService mydojobDetailService; + @Autowired + IBasCargoSpaceService bascargoSpaceService; + @Autowired + IBasStockService basStockService; + + /** * 查询盘点单据主信息 @@ -199,6 +224,90 @@ public class PdStockpdServiceImpl implements IPdStockpdService return AjaxResult.success(str); } + + /** + * 自动分配盘点单据 + */ + @Override + public AjaxResult autoAssignPdStock(String stockpdId) + { + PdStockpd pdStockpd = selectPdStockpdByStockpdId(stockpdId); + if (ObjUtil.isNull(pdStockpd)) { + log.error("【盘点出库分配】操作失败,找不到该盘点单据,请检查单据状态,单据号:{}", stockpdId); + return AjaxResult.error("操作失败,找不到该盘点单据,请检查单据状态"); + } + + if (!pdStockpd.getStatus().equals(StockStatusEnum.RUNNING.getCode())) { + log.error("【盘点出库分配】操作失败,只有状态为<执行中>的单据才能执行分配,单据号:{}", stockpdId); + return AjaxResult.error("操作失败,只有状态为<执行中>的单据才能执行分配,单据号:{}" + stockpdId); + } + + //获取盘点出库单明细 + List details = pdStockpdDetailService.selectPdStockpdDetailList( + new PdStockpdDetail().builder().stockpdId(stockpdId).build() + ); + if (details.isEmpty()){ + log.error("【盘点出库分配】操作失败,找不到该盘点单对应的单据明细,单据号:{}", stockpdId); + return AjaxResult.error("操作失败,找不到该盘点单对应的单据明细"); + } + + for (PdStockpdDetail detail : details) { + //更新明细分配数量 + detail.setAllotNum(BigDecimal.ONE); + pdStockpdDetailService.updatePdStockpdDetail(detail); + + //生成托盘盘点出库作业 + MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(detail.getTrayCode()); + if (ObjUtil.isNull(mydoJob)){ + + String jobId = basJobIdService.getId(JobIdType.MYDOJOB_INVENTORY_STOCKOUT); + String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_INVENTORY); + int taskType = TaskType.TASKTYPE_STOCKOUT_INVENTORY; + + BasCargoSpace cargoSpace = bascargoSpaceService.selectBasCargoSpaceByTrayCode(detail.getTrayCode()); + if (ObjUtil.isNull(cargoSpace)){ + log.error("【盘点出库分配】操作失败,找不到当前盘点单明细托盘号的货位信息,请检查托盘库存状态和货位信息是否正确,单据号:{},托盘号:{}", stockpdId, detail.getTrayCode()); + return AjaxResult.error("找不到当前盘点单明细托盘号的货位信息,请检查托盘库存状态和货位信息是否正确,托盘号:{}" + detail.getTrayCode()); + } + + mydoJob = new MydoJob().builder() + .jobId(jobId) + .taskNo(taskNo) + .status(TaskStatusEnum.READY.getCode()) + .warehouseId("01") + .warehouseName("立体库") + .executionPhase("0") + .inOrOut(taskType) + .trayCode(detail.getTrayCode()) + .roadwayId(cargoSpace.getRoadwayId()) + .cargoSpaceId(cargoSpace.getCargoSpaceId()) + .cargoSpaceName(cargoSpace.getCargoSpaceName()) + .trayType(cargoSpace.getTheType()) + .priority(10) + .build(); + + mydoJobService.insertMydoJob(mydoJob); + log.info("【wms生成盘点出库】<盘点出库>作业,作业号:{},任务号:{},托盘号:{},盘点货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpace.getCargoSpaceId()); + + bascargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); + List stocks = basStockService.selectBasStockListByTrayCode(detail.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + } + + log.info("【wms生成盘点出库】更新出库货位和库存状态,作业号:{},任务号:{},托盘号:{},盘点货位:{}"); + + } + + } + + return AjaxResult.success(); + } + + /** * 查询盘点单据完成列表 */ @@ -217,7 +326,7 @@ public class PdStockpdServiceImpl implements IPdStockpdService { // 1. 生成主单ID if (saveDTO.getStockpdId() == null || saveDTO.getStockpdId().isEmpty()) { - saveDTO.setStockpdId(IBasJobIdService.getId("PDD")); + saveDTO.setStockpdId(basJobIdService.getId("PDD")); } // 2. 保存主单 saveDTO.setCreateDate(new Date()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/controller/PdStockpdDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/controller/PdStockpdDetailController.java index 8c1e9a5..b9854d6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/controller/PdStockpdDetailController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/controller/PdStockpdDetailController.java @@ -47,7 +47,7 @@ public class PdStockpdDetailController extends BaseController startPage(); List list; - if (StringUtils.isEmpty(pdStockpdDetail.getStatus()) || Convert.toInt(pdStockpdDetail.getStatus())< 4){ + if (Convert.toInt(pdStockpdDetail.getStatus())< 4){ list = pdStockpdDetailService.selectPdStockpdDetailList(pdStockpdDetail); }else { list = pdStockpdDetailService.selectPdStockpdDetailFinishList(pdStockpdDetail); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/domain/PdStockpdDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/domain/PdStockpdDetail.java index 439786c..60c4b80 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/domain/PdStockpdDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pd/stockpddetail/domain/PdStockpdDetail.java @@ -56,7 +56,7 @@ public class PdStockpdDetail extends BaseEntity @Excel(name = "实际数量") private BigDecimal assignNum; - private int status; + private Integer status; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java index 898b56c..a768047 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java @@ -2,6 +2,9 @@ package com.ruoyi.pda.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; +import com.ruoyi.bas.stock.domain.BasStock; +import com.ruoyi.bas.stock.service.IBasStockInfoService; +import com.ruoyi.bas.stock.service.IBasStockService; import com.ruoyi.common.TaskType; import com.ruoyi.common.Utils.DecimalUtil; import com.ruoyi.common.core.controller.BaseController; @@ -47,6 +50,8 @@ public class PdaController extends BaseController { IInStockinService inStockinService; @Autowired IInStockinDetailService inStockinDetailService; + @Autowired + IBasStockService basStockService; /** @@ -211,7 +216,6 @@ public class PdaController extends BaseController { } - /** * 入库绑盘-查询物料信息(子单号查询) * @param detailId 子单号 @@ -439,4 +443,71 @@ public class PdaController extends BaseController { } + + + //==================================== 盘点 ======================================== + //==================================== 盘点 ======================================== + //==================================== 盘点 ======================================== + + + /** + * 盘点出库待处理任务列表 + */ + @GetMapping("/inventoryOutTaskList") + @PreAuthorize("@ss.hasPermi('inventory:task:list')") + public TableDataInfo listInventoryTask(MydoJob mydoJob) { + mydoJob.setInOrOut(TaskType.TASKTYPE_STOCKOUT_INVENTORY); + startPage(); + List list = mydoJobService.selectMydoJobList(mydoJob); + return getDataTable(list); + } + + + /** + * 盘点-查询物料库存(托盘号查询) + * @param trayCode 托盘号 + * @return + */ + @GetMapping("/getInventoryOutInfoByTrayCode") + @PreAuthorize("@ss.hasPermi('out:inventory:task:info')") + public AjaxResult getInventoryOutInfoByTrayCode(String trayCode) { + try { + MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode); +// List info = pdaService.getStockoutInfoByTrayCode(trayCode); + List stocks = basStockService.selectBasStockListByTrayCode(trayCode); + if(ObjUtil.isNull(job) || stocks.isEmpty()){ + return AjaxResult.error("找不到当前托盘出库明细,请检查作业状态"); + }else{ + return AjaxResult.success(stocks); + } + } catch (RuntimeException e) { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 物料(版辊)库存【产品状态】异常标记 + * @param params + * @return + */ + @PostMapping("/inventoryStockExcetion") + @PreAuthorize("@ss.hasPermi('out:inventory:task:info')") + public AjaxResult inventoryStockExcetion(@RequestBody Map params) { + return pdaService.inventoryStockExcetion(params); + } + + + /** + * 手动指定出库确认 - 版辊单独确认 + * @param params + * @return + */ + @PostMapping("/inventoryTrayCodeComplete") + @PreAuthorize("@ss.hasPermi('out:bound:task:info')") + public AjaxResult inventoryTrayCodeComplete(Map params) { + return pdaService.inventoryTrayCodeComplete(params); + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java index 92602b5..f083ee0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java @@ -178,4 +178,24 @@ public interface IPdaService { AjaxResult stockoutTrayCodeCompleteAll(String trayCode); + //=============================================== 盘点 =================================================== + //=============================================== 盘点 =================================================== + //=============================================== 盘点 =================================================== + + /** + * 盘点出库 - 标记库存产品状态异常 + * @param params + * @return + */ + AjaxResult inventoryStockExcetion(Map params); + + + /** + * 托盘扫码 - 盘点出库确认 + * @param params + * @return + */ + public AjaxResult inventoryTrayCodeComplete(Map params); + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java index bb0d4cc..ba77f40 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java @@ -35,6 +35,9 @@ import com.ruoyi.out.stockout.service.IOutStockoutService; import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail; import com.ruoyi.out.stockoutdetail.mapper.OutStockoutDetailMapper; import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService; +import com.ruoyi.pd.stockpd.service.IPdStockpdService; +import com.ruoyi.pd.stockpddetail.domain.PdStockpdDetail; +import com.ruoyi.pd.stockpddetail.service.IPdStockpdDetailService; import com.ruoyi.pda.domain.AddInJobRequest; import com.ruoyi.pda.domain.TrayMsgBinding; import com.ruoyi.pda.domain.BindTrayRequest; @@ -94,6 +97,10 @@ public class PdaServiceImpl implements IPdaService { IBasTaskNoService basTaskNoService; @Autowired IBasCargoSpaceService basCargoSpaceService; + @Autowired + IPdStockpdService pdStockpdService; + @Autowired + IPdStockpdDetailService pdStockpdDetailService; // ───────────────────────────────────────────── @@ -496,7 +503,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘扫码 - 版辊单据出库确认 + * 单版辊强行出库确认 * @param params * @return */ @@ -556,7 +563,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘扫码 - 版辊单据出库确认 + * 托盘扫码 - 版辊单据出库标记 * @param params * @return */ @@ -594,7 +601,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘扫码 - 托盘单据出库确认 + * 托盘扫码 - 托盘出库确认(需求单据) * @param trayCode * @return */ @@ -723,7 +730,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘扫码 - 手动指定出库确认 + * 托盘扫码 - 手动指定出库确认(不依赖单据) * @param trayCode * @return */ @@ -832,7 +839,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘出库确认 - 托盘一键确认 + * 托盘出库确认 - 托盘一键确认(需求单据) * @param trayCode * @return */ @@ -944,4 +951,89 @@ public class PdaServiceImpl implements IPdaService { } + + +//============================================== 盘点 ================================================ +//============================================== 盘点 ================================================ +//============================================== 盘点 ================================================ + + + + + /** + * 盘点出库 - 标记库存产品状态异常 + * @param params + * @return + */ + @Override + public AjaxResult inventoryStockExcetion(Map params){ + String rollerNumber = (String) params.get("barcode"); + String productStatus = (String)params.get("productStatus"); + + BasStock stock = basStockService.selectBasStockByRollerNumber(rollerNumber); + if (ObjUtil.isNull(stock)){ + log.warn("【操作失败】找不到当前版辊的库存信息,可能是库存错误或入库有误,辊号:{}", rollerNumber); + return AjaxResult.error("找不到当前版辊的库存信息,可能是库存或入库有误"); + } + + if (stock.getProductStatus().equals(BasStockCode.PRODUCT_STATUS_NORMAL)){ + stock.setProductStatus(BasStockCode.PRODUCT_STATUS_EXCEPTION); + basStockService.updateBasStock(stock); + log.info("【盘点异常标记】版辊库存的<产品状态>已更新:异常待检【{}】,辊号:{}", BasStockCode.PRODUCT_STATUS_EXCEPTION, rollerNumber); + }else{ + log.info("【盘点异常标记】版辊库存的<产品状态>已经是异常待检【{}】状态,请勿重复操作,辊号:{}", BasStockCode.PRODUCT_STATUS_EXCEPTION, rollerNumber); + return AjaxResult.error("该版辊已经执行过出库确认操作,请勿重复操作"); + } + + return AjaxResult.success(); + } + + + /** + * 托盘扫码 - 盘点出库确认 + * @param params + * @return + */ + @Override + public AjaxResult inventoryTrayCodeComplete(Map params){ + + String trayCode = (String) params.get("barcode"); + + MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode); + if (ObjUtil.isNull(mydoJob)){ + log.warn("【操作失败】找不到当前出库盘点作业,可能是已经完成或者任务异常,请检查任务状态,托盘号:{}", trayCode); + return AjaxResult.error("找不到当前出库盘点作业,可能是已经完成或者任务异常,请检查任务状态"); + } + + if (!mydoJob.getStatus().equals(TaskStatusEnum.AUTO_FINISHED.getCode())){ + log.warn("【操作失败】请等待当前盘点作业出库完成再执行确认操作,托盘号:{}", trayCode); + return AjaxResult.error("请等待当前盘点作业出库完成再执行确认操作"); + } + + List details = pdStockpdDetailService.selectPdStockpdDetailList( + new PdStockpdDetail().builder().trayCode(trayCode).build() + ); + for (PdStockpdDetail detail : details){ + detail.setAssignNum(BigDecimal.ONE); + pdStockpdDetailService.updatePdStockpdDetail(detail); + } + + String jobId = basJobIdService.getId(JobIdType.JOB_MANUAL_LIST_INVENTORY_STOCKIN); + String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_INVENTORY); + + mydoJob.setJobId(jobId); + mydoJob.setTaskNo(taskNo); + mydoJob.setStatus(TaskStatusEnum.READY.getCode()); + mydoJob.setExecutionPhase("0"); + mydoJob.setInOrOut(TaskType.TASKTYPE_INVENTORY_BACK); + mydoJobService.updateMydoJob(mydoJob); + log.warn("【盘点出库确认】确认完成,生成盘点回库任务,等待执行中,作业号:{},托盘号:{}", jobId, trayCode); + + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); + + return AjaxResult.success(); + + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java index 1830723..24b87ad 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java @@ -382,16 +382,8 @@ public class MydoJobHandler { if (mydoJobs.isEmpty()) return; for (MydoJob mydoJob : mydoJobs) { -//任务子表 - if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY || mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue; + if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY && mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue; - List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); - if (!details.isEmpty()){ - //移除任务子表 - mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); - mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); - log.info("【手动作废任务】移除<盘点出库>任务明细,作业号:{}", mydoJob.getJobId()); - } //库存子表 List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); if (!stocks.isEmpty()){ @@ -409,19 +401,32 @@ public class MydoJobHandler { stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId()); basStockInfoService.updateBasStockInfo(stockInfo); } -// for (MydoJobDetail mydoJobDetail : details){ -// //还原子单数量 -// PdStockpdDetail pdStockpdDetail = pdStockpdDetailService.selectPdStockpdDetailList(mydoJobDetail.getRollerNumber()); -// if(ObjUtil.isNotNull(pdStockpdDetail)){ -// pdStockpdDetail.setAllotNum(BigDecimal.ZERO); -// pdStockpdDetail.setAssignNum(BigDecimal.ZERO); -// pdStockpdDetail.setStatus(0); -// pdStockpdDetailService.updatePdStockpdDetail(pdStockpdDetail); -// } -// } + +//还原盘点子单分配数量 + List pdStockpdDetails = pdStockpdDetailService.selectPdStockpdDetailList( + new PdStockpdDetail().builder().trayCode(mydoJob.getTrayCode()).build() + ); + if(!pdStockpdDetails.isEmpty()){ + for (PdStockpdDetail pdStockpdDetail : pdStockpdDetails){ + pdStockpdDetail.setAllotNum(BigDecimal.ZERO); + pdStockpdDetail.setAssignNum(BigDecimal.ZERO); + pdStockpdDetail.setStatus(0); + pdStockpdDetailService.updatePdStockpdDetail(pdStockpdDetail); + } + } + +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动作废任务】移除<盘点出库>任务明细,作业号:{}", mydoJob.getJobId()); + } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); - log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId()); + log.info("【账务处理-盘点出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId()); } @@ -826,18 +831,9 @@ public class MydoJobHandler { if (mydoJobs.isEmpty()) return; - for (MydoJob mydoJob : mydoJobs) { -//任务子表 - if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY || mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue; + if (mydoJob.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_INVENTORY && mydoJob.getInOrOut() != TaskType.TASKTYPE_INVENTORY_BACK) continue; - List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); - if (!details.isEmpty()){ - //移除任务子表 - mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); - mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); - log.info("【手动完成任务】移除<盘点>任务明细,作业号:{}", mydoJob.getJobId()); - } //库存子表 List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); if (!stocks.isEmpty()){ @@ -848,9 +844,30 @@ public class MydoJobHandler { } } +//还原盘点子单分配数量 + List pdStockpdDetails = pdStockpdDetailService.selectPdStockpdDetailList( + new PdStockpdDetail().builder().trayCode(mydoJob.getTrayCode()).build() + ); + if(!pdStockpdDetails.isEmpty()){ + for (PdStockpdDetail pdStockpdDetail : pdStockpdDetails){ + pdStockpdDetail.setAssignNum(BigDecimal.ONE); + pdStockpdDetail.setStatus(1); + pdStockpdDetailService.updatePdStockpdDetail(pdStockpdDetail); + } + } + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); log.info("【账务处理-盘点】任务完成,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode()); +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动完成任务】移除<盘点>任务明细,作业号:{}", mydoJob.getJobId()); + } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); log.info( "【账务处理-盘点】任务完成,移除作业信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java index b9f3aea..6c7367a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java @@ -243,7 +243,7 @@ public class RequestWcsHandler { /** - * 盘点确认完成 - 推送wcs回流任务 + * 盘点确认完成 - 推送wcs盘点回流任务 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsInventoryBackTask(){ diff --git a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml index 324038d..9624c58 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml @@ -102,6 +102,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where cargo_space_id = #{cargoSpaceId} + + + @@ -59,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and quantity = #{quantity} and allot_num = #{allotNum} and assign_num = #{assignNum} + and status = #{status} @@ -74,6 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" allot_num, assign_num, remark, + status, #{stockpdDetailId}, @@ -85,6 +90,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{allotNum}, #{assignNum}, #{remark}, + #{status}, @@ -99,6 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" allot_num = #{allotNum}, assign_num = #{assignNum}, remark = #{remark}, + status = #{status}, where stockpd_detail_id = #{stockpdDetailId} diff --git a/ruoyi-ui/src/api/pd/inJob.js b/ruoyi-ui/src/api/pd/inJob.js index 94433b9..62cbfdc 100644 --- a/ruoyi-ui/src/api/pd/inJob.js +++ b/ruoyi-ui/src/api/pd/inJob.js @@ -46,7 +46,8 @@ export function delJob(jobId) { // 手动作废作业 export function cancelJob(jobId) { return request({ - url: '/pd/inJob/cancel/' + jobId, + // url: '/pd/inJob/cancel/' + jobId, + url: '/in/job/cancel/' + jobId, method: 'put' }) } @@ -54,7 +55,8 @@ export function cancelJob(jobId) { // 手动完成作业 export function completeJob(jobId) { return request({ - url: '/pd/inJob/complete/' + jobId, + // url: '/pd/inJob/complete/' + jobId, + url: '/in/job/complete/' + jobId, method: 'put' }) } diff --git a/ruoyi-ui/src/api/pd/outJob.js b/ruoyi-ui/src/api/pd/outJob.js index 72568bb..a234dc0 100644 --- a/ruoyi-ui/src/api/pd/outJob.js +++ b/ruoyi-ui/src/api/pd/outJob.js @@ -46,7 +46,8 @@ export function delJob(jobId) { // 手动作废作业 export function cancelJob(jobId) { return request({ - url: '/pd/outJob/cancel/' + jobId, + // url: '/pd/outJob/cancel/' + jobId, + url: '/in/job/cancel/' + jobId, method: 'put' }) } @@ -54,7 +55,7 @@ export function cancelJob(jobId) { // 手动完成作业 export function completeJob(jobId) { return request({ - url: '/pd/outJob/complete/' + jobId, + url: '/in/job/complete/' + jobId, method: 'put' }) } diff --git a/ruoyi-ui/src/views/pd/create/index.vue b/ruoyi-ui/src/views/pd/create/index.vue index 29531cf..ae29ec0 100644 --- a/ruoyi-ui/src/views/pd/create/index.vue +++ b/ruoyi-ui/src/views/pd/create/index.vue @@ -82,12 +82,22 @@
物料明细 + 选择货位 选择库存
@@ -244,6 +254,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -251,6 +384,7 @@ import { saveWithDetails } from '@/api/pd/stockpd' import { listWarehouse } from '@/api/bas/warehouse' import { listStock } from '@/api/bas/stock' +import { listCargospace } from '@/api/bas/cargospace' export default { name: 'CreateStockpd', @@ -293,7 +427,26 @@ export default { productName: null, lotNo: null }, - selectedStocks: [] + selectedStocks: [], + + // ---------- 货位弹框 ---------- + cargoDialogVisible: false, + cargoLoading: false, + cargoList: [], + cargoTotal: 0, + cargoQuery: { + pageNum: 1, + pageSize: 8, + warehouseId: null, + cargoSpaceId: null, + cargoAreaId: null, + trayCode: null, + thePlatoon: null, + theColumn: null, + theFloor: null, + + }, + selectedCargos: [] } }, @@ -391,6 +544,68 @@ export default { this.stockDialogVisible = false }, + // ===== 货位弹框 ===== + openCargoDialog() { + this.cargoDialogVisible = true + }, + onCargoDialogOpen() { + this.resetCargoSearch() + this.cargoQuery.warehouseId = this.mainForm.warehouseId + this.fetchCargoList() + }, + searchCargo() { + this.cargoQuery.pageNum = 1 + this.fetchCargoList() + }, + resetCargoSearch() { + this.cargoQuery.cargoSpaceId = null + this.cargoQuery.trayCode = null + this.cargoQuery.status = null + this.cargoQuery.pageNum = 1 + }, + fetchCargoList() { + this.cargoLoading = true + listCargospace(this.cargoQuery).then(res => { + this.cargoList = res.rows || [] + this.cargoTotal = res.total || 0 + this.cargoLoading = false + // 回显已选中行 + this.$nextTick(() => { + if (this.$refs.cargoTable) { + this.cargoList.forEach(row => { + const already = this.detailLines.some(l => l.cargoSpaceId === row.cargoSpaceId) + if (already) { + this.$refs.cargoTable.toggleRowSelection(row, true) + } + }) + } + }) + }).catch(() => { this.cargoLoading = false }) + }, + onCargoSelectionChange(selection) { + this.selectedCargos = selection + }, + // 已在明细行中的库存记录置为不可重复勾选 + isCargoSelectable(row) { + return !this.detailLines.some(l => l.cargoSpaceId === row.cargoSpaceId) + }, + confirmCargos() { + this.selectedCargos.forEach(s => { + if (!this.detailLines.some(l => l.cargoSpaceId === s.cargoSpaceId)) { + this.detailLines.push({ + cargoSpaceId: s.cargoSpaceId || '', + trayCode: s.trayCode || '', + thePlatoon: s.thePlatoon, + theColumn: s.theColumn, + theFloor: s.theFloor, + status: s.status, + theType: s.theType, + }) + } + }) + this.cargoDialogVisible = false + }, + // ===== 明细行操作 ===== removeLine(index) { this.detailLines.splice(index, 1) @@ -408,7 +623,7 @@ export default { } // 3. 数量校验 const invalidLine = this.detailLines.find(l => !l.pdQuantity || l.pdQuantity <= 0) - if (invalidLine) { + if (invalidLine && mainForm.pdType==2) { this.$modal.msgWarning(`物料【${invalidLine.productName}】的盘点数量必须大于 0`) return }