ソースを参照

[insert] 新增仓库管理模块接口及实现

miajio 3 週間 前
コミット
db54de14d0
58 ファイル変更3257 行追加66 行削除
  1. 15 8
      pom.xml
  2. 27 13
      warehouse-admin-component/pom.xml
  3. 0 14
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/Test.java
  4. 43 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/ApolloConfigEvent.java
  5. 90 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/NetworkCardConfig.java
  6. 62 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/approval/approval/ApprovalMessageContext.java
  7. 67 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/EmployeeComponent.java
  8. 108 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/OperatorsComponent.java
  9. 157 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/UserAccountComponent.java
  10. 25 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/EmployeeMapstruct.java
  11. 25 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/OperatorMapstruct.java
  12. 25 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/UserAccountMapstruct.java
  13. 107 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgEmployeeVo.java
  14. 110 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorVo.java
  15. 134 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgUserAccountVo.java
  16. 41 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/purchase/PurchaseOrderAdminComponent.java
  17. 67 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/purchase/SupplierPurchaseOrderComponent.java
  18. 3 3
      warehouse-admin-data/pom.xml
  19. 0 14
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/Test.java
  20. 45 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/bo/WarehouseInfoPageBo.java
  21. 30 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/AdminUserDeviceBo.java
  22. 34 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/AdminUserRoleBo.java
  23. 92 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/BaseBo.java
  24. 25 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/BasePageBo.java
  25. 27 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/vo/LongCountVo.java
  26. 62 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseDevice.java
  27. 134 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseInfo.java
  28. 146 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseProduct.java
  29. 33 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseDeviceMapper.java
  30. 41 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseInfoMapper.java
  31. 33 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseProductMapper.java
  32. 36 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/menu/WarehouseStatusEnum.java
  33. 118 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/vo/WarehouseInfoVo.java
  34. 23 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/vo/WarehouseProductCountVo.java
  35. 37 0
      warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseDeviceMapper.xml
  36. 101 0
      warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseInfoMapper.xml
  37. 47 0
      warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseProductMapper.xml
  38. 161 0
      warehouse-admin-data/src/main/test/com/warehouse/admin/CodeGenerator.java
  39. 0 14
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/Test.java
  40. 22 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseDeviceService.java
  41. 35 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseInfoService.java
  42. 23 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseProductService.java
  43. 24 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseDeviceServiceImpl.java
  44. 112 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseInfoServiceImpl.java
  45. 25 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseProductServiceImpl.java
  46. 59 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/BaseController.java
  47. 9 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/BuildUserInfo.java
  48. 35 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/OssController.java
  49. 29 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/mapstruct/AdminUserInfoMapstruct.java
  50. 177 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/controller/WarehouseController.java
  51. 46 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/mapstruct/WarehouseMapStruct.java
  52. 41 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseAddRequest.java
  53. 24 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseDeleteRequest.java
  54. 22 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseOperatorListRequest.java
  55. 41 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseSearchForPageRequest.java
  56. 30 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseStatusSettingRequest.java
  57. 41 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseUpdateRequest.java
  58. 131 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/response/WarehouseInfoSearchForPageResponse.java

+ 15 - 8
pom.xml

@@ -29,9 +29,10 @@
         <springboot.version>3.1.5</springboot.version>
         <mapstruct.version>1.4.2.Final</mapstruct.version>
         <bluecat.common.version>1.1.0-SNAPSHOT</bluecat.common.version>
-        <prism-auth-core.version>1.9.0-SNAPSHOT</prism-auth-core.version>
-        <prism-auth-support.version>1.9.0-SNAPSHOT</prism-auth-support.version>
+        <prism-auth-core.version>1.10.3-SNAPSHOT</prism-auth-core.version>
+        <prism-auth-support.version>1.10.3-SNAPSHOT</prism-auth-support.version>
         <yr-supply-chain-api.version>1.1.8-SNAPSHOT</yr-supply-chain-api.version>
+        <purchase.support.version>1.0.3-SNAPSHOT</purchase.support.version>
         <dubbo.version>3.2.9</dubbo.version>
         <nacos.version>2.2.4</nacos.version>
     </properties>
@@ -145,6 +146,12 @@
                 <artifactId>yr-supply-chain-api</artifactId>
                 <version>${yr-supply-chain-api.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.yr.purchase.support</groupId>
+                <artifactId>purchase-support</artifactId>
+                <version>${purchase.support.version}</version>
+            </dependency>
+
             <!-- 内部引用结束 -->
             <!-- tools begin -->
             <dependency>
@@ -207,8 +214,8 @@
                 <!-- 开发环境固定1.0.2 -->
                 <revision>1.0.0-SNAPSHOT</revision>
                 <bluecat.common.version>1.1.0-SNAPSHOT</bluecat.common.version>
-                <prism-auth-support.version>1.9.0-SNAPSHOT</prism-auth-support.version>
-                <prism-auth-core.version>1.9.0-SNAPSHOT</prism-auth-core.version>
+                <prism-auth-support.version>1.10.3-SNAPSHOT</prism-auth-support.version>
+                <prism-auth-core.version>1.10.3-SNAPSHOT</prism-auth-core.version>
                 <yr-supply-chain-api.version>1.1.8-SNAPSHOT</yr-supply-chain-api.version>
             </properties>
             <distributionManagement>
@@ -225,8 +232,8 @@
             <properties>
                 <revision>1.0.0-SNAPSHOT</revision>
                 <bluecat.common.version>1.1.0-SNAPSHOT</bluecat.common.version>
-                <prism-auth-support.version>1.9.0-SNAPSHOT</prism-auth-support.version>
-                <prism-auth-core.version>1.9.0-SNAPSHOT</prism-auth-core.version>
+                <prism-auth-support.version>1.10.3-SNAPSHOT</prism-auth-support.version>
+                <prism-auth-core.version>1.10.3-SNAPSHOT</prism-auth-core.version>
                 <yr-supply-chain-api.version>1.1.8-SNAPSHOT</yr-supply-chain-api.version>
             </properties>
             <distributionManagement>
@@ -242,8 +249,8 @@
             <properties>
                 <revision>1.0.0-RELEASE</revision>
                 <bluecat.common.version>1.1.0-RELEASE</bluecat.common.version>
-                <prism-auth-support.version>1.9.0-RELEASE</prism-auth-support.version>
-                <prism-auth-core.version>1.9.0-RELEASE</prism-auth-core.version>
+                <prism-auth-support.version>1.10.3-RELEASE</prism-auth-support.version>
+                <prism-auth-core.version>1.10.3-RELEASE</prism-auth-core.version>
                 <yr-supply-chain-api.version>1.1.8-RELEASE</yr-supply-chain-api.version>
             </properties>
             <distributionManagement>

+ 27 - 13
warehouse-admin-component/pom.xml

@@ -14,6 +14,18 @@
 	<packaging>jar</packaging>
 
 	<dependencies>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.dubbo</groupId>
+			<artifactId>dubbo-common</artifactId>
+			<version>3.2.9</version>
+			<scope>compile</scope>
+		</dependency>
+
+
 		<!-- apollo -->
 		<dependency>
 			<groupId>com.ctrip.framework.apollo</groupId>
@@ -40,22 +52,24 @@
 			<artifactId>commons-codec</artifactId>
 			<version>1.10</version>
 		</dependency>
+
+		<!-- 外部dubbo接口 -->
 		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpclient</artifactId>
-			<version>4.5.10</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>commons-logging</artifactId>
-					<groupId>commons-logging</groupId>
-				</exclusion>
-			</exclusions>
+			<groupId>com.yr.prism</groupId>
+			<artifactId>prism-auth-support</artifactId>
+		</dependency>
+		<!--<dependency>
+			<groupId>com.yr.crm</groupId>
+			<artifactId>crm-support</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.13.0</version>
-			<scope>compile</scope>
+			<groupId>com.yr.pay.support</groupId>
+			<artifactId>pay-support</artifactId>
+		</dependency>-->
+		<dependency>
+			<groupId>com.yr.purchase.support</groupId>
+			<artifactId>purchase-support</artifactId>
 		</dependency>
+		<!-- apollo -->
 	</dependencies>
 </project>

+ 0 - 14
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/Test.java

@@ -1,14 +0,0 @@
-/**
- * 湖南有人网络有限公司
- **/
-package com.yr.warehouse.admin.component;
-
-/**
- * @ClassName Test
- * @Description: 类描述
- * @Author: pete
- * @CreateDate: 2025/9/12 15:56	
- * @Version: 1.0
- */
-public class Test {
-}

+ 43 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/ApolloConfigEvent.java

@@ -0,0 +1,43 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.apollo;
+
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @ClassName ApolloConfigEvnt
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/6/7 11:58
+ * @Version: 1.0
+ */
+@Data
+@Configuration
+public class ApolloConfigEvent {
+
+    @Value("${app.id}")
+    private String appId;
+
+    /**
+     * 总部运营商id
+     */
+    @ApolloJsonValue("${org.operator.super:{\"id\":1,\"operatorName\":\"有人总\"}}")
+    private OrgOperatorVo superOperator;
+
+    /**
+     * 设备离线告警机器人
+     */
+    @ApolloJsonValue("${wechat.work.device.offline.alarm:'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4b3474d6-9a39-4bd0-a60b-0287a420f953'}")
+    private String deviceOffLineAlarm;
+
+    /**
+     * 设备摇机告警机器人
+     */
+    @ApolloJsonValue("${wechat.work.device.shake.alarm:'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=13f7e412-edec-4245-b435-1ccc6e20db3d'}")
+    private String deviceShakeAlarm;
+}

+ 90 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/NetworkCardConfig.java

@@ -0,0 +1,90 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.apollo;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.yr.bluecat.common.entity.utils.MD5Util;
+import com.yr.bluecat.common.entity.utils.StringUtils;
+import lombok.Data;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @ClassName NetworkCardConfig
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/7/31 16:51
+ * @Version: 1.0
+ */
+@Data
+@Configuration
+public class NetworkCardConfig {
+
+    /**
+     * apiKey
+     */
+    @ApolloJsonValue("${ec.upiot.net.apiKey:'a3b8cd8c5ea5e808133275bab373215c25de0d81'}")
+    private String apiKey;
+
+    /**
+     * apiSecret
+     */
+    @ApolloJsonValue("${ec.upiot.net.apiSecret:'3LZdtyiTbf'}")
+    private String apiSecret;
+
+    /**
+     * 域名
+     */
+    @ApolloJsonValue("${ec.upiot.net.domain:'http://ec.upiot.net/api/v2'}")
+    private String domain;
+
+    /**
+     * 获取卡列表接口
+     */
+    @ApolloJsonValue("${ec.upiot.net.cardListUrl:'/%s/batch/card/info/?_sign=%s'}")
+    private String cardListUrl;
+
+    /**
+     * 获取卡每日用量接口
+     * http://ec.upiot.net/api/v2/{API_KEY}/card/<msisdn|iccid|imsi>/usagelog/<month>/delta/?_sign={SIGN}
+     * 201902表示2019年2月。
+     */
+    @ApolloJsonValue("${ec.upiot.net.delta:'/%s/card/%s/usagelog/%s/delta/?_sign=%s'}")
+    private String deltaUrl;
+
+    /**
+     * 机卡分离
+     * http://ec.upiot.net/api/v2/{API_KEY}/card/<msisdn|iccid|imsi>/stop_reason/?_sign={SIGN}
+     */
+    @ApolloJsonValue("${ec.upiot.net.stopReason:'/%s/card/%s/stop_reason/?_sign=%s'}")
+    private String stopReasonUrl;
+
+    /**
+     * 获取卡列表接口地址
+     *
+     * @param requestBody
+     * @return
+     */
+    public String getCardListUrl(Map<String, Object> requestBody) {
+        String sign = JSON.toJSONString(requestBody) + apiSecret;
+        String md5Str = MD5Util.getMd5Str(sign);
+        return domain + cardListUrl.formatted(apiKey, md5Str);
+    }
+
+    public String getDeltaUrl(String iccid, String date) {
+        String month = StringUtils.isNotBlank(date) ? date : DateUtil.format(new Date(), DatePattern.SIMPLE_MONTH_FORMAT);
+        String md5Str = MD5Util.getMd5Str(apiSecret);
+        return domain + deltaUrl.formatted(apiKey, iccid, month, md5Str);
+    }
+
+    public String getStopReasonUrl(String iccid) {
+        String md5Str = MD5Util.getMd5Str(apiSecret);
+        return domain + stopReasonUrl.formatted(apiKey, iccid, md5Str);
+    }
+}

+ 62 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/approval/approval/ApprovalMessageContext.java

@@ -0,0 +1,62 @@
+package com.yr.warehouse.admin.component.approval.approval;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 审批消息上下文对象
+ */
+@Data
+public class ApprovalMessageContext implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 审批单号
+     */
+    private String approvalOrderNumber;
+
+    /**
+     * 业务单号
+     */
+    private String businessOrderNumber;
+
+    /**
+     * 审批内容
+     */
+    private String content;
+
+    /**
+     * 审批状态
+     */
+    private String status;
+
+    /**
+     * 审批人id
+     */
+    private Long approvalUserId;
+
+    /**
+     * 审批人名称
+     */
+    private String approvalUserName;
+
+    /**
+     * 审批时间
+     */
+    private LocalDateTime approvedDateTime;
+
+    public String toJsonString() {
+        return JSONObject.toJSONString(this);
+    }
+
+    public static ApprovalMessageContext parse(String jsonString) {
+        return JSONObject.parseObject(jsonString, ApprovalMessageContext.class);
+    }
+
+}

