Browse Source

优化资产盘点报表

LinWuTai 1 year ago
parent
commit
a359fc3428

+ 10 - 15
ruoyi-admin/src/main/java/com/ruoyi/inventory/controller/TbInventoryDetailController.java

@@ -1,10 +1,7 @@
 package com.ruoyi.inventory.controller;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.hutool.core.date.DateUtil;
@@ -15,10 +12,10 @@ import com.ruoyi.inventory.domain.TbAssetInventory;
 import com.ruoyi.inventory.domain.TbInventoryCompare;
 import com.ruoyi.inventory.domain.TbInventoryCompareResult;
 import com.ruoyi.inventory.domain.dto.AssetInventoryStatement;
+import com.ruoyi.inventory.domain.dto.InventoryCompareDTO;
 import com.ruoyi.inventory.domain.enums.InventoryPlanResult;
 import com.ruoyi.inventory.domain.enums.InventoryResult;
 import com.ruoyi.inventory.domain.enums.InventoryStatus;
-import com.ruoyi.inventory.mapper.TbAssetInventoryMapper;
 import com.ruoyi.inventory.mapper.TbInventoryDetailMapper;
 import com.ruoyi.inventory.service.ITbAssetInventoryService;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -58,16 +55,14 @@ public class TbInventoryDetailController extends BaseController
         return getDataTable(list);
     }
 
-    @Autowired
-    private TbInventoryDetailMapper tbInventoryDetailMapper;
-
     /**
      * 查询全单位或者部门的资产对比分析报表
      * @return
      */
     @PreAuthorize("@ss.hasPermi('inventory:compare:list')")
     @GetMapping("/getDepAssetLossTb")
