车车 1 mese fa
parent
commit
e0cbd3a6c7

+ 2 - 13
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialscabinet/MaterialsCabinetServiceImpl.java

@@ -7,12 +7,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.iscs.controller.admin.materialscabinet.vo.MaterialsCabinetPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.materialscabinet.vo.MaterialsCabinetRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.materialscabinet.vo.MaterialsCabinetSaveReqVO;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace.ExceptionMisplaceDO;
-import cn.iocoder.yudao.module.iscs.dal.dataobject.materials.MaterialsDO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.materialscabinet.MaterialsCabinetDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.materialscabinet.MaterialsCabinetMapper;
-import cn.iocoder.yudao.module.iscs.service.exceptionmisplace.ExceptionMisplaceService;
-import cn.iocoder.yudao.module.iscs.service.materials.MaterialsService;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -20,9 +16,7 @@ import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
-import java.util.Comparator;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 物资柜 Service 实现类
@@ -35,10 +29,6 @@ public class MaterialsCabinetServiceImpl extends ServiceImpl<MaterialsCabinetMap
 
     @Resource
     private MaterialsCabinetMapper materialsCabinetMapper;
-    @Resource
-    private MaterialsService materialsService;
-    @Resource
-    private ExceptionMisplaceService exceptionMisplaceService;
 
     @Override
     public Long createMaterialsCabinet(MaterialsCabinetSaveReqVO createReqVO) {
@@ -95,10 +85,9 @@ public class MaterialsCabinetServiceImpl extends ServiceImpl<MaterialsCabinetMap
 
     @Override
     public PageResult<MaterialsCabinetRespVO> getMaterialsCabinetPage(MaterialsCabinetPageReqVO pageReqVO) {
-        // return materialsCabinetMapper.selectPage(pageReqVO);
         Page<MaterialsCabinetDO> page = new Page<MaterialsCabinetDO>().setCurrent(pageReqVO.getPageNo()).setSize(pageReqVO.getPageSize());
         Page<MaterialsCabinetRespVO> isMaterialsCabinetPage = materialsCabinetMapper.getIsMaterialsCabinetPage(page, pageReqVO);
-        // 1.如果有柜子,则获取所有物资进行判断
+        /*// 1.如果有柜子,则获取所有物资进行判断
         if (!isMaterialsCabinetPage.getRecords().isEmpty()) {
             List<Long> cabinetIds = isMaterialsCabinetPage.getRecords().stream().map(MaterialsCabinetRespVO::getId).collect(Collectors.toList());
             // 2.开始获取所有柜子的借出或异常的物资
@@ -150,7 +139,7 @@ public class MaterialsCabinetServiceImpl extends ServiceImpl<MaterialsCabinetMap
                     record.setExReason("4");
                 }
             }
-        }
+        }*/
         PageResult<MaterialsCabinetRespVO> respVOPageResult = new PageResult<>();
         respVOPageResult.setList(isMaterialsCabinetPage.getRecords());
         respVOPageResult.setTotal(isMaterialsCabinetPage.getTotal());

+ 102 - 25
yudao-module-iscs/src/main/resources/mapper/MaterialsCabinetMapper.xml

@@ -9,35 +9,112 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <!-- 与 MaterialsCabinetServiceImpl 原 Java 逻辑一致:物资异常状态(按 status 倒序取一条) -->
+    <sql id="exMaterialStatusSubquery">
+        (SELECT m1.status
+         FROM isc_materials m1
+         WHERE m1.deleted = 0
+           AND m1.materials_cabinet_id = c.id
+           AND (m1.loan_state = '0' OR m1.status != '0')
+           AND m1.status NOT IN ('0', '3')
+         ORDER BY m1.status DESC
+         LIMIT 1)
+    </sql>
+
     <select id="getIsMaterialsCabinetPage"
             resultType="cn.iocoder.yudao.module.iscs.controller.admin.materialscabinet.vo.MaterialsCabinetRespVO">
-        SELECT
-        c.*,
-        h.hardware_name,
-        w.workstation_name
-        FROM
-        isc_materials_cabinet c
-        LEFT JOIN isc_hardware h ON c.hardware_id = h.id
-        LEFT JOIN isc_workstation w ON c.workstation_id = w.id
+        SELECT *
+        FROM (
+            SELECT
+            c.id,
+            c.cabinet_code,
+            c.cabinet_name,
+            c.hardware_id,
+            c.workarea_id,
+            c.workstation_id,
+            c.cabinet_icon,
+            c.cabinet_picture,
+            c.remark,
+            c.creator,
+            c.create_time,
+            c.updater,
+            c.update_time,
+            c.deleted,
+            CASE
+                WHEN <include refid="exMaterialStatusSubquery"/> IS NOT NULL THEN '2'
+                WHEN EXISTS (
+                    SELECT 1 FROM sys_exception_misplace e1
+                    WHERE e1.deleted = 0
+                      AND e1.restitution_to_id = c.id
+                      AND e1.status = '0'
+                      AND e1.exception_type = '0'
+                ) THEN '2'
+                WHEN EXISTS (
+                    SELECT 1 FROM sys_exception_misplace e2
+                    WHERE e2.deleted = 0
+                      AND e2.loan_from_id = c.id
+                      AND e2.status = '0'
+                      AND e2.exception_type = '1'
+                ) THEN '2'
+                WHEN EXISTS (
+                    SELECT 1 FROM isc_materials m2
+                    WHERE m2.deleted = 0
+                      AND m2.materials_cabinet_id = c.id
+                      AND m2.loan_state = '0'
+                ) THEN '1'
+                ELSE '0'
+            END AS status,
+            CASE
+                WHEN <include refid="exMaterialStatusSubquery"/> IS NOT NULL THEN <include refid="exMaterialStatusSubquery"/>
+                WHEN EXISTS (
+                    SELECT 1 FROM sys_exception_misplace e1
+                    WHERE e1.deleted = 0
+                      AND e1.restitution_to_id = c.id
+                      AND e1.status = '0'
+                      AND e1.exception_type = '0'
+                ) THEN '3'
+                WHEN EXISTS (
+                    SELECT 1 FROM sys_exception_misplace e2
+                    WHERE e2.deleted = 0
+                      AND e2.loan_from_id = c.id
+                      AND e2.status = '0'
+                      AND e2.exception_type = '1'
+                ) THEN '5'
+                WHEN EXISTS (
+                    SELECT 1 FROM isc_materials m2
+                    WHERE m2.deleted = 0
+                      AND m2.materials_cabinet_id = c.id
+                      AND m2.loan_state = '0'
+                ) THEN '4'
+                ELSE '0'
+            END AS ex_reason,
+            h.hardware_name,
+            w.workstation_name
+            FROM
+            isc_materials_cabinet c
+            LEFT JOIN isc_hardware h ON c.hardware_id = h.id
+            LEFT JOIN isc_workstation w ON c.workstation_id = w.id
+            <where>
+                c.deleted = 0
+                <if test="vo.cabinetId != null">
+                    and c.id = #{vo.cabinetId}
+                </if>
+                <if test="vo.cabinetCode != null and vo.cabinetCode.trim() != ''">
+                    and c.cabinet_code like concat('%',#{vo.cabinetCode},'%')
+                </if>
+                <if test="vo.workstationId != null">
+                    and c.workstation_id = #{vo.workstationId}
+                </if>
+                <if test="vo.cabinetName != null and vo.cabinetName.trim() != ''">
+                    and c.cabinet_name like concat('%',#{vo.cabinetName},'%')
+                </if>
+            </where>
+        ) cabinet_row
         <where>
-            c.deleted = 0
-            <if test="vo.cabinetId != null">
-                and c.id = #{vo.cabinetId}
-            </if>
-            <if test="vo.cabinetCode != null and vo.cabinetCode.trim != ''">
-                and c.cabinet_code like concat('%',#{vo.cabinetCode},'%')
-            </if>
-            <if test="vo.workstationId != null">
-                and c.workstation_id = #{vo.workstationId}
-            </if>
-            <if test="vo.cabinetName != null and vo.cabinetName.trim != ''">
-                and c.cabinet_name like concat('%',#{vo.cabinetName},'%')
-            </if>
-            <if test="vo.status != null and vo.status.trim != ''">
-                and c.status = #{vo.status}
+            <if test="vo.status != null and vo.status.trim() != ''">
+                cabinet_row.status = #{vo.status}
             </if>
         </where>
-        ORDER BY
-        c.id asc
+        ORDER BY cabinet_row.id ASC
     </select>
 </mapper>