+ 67 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/EmployeeComponent.java

@@ -0,0 +1,67 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth;
+
+import com.google.common.collect.Lists;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.prism.auth.support.EmployeeQueryApi;
+import com.yr.prism.auth.support.request.EmployeeQueryRequest;
+import com.yr.prism.auth.support.response.OrgEmployeeResponse;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import com.yr.warehouse.admin.component.auth.mapstruct.EmployeeMapstruct;
+import com.yr.warehouse.admin.component.auth.vo.OrgEmployeeVo;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName EmployeeCommont
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/6/7 11:53
+ * @Version: 1.0
+ */
+@Component
+public class EmployeeComponent {
+
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0/*, url="dubbo://127.0.0.1:21887"*/)
+    private EmployeeQueryApi employeeQueryApi;
+
+    public OrgEmployeeVo getEmployeeInfo(Long operatorId, Long employeeId) {
+        return getEmployeeInfoByIds(operatorId, Lists.newArrayList(employeeId)).get(employeeId);
+    }
+
+    /**
+     * 批量查询员工信息
+     *
+     * @param operatorId
+     * @param employeeIds
+     * @return
+     */
+    public Map<Long, OrgEmployeeVo> getEmployeeInfoByIds(Long operatorId, List<Long> employeeIds) {
+        if (CollectionUtils.isEmpty(employeeIds)) {
+            return new HashMap<>();
+        }
+        EmployeeQueryRequest employeeQueryRequest = new EmployeeQueryRequest();
+        employeeQueryRequest.setAppId(apolloConfigEvent.getAppId());
+        employeeQueryRequest.setOperatorId(operatorId);
+        employeeQueryRequest.setIds(employeeIds);
+        Result<List<OrgEmployeeResponse>> orgEmployeeResponseResult = employeeQueryApi.queryEmployee(employeeQueryRequest);
+        if (Objects.isNull(orgEmployeeResponseResult.getData())) {
+            return new HashMap<>();
+        }
+        List<OrgEmployeeVo> orgEmployeeVo = EmployeeMapstruct.MAPSTRUCT.toOrgEmployeeVo(orgEmployeeResponseResult.getData());
+        return orgEmployeeVo.stream().collect(Collectors.toMap(OrgEmployeeVo::getId, orgEmployeeVo1 -> orgEmployeeVo1));
+    }
+}

+ 108 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/OperatorsComponent.java

@@ -0,0 +1,108 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth;
+
+import com.google.common.collect.Lists;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.prism.auth.support.OperatorsQueryApi;
+import com.yr.prism.auth.support.request.OrgOperatorQueryRequest;
+import com.yr.prism.auth.support.response.OrgOperatorResponse;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import com.yr.warehouse.admin.component.auth.mapstruct.OperatorMapstruct;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName OperatorsComponent
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/6/12 14:54
+ * @Version: 1.0
+ */
+@Component
+public class OperatorsComponent {
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0/*, url="dubbo://127.0.0.1:21887"*/)
+    private OperatorsQueryApi operatorsQueryApi;
+
+
+    /**
+     * 查询顶级运营商信息
+     *
+     * @return
+     */
+    public OrgOperatorVo querySupperOperator() {
+        Long headquartersId = apolloConfigEvent.getSuperOperator().getId();
+        return queryOperatorByIdList(Lists.newArrayList(headquartersId)).get(headquartersId);
+    }
+
+    /**
+     * 通过id查询运营商信息
+     */
+    public OrgOperatorVo queryOperatorById(Long id) {
+        return queryOperatorByIdList(Lists.newArrayList(id)).get(id);
+    }
+
+    /**
+     * 通过id查询运营商信息
+     */
+    public Map<Long, OrgOperatorVo> queryOperatorByIdList(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return new HashMap<>();
+        }
+        OrgOperatorQueryRequest request = new OrgOperatorQueryRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setIds(ids.stream().distinct().toList());
+        Result<List<OrgOperatorResponse>> result = operatorsQueryApi.queryOperator(request);
+        List<OrgOperatorVo> orgOperatorResponse = OperatorMapstruct.MAPSTRUCT.toOrgOperatorResponse(result.getData());
+        return orgOperatorResponse.stream().collect(Collectors.toMap(OrgOperatorVo::getId, vo -> vo, (v1, v2) -> v1));
+    }
+
+
+    /**
+     * 查询运营商父级和平级(不包含自身)
+     *
+     * @param operatorId
+     * @return
+     */
+    public List<OrgOperatorVo> queryOperatorParentChildren(Long operatorId) {
+        return getOrgOperatorVos(operatorId, false, true);
+    }
+
+
+    /**
+     * 查询运营商子级和平级(不包含自身)
+     *
+     * @param operatorId
+     * @return
+     */
+    public List<OrgOperatorVo> queryOperatorChildrenAndSelfLevel(Long operatorId) {
+        return getOrgOperatorVos(operatorId, true, false);
+    }
+
+    private List<OrgOperatorVo> getOrgOperatorVos(Long operatorId, boolean needChild, boolean needParent) {
+        if (Objects.isNull(operatorId)) {
+            return new ArrayList<>();
+        }
+        OrgOperatorQueryRequest request = new OrgOperatorQueryRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setIds(Lists.newArrayList(operatorId));
+        request.setNeedChild(needChild);
+        request.setNeedParent(needParent);
+        request.setNeedParentChild(true);
+        Result<List<OrgOperatorResponse>> result = operatorsQueryApi.queryOperator(request);
+        List<OrgOperatorVo> orgOperatorResponse = OperatorMapstruct.MAPSTRUCT.toOrgOperatorResponse(result.getData());
+        return orgOperatorResponse.stream().filter(vo -> !Objects.equals(vo.getId(), operatorId)).toList();
+    }
+
+
+}

+ 157 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/UserAccountComponent.java

@@ -0,0 +1,157 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth;
+
+import com.google.common.collect.Lists;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.prism.auth.support.UserAdminApi;
+import com.yr.prism.auth.support.UserQueryApi;
+import com.yr.prism.auth.support.request.CheckPasswordRequest;
+import com.yr.prism.auth.support.request.UserDeviceRequest;
+import com.yr.prism.auth.support.request.UserQueryRequest;
+import com.yr.prism.auth.support.response.OrgUserAccountResponse;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import com.yr.warehouse.admin.component.auth.mapstruct.UserAccountMapstruct;
+import com.yr.warehouse.admin.component.auth.vo.OrgUserAccountVo;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName EmployeeCommont
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/6/7 11:53
+ * @Version: 1.0
+ */
+@Component
+public class UserAccountComponent {
+
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0 /*, url="dubbo://127.0.0.1:21887" */)
+    private UserQueryApi userQueryApi;
+
+    @DubboReference(timeout = 5000, retries = 0 /*, url="dubbo://127.0.0.1:21887" */)
+    private UserAdminApi userAdminApi;
+
+
+    /**
+     * 批量查询员工信息
+     *
+     * @param uidList
+     * @return
+     */
+    public Map<Long, OrgUserAccountVo> getUserInfoByIds(List<Long> uidList) {
+        return getOrgUserAccountVoMap(uidList, Boolean.FALSE, Boolean.FALSE);
+    }
+
+    /**
+     * 查询用户信息及用户设备
+     *
+     * @param uid
+     * @return
+     */
+    public OrgUserAccountVo getUserInfoAndDeviceById(Long uid) {
+        Map<Long, OrgUserAccountVo> accountVoMap = getOrgUserAccountVoMap(Lists.newArrayList(uid), Boolean.TRUE, Boolean.FALSE);
+        return accountVoMap.get(uid);
+    }
+
+    /**
+     * 查询用户基本信息
+     *
+     * @param uid
+     * @return
+     */
+    public OrgUserAccountVo getUserInfoById(Long uid) {
+        Map<Long, OrgUserAccountVo> accountVoMap = getOrgUserAccountVoMap(Lists.newArrayList(uid), Boolean.FALSE, Boolean.FALSE);
+        return accountVoMap.get(uid);
+    }
+
+    /**
+     * 查询用户基本信息
+     *
+     * @param uid
+     * @return
+     */
+    public OrgUserAccountVo getUserInfoById(Long uid, Boolean needGoodsRef) {
+        Map<Long, OrgUserAccountVo> accountVoMap = getOrgUserAccountVoMap(Lists.newArrayList(uid), Boolean.FALSE, needGoodsRef);
+        return accountVoMap.get(uid);
+    }
+
+    /**
+     * 添加用户设备
+     *
+     * @param accountId
+     * @param deviceIdList
+     * @param createUid
+     */
+    public void addUserDevice(Long accountId, List<Long> deviceIdList, Long createUid) {
+        UserDeviceRequest request = new UserDeviceRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setAccountId(accountId);
+        request.setDeviceIdList(deviceIdList);
+        request.setOperatorUid(createUid);
+        userAdminApi.addDevice(request);
+    }
+
+    /**
+     * 删除用户设备
+     *
+     * @param accountId
+     * @param deviceIdList
+     * @param createUid
+     */
+    public void deleteUserDevice(Long accountId, List<Long> deviceIdList, Long createUid) {
+        UserDeviceRequest request = new UserDeviceRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setAccountId(accountId);
+        request.setDeviceIdList(deviceIdList);
+        request.setOperatorUid(createUid);
+        userAdminApi.deleteDevice(request);
+    }
+
+
+    private Map<Long, OrgUserAccountVo> getOrgUserAccountVoMap(List<Long> uidList, Boolean needDevice, Boolean needGoodsRef) {
+        if (CollectionUtils.isEmpty(uidList)) {
+            return new HashMap<>();
+        }
+        UserQueryRequest request = new UserQueryRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setUidList(uidList);
+        request.setNeedDevice(needDevice);
+        if (Objects.nonNull(needGoodsRef)) {
+            request.setNeedGoodsRef(needGoodsRef);
+        }
+        Result<List<OrgUserAccountResponse>> result = userQueryApi.queryUserIfo(request);
+        if (Objects.isNull(result.getData())) {
+            return new HashMap<>();
+        }
+        List<OrgUserAccountVo> userAccountVos = UserAccountMapstruct.MAPSTRUCT.toOrgUserAccountVo(result.getData());
+        return userAccountVos.stream().collect(Collectors.toMap(OrgUserAccountVo::getAccountId, Function.identity()));
+    }
+
+    /**
+     * 校验账号密码
+     *
+     * @param accountId
+     * @param password
+     */
+    public void checkPassword(Long accountId, String password) {
+        CheckPasswordRequest request = new CheckPasswordRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setAccountId(accountId);
+        request.setPassword(password);
+        userQueryApi.checkPassword(request);
+    }
+}

