diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/constant/AssetLifecycleBusinessType.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/constant/AssetLifecycleBusinessType.java index 18da04e..5e04862 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/constant/AssetLifecycleBusinessType.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/constant/AssetLifecycleBusinessType.java @@ -23,8 +23,6 @@ public final class AssetLifecycleBusinessType public static final String REPAIR = "REPAIR"; /** 资产处置/报废 */ public static final String DISPOSAL = "DISPOSAL"; - /** 资产盘点 */ - public static final String INVENTORY = "INVENTORY"; /** RFID标签绑定 */ public static final String RFID_BIND = "RFID_BIND"; /** RFID标签解绑 */ diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsInventoryTaskController.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsInventoryTaskController.java index 7d4241b..d429c34 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsInventoryTaskController.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsInventoryTaskController.java @@ -176,7 +176,7 @@ public class AmsInventoryTaskController extends BaseController return toAjax(amsInventoryTaskService.deleteSurplusItem(surplusId, getLoginName())); } - /** 确认盘点结果,只写盘点履历,不自动调整资产台账。 */ + /** 确认盘点结果,只确认任务事实,不自动调整资产台账,也不写资产履历。 */ @RequiresPermissions("asset:task:confirm") @Log(title = "盘点任务管理", businessType = BusinessType.UPDATE) @PostMapping("/confirm/{taskId}") diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsInventoryTaskService.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsInventoryTaskService.java index 31ca3d4..9d21628 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsInventoryTaskService.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsInventoryTaskService.java @@ -87,7 +87,7 @@ public interface IAmsInventoryTaskService public int deleteSurplusItem(Long surplusId, String operateLoginName); /** - * 确认盘点结果,只写履历,不调整资产台账 + * 确认盘点结果,只确认任务事实,不调整资产台账,也不写资产履历 * * @param taskId 盘点任务ID * @param operateUserId 操作用户ID diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImpl.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImpl.java index 3720cd5..709618e 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImpl.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImpl.java @@ -8,7 +8,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import com.ruoyi.asset.constant.AssetLifecycleBusinessType; import com.ruoyi.asset.constant.AssetStatus; import com.ruoyi.asset.constant.InventoryIdentifyMethod; import com.ruoyi.asset.constant.InventoryResult; @@ -19,7 +18,6 @@ import com.ruoyi.asset.constant.InventoryTaskStatus; import com.ruoyi.asset.constant.RfidBindStatus; import com.ruoyi.asset.domain.AmsAsset; import com.ruoyi.asset.domain.AmsAssetCategory; -import com.ruoyi.asset.domain.AmsAssetLifecycleLog; import com.ruoyi.asset.domain.AmsAssetLocation; import com.ruoyi.asset.domain.AmsInventoryTask; import com.ruoyi.asset.domain.AmsInventoryTaskItem; @@ -33,7 +31,6 @@ import com.ruoyi.asset.service.IAmsAssetCategoryService; import com.ruoyi.asset.service.IAmsAssetLocationService; import com.ruoyi.asset.service.IAmsInventoryTaskService; import com.ruoyi.asset.service.IAmsWarehouseService; -import com.ruoyi.asset.service.IAssetLifecycleService; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; @@ -86,9 +83,6 @@ public class AmsInventoryTaskServiceImpl implements IAmsInventoryTaskService @Autowired private IAmsAssetCategoryService amsAssetCategoryService; - @Autowired - private IAssetLifecycleService assetLifecycleService; - @Override public AmsInventoryTask selectAmsInventoryTaskByTaskId(Long taskId) { @@ -326,7 +320,7 @@ public class AmsInventoryTaskServiceImpl implements IAmsInventoryTaskService } /** - * 确认盘点结果:逐资产写盘点履历,不更新资产台账当前状态或归属。 + * 确认盘点结果:盘点只确认任务事实,不更新资产台账,也不写资产履历。 */ @Override @Transactional(rollbackFor = Exception.class) @@ -349,49 +343,11 @@ public class AmsInventoryTaskServiceImpl implements IAmsInventoryTaskService { throw new ServiceException(StringUtils.format("资产【{}】盘点结果无效", item.getAssetCode())); } - AmsAsset asset = amsAssetMapper.selectAmsAssetByAssetIdForUpdate(item.getAssetId()); - if (StringUtils.isNull(asset)) - { - throw new ServiceException(StringUtils.format("资产【{}】不存在或已删除", item.getAssetCode())); - } - AmsAssetLifecycleLog lifecycleLog = new AmsAssetLifecycleLog(); - lifecycleLog.setBusinessType(AssetLifecycleBusinessType.INVENTORY); - lifecycleLog.setSourceOrderId(task.getTaskId()); - lifecycleLog.setSourceOrderNo(task.getTaskNo()); - lifecycleLog.setSourceItemId(item.getItemId()); - lifecycleLog.setOperateUserId(operateUserId); - lifecycleLog.setOperateUserName(StringUtils.trim(operateUserName)); - lifecycleLog.setOperateTime(now); - lifecycleLog.setChangeSummary("确认盘点结果:" + item.getInventoryResult()); - lifecycleLog.setCreateBy(StringUtils.trim(operateLoginName)); - lifecycleLog.setRemark(buildLifecycleRemark(item)); - assetLifecycleService.recordLifecycle(asset, asset, lifecycleLog); } List surplusItems = sortedSurplusItems(task); for (AmsInventoryTaskSurplus surplus : surplusItems) { requireSurplusRecorded(surplus); - if (StringUtils.isNotNull(surplus.getAssetId())) - { - AmsAsset asset = amsAssetMapper.selectAmsAssetByAssetIdForUpdate(surplus.getAssetId()); - if (StringUtils.isNull(asset)) - { - throw new ServiceException(StringUtils.format("盘盈资产【{}】不存在或已删除", - surplus.getAssetCode())); - } - AmsAssetLifecycleLog lifecycleLog = new AmsAssetLifecycleLog(); - lifecycleLog.setBusinessType(AssetLifecycleBusinessType.INVENTORY); - lifecycleLog.setSourceOrderId(task.getTaskId()); - lifecycleLog.setSourceOrderNo(task.getTaskNo()); - lifecycleLog.setSourceItemId(surplus.getSurplusId()); - lifecycleLog.setOperateUserId(operateUserId); - lifecycleLog.setOperateUserName(StringUtils.trim(operateUserName)); - lifecycleLog.setOperateTime(now); - lifecycleLog.setChangeSummary("确认盘盈:" + surplus.getSurplusType()); - lifecycleLog.setCreateBy(StringUtils.trim(operateLoginName)); - lifecycleLog.setRemark(buildSurplusLifecycleRemark(surplus)); - assetLifecycleService.recordLifecycle(asset, asset, lifecycleLog); - } } amsInventoryTaskMapper.confirmAmsInventoryTaskSurplusByTaskId(task.getTaskId(), InventorySurplusStatus.CONFIRMED, StringUtils.trim(operateLoginName)); @@ -945,62 +901,6 @@ public class AmsInventoryTaskServiceImpl implements IAmsInventoryTaskService } } - private String buildLifecycleRemark(AmsInventoryTaskItem item) - { - StringBuilder remark = new StringBuilder("盘点结果:").append(item.getInventoryResult()); - if (StringUtils.isNotEmpty(item.getBookWarehouseName()) || StringUtils.isNotEmpty(item.getBookLocationName())) - { - remark.append(";账面位置:") - .append(StringUtils.nvl(item.getBookWarehouseName(), "")) - .append("/") - .append(StringUtils.nvl(item.getBookLocationName(), "")); - } - if (StringUtils.isNotEmpty(item.getInventoryWarehouseName()) - || StringUtils.isNotEmpty(item.getInventoryLocationName())) - { - remark.append(";盘点位置:") - .append(StringUtils.nvl(item.getInventoryWarehouseName(), "")) - .append("/") - .append(StringUtils.nvl(item.getInventoryLocationName(), "")); - } - if (StringUtils.isNotEmpty(item.getRemark())) - { - remark.append(";").append(item.getRemark()); - } - return remark.length() > 500 ? remark.substring(0, 500) : remark.toString(); - } - - private String buildSurplusLifecycleRemark(AmsInventoryTaskSurplus surplus) - { - StringBuilder remark = new StringBuilder("盘盈类型:").append(surplus.getSurplusType()); - remark.append(";识别方式:").append(surplus.getIdentifyMethod()); - if (StringUtils.isNotEmpty(surplus.getAssetCode())) - { - remark.append(";资产编码:").append(surplus.getAssetCode()); - } - if (StringUtils.isNotEmpty(surplus.getEpcCode())) - { - remark.append(";EPC:").append(surplus.getEpcCode()); - } - if (StringUtils.isNotEmpty(surplus.getBookWarehouseName()) - || StringUtils.isNotEmpty(surplus.getBookLocationName())) - { - remark.append(";账面位置:") - .append(StringUtils.nvl(surplus.getBookWarehouseName(), "")) - .append("/") - .append(StringUtils.nvl(surplus.getBookLocationName(), "")); - } - remark.append(";盘点位置:") - .append(StringUtils.nvl(surplus.getInventoryWarehouseName(), "")) - .append("/") - .append(StringUtils.nvl(surplus.getInventoryLocationName(), "")); - if (StringUtils.isNotEmpty(surplus.getRemark())) - { - remark.append(";").append(surplus.getRemark()); - } - return remark.length() > 500 ? remark.substring(0, 500) : remark.toString(); - } - private void requireStatus(AmsInventoryTask task, String requiredStatus, String message) { if (!StringUtils.equals(requiredStatus, task.getTaskStatus())) diff --git a/ruoyi-asset/src/main/resources/templates/asset/task/task.html b/ruoyi-asset/src/main/resources/templates/asset/task/task.html index 82a615c..d2ca349 100644 --- a/ruoyi-asset/src/main/resources/templates/asset/task/task.html +++ b/ruoyi-asset/src/main/resources/templates/asset/task/task.html @@ -196,7 +196,7 @@ } function confirmTask(taskId) { - $.modal.confirm("确认后只写入盘点履历,不会自动调整资产台账,是否继续?", function() { + $.modal.confirm("确认后只完成盘点任务,不会自动调整资产台账,也不会写资产履历,是否继续?", function() { $.operate.post(prefix + "/confirm/" + taskId, {}); }); } diff --git a/ruoyi-asset/src/test/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImplTest.java b/ruoyi-asset/src/test/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImplTest.java index a72808b..07dd766 100644 --- a/ruoyi-asset/src/test/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImplTest.java +++ b/ruoyi-asset/src/test/java/com/ruoyi/asset/service/impl/AmsInventoryTaskServiceImplTest.java @@ -10,13 +10,11 @@ import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; import java.util.List; -import com.ruoyi.asset.constant.AssetLifecycleBusinessType; import com.ruoyi.asset.constant.AssetStatus; import com.ruoyi.asset.constant.InventoryIdentifyMethod; import com.ruoyi.asset.constant.InventoryResult; @@ -27,7 +25,6 @@ import com.ruoyi.asset.constant.InventoryTaskStatus; import com.ruoyi.asset.constant.RfidBindStatus; import com.ruoyi.asset.domain.AmsAsset; import com.ruoyi.asset.domain.AmsAssetCategory; -import com.ruoyi.asset.domain.AmsAssetLifecycleLog; import com.ruoyi.asset.domain.AmsAssetLocation; import com.ruoyi.asset.domain.AmsInventoryTask; import com.ruoyi.asset.domain.AmsInventoryTaskItem; @@ -40,7 +37,6 @@ import com.ruoyi.asset.mapper.AmsRfidTagMapper; import com.ruoyi.asset.service.IAmsAssetCategoryService; import com.ruoyi.asset.service.IAmsAssetLocationService; import com.ruoyi.asset.service.IAmsWarehouseService; -import com.ruoyi.asset.service.IAssetLifecycleService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.service.ISysCodeRuleService; import org.junit.jupiter.api.Test; @@ -74,9 +70,6 @@ class AmsInventoryTaskServiceImplTest @Mock private IAmsAssetCategoryService amsAssetCategoryService; - @Mock - private IAssetLifecycleService assetLifecycleService; - @InjectMocks private AmsInventoryTaskServiceImpl service; @@ -330,56 +323,40 @@ class AmsInventoryTaskServiceImplTest verify(amsInventoryTaskMapper, never()).insertAmsInventoryTaskSurplus(any(AmsInventoryTaskSurplus.class)); } - /** 确认结果只写盘点履历,不调用资产台账状态更新。 */ + /** 确认结果只完成任务,不调用资产台账状态更新,也不写资产履历。 */ @Test - void confirmResultShouldWriteLifecycleWithoutUpdatingAssetLedger() + void confirmResultShouldCompleteWithoutUpdatingAssetLedger() { AmsInventoryTask current = buildPersistedTask(InventoryTaskStatus.PENDING_RESULT_CONFIRM); current.setAmsInventoryTaskItemList(Collections.singletonList(buildPersistedItemWithResult())); when(amsInventoryTaskMapper.selectAmsInventoryTaskByTaskIdForUpdate(100L)).thenReturn(current); - when(amsAssetMapper.selectAmsAssetByAssetIdForUpdate(1L)).thenReturn(buildAsset()); when(amsInventoryTaskMapper.updateAmsInventoryTaskStatus(any(AmsInventoryTask.class))).thenReturn(1); assertEquals(1, service.confirmResult(100L, 9L, "管理员", "admin")); - ArgumentCaptor lifecycleCaptor = - ArgumentCaptor.forClass(AmsAssetLifecycleLog.class); - verify(assetLifecycleService).recordLifecycle(any(AmsAsset.class), any(AmsAsset.class), - lifecycleCaptor.capture()); - AmsAssetLifecycleLog lifecycleLog = lifecycleCaptor.getValue(); - assertEquals(AssetLifecycleBusinessType.INVENTORY, lifecycleLog.getBusinessType()); - assertEquals(100L, lifecycleLog.getSourceOrderId()); - assertEquals(500L, lifecycleLog.getSourceItemId()); - assertEquals(9L, lifecycleLog.getOperateUserId()); - assertTrue(lifecycleLog.getRemark().contains(InventoryResult.NORMAL)); + verify(amsAssetMapper, never()).selectAmsAssetByAssetIdForUpdate(1L); verify(amsAssetMapper, never()).updateAssetForTransition(any(AmsAsset.class)); assertEquals(InventoryTaskStatus.INVENTORY_DONE, current.getTaskStatus()); assertNotNull(current.getFinishTime()); } - /** 确认结果时,账内盘盈写盘点履历并把盘盈明细置为已确认。 */ + /** 确认结果时,只把盘盈明细置为已确认,不写资产履历。 */ @Test - void confirmResultShouldWriteLifecycleForKnownSurplus() + void confirmResultShouldConfirmKnownSurplusWithoutLifecycle() { AmsInventoryTask current = buildPersistedTask(InventoryTaskStatus.PENDING_RESULT_CONFIRM); current.setAmsInventoryTaskItemList(Collections.singletonList(buildPersistedItemWithResult())); current.setAmsInventoryTaskSurplusList(Collections.singletonList(buildPersistedKnownSurplus())); when(amsInventoryTaskMapper.selectAmsInventoryTaskByTaskIdForUpdate(100L)).thenReturn(current); - when(amsAssetMapper.selectAmsAssetByAssetIdForUpdate(1L)).thenReturn(buildAsset()); - when(amsAssetMapper.selectAmsAssetByAssetIdForUpdate(2L)).thenReturn(buildOutOfScopeAsset()); when(amsInventoryTaskMapper.updateAmsInventoryTaskStatus(any(AmsInventoryTask.class))).thenReturn(1); when(amsInventoryTaskMapper.confirmAmsInventoryTaskSurplusByTaskId(100L, InventorySurplusStatus.CONFIRMED, "admin")).thenReturn(1); assertEquals(1, service.confirmResult(100L, 9L, "管理员", "admin")); - ArgumentCaptor lifecycleCaptor = - ArgumentCaptor.forClass(AmsAssetLifecycleLog.class); - verify(assetLifecycleService, times(2)).recordLifecycle(any(AmsAsset.class), any(AmsAsset.class), - lifecycleCaptor.capture()); - assertTrue(lifecycleCaptor.getAllValues().stream() - .anyMatch(log -> Long.valueOf(700L).equals(log.getSourceItemId()) - && log.getRemark().contains("盘盈类型"))); + verify(amsAssetMapper, never()).selectAmsAssetByAssetIdForUpdate(1L); + verify(amsAssetMapper, never()).selectAmsAssetByAssetIdForUpdate(2L); + verify(amsAssetMapper, never()).updateAssetForTransition(any(AmsAsset.class)); verify(amsInventoryTaskMapper).confirmAmsInventoryTaskSurplusByTaskId(100L, InventorySurplusStatus.CONFIRMED, "admin"); } @@ -468,20 +445,6 @@ class AmsInventoryTaskServiceImplTest return item; } - private AmsAsset buildAsset() - { - AmsAsset asset = new AmsAsset(); - asset.setAssetId(1L); - asset.setAssetCode("A001"); - asset.setAssetName("资产A"); - asset.setAssetStatus(AssetStatus.IN_STOCK); - asset.setWarehouseId(1L); - asset.setWarehouseName("一号仓"); - asset.setLocationId(10L); - asset.setLocationName("一号仓A区"); - return asset; - } - private AmsAsset buildOutOfScopeAsset() { AmsAsset asset = new AmsAsset();