From 2a704304d2e2a925721f54c0faac73d3beb47e15 Mon Sep 17 00:00:00 2001 From: yangk Date: Tue, 16 Jun 2026 10:33:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(asset):=20=E8=B0=83=E6=95=B4=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E8=B0=83=E6=8B=A8=E5=8A=9F=E8=83=BD=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=EF=BC=88=E4=BB=85=E5=85=81=E8=AE=B8=E5=9C=A8=E5=BA=93=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E8=B0=83=E6=8B=A8=EF=BC=89=EF=BC=8C=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=92=8C=E4=BD=BF=E7=94=A8=E4=BA=BA=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除调拨单中的部门和使用人相关字段,包括原部门、新部门、原使用人、新使用人 - 更新调拨单新增和编辑页面,删除部门和使用人的下拉选择组件 - 修改数据库查询逻辑,调拨单只支持在库资产的仓库和位置变更 - 更新服务层实现,移除部门和使用人的验证和处理逻辑 - 调整测试用例以匹配新的调拨单功能范围 - 优化调拨单查看页面,移除不再使用的部门和使用人显示列 - 更新资产选择弹窗,过滤掉在用状态的资产只显示在库资产 --- .../AmsTransferOrderController.java | 22 +---- .../asset/domain/AmsTransferOrderItem.java | 24 ++--- .../asset/mapper/AmsTransferOrderMapper.java | 6 +- .../service/IAmsTransferOrderService.java | 4 +- .../impl/AmsTransferOrderServiceImpl.java | 97 ++++--------------- .../mapper/asset/AmsTransferOrderMapper.xml | 4 +- .../templates/asset/transfer/add.html | 87 +---------------- .../templates/asset/transfer/edit.html | 87 +---------------- .../templates/asset/transfer/selectAsset.html | 9 +- .../templates/asset/transfer/view.html | 4 - .../impl/AmsTransferOrderServiceImplTest.java | 59 ++--------- 11 files changed, 44 insertions(+), 359 deletions(-) diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsTransferOrderController.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsTransferOrderController.java index e814925..16afa21 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsTransferOrderController.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/controller/AmsTransferOrderController.java @@ -9,16 +9,11 @@ import com.ruoyi.asset.service.IAmsAssetLocationService; import com.ruoyi.asset.service.IAmsTransferOrderService; import com.ruoyi.asset.service.IAmsWarehouseService; import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.entity.SysDept; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.system.service.ISysDeptService; -import com.ruoyi.system.service.ISysUserService; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -53,12 +48,6 @@ public class AmsTransferOrderController extends BaseController @Autowired private IAmsAssetLocationService amsAssetLocationService; - @Autowired - private ISysDeptService sysDeptService; - - @Autowired - private ISysUserService sysUserService; - @RequiresPermissions("asset:transfer:view") @GetMapping() public String transfer(ModelMap mmap) @@ -85,7 +74,7 @@ public class AmsTransferOrderController extends BaseController return prefix + "/selectAsset"; } - /** 分页查询未被其他有效调拨单占用的在库/在用资产(仅返回可调拨资产) */ + /** 分页查询未被其他有效调拨单占用的在库资产(仅返回可调拨资产) */ @RequiresPermissions(value = { "asset:transfer:add", "asset:transfer:edit" }, logical = Logical.OR) @PostMapping("/availableAssetList") @ResponseBody @@ -182,7 +171,7 @@ public class AmsTransferOrderController extends BaseController return toAjax(amsTransferOrderService.deleteAmsTransferOrderByOrderIds(ids)); } - /** 调拨表单需要仓库、位置、部门、用户四组下拉选项 */ + /** 调拨表单只需要仓库和位置选项。 */ private void putTransferOptions(ModelMap mmap) { mmap.put("warehouseList", selectEnabledWarehouseList()); @@ -191,13 +180,6 @@ public class AmsTransferOrderController extends BaseController location.setEnabled(ENABLED_YES); mmap.put("locationList", amsAssetLocationService.selectAmsAssetLocationList(location)); - SysDept dept = new SysDept(); - dept.setStatus(UserConstants.DEPT_NORMAL); - mmap.put("deptList", sysDeptService.selectDeptList(dept)); - - SysUser user = new SysUser(); - user.setStatus(UserConstants.NORMAL); - mmap.put("userList", sysUserService.selectUserList(user)); } private List selectEnabledWarehouseList() diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/domain/AmsTransferOrderItem.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/domain/AmsTransferOrderItem.java index 72faacb..23d94eb 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/domain/AmsTransferOrderItem.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/domain/AmsTransferOrderItem.java @@ -61,36 +61,28 @@ public class AmsTransferOrderItem extends BaseEntity /** 当前资产状态,仅用于调拨表单展示和校验,不写入调拨明细表(由 LEFT JOIN 实时查询) */ private String assetStatus; - /** 原部门ID */ - @Excel(name = "原部门ID") + /** 原部门ID(兼容保留,一期调拨不使用) */ private Long oldDeptId; - /** 原部门名称快照 */ - @Excel(name = "原部门名称快照") + /** 原部门名称快照(兼容保留,一期调拨不使用) */ private String oldDeptName; - /** 新部门ID */ - @Excel(name = "新部门ID") + /** 新部门ID(兼容保留,一期调拨不使用) */ private Long newDeptId; - /** 新部门名称快照 */ - @Excel(name = "新部门名称快照") + /** 新部门名称快照(兼容保留,一期调拨不使用) */ private String newDeptName; - /** 原使用人ID */ - @Excel(name = "原使用人ID") + /** 原使用人ID(兼容保留,一期调拨不使用) */ private Long oldUserId; - /** 原使用人名称快照 */ - @Excel(name = "原使用人名称快照") + /** 原使用人名称快照(兼容保留,一期调拨不使用) */ private String oldUserName; - /** 新使用人ID */ - @Excel(name = "新使用人ID") + /** 新使用人ID(兼容保留,一期调拨不使用) */ private Long newUserId; - /** 新使用人名称快照 */ - @Excel(name = "新使用人名称快照") + /** 新使用人名称快照(兼容保留,一期调拨不使用) */ private String newUserName; /** 原仓库ID */ diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/mapper/AmsTransferOrderMapper.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/mapper/AmsTransferOrderMapper.java index bd2eb6a..eb078f0 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/mapper/AmsTransferOrderMapper.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/mapper/AmsTransferOrderMapper.java @@ -36,13 +36,11 @@ public interface AmsTransferOrderMapper public List selectAmsTransferOrderList(AmsTransferOrder amsTransferOrder); /** - * 查询未被其他有效调拨单占用的在库或在用资产(调拨单明细弹窗选择器使用) - *

只筛选 IN_STOCK 或 IN_USE 状态的资产,排除已被其他草稿或待确认调拨单引用的行项。

+ * 查询未被其他有效调拨单占用的在库资产(调拨单明细弹窗选择器使用) */ public List selectAvailableTransferAssetList(@Param("asset") AmsAsset amsAsset, @Param("currentOrderId") Long currentOrderId, @Param("stockStatus") String stockStatus, - @Param("inUseStatus") String inUseStatus, @Param("draftStatus") String draftStatus, - @Param("pendingStatus") String pendingStatus); + @Param("draftStatus") String draftStatus, @Param("pendingStatus") String pendingStatus); /** * 统计资产被其他有效调拨单占用的数量(草稿+待确认) diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsTransferOrderService.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsTransferOrderService.java index d6816fd..fe0b8ca 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsTransferOrderService.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/IAmsTransferOrderService.java @@ -29,8 +29,8 @@ public interface IAmsTransferOrderService public List selectAmsTransferOrderList(AmsTransferOrder amsTransferOrder); /** - * 分页查询当前可加入调拨单的在库或在用资产 - *

只返回 IN_STOCK 或 IN_USE 且未被其他有效调拨单占用的资产, + * 分页查询当前可加入调拨单的在库资产 + *

只返回 IN_STOCK 且未被其他有效调拨单占用的资产, * 供调拨单新增/编辑页的资产弹窗选择器使用。

* * @param amsAsset 查询条件(编码、名称、类别、状态等模糊搜索) diff --git a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsTransferOrderServiceImpl.java b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsTransferOrderServiceImpl.java index 2567c84..7e2da12 100644 --- a/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsTransferOrderServiceImpl.java +++ b/ruoyi-asset/src/main/java/com/ruoyi/asset/service/impl/AmsTransferOrderServiceImpl.java @@ -22,16 +22,11 @@ import com.ruoyi.asset.service.IAmsAssetLocationService; import com.ruoyi.asset.service.IAmsTransferOrderService; import com.ruoyi.asset.service.IAmsWarehouseService; import com.ruoyi.asset.service.IAssetStatusTransitionService; -import com.ruoyi.common.constant.UserConstants; -import com.ruoyi.common.core.domain.entity.SysDept; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysCodeRuleService; -import com.ruoyi.system.service.ISysDeptService; -import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -66,12 +61,6 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService @Autowired private IAmsAssetLocationService amsAssetLocationService; - @Autowired - private ISysDeptService sysDeptService; - - @Autowired - private ISysUserService sysUserService; - @Autowired private IAssetStatusTransitionService assetStatusTransitionService; @@ -92,8 +81,7 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService public List selectAvailableTransferAssetList(AmsAsset amsAsset, Long currentOrderId) { return amsTransferOrderMapper.selectAvailableTransferAssetList(amsAsset, currentOrderId, - AssetStatus.IN_STOCK, AssetStatus.IN_USE, TransferOrderStatus.DRAFT, - TransferOrderStatus.PENDING_CONFIRM); + AssetStatus.IN_STOCK, TransferOrderStatus.DRAFT, TransferOrderStatus.PENDING_CONFIRM); } /** @@ -211,7 +199,7 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService context.setChangeSummary("确认资产调拨"); context.setRemark(order.getRemark()); assetStatusTransitionService.confirmTransfer(item.getAssetId(), item.getNewWarehouseId(), - item.getNewLocationId(), item.getNewDeptId(), item.getNewUserId(), context); + item.getNewLocationId(), context); } Date now = DateUtils.getNowDate(); @@ -328,7 +316,7 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService } } - /** 加行锁并校验资产为可调拨状态(在库或在用),同时校验仓位和使用归属完整性。 */ + /** 加行锁并校验资产为可调拨的在库状态,同时校验仓位和使用归属完整性。 */ private AmsAsset lockTransferableAsset(Long assetId) { if (StringUtils.isNull(assetId)) @@ -340,7 +328,7 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService { throw new ServiceException("调拨资产不存在或已删除"); } - if (!StringUtils.equalsAny(asset.getAssetStatus(), AssetStatus.IN_STOCK, AssetStatus.IN_USE)) + if (!StringUtils.equals(asset.getAssetStatus(), AssetStatus.IN_STOCK)) { throw new ServiceException(StringUtils.format("资产【{}】当前状态不允许调拨", asset.getAssetCode())); } @@ -348,10 +336,10 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService { throw new ServiceException(StringUtils.format("资产【{}】缺少当前仓库或位置", asset.getAssetCode())); } - if (StringUtils.equals(AssetStatus.IN_USE, asset.getAssetStatus()) - && (StringUtils.isNull(asset.getUseDeptId()) || StringUtils.isNull(asset.getUseUserId()))) + if (StringUtils.isNotNull(asset.getUseDeptId()) || StringUtils.isNotNull(asset.getUseUserId()) + || StringUtils.isNotEmpty(asset.getUseDeptName()) || StringUtils.isNotEmpty(asset.getUseUserName())) { - throw new ServiceException(StringUtils.format("在用资产【{}】缺少当前使用部门或使用人", asset.getAssetCode())); + throw new ServiceException(StringUtils.format("在库资产【{}】仍存在使用归属,请先修正后再调拨", asset.getAssetCode())); } return asset; } @@ -377,10 +365,10 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService item.setSpecModel(asset.getSpecModel()); item.setBrand(asset.getBrand()); item.setAssetStatus(asset.getAssetStatus()); - item.setOldDeptId(asset.getUseDeptId()); - item.setOldDeptName(asset.getUseDeptName()); - item.setOldUserId(asset.getUseUserId()); - item.setOldUserName(asset.getUseUserName()); + item.setOldDeptId(null); + item.setOldDeptName(null); + item.setOldUserId(null); + item.setOldUserName(null); item.setOldWarehouseId(asset.getWarehouseId()); item.setOldWarehouseCode(asset.getWarehouseCode()); item.setOldWarehouseName(asset.getWarehouseName()); @@ -407,34 +395,17 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService item.setNewLocationCode(location.getLocationCode()); item.setNewLocationName(location.getLocationName()); - if (StringUtils.equals(AssetStatus.IN_USE, asset.getAssetStatus())) - { - SysDept dept = requireNormalDept(item.getNewDeptId()); - SysUser user = requireNormalUser(item.getNewUserId()); - if (!Objects.equals(user.getDeptId(), dept.getDeptId())) - { - throw new ServiceException(StringUtils.format("资产【{}】的新使用人不属于所选新部门", asset.getAssetCode())); - } - item.setNewDeptName(dept.getDeptName()); - item.setNewUserName(user.getUserName()); - } - else - { - // 在库资产没有使用归属,前端即使伪造部门或人员也必须清空。 - item.setNewDeptId(null); - item.setNewDeptName(null); - item.setNewUserId(null); - item.setNewUserName(null); - } + item.setNewDeptId(null); + item.setNewDeptName(null); + item.setNewUserId(null); + item.setNewUserName(null); } /** 陈旧归属校验:若草稿保存后资产台账的归属已被其他业务修改,阻断当前流转。 */ private void validateOldSnapshot(AmsTransferOrderItem item, AmsAsset asset) { if (!Objects.equals(item.getOldWarehouseId(), asset.getWarehouseId()) - || !Objects.equals(item.getOldLocationId(), asset.getLocationId()) - || !Objects.equals(item.getOldDeptId(), asset.getUseDeptId()) - || !Objects.equals(item.getOldUserId(), asset.getUseUserId())) + || !Objects.equals(item.getOldLocationId(), asset.getLocationId())) { throw new ServiceException(StringUtils.format("资产【{}】当前归属已变化,请重新编辑并提交调拨单", asset.getAssetCode())); @@ -445,9 +416,7 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService private void validateActualChange(AmsTransferOrderItem item, AmsAsset asset) { boolean changed = !Objects.equals(asset.getWarehouseId(), item.getNewWarehouseId()) - || !Objects.equals(asset.getLocationId(), item.getNewLocationId()) - || !Objects.equals(asset.getUseDeptId(), item.getNewDeptId()) - || !Objects.equals(asset.getUseUserId(), item.getNewUserId()); + || !Objects.equals(asset.getLocationId(), item.getNewLocationId()); if (!changed) { throw new ServiceException(StringUtils.format("资产【{}】的调拨前后归属不能完全相同", asset.getAssetCode())); @@ -482,38 +451,6 @@ public class AmsTransferOrderServiceImpl implements IAmsTransferOrderService return location; } - private SysDept requireNormalDept(Long deptId) - { - if (StringUtils.isNull(deptId)) - { - throw new ServiceException("在用资产的新使用部门不能为空"); - } - SysDept dept = sysDeptService.selectDeptById(deptId); - if (StringUtils.isNull(dept) - || !StringUtils.equals(UserConstants.DEPT_NORMAL, dept.getStatus()) - || !StringUtils.equals(DEL_FLAG_NORMAL, dept.getDelFlag())) - { - throw new ServiceException("新使用部门不存在或已停用"); - } - return dept; - } - - private SysUser requireNormalUser(Long userId) - { - if (StringUtils.isNull(userId)) - { - throw new ServiceException("在用资产的新使用人不能为空"); - } - SysUser user = sysUserService.selectUserById(userId); - if (StringUtils.isNull(user) - || !StringUtils.equals(UserConstants.NORMAL, user.getStatus()) - || !StringUtils.equals(DEL_FLAG_NORMAL, user.getDelFlag())) - { - throw new ServiceException("新使用人不存在或已停用"); - } - return user; - } - private AmsTransferOrder requireOrderForUpdate(Long orderId, String requiredStatus, String message) { if (StringUtils.isNull(orderId)) diff --git a/ruoyi-asset/src/main/resources/mapper/asset/AmsTransferOrderMapper.xml b/ruoyi-asset/src/main/resources/mapper/asset/AmsTransferOrderMapper.xml index 926b678..3e990ac 100644 --- a/ruoyi-asset/src/main/resources/mapper/asset/AmsTransferOrderMapper.xml +++ b/ruoyi-asset/src/main/resources/mapper/asset/AmsTransferOrderMapper.xml @@ -159,7 +159,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" for update - + ").addClass("form-control").attr({ - name: "amsTransferOrderItemList[" + index + "].newDeptId", - required: true, - onchange: "changeDept(" + index + ", this.value)" - }); - select.append($("