+ 25 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/EmployeeMapstruct.java

@@ -0,0 +1,25 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.mapstruct;
+
+import com.yr.prism.auth.support.response.OrgEmployeeResponse;
+import com.yr.warehouse.admin.component.auth.vo.OrgEmployeeVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName AdminUserInfoMapstruct
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 11:03
+ * @Version: 1.0
+ */
+@Mapper
+public interface EmployeeMapstruct {
+    EmployeeMapstruct MAPSTRUCT = Mappers.getMapper(EmployeeMapstruct.class);
+
+    List<OrgEmployeeVo> toOrgEmployeeVo(List<OrgEmployeeResponse> data);
+}

+ 25 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/OperatorMapstruct.java

@@ -0,0 +1,25 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.mapstruct;
+
+import com.yr.prism.auth.support.response.OrgOperatorResponse;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName AdminUserInfoMapstruct
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 11:03
+ * @Version: 1.0
+ */
+@Mapper
+public interface OperatorMapstruct {
+    OperatorMapstruct MAPSTRUCT = Mappers.getMapper(OperatorMapstruct.class);
+
+    List<OrgOperatorVo> toOrgOperatorResponse(List<OrgOperatorResponse> data);
+}

+ 25 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/UserAccountMapstruct.java

@@ -0,0 +1,25 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.mapstruct;
+
+import com.yr.prism.auth.support.response.OrgUserAccountResponse;
+import com.yr.warehouse.admin.component.auth.vo.OrgUserAccountVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName AdminUserInfoMapstruct
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 11:03
+ * @Version: 1.0
+ */
+@Mapper
+public interface UserAccountMapstruct {
+    UserAccountMapstruct MAPSTRUCT = Mappers.getMapper(UserAccountMapstruct.class);
+
+    List<OrgUserAccountVo> toOrgUserAccountVo(List<OrgUserAccountResponse> data);
+}

+ 107 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgEmployeeVo.java

@@ -0,0 +1,107 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @ClassName OrgOperatorAddRequest
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/22 17:03
+ * @Version: 1.0
+ */
+@Data
+public class OrgEmployeeVo {
+    /**
+     * 员工id
+     */
+    private Long id;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 部门id
+     */
+    private Long departmentId;
+
+    /**
+     * 部门链
+     */
+    private String departmentChain;
+
+    /**
+     * 部门链名称
+     */
+    private String departmentChainName;
+
+    /**
+     * 员工名称
+     */
+    private String employeeName;
+
+    /**
+     * 员工别名
+     */
+    private String alias;
+
+    /**
+     * 手机号
+     */
+    private String mobile;
+
+    /**
+     * 性别:0:未知|1、男|2、女
+     */
+    private Integer sex;
+
+    /**
+     * 身份证
+     */
+    private String idCard;
+
+    /**
+     * 生日
+     */
+    private LocalDateTime birthday;
+
+    /**
+     * 职位
+     */
+    private String position;
+
+    /**
+     * 状态:NORMAL:正常|DISABLE:禁用
+     */
+    private String status;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人名称
+     */
+    private String createName;
+
+    /**
+     * 账号id
+     */
+    private Long accountId;
+
+    /**
+     * 账号
+     */
+    private String account;
+    /**
+     * 账号昵称
+     */
+    private String accountNick;
+}

+ 110 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorVo.java

@@ -0,0 +1,110 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @ClassName OrgOperatorAddRequest
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/22 17:03
+ * @Version: 1.0
+ */
+@Data
+public class OrgOperatorVo {
+    /**
+     * 运营商id
+     */
+    private Long id;
+    /**
+     * 运营商名称
+     */
+    private String operatorName;
+
+    /**
+     * 运营商编号
+     */
+    private String operatorNumber;
+
+    /**
+     * 运营商父级id
+     */
+    private Long operatorParentId;
+
+    /**
+     * 运营商Id链
+     */
+    private String operatorChain;
+
+    /**
+     * 运营商名称链
+     */
+    private String operatorChainName;
+
+    /**
+     * 负责人名称
+     */
+    private String personInCharge;
+
+    /**
+     * 负责人联系电话
+     */
+    private String mobile;
+
+    /**
+     * 联系邮箱
+     */
+    private String email;
+
+    /**
+     * 详细地址
+     */
+    private String detailedAddress;
+
+    /**
+     * logo图片地址
+     */
+    private String logo;
+
+    /**
+     * 状态:NORMAL:正常|DISABLE:禁用
+     */
+    private String status;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人uid
+     */
+    private Long createUid;
+
+    /**
+     * 创建人名称
+     */
+    private String createName;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime modifyTime;
+
+    /**
+     * 修改人uid
+     */
+    private Long modifyUid;
+
+    /**
+     * 修改人名称
+     */
+    private String modifyName;
+}

+ 134 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgUserAccountVo.java

@@ -0,0 +1,134 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.vo;
+
+import com.yr.prism.auth.support.response.AccountAttachGoodsSettingResponse;
+import com.yr.prism.auth.support.response.OrgAccountDeviceResponse;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @ClassName OrgOperatorAddRequest
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/22 17:03
+ * @Version: 1.0
+ */
+@Data
+public class OrgUserAccountVo {
+    /**
+     * 账号id
+     */
+    private Long accountId;
+
+    /**
+     * 账号
+     */
+    private String account;
+    /**
+     * 账号昵称
+     */
+    private String accountNick;
+    /**
+     * 员工id
+     */
+    private Long employeeId;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+    /**
+     * 部门id
+     */
+    private Long departmentId;
+
+    /**
+     * 部门链
+     */
+    private String departmentChain;
+
+    /**
+     * 部门链名称
+     */
+    private String departmentChainName;
+
+    /**
+     * 员工名称
+     */
+    private String employeeName;
+
+    /**
+     * 员工别名
+     */
+    private String alias;
+
+    /**
+     * 手机号
+     */
+    private String mobile;
+
+    /**
+     * 性别:0:未知|1、男|2、女
+     */
+    private Integer sex;
+
+    /**
+     * 身份证
+     */
+    private String idCard;
+
+    /**
+     * 生日
+     */
+    private LocalDateTime birthday;
+
+    /**
+     * 职位
+     */
+    private String position;
+
+    /**
+     * 状态:NORMAL:正常|DISABLE:禁用
+     */
+    private String status;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人名称
+     */
+    private String createName;
+
+    /**
+     * 用户设备
+     */
+    private List<OrgAccountDeviceResponse> deviceList;
+
+    /**
+     * 数据系数
+     */
+    private BigDecimal dataCoefficient;
+
+    /**
+     * 设备系数
+     */
+    private BigDecimal deviceCoefficient;
+
+    /**
+     * 关联商品
+     */
+    private List<AccountAttachGoodsSettingResponse> goodsRefList;
+
+}

+ 41 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/purchase/PurchaseOrderAdminComponent.java

@@ -0,0 +1,41 @@
+package com.yr.warehouse.admin.component.purchase;
+
+import com.yr.bluecat.common.entity.request.AdminUserRequest;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.purchase.support.PurchaseOrderAdminApi;
+import com.yr.purchase.support.request.PurchaseOrderPickedRequest;
+import com.yr.purchase.support.request.PurchaseOrderQueryRequest;
+import com.yr.purchase.support.response.PurchaseOrderInfoDto;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 采购单服务组件
+ */
+@Component
+public class PurchaseOrderAdminComponent {
+
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0/*, url="dubbo://127.0.0.1:21887"*/)
+    private PurchaseOrderAdminApi purchaseOrderAdminApi;
+
+    public void purchaseOrderPicked(String orderNo, AdminUserRequest adminUserRequest) {
+        PurchaseOrderPickedRequest purchaseOrderPickedRequest = new PurchaseOrderPickedRequest();
+        purchaseOrderPickedRequest.setOrderNo(orderNo);
+        purchaseOrderAdminApi.purchaseOrderPicked(purchaseOrderPickedRequest, adminUserRequest);
+    }
+
+    public List<PurchaseOrderInfoDto> purchaseOrderQuery(List<String> orderNos) {
+        PurchaseOrderQueryRequest request = new PurchaseOrderQueryRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setOrderNoList(orderNos);
+        Result<List<PurchaseOrderInfoDto>> dtoResult = purchaseOrderAdminApi.purchaseOrderQuery(request);
+        return dtoResult.getData();
+    }
+}

+ 67 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/purchase/SupplierPurchaseOrderComponent.java

@@ -0,0 +1,67 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.purchase;
+
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.purchase.support.SupplierPurchaseOrderApi;
+import com.yr.purchase.support.request.SupplierPurchaseGoodsPriceQuery;
+import com.yr.purchase.support.request.SupplierPurchaseOrderCancelRequest;
+import com.yr.purchase.support.request.SupplierPurchaseOrderQuery;
+import com.yr.purchase.support.response.SupplierPurchaseGoodsPriceDto;
+import com.yr.purchase.support.response.SupplierPurchaseOrderGoodsDto;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName SupplierPurchaseOrderComponent
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2025/5/20 15:31
+ * @Version: 1.0
+ */
+@Component
+public class SupplierPurchaseOrderComponent {
+
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0/*, url="dubbo://127.0.0.1:21887"*/)
+    private SupplierPurchaseOrderApi supplierPurchaseOrderApi;
+
+    public List<SupplierPurchaseOrderGoodsDto> supplierPurchaseOrderGoodsList(String orderNo) {
+        SupplierPurchaseOrderQuery request = new SupplierPurchaseOrderQuery();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setOrderNo(orderNo);
+        Result<List<SupplierPurchaseOrderGoodsDto>> dtoResult = supplierPurchaseOrderApi.supplierPurchaseOrderGoodsList(request);
+        return dtoResult.getData();
+    }
+
+    public List<SupplierPurchaseGoodsPriceDto> supplierPurchaseOrderGoodsList(List<Integer> goodsList) {
+        SupplierPurchaseGoodsPriceQuery request = new SupplierPurchaseGoodsPriceQuery();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setGoodsIds(goodsList);
+        Result<List<SupplierPurchaseGoodsPriceDto>> result = supplierPurchaseOrderApi.supplierPurchaseGoodsPriceList(request);
+        return result.getData();
+    }
+
+
+    public Map<String, SupplierPurchaseGoodsPriceDto> supplierPurchaseOrderGoodsMap(List<Integer> goodsList) {
+        List<SupplierPurchaseGoodsPriceDto> purchaseGoodsPriceDtos = supplierPurchaseOrderGoodsList(goodsList);
+        return purchaseGoodsPriceDtos.stream().collect(Collectors.toMap(SupplierPurchaseGoodsPriceDto::getGoodsCode, Function.identity()));
+    }
+
+    public void supplierPurchaseOrderCancel(String purchaseOrderNo) {
+        SupplierPurchaseOrderCancelRequest request = new SupplierPurchaseOrderCancelRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setPurchaseOrderNo(purchaseOrderNo);
+        supplierPurchaseOrderApi.supplierPurchaseOrderCancel(request);
+    }
+}