-    public TableDataInfo compareList(@RequestParam(required = false) String deptId){
+    public TableDataInfo compareList(InventoryCompareDTO inventoryCompareDTO){
+        String deptId = inventoryCompareDTO.getDeptId();
         startPage();
         TbInventoryCompareResult tbInventoryCompareResult = new TbInventoryCompareResult();
         List<TbInventoryCompareResult> tbInventoryCompareResultList = new ArrayList<>();
@@ -85,7 +80,7 @@ public class TbInventoryDetailController extends BaseController
         if (StrUtil.isBlank(orderNumber)) {
             throw new RuntimeException("盘点计划编码不能为空");
         }
-        List<TbInventoryDetail> tbInventoryDetailList1 = tbInventoryDetailMapper.selectTbInventoryDetailByOrderNumber(orderNumber);
+        List<TbInventoryDetail> tbInventoryDetailList1 = tbInventoryDetailService.selectTbInventoryDetailByOrderNumber(orderNumber);
         List<AssetInventoryStatement> inventoryStatement1 = getInventoryStatement(tbAssetInventoryList.get(0), tbInventoryDetailList1);
         List<TbInventoryCompare> tbInventoryCompareList = getTbInventoryCompareList(inventoryStatement1);
         double total = 0.0;
@@ -104,7 +99,7 @@ public class TbInventoryDetailController extends BaseController
         if (StrUtil.isBlank(orderNumber)) {
             throw new RuntimeException("盘点计划编码不能为空");
         }
-        List<TbInventoryDetail> tbInventoryDetailList2 = tbInventoryDetailMapper.selectTbInventoryDetailByOrderNumber(orderNumber);
+        List<TbInventoryDetail> tbInventoryDetailList2 = tbInventoryDetailService.selectTbInventoryDetailByOrderNumber(orderNumber);
         List<AssetInventoryStatement> inventoryStatement2 = getInventoryStatement(tbAssetInventoryList.get(0), tbInventoryDetailList2);
         List<TbInventoryCompare> tbInventoryCompareList2 = getTbInventoryCompareList(inventoryStatement2);
         total = 0.0;
@@ -155,7 +150,7 @@ public class TbInventoryDetailController extends BaseController
     @PostMapping("/export/detail")
     public void exportDetail(HttpServletResponse response, TbAssetInventory tbAssetInventory)
     {
-        List<TbAssetInventory> tbAssetInventoryList = tbAssetInventoryMapper.selectTbAssetInventoryList(tbAssetInventory);
+        List<TbAssetInventory> tbAssetInventoryList = inventoryService.selectTbAssetInventoryList(tbAssetInventory);
         List<AssetInventoryStatement> assetInventoryStatements = new ArrayList<>();
 
         for (TbAssetInventory assetInventory : tbAssetInventoryList) {
@@ -178,7 +173,7 @@ public class TbInventoryDetailController extends BaseController
     @PreAuthorize("@ss.hasPermi('inventory:compare:export')")
     @Log(title = "全单位资产对比分析报表", businessType = BusinessType.EXPORT)
     @PostMapping("/exportDepAssetLossTb")
-    public void exportCompare(HttpServletResponse response,@RequestParam(required = false) String deptId){
+    public void exportCompare(HttpServletResponse response,@RequestParam("deptId") String deptId){
         TbInventoryCompareResult tbInventoryCompareResult = new TbInventoryCompareResult();
         List<TbInventoryCompareResult> tbInventoryCompareResultList = new ArrayList<>();
 
@@ -195,7 +190,7 @@ public class TbInventoryDetailController extends BaseController
         if (StrUtil.isBlank(orderNumber)) {
             throw new RuntimeException("盘点计划编码不能为空");
         }
-        List<TbInventoryDetail> tbInventoryDetailList1 = tbInventoryDetailMapper.selectTbInventoryDetailByOrderNumber(orderNumber);
+        List<TbInventoryDetail> tbInventoryDetailList1 = tbInventoryDetailService.selectTbInventoryDetailByOrderNumber(orderNumber);
         List<AssetInventoryStatement> inventoryStatement1 = getInventoryStatement(tbAssetInventoryList.get(0), tbInventoryDetailList1);
         List<TbInventoryCompare> tbInventoryCompareList = getTbInventoryCompareList(inventoryStatement1);
         double total = 0.0;
@@ -214,7 +209,7 @@ public class TbInventoryDetailController extends BaseController
         if (StrUtil.isBlank(orderNumber)) {
             throw new RuntimeException("盘点计划编码不能为空");
         }
-        List<TbInventoryDetail> tbInventoryDetailList2 = tbInventoryDetailMapper.selectTbInventoryDetailByOrderNumber(orderNumber);
+        List<TbInventoryDetail> tbInventoryDetailList2 = tbInventoryDetailService.selectTbInventoryDetailByOrderNumber(orderNumber);
         List<AssetInventoryStatement> inventoryStatement2 = getInventoryStatement(tbAssetInventoryList.get(0), tbInventoryDetailList2);
         List<TbInventoryCompare> tbInventoryCompareList2 = getTbInventoryCompareList(inventoryStatement2);
         total = 0.0;
@@ -260,6 +255,7 @@ public class TbInventoryDetailController extends BaseController
             assetInventoryStatement.setAssetNumber(assetInformation.getNumber());
 
             // 设置资产名称
+            System.out.println("设置资产名称");
             assetInventoryStatement.setAssetName(assetInformation.getName());
 
             // 设置所在位置
@@ -387,7 +383,6 @@ public class TbInventoryDetailController extends BaseController
                 if(quantity>inventoryQuantity){
                     tbInventoryCompare.setLossNumber(quantity - inventoryQuantity);
                     tbInventoryCompare.setLossVal(assetInventoryStatement.getOriginalValue()*(quantity - inventoryQuantity));
-
                 }else {
                     tbInventoryCompare.setLossNumber(0);
                     tbInventoryCompare.setLossVal(0.0);

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/inventory/domain/dto/InventoryCompareDTO.java

@@ -0,0 +1,13 @@
+package com.ruoyi.inventory.domain.dto;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class InventoryCompareDTO extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    private String deptId;
+}

+ 2 - 2
ruoyi-admin/src/main/resources/mapper/asset/TbAssetInformationMapper.xml

@@ -252,9 +252,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
             <if test="code != null  and code != ''"> and a.code = #{code}</if>
             <if test="name != null  and name != ''"> and a.name like concat('%', #{name}, '%')</if>
-            <if test="number != null  and number != ''"> and a.number = #{number}</if>
+            <if test="number != null  and number != ''"> and a.number like concat('%', #{number}, '%')</if>
             <if test="imageUrl != null  and imageUrl != ''"> and a.image_url = #{imageUrl}</if>
-            <if test="categoryNumber != null  and categoryNumber != ''"> and a.category_number = #{categoryNumber}</if>
+            <if test="categoryNumber != null  and categoryNumber != ''"> and a.category_number like concat('%', #{number}, '%')</if>
             <if test="specificationsModel != null  and specificationsModel != ''"> and a.specifications_model = #{specificationsModel}</if>
             <if test="abcCategory != null  and abcCategory != ''"> and a.abc_category = #{abcCategory}</if>
             <if test="manageStatus != null "> and a.manage_status = #{manageStatus}</if>

+ 10 - 0
ruoyi-ui/src/api/inventory/detail.js

@@ -42,3 +42,13 @@ export function delDetail(id) {
     method: 'delete'
   })
 }
+
+
+// 查询全单位或者部门的资产对比分析报表
+export function getDepAssetLossTb(query) {
+  return request({
+    url: '/inventory/detail/getDepAssetLossTb',
+    method: 'get',
+    params: query
+  })
+}

+ 0 - 9
ruoyi-ui/src/api/inventory/inventory.js

@@ -55,12 +55,3 @@ export function delInventory(id) {
 export function selectQrCode(number, v) {
   return `/inventory/inventory/code/${number}?v=${v}`
 }
-
-
-// 删除资产盘点记录
-export function getDepAssetLossTb(id) {
-  return request({
-    url: '/inventory/inventory/getDepAssetLossTb?depId=' + id,
-    method: 'get'
-  })
-}

+ 5 - 5
ruoyi-ui/src/views/asset/information/index.vue

@@ -17,7 +17,7 @@
       </el-form-item>
       <el-form-item label="所在位置" prop="locationNumber">
         <treeselect v-model="queryParams.locationNumber" :options="locationList" :normalizer="tenantIdnormalizer" placeholder="选择位置" />
-      </el-form-item> 
+      </el-form-item>
       <el-form-item label="使用部门" prop="userDepartment">
         <div style="display: inline-block; width: 183px">
           <treeselect v-model="queryParams.userDepartment" :options="deptOptions" :normalizer="normalizer" placeholder="选择使用部门" />
@@ -38,7 +38,7 @@
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item> 
+      </el-form-item>
       <el-form-item v-if="isExist('责任人')" label="责任人" prop="responsiblePerson">
         <el-input v-model="queryParams.responsiblePerson" placeholder="请输入责任人" clearable @keyup.enter.native="handleQuery" />
       </el-form-item>
@@ -65,7 +65,7 @@
       </el-form-item>
       <el-form-item v-if="isExist('管理状态')" label="管理状态" prop="manageStatus">
         <el-select v-model="queryParams.manageStatus" placeholder="请选择管理状态" clearable>
-          <el-option v-for="dict in dict.type.asset_order_type" :key="dict.value" :label="dict.label" :value="dict.value" />
+          <el-option v-for="dict in dict.type.sys_manage_status" :key="dict.value" :label="dict.label" :value="dict.value" />
         </el-select>
       </el-form-item>
       <el-form-item v-if="isExist('入账时间')" label="入账时间" prop="paymentReceivingTime">
@@ -270,7 +270,7 @@
       <el-table-column v-if="isExist('备注')" label="备注" align="center" prop="remark" />
       <el-table-column v-if="isExist('管理状态')" label="管理状态" align="center" prop="manageStatus">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.asset_order_type" :value="scope.row.manageStatus" />
+          <dict-tag :options="dict.type.sys_manage_status" :value="scope.row.manageStatus" />
         </template>
       </el-table-column>
       <el-table-column v-if="isExist('资产性质')" label="资产性质" align="center" prop="property">
@@ -687,7 +687,7 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Information',
-  dicts: ['asset_record_status', 'sys_yes_no', 'asset_order_type', 'sys_asset_property'],
+  dicts: ['asset_record_status', 'sys_yes_no', 'sys_manage_status', 'sys_asset_property'],
   components: {
     ImageUploadTemp,
     Treeselect,

+ 3 - 101
ruoyi-ui/src/views/inventory/inventory/index.vue

@@ -134,16 +134,6 @@
           v-hasPermi="['inventory:inventory:export']"
         >盘点报表</el-button>
       </el-col>
-      <el-col :span="1.5" v-if="false">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="onOpenLoss"
-          v-hasPermi="['inventory:inventory:export']"
-        >资产报表</el-button>
-      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -258,7 +248,7 @@
         </el-form-item>
         <el-form-item label="盘点位置" prop="inventoryLocation">
           <treeselect
-          v-model="form.inventoryLocation" 
+          v-model="form.inventoryLocation"
           :multiple="true"
           :clearable="true"
           :searchable="true"
@@ -266,7 +256,7 @@
           :clear-on-select="true"
           :sort-value-by="'INDEX'"
           :options="locationOption"
-          :limit="3" 
+          :limit="3"
           placeholder="选择位置" />
         </el-form-item>
         <el-form-item label="备注" prop="remark">
@@ -288,68 +278,6 @@
       <UserSearch @submit="onSelectUser" @cancel="() => {openUserSearch = false}" v-if="openUserSearch"></UserSearch>
     </el-dialog>
 
-    <el-dialog :visible.sync="openLoss" title="资产报表查看" width="1000px">
-      <el-row>
-        <el-form>
-          <el-form-item label="盘点部门" prop="inventoryDepartment">
-            <treeselect
-              v-model="deptId"
-              :options="deptOptions"
-              placeholder="选择盘点部门"
-              @keyup.enter.native="onQueryLoss"
-            />
-          </el-form-item>
-        </el-form>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="onQueryLoss">搜索</el-button>
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="onLossExport"
-          v-hasPermi="['inventory:inventory:export']"
-        >导出</el-button>
-      </el-row>
-      <el-row>
-        <el-table :data="lossData">
-          <el-table-column type="expand">
-            <template v-slot="slot">
-              <el-table  :data="slot.row.assetResultList" ref="table" :header-cell-style="{ background: '#dcdfe6' }" >
-                <el-table-column
-                  prop="assetName"
-                  label="资产名称">
-                </el-table-column>
-                <el-table-column
-                  prop="category"
-                  label="类别">
-                </el-table-column>
-                <el-table-column
-                  prop="nowQuantity"
-                  label="现存数量">
-                </el-table-column>
-                <el-table-column
-                  prop="lossQuantity"
-                  label="损耗数量">
-                </el-table-column>
-                <el-table-column
-                  prop="lossVal"
-                  label="损耗值">
-                </el-table-column>
-              </el-table>
-            </template>
-          </el-table-column>
-          <el-table-column
-            prop="totalLossVal"
-            label="损耗总额">
-          </el-table-column>
-          <el-table-column
-            prop="date"
-            label="盘点时间">
-          </el-table-column>
-        </el-table>
-      </el-row>
-    </el-dialog>
-
     <el-dialog title="导出报表" :visible.sync="openExport" width="360px">
       <el-form ref="form" :model="exportParams" label-width="80px">
         <el-form-item label="盘点部门" prop="inventoryDepartment">
@@ -382,7 +310,7 @@
 
 <script>
 import { deptTreeSelect } from '@/api/system/user.js'
-import { listInventory, getInventory, delInventory, addInventory, updateInventory,selectQrCode,getDepAssetLossTb } from "@/api/inventory/inventory";
+import { listInventory, getInventory, delInventory, addInventory, updateInventory,selectQrCode } from "@/api/inventory/inventory";
 import { treeSelect } from "@/api/asset/location";
 import { listDept } from "@/api/system/dept";
 import UserSearch from '@/components/SysUserSearch/index.vue'
@@ -443,9 +371,6 @@ export default {
         inventoryLocation: null,
         recordStatus: 1,
       },
-      openLoss: false,
-      deptId: null,
-      lossData: [],
       pickerOptions: {
         disabledDate(time) {
           return time.getTime() < Date.now() - 8.64e7;
@@ -505,29 +430,6 @@ export default {
       }, `资产盘点报表_${new Date().getTime()}.xlsx`)
       this.openExport = false
     },
-    onOpenLoss() {
-      this.openLoss = true
-    },
-    onQueryLoss() {
-      if (this.deptId === null) {
-        this.$modal.msgWarning("部门不能为空");
-        return
-      }
-      getDepAssetLossTb(this.deptId).then(res => {
-        this.lossData = res.data
-        console.log('资产报表', this.lossData)
-      })
-    },
-    onLossExport() {
-      if (this.deptId === null) {
-        this.$modal.msgWarning("部门不能为空");
-        return
-      }
-      const deptId = this.deptId
-      this.download('inventory/inventory/exportDepAssetLossTb/' + deptId, {
-      }, `资产报表_${new Date().getTime()}.xlsx`)
-      this.openExport = false
-    },
     /** 查询部门下拉树结构 */
     getDeptTree() {
       deptTreeSelect().then((response) => {

+ 167 - 0
ruoyi-ui/src/views/inventory/statement/index.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams"  ref="queryForm" class="queryForm" size="small" :inline="true"  label-width="68px">
+      <el-form-item label="盘点部门" prop="inventoryDepartment">
+        <treeselect
+          v-model="queryParams.deptId"
+          :options="deptOptions"
+          placeholder="选择盘点部门"
+          @keyup.enter.native="onQueryLoss"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="onQueryLoss">搜索</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-button
+        type="warning"
+        plain
+        icon="el-icon-download"
+        size="mini"
+        @click="onLossExport"
+        v-hasPermi="['inventory:inventory:export']"
+      >导出</el-button>
+    </el-row>
+
+    <el-table :data="lossList">
+      <el-table-column type="expand">
+        <template v-slot="slot">
+          <el-table :data="slot.row.assetResultList" ref="table" :header-cell-style="{ background: '#dcdfe6' }" >
+            <el-table-column
+              prop="inventoryName"
+              label="资产名称">
+            </el-table-column>
+            <el-table-column
+              prop="inventoryLocationName"
+              label="资产位置">
+            </el-table-column>
+            <el-table-column
+              prop="expectInventoryNumber"
+              label="账面数量">
+            </el-table-column>
+            <el-table-column
+              prop="realityInventoryNumber"
+              label="实点数量">
+            </el-table-column>
+            <el-table-column
+              prop="lossNumber"
+              label="损耗数量">
+            </el-table-column>
+            <el-table-column
+              prop="units"
+              label="计量单位">
+            </el-table-column>
+            <el-table-column
+              prop="lossVal"
+              label="资产损耗金额">
+            </el-table-column>
+          </el-table>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="inventoryDepartment"
+        label="盘点部门">
+      </el-table-column>
+      <el-table-column
+        prop="lossTotal"
+        label="损耗总额">
+      </el-table-column>
+      <el-table-column
+        prop="date"
+        label="盘点时间">
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="onQueryLoss"
+    />
+  </div>
+
+</template>
+
+<script>
+import { deptTreeSelect } from '@/api/system/user.js'
+import { getDepAssetLossTb } from '@/api/inventory/detail';
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+export default {
+  components : {
+    Treeselect
+  },
+  data() {
+    return {
+      // 总条数
+      total: 0,
+      lossList: [],
+      deptOptions: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptId: null
+      }
+    }
+  },
+  created() {
+    this.getDeptTree()
+  },
+  methods: {
+    /** 查询部门下拉树结构 */
+    getDeptTree() {
+      deptTreeSelect().then((response) => {
+        this.deptOptions = response.data;
+        this.queryParams.deptId = this.deptOptions[0].id;
+        this.onQueryLoss()
+      });
+    },
+    onQueryLoss() {
+      if (this.queryParams.deptId === null) {
+        this.$modal.msgWarning("部门不能为空");
+        return
+      }
+      getDepAssetLossTb(this.queryParams).then(response => {
+        this.lossList = response.rows
+        this.total = response.total;
+        console.log('资产报表', this.lossData)
+      })
+    },
+    onLossExport() {
+      if (this.queryParams.deptId === null) {
+        this.$modal.msgWarning("部门不能为空");
+        return
+      }
+      const deptId = this.queryParams.deptId
+      this.download('inventory/detail/exportDepAssetLossTb', {
+        deptId
+      }, `资产报表_${new Date().getTime()}.xlsx`)
+      this.openExport = false
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+/deep/ .vue-treeselect {
+  display: inline-block;
+}
+.queryForm {
+  /deep/ .vue-treeselect {
+    width: 205px;
+    height: 32px;
+  }
+}
+.clickNumber{
+  color: #409EFF;
+
+  &:hover{
+    cursor: pointer;
+    text-decoration: underline;
+  }
+}
+</style>