From 139ab6c2f107e4e9b9ada2ffefb2849b4c4f2bd2 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 04 二月 2026 10:01:43 +0800
Subject: [PATCH] 云仓对接

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java    |   66 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java               |   21 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java    |   20 +
 ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml                     |   18 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java                                  |   21 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java                                  |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java                   |   46 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java |   20 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java                     |   16 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java        |   28 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java            |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java          |   20 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java       |   20 +
 ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java                                |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java          |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java             |   16 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java                  |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java                              |    4 
 ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml                  |   18 +
 ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java                  |   23 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java                      |   46 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java                   |   16 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java               |   16 +
 ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml                           |   20 +
 ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml                                 |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java             |   18 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java                            |   54 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java                   |   95 +++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java        |   49 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java               |   25 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java                                |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java                |    8 
 32 files changed, 752 insertions(+), 20 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java
new file mode 100644
index 0000000..eda9f5a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.web.controller.api;
+
+
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.WebUtils;
+import com.ruoyi.system.importExcel.TErpCloudGoodsExcel;
+import com.ruoyi.system.model.TSysCloudConfig;
+import com.ruoyi.system.service.TCrmClinicCloudWarehouseService;
+import com.ruoyi.system.service.TSysCloudConfigService;
+import com.ruoyi.web.controller.yuncang.api.basic.WarehouseQuery;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.sql.Wrapper;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 诊所仓库 前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Api(tags = "诊所云仓仓库")
+@RestController
+@RequestMapping("/t-crm-clinic-cloud-warehouse")
+public class TCrmClinicCloudWarehouseController {
+
+    private final TCrmClinicCloudWarehouseService tCrmClinicCloudWarehouseService;
+    private final TSysCloudConfigService sysCloudConfigService;
+
+
+    @Autowired
+    public TCrmClinicCloudWarehouseController(TCrmClinicCloudWarehouseService tCrmClinicCloudWarehouseService, TSysCloudConfigService sysCloudConfigService) {
+        this.tCrmClinicCloudWarehouseService = tCrmClinicCloudWarehouseService;
+        this.sysCloudConfigService = sysCloudConfigService;
+    }
+
+    @ApiOperation(value = "查询云仓仓库列表",notes = "cloudWarehouse:云仓类型 1=旺店通")
+    @GetMapping("/queryCloudWarehouseList")
+    public R<JSONObject> queryCloudWarehouseList(@RequestParam Integer cloudWarehouse) {
+        // 查询云仓配置
+        TSysCloudConfig sysCloudConfig = sysCloudConfigService.getOne(Wrappers.lambdaQuery(TSysCloudConfig.class)
+                .eq(TSysCloudConfig::getCloudWarehouse, cloudWarehouse)
+                .last("LIMIT 1"));
+        JSONObject jsonObject = WarehouseQuery.warehouseQuery(sysCloudConfig.getSid(), sysCloudConfig.getAppKey(), sysCloudConfig.getAppSecret(), sysCloudConfig.getUrl());
+        return R.ok(jsonObject);
+
+    }
+
+
+}
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java
index 7e56b49..f7bcc2c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java
@@ -84,8 +84,9 @@
     private final RedisCache redisCache;
     private final RestTemplate restTemplate;
     private final WeixinProperties wxConfig;
+    private final TCrmClinicCloudWarehouseService crmClinicCloudWarehouseService;
     @Autowired
