# 商品管理

商品管理分类提供商品上传、查询、单位管理等接口，共 **6** 个API。

---

## 接口列表

| 序号 | 接口名称 | Method | 说明 |
|------|----------|--------|------|
| 1 | [商品上传](#1-商品上传) | `foonsu.erp.goods.save` | 上传至系统商品及店铺商品 |
| 2 | [系统商品上传](#2-系统商品上传) | `foonsu.erp.sysGoods.save` | 上传至系统商品 |
| 3 | [商品单位查询](#3-商品单位查询) | `foonsu.erp.sysGoods.listUnit` | 查询商品单位 |
| 4 | [系统商品查询](#4-系统商品查询) | `foonsu.erp.sysGoods.list` | 查询系统商品信息 |
| 5 | [批量新增店铺商品](#5-批量新增店铺商品) | `foonsu.erp.platForm.goods.batchSave` | 批量新增店铺商品 |
| 6 | [批量修改店铺商品](#6-批量修改店铺商品) | `foonsu.erp.platForm.goods.batchUpdate` | 批量修改店铺商品 |

---

## 1. 商品上传

**Method：** `foonsu.erp.goods.save`

**请求方式：** POST

**简要描述：** 商品上传（上传至系统商品以及店铺商品，即【商品信息】、【店铺商品设置】页面）

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| shopId | 是 | Long | 当前商品所属店铺ID |
| goodsOuterId | 是 | String | 当前一个字段会当作系统商品编码以及平台商品sku编码 |
| platformGoodsCode | 否 | String | 当前一个字段会当作平台商品ID、平台商品skuId；如不填写则默认取 goodsOuterId |
| goodsName | 是 | String | 商品名称 |
| picPath | 否 | String | 图片路径 |
| price | 否 | String | 价格 |
| properties | 否 | String | 销售属性（即规格名称） |
| unit | 否 | String | 单位 |
| brand | 否 | String | 商品品牌 |
| categoryCode | 否 | String | 商品类别代码 |
| categoryName | 否 | String | 商品类别名称（当 categoryCode 不为空且不存在已有类别时，此值默认取 categoryCode） |
| shortName | 否 | String | 商品简称 |
| goodsWeight | 否 | String | 商品重量 |
| barCodeList | 否 | List[String] | 商品条码 |
| providerName | 否 | String | 供应商名称 |
| batchType | 否 | String | 商品类型：0-无；1-批次库存；2-唯一码；4-序列号 |

---

## 2. 系统商品上传

**Method：** `foonsu.erp.sysGoods.save`

**请求方式：** POST

**简要描述：** 系统商品上传（上传至系统商品，即【商品信息】页面），单次最大100条

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| data | 是 | List[Object] | 系统商品新增请求集合，最大100 |

### data 内参数说明

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| outGoodsId | 是 | Long | 商品外部ID |
| goodsCode | 是 | String | 商品编码 |
| goodsName | 是 | String | 商品名称 |
| unit | 否 | String | 商品单位 |
| brand | 否 | String | 商品品牌 |
| shortGoodsName | 否 | String | 商品短标题 |
| specs | 否 | String | 商品规格 |
| salePrice | 否 | BigDecimal | 商品价格 |
| goodsWeight | 否 | BigDecimal | 商品重量 |
| barCodeList | 否 | List[String] | 商品条码 |
| ext1 ~ ext6 | 否 | String | 自定义字段1~6 |
| picPath / picPath2 ~ picPath5 | 否 | String | 图片路径1~5 |
| providerCode | 否 | String | 供应商编码 |
| batchType | 否 | String | 商品类型：0-无；1-批次库存；2-唯一码；4-序列号 |
| checkDistributor | 否 | String | 出入库是否校验经销商：0-不校验；1-校验 |
| length | 否 | Integer | 商品长度，单位：mm |
| width | 否 | Integer | 商品宽度，单位：mm |
| height | 否 | Integer | 商品高度，单位：mm |

### data(Object)返回参数

| 参数名 | 类型 | 说明 |
|--------|------|------|
| totalCount | Integer | 上传总数 |
| updateCount | Integer | 更新数量 |
| insertCount | Integer | 新增数量 |
| failCount | Integer | 失败数量 |
| errorMsgList | List[Object] | 错误信息集合 |

### errorMsgList 返回参数

| 参数名 | 类型 | 说明 |
|--------|------|------|
| failOutId | String | 失败的外部唯一ID |
| errorMsg | String | 失败信息 |

### 请求示例

```json
{
  "data": [{
    "brand": "华为",
    "goodsCode": "huaweicode",
    "goodsName": "华为手机",
    "outGoodsId": 111,
    "salePrice": 111.11,
    "shortGoodsName": "短标题",
    "specs": "蓝色",
    "unit": "部"
  }]
}
```

### 返回示例

```json
{
  "errorCode": null,
  "msg": "操作成功",
  "data": {
    "totalCount": 3,
    "updateCount": 1,
    "insertCount": 0,
    "failCount": 2,
    "errorMsgList": [
      {"failOutId": "32", "errorMsg": "当前商品编码已存在"},
      {"failOutId": "33", "errorMsg": "当前商品编码已存在"}
    ]
  },
  "date": null,
  "version": null,
  "success": true
}
```

---

## 3. 商品单位查询

**Method：** `foonsu.erp.sysGoods.listUnit`

**请求方式：** POST

**简要描述：** 查询商品单位列表

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| pageIndex | 否 | Integer | 当前页码 |
| pageSize | 否 | Integer | 默认 20，最大不超过 50 |

### data(Object)返回参数

| 参数名 | 类型 | 说明 |
|--------|------|------|
| total | Integer | 记录总数 |
| data | List[Object] | 集合参数响应 |

### data(List)返回参数

| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | Long | 单位ID |
| unit | String | 单位名称 |

### 返回示例

```json
{
  "errorCode": null,
  "msg": "操作成功",
  "data": {
    "total": 3,
    "data": [
      {"id": 7861034, "unit": "件"},
      {"id": 7861033, "unit": "箱"},
      {"id": 7861032, "unit": "个"}
    ]
  },
  "date": null,
  "version": null,
  "success": true
}
```

---

## 4. 系统商品查询

**Method：** `foonsu.erp.sysGoods.list`

**请求方式：** POST

**简要描述：** 查询系统商品信息（即【商品信息】、【组合商品】页面数据）

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| pageIndex | 否 | Integer | 当前页码 |
| pageSize | 否 | Integer | 默认 20，最大不超过 50 |
| goodsId | 否 | Long | 商品ID |
| goodsCode | 否 | String | 商品编码 |
| status | 否 | Integer | 商品状态：0-停用；1-启用 |
| combination | 否 | Integer | 组合商品：0-非组合；1-组合 |
| articleNo | 否 | String | 商品货号 |
| modifyDateStart | 否 | Date | 修改时间开始 |
| modifyDateEnd | 否 | Date | 修改时间结束 |

### data(List)返回参数

| 参数名 | 类型 | 说明 |
|--------|------|------|
| goodsId | Long | 商品ID |
| goodsCode | String | 商品编码 |
| goodsName | String | 商品名称 |
| shortGoodsName | String | 商品简称 |
| specs | String | 规格名称 |
| skUnit | String | 单位名称 |
| goodsKindCode | String | 商品类别编码 |
| goodsKindName | String | 商品类别名称 |
| brand | String | 品牌名称 |
| taxType | Integer | 税率类型：0-含税；1-免税；2-未税 |
| stockTaxRate | BigDecimal | 税率 |
| batchType | String | 商品类型：0-普通商品；1-批次；2-唯一码 |
| isExpried | String | 含有效期：0-不含；1-含 |
| validDays | Integer | 保质期天数 |
| barCodeList | List[String] | 商品条码 |
| providerId | Long | 供应商ID |
| providerName | String | 供应商名称 |
| salePrice | BigDecimal | 标准售价 |
| picPath | String | 图片路径 |
| combination | String | 组合商品：0-非组合；1-组合 |
| articleNo | String | 商品货号 |
| weight | BigDecimal | 重量 |
| length | Integer | 长（单位mm） |
| width | Integer | 宽（单位mm） |
| height | Integer | 高（单位mm） |
| bulkUnit | String | 体积单位 |
| costPrice | BigDecimal | 采购指导价 |
| ext1 ~ ext6 | String | 自定义字段1~6 |
| modifyDate | Date | 修改日期 |
| combinationGoodsList | List[Object] | 组合商品明细集合 |

---

## 5. 批量新增店铺商品

**Method：** `foonsu.erp.platForm.goods.batchSave`

**请求方式：** POST

**简要描述：** 批量新增店铺商品

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| data | 是 | Object | 请求数据 |
| data.shopId | 是 | Number | 店铺id |
| data.goodsOuterId | 是 | String | 平台商品sku编码（需与匹配的系统商品编码一致） |
| data.platformGoodsCode | 是 | String | 平台商品ID |
| data.platformGoodsName | 否 | String | 平台商品名称 |
| data.platformGoodsSpecs | 否 | String | 平台规格名称 |
| data.platformSalePrice | 否 | Number | 平台商品售价 |

### 成功响应示例

```json
{
  "errorCode": null,
  "msg": "操作成功",
  "data": {
    "totalCount": 1,
    "successCount": 1,
    "failCount": 0,
    "errorMsgList": []
  },
  "date": null,
  "version": null,
  "success": true
}
```

---

## 6. 批量修改店铺商品

**Method：** `foonsu.erp.platForm.goods.batchUpdate`

**请求方式：** POST

**简要描述：** 批量更新店铺商品

### 请求参数

| 参数名 | 必选 | 类型 | 说明 |
|--------|------|------|------|
| data | 是 | Arrays | 请求数据 |
| data.shopId | 是 | Number | 店铺id |
| data.goodsOuterId | 是 | String | 平台商品sku编码 |
| data.platformGoodsCode | 是 | String | 平台商品ID |
| data.platformGoodsName | 否 | String | 平台商品名称 |
| data.platformGoodsSpecs | 否 | String | 平台规格名称 |
| data.platformSalePrice | 否 | Number | 平台商品售价 |

### 成功响应示例

```json
{
  "errorCode": null,
  "msg": "操作成功",
  "data": {
    "totalCount": 1,
    "successCount": 1,
    "failCount": 0,
    "errorMsgList": []
  },
  "date": null,
  "version": null,
  "success": true
}
```