+ 3 - 3
warehouse-admin-data/pom.xml

@@ -36,9 +36,9 @@
         </dependency>
 
         <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.18</version>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <version>8.2.0</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>

+ 0 - 14
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/Test.java

@@ -1,14 +0,0 @@
-/**
- * 湖南有人网络有限公司
- **/
-package com.yr.warehouse.admin.data;
-
-/**
- * @ClassName Test
- * @Description: 类描述
- * @Author: pete
- * @CreateDate: 2025/9/12 15:54	
- * @Version: 1.0
- */
-public class Test {
-}

+ 45 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/bo/WarehouseInfoPageBo.java

@@ -0,0 +1,45 @@
+package com.yr.warehouse.admin.data.bo;
+
+
+import com.yr.warehouse.admin.data.common.bo.BasePageBo;
+import com.yr.warehouse.admin.data.menu.WarehouseStatusEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 仓库分页bo
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class WarehouseInfoPageBo extends BasePageBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 仓库编码
+     */
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库状态
+     * ENABLE 启用
+     * DISABLED 禁用
+     */
+    private List<String> statusList;
+
+}

+ 30 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/AdminUserDeviceBo.java

@@ -0,0 +1,30 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.data.common.bo;
+
+import lombok.Data;
+
+/**
+ * @ClassName AdminUserDevice
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/23 16:19
+ * @Version: 1.0
+ */
+@Data
+public class AdminUserDeviceBo {
+
+    /**
+     * 设备id
+     */
+    private Long deviceId;
+    /**
+     * 设备编号
+     */
+    private String deviceNumber;
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+}

+ 34 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/AdminUserRoleBo.java

@@ -0,0 +1,34 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.data.common.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户资源信息
+ *
+ * @ClassName SourceContex
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/22 19:18
+ * @Version: 1.0
+ */
+@Data
+public class AdminUserRoleBo implements Serializable {
+    /**
+     * 角色id
+     */
+    private Long roleId;
+    /**
+     * 角色编码
+     */
+    private String roleCode;
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+}

+ 92 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/BaseBo.java

@@ -0,0 +1,92 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.data.common.bo;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @ClassName BaseBo
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 10:54
+ * @Version: 1.0
+ */
+@Data
+public class BaseBo {
+    /**
+     * 用户uid
+     */
+    private Long uid;
+    /**
+     * 用户名称
+     */
+    private String username;
+    /**
+     * 运营商id
+     */
+    private Long adminOperatorId;
+    /**
+     * 运营商id链
+     */
+    private String adminOperatorChain;
+    /**
+     * 部门id
+     */
+    private Long adminDepartmentId;
+    /**
+     * 部门链
+     */
+    private String adminDepartmentChain;
+    /**
+     * 用户角色标识
+     */
+    private List<String> roleCodeSet;
+    /**
+     * 用户角色
+     */
+    private List<AdminUserRoleBo> roleList;
+    /**
+     * 当前资源限制数据等级:ONESELF:仅自己|DEPARTMENT_SELF:本部门|DEPARTMENT:部门及以下|ALL:所有
+     */
+    private String limitLevel;
+    /**
+     * 当前登录用户绑定设备
+     */
+    private List<AdminUserDeviceBo> userDeviceList;
+    /**
+     * 用户域:ADMIN:管理员|EMPLOYEE:员工|CUSTOMER:客户
+     */
+    private String userDomain;
+
+    public boolean authChildren() {
+        return Objects.equals(this.limitLevel, "DEPARTMENT") || Objects.equals(this.limitLevel, "ALL");
+    }
+
+    public boolean isAdminUser() {
+        return Objects.equals(this.userDomain, "ADMIN");
+    }
+
+    public boolean isSuperUser() {
+        return adminOperatorChain != null && !adminOperatorChain.contains("-");
+    }
+
+    public Long getCreateUid() {
+        return uid;
+    }
+
+    public String getCreateName() {
+        return username;
+    }
+
+    public Long getModifyUid() {
+        return uid;
+    }
+
+    public String getModifyName() {
+        return username;
+    }
+}

+ 25 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/bo/BasePageBo.java

@@ -0,0 +1,25 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.data.common.bo;
+
+import lombok.Data;
+
+/**
+ * @ClassName BaseBo
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 10:54
+ * @Version: 1.0
+ */
+@Data
+public class BasePageBo extends BaseBo {
+    /**
+     * 当前页
+     */
+    private Integer pageNum;
+    /**
+     * 每页显示条数
+     */
+    private Integer pageSize;
+}

+ 27 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/common/vo/LongCountVo.java

@@ -0,0 +1,27 @@
+package com.yr.warehouse.admin.data.common.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * Long类型统计视图
+ */
+@Data
+public class LongCountVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 统计键
+     */
+    private Long totalKey;
+
+    /**
+     * 统计值
+     */
+    private Long totalValue;
+
+}

+ 62 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseDevice.java

@@ -0,0 +1,62 @@
+package com.yr.warehouse.admin.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 仓库绑定设备
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Getter
+@Setter
+@TableName("yr_warehouse_device")
+public class WarehouseDevice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增长id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 仓库id
+     */
+    @TableField("warehouseInfoId")
+    private Long warehouseInfoId;
+
+    /**
+     * 设备id
+     */
+    @TableField("deviceId")
+    private Long deviceId;
+
+    /**
+     * 创建用户名称
+     */
+    @TableField("createUserName")
+    private String createUserName;
+
+    /**
+     * 创建用户id
+     */
+    @TableField("createUserId")
+    private Long createUserId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createTime")
+    private LocalDateTime createTime;
+}

+ 134 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseInfo.java

@@ -0,0 +1,134 @@
+package com.yr.warehouse.admin.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 仓库信息
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Getter
+@Setter
+@TableName("yr_warehouse_info")
+public class WarehouseInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增长id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 仓库编号
+     */
+    @TableField("code")
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 仓库负责人id
+     */
+    @TableField("managerId")
+    private Long managerId;
+
+    /**
+     * 仓库地址
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 总库存
+     */
+    @TableField("totalInventory")
+    private Long totalInventory;
+
+    /**
+     * 在途库存
+     */
+    @TableField("transportationInventory")
+    private Long transportationInventory;
+
+    /**
+     * 设备库存
+     */
+    @TableField("deviceInventory")
+    private Long deviceInventory;
+
+    /**
+     * 仓库库存
+     */
+    @TableField("inventory")
+    private Long inventory;
+
+    /**
+     * 设备状态,默认启用: ENABLE 启用 DISABLED 禁用 DELETE 删除
+     */
+    @TableField("status")
+    private String status;
+
+    /**
+     * 运营商id
+     */
+    @TableField("operatorId")
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    @TableField("operatorChain")
+    private String operatorChain;
+
+    /**
+     * 创建用户名称
+     */
+    @TableField("createUserName")
+    private String createUserName;
+
+    /**
+     * 创建用户id
+     */
+    @TableField("createUserId")
+    private Long createUserId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createTime")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改用户名称
+     */
+    @TableField("updateUserName")
+    private String updateUserName;
+
+    /**
+     * 修改用户id
+     */
+    @TableField("updateUserId")
+    private Long updateUserId;
+
+    /**
+     * 修改时间
+     */
+    @TableField("updateTime")
+    private LocalDateTime updateTime;
+}

+ 146 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/entity/WarehouseProduct.java

@@ -0,0 +1,146 @@
+package com.yr.warehouse.admin.data.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 仓库商品表
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Getter
+@Setter
+@TableName("yr_warehouse_product")
+public class WarehouseProduct implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增长id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 仓库id
+     */
+    @TableField("warehouseInfoId")
+    private Long warehouseInfoId;
+
+    /**
+     * 商品id
+     */
+    @TableField("productSpecId")
+    private Integer productSpecId;
+
+    /**
+     * 安全库存数
+     */
+    @TableField("inventoryWarningQuantity")
+    private Long inventoryWarningQuantity;
+
+    /**
+     * 库存数
+     */
+    @TableField("inventory")
+    private Long inventory;
+
+    /**
+     * 库位
+     */
+    @TableField("warehouseLocation")
+    private String warehouseLocation;
+
+    /**
+     * 拆箱优先级
+     */
+    @TableField("unboxingPriority")
+    private Integer unboxingPriority;
+
+    /**
+     * 入库时间
+     */
+    @TableField("countingTime")
+    private LocalDateTime countingTime;
+
+    /**
+     * 最近一次采购时间
+     */
+    @TableField("lastPurchaseTime")
+    private LocalDateTime lastPurchaseTime;
+
+    /**
+     * 预计售罄天数
+     */
+    @TableField("expectedSoldOutDays")
+    private Integer expectedSoldOutDays;
+
+    /**
+     * 商品在仓库状态: ONLINE 上架 OFFLINE 下架(可售卖,不可采购) FORBID_SALE 禁售(不可售卖,不可采购)
+     */
+    @TableField("status")
+    private String status;
+
+    /**
+     * 商品售卖状态 NORMAL 正常 STOP 停止
+     */
+    @TableField("salesStatus")
+    private String salesStatus;
+
+    /**
+     * 创建用户名称
+     */
+    @TableField("createUserName")
+    private String createUserName;
+
+    /**
+     * 创建用户id
+     */
+    @TableField("createUserId")
+    private Long createUserId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createTime")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改用户名称
+     */
+    @TableField("updateUserName")
+    private String updateUserName;
+
+    /**
+     * 修改用户id
+     */
+    @TableField("updateUserId")
+    private Long updateUserId;
+
+    /**
+     * 修改时间
+     */
+    @TableField("updateTime")
+    private LocalDateTime updateTime;
+
+    /**
+     * 冻结库存数
+     */
+    @TableField("frozenInventory")
+    private Long frozenInventory;
+
+    /**
+     * 盘点前库存数
+     */
+    @TableField("takingBeforeInventory")
+    private Long takingBeforeInventory;
+}

+ 33 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseDeviceMapper.java

@@ -0,0 +1,33 @@
+package com.yr.warehouse.admin.data.mapper;
+
+import com.yr.warehouse.admin.data.common.vo.LongCountVo;
+import com.yr.warehouse.admin.data.entity.WarehouseDevice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 仓库绑定设备 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseDeviceMapper extends BaseMapper<WarehouseDevice> {
+
+    /**
+     * 根据仓库id列表查询仓库绑定设备数量
+     * @param warehouseIds 仓库id列表
+     * @return 仓库绑定设备数量
+     */
+    List<LongCountVo> countByWarehouseInfoIds(@Param("warehouseIds") List<Long> warehouseIds);
+
+    /**
+     * 根据仓库id查询仓库绑定设备数量
+     * @param warehouseId 仓库id
+     * @return 仓库绑定设备数量
+     */
+    int countByWarehouseInfoId(@Param("warehouseId") Long warehouseId);
+}

+ 41 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseInfoMapper.java

@@ -0,0 +1,41 @@
+package com.yr.warehouse.admin.data.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.data.bo.WarehouseInfoPageBo;
+import com.yr.warehouse.admin.data.entity.WarehouseInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.data.vo.WarehouseInfoVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 仓库信息 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseInfoMapper extends BaseMapper<WarehouseInfo> {
+
+    /**
+     * 仓库信息分页
+     */
+    Page<WarehouseInfoVo> warehouseInfoPage(@Param("page") Page<WarehouseInfoVo> page, @Param("bo") WarehouseInfoPageBo bo);
+
+    /**
+     * 基于仓库负责人id统计仓库数量
+     * @param managerId
+     * @return
+     */
+    int countWarehouseByManagerId(@Param("managerId") Long managerId, @Param("otherId") Long otherId);
+
+    /**
+     * 根据仓库编码或仓库名称统计运营上下是否存在符合条件的仓库信息
+     * @param code 仓库编码
+     * @param name 仓库名称
+     * @param operatorId 运营商id
+     * @param filterId 过滤不查询的id项
+     * @return 符合条件的仓库信息数量
+     */
+    int countWarehouseInfoByExists(@Param("code") String code, @Param("name") String name, @Param("operatorId") Long operatorId, @Param("filterId") Long filterId);
+}

