schangxiang@126.com
2025-09-09 3d8966ba2c81e7e0365c8b123e861d18ee4f94f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import BaseService from "../baseService";
import * as sql from "mssql";
import moment = require("moment");
 
/**
 * 库存统计
 */
export default class xStatStorageDayService extends BaseService {
  public async loadDataList() {
    try {
      let { ctx } = this;
      let where = `storageDay between '${ctx.header.datefrom}' And '${ctx.header.dateto}' And storage_Id=${ctx.header.storageid}`;
      const connection: any = await this.dbWrite.connection;
      let request = new sql.Request(connection.driver.master);
      request.input("tblName", "vStat_StorageDay");
      request.input(
        "columns",
        "storageName,consignorCode,consignorName,productCode,productName,productModel,productSpec,previousStorage,currentIn,currentOut,availableStorage,totalStorage,brandName,avgStorage,typeName,turnoverRate,turnoverDays,inventorytime"
      );
      request.input("sumColumnNames", "");
      request.input("isSumAll", 0);
      request.input("orderField", "storageDay_Id DESC");
      request.input("strWhere", where);
 
      request.input("dateFrom", ctx.header.datefrom);
      request.input("dateTo", ctx.header.dateto);
      request.input("storage_Id", ctx.header.storage_id);
 
      request.input("pageSize", this.body.pageSize);
      request.input("pageIndex", this.body.pageIndex);
 
      request.output("sumResult", sql.NVarChar(2000));
      request.output("pageCount", sql.Int);
      request.output("recordCount", sql.Int);
      let result = await request.execute("sp_xBase_StorageDay");
      let recordCount = result.output.recordCount;
      let dataList = result.recordset;
 
      // 数据处理
      let dateFrom = ctx.header.datefrom;
      let dateTo = ctx.header.dateto;
 
      var dtDateFrom = moment(dateFrom);
      var dtDateTo = moment(dateTo);
 
      var totalDays = dtDateTo.diff(dtDateFrom, "days");
      //dateSpan.Value.TotalDays
      for (var dataInfo of dataList) {
        dataInfo.avgStorage = dataInfo.previousStorage + dataInfo.availableStorage / 2;
        if (dataInfo.currentIn == 0) {
          dataInfo.turnoverRate = null;
        } else {
          dataInfo.turnoverRate = dataInfo.currentIn / dataInfo.avgStorage;
        }
        if (dataInfo.turnoverRate == null) {
          dataInfo.turnoverDays = null;
        } else {
          dataInfo.turnoverDays = totalDays / (dataInfo.turnoverRate == 0 ? 1 : dataInfo.turnoverRate);
        }
        if (dataInfo.availableStorage === 0 || dataInfo.CurrentOut === 0 || totalDays === 0) {
          dataInfo.Inventorytime = null;
        } else {
          dataInfo.Inventorytime = dataInfo.availableStorage / (dataInfo.CurrentOut / totalDays);
        }
      }
 
      let footer = {};
 
      this.info.result = true;
      this.info.data = {
        total: recordCount,
        rows: dataList,
        footer: [footer]
      };
    } catch (error) {
      this.info.result = false;
      this.info.msg = error.message;
    }
    return this.info;
  }
}