-    public TCrmClinicController(TCrmClinicService crmClinicService, TCrmSupplierService crmSupplierService, TCrmBranchService crmBranchService, TCrmWarehouseService crmWarehouseService, TCrmSalespersonService crmSalespersonService, ISysUserService sysUserService, TCrmDeviceService crmDeviceService, TokenService tokenService, MsgUtils msgUtils, TSysMessageTemplateService sysMessageTemplateService, RedisCache redisCache, RestTemplate restTemplate, WeixinProperties wxConfig) {
+    public TCrmClinicController(TCrmClinicService crmClinicService, TCrmSupplierService crmSupplierService, TCrmBranchService crmBranchService, TCrmWarehouseService crmWarehouseService, TCrmSalespersonService crmSalespersonService, ISysUserService sysUserService, TCrmDeviceService crmDeviceService, TokenService tokenService, MsgUtils msgUtils, TSysMessageTemplateService sysMessageTemplateService, RedisCache redisCache, RestTemplate restTemplate, WeixinProperties wxConfig, TCrmClinicCloudWarehouseService crmClinicCloudWarehouseService) {
         this.crmClinicService = crmClinicService;
         this.crmSupplierService = crmSupplierService;
         this.crmBranchService = crmBranchService;
@@ -99,6 +100,7 @@
         this.redisCache = redisCache;
         this.restTemplate = restTemplate;
         this.wxConfig = wxConfig;
+        this.crmClinicCloudWarehouseService = crmClinicCloudWarehouseService;
     }
 
     /**
@@ -274,6 +276,9 @@
         if(Objects.nonNull(crmWarehouse)){
             crmSupplierVO.setWarehouseName(crmWarehouse.getWarehouseName());
         }
+        // 获取云仓关联信息
+        List<TCrmClinicCloudWarehouse> crmClinicCloudWarehouses = crmClinicCloudWarehouseService.list(Wrappers.lambdaQuery(TCrmClinicCloudWarehouse.class).eq(TCrmClinicCloudWarehouse::getClinicId, crmSupplier.getId()));
+        crmSupplierVO.setCrmClinicCloudWarehouses(crmClinicCloudWarehouses);
         return R.ok(crmSupplierVO);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java
new file mode 100644
index 0000000..eb5379e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.web.controller.api;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 供应商店铺 前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@RestController
+@RequestMapping("/t-crm-supplier-cloud-shop")
+public class TCrmSupplierCloudShopController {
+
+}
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java
index ddd66b6..53885e9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java
@@ -50,11 +50,13 @@
     private final TCrmSupplierService crmSupplierService;
     private final ISysUserService sysUserService;
     private final TCrmWarehouseService crmWarehouseService;
+    private final TCrmSupplierCloudShopService crmSupplierCloudShopService;
     @Autowired
-    public TCrmSupplierController(TCrmSupplierService crmSupplierService, ISysUserService sysUserService, TCrmWarehouseService crmWarehouseService) {
+    public TCrmSupplierController(TCrmSupplierService crmSupplierService, ISysUserService sysUserService, TCrmWarehouseService crmWarehouseService, TCrmSupplierCloudShopService crmSupplierCloudShopService) {
         this.crmSupplierService = crmSupplierService;
         this.sysUserService = sysUserService;
         this.crmWarehouseService = crmWarehouseService;
+        this.crmSupplierCloudShopService = crmSupplierCloudShopService;
     }
 
     /**
@@ -114,6 +116,10 @@
         if(Objects.nonNull(crmWarehouse)){
             crmSupplierVO.setWarehouseName(crmWarehouse.getWarehouseName());
         }
+        // 查询云仓店铺信息
+        List<TCrmSupplierCloudShop> crmSupplierCloudShops = crmSupplierCloudShopService.list(Wrappers.lambdaQuery(TCrmSupplierCloudShop.class)
+                .eq(TCrmSupplierCloudShop::getSupplierId, crmSupplier.getId()));
+        crmSupplierVO.setCrmSupplierCloudShops(crmSupplierCloudShops);
         return R.ok(crmSupplierVO);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
index ccc238c..34b3bd9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
@@ -20,9 +20,11 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.WebUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.*;
+import com.ruoyi.system.importExcel.TErpCloudGoodsExcel;
 import com.ruoyi.system.importExcel.TErpGoodsExcel;
 import com.ruoyi.system.model.*;
 import com.ruoyi.system.query.PageAddListQuery;
@@ -842,5 +844,98 @@
         }
         return R.ok();
     }
+
+    @Log(title = "云仓商品关联导入模板-导出", businessType = BusinessType.EXPORT)
+    @ApiOperation(value = "云仓商品关联导入模板")
+    @PostMapping("/cloudGoodsImportTemplate")
+    public void cloudGoodsImportTemplate() {
+        List<TErpCloudGoodsExcel> pageList = new ArrayList<>();
+        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TErpCloudGoodsExcel.class, pageList);
+        HttpServletResponse response = WebUtils.response();
+        assert response != null;
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            String fileName = URLEncoder.encode("云仓商品关联导入模板.xls", "utf-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            response.setHeader("Pragma", "no-cache");
+            response.setHeader("Cache-Control", "no-cache");
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                outputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Log(title = "云仓商品导入-导入", businessType = BusinessType.IMPORT)
+    @ApiOperation(value = "云仓商品信息导入",notes = "cloudWarehouse:云仓类型 1=旺店通")
+    @PostMapping("/importCloudGoodsFile")
+    public AjaxResult importCloudGoodsFile(@RequestParam(value = "file") MultipartFile file,
+                                           @RequestParam(value = "cloudWarehouse") Integer cloudWarehouse) {
+        ImportParams params = new ImportParams();
+        params.setHeadRows(1); //表头行数
+        InputStream inputStream = null;
+        ArrayList<String> names = new ArrayList<>();
+        ArrayList<TErpGoods> tErpGoods = new ArrayList<>();
+
+        try {
+            inputStream = file.getInputStream();
+            List<TErpCloudGoodsExcel> erpCloudGoodsExcels = ExcelImportUtil.importExcel(inputStream, TErpCloudGoodsExcel.class, params);
+            Set<String> collect = erpCloudGoodsExcels.stream().map(TErpCloudGoodsExcel::getCloudSpecCode).collect(Collectors.toSet());
+            if (collect.size() != erpCloudGoodsExcels.size()) {
+                return AjaxResult.error("导入数据中商品规格编码重复");
+            }
+            for (TErpCloudGoodsExcel erpCloudGoodsExcel : erpCloudGoodsExcels) {
+                // 判空
+                if (StringUtils.isBlank(erpCloudGoodsExcel.getGoodsName())) {
+                    names.add("云仓商品名称不能为空");
+                    continue;
+                }
+                if (StringUtils.isBlank(erpCloudGoodsExcel.getCloudGoodsCode())) {
+                    names.add("云仓商品编码不能为空");
+                    continue;
+                }
+                if (StringUtils.isBlank(erpCloudGoodsExcel.getCloudSpecCode())) {
+                    names.add("云仓商品规格编码不能为空");
+                    continue;
+                }
+                TErpGoods erpGoods = erpGoodsService.getOne(Wrappers.lambdaQuery(TErpGoods.class)
+                        .eq(TErpGoods::getGoodsName, erpCloudGoodsExcel.getGoodsName())
+                        .last("LIMIT 1"));
+                if (Objects.isNull(erpGoods)) {
+                    names.add(erpCloudGoodsExcel.getGoodsName() + " :信息有误,未查询到匹配得商品。");
+                    continue;
+                }
+                erpGoods.setCloudWarehouse(cloudWarehouse);
+                erpGoods.setCloudGoodsCode(erpCloudGoodsExcel.getCloudGoodsCode());
+                erpGoods.setCloudSpecCode(erpCloudGoodsExcel.getCloudSpecCode());
+                tErpGoods.add(erpGoods);
+            }
+            erpGoodsService.updateBatchById(tErpGoods);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return AjaxResult.error("记录导入失败!");
+        } finally {
+            try {
+                inputStream.close();
+            } catch (IOException e) {
+                throw new ServiceException(e.getMessage());
+            }
+        }
+        if (!names.isEmpty()) {
+            return AjaxResult.error("导入失败记录如下:", names);
+        }
+        return AjaxResult.success();
+
+    }
+
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java
new file mode 100644
index 0000000..076878a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java
@@ -0,0 +1,49 @@
+package com.ruoyi.web.controller.yuncang.api.basic;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.web.controller.yuncang.utils.WdtClient;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ApiGoodsSpecPush {
+ 
+    @SuppressWarnings("unchecked")
+    public static void main(String[] args) {
+        // TODO Auto-generated method stub
+        WdtClient client = new WdtClient("apidevnew2", "hytycw02-test", "c7ae51196", "https://sandbox.wangdian.cn/openapi2/");
+        //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
+        //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
+ 
+        Map<String, Object> api_goods_info = new HashMap<String,Object>();
+        Map<String, Object>[] goods_list = new Map[1];
+ 
+        goods_list[0] = new HashMap<String,Object>();
+        goods_list[0].put("goods_id", "20260109100903");
+        goods_list[0].put("spec_id","20260109100903");
+        goods_list[0].put("goods_no", "stest");
+        goods_list[0].put("spec_no", "stes12");
+        goods_list[0].put("status", "1");
+         
+        api_goods_info.put("platform_id", "127");
+        api_goods_info.put("shop_no", "hytycw02-test");
+        api_goods_info.put("goods_list", goods_list);
+         
+        //通过第三方json解析工具类fastjson将map解析成json
+        String api_goods_info_json = JSON.toJSONString(api_goods_info);
+        //System.out.println(goods_list_json);
+         
+        Map<String, String> params = new HashMap<String, String>(); 
+ 
+        params.put("api_goods_info", api_goods_info_json);
+        try {
+            String response = client.execute("api_goodsspec_push.php", params);
+            System.out.println(response);
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+ 
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java
new file mode 100644
index 0000000..40def1a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java
@@ -0,0 +1,28 @@
+package com.ruoyi.web.controller.yuncang.api.basic;
+
+import com.ruoyi.web.controller.yuncang.utils.WdtClient;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class VipApiGoodsQuery {
+ 
+    public static void main(String[] args) {
+        WdtClient client = new WdtClient("apidevnew2", "hytycw02-test", "c7ae51196", "https://sandbox.wangdian.cn/openapi2/");
+        //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
+        //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
+         
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("start_time", "2019-01-01 00:00:00");
+        params.put("end_time", "2019-01-30 00:00:00");
+        params.put("page_no", "0");
+        params.put("page_size", "10");
+        params.put("shop_no", "hytycw02-test");        try {
+            String response = client.execute("vip_api_goods_query.php", params);
+            System.out.println(response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java
index aa19a43..bf0df8d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java
@@ -34,7 +34,10 @@
      */
     public static JSONObject tradePush(String sid, String appkey, String appsecret, String url,
                                  TErpProcurement erpProcurement, List<TErpProcurementGoods> erpProcurementGoods,
-                                 Integer trade_status,String clinicName,Integer status,Integer refund_status,String shop_no) {
+                                 Integer trade_status,String clinicName,Integer status,Integer refund_status,
+                                   String shop_no,String goods_id,String spec_id,String goods_no,String spec_no,
+                                   String receiver_name,String receiver_province,String receiver_city,
+                                   String receiver_district,String receiver_address,String receiver_mobile) {
         WdtClient client = new WdtClient(sid, appkey, appsecret, url);
         //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
         //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
@@ -48,10 +51,10 @@
             order_1.put("price", erpProcurementGood.getPurchasePrice());
             order_1.put("status", status);
             order_1.put("refund_status", refund_status);
-            order_1.put("goods_id", "18344");
-            order_1.put("spec_id", "18656");
-            order_1.put("goods_no", "ghs2");
-            order_1.put("spec_no", "ghs201812070212123");
+            order_1.put("goods_id", goods_id);
+            order_1.put("spec_id", spec_id);
+            order_1.put("goods_no", goods_no);
+            order_1.put("spec_no", spec_no);
             order_1.put("goods_name", erpProcurementGood.getGoodsName());
             order_1.put("discount", 0);        //子订单折扣
             order_1.put("adjust_amount", 0);    //手工调整,特别注意:正的表示加价,负的表示减价
@@ -67,12 +70,12 @@
         trade_1.put("trade_time", DateUtils.localDateTimeToDate(erpProcurement.getCreateTime()));
         trade_1.put("pay_time", DateUtils.localDateTimeToDate(erpProcurement.getPayTime()));
         trade_1.put("buyer_nick", clinicName);
-        trade_1.put("receiver_name", "123");
-        trade_1.put("receiver_province", "河南省");
-        trade_1.put("receiver_city", "周口市");
-        trade_1.put("receiver_district", "川汇区");
-        trade_1.put("receiver_address", "123");
-        trade_1.put("receiver_mobile", "26283920011");
+        trade_1.put("receiver_name", receiver_name);
+        trade_1.put("receiver_province", receiver_province);
+        trade_1.put("receiver_city", receiver_city);
+        trade_1.put("receiver_district", receiver_district);
+        trade_1.put("receiver_address", receiver_address);
+        trade_1.put("receiver_mobile", receiver_mobile);
 //        trade_1.put("logistics_type", 4);
         trade_1.put("post_amount", 0);
         trade_1.put("cod_amount", 0);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java
index 8dfbb27..d4f3756 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java
@@ -1,9 +1,12 @@
 package com.ruoyi.system.dto;
 
 import com.ruoyi.system.model.TCrmClinic;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 @ApiModel(value="TCrmClinicDTO对象", description="crm诊所管理")
@@ -12,4 +15,7 @@
     @ApiModelProperty(value = "密码")
     private String password;
 
+    @ApiModelProperty(value = "云仓仓库集合")
+    private List<TCrmClinicCloudWarehouse> crmClinicCloudWarehouses;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java
index 5b99b6c..64c14b8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.dto;
 
 import com.ruoyi.system.model.TCrmSupplier;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -17,4 +18,7 @@
     @ApiModelProperty(value = "仓库id")
     private String warehouseId;
 
+    @ApiModelProperty(value = "云仓店铺对象集合")
+    private List<TCrmSupplierCloudShop> crmSupplierCloudShops;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java
new file mode 100644
index 0000000..78ebad1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.importExcel;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "云仓商品导入Excel")
+public class TErpCloudGoodsExcel {
+
+
+    @Excel(width = 30,name = "*商品名称")
+    private String goodsName;
+
+    @Excel(width = 30,name = "*商品编码")
+    private String cloudGoodsCode;
+
+    @Excel(width = 30,name = "*规格编码")
+    private String cloudSpecCode;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java
new file mode 100644
index 0000000..c53ceba
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
+
+/**
+ * <p>
+ * 诊所仓库 Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TCrmClinicCloudWarehouseMapper extends BaseMapper<TCrmClinicCloudWarehouse> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java
new file mode 100644
index 0000000..1a56875
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
+
+/**
+ * <p>
+ * 供应商店铺 Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TCrmSupplierCloudShopMapper extends BaseMapper<TCrmSupplierCloudShop> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java
new file mode 100644
index 0000000..143799c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.TSysCloudConfig;
+
+/**
+ * <p>
+ * 云仓配置 Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TSysCloudConfigMapper extends BaseMapper<TSysCloudConfig> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java
new file mode 100644
index 0000000..c143d09
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.model;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 诊所仓库
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_crm_clinic_cloud_warehouse")
+@ApiModel(value="TCrmClinicCloudWarehouse对象", description="诊所仓库")
+public class TCrmClinicCloudWarehouse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "诊所id")
+    @TableField("clinic_id")
+    private String clinicId;
+
+    @ApiModelProperty(value = "云仓类型 1=旺店通")
+    @TableField("cloud_warehouse")
+    private Integer cloudWarehouse;
+
+    @ApiModelProperty(value = "仓库编号")
+    @TableField("cloud_warehouse_no")
+    private String cloudWarehouseNo;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java
new file mode 100644
index 0000000..af8c2f6
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.model;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 供应商店铺
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_crm_supplier_cloud_shop")
+@ApiModel(value="TCrmSupplierCloudShop对象", description="供应商店铺")
+public class TCrmSupplierCloudShop implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "供应商id")
+    @TableField("supplier_id")
+    private String supplierId;
+
+    @ApiModelProperty(value = "云仓类型 1=旺店通")
+    @TableField("cloud_warehouse")
+    private Integer cloudWarehouse;
+
+    @ApiModelProperty(value = "店铺编号")
+    @TableField("cloud_shop_no")
+    private String cloudShopNo;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
index 2b8ab00..0c71993 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
@@ -261,6 +261,27 @@
     @ApiModelProperty(value = "下架 1平台操作 2供应商操作")
     @TableField("state_user")
     private Integer stateUser;
+
+    @ApiModelProperty(value = "云仓类型 1=旺店通")
+    @TableField("cloud_warehouse")
+    private Integer cloudWarehouse;
+
+    @ApiModelProperty(value = "货品ID")
+    @TableField("cloud_goods_id")
+    private String cloudGoodsId;
+
+    @ApiModelProperty(value = "规格ID")
+    @TableField("cloud_spec_id")
+    private String cloudSpecId;
+
+    @ApiModelProperty(value = "商品编码")
+    @TableField("cloud_goods_code")
+    private String cloudGoodsCode;
+
+    @ApiModelProperty(value = "规格编码")
+    @TableField("cloud_spec_code")
+    private String cloudSpecCode;
+
     /**
      * 新增执行
      */
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java
new file mode 100644
index 0000000..574dcbb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java
@@ -0,0 +1,54 @@
+package com.ruoyi.system.model;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 云仓配置
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_sys_cloud_config")
+@ApiModel(value="TSysCloudConfig对象", description="云仓配置")
+public class TSysCloudConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    @ApiModelProperty(value = "云仓类型 1=旺店通")
+    @TableField("cloud_warehouse")
+    private Integer cloudWarehouse;
+
+    @ApiModelProperty(value = "卖家账号,接口请求的公共参数sid")
+    @TableField("sid")
+    private String sid;
+
+    @ApiModelProperty(value = "接口账号,接口请求的公共参数appkey")
+    @TableField("app_key")
+    private String appKey;
+
+    @ApiModelProperty(value = "接口秘钥,接口请求的参数appsecret ,用于计算签名")
+    @TableField("app_secret")
+    private String appSecret;
+
+    @ApiModelProperty(value = "接口地址,接口请求的公共参数url")
+    @TableField("url")
+    private String url;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java
new file mode 100644
index 0000000..9c26be9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
+
+/**
+ * <p>
+ * 诊所仓库 服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TCrmClinicCloudWarehouseService extends IService<TCrmClinicCloudWarehouse> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java
new file mode 100644
index 0000000..2d7317f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
+
+/**
+ * <p>
+ * 供应商店铺 服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TCrmSupplierCloudShopService extends IService<TCrmSupplierCloudShop> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java
new file mode 100644
index 0000000..f95b1a6
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.model.TSysCloudConfig;
+
+/**
+ * <p>
+ * 云仓配置 服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+public interface TSysCloudConfigService extends IService<TSysCloudConfig> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java
new file mode 100644
index 0000000..1d08025
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TCrmClinicCloudWarehouseMapper;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
+import com.ruoyi.system.service.TCrmClinicCloudWarehouseService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 诊所仓库 服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Service
+public class TCrmClinicCloudWarehouseServiceImpl extends ServiceImpl<TCrmClinicCloudWarehouseMapper, TCrmClinicCloudWarehouse> implements TCrmClinicCloudWarehouseService {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java
index 264a56b..d89d1a6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java
@@ -14,12 +14,11 @@
 import com.ruoyi.system.mapper.TCrmClinicMapper;
 import com.ruoyi.system.mapper.TCrmClinicPointsMapper;
 import com.ruoyi.system.model.TCrmClinic;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
 import com.ruoyi.system.model.TCrmClinicPoints;
 import com.ruoyi.system.model.TErpProcurement;
 import com.ruoyi.system.query.TCrmClinicQuery;
-import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.system.service.TCrmClinicService;
-import com.ruoyi.system.service.TErpProcurementService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.TCrmClinicVO;
 import com.ruoyi.system.vo.TCrmSupplierVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +51,8 @@
     private TErpProcurementService erpProcurementService;
     @Autowired
     private TCrmClinicPointsMapper crmClinicPointsMapper;
+    @Autowired
+    private TCrmClinicCloudWarehouseService crmClinicCloudWarehouseService;
 
     @Override
     public PageInfo<TCrmClinicVO> pageList(TCrmClinicQuery query) {
@@ -107,6 +108,12 @@
             return R.fail(dto.getPhone()+"-账号已存在");
         }
         this.save(dto);
+        // 添加云仓仓库信息
+        List<TCrmClinicCloudWarehouse> crmClinicCloudWarehouses = dto.getCrmClinicCloudWarehouses();
+        for (TCrmClinicCloudWarehouse crmClinicCloudWarehouse : crmClinicCloudWarehouses) {
+            crmClinicCloudWarehouse.setClinicId(dto.getId());
+        }
+        crmClinicCloudWarehouseService.saveBatch(crmClinicCloudWarehouses);
         // 添加账号
         SysUser user = new SysUser();
         user.setUserName(dto.getPhone());
@@ -132,6 +139,14 @@
             return R.fail(dto.getPhone()+"-账号已存在");
         }
         this.updateById(dto);
+        // 删除云仓仓库信息
+        crmClinicCloudWarehouseService.remove(Wrappers.lambdaQuery(TCrmClinicCloudWarehouse.class).eq(TCrmClinicCloudWarehouse::getClinicId, dto.getId()));
+        // 添加云仓仓库信息
+        List<TCrmClinicCloudWarehouse> crmClinicCloudWarehouses = dto.getCrmClinicCloudWarehouses();
+        for (TCrmClinicCloudWarehouse crmClinicCloudWarehouse : crmClinicCloudWarehouses) {
+            crmClinicCloudWarehouse.setClinicId(dto.getId());
+        }
+        crmClinicCloudWarehouseService.saveBatch(crmClinicCloudWarehouses);
         SysUser user = sysUserService.selectUserById(dto.getUserId());
         if(Objects.nonNull(user)){
             // 修改账号
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java
new file mode 100644
index 0000000..51b51a5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TCrmSupplierCloudShopMapper;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
+import com.ruoyi.system.service.TCrmSupplierCloudShopService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 供应商店铺 服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Service
+public class TCrmSupplierCloudShopServiceImpl extends ServiceImpl<TCrmSupplierCloudShopMapper, TCrmSupplierCloudShop> implements TCrmSupplierCloudShopService {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java
index c820888..3a281c6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java
@@ -13,10 +13,12 @@
 import com.ruoyi.system.mapper.TCrmSupplierMapper;
 import com.ruoyi.system.model.TCrmClinic;
 import com.ruoyi.system.model.TCrmSupplier;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
 import com.ruoyi.system.model.TCrmSupplierToWarehouse;
 import com.ruoyi.system.query.TCrmBranchQuery;
 import com.ruoyi.system.query.TCrmSupplierQuery;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.TCrmSupplierCloudShopService;
 import com.ruoyi.system.service.TCrmSupplierService;
 import com.ruoyi.system.service.TCrmSupplierToWarehouseService;
 import com.ruoyi.system.vo.TCrmSupplierVO;
@@ -44,6 +46,8 @@
     private ISysUserService sysUserService;
     @Autowired
     private TCrmSupplierToWarehouseService crmSupplierToWarehouseService;
+    @Autowired
+    private TCrmSupplierCloudShopService crmSupplierCloudShopService;
 
     @Override
     public PageInfo<TCrmSupplierVO> pageList(TCrmSupplierQuery query) {
@@ -86,6 +90,12 @@
 //            }
 //            crmSupplierToWarehouseService.saveBatch(crmSupplierToWarehouses);
 //        }
+        // 添加供应商云仓店铺信息
+        List<TCrmSupplierCloudShop> crmSupplierCloudShops = dto.getCrmSupplierCloudShops();
+        for (TCrmSupplierCloudShop crmSupplierCloudShop : crmSupplierCloudShops) {
+            crmSupplierCloudShop.setSupplierId(dto.getId());
+        }
+        crmSupplierCloudShopService.saveBatch(crmSupplierCloudShops);
         // 添加账号
         SysUser user = new SysUser();
         user.setUserName(dto.getAccount());
@@ -126,6 +136,14 @@
 //            }
 //            crmSupplierToWarehouseService.saveBatch(crmSupplierToWarehouses);
 //        }
+        // 删除相关云仓店铺信息
+        crmSupplierCloudShopService.remove(Wrappers.lambdaQuery(TCrmSupplierCloudShop.class).eq(TCrmSupplierCloudShop::getSupplierId, dto.getId()));
+        // 添加供应商云仓店铺信息
+        List<TCrmSupplierCloudShop> crmSupplierCloudShops = dto.getCrmSupplierCloudShops();
+        for (TCrmSupplierCloudShop crmSupplierCloudShop : crmSupplierCloudShops) {
+            crmSupplierCloudShop.setSupplierId(dto.getId());
+        }
+        crmSupplierCloudShopService.saveBatch(crmSupplierCloudShops);
         if(Objects.nonNull(user)){
             // 修改账号
             user.setPhonenumber(dto.getPhone());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java
new file mode 100644
index 0000000..130703a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TSysCloudConfigMapper;
+import com.ruoyi.system.model.TSysCloudConfig;
+import com.ruoyi.system.service.TSysCloudConfigService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 云仓配置 服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2026-02-03
+ */
+@Service
+public class TSysCloudConfigServiceImpl extends ServiceImpl<TSysCloudConfigMapper, TSysCloudConfig> implements TSysCloudConfigService {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java
index f93aba5..d62856b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java
@@ -1,11 +1,13 @@
 package com.ruoyi.system.vo;
 
 import com.ruoyi.system.model.TCrmClinic;
+import com.ruoyi.system.model.TCrmClinicCloudWarehouse;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @Data
 @ApiModel(value = "crm诊所管理VO")
@@ -29,4 +31,7 @@
     @ApiModelProperty(value = "业绩状态 1=未达成 2=已达成")
     private Integer performanceStatus = 1;
 
+    @ApiModelProperty(value = "诊所云仓仓库信息")
+    private List<TCrmClinicCloudWarehouse> crmClinicCloudWarehouses;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java
index 1b41530..4e90caa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.vo;
 
 import com.ruoyi.system.model.TCrmSupplier;
+import com.ruoyi.system.model.TCrmSupplierCloudShop;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -17,4 +18,7 @@
     @ApiModelProperty(value = "仓库名称")
     private String warehouseName;
 
+    @ApiModelProperty(value = "云仓店铺信息")
+    private List<TCrmSupplierCloudShop> crmSupplierCloudShops;
+
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml
new file mode 100644
index 0000000..99a13bc
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml
@@ -0,0 +1,18 @@
+<?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.ruoyi.system.mapper.TCrmClinicCloudWarehouseMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TCrmClinicCloudWarehouse">
+        <id column="id" property="id" />
+        <result column="clinic_id" property="clinicId" />
+        <result column="cloud_warehouse" property="cloudWarehouse" />
+        <result column="cloud_warehouse_no" property="cloudWarehouseNo" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, clinic_id, cloud_warehouse, cloud_warehouse_no
+    </sql>
+
+</mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml
new file mode 100644
index 0000000..b3b3c1e
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml
@@ -0,0 +1,18 @@
+<?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.ruoyi.system.mapper.TCrmSupplierCloudShopMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TCrmSupplierCloudShop">
+        <id column="id" property="id" />
+        <result column="supplier_id" property="supplierId" />
+        <result column="cloud_warehouse" property="cloudWarehouse" />
+        <result column="cloud_shop_no" property="cloudShopNo" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, supplier_id, cloud_warehouse, cloud_shop_no
+    </sql>
+
+</mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
index 4497677..20d5976 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
@@ -30,6 +30,11 @@
         <result column="clinic_purchase_price" property="clinicPurchasePrice"/>
         <result column="platform_commission_price" property="platformCommissionPrice"/>
         <result column="retail_price" property="retailPrice"/>
+        <result column="cloud_warehouse" property="cloudWarehouse"/>
+        <result column="cloud_goods_id" property="cloudGoodsId"/>
+        <result column="cloud_spec_id" property="cloudSpecId"/>
+        <result column="cloud_goods_code" property="cloudGoodsCode"/>
+        <result column="cloud_spec_code" property="cloudSpecCode"/>
         <result column="create_time" property="createTime"/>
         <result column="update_time" property="updateTime"/>
         <result column="create_by" property="createBy"/>
@@ -44,7 +49,8 @@
         low_unit_id, is_prescription_drug, goods_spec, warning_inventory, sales_amount, packing_unit_id, instructions_use,
         side_effect, clinic_purchase_price, platform_commission_price, create_time, update_time, create_by,`state`,
         update_by, disabled,simplified_code,dosage_form,usage_classification,product_brand,place_of_origin,ingredient,
-        trait,indication,taboo,precautions,interaction,storage,supplier_name,cover,detail_pictures,retail_price
+        trait,indication,taboo,precautions,interaction,storage,supplier_name,cover,detail_pictures,retail_price,
+          cloud_warehouse,cloud_goods_code,cloud_spec_code,cloud_goods_id,cloud_spec_id
     </sql>
 
 
@@ -68,7 +74,7 @@
         t1.content_state,
         t1.content_remark,
         t1.state_remark,
-        t1.cover,t1.detail_pictures,t1.retail_price,
+        t1.cover,t1.detail_pictures,t1.retail_price,t1.cloud_warehouse,t1.cloud_goods_code,t1.cloud_spec_code,t1.cloud_goods_id,t1.cloud_spec_id,
         case t1.goods_source
         when 1 then t2.supplier_name
         when 2 then t1.supplier_name
@@ -342,7 +348,7 @@
         t1.interaction,
         t1.content,t1.content_state,
         t1.storage,t1.state_remark,
-        t1.cover,t1.detail_pictures,t1.retail_price,
+        t1.cover,t1.detail_pictures,t1.retail_price,t1.cloud_warehouse,t1.cloud_goods_code,t1.cloud_spec_code,t1.cloud_goods_id,t1.cloud_spec_id,
         t2.supplier_name
         from t_erp_goods t1 left join t_crm_supplier t2 on t1.supplier_clinic_id = t2.id and t1.goods_source =1
         where t1.disabled = 0 and t1.goods_source =1
@@ -417,7 +423,7 @@
                t1.update_time,
                t1.create_id,
                t3.type_name,
-                t1.cover,t1.detail_pictures,t1.retail_price
+                t1.cover,t1.detail_pictures,t1.retail_price,t1.cloud_warehouse,t1.cloud_goods_code,t1.cloud_goods_id,t1.cloud_spec_id,t1.cloud_spec_code
         FROM t_erp_goods t1
          LEFT JOIN t_crm_supplier t2 ON t1.supplier_clinic_id = t2.id
         left join t_erp_goods_type t3 on t1.type_id = t3.id
diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml
new file mode 100644
index 0000000..7f00475
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml
@@ -0,0 +1,20 @@
+<?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.ruoyi.system.mapper.TSysCloudConfigMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TSysCloudConfig">
+        <id column="id" property="id" />
+        <result column="cloud_warehouse" property="cloudWarehouse" />
+        <result column="sid" property="sid" />
+        <result column="app_key" property="appKey" />
+        <result column="app_secret" property="appSecret" />
+        <result column="url" property="url" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, cloud_warehouse, sid, app_key, app_secret, url
+    </sql>
+
+</mapper>

--
Gitblit v1.7.1