From c216a6a9ee53ef3f6b683d20a91d72a3ad236a08 Mon Sep 17 00:00:00 2001
From: sgj <1442489573@qq.com>
Date: 星期一, 22 十二月 2025 15:32:34 +0800
Subject: [PATCH] 添加库存报表
---
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SuperInventoryReportService.java | 282 +++++++++++++++++++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotStore.java | 4
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportData.java | 70 +++++
fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReport.view.xml | 287 ++++++++++++++++++++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportParam.java | 27 ++
fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReportPR.java | 73 +++++
6 files changed, 741 insertions(+), 2 deletions(-)
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportData.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportData.java
new file mode 100644
index 0000000..66abbd6
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportData.java
@@ -0,0 +1,70 @@
+package com.fzzy.igds.data;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *鐩戠搴撳瓨鎶ヨ〃鏁版嵁
+ *
+ * @author sgj
+ * @date 2025/12/19
+
+ */
+@Data
+public class SuperInventoryReportData implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鏀跺偍鍏徃
+ */
+ private String customerName;
+
+ /**
+ * 鎵�灞炲簱鍖�
+ */
+ private String deptId;
+
+ /**
+ * 鎵�灞炰粨搴�
+ */
+ private String depotId;
+
+
+ /**
+ * 鏈熷垵鏁伴噺(鍗曚綅KG)
+ */
+ private Double initialWeight = 0.0;
+
+ /**
+ * 鍏ュ簱鏁伴噺(鍗曚綅KG)
+ */
+ private Double recordInWeight = 0.0;
+
+ /**
+ * 鍊掑叆鏁伴噺(鍗曚綅KG)
+ */
+ private Double changeInWeight = 0.0;
+
+ /**
+ * 鍑哄簱鏁伴噺(鍗曚綅KG)
+ */
+ private Double recordOutWeight = 0.0;
+
+ /**
+ * 鍊掑嚭鏁伴噺(鍗曚綅KG)
+ */
+ private Double changeOutWeight = 0.0;
+
+ /**
+ * 鎹熻�楁暟閲�(鍗曚綅KG)
+ */
+ private Double lossWeight = 0.0;
+
+ /**
+ * 鏈熸湯鏁伴噺(鍗曚綅KG)
+ */
+ private Double finalWeight = 0.0;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportParam.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportParam.java
new file mode 100644
index 0000000..956843a
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/SuperInventoryReportParam.java
@@ -0,0 +1,27 @@
+package com.fzzy.igds.data;
+
+
+import lombok.Data;
+
+/**
+ *鐩戠搴撳瓨鎶ヨ〃鏌ヨ瀹炰綋绫�
+ *
+ * @author sgj
+ * @date 2025/12/19
+
+ */
+@Data
+public class SuperInventoryReportParam extends IgdsBaseParam {
+
+ // 鏀跺偍鍏徃
+ private String customerName;
+
+ private String title;
+
+ private String timeDesc;
+
+ private String createUser;
+
+ private String createTime;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotStore.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotStore.java
index 3e5732a..f70328a 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotStore.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/DepotStore.java
@@ -56,8 +56,8 @@
@TableField("food_level")
private String foodLevel;
- @Column(name = "food_locationId", columnDefinition = "varchar(40) COMMENT '绮浜у湴'")
- @TableField("food_locationId")
+ @Column(name = "food_location_id", columnDefinition = "varchar(40) COMMENT '绮浜у湴'")
+ @TableField("food_location_id")
private String foodLocationId;
@Column(name = "food_location", columnDefinition = "varchar(40) COMMENT '绮浜у湴'")
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SuperInventoryReportService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SuperInventoryReportService.java
new file mode 100644
index 0000000..be3b45f
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SuperInventoryReportService.java
@@ -0,0 +1,282 @@
+package com.fzzy.igds.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.data.SuperInventoryReportData;
+import com.fzzy.igds.data.SuperInventoryReportParam;
+import com.fzzy.igds.domain.*;
+import com.fzzy.igds.mapper.*;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 鐩戠搴撳瓨鎶ヨ〃Service
+ *
+ * @author sgj
+ * @date 2025/12/19
+ */
+@Slf4j
+@Service
+public class SuperInventoryReportService {
+
+ @Resource
+ private DepotStoreMapper depotStoreMapper;
+ @Resource
+ private InoutRecordMapper inoutRecordMapper;
+ @Resource
+ private InoutStockChangeMapper inoutStockChangeMapper;
+ @Resource
+ private CoreCompanyMapper coreCompanyMapper;
+ @Resource
+ private InoutLossOverMapper inoutLossOverMapper;
+
+ @Resource
+ private CoreDeptService coreDeptService;
+ @Resource
+ private DepotService depotService;
+
+ /**
+ * 鏌ヨ鎶ヨ〃鏁版嵁
+ *
+ * @author sgj
+ * @date 2025/12/19
+ * @param param
+
+ */
+ public List<SuperInventoryReportData> listSuperInventoryReportData(SuperInventoryReportParam param) {
+ //1.鑾峰彇鏌ヨ寰楄捣姝㈡椂闂达紝濡傛灉娌℃湁鍒欙紝榛樿鎴鏃堕棿涓哄綋澶╋紝璧峰鏃堕棿涓�30澶╁墠
+ Date end = new Date();
+ Date start = DateUtil.getNewByDay(end, -30);
+ if (null == param.getStart()) {
+ param.setStart(DateUtil.getCurZero(start));
+ }
+ if (null == param.getEnd()) {
+ param.setEnd(DateUtil.getCurZero(end));
+ }
+
+ //榛樿缁勭粐缂栫爜
+ String companyId = ContextUtil.getCompanyId();
+ //榛樿搴撳尯缂栫爜
+ String deptId = ContextUtil.subDeptId(null);
+ param.setCompanyId(companyId);
+ if (StringUtils.isEmpty(param.getDeptId())) {
+ param.setDeptId(deptId);
+ }
+
+ //region 鍒濆鍖栭渶瑕佽寖鍥寸殑鏁版嵁
+ Map<String, SuperInventoryReportData> resultMap = new HashMap<>();
+ //鏌ヨ褰撳墠鐢ㄦ埛涓嬪睘鐨勬墍鏈夊簱鍖�
+ List<Dept> deptList = coreDeptService.getDeptData();
+ if (null == deptList || deptList.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ //棰勫姞杞芥墍鏈夐儴闂ㄤ笅鐨勪粨搴撲俊鎭紝鍑忓皯閲嶅鏌ヨ
+ Map<String, List<Depot>> deptDepotsMap = new HashMap<>();
+ Map<String, Company> companyCache = new HashMap<>();
+
+ for (Dept dept : deptList) {
+ //鑾峰彇搴撳尯涓嬫墍鏈変粨搴�
+ List<Depot> depotList = depotService.getData(companyId, dept.getId(), true);
+ if (null == depotList || depotList.isEmpty()) {
+ continue;
+ }
+ deptDepotsMap.put(dept.getId(), depotList);
+
+ //缂撳瓨鍏徃淇℃伅
+ int deptIdLength = dept.getId().length();
+ String companyCode = dept.getId().substring(0, deptIdLength - 3);
+ if (!companyCache.containsKey(companyCode)) {
+ Company company = coreCompanyMapper.selectById(companyCode);
+ companyCache.put(companyCode, company);
+ }
+ }
+
+ //鏋勫缓缁撴灉鏁版嵁
+ for (Map.Entry<String, List<Depot>> entry : deptDepotsMap.entrySet()) {
+ String deptIdKey = entry.getKey();
+ Company company = companyCache.get(deptIdKey.substring(0, deptIdKey.length() - 3));
+
+ for (Depot depot : entry.getValue()) {
+ //搴撳尯缂栫爜+浠撳簱缂栫爜缁勬垚鍞竴閿�
+ String key = deptIdKey + "_" + depot.getId();
+ SuperInventoryReportData data = new SuperInventoryReportData();
+
+ data.setCustomerName(Optional.ofNullable(company)
+ .map(Company::getId)
+ .orElse("-"));
+ data.setDeptId(deptIdKey);
+ data.setDepotId(depot.getId());
+ resultMap.put(key, data);
+ }
+ }
+ //endregion
+
+ if (resultMap.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ //2.鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍚勭鏁版嵁
+ List<DepotStore> depotStores = queryDepotStores(param);
+ List<InoutRecord> inoutRecords = queryInoutRecords(param);
+ List<InoutStockChange> inoutStockChanges = queryInoutStockChanges(param);
+ List<InoutLossOver> inoutLossOvers = queryInoutLossOvers(param);
+
+ //3. 鏁版嵁鍒嗙粍棰勫鐞嗭紝鎻愰珮鍚庣画鏌ユ壘鏁堢巼
+ Map<String, List<DepotStore>> storeGroupMap = depotStores.stream()
+ .collect(Collectors.groupingBy(store -> store.getDeptId() + "_" + store.getDepotId()));
+
+ Map<String, List<InoutRecord>> recordGroupMap = inoutRecords.stream()
+ .collect(Collectors.groupingBy(record -> record.getDeptId() + "_" + record.getDepotId()));
+
+ //4. 鏍规嵁搴撳尯銆佷粨搴撲负鍞竴閿紝缁勮鎶ヨ〃鏁版嵁
+ Date todayZero = DateUtil.getCurZero(new Date());
+ boolean isEndDateBeforeToday = param.getEnd().before(todayZero);
+
+ for (SuperInventoryReportData data : resultMap.values()) {
+ String dataKey = data.getDeptId() + "_" + data.getDepotId();
+
+ //鑾峰彇搴撳瓨鏁版嵁
+ List<DepotStore> depotStoreList = storeGroupMap.getOrDefault(dataKey, new ArrayList<>());
+ if (depotStoreList.isEmpty()) {
+ continue;
+ }
+
+ //鎺掑簭搴撳瓨鏁版嵁
+ depotStoreList.sort(Comparator.comparing(DepotStore::getCreateTime));
+
+ //鑾峰彇鍑哄叆搴撹褰�
+ List<InoutRecord> recordList = recordGroupMap.getOrDefault(dataKey, new ArrayList<>());
+ Map<Boolean, List<InoutRecord>> recordPartition = recordList.stream()
+ .collect(Collectors.partitioningBy(record -> Constant.TYPE_IN.equals(record.getType())));
+
+ List<InoutRecord> recordInList = recordPartition.get(true);
+ List<InoutRecord> recordOutList = recordPartition.get(false);
+
+ //鑾峰彇鍊掍粨鏁版嵁
+ Map<Boolean, List<InoutStockChange>> stockChangePartition = inoutStockChanges.stream()
+ .filter(change -> data.getDeptId().equals(change.getDeptId()))
+ .collect(Collectors.partitioningBy(change -> data.getDepotId().equals(change.getDepotIdIn())));
+
+ List<InoutStockChange> stockChangeInList = new ArrayList<>();
+ List<InoutStockChange> stockChangeOutList = new ArrayList<>();
+
+ //鍊掑叆鏁版嵁
+ stockChangeInList.addAll(stockChangePartition.get(true).stream()
+ .filter(change -> data.getDepotId().equals(change.getDepotIdIn()))
+ .collect(Collectors.toList()));
+
+ //鍊掑嚭鏁版嵁
+ stockChangeOutList.addAll(stockChangePartition.get(false).stream()
+ .filter(change -> data.getDepotId().equals(change.getDepotIdOut()))
+ .collect(Collectors.toList()));
+
+ //鎹熺泭鏁版嵁
+ List<InoutLossOver> lossOverList = inoutLossOvers.stream()
+ .filter(loss -> data.getDeptId().equals(loss.getDeptId())
+ && data.getDepotId().equals(loss.getDepotId()))
+ .collect(Collectors.toList());
+
+ //璁$畻鍚勯」缁熻鏁版嵁
+ double sumRecordIn = recordInList.stream()
+ .mapToDouble(InoutRecord::getRecordWeight)
+ .sum();
+
+ double sumRecordOut = recordOutList.stream()
+ .mapToDouble(InoutRecord::getRecordWeight)
+ .sum();
+
+ double sumStockChangeIn = stockChangeInList.stream()
+ .mapToDouble(InoutStockChange::getNumber)
+ .sum();
+
+ double sumStockChangeOut = stockChangeOutList.stream()
+ .mapToDouble(InoutStockChange::getNumber)
+ .sum();
+
+ double sumLossOver = lossOverList.stream()
+ .mapToDouble(lossOver -> Constant.TYPE_LOSS.equals(lossOver.getType())
+ ? -lossOver.getAmount()
+ : lossOver.getAmount())
+ .sum();
+
+ //璁$畻鏈熷垵鏈熸湯閲嶉噺
+ Double initialWeight = depotStoreList.get(0).getStorageReal();
+ Double finalWeight;
+
+ if (isEndDateBeforeToday) {
+ //濡傛灉鎴鏃堕棿涓烘槰澶╋紙褰撳ぉ鐨�0鐐�0鍒�0绉�0姣锛夊強涔嬪墠锛屽垯鏈�鍚庝竴鏉℃暟鎹负鏈熸湯鏁伴噺
+ finalWeight = depotStoreList.get(depotStoreList.size() - 1).getStorageReal();
+ } else {
+ //濡傛灉鎴鏃堕棿涓轰粖澶╁強涔嬪悗锛屽垯闇�瑕佺粨鍚堝叆鍑哄簱璁板綍鏁版嵁鏉ヨ绠楁湡鏈暟閲忥紝瑙勫垯锛氭湡鏈暟閲� = 鏈熷垵鏁伴噺 + 鍏ュ簱鏁伴噺 - 鍑哄簱鏁伴噺 + 鍊掑叆鏁伴噺 - 鍊掑嚭鏁伴噺+ 鎹熺泭鏁版嵁
+ finalWeight = initialWeight + sumRecordIn - sumRecordOut + sumStockChangeIn - sumStockChangeOut + sumLossOver;
+ }
+
+ //璁剧疆鏁版嵁
+ data.setInitialWeight(initialWeight);
+ data.setRecordInWeight(sumRecordIn);
+ data.setChangeInWeight(sumStockChangeIn);
+ data.setRecordOutWeight(sumRecordOut);
+ data.setChangeOutWeight(sumStockChangeOut);
+ data.setLossWeight(sumLossOver);
+ data.setFinalWeight(finalWeight);
+ }
+
+ return new ArrayList<>(resultMap.values());
+ }
+
+ /**
+ * 鏌ヨ搴撳瓨鏁版嵁
+ */
+ private List<DepotStore> queryDepotStores(SuperInventoryReportParam param) {
+ QueryWrapper<DepotStore> depotStoreQueryWrapper = new QueryWrapper<>();
+ depotStoreQueryWrapper.eq("company_id", param.getCompanyId());
+ depotStoreQueryWrapper.eq("dept_id", param.getDeptId());
+ depotStoreQueryWrapper.between("create_time", param.getStart(), param.getEnd());
+ depotStoreQueryWrapper.orderByAsc("create_time");
+ return depotStoreMapper.selectList(depotStoreQueryWrapper);
+ }
+
+ /**
+ * 鏌ヨ鍑哄叆搴撹褰曟暟鎹�
+ */
+ private List<InoutRecord> queryInoutRecords(SuperInventoryReportParam param) {
+ QueryWrapper<InoutRecord> inoutRecordQueryWrapper = new QueryWrapper<>();
+ inoutRecordQueryWrapper.eq("company_id", param.getCompanyId());
+ inoutRecordQueryWrapper.eq("dept_id", param.getDeptId());
+ inoutRecordQueryWrapper.between("create_time", param.getStart(), param.getEnd());
+ inoutRecordQueryWrapper.orderByAsc("create_time");
+ return inoutRecordMapper.selectList(inoutRecordQueryWrapper);
+ }
+
+ /**
+ * 鏌ヨ鍊掍粨鏁版嵁
+ */
+ private List<InoutStockChange> queryInoutStockChanges(SuperInventoryReportParam param) {
+ QueryWrapper<InoutStockChange> inoutStockChangeQueryWrapper = new QueryWrapper<>();
+ inoutStockChangeQueryWrapper.eq("company_id", param.getCompanyId());
+ inoutStockChangeQueryWrapper.eq("dept_id", param.getDeptId());
+ inoutStockChangeQueryWrapper.between("create_time", param.getStart(), param.getEnd());
+ inoutStockChangeQueryWrapper.orderByAsc("create_time");
+ return inoutStockChangeMapper.selectList(inoutStockChangeQueryWrapper);
+ }
+
+ /**
+ * 鏌ヨ鎹熺泭鏁版嵁
+ */
+ private List<InoutLossOver> queryInoutLossOvers(SuperInventoryReportParam param) {
+ QueryWrapper<InoutLossOver> inoutLossOverQueryWrapper = new QueryWrapper<>();
+ inoutLossOverQueryWrapper.eq("company_id", param.getCompanyId());
+ inoutLossOverQueryWrapper.eq("dept_id", param.getDeptId());
+ inoutLossOverQueryWrapper.between("create_time", param.getStart(), param.getEnd());
+ inoutLossOverQueryWrapper.orderByAsc("create_time");
+ return inoutLossOverMapper.selectList(inoutLossOverQueryWrapper);
+ }
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReport.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReport.view.xml
new file mode 100644
index 0000000..7e7a9cc
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReport.view.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+ <Arguments/>
+ <Context/>
+ <Model>
+ <DataType name="dtMain">
+ <Property name="creationType">com.fzzy.igds.data.SuperInventoryReportData</Property>
+ <PropertyDef name="customerName">
+ <Property name="label">鏀跺偍鍏徃</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("companyPR#getData").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">dwmc</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="deptId">
+ <Property name="label">鎵�灞炲簱鍖�</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("deptPR#getAllData").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">kqmc</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="depotId">
+ <Property name="label">鎵�灞炰粨搴�</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("depotPR#getAllCache").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">name</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="initialWeight">
+ <Property name="label">鏈熷垵鏁伴噺</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ <Property name="dataType">Double</Property>
+ </PropertyDef>
+ <PropertyDef name="recordInWeight">
+ <Property name="label">鍏ュ簱鏁伴噺</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ <PropertyDef name="changeInWeight">
+ <Property name="label">鍊掑叆鏁伴噺</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ <PropertyDef name="recordOutWeight">
+ <Property name="label">鍑哄簱鏁伴噺</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ <PropertyDef name="changeOutWeight">
+ <Property name="label">鍊掑嚭鏁伴噺</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ <PropertyDef name="lossWeight">
+ <Property name="label">鎹熻�楁暟閲�</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ <PropertyDef name="finalWeight">
+ <Property name="label">鏈熸湯鏁伴噺</Property>
+ <Property name="dataType">Double</Property>
+ <Property name="displayFormat">0.0 KG</Property>
+ </PropertyDef>
+ </DataType>
+ <DataType name="dtQuery">
+ <Property name="creationType">com.fzzy.igds.data.SuperInventoryReportParam</Property>
+ <PropertyDef name="deptId">
+ <Property></Property>
+ <Property name="label">鎵�灞炲簱鍖�</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("deptPR#getAllData").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">kqmc</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="depotId">
+ <Property></Property>
+ <Property name="label">瑁呭嵏浠撳簱</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("depotPR#getAllCache").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">name</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="start">
+ <Property name="label">寮�濮嬫椂闂�</Property>
+ <Property name="dataType">Date</Property>
+ </PropertyDef>
+ <PropertyDef name="end">
+ <Property name="label">鎴鏃堕棿</Property>
+ <Property name="dataType">Date</Property>
+ </PropertyDef>
+ <PropertyDef name="customerName">
+ <Property></Property>
+ <Property name="label">鏀跺偍鍏徃</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("companyPR#getData").getResult()}</Property>
+ <Property name="keyProperty">id</Property>
+ <Property name="valueProperty">dwmc</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="timeDesc">
+ <Property></Property>
+ <Property name="label">鏃堕棿</Property>
+ </PropertyDef>
+ <PropertyDef name="title">
+ <Property></Property>
+ </PropertyDef>
+ <PropertyDef name="createUser">
+ <Property name="label">鍒涘缓浜�</Property>
+ </PropertyDef>
+ <PropertyDef name="createTime">
+ <Property name="label">鍒涘缓鏃堕棿</Property>
+ </PropertyDef>
+ </DataType>
+ </Model>
+ <View layout="padding:10">
+ <ClientEvent name="onReady">var deptId = window.parent.DEPT_ID;//鐖堕〉闈腑鐨勫垎搴撶紪鐮�
+
+
+//榛樿鏌ヨ鏌ヨ鎻愭潯浠�
+view.get("#dsQuery").insert({
+ deptId:deptId
+});
+
+query = function(){
+ var data = view.get("#dsQuery.data");
+ view.get("#dsQuery").set("parameter",data).flushAsync();
+};
+query();</ClientEvent>
+ <Property name="packages">font-awesome,css-common</Property>
+ <DataSet id="dsMain">
+ <Property name="dataType">[dtMain]</Property>
+ <Property name="dataProvider">superInventoryReportPR#getReportData</Property>
+ <Property name="loadMode">manual</Property>
+ </DataSet>
+ <DataSet id="dsQuery">
+ <Property name="dataType">dtQuery</Property>
+ <Property></Property>
+ <Property name="loadMode">manual</Property>
+ <Property name="dataProvider">superInventoryReportPR#getQuery</Property>
+ </DataSet>
+ <Container>
+ <Property name="className">c-param</Property>
+ <AutoForm>
+ <Property name="cols">*,*,*,*,90,90,140</Property>
+ <Property name="dataSet">dsQuery</Property>
+ <Property name="labelSeparator">锛�</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="labelWidth">110</Property>
+ <Property name="exClassName">bg-color</Property>
+ <AutoFormElement>
+ <Property name="property">customerName</Property>
+ <Property name="name">customerName</Property>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">deptId</Property>
+ <Property name="property">deptId</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">start</Property>
+ <Property name="property">start</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">end</Property>
+ <Property name="property">end</Property>
+ <Editor/>
+ </AutoFormElement>
+ <Button>
+ <ClientEvent name="onClick">var data = view.get("#dsQuery.data");
+view.get("#dsMain").set("parameter",data).flushAsync();</ClientEvent>
+ <Property name="caption">鎼滅储</Property>
+ <Property name="exClassName">btn-q1</Property>
+ <Property name="iconClass">fa fa-search</Property>
+ </Button>
+ <Button>
+ <ClientEvent name="onClick">view.get("#dsQuery").flushAsync();</ClientEvent>
+ <Property name="exClassName">btn-q2</Property>
+ <Property name="iconClass">fa fa-refresh</Property>
+ <Property name="caption">閲嶇疆</Property>
+ </Button>
+ <Button layoutConstraint="left">
+ <Property name="caption">瀵煎嚭EXCEL</Property>
+ <Property name="exClassName">btn-q2</Property>
+ <Property name="width">140</Property>
+ <Property name="iconClass">fa fa-file-excel-o</Property>
+ </Button>
+ </AutoForm>
+ </Container>
+ <Container>
+ <Property name="className">c-data</Property>
+ <AutoForm id="autoForm1" layoutConstraint="top">
+ <Property name="cols">*,*,*,*</Property>
+ <Property name="dataSet">dsQuery</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="showHint">false</Property>
+ <Property name="labelWidth">120</Property>
+ <AutoFormElement layoutConstraint="colSpan:4">
+ <Property name="name">title</Property>
+ <Property name="property">title</Property>
+ <Property name="showLabel">false</Property>
+ <Property name="editorType">Label</Property>
+ <Property name="style">
+ <Property name="font">bold 30px Georgia, serif;</Property>
+ <Property name="text-align">center</Property>
+ </Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">timeDesc</Property>
+ <Property name="property">timeDesc</Property>
+ <Property name="editorType">Label</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="visible">false</Property>
+ <Property name="name">depotId</Property>
+ <Property name="property">depotId</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createUser</Property>
+ <Property name="property">createUser</Property>
+ <Property name="editorType">Label</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createTime</Property>
+ <Property name="property">createTime</Property>
+ <Property name="editorType">Label</Property>
+ <Editor/>
+ </AutoFormElement>
+ </AutoForm>
+ <DataGrid id="dataGridMain" layoutConstraint="padding:8">
+ <Property name="dataSet">dsMain</Property>
+ <Property name="readOnly">true</Property>
+ <Property name="highlightCurrentRow">false</Property>
+ <Property name="hideMode">visibility</Property>
+ <Property name="headerRowHeight">30</Property>
+ <Property name="rowHeight">50</Property>
+ <RowNumColumn/>
+ <DataColumn name="customerName">
+ <Property name="property">customerName</Property>
+ </DataColumn>
+ <DataColumn name="deptId">
+ <Property name="property">deptId</Property>
+ </DataColumn>
+ <DataColumn name="depotId">
+ <Property name="property">depotId</Property>
+ </DataColumn>
+ <DataColumn name="initialWeight">
+ <Property name="property">initialWeight</Property>
+ </DataColumn>
+ <DataColumn name="recordInWeight">
+ <Property name="property">recordInWeight</Property>
+ </DataColumn>
+ <DataColumn name="changeInWeight">
+ <Property name="property">changeInWeight</Property>
+ </DataColumn>
+ <DataColumn name="recordOutWeight">
+ <Property name="property">recordOutWeight</Property>
+ </DataColumn>
+ <DataColumn name="changeOutWeight">
+ <Property name="property">changeOutWeight</Property>
+ </DataColumn>
+ <DataColumn name="lossWeight">
+ <Property name="property">lossWeight</Property>
+ </DataColumn>
+ <DataColumn name="finalWeight">
+ <Property name="property">finalWeight</Property>
+ </DataColumn>
+ </DataGrid>
+ <ToolBar id="tool" layoutConstraint="bottom">
+ <Fill/>
+ <DataPilot layoutConstraint="right">
+ <Property name="itemCodes">pageSize,pages</Property>
+ <Property name="dataSet">dsMain</Property>
+ </DataPilot>
+ </ToolBar>
+ </Container>
+ </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReportPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReportPR.java
new file mode 100644
index 0000000..a496bad
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SuperInventoryReportPR.java
@@ -0,0 +1,73 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.fzzy.igds.data.SuperInventoryReportData;
+import com.fzzy.igds.data.SuperInventoryReportParam;
+import com.fzzy.igds.service.SuperInventoryReportService;
+import com.fzzy.igds.service.SysDeptService;
+import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.DateUtil;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 搴撳瓨鎶ヨ〃
+ *
+ * @author sgj
+ * @date 2025/12/22
+ */
+@Component
+public class SuperInventoryReportPR {
+
+ @Resource
+ private SuperInventoryReportService superInventoryReportService;
+ @Resource
+ private SysDeptService sysDeptService;
+
+ /**
+ * superInventoryReportPR#getQuery
+ *
+ * @return
+ */
+ @DataProvider
+ public SuperInventoryReportParam getQuery() {
+ SuperInventoryReportParam result = new SuperInventoryReportParam();
+ SysDept subDept = sysDeptService.getCacheDept(null, ContextUtil.subDeptId(null));
+ result.setTitle("搴撳瓨鎶ヨ〃");
+ if (null != subDept) {
+ result.setTitle(subDept.getDeptName() + "搴撳瓨鎶ヨ〃");
+ result.setDeptId(String.valueOf(subDept.getDeptId()));
+ }
+ result.setTimeDesc("妫�娴嬫椂闂�");
+ result.setEnd(new Date());
+ Date start = DateUtil.getNewByDay(new Date(), -30);
+ result.setStart(start);
+ result.setTimeDesc(
+ DateFormatUtils.format(start, "yyyy-MM-dd") + " 鎴嚦锛�"
+ + DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
+ result.setCreateUser(ContextUtil.getLoginUserName());
+ result.setCreateTime(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+ return result;
+ }
+
+ /**
+ * superInventoryReportPR#getReportData
+ *
+ * @param param
+ */
+ @DataProvider
+ public List<SuperInventoryReportData> getReportData(SuperInventoryReportParam param) {
+ if (null == param) {
+ param = new SuperInventoryReportParam();
+ }
+ List<SuperInventoryReportData> superInventoryReportData = superInventoryReportService.listSuperInventoryReportData(param);
+ return superInventoryReportData;
+ }
+
+
+}
--
Gitblit v1.9.3