+ 33 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/mapper/WarehouseProductMapper.java

@@ -0,0 +1,33 @@
+package com.yr.warehouse.admin.data.mapper;
+
+import com.yr.warehouse.admin.data.entity.WarehouseProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.data.vo.WarehouseProductCountVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 仓库商品表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseProductMapper extends BaseMapper<WarehouseProduct> {
+
+    /**
+     * 批量统计仓库商品及库存
+     * @param warehouseIds 仓库ids
+     * @return 仓库及对应商品库存
+     */
+    List<WarehouseProductCountVo> batchCountWarehouseProductNumber(@Param("warehouseIds") List<Long> warehouseIds);
+
+    /**
+     * 统计仓库商品库存
+     * @param warehouseId 仓库id
+     * @return 仓库商品库存
+     */
+    int countWarehouseProductInventoryNumber(@Param("warehouseId") Long warehouseId);
+}

+ 36 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/menu/WarehouseStatusEnum.java

@@ -0,0 +1,36 @@
+package com.yr.warehouse.admin.data.menu;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 仓库状态枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum WarehouseStatusEnum {
+    /**
+     * 启用
+     */
+    ENABLE("ENABLE", "启用"),
+
+    /**
+     * 禁用
+     */
+    DISABLED("DISABLED", "禁用"),
+
+    /**
+     * 删除
+     */
+    DELETE("DELETE", "删除"),
+
+    /**
+     * 全部
+     */
+    ALL("ALL", "全部");
+
+
+    private final String code;
+
+    private final String name;
+}

+ 118 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/vo/WarehouseInfoVo.java

@@ -0,0 +1,118 @@
+package com.yr.warehouse.admin.data.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 仓库信息视图
+ */
+@Data
+public class WarehouseInfoVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增长id
+     */
+    private Long id;
+
+    /**
+     * 仓库编号
+     */
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库负责人id
+     */
+    private Long managerId;
+
+    /**
+     * 仓库地址
+     */
+    private String address;
+
+    /**
+     * 总库存
+     */
+    private Long totalInventory;
+
+    /**
+     * 在途库存
+     */
+    private Long transportationInventory;
+
+    /**
+     * 仓库设备数量 -- 只有使用 WarehouseInfoService中的 searchByOperator 方法才会返回
+     */
+    private Integer warehouseDeviceNumber;
+
+    /**
+     * 仓库商品数量 -- 只有使用 WarehouseInfoService中的 searchByOperator 方法才会返回
+     */
+    private Integer warehouseProductNumber;
+
+    /**
+     * 设备库存
+     */
+    private Long deviceInventory;
+
+    /**
+     * 仓库库存
+     */
+    private Long inventory;
+
+    /**
+     * 设备状态,默认启用: ENABLE 启用 DISABLED 禁用 DELETE 删除
+     */
+    private String status;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
+     * 创建用户名称
+     */
+    private String createUserName;
+
+    /**
+     * 创建用户id
+     */
+    private Long createUserId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 修改用户名称
+     */
+    private String updateUserName;
+
+    /**
+     * 修改用户id
+     */
+    private Long updateUserId;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime updateTime;
+
+}

+ 23 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/data/vo/WarehouseProductCountVo.java

@@ -0,0 +1,23 @@
+package com.yr.warehouse.admin.data.vo;
+
+import lombok.Data;
+
+/**
+ * 仓库信息视图
+ */
+@Data
+public class WarehouseProductCountVo {
+    /**
+     * 仓库id
+     */
+    private Long warehouseInfoId;
+    /**
+     * 仓库库存
+     */
+    private Long inventory;
+
+    /**
+     * 仓库商品数量
+     */
+    private Integer warehouseProductNumber;
+}

+ 37 - 0
warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseDeviceMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yr.warehouse.admin.data.mapper.WarehouseDeviceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.yr.warehouse.admin.data.entity.WarehouseDevice">
+        <id column="id" property="id" />
+        <result column="warehouseInfoId" property="warehouseInfoId" />
+        <result column="deviceId" property="deviceId" />
+        <result column="createUserName" property="createUserName" />
+        <result column="createUserId" property="createUserId" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, warehouseInfoId, deviceId, createUserName, createUserId, createTime
+    </sql>
+    <select id="countByWarehouseInfoIds" resultType="com.yr.warehouse.admin.data.common.vo.LongCountVo"
+            parameterType="java.util.List">
+        select warehouseInfoId as totalKey, count(id) as totalValue from yr_warehouse_device
+        <where>
+            <foreach collection="warehouseIds" item="warehouseId" index="index" open="warehouseInfoId in ("
+                     separator="," close=")">
+                #{warehouseId}
+            </foreach>
+        </where>
+        group by warehouseInfoId
+    </select>
+    <select id="countByWarehouseInfoId" resultType="java.lang.Integer" parameterType="java.lang.Long">
+        SELECT
+            COUNT(1)
+        FROM yr_warehouse_device
+        WHERE warehouseInfoId = #{warehouseId}
+    </select>
+
+</mapper>

