From fdcb3d4255a5897972aae4c31cf0cbaa81aef431 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期四, 27 十一月 2025 14:52:55 +0800
Subject: [PATCH] 仓库页面
---
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java | 35 +
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java | 5
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java | 251 ++++++++
fzzy-igdss-view/src/main/java/models/core.model.xml | 285 +++++++++
fzzy-igdss-view/src/main/java/com/fzzy/igds/SysUserPR.java | 31 +
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java | 103 +++
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SysUserService.java | 47 +
fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotStoreRepository.java | 30 +
fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml | 10
fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotRepository.java | 78 ++
fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotPR.java | 102 +++
fzzy-igdss-view/src/main/java/com/fzzy/igds/Depot.view.xml | 488 ++++++++++++++++
fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml | 2
fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/RedisConst.java | 228 +++++++
14 files changed, 1,688 insertions(+), 7 deletions(-)
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
index c244709..d89f627 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
@@ -7,7 +7,10 @@
*/
public class Constant {
-
+ /**
+ * 绯荤粺鍚嶇О
+ */
+ public static final String APP_NAME = "igdss";
/**
* 閮ㄩ棬绫诲瀷
*/
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/RedisConst.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/RedisConst.java
new file mode 100644
index 0000000..2a3f955
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/RedisConst.java
@@ -0,0 +1,228 @@
+package com.fzzy.igds.constant;
+
+/**
+ * Redis缂撳瓨浣跨敤鐨勭郴缁熷父閲忛厤缃� 涓昏鐢ㄤ簬閰嶇疆绯荤粺缂撳瓨鐨凨EY閰嶇疆
+ */
+public class RedisConst {
+
+ /**
+ * 鏍规嵁缁勭粐缂栫爜鏋勫缓瀹為檯浣跨敤鐨凨EY
+ *
+ * @param key1 缁勭粐缂栫爜
+ * @param key2 缂撳瓨KEY
+ * @return
+ */
+ public static String buildKey(String key1, String key2) {
+ return Constant.APP_NAME + ":" + key1 + ":" + key2;
+ }
+
+ /**
+ * 涓夊眰缁撴瀯鐨凨EY
+ *
+ * @param key1
+ * @param key2
+ * @param tag
+ * @return
+ */
+ public static String buildKey(String key1, String key2, String tag) {
+ return Constant.APP_NAME + ":" + key1 + ":" + key2 + ":" + tag;
+ }
+
+ /**
+ * 鍥涘眰缁撴瀯鐨凨EY
+ *
+ * @param companyId
+ * @param key
+ * @param tag1
+ * @param tag2
+ * @return
+ */
+ public static String buildKey(String companyId, String key, String tag1, String tag2) {
+ return Constant.APP_NAME + ":" + companyId + ":" + key + ":" + tag1 + ":" + tag2;
+ }
+
+ /**
+ * 鍒涘缓璁惧鍒楄〃鐨凨EY锛屼互鍒嗘満涓哄垎缁勫垱寤�
+ *
+ * @param companyId
+ * @param key
+ * @param tag1
+ * @return
+ */
+ public static String buildDeviceKey(String companyId, String key, String tag1) {
+ return Constant.APP_NAME + ":" + companyId + ":" + key + ":" + tag1;
+ }
+
+ /**
+ * 鏍规嵁缂撳瓨KEY鐨勫墠缂�鐢熸垚缂撳瓨KEy
+ *
+ * @param prefix
+ * @param bizId
+ */
+ public static String buildKeyByPrefix(String prefix, String bizId) {
+ if (null == bizId) return Constant.APP_NAME + ":" + prefix;
+ return Constant.APP_NAME + ":" + prefix + ":" + bizId;
+ }
+
+ /**
+ * 瀛楀吀琛ㄧ紦瀛橀厤缃�
+ */
+ public static final String KEY_DIC_TRIGGER = "KEY_DIC_TRIGGER";
+
+ /**
+ * 浠撳簱鍒楄〃KEY
+ */
+ public static final String KEY_DEPOT = "DEPOT_DATA";
+
+ /**
+ * 浠撳簱鍙傛暟鍒楄〃KEY
+ */
+ public static final String KEY_DEPOT_CONF = "DEPOT_CONF";
+
+ /**
+ * 鍒嗘満鍒楄〃KEY
+ */
+ public static final String KEY_DEVICE_SER_LIST = "SER_LIST";
+
+ /**
+ * 璁惧鍒楄〃
+ */
+ public static final String KEY_DEVICE_LIST = "DEVICE_LIST";
+
+ /**
+ * 鍗曚釜鑹插彿鍚�
+ */
+ public static final String KEY_DEVICE = "DEVICE";
+
+ /**
+ * 璁惧鍒楄〃
+ */
+ public static final String KEY_DEVICE_IOT_LIST = "DEVICE_IOT_LIST";
+ /**
+ * 浠撳簱鍜屽垎鏈虹殑澶氬澶氬叧绯婚泦鍚�
+ */
+ public static final String KEY_DEPOT_SER_LIST = "DEPOT_SER_LIST";
+
+ /**
+ * 寤虹瓚鐗╀俊鎭�
+ */
+ public static final String KEY_BUILDING_LIST = "BUILDING_LIST";
+
+ /**
+ * 鎵ц鍛戒护KEY鍓嶇紑
+ */
+ public static final String KEY_ORDER_PRE = "ORDER";
+
+ /**
+ * 鏈�鏂扮伯鎯呬俊鎭紦瀛樺垪琛紝鐢ㄤ簬瀛樻斁褰撳墠鏈�鏂扮殑绮儏淇℃伅
+ */
+ public static final String KEY_GRAIN = "GRAIN_DATA";
+
+ /**
+ * 鏈�鏂版皵浣撲俊鎭紦瀛樺垪琛�
+ */
+ public static final String KEY_GAS_DATA = "GAS_DATA";
+
+ /**
+ * 绯荤粺閰嶇疆KEY
+ */
+ public static final String KEY_SYS_CONF = "SYS_CONF";
+
+ /**
+ * 绮簱鐨勬俯婀垮害淇℃伅缂撳瓨
+ */
+ public static final String KEY_DEPOT_TH_PREFIX = "DEPOT_TH_PREFIX";
+
+ /**
+ * 浠ュ垎鏈烘垨鑰呬粨搴撲负鍗曚綅瀛樺偍鐨勪粨娓╀粨婀跨紦瀛樻爣鏍囩
+ */
+ public static final String KEY_T_TH = "T_TH";
+
+ /**
+ * 瀛樻斁姘旇薄淇℃伅鐨凨EY
+ */
+ public static final String KEY_WEATHER_INFO = "WEATHER_INFO";
+
+ /**
+ * 鏍规嵁浠撳簱缂栫爜瀛樻斁鏈�鏂扮殑鑳借�楁暟鎹俊鎭�
+ */
+ public static final String KEY_ES_DATA_MAP = "ES_DATA_MAP";
+
+ /**
+ * 绯荤粺涓粍缁囧垪琛�
+ */
+ public static final String KEY_DEPT_LIST = "DEPT_LIST";
+
+ /**
+ * 鍒舵爱鏈洪厤缃垪琛�
+ */
+ public static final String KEY_N2_CONF_LIST = "N2_CONF_LIST";
+
+ /**
+ * 鏈�鏂版皵鍘嬩俊鎭紦瀛樺垪琛�
+ */
+ public static final String KEY_PRESSURE_DATA = "PRESSURE_DATA";
+
+ /**
+ * 绯荤粺閰嶇疆鐨勬憚鍍忔満淇℃伅缂撳瓨
+ */
+ public static final String KEY_CAMERA_LIST = "CAMERA_LIST";
+
+
+ /**
+ * 涓夌淮閰嶇疆鍏宠仈淇℃伅key
+ */
+ public static final String KEY_THREE_CONF = "THREE_CONF";
+
+ /**
+ * 涓存椂缂撳瓨KEY鍓嶇紑
+ */
+ public static final String KEY_TEMP_PREFIX = "TEMP_";
+
+ /**
+ * 鏁伴噺鐩戞祴鍙傛暟鍒楄〃KEY--鍗曚釜璁惧
+ */
+ public static final String KEY_QUANTITY_CONF = "QUANTITY_CONF";
+
+
+ /**
+ * 浠撳簱璐ㄩ噺宸℃鏁版嵁缂撳瓨
+ */
+ public static final String KEY_DEPOT_QUALITY = "DEPOT_QUALITY";
+
+ /**
+ * 浠撳簱娑蹭綅鏁版嵁缂撳瓨
+ */
+ public static final String KEY_DEPOT_HEIGHT = "DEPOT_HEIGHT";
+
+ /**
+ * 浠撳簱鐗╄仈缃戝叧iot璁惧娓╂箍搴︾紦瀛榢ey
+ */
+ public static final String KEY_IOT_DEPOT_TEMP_HUM = "IOT_DEPOT_TEMP_HUM";
+ /**
+ * 鍗曚釜鏁伴噺妫�娴嬫湇鍔�
+ */
+ public static final String PREFIX_QUANTITY_SER = "QUANTITY_SER";
+
+ /**
+ * 璀﹀憡閰嶇疆鍒楄〃KEY
+ */
+ public static final String KEY_WARN_CONF = "WARN_CONF";
+
+ /**
+ * 闂ㄧ璁惧閰嶇疆鍒楄〃
+ */
+ public static final String KEY_DOOR_SENSOR_LIST = "DOOR_SENSOR_LIST";
+
+ /**
+ * 鎶撴媿鍒嗘満缂撳瓨鍓嶇紑
+ */
+ public static final String CACHE_KEY_PRE = "SNAP_SER";
+
+
+ /**
+ * AI璁惧缂撳瓨key
+ */
+ public static final String KEY_AI_SER = "AI_SER";
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotRepository.java
new file mode 100644
index 0000000..a11388e
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotRepository.java
@@ -0,0 +1,78 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.Depot;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 13:39
+ */
+@Service
+public interface DepotRepository extends JpaRepository<Depot, String> {
+
+ /**
+ * 鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱璐т綅淇℃伅
+ *
+ * @param companyId
+ * @return
+ */
+ @Query("from Depot where companyId =:companyId order by orderNum")
+ List<Depot> getDepotByCompanyId(@Param("companyId") String companyId);
+
+ /**
+ * 鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦粨搴撹揣浣嶄俊鎭�
+ *
+ * @param companyId
+ * @param deptId
+ * @return
+ */
+ @Query("from Depot where companyId =:companyId and deptId =:deptId order by orderNum")
+ List<Depot> getDepot(@Param("companyId") String companyId, @Param("deptId") String deptId);
+
+ /**
+ * 鏍规嵁缁勭粐缂栫爜鍜屼粨搴撶紪鐮佽幏鍙栦粨搴撹揣浣嶄俊鎭�
+ * @param companyId
+ * @param id
+ * @return
+ */
+ @Query("from Depot where companyId =:companyId and id =:id")
+ Depot getDepotById(@Param("companyId") String companyId, @Param("id") String id);
+
+
+ /**
+ * 鏇存柊浠撳簱鐘舵��
+ * @param status
+ * @param depotId
+ */
+ @Transactional
+ @Modifying
+ @Query("update Depot set depotStatus =:status where id =:depotId")
+ void updateDepotStatus(@Param("status") String status, @Param("depotId") String depotId);
+
+ /**
+ * 鏍规嵁ids鑾峰彇浠撳簱
+ *
+ * @param list
+ * @return
+ */
+ @Query("from Depot where id IN :list order by orderNum")
+ List<Depot> getDepotByIds(@Param("list") List<String> list);
+
+ /**
+ * 鏇存柊浠撳簱鍌ㄩ噺
+ * @param weight
+ * @param depotId
+ */
+ @Transactional
+ @Modifying
+ @Query("update Depot set storageReal =:weight where id =:depotId")
+ void updateDepotStorage(@Param("weight") Double weight, @Param("depotId") String depotId);
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotStoreRepository.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotStoreRepository.java
new file mode 100644
index 0000000..7dfb4a6
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotStoreRepository.java
@@ -0,0 +1,30 @@
+package com.fzzy.igds.repository;
+
+import com.fzzy.igds.domain.DepotStore;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 13:44
+ */
+@Service
+public interface DepotStoreRepository extends JpaRepository<DepotStore, String>, JpaSpecificationExecutor<DepotStore> {
+
+ /**
+ * 鏍规嵁浠撳簱缂栫爜鑾峰彇鏈�鍚庝竴鏉℃暟鎹�
+ * @param depotId
+ * @param end
+ * @return
+ */
+ @Query("from DepotStore where depotId =:depotId and createDate <:end order by createDate desc")
+ List<DepotStore> getDataByDepotId(@Param("depotId") String depotId,@Param("end") Date end);
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java
new file mode 100644
index 0000000..aa162a1
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java
@@ -0,0 +1,251 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.constant.RedisConst;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.DepotStore;
+import com.fzzy.igds.repository.DepotRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 13:43
+ */
+@Slf4j
+@Service
+public class DepotService {
+
+ @Resource
+ private DepotRepository depotRepository;
+ @Resource
+ private RedisCache redisCache;
+ @Resource
+ private SysDeptMapper deptMapper;
+ @Resource
+ private DepotStoreService depotStoreService;
+
+
+ /**
+ * jpa鏌ヨ浠撳簱鍒楄〃
+ * @param companyId
+ * @param deptId
+ * @return
+ */
+ public List<Depot> getData(String companyId, String deptId) {
+
+ if (StringUtils.isEmpty(companyId)) {
+ companyId = ContextUtil.getCompanyId();
+ }
+ if (StringUtils.isEmpty(deptId)) {
+ deptId = ContextUtil.subDeptId(null);
+ }
+ return depotRepository.getDepot(companyId, deptId);
+ }
+
+ /**
+ * jpa鏌ヨ浠撳簱鍒楄〃
+ * @param ids
+ * @return
+ */
+ public List<Depot> getDepotByIds(List<String> ids) {
+ if (null == ids ||ids.isEmpty()) {
+ return null;
+ }
+ return depotRepository.getDepotByIds(ids);
+ }
+
+ /**
+ * jpa淇濆瓨鏇存柊浠撳簱淇℃伅
+ * @param depot
+ */
+ public void saveDepot(Depot depot) {
+ if (StringUtils.isEmpty(depot.getCompanyId())) {
+ depot.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if (StringUtils.isEmpty(depot.getDeptId())) {
+ depot.setDeptId(ContextUtil.subDeptId(null));
+ }
+ if(null == depot.getOrderNum()){
+ depot.setOrderNum(1);
+ }
+ depotRepository.save(depot);
+ flushCache(depot.getCompanyId());
+ }
+
+ /**
+ * jpa鏇存柊浠撳簱鐘舵��
+ * @param depotId
+ * @param status
+ */
+ public void updateDepotStatus(String depotId, String status) {
+ if (StringUtils.isEmpty(depotId)) {
+ return;
+ }
+ depotRepository.updateDepotStatus(status, depotId);
+ }
+
+ /**
+ * jpa鍒犻櫎浠撳簱璐т綅淇℃伅
+ * @param depot
+ */
+ public void deleteDepot(Depot depot) {
+ depotRepository.delete(depot);
+
+ //鍒犻櫎閰嶇疆缂撳瓨
+ this.delCacheDepot(depot, depot.getCompanyId());
+ }
+
+ /**
+ * 鍒锋柊浠撳簱璐т綅缂撳瓨
+ * @param companyId
+ */
+ public void flushCache(String companyId) {
+ if (StringUtils.isEmpty(companyId)) {
+ companyId = ContextUtil.getCompanyId();
+ }
+
+ List<Depot> list = depotRepository.getDepotByCompanyId(companyId);
+
+ this.setCacheDepotList(list, companyId);
+ }
+
+ /**
+ * 璁剧疆缂撳瓨
+ * @param list
+ * @param companyId
+ */
+ public void setCacheDepotList(List<Depot> list, String companyId) {
+ if (null == list) return;
+ String key;
+ for (Depot depot : list) {
+ key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId());
+ redisCache.setCacheObject(key, depot);
+ }
+ }
+
+ /**
+ * 鍒犻櫎缂撳瓨淇℃伅
+ * @param depot
+ * @param companyId
+ */
+ public void delCacheDepot(Depot depot, String companyId) {
+ if (null == depot) {
+ return;
+ }
+ if(StringUtils.isEmpty(companyId)){
+ companyId = ContextUtil.getCompanyId();
+ }
+ String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId());
+ redisCache.deleteObject(key);
+ }
+
+ /**
+ * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鑾峰彇浠撳簱闆嗗悎
+ * @param companyId
+ * @return
+ */
+ public List<Depot> getCacheDepotList(String companyId) {
+ if(StringUtils.isEmpty(companyId)){
+ companyId = ContextUtil.getCompanyId();
+ }
+ String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT) + "*";
+
+ Collection<String> keys = redisCache.keys(patten);
+ if (null == keys) {
+ return null;
+ }
+
+ List<Depot> list = new ArrayList<>();
+ for (String key : keys) {
+ list.add((Depot) redisCache.getCacheObject(key));
+ }
+ //缂撳瓨鑾峰彇涓虹┖锛屽垯鏌ヨ鏁版嵁搴�
+ if(list.size() < 1){
+ list = depotRepository.getDepotByCompanyId(companyId);
+ setCacheDepotList(list, companyId);
+ }
+
+ //閲嶆柊鎺掑簭
+ Collections.sort(list, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum());
+ return list;
+ }
+
+ /**
+ * 鑾峰彇缂撳瓨-鏍规嵁缁勭粐缂栫爜鍜屽簱鍖虹紪鐮佽幏鍙栦粨搴撻泦鍚�
+ * @param companyId
+ * @param deptId
+ * @return
+ */
+ public List<Depot> getCacheDepotList(String companyId, String deptId) {
+ if (StringUtils.isEmpty(deptId)) {
+ return null;
+ }
+ List<Depot> list = getCacheDepotList(companyId);
+ if(null == list || list.isEmpty()){
+ return null;
+ }
+ List<Depot> result = new ArrayList<>();
+ for (Depot depot : list) {
+ if (deptId.equals(depot.getDeptId())) {
+ result.add(depot);
+ }
+ }
+ //閲嶆柊鎺掑簭
+ Collections.sort(result, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum());
+ return result;
+ }
+
+ /**
+ * 鑾峰彇浠撳簱淇℃伅-鏍规嵁浠撳簱缂栫爜鑾峰彇缂撳瓨淇℃伅
+ * @param companyId
+ * @param depotId
+ * @return
+ */
+ public Depot getCacheDepot(String companyId, String depotId) {
+ if (StringUtils.isEmpty(depotId)) {
+ return null;
+ }
+ if(StringUtils.isEmpty(companyId)){
+ companyId = ContextUtil.getCompanyId();
+ }
+ String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depotId);
+ Depot depot = redisCache.getCacheObject(key);
+ if(null == depot){
+ depot = depotRepository.getDepotById(companyId, depotId);
+ redisCache.setCacheObject(key, depot);
+ }
+ return depot;
+ }
+
+ /**
+ * 鏍规嵁搴撳瓨淇℃伅鏇存柊浠撳簱淇℃伅
+ * @param data
+ */
+ public void updateByStore(DepotStore data) {
+
+ Depot depot = this.getCacheDepot(data.getCompanyId(), data.getDepotId());
+ if (null == depot) {
+ return;
+ }
+
+ depot.setStorageReal(data.getStorageReal());
+ depot.setDepotStatus(data.getDepotStatus());
+ depot.setFoodLevel(data.getFoodLevel());
+ depot.setFoodLocation(data.getFoodLocation());
+ depot.setFoodVariety(data.getFoodVariety());
+ depot.setFoodType(data.getFoodType());
+ depot.setFoodYear(data.getFoodYear());
+ if (null != data.getStoreDate()) {
+ depot.setStoreDate(data.getStoreDate());
+ }
+
+ this.saveDepot(depot);
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java
new file mode 100644
index 0000000..1dc77a6
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java
@@ -0,0 +1,103 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.domain.DepotStore;
+import com.fzzy.igds.repository.DepotRepository;
+import com.fzzy.igds.repository.DepotStoreRepository;
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 13:44
+ */
+@Slf4j
+@Service
+public class DepotStoreService {
+
+ @Resource
+ private DepotStoreRepository depotStoreRepository;
+ @Resource
+ private DepotRepository depotRepository;
+
+ /**
+ * JPA鍒嗛〉鏌ヨ鏁版嵁
+ *
+ * @param specification
+ * @param pageable
+ * @return
+ */
+ public Page<DepotStore> findAll(Specification<DepotStore> specification, Pageable pageable) {
+ return depotStoreRepository.findAll(specification, pageable);
+ }
+
+ /**
+ * JPA鏇存柊淇濆瓨鏁版嵁
+ *
+ * @param data
+ */
+ public void saveDepotStore(DepotStore data) {
+ if (StringUtils.isEmpty(data.getCompanyId())) {
+ data.setCompanyId(ContextUtil.getCompanyId());
+ }
+ if (StringUtils.isEmpty(data.getDeptId())) {
+ data.setDeptId(ContextUtil.subDeptId(null));
+ }
+ data.setUpdateBy(ContextUtil.getLoginUserName());
+ data.setUpdateTime(new Date());
+
+ data.setId(data.getDepotId() + "_" + DateFormatUtils.format(data.getStoreDate(), "yyyyMMddHHmmss") + "_" + DateFormatUtils.format(data.getUpdateTime(), "yyyyMMddHHmmss"));
+ data.setCreateTime(new Date());
+ data.setRemark("绯荤粺鐢熸垚");
+
+ depotStoreRepository.save(data);
+ }
+
+ /**
+ * JPA鍒犻櫎鏁版嵁
+ *
+ * @param data
+ * @return
+ */
+ public String delDepotStore(DepotStore data) {
+ depotStoreRepository.delete(data);
+ return null;
+ }
+
+ /**
+ * JPA鑾峰彇浠撳簱鏈�鍚庝竴鏉″簱瀛樻暟鎹�
+ *
+ * @param depotId
+ * @param time
+ * @return
+ */
+ public DepotStore getLastData(String depotId, Date time) {
+ List<DepotStore> list = depotStoreRepository.getDataByDepotId(depotId, time);
+ if (null == list || list.isEmpty()) {
+ return null;
+ }
+ return list.get(0);
+ }
+
+ public void addDepotStore(DepotStore store, boolean updateDepot) {
+ if (null == store.getUpdateTime()) store.setUpdateTime(new Date());
+ if (null == store.getId()) store.setId(ContextUtil.generateId());
+
+ depotStoreRepository.save(store);
+
+ if (updateDepot) {
+ depotRepository.updateDepotStorage(store.getStorageReal(), store.getDepotId());
+ }
+ }
+
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SysUserService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SysUserService.java
new file mode 100644
index 0000000..c26b31d
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SysUserService.java
@@ -0,0 +1,47 @@
+package com.fzzy.igds.service;
+
+import com.fzzy.igds.utils.ContextUtil;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.mapper.SysUserMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2024/11/22 18:03
+ */
+@Slf4j
+@Service
+public class SysUserService {
+
+ @Resource
+ private SysUserMapper userMapper;
+
+ /**
+ * 鏍规嵁缁勭粐缂栫爜锛岃幏鍙栫敤鎴峰垪琛�
+ * @param companyId
+ * @return
+ */
+ public List<SysUser> getUser(String companyId) {
+ if(StringUtils.isEmpty(companyId)){
+ companyId = ContextUtil.getCompanyId();
+ }
+ SysUser sysUser = new SysUser();
+ sysUser.setCompanyId(companyId);
+ return userMapper.selectUserList(sysUser);
+ }
+
+ /**
+ * 鏍规嵁鐧诲綍鍚嶇О锛岃幏鍙栫敤鎴蜂俊鎭�
+ * @param loginName
+ * @return
+ */
+ public SysUser getUserByLoginName(String loginName) {
+ return userMapper.selectUserByLoginName(loginName);
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
index b845309..3bd99fd 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
@@ -22,6 +22,9 @@
private static final AtomicLong sequence = new AtomicLong(0);
private static String lastTimestamp = "";
+ //鍏ㄥ眬鐢ㄦ埛瀹炴椂鍧愬湪閮ㄩ棬
+ public static Map<String, String> contextUserDept = new HashMap<>();
+
/**
* 鐢熸垚椤哄簭ID锛氬勾鏈堟棩鏃跺垎绉掓绉�(17浣�) + 搴忓垪鍙�(4浣�) = 21浣�
*
@@ -60,6 +63,36 @@
}
public static String getLoginUserName() {
- return ShiroUtils.getUserName() ;
+ SysUser user = ShiroUtils.getSysUser();
+ return null == user ? "绯荤粺" : user.getUserName();
+ }
+
+ public static SysUser getLoginUser() {
+ return ShiroUtils.getSysUser();
+ }
+
+ public static String subDeptId(SysUser user) {
+ if (null == user) {
+ user = getLoginUser();
+ }
+
+ if (null == user) {
+ return getCompanyId() + "001";
+ }
+
+ //浠庡叏灞�鑾峰彇锛屽鏋滄湁鍒欏彇鍏ㄥ眬鐨勯粯璁わ紝濡傛灉娌℃湁鍒欏彇鑷繁鎵�灞�
+ if (null != contextUserDept.get(user.getLoginName())) {
+ return contextUserDept.get(user.getLoginName());
+ }
+
+ if (null == user.getDeptId()) {
+ return user.getCompanyId();
+ }
+ return user.getDeptId().toString();
+ }
+
+ public static void updateSubDept(String userId, String deptId) {
+ if (null == deptId) return;
+ contextUserDept.put(userId, deptId);
}
}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml
index 6778bd3..3c4f5cf 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml
@@ -230,7 +230,7 @@
<ClientEvent name="onClick">view.get("#dsMain").flushAsync();
</ClientEvent>
<Property name="caption">鍒锋柊</Property>
- <Property name="exClassName">btn-q2</Property>
+ <Property name="exClassName">btn4</Property>
<Property name="width">100</Property>
<Property name="iconClass">fa fa-refresh</Property>
</ToolBarButton>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Depot.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Depot.view.xml
new file mode 100644
index 0000000..d522c31
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Depot.view.xml
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+ <Arguments/>
+ <Context/>
+ <Model>
+ <DataType name="dataTypeUser">
+ <Property name="creationType">com.ruoyi.common.core.domain.entity.SysUser</Property>
+ <PropertyDef name="loginName">
+ <Property name="dataType">String</Property>
+ <Property name="label">鐢ㄦ埛鍚�</Property>
+ </PropertyDef>
+ <PropertyDef name="userName">
+ <Property name="dataType">String</Property>
+ <Property name="label">涓枃鍚�</Property>
+ </PropertyDef>
+ </DataType>
+ </Model>
+ <View layout="padding:10">
+ <ClientEvent name="onReady">
+/**
+ * 鏌ヨ
+ */
+query = function(){
+ view.get("#dataSetdepot").flushAsync();
+}
</ClientEvent>
+ <Property name="packages">font-awesome,css-common</Property>
+ <DataSet id="dataSetdepot">
+ <Property name="dataProvider">depotPR#getData</Property>
+ <Property name="dataType">[dtDepot]</Property>
+ </DataSet>
+ <DataSet id="dataSetUser">
+ <Property name="dataType">[dataTypeUser]</Property>
+ <Property name="dataProvider">sysUserPR#loadUser</Property>
+ </DataSet>
+ <Container>
+ <Property name="className">c-param</Property>
+ <ToolBar>
+ <ToolBarButton>
+ <ClientEvent name="onClick">view.get("#dataSetdepot").insert();
+view.get("#depotdialog").show();
+view.get("#oneId").set("readOnly",false);
+view.get("#twoId").set("readOnly",false);</ClientEvent>
+ <Property name="caption">鏂板</Property>
+ <Property name="exClassName">btn1</Property>
+ <Property name="width">100</Property>
+ <Property name="iconClass">fa fa-plus</Property>
+ </ToolBarButton>
+ <ToolBarButton>
+ <ClientEvent name="onClick">var select = view.get("#dataGridDepot").get("selection");
+if(select){
+ view.get("#depotdialog").show();
+ view.get("#oneId").set("readOnly",true);
+ view.get("#twoId").set("readOnly",true);
+}else{
+ $notify("璇烽�夋嫨闇�瑕佷慨鏀圭殑浠撳簱鈥︹��");
+}</ClientEvent>
+ <Property name="caption">淇敼</Property>
+ <Property name="exClassName">btn2</Property>
+ <Property name="width">100</Property>
+ <Property name="iconClass">fa fa-pencil-square-o</Property>
+ </ToolBarButton>
+ <ToolBarButton>
+ <ClientEvent name="onClick">var select = view.get("#dataGridDepot").get("selection");
+if(select){
+ view.get("#deleteAjaxAction").set("parameter",select).execute();
+ query();
+}else{
+ $notify("璇烽�夋嫨闇�瑕佸垹闄ょ殑浠撳簱鈥︹��");
+}</ClientEvent>
+ <Property name="caption">鍒犻櫎</Property>
+ <Property name="exClassName">btn3</Property>
+ <Property name="width">100</Property>
+ <Property name="iconClass">fa fa-times</Property>
+ </ToolBarButton>
+ <ToolBarButton>
+ <Property name="caption">鍒锋柊缂撳瓨</Property>
+ <Property name="exClassName">btn4</Property>
+ <Property name="iconClass">fa fa-refresh</Property>
+ <Property name="width">100</Property>
+ <Property name="action">ajaxRefreshCache</Property>
+ </ToolBarButton>
+ <ToolBarButton>
+ <ClientEvent name="onClick">var url = "com.fzzy.igds.sys.DepotStore.d";
+var panelId = window.frameElement.getAttribute('data-id');
+window.parent.$.modal.openTab("搴撳瓨绠$悊", url, false, panelId);</ClientEvent>
+ <Property name="caption">搴撳瓨绠$悊</Property>
+ <Property name="iconClass">fa fa-book</Property>
+ <Property name="exClassName">btn1</Property>
+ <Property name="width">100</Property>
+ </ToolBarButton>
+ </ToolBar>
+ <DataGrid id="dataGridDepot" layoutConstraint="padding:8">
+ <ClientEvent name="onDataRowClick">view.get("#dataGridDepot").set("selection",arg.data);</ClientEvent>
+ <Property name="dataSet">dataSetdepot</Property>
+ <Property name="selectionMode">singleRow</Property>
+ <Property name="readOnly">true</Property>
+ <RowSelectorColumn/>
+ <RowNumColumn/>
+ <DataColumn name="id">
+ <Property name="property">id</Property>
+ <Property name="align">center</Property>
+ <Property name="width">160</Property>
+ </DataColumn>
+ <DataColumn name="name">
+ <Property name="property">name</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="depotStatus">
+ <Property name="property">depotStatus</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="foodVariety">
+ <Property name="property">foodVariety</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="foodType">
+ <Property name="property">foodType</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="foodLevel">
+ <Property name="property">foodLevel</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="storageReal">
+ <Property name="property">storageReal</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="foodYear">
+ <Property name="property">foodYear</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="foodLocation">
+ <Property name="property">foodLocation</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="storeDate">
+ <Property name="property">storeDate</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="storeKeeperName">
+ <Property name="property">storeKeeperName</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="depotType">
+ <Property name="property">depotType</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="updateBy">
+ <Property name="property">updateBy</Property>
+ <Property name="align">center</Property>
+ <Property name="width">100</Property>
+ </DataColumn>
+ <DataColumn name="updateTime">
+ <Property name="property">updateTime</Property>
+ <Property name="align">center</Property>
+ <Property name="width">160</Property>
+ </DataColumn>
+ </DataGrid>
+ </Container>
+ <Dialog id="depotdialog" layout="regionPadding:8">
+ <Property name="iconClass">fa fa-tasks</Property>
+ <Property name="caption">浠撳簱淇℃伅</Property>
+ <Property name="width">1200</Property>
+ <Property name="closeable">false</Property>
+ <Buttons>
+ <Button id="btnOK">
+ <ClientEvent name="onClick">//鍚屾椂鎻愪氦鍘嗗彶涔�
+var data = view.get("#dataSetdepot.data:#");
+view.get("#updateactionSave").execute(function(result){
+ if(result){
+ $notify(result);
+ }else{
+ self.get("parent").hide();
+ query();
+ }
+});</ClientEvent>
+ <Property name="caption">淇濆瓨</Property>
+ <Property name="iconClass">fa fa-check-circle</Property>
+ <Property name="exClassName">btn1</Property>
+ <Property name="width">120</Property>
+ </Button>
+ <Button>
+ <ClientEvent name="onClick">var cur = view.get("#dataSetdepot.data:#");
+if(cur) cur.cancel();
+self.get("parent").hide();</ClientEvent>
+ <Property name="caption">鍙栨秷</Property>
+ <Property name="exClassName">btn3</Property>
+ <Property name="iconClass">fa fa-times-circle</Property>
+ <Property name="width">120</Property>
+ </Button>
+ </Buttons>
+ <Children>
+ <FieldSet layout="padding:5">
+ <Property name="caption">鍩烘湰淇℃伅</Property>
+ <Buttons/>
+ <Children>
+ <AutoForm>
+ <Property name="dataSet">dataSetdepot</Property>
+ <Property name="readOnly">false</Property>
+ <Property name="labelSeparator"> : </Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="cols">*,*,*,*,*,*</Property>
+ <Property name="labelWidth">80</Property>
+ <AutoFormElement id="oneId" layoutConstraint="colSpan:2">
+ <Property name="name">id</Property>
+ <Property name="property">id</Property>
+ <Editor>
+ <TextEditor>
+ <Property name="blankText">-- 绯荤粺鑷姩鐢熸垚 --</Property>
+ </TextEditor>
+ </Editor>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">name</Property>
+ <Property name="property">name</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">deptId</Property>
+ <Property name="property">deptId</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">storageMax</Property>
+ <Property name="property">storageMax</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">storeType</Property>
+ <Property name="property">storeType</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">createBy</Property>
+ <Property name="property">createBy</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">depotStatus</Property>
+ <Property name="property">depotStatus</Property>
+ <Property name="trigger">autoMappingDropDown2</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">depotType</Property>
+ <Property name="property">depotType</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">createTime</Property>
+ <Property name="property">createTime</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">storeKeeperName</Property>
+ <Property name="property">storeKeeperName</Property>
+ <Property name="trigger">triggerUserList</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">orderNum</Property>
+ <Property name="property">orderNum</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">updateBy</Property>
+ <Property name="property">updateBy</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:4">
+ <Property name="name">remark</Property>
+ <Property name="property">remark</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">updateTime</Property>
+ <Property name="property">updateTime</Property>
+ <Editor/>
+ </AutoFormElement>
+ </AutoForm>
+ </Children>
+ </FieldSet>
+ <FieldSet layout="padding:5">
+ <Property name="caption">鍌ㄧ伯淇℃伅</Property>
+ <Buttons/>
+ <Children>
+ <AutoForm>
+ <Property name="dataSet">dataSetdepot</Property>
+ <Property name="readOnly">false</Property>
+ <Property name="labelSeparator"> : </Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="cols">*,*,*,*,*,*</Property>
+ <Property name="labelWidth">80</Property>
+ <AutoFormElement id="twoId" layoutConstraint="colSpan:2">
+ <Property name="name">storageReal</Property>
+ <Property name="property">storageReal</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">foodVariety</Property>
+ <Property name="property">foodVariety</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">foodType</Property>
+ <Property name="property">foodType</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">foodLevel</Property>
+ <Property name="property">foodLevel</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">foodYear</Property>
+ <Property name="property">foodYear</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">foodLocation</Property>
+ <Property name="property">foodLocation</Property>
+ <Property name="trigger">ddFoodOrigin</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">storeDate</Property>
+ <Property name="property">storeDate</Property>
+ <Editor/>
+ </AutoFormElement>
+ <Label>
+ <Property name="text"></Property>
+ <Property name="style">
+ <Property name="color">blue</Property>
+ <Property name="padding-left">50px</Property>
+ </Property>
+ </Label>
+ <Label layoutConstraint="colSpan:3">
+ <Property name="text">璇存槑锛�1銆佸疄闄呭偍閲忚皟鏁磋浣跨敤鈥滃簱瀛樼鐞嗏�濆姛鑳斤紱</Property>
+ <Property name="style">
+ <Property name="color">blue</Property>
+ <Property name="padding-left">50px</Property>
+ </Property>
+ </Label>
+ </AutoForm>
+ </Children>
+ </FieldSet>
+ <FieldSet layout="padding:5">
+ <Property name="caption">璐ㄦ淇℃伅</Property>
+ <Buttons/>
+ <Children>
+ <AutoForm>
+ <Property name="dataSet">dataSetdepot</Property>
+ <Property name="readOnly">false</Property>
+ <Property name="labelSeparator"> : </Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="cols">*,*,*,*,*,*</Property>
+ <Property name="labelWidth">80</Property>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">perWet</Property>
+ <Property name="property">perWet</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">perImpurity</Property>
+ <Property name="property">perImpurity</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">bulkWeight</Property>
+ <Property name="property">bulkWeight</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">checkDate</Property>
+ <Property name="property">checkDate</Property>
+ <Editor/>
+ </AutoFormElement>
+ <Label>
+ <Property name="text"></Property>
+ <Property name="style">
+ <Property name="color">blue</Property>
+ <Property name="padding-left">50px</Property>
+ </Property>
+ </Label>
+ <Label layoutConstraint="colSpan:3">
+ <Property name="text">璇存槑锛氬偍澶囩伯璐ㄦ淇℃伅浼氭牴鎹川閲忕鐞� 鑷姩鍚屾鏇存柊</Property>
+ <Property name="style">
+ <Property name="color">blue</Property>
+ <Property name="padding-left">50px</Property>
+ </Property>
+ </Label>
+ </AutoForm>
+ </Children>
+ </FieldSet>
+ </Children>
+ <Tools/>
+ </Dialog>
+ <UpdateAction id="updateactionSave">
+ <Property name="executingMessage">姝e湪鎵ц涓�..</Property>
+ <Property name="dataResolver">depotPR#saveOrUpdate</Property>
+ <UpdateItem>
+ <Property name="dataSet">dataSetdepot</Property>
+ <Property name="dataPath">[#current]</Property>
+ <Property name="alias">data</Property>
+ </UpdateItem>
+ </UpdateAction>
+ <AjaxAction id="deleteAjaxAction">
+ <Property name="successMessage">鍒犻櫎鎴愬姛</Property>
+ <Property name="service">depotPR#deletedepot</Property>
+ <Property name="executingMessage">姝e湪鍒犻櫎</Property>
+ </AjaxAction>
+ <AjaxAction id="ajaxRefreshCache">
+ <Property name="service">depotPR#flushCache</Property>
+ <Property name="successMessage">鍒锋柊鎴愬姛锛�</Property>
+ <Property name="confirmMessage">纭畾瑕佸埛鏂扮紦瀛樹箞锛�</Property>
+ </AjaxAction>
+ <YearDropDown id="yearDropDown1"/>
+ <DataSetDropDown id="triggerUserList">
+ <Property name="dataSet">dataSetUser</Property>
+ <Property name="property">userName</Property>
+ <Property name="assignmentMap">storeKeeperName=userName,storeKeeper=loginName</Property>
+ </DataSetDropDown>
+ <CustomDropDown id="ddFoodOrigin">
+ <Property name="minHeight">500</Property>
+ <Property name="assignmentMap">foodLocation=name</Property>
+ <Property name="minWidth">500</Property>
+ <Container layout="regionPadding:5">
+ <DataSet id="dsFoodOrigin">
+ <Property name="dataProvider">dicAreaPR#pageList</Property>
+ <Property name="parameter"></Property>
+ <Property name="pageSize">30</Property>
+ <Property name="dataType">[dtArea]</Property>
+ </DataSet>
+ <Container layout="hbox regionPadding:5">
+ <TextEditor id="key2">
+ <Property name="blankText"> -- 鍚嶇О --</Property>
+ <Property name="width">200</Property>
+ </TextEditor>
+ <Button>
+ <ClientEvent name="onClick">var key = view.get("#key2.value");
+ view.get("#dsFoodOrigin").set("parameter",{key:key}).flushAsync();</ClientEvent>
+ <Property name="caption">鏌ヨ</Property>
+ <Property name="iconClass">fa fa-search</Property>
+ </Button>
+ <Button>
+ <ClientEvent name="onClick">var data = view.get("#dsFoodOrigin.data:#");
+ if(data){
+ view.get("#ddFoodOrigin").close(data.toJSON());
+ }</ClientEvent>
+ <Property name="iconClass">fa fa-check</Property>
+ <Property name="caption">纭畾</Property>
+ </Button>
+ </Container>
+ <DataGrid>
+ <ClientEvent name="onDataRowDoubleClick">var data = view.get("#dsFoodOrigin.data:#");
+ if(data){
+ view.get("#ddFoodOrigin").close(data.toJSON());
+ }</ClientEvent>
+ <Property name="dataSet">dsFoodOrigin</Property>
+ <Property name="readOnly">true</Property>
+ <DataColumn name="code">
+ <Property name="property">code</Property>
+ <Property name="readOnly">true</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="name">
+ <ClientEvent name="onRenderCell">arg.dom.style.fontWeight = "bold";
+arg.processDefault = true;</ClientEvent>
+ <Property name="property">name</Property>
+ <Property name="readOnly">true</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ <DataColumn name="simple">
+ <Property name="property">simple</Property>
+ <Property name="readOnly">true</Property>
+ <Property name="align">center</Property>
+ </DataColumn>
+ </DataGrid>
+ <DataPilot layoutConstraint="bottom">
+ <Property name="dataSet">dsFoodOrigin</Property>
+ </DataPilot>
+ </Container>
+ </CustomDropDown>
+ <ListDropDown id="listOri">
+ <Property name="items">涓�,鍗�,瑗�,鍖�,涓滃寳,涓滃崡,瑗垮崡,瑗垮寳</Property>
+ </ListDropDown>
+ </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotPR.java
new file mode 100644
index 0000000..3e6650b
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotPR.java
@@ -0,0 +1,102 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.bstek.dorado.annotation.DataResolver;
+import com.bstek.dorado.annotation.Expose;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.service.DepotService;
+import com.fzzy.igds.utils.ContextUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author CZT
+ * @Date 2025/11/27 13:57
+ */
+@Slf4j
+@Component
+public class DepotPR {
+
+ @Resource
+ private DepotService depotService;
+
+ /**
+ * depotPR#getData
+ * @return
+ */
+ @DataProvider
+ public List<Depot> getData(){
+ return depotService.getData(null, null);
+ }
+
+ /**
+ * depotPR#saveOrUpdate
+ * @param data
+ * @return
+ */
+ @DataResolver
+ @Transactional
+ public String saveOrUpdate(Depot data) {
+
+ Depot depot = new Depot();
+ BeanUtils.copyProperties(data, depot);
+ depotService.saveDepot(depot);
+ depotService.flushCache(null);
+ return null;
+ }
+
+ /**
+ * depotPR#deleteDepot
+ * @param data
+ */
+ @Expose
+ @Transactional
+ public void deleteDepot(Depot data) {
+ Depot depot = new Depot();
+ BeanUtils.copyProperties(data, depot);
+ depotService.deleteDepot(depot);
+ }
+
+ /**
+ * depotPR#flushCache
+ */
+ @Expose
+ public void flushCache() {
+ depotService.flushCache(null);
+ }
+
+ /**
+ * ${dorado.getDataProvider("depotPR#getAllCache").getResult()}
+ * @return
+ */
+ @DataProvider
+ public List<Depot> getAllCache() {
+ return depotService.getCacheDepotList(null, ContextUtil.subDeptId(null));
+ }
+
+ /**
+ * depotPR#ajaxGetAllCache
+ * @return
+ */
+ @Expose
+ public List<Depot> ajaxGetAllCache() {
+ return depotService.getCacheDepotList(null, ContextUtil.subDeptId(null));
+ }
+
+ /**
+ * depotPR#getDepot 鑾峰彇浠撳簱淇℃伅
+ *
+ * @param depotId
+ * @return
+ */
+ @Expose
+ public Depot getDepot(String depotId) {
+ return depotService.getCacheDepot(null, depotId);
+ }
+
+}
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml
index b46488a..a04ea00 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml
@@ -163,7 +163,7 @@
<ClientEvent name="onClick">view.get("#dsMain").flushAsync();
</ClientEvent>
<Property name="caption">鍒锋柊</Property>
- <Property name="exClassName">btn-q2</Property>
+ <Property name="exClassName">btn4</Property>
<Property name="width">100</Property>
<Property name="iconClass">fa fa-refresh</Property>
</ToolBarButton>
@@ -231,16 +231,18 @@
view.get("#dialogMain").hide();
}
});</ClientEvent>
- <Property name="caption">纭畾</Property>
+ <Property name="caption">淇濆瓨</Property>
+ <Property name="iconClass">fa fa-check-circle</Property>
<Property name="exClassName">btn1</Property>
- <Property name="iconClass">fa fa-check</Property>
+ <Property name="width">120</Property>
</Button>
<Button>
<ClientEvent name="onClick">view.get("#dsMain.data:#").cancel();
self.get("parent").hide();</ClientEvent>
<Property name="caption">鍙栨秷</Property>
<Property name="exClassName">btn3</Property>
- <Property name="iconClass">fa fa-times</Property>
+ <Property name="iconClass">fa fa-times-circle</Property>
+ <Property name="width">120</Property>
</Button>
</Buttons>
<Children>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/SysUserPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SysUserPR.java
new file mode 100644
index 0000000..b4cd391
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/SysUserPR.java
@@ -0,0 +1,31 @@
+package com.fzzy.igds;
+
+import com.bstek.dorado.annotation.DataProvider;
+import com.fzzy.igds.service.SysUserService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description 鐢ㄦ埛淇℃伅
+ * @Author CZT
+ * @Date 2025/11/27 14:40
+ */
+@Component
+public class SysUserPR {
+
+ @Resource
+ private SysUserService sysUserService;
+
+ /**
+ * sysUserPR#loadUser
+ * @return
+ */
+ @DataProvider
+ public List<SysUser> loadUser() {
+ return sysUserService.getUser(null);
+ }
+
+}
\ No newline at end of file
diff --git a/fzzy-igdss-view/src/main/java/models/core.model.xml b/fzzy-igdss-view/src/main/java/models/core.model.xml
index fa3c9b0..1bfba3a 100644
--- a/fzzy-igdss-view/src/main/java/models/core.model.xml
+++ b/fzzy-igdss-view/src/main/java/models/core.model.xml
@@ -148,4 +148,289 @@
<Property name="required">false</Property>
</PropertyDef>
</DataType>
+ <DataType name="dtDepot">
+ <Property name="creationType">com.fzzy.igds.domain.Depot</Property>
+ <PropertyDef name="id">
+ <Property></Property>
+ <Property name="label">浠撳簱缂栧彿</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="companyId">
+ <Property></Property>
+ <Property name="label">缁勭粐缂栫爜</Property>
+ </PropertyDef>
+ <PropertyDef name="deptId">
+ <Property></Property>
+ <Property name="label">鎵�灞炲垎搴�</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("deptPR#getData").getResult()}</Property>
+ <Property name="keyProperty">deptId</Property>
+ <Property name="valueProperty">deptName</Property>
+ </Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="name">
+ <Property></Property>
+ <Property name="label">浠撳簱鍚嶇О</Property>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="depotType">
+ <Property></Property>
+ <Property name="label">浠撴埧绫诲瀷</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotType").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="depotStatus">
+ <Property></Property>
+ <Property name="label">浠撳簱鐘舵��</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotStatus").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="storeType">
+ <Property></Property>
+ <Property name="label">鍌ㄧ伯鏂瑰紡</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerStoreType").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="storageMax">
+ <Property name="dataType">Double</Property>
+ <Property name="label">璁捐鍌ㄩ噺</Property>
+ <Property name="displayFormat">#0.0 KG</Property>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="storageReal">
+ <Property name="dataType">Double</Property>
+ <Property name="label">瀹為檯鍌ㄩ噺</Property>
+ <Property name="displayFormat">#0.0 KG</Property>
+ <Property name="required">false</Property>
+ </PropertyDef>
+ <PropertyDef name="foodType">
+ <Property></Property>
+ <Property name="label">绮鎬ц川</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_TYPE_")}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodVariety">
+ <Property></Property>
+ <Property name="label">绮鍝佺</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_VARIETY_")}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodLevel">
+ <Property></Property>
+ <Property name="label">绮绛夌骇</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerFoodLevel").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodLocation">
+ <Property></Property>
+ <Property name="label">绮浜у湴</Property>
+ </PropertyDef>
+ <PropertyDef name="foodLocationId">
+ <Property></Property>
+ <Property name="label">绮浜у湴</Property>
+ </PropertyDef>
+ <PropertyDef name="foodYear">
+ <Property></Property>
+ <Property name="label">绮骞翠唤</Property>
+ </PropertyDef>
+ <PropertyDef name="perWet">
+ <Property name="dataType">Double</Property>
+ <Property name="label">姘村垎</Property>
+ <Property name="displayFormat">0.0 %</Property>
+ </PropertyDef>
+ <PropertyDef name="perImpurity">
+ <Property name="dataType">Double</Property>
+ <Property name="label">鏉傝川</Property>
+ <Property name="displayFormat">0.0 %</Property>
+ </PropertyDef>
+ <PropertyDef name="bulkWeight">
+ <Property name="dataType">Double</Property>
+ <Property name="label">瀹归噸</Property>
+ <Property name="displayFormat">0.0 g/L</Property>
+ </PropertyDef>
+ <PropertyDef name="storeKeeper">
+ <Property></Property>
+ <Property name="label">淇濈鍛�</Property>
+ </PropertyDef>
+ <PropertyDef name="storeKeeperName">
+ <Property></Property>
+ <Property name="label">淇濈鍛�</Property>
+ </PropertyDef>
+ <PropertyDef name="storeDate">
+ <Property name="dataType">Date</Property>
+ <Property name="label">鍏ュ簱鏃ユ湡</Property>
+ </PropertyDef>
+ <PropertyDef name="checkDate">
+ <Property name="dataType">Date</Property>
+ <Property name="label">璐ㄦ鏃ユ湡</Property>
+ </PropertyDef>
+ <PropertyDef name="remark">
+ <Property></Property>
+ <Property name="label">澶囨敞淇℃伅</Property>
+ </PropertyDef>
+ <PropertyDef name="orderNum">
+ <Property name="dataType">Integer</Property>
+ <Property name="label">椤哄簭鍙�</Property>
+ </PropertyDef>
+ <PropertyDef name="createTime">
+ <Property name="dataType">DateTime</Property>
+ <Property name="label">鍒涘缓鏃堕棿</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="createBy">
+ <Property></Property>
+ <Property name="label">鍒涘缓浜�</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="updateTime">
+ <Property name="dataType">DateTime</Property>
+ <Property name="label">鏇存柊鏃堕棿</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="updateBy">
+ <Property></Property>
+ <Property name="label">鏇存柊浜�</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ </DataType>
+ <DataType name="dtDepotStore">
+ <Property name="creationType">com.fzzy.igds.domain.DepotStore</Property>
+ <PropertyDef name="id">
+ <Property></Property>
+ </PropertyDef>
+ <PropertyDef name="companyId">
+ <Property></Property>
+ <Property name="label">缁勭粐缂栫爜</Property>
+ </PropertyDef>
+ <PropertyDef name="deptId">
+ <Property></Property>
+ <Property name="label">鎵�灞炲垎搴�</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("deptPR#getData").getResult()}</Property>
+ <Property name="keyProperty">deptId</Property>
+ <Property name="valueProperty">deptName</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>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="foodType">
+ <Property></Property>
+ <Property name="label">绮鎬ц川</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_TYPE_")}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodVariety">
+ <Property></Property>
+ <Property name="label">绮鍝佺</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_VARIETY_")}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodLevel">
+ <Property></Property>
+ <Property name="label">绮绛夌骇</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerFoodLevel").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ </PropertyDef>
+ <PropertyDef name="foodLocationId">
+ <Property></Property>
+ <Property name="label">绮浜у湴</Property>
+ </PropertyDef>
+ <PropertyDef name="foodLocation">
+ <Property></Property>
+ <Property name="label">绮浜у湴</Property>
+ </PropertyDef>
+ <PropertyDef name="foodYear">
+ <Property></Property>
+ <Property name="label">鏀惰揣骞村害</Property>
+ </PropertyDef>
+ <PropertyDef name="depotStatus">
+ <Property></Property>
+ <Property name="label">浠撳簱鐘舵��</Property>
+ <Property name="mapping">
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotStatus").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
+ </Property>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="storeDate">
+ <Property name="dataType">DateTime</Property>
+ <Property name="label">鍏ヤ粨鏃堕棿</Property>
+ </PropertyDef>
+ <PropertyDef name="fullDate">
+ <Property name="dataType">Date</Property>
+ <Property name="label">灏佷粨鏃ユ湡</Property>
+ </PropertyDef>
+ <PropertyDef name="outDate">
+ <Property name="label">鍑轰粨瀹屾垚鏃堕棿</Property>
+ <Property name="dataType">DateTime</Property>
+ </PropertyDef>
+ <PropertyDef name="storageReal">
+ <Property name="dataType">Double</Property>
+ <Property name="label">瀹為檯鍌ㄩ噺</Property>
+ <Property name="displayFormat">#,##0 KG</Property>
+ <Property name="required">true</Property>
+ </PropertyDef>
+ <PropertyDef name="remark">
+ <Property></Property>
+ <Property name="label">澶囨敞</Property>
+ </PropertyDef>
+ <PropertyDef name="createTime">
+ <Property name="dataType">DateTime</Property>
+ <Property name="label">鍒涘缓鏃堕棿</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="createBy">
+ <Property></Property>
+ <Property name="label">鍒涘缓浜�</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="updateTime">
+ <Property name="dataType">DateTime</Property>
+ <Property name="label">鏇存柊鏃堕棿</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ <PropertyDef name="updateBy">
+ <Property></Property>
+ <Property name="label">鏇存柊浜�</Property>
+ <Property name="readOnly">true</Property>
+ </PropertyDef>
+ </DataType>
</Model>
--
Gitblit v1.9.3