xuhy
2026-02-04 139ab6c2f107e4e9b9ada2ffefb2849b4c4f2bd2
云仓对接
20个文件已添加
12个文件已修改
772 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/trade/TradePush.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmClinicDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TCrmSupplierDTO.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmClinicVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TCrmSupplierVO.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmClinicCloudWarehouseController.java
New file
@@ -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);
    }
}
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);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCrmSupplierCloudShopController.java
New file
@@ -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 {
}
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);
    }
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();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/ApiGoodsSpecPush.java
New file
@@ -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();
        }
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/yuncang/api/basic/VipApiGoodsQuery.java
New file
@@ -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();
        }
    }
}
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);
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;
}
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;
}
ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpCloudGoodsExcel.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmClinicCloudWarehouseMapper.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCrmSupplierCloudShopMapper.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCloudConfigMapper.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmClinicCloudWarehouse.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TCrmSupplierCloudShop.java
New file
@@ -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;
}
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;
    /**
     * 新增执行
     */
ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCloudConfig.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmClinicCloudWarehouseService.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TCrmSupplierCloudShopService.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCloudConfigService.java
New file
@@ -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> {
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmClinicCloudWarehouseServiceImpl.java
New file
@@ -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 {
}
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)){
            // 修改账号
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCrmSupplierCloudShopServiceImpl.java
New file
@@ -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 {
}
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());
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCloudConfigServiceImpl.java
New file
@@ -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 {
}
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;
}
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;
}
ruoyi-system/src/main/resources/mapper/system/TCrmClinicCloudWarehouseMapper.xml
New file
@@ -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>
ruoyi-system/src/main/resources/mapper/system/TCrmSupplierCloudShopMapper.xml
New file
@@ -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>
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
ruoyi-system/src/main/resources/mapper/system/TSysCloudConfigMapper.xml
New file
@@ -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>