+ 101 - 0
warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseInfoMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yr.warehouse.admin.data.mapper.WarehouseInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.yr.warehouse.admin.data.entity.WarehouseInfo">
+        <id column="id" property="id" />
+        <result column="code" property="code" />
+        <result column="name" property="name" />
+        <result column="managerId" property="managerId" />
+        <result column="address" property="address" />
+        <result column="totalInventory" property="totalInventory" />
+        <result column="transportationInventory" property="transportationInventory" />
+        <result column="deviceInventory" property="deviceInventory" />
+        <result column="inventory" property="inventory" />
+        <result column="status" property="status" />
+        <result column="operatorId" property="operatorId" />
+        <result column="operatorChain" property="operatorChain" />
+        <result column="createUserName" property="createUserName" />
+        <result column="createUserId" property="createUserId" />
+        <result column="createTime" property="createTime" />
+        <result column="updateUserName" property="updateUserName" />
+        <result column="updateUserId" property="updateUserId" />
+        <result column="updateTime" property="updateTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, code, name, managerId, address, totalInventory, transportationInventory, deviceInventory, inventory, status, operatorId, operatorChain, createUserName, createUserId, createTime, updateUserName, updateUserId, updateTime
+    </sql>
+
+    <sql id="authWhere">
+        AND (${alias}.operatorChain = #{bo.adminOperatorChain} or ${alias}.operatorChain like CONCAT(#{bo.adminOperatorChain},'-%'))
+        <choose>
+            <when test="bo.operatorId != null and bo.operatorId != ''">
+                AND ${alias}.operatorId = #{bo.operatorId}
+            </when>
+            <otherwise>
+                AND ${alias}.operatorId = #{bo.adminOperatorId}
+            </otherwise>
+        </choose>
+    </sql>
+
+    <select id="warehouseInfoPage" resultType="com.yr.warehouse.admin.data.vo.WarehouseInfoVo">
+        SELECT ywi.id as id,
+        ywi.code as code,
+        ywi.name as name,
+        ywi.managerId as managerId,
+        ywi.address as address,
+        ywi.transportationInventory as transportationInventory,
+        ywi.inventory as inventory,
+        ywi.status as status,
+        ywi.operatorId as operatorId,
+        ywi.operatorChain as operatorChain,
+        ywi.createUserName as createUserName,
+        ywi.createUserId as createUserId,
+        ywi.createTime as createTime,
+        ywi.updateUserName as updateUserName,
+        ywi.updateUserId as updateUserId,
+        ywi.updateTime as updateTime
+        FROM yr_warehouse_info as ywi
+        WHERE ywi.status != 'DELETE'
+        <include refid="authWhere">
+            <property name="alias" value="ywi"/>
+        </include>
+        <if test="bo.code != null and bo.code != ''">
+            AND ywi.code LIKE CONCAT('%',#{bo.code},'%')
+        </if>
+        <if test="bo.name != null and bo.name != ''">
+            AND ywi.name LIKE CONCAT('%',#{bo.name},'%')
+        </if>
+        <if test="bo.statusList != null and bo.statusList.size > 0">
+            AND ywi.status in
+            <foreach collection="bo.statusList" separator="," item="status" open="(" close=")">
+                #{status}
+            </foreach>
+        </if>
+        order by ywi.id desc
+    </select>
+    <select id="countWarehouseByManagerId" resultType="java.lang.Integer">
+        SELECT COUNT(1) FROM yr_warehouse_info WHERE managerId = #{managerId} AND status != 'DELETE'
+        <if test="otherId != null">
+            AND id != #{otherId}
+        </if>
+    </select>
+    <select id="countWarehouseInfoByExists" resultType="java.lang.Integer">
+        SELECT COUNT(1) FROM yr_warehouse_info
+        where operatorId = #{operatorId}
+        <if test="code != null and code != ''">
+            AND code = #{code}
+        </if>
+        <if test="name != null and name != ''">
+            AND name = #{name}
+        </if>
+        <if test="filterId != null">
+            AND id != #{filterId}
+        </if>
+        AND status != 'DELETE'
+    </select>
+
+</mapper>

+ 47 - 0
warehouse-admin-data/src/main/resources/mapper/warehouse/WarehouseProductMapper.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yr.warehouse.admin.data.mapper.WarehouseProductMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.yr.warehouse.admin.data.entity.WarehouseProduct">
+        <id column="id" property="id" />
+        <result column="warehouseInfoId" property="warehouseInfoId" />
+        <result column="productSpecId" property="productSpecId" />
+        <result column="inventoryWarningQuantity" property="inventoryWarningQuantity" />
+        <result column="inventory" property="inventory" />
+        <result column="warehouseLocation" property="warehouseLocation" />
+        <result column="unboxingPriority" property="unboxingPriority" />
+        <result column="countingTime" property="countingTime" />
+        <result column="lastPurchaseTime" property="lastPurchaseTime" />
+        <result column="expectedSoldOutDays" property="expectedSoldOutDays" />
+        <result column="status" property="status" />
+        <result column="salesStatus" property="salesStatus" />
+        <result column="createUserName" property="createUserName" />
+        <result column="createUserId" property="createUserId" />
+        <result column="createTime" property="createTime" />
+        <result column="updateUserName" property="updateUserName" />
+        <result column="updateUserId" property="updateUserId" />
+        <result column="updateTime" property="updateTime" />
+        <result column="frozenInventory" property="frozenInventory" />
+        <result column="takingBeforeInventory" property="takingBeforeInventory" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, warehouseInfoId, productSpecId, inventoryWarningQuantity, inventory, warehouseLocation, unboxingPriority, countingTime, lastPurchaseTime, expectedSoldOutDays, status, salesStatus, createUserName, createUserId, createTime, updateUserName, updateUserId, updateTime, frozenInventory, takingBeforeInventory
+    </sql>
+    <select id="batchCountWarehouseProductNumber" resultType="com.yr.warehouse.admin.data.vo.WarehouseProductCountVo"
+            parameterType="java.util.List">
+        select warehouseInfoId,count(id) warehouseProductNumber, sum(inventory) as inventory from yr_warehouse_product
+        where warehouseInfoId in
+        <foreach collection="warehouseIds" item="warehouseId" open="(" separator="," close=")">
+            #{warehouseId}
+        </foreach>
+        group by warehouseInfoId
+    </select>
+    <select id="countWarehouseProductInventoryNumber" resultType="java.lang.Integer"
+            parameterType="java.lang.Long">
+        select IFNULL(sum(inventory), 0) from yr_warehouse_product where warehouseInfoId = #{warehouseId}
+    </select>
+
+</mapper>

+ 161 - 0
warehouse-admin-data/src/main/test/com/warehouse/admin/CodeGenerator.java

@@ -0,0 +1,161 @@
+package com.warehouse.admin;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 代码生成工具类
+ */
+public class CodeGenerator {
+
+    /**
+     * 数据库链接地址
+     */
+    private static final String URL = "jdbc:mysql://47.109.193.147:3306/basic_library?socketTimeout=60000&connectTimeout=30000&serverTimeZone=UTC&useUnicode=true&characterEncoding=UTF-8";
+    // private static final String URL = "jdbc:mysql://47.109.64.210:3306/intelligence?socketTimeout=60000&connectTimeout=30000&serverTimeZone=UTC&useUnicode=true&characterEncoding=UTF-8";
+
+    /**
+     * 用户名
+     */
+    private static final String USERNAME = "dms_root";
+    //private static final String USERNAME = "root";
+
+
+    /**
+     * 密码
+     */
+    private static final String PASSWORD = "CsYr&Test159";
+    // private static final String PASSWORD = "yr159";
+
+    /**
+     * 作者
+     */
+    private static final String AUTHOR = "";
+
+    /**
+     * 表名的前缀,从表生成代码时会去掉前缀
+     */
+    private static final String TABLE_PREFIX = "yr";
+
+    /**
+     * 模块名
+     */
+    //private static final String MODULE_NAME = "";
+
+    /**
+     * 需要生成的表名,必填
+     */
+    private static final List<String> TABLES = List.of(
+            "yr_warehouse_info",
+            "yr_warehouse_product",
+            "yr_warehouse_device"
+            );
+
+
+    public static void main(String[] args) {
+        if (TABLES.isEmpty()) {
+            System.out.println("请输入需要生成的表名!");
+            return;
+        }
+
+        String projectPath = System.getProperty("user.dir");
+
+        //全局配置
+        GlobalConfig config = new GlobalConfig.Builder()
+                .author(AUTHOR)                                      //作者
+                .outputDir(projectPath + "/warehouse-admin-data/src/main/java/")          //生成文件输出路径(写到java目录)
+                //.enableSwagger()                                  //开启swagger
+                .commentDate("yyyy-MM-dd HH:mm:ss")                 //注释日期格式
+                .dateType(DateType.TIME_PACK)                       //设置时间对应类型
+                .disableOpenDir()                                   //生成后不要打开目录
+                .build();
+
+        //包名配置
+        PackageConfig packageConfig = new PackageConfig.Builder()
+                .parent("com.yr.warehouse.admin.data")                      //父包名
+                //.moduleName(moduleName)           //模块名
+                //.controller("controller")       //controller包名
+                //.service("service.sys")           //service接口包名
+                .service("service")
+                .serviceImpl("service.impl")         //service实现类包名
+                .entity("entity")               //实体类包名
+                .mapper("mapper")               //mapper包名
+                .xml("mapper")                  //mapper对应的xml包名
+                .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/warehouse-admin-data/src/main/resources/mapper/warehouse"))                  //mapper对应的xml路径
+                .build();
+
+        //策略配置
+        StrategyConfig strategyConfig = new StrategyConfig.Builder()
+                .addTablePrefix(TABLE_PREFIX)                       //需要抵消的表前缀
+                .addInclude(TABLES)                                 //设置生成需要映射的表名
+                //.enableCapitalMode()                              //策略开启⼤写命名
+
+                .serviceBuilder()                                   //构建Service层
+                .formatServiceFileName("%sService")
+                .enableFileOverride()                               //覆盖文件(需谨慎使用)
+                .formatServiceImplFileName("%sServiceImpl")             //业务层接口实现类命名
+                // .superServiceImplClass(BaseService.class)           //service公共父类
+
+                .entityBuilder()                                    //构建实体类
+                .enableFileOverride()                               //覆盖文件(需谨慎使用)
+                .formatFileName("%s")
+                // .superClass(BaseEntity.class)                       //entity公共父类
+                .columnNaming(NamingStrategy.underline_to_camel)    //字段名驼峰命名
+                .naming(NamingStrategy.underline_to_camel)          //表名驼峰命名
+
+                .enableLombok()                                     //添加lombock的getter、setter注解
+                //.enableChainModel()                               //启动链式写法@Accessors(chain = true)
+                //.enableColumnConstant()                           //启动属性转常量功能@FieldNameConstants
+                //.logicDeleteColumnName("deleted")                 //逻辑删除字段,标记@TableLogic
+                .enableTableFieldAnnotation()                       //启动字段注解
+                //.addTableFills(tableFillList)                     //属性值填充策略
+
+                //.controllerBuilder()                                //构建Controller类
+                //.enableFileOverride()                               //覆盖文件(需谨慎使用)
+                //.enableHyphenStyle()                                //映射路径使用连字符格式,而不是驼峰
+                //.formatFileName("%sController")                     //Controller类命名
+                // .superClass(BaseController.class)                   //Controller 类继承 BaseController
+                //.enableRestStyle()                                  //标记@RestController注解
+
+                .mapperBuilder()                                    //构建mapper接口类
+                //.enableFileOverride()                               //覆盖文件(需谨慎使用)
+                .enableBaseResultMap()                              //生成基本的resultMap
+                .formatMapperFileName("%sMapper")                   //Mapper接口类明名
+                .superClass(BaseMapper.class)                       //Mapper接口类集成 BaseMapper
+                //.enableMapperAnnotation()                         //标记@Mapper注解
+                .formatXmlFileName("%sMapper")                      //Mapper.xml命名
+                .enableBaseColumnList()                             //生成基本的SQL片段
+
+                .build();
+
+        //数据源配置
+        DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(URL, USERNAME, PASSWORD);
+        //数据库类型转换器
+        dataSourceConfigBuilder.typeConvert(new MySqlTypeConvert() {
+            /*@Override
+            public IColumnType processTypeConvert(GlobalConfig globalConfig, String tableField) {
+                if (tableField.toLowerCase().contains("date") || tableField.toLowerCase().contains("timestamp") || tableField.toLowerCase().contains("datetime")) {
+                    return DbColumnType.STRING;
+                }
+                return super.processTypeConvert(globalConfig, tableField);
+            }*/
+        });
+
+        //创建代码生成器对象,加载配置
+        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfigBuilder.build());
+        autoGenerator.global(config);
+        autoGenerator.packageInfo(packageConfig);
+        autoGenerator.strategy(strategyConfig);
+
+        //执行
+        autoGenerator.execute();
+        System.out.println("========================================  相关代码生成完毕  =====================================");
+    }
+}

+ 0 - 14
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/Test.java

@@ -1,14 +0,0 @@
-/**
- * 湖南有人网络有限公司
- **/
-package com.yr.warehouse.admin.server;
-
-/**
- * @ClassName Test
- * @Description: 类描述
- * @Author: pete
- * @CreateDate: 2025/9/12 15:55	
- * @Version: 1.0
- */
-public class Test {
-}

+ 22 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseDeviceService.java

@@ -0,0 +1,22 @@
+package com.yr.warehouse.admin.server;
+
+import com.yr.warehouse.admin.data.entity.WarehouseDevice;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 仓库绑定设备 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseDeviceService extends IService<WarehouseDevice> {
+
+    /**
+     * 根据仓库id查询仓库绑定的设备数量
+     * @param warehouseId 仓库id
+     * @return 该仓库下设备数
+     */
+    int countByWarehouseInfoId(Long warehouseId);
+}

+ 35 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseInfoService.java

@@ -0,0 +1,35 @@
+package com.yr.warehouse.admin.server;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.data.bo.WarehouseInfoPageBo;
+import com.yr.warehouse.admin.data.entity.WarehouseInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.data.vo.WarehouseInfoVo;
+
+/**
+ * <p>
+ * 仓库信息 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseInfoService extends IService<WarehouseInfo> {
+
+    /**
+     * 分页查询仓库信息
+     */
+    Page<WarehouseInfoVo> warehouseInfoPage(WarehouseInfoPageBo bo);
+
+    /**
+     * 添加仓库信息
+     * @param warehouseInfo 仓库信息
+     */
+    void create(WarehouseInfo warehouseInfo);
+
+    /**
+     * 更新仓库信息
+     * @param warehouseInfo 仓库信息
+     */
+    void update(WarehouseInfo warehouseInfo);
+}

+ 23 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/WarehouseProductService.java

@@ -0,0 +1,23 @@
+package com.yr.warehouse.admin.server;
+
+import com.yr.warehouse.admin.data.entity.WarehouseProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 仓库商品表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+public interface WarehouseProductService extends IService<WarehouseProduct> {
+
+    /**
+     * 仓库是否为空仓库
+     *
+     * @param warehouseId 仓库id
+     * @return 是否为空仓库
+     */
+    boolean warehouseIsEmpty(Long warehouseId);
+}

+ 24 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseDeviceServiceImpl.java

@@ -0,0 +1,24 @@
+package com.yr.warehouse.admin.server.impl;
+
+import com.yr.warehouse.admin.data.entity.WarehouseDevice;
+import com.yr.warehouse.admin.data.mapper.WarehouseDeviceMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yr.warehouse.admin.server.WarehouseDeviceService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 仓库绑定设备 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Service
+public class WarehouseDeviceServiceImpl extends ServiceImpl<WarehouseDeviceMapper, WarehouseDevice> implements WarehouseDeviceService {
+
+    @Override
+    public int countByWarehouseInfoId(Long warehouseId) {
+        return baseMapper.countByWarehouseInfoId(warehouseId);
+    }
+}

+ 112 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseInfoServiceImpl.java

@@ -0,0 +1,112 @@
+package com.yr.warehouse.admin.server.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.bluecat.common.entity.exception.MessageException;
+import com.yr.warehouse.admin.data.bo.WarehouseInfoPageBo;
+import com.yr.warehouse.admin.data.common.vo.LongCountVo;
+import com.yr.warehouse.admin.data.entity.WarehouseInfo;
+import com.yr.warehouse.admin.data.mapper.WarehouseDeviceMapper;
+import com.yr.warehouse.admin.data.mapper.WarehouseInfoMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yr.warehouse.admin.data.mapper.WarehouseProductMapper;
+import com.yr.warehouse.admin.data.vo.WarehouseInfoVo;
+import com.yr.warehouse.admin.data.vo.WarehouseProductCountVo;
+import com.yr.warehouse.admin.server.WarehouseInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 仓库信息 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Service
+public class WarehouseInfoServiceImpl extends ServiceImpl<WarehouseInfoMapper, WarehouseInfo> implements WarehouseInfoService {
+    @Resource
+    private WarehouseDeviceMapper warehouseDeviceMapper;
+
+    @Resource
+    private WarehouseProductMapper warehouseProductMapper;
+
+    @Override
+    public Page<WarehouseInfoVo> warehouseInfoPage(WarehouseInfoPageBo bo) {
+        Page<WarehouseInfoVo> page = new Page<>(bo.getPageNum(), bo.getPageSize());
+        Page<WarehouseInfoVo> warehouseInfoPage = baseMapper.warehouseInfoPage(page, bo);
+        List<WarehouseInfoVo> records = warehouseInfoPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return warehouseInfoPage;
+        }
+
+        List<Long> warehouseIds = records.stream().map(WarehouseInfoVo::getId).toList();
+        List<LongCountVo> deviceCountViews = warehouseDeviceMapper.countByWarehouseInfoIds(warehouseIds);
+
+        Map<Long, Long> deviceCountMap = deviceCountViews.stream().collect(Collectors.toMap(LongCountVo::getTotalKey, LongCountVo::getTotalValue, (o1, o2) -> o1));
+        List<WarehouseProductCountVo> countViewList = warehouseProductMapper.batchCountWarehouseProductNumber(warehouseIds);
+        Map<Long, WarehouseProductCountVo> countViewMap = countViewList.stream().collect(Collectors.toMap(WarehouseProductCountVo::getWarehouseInfoId, Function.identity()));
+
+        records.forEach(record -> {
+            WarehouseProductCountVo countView = countViewMap.get(record.getId());
+            if (Objects.nonNull(countView)) {
+                record.setWarehouseProductNumber(countView.getWarehouseProductNumber());
+                record.setInventory(countView.getInventory());
+            } else {
+                record.setWarehouseProductNumber(0);
+                record.setInventory(0L);
+            }
+
+            Long deviceCount = deviceCountMap.get(record.getId());
+            if (Objects.nonNull(deviceCount)) {
+                record.setWarehouseDeviceNumber(deviceCount.intValue());
+            } else {
+                record.setWarehouseDeviceNumber(0);
+            }
+        });
+
+        warehouseInfoPage.setRecords(records);
+        return warehouseInfoPage;
+    }
+
+    @Override
+    public void create(WarehouseInfo warehouseInfo) {
+        // 校验当前负责人是否存在下级仓库
+        int count = baseMapper.countWarehouseByManagerId(warehouseInfo.getManagerId(), null);
+        if (count > 0) {
+            throw new MessageException("一个负责人只能负责一个仓库");
+        }
+        // 校验运营商下仓库编号是否存在
+        count = baseMapper.countWarehouseInfoByExists(warehouseInfo.getCode(), null, warehouseInfo.getOperatorId(), null);
+        if (count > 0) {
+            throw new MessageException("该运营商下仓库编号已存在");
+        }
+        // 校验运营商下仓库名称是否存在
+        count = baseMapper.countWarehouseInfoByExists(null, warehouseInfo.getName(), warehouseInfo.getOperatorId(), null);
+        if (count > 0) {
+            throw new MessageException("该运营商下仓库名称已存在");
+        }
+        baseMapper.insert(warehouseInfo);
+    }
+
+    @Override
+    public void update(WarehouseInfo warehouseInfo) {
+        int count = baseMapper.countWarehouseByManagerId(warehouseInfo.getManagerId(), warehouseInfo.getId());
+        if (count > 0) {
+            throw new MessageException("一个负责人只能负责一个仓库");
+        }
+        // 校验运营商下仓库名称是否存在
+        count = baseMapper.countWarehouseInfoByExists(null, warehouseInfo.getName(), warehouseInfo.getOperatorId(), warehouseInfo.getId());
+        if (count > 0) {
+            throw new MessageException("该运营商下仓库名称已存在");
+        }
+        baseMapper.updateById(warehouseInfo);
+    }
+}

+ 25 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/server/impl/WarehouseProductServiceImpl.java

@@ -0,0 +1,25 @@
+package com.yr.warehouse.admin.server.impl;
+
+import com.yr.warehouse.admin.data.entity.WarehouseProduct;
+import com.yr.warehouse.admin.data.mapper.WarehouseProductMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yr.warehouse.admin.server.WarehouseProductService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 仓库商品表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-09-15 14:56:13
+ */
+@Service
+public class WarehouseProductServiceImpl extends ServiceImpl<WarehouseProductMapper, WarehouseProduct> implements WarehouseProductService {
+
+    @Override
+    public boolean warehouseIsEmpty(Long warehouseInfoId) {
+        int productCount = baseMapper.countWarehouseProductInventoryNumber(warehouseInfoId);
+        return productCount == 0;
+    }
+}

+ 59 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/BaseController.java

@@ -0,0 +1,59 @@
+package com.yr.warehouse.admin.web.common;
+
+import com.yr.bluecat.common.entity.exception.MessageException;
+import com.yr.prism.auth.core.enums.AuthCodeEnum;
+import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.prism.auth.core.user.AdminUserRole;
+import com.yr.warehouse.admin.data.common.bo.BaseBo;
+import com.yr.warehouse.admin.web.common.mapstruct.AdminUserInfoMapstruct;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 基础服务内核
+ */
+@RestController
+public class BaseController {
+
+    protected void buildUserInfo(BaseBo bo, AdminUserInfo adminUserInfo) {
+        bo.setUid(adminUserInfo.getUid());
+        bo.setUsername(adminUserInfo.getUsername());
+        bo.setAdminOperatorId(adminUserInfo.getOperatorId());
+        bo.setAdminOperatorChain(adminUserInfo.getOperatorChain());
+        bo.setAdminDepartmentId(adminUserInfo.getDepartmentId());
+        bo.setAdminDepartmentChain(adminUserInfo.getDepartmentChain());
+        bo.setLimitLevel(adminUserInfo.getLimitLevel());
+        bo.setUserDomain(adminUserInfo.getUserDomain());
+        bo.setUserDeviceList(AdminUserInfoMapstruct.MAPSTRUCT.toAdminUserDeviceBoList(adminUserInfo.getUserDeviceList()));
+        bo.setRoleList(AdminUserInfoMapstruct.MAPSTRUCT.toAdminUserRoleBoList(adminUserInfo.getRoleList()));
+        if (!CollectionUtils.isEmpty(adminUserInfo.getRoleList())) {
+            bo.setRoleCodeSet(adminUserInfo.getRoleList().stream().map(AdminUserRole::getRoleCode).toList());
+        }
+    }
+
+
+    protected String getToken(HttpServletRequest request) {
+        String authorization = request.getHeader("Authorization");
+        if (!StringUtils.hasLength(authorization)) {
+            authorization = request.getParameter("Authorization");
+            if (!StringUtils.hasLength(authorization)) {
+                throw new MessageException(AuthCodeEnum.AUTHORIZATION_IS_NULL);
+            }
+        }
+        return authorization;
+    }
+
+    protected Long getDeviceId(HttpServletRequest request) {
+        String deviceId = request.getHeader("deviceId");
+        if (!StringUtils.hasLength(deviceId)) {
+            deviceId = request.getParameter("deviceId");
+            if (!StringUtils.hasLength(deviceId)) {
+                throw new MessageException("不正确请求方式");
+            }
+        }
+        return Long.parseLong(deviceId);
+    }
+
+}

+ 9 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/BuildUserInfo.java

@@ -0,0 +1,9 @@
+package com.yr.warehouse.admin.web.common;
+
+import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.warehouse.admin.data.common.bo.BaseBo;
+
+public interface BuildUserInfo {
+
+    void build(BaseBo bo, AdminUserInfo adminUserInfo);
+}

+ 35 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/OssController.java

@@ -0,0 +1,35 @@
+package com.yr.warehouse.admin.web.common;
+
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.bluecat.common.utils.oss.AliOSS;
+import com.yr.bluecat.common.utils.oss.model.StsToken;
+import com.yr.prism.auth.core.annotation.IgnorePermission;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 运维中心-设备通用接口
+ *
+ * @author pengtao
+ * @since 2024-06-01 14:08:37
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oss/common/")
+public class OssController extends BaseController {
+    @Resource
+    private AliOSS aliOSS;
+
+    @IgnorePermission
+    @GetMapping("/sts/token/get")
+    public Result<StsToken> getStsToken(@RequestParam Long deviceId) {
+        StsToken stsToken = aliOSS.getStsToken();
+        return Result.success(stsToken);
+    }
+
+}

+ 29 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/common/mapstruct/AdminUserInfoMapstruct.java

@@ -0,0 +1,29 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.web.common.mapstruct;
+
+import com.yr.prism.auth.core.user.AdminUserDevice;
+import com.yr.prism.auth.core.user.AdminUserRole;
+import com.yr.warehouse.admin.data.common.bo.AdminUserDeviceBo;
+import com.yr.warehouse.admin.data.common.bo.AdminUserRoleBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName AdminUserInfoMapstruct
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 11:03
+ * @Version: 1.0
+ */
+@Mapper
+public interface AdminUserInfoMapstruct {
+    AdminUserInfoMapstruct MAPSTRUCT = Mappers.getMapper(AdminUserInfoMapstruct.class);
+
+    List<AdminUserDeviceBo> toAdminUserDeviceBoList(List<AdminUserDevice> userDeviceList);
+
+    List<AdminUserRoleBo> toAdminUserRoleBoList(List<AdminUserRole> roleList);
+}

+ 177 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/controller/WarehouseController.java

@@ -0,0 +1,177 @@
+package com.yr.warehouse.admin.web.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.bluecat.common.entity.exception.MessageException;
+import com.yr.bluecat.common.entity.response.PageResult;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.warehouse.admin.component.auth.UserAccountComponent;
+import com.yr.warehouse.admin.component.auth.vo.OrgUserAccountVo;
+import com.yr.warehouse.admin.data.bo.WarehouseInfoPageBo;
+import com.yr.warehouse.admin.data.entity.WarehouseInfo;
+import com.yr.warehouse.admin.data.menu.WarehouseStatusEnum;
+import com.yr.warehouse.admin.data.vo.WarehouseInfoVo;
+import com.yr.warehouse.admin.server.WarehouseDeviceService;
+import com.yr.warehouse.admin.server.WarehouseInfoService;
+import com.yr.warehouse.admin.server.WarehouseProductService;
+import com.yr.warehouse.admin.web.common.BaseController;
+import com.yr.warehouse.admin.web.mapstruct.WarehouseMapStruct;
+import com.yr.warehouse.admin.web.request.*;
+import com.yr.warehouse.admin.web.response.WarehouseInfoSearchForPageResponse;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 仓库管理
+ *
+ * @author miajio
+ * @since 2024-06-13
+ */
+@Slf4j
+@RestController
+@RequestMapping("/warehouse/manage")
+public class WarehouseController extends BaseController {
+    @Resource
+    private WarehouseInfoService warehouseInfoService;
+    @Resource
+    private WarehouseProductService warehouseProductService;
+    @Resource
+    private WarehouseDeviceService warehouseDeviceService;
+    @Resource
+    private UserAccountComponent userAccountComponent;
+
+    /**
+     * 仓库信息分页查询
+     * @param request 请求参数
+     * @param adminUserInfo 登录的用户信息
+     * @return 分页数据
+     */
+    @PostMapping("/page")
+    @ResponseBody
+    public PageResult<WarehouseInfoSearchForPageResponse> page(@RequestBody WarehouseSearchForPageRequest request, AdminUserInfo adminUserInfo) {
+        WarehouseInfoPageBo bo = WarehouseMapStruct.MAPSTRUCT.pageRequestToBo(request, adminUserInfo);
+        buildUserInfo(bo, adminUserInfo);
+
+        Page<WarehouseInfoVo> page = warehouseInfoService.warehouseInfoPage(bo);
+        PageResult<WarehouseInfoSearchForPageResponse> pageResult = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+        if (Objects.isNull(page) || Objects.isNull(page.getRecords()) || page.getRecords().isEmpty()) {
+            return pageResult.success(0, null);
+        }
+        List<WarehouseInfoSearchForPageResponse> warehouseInfoSearchForPageResponList = WarehouseMapStruct.MAPSTRUCT.toWarehouseInfoResponse(page.getRecords());
+        List<Long> userIds = warehouseInfoSearchForPageResponList.stream().map(WarehouseInfoSearchForPageResponse::getManagerId).toList();
+        if (userIds.isEmpty()) {
+            return pageResult.success(page.getTotal(), warehouseInfoSearchForPageResponList);
+        }
+
+        Map<Long, OrgUserAccountVo> userInfoMap = userAccountComponent.getUserInfoByIds(userIds);
+        warehouseInfoSearchForPageResponList.forEach(warehouseInfoSearchForPageResponse -> {
+            OrgUserAccountVo orgUserAccountVo = userInfoMap.get(warehouseInfoSearchForPageResponse.getManagerId());
+            if (Objects.nonNull(orgUserAccountVo)) {
+                warehouseInfoSearchForPageResponse.setManagerName(orgUserAccountVo.getEmployeeName());
+                warehouseInfoSearchForPageResponse.setManagerPhone(orgUserAccountVo.getMobile());
+            }
+        });
+        return pageResult.success(page.getTotal(), warehouseInfoSearchForPageResponList);
+    }
+
+    /**
+     * 当前用户所属运营商下的仓库列表-不分页
+     * @param adminUserInfo 登录用户信息
+     * @return 仓库列表
+     */
+    @PostMapping("/operatorList")
+    @ResponseBody
+    public Result<List<WarehouseInfoSearchForPageResponse>> operatorList(@RequestBody WarehouseOperatorListRequest request, AdminUserInfo adminUserInfo) {
+        WarehouseInfoPageBo bo = new WarehouseInfoPageBo();
+        bo.setPageNum(1);
+        bo.setPageSize(-1);
+        bo.setOperatorId(request.getOperatorId());
+        buildUserInfo(bo, adminUserInfo);
+
+        Page<WarehouseInfoVo> page = warehouseInfoService.warehouseInfoPage(bo);
+        return Result.success(WarehouseMapStruct.MAPSTRUCT.toWarehouseInfoResponse(page.getRecords()));
+    }
+
+    /**
+     * 新增仓库
+     */
+    @PostMapping("/create")
+    @ResponseBody
+    public Result<Void> create(@Validated @RequestBody WarehouseAddRequest request, AdminUserInfo adminUserInfo) {
+        WarehouseInfo warehouseInfo = WarehouseMapStruct.MAPSTRUCT.addRequestToWarehouseInfo(request, adminUserInfo);
+        warehouseInfoService.create(warehouseInfo);
+        return Result.success(null);
+    }
+
+    /**
+     * 修改仓库
+     */
+    @PostMapping("/update")
+    @ResponseBody
+    public Result<Void> update(@Validated @RequestBody WarehouseUpdateRequest request, AdminUserInfo adminUserInfo) {
+        // 获取原有的仓库信息
+        WarehouseInfo warehouseInfo = warehouseInfoService.getById(request.getId());
+        if (Objects.isNull(warehouseInfo)) {
+            throw new MessageException("仓库不存在");
+        }
+        warehouseInfo.setName(request.getName());
+        warehouseInfo.setManagerId(request.getManagerId());
+        warehouseInfo.setAddress(request.getAddress());
+        warehouseInfo = WarehouseMapStruct.MAPSTRUCT.setUpdateParams(warehouseInfo, adminUserInfo);
+        warehouseInfoService.update(warehouseInfo);
+        return Result.success(null);
+    }
+
+    /**
+     * 删除仓库
+     */
+    @PostMapping("/delete")
+    @ResponseBody
+    public Result<Void> delete(@Validated @RequestBody WarehouseDeleteRequest request, AdminUserInfo adminUserInfo) {
+        WarehouseInfo warehouseInfo = warehouseInfoService.getById(request.getWarehouseInfoId());
+        if (null == warehouseInfo) {
+            return Result.fail("仓库不存在");
+        }
+
+        boolean isEmptyWarehouse = warehouseProductService.warehouseIsEmpty(request.getWarehouseInfoId());
+        if (!isEmptyWarehouse) {
+            return Result.fail("当前仓库存在库存,无法删除");
+        }
+
+        int warehouseDeviceCount = warehouseDeviceService.countByWarehouseInfoId(request.getWarehouseInfoId());
+        if (warehouseDeviceCount > 0) {
+            return Result.fail("当前仓库存在设备,无法删除");
+        }
+        warehouseInfo = WarehouseMapStruct.MAPSTRUCT.setUpdateParams(warehouseInfo, adminUserInfo);
+        warehouseInfo.setStatus(WarehouseStatusEnum.DELETE.name());
+        warehouseInfoService.update(warehouseInfo);
+        return Result.success(null);
+    }
+
+    /**
+     * 设置仓库状态
+     */
+    @PostMapping("/setting")
+    @ResponseBody
+    public Result<Void> setting(@Validated @RequestBody WarehouseStatusSettingRequest request, AdminUserInfo adminUserInfo) {
+        if (WarehouseStatusEnum.DELETE.equals(request.getStatus())) {
+            throw new MessageException("删除状态不可设置");
+        }
+
+        WarehouseInfo warehouseInfo = warehouseInfoService.getById(request.getId());
+        if (Objects.isNull(warehouseInfo) || WarehouseStatusEnum.DELETE.name().equals(warehouseInfo.getStatus())) {
+            throw new MessageException("仓库不存在");
+        }
+
+        warehouseInfo = WarehouseMapStruct.MAPSTRUCT.setUpdateParams(warehouseInfo, adminUserInfo);
+        warehouseInfo.setStatus(request.getStatus().name());
+        warehouseInfoService.update(warehouseInfo);
+        return Result.success(null);
+    }
+}

+ 46 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/mapstruct/WarehouseMapStruct.java

@@ -0,0 +1,46 @@
+package com.yr.warehouse.admin.web.mapstruct;
+
+import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.warehouse.admin.data.bo.WarehouseInfoPageBo;
+import com.yr.warehouse.admin.data.entity.WarehouseInfo;
+import com.yr.warehouse.admin.data.vo.WarehouseInfoVo;
+import com.yr.warehouse.admin.web.request.WarehouseAddRequest;
+import com.yr.warehouse.admin.web.request.WarehouseSearchForPageRequest;
+import com.yr.warehouse.admin.web.request.WarehouseUpdateRequest;
+import com.yr.warehouse.admin.web.response.WarehouseInfoSearchForPageResponse;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface WarehouseMapStruct {
+
+    WarehouseMapStruct MAPSTRUCT = Mappers.getMapper(WarehouseMapStruct.class);
+
+    WarehouseInfoPageBo pageRequestToBo(WarehouseSearchForPageRequest request, AdminUserInfo adminUserInfo);
+
+    @Mappings({
+            @Mapping(target = "createUserId", source = "adminUserInfo.uid"),
+            @Mapping(target = "createUserName", source = "adminUserInfo.username"),
+            @Mapping(target = "operatorId", source = "adminUserInfo.operatorId"),
+            @Mapping(target = "operatorChain", source = "adminUserInfo.operatorChain")
+    })
+    WarehouseInfo addRequestToWarehouseInfo(WarehouseAddRequest request, AdminUserInfo adminUserInfo);
+
+    @Mappings({
+            @Mapping(target = "updateUserId", source = "adminUserInfo.uid"),
+            @Mapping(target = "updateUserName", source = "adminUserInfo.username")
+    })
+    WarehouseInfo updateRequestToWarehouseInfo(WarehouseUpdateRequest request, AdminUserInfo adminUserInfo);
+
+    default WarehouseInfo setUpdateParams(WarehouseInfo warehouseInfo, AdminUserInfo adminUserInfo) {
+        warehouseInfo.setUpdateUserId(adminUserInfo.getUid());
+        warehouseInfo.setUpdateUserName(adminUserInfo.getUsername());
+        return warehouseInfo;
+    }
+
+    List<WarehouseInfoSearchForPageResponse> toWarehouseInfoResponse(List<WarehouseInfoVo> records);
+}

+ 41 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseAddRequest.java

@@ -0,0 +1,41 @@
+package com.yr.warehouse.admin.web.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 新增仓库请求参数
+ * @author miajio
+ * @since 2024-06-13
+ */
+@Data
+public class WarehouseAddRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+    /**
+     * 仓库编码
+     */
+    @NotNull(message = "仓库编码不能为空")
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    @NotNull(message = "仓库名称不能为空")
+    private String name;
+
+    /**
+     * 仓库负责人-id
+     */
+    @NotNull(message = "仓库负责人id不能为空")
+    private Long managerId;
+
+    /**
+     * 仓库地址
+     */
+    private String address;
+}

+ 24 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseDeleteRequest.java

@@ -0,0 +1,24 @@
+package com.yr.warehouse.admin.web.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 仓库删除请求参数
+ */
+@Data
+public class WarehouseDeleteRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 仓库id
+     */
+    @NotNull(message = "仓库id不能为空")
+    private Long warehouseInfoId;
+
+}

+ 22 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseOperatorListRequest.java

@@ -0,0 +1,22 @@
+package com.yr.warehouse.admin.web.request;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 运营商仓库列表请求参数
+ */
+@Data
+public class WarehouseOperatorListRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商ID
+     */
+    private Long operatorId;
+
+}

+ 41 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseSearchForPageRequest.java

@@ -0,0 +1,41 @@
+package com.yr.warehouse.admin.web.request;
+
+import com.yr.bluecat.common.entity.request.PageRequest;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * 分页查询仓库请求参数
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class WarehouseSearchForPageRequest extends PageRequest {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 仓库编码
+     */
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库状态
+     * ENABLE 启用
+     * DISABLED 禁用
+     */
+    private List<String> statusList;
+}

+ 30 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseStatusSettingRequest.java

@@ -0,0 +1,30 @@
+package com.yr.warehouse.admin.web.request;
+
+import com.yr.warehouse.admin.data.menu.WarehouseStatusEnum;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 设置仓库状态请求参数
+ */
+@Data
+public class WarehouseStatusSettingRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 仓库id
+     */
+    @NotNull(message = "仓库id不能为空")
+    private Long id;
+
+    /**
+     * 仓库状态
+     */
+    @NotNull(message = "仓库状态不能为空")
+    private WarehouseStatusEnum status;
+}

+ 41 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/request/WarehouseUpdateRequest.java

@@ -0,0 +1,41 @@
+package com.yr.warehouse.admin.web.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 仓库信息修改请求参数
+ */
+@Data
+public class WarehouseUpdateRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 仓库id
+     */
+    @NotNull(message = "仓库id不能为空")
+    private Long id;
+
+    /**
+     * 仓库名称
+     */
+    @NotNull(message = "仓库名称不能为空")
+    private String name;
+
+    /**
+     * 仓库负责人-id
+     */
+    @NotNull(message = "仓库负责人id不能为空")
+    private Long managerId;
+
+    /**
+     * 仓库地址
+     */
+    private String address;
+
+}

+ 131 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/response/WarehouseInfoSearchForPageResponse.java

@@ -0,0 +1,131 @@
+package com.yr.warehouse.admin.web.response;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 仓库信息响应对象
+ */
+@Data
+public class WarehouseInfoSearchForPageResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自增长id
+     */
+    private Long id;
+
+    /**
+     * 仓库编号
+     */
+    private String code;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库负责人id
+     */
+    private Long managerId;
+
+    /**
+     * 仓库负责人名称
+     */
+    private String managerName;
+
+    /**
+     * 仓库负责人电话
+     */
+    private String managerPhone;
+
+    /**
+     * 仓库地址
+     */
+    private String address;
+
+    /**
+     * 总库存
+     */
+    private Long totalInventory;
+
+    /**
+     * 在途库存
+     */
+    private Long transportationInventory;
+
+    /**
+     * 仓库设备数量
+     */
+    private Integer warehouseDeviceNumber;
+
+    /**
+     * 仓库商品数量
+     */
+    private Integer warehouseProductNumber;
+
+    /**
+     * 设备库存
+     */
+    private Long deviceInventory;
+
+    /**
+     * 仓库库存
+     */
+    private Long inventory;
+
+    /**
+     * 设备状态,默认启用: ENABLE 启用 DISABLED 禁用 DELETE 删除
+     */
+    private String status;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
+     * 创建用户名称
+     */
+    private String createUserName;
+
+    /**
+     * 创建用户id
+     */
+    private Long createUserId;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改用户名称
+     */
+    private String updateUserName;
+
+    /**
+     * 修改用户id
+     */
+    private Long updateUserId;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+}