@newpeak/barista-cli 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/commands/liberica/auth/index.d.ts.map +1 -1
  2. package/dist/commands/liberica/auth/index.js +5 -0
  3. package/dist/commands/liberica/auth/index.js.map +1 -1
  4. package/dist/commands/liberica/clients/create.d.ts +3 -0
  5. package/dist/commands/liberica/clients/create.d.ts.map +1 -0
  6. package/dist/commands/liberica/clients/create.js +125 -0
  7. package/dist/commands/liberica/clients/create.js.map +1 -0
  8. package/dist/commands/liberica/clients/delete.d.ts +3 -0
  9. package/dist/commands/liberica/clients/delete.d.ts.map +1 -0
  10. package/dist/commands/liberica/clients/delete.js +125 -0
  11. package/dist/commands/liberica/clients/delete.js.map +1 -0
  12. package/dist/commands/liberica/clients/get.d.ts +3 -0
  13. package/dist/commands/liberica/clients/get.d.ts.map +1 -0
  14. package/dist/commands/liberica/clients/get.js +77 -0
  15. package/dist/commands/liberica/clients/get.js.map +1 -0
  16. package/dist/commands/liberica/clients/index.d.ts +3 -0
  17. package/dist/commands/liberica/clients/index.d.ts.map +1 -0
  18. package/dist/commands/liberica/clients/index.js +17 -0
  19. package/dist/commands/liberica/clients/index.js.map +1 -0
  20. package/dist/commands/liberica/clients/list.d.ts +3 -0
  21. package/dist/commands/liberica/clients/list.d.ts.map +1 -0
  22. package/dist/commands/liberica/clients/list.js +92 -0
  23. package/dist/commands/liberica/clients/list.js.map +1 -0
  24. package/dist/commands/liberica/clients/update.d.ts +3 -0
  25. package/dist/commands/liberica/clients/update.d.ts.map +1 -0
  26. package/dist/commands/liberica/clients/update.js +106 -0
  27. package/dist/commands/liberica/clients/update.js.map +1 -0
  28. package/dist/commands/liberica/index.d.ts.map +1 -1
  29. package/dist/commands/liberica/index.js +11 -0
  30. package/dist/commands/liberica/index.js.map +1 -1
  31. package/dist/commands/liberica/materials/create.d.ts +3 -0
  32. package/dist/commands/liberica/materials/create.d.ts.map +1 -0
  33. package/dist/commands/liberica/materials/create.js +154 -0
  34. package/dist/commands/liberica/materials/create.js.map +1 -0
  35. package/dist/commands/liberica/materials/delete.d.ts +3 -0
  36. package/dist/commands/liberica/materials/delete.d.ts.map +1 -0
  37. package/dist/commands/liberica/materials/delete.js +104 -0
  38. package/dist/commands/liberica/materials/delete.js.map +1 -0
  39. package/dist/commands/liberica/materials/disable.d.ts +3 -0
  40. package/dist/commands/liberica/materials/disable.d.ts.map +1 -0
  41. package/dist/commands/liberica/materials/disable.js +146 -0
  42. package/dist/commands/liberica/materials/disable.js.map +1 -0
  43. package/dist/commands/liberica/materials/enable.d.ts +3 -0
  44. package/dist/commands/liberica/materials/enable.d.ts.map +1 -0
  45. package/dist/commands/liberica/materials/enable.js +126 -0
  46. package/dist/commands/liberica/materials/enable.js.map +1 -0
  47. package/dist/commands/liberica/materials/get.d.ts +3 -0
  48. package/dist/commands/liberica/materials/get.d.ts.map +1 -0
  49. package/dist/commands/liberica/materials/get.js +71 -0
  50. package/dist/commands/liberica/materials/get.js.map +1 -0
  51. package/dist/commands/liberica/materials/index.d.ts +3 -0
  52. package/dist/commands/liberica/materials/index.d.ts.map +1 -0
  53. package/dist/commands/liberica/materials/index.js +21 -0
  54. package/dist/commands/liberica/materials/index.js.map +1 -0
  55. package/dist/commands/liberica/materials/list.d.ts +3 -0
  56. package/dist/commands/liberica/materials/list.d.ts.map +1 -0
  57. package/dist/commands/liberica/materials/list.js +107 -0
  58. package/dist/commands/liberica/materials/list.js.map +1 -0
  59. package/dist/commands/liberica/materials/update.d.ts +3 -0
  60. package/dist/commands/liberica/materials/update.d.ts.map +1 -0
  61. package/dist/commands/liberica/materials/update.js +118 -0
  62. package/dist/commands/liberica/materials/update.js.map +1 -0
  63. package/dist/commands/liberica/suppliers/create.d.ts +3 -0
  64. package/dist/commands/liberica/suppliers/create.d.ts.map +1 -0
  65. package/dist/commands/liberica/suppliers/create.js +140 -0
  66. package/dist/commands/liberica/suppliers/create.js.map +1 -0
  67. package/dist/commands/liberica/suppliers/delete.d.ts +3 -0
  68. package/dist/commands/liberica/suppliers/delete.d.ts.map +1 -0
  69. package/dist/commands/liberica/suppliers/delete.js +102 -0
  70. package/dist/commands/liberica/suppliers/delete.js.map +1 -0
  71. package/dist/commands/liberica/suppliers/disable.d.ts +3 -0
  72. package/dist/commands/liberica/suppliers/disable.d.ts.map +1 -0
  73. package/dist/commands/liberica/suppliers/disable.js +144 -0
  74. package/dist/commands/liberica/suppliers/disable.js.map +1 -0
  75. package/dist/commands/liberica/suppliers/enable.d.ts +3 -0
  76. package/dist/commands/liberica/suppliers/enable.d.ts.map +1 -0
  77. package/dist/commands/liberica/suppliers/enable.js +124 -0
  78. package/dist/commands/liberica/suppliers/enable.js.map +1 -0
  79. package/dist/commands/liberica/suppliers/get.d.ts +3 -0
  80. package/dist/commands/liberica/suppliers/get.d.ts.map +1 -0
  81. package/dist/commands/liberica/suppliers/get.js +75 -0
  82. package/dist/commands/liberica/suppliers/get.js.map +1 -0
  83. package/dist/commands/liberica/suppliers/index.d.ts +3 -0
  84. package/dist/commands/liberica/suppliers/index.d.ts.map +1 -0
  85. package/dist/commands/liberica/suppliers/index.js +21 -0
  86. package/dist/commands/liberica/suppliers/index.js.map +1 -0
  87. package/dist/commands/liberica/suppliers/list.d.ts +3 -0
  88. package/dist/commands/liberica/suppliers/list.d.ts.map +1 -0
  89. package/dist/commands/liberica/suppliers/list.js +100 -0
  90. package/dist/commands/liberica/suppliers/list.js.map +1 -0
  91. package/dist/commands/liberica/suppliers/update.d.ts +3 -0
  92. package/dist/commands/liberica/suppliers/update.d.ts.map +1 -0
  93. package/dist/commands/liberica/suppliers/update.js +122 -0
  94. package/dist/commands/liberica/suppliers/update.js.map +1 -0
  95. package/dist/commands/liberica/uoms/create.d.ts +3 -0
  96. package/dist/commands/liberica/uoms/create.d.ts.map +1 -0
  97. package/dist/commands/liberica/uoms/create.js +120 -0
  98. package/dist/commands/liberica/uoms/create.js.map +1 -0
  99. package/dist/commands/liberica/uoms/delete.d.ts +3 -0
  100. package/dist/commands/liberica/uoms/delete.d.ts.map +1 -0
  101. package/dist/commands/liberica/uoms/delete.js +104 -0
  102. package/dist/commands/liberica/uoms/delete.js.map +1 -0
  103. package/dist/commands/liberica/uoms/disable.d.ts +3 -0
  104. package/dist/commands/liberica/uoms/disable.d.ts.map +1 -0
  105. package/dist/commands/liberica/uoms/disable.js +146 -0
  106. package/dist/commands/liberica/uoms/disable.js.map +1 -0
  107. package/dist/commands/liberica/uoms/enable.d.ts +3 -0
  108. package/dist/commands/liberica/uoms/enable.d.ts.map +1 -0
  109. package/dist/commands/liberica/uoms/enable.js +126 -0
  110. package/dist/commands/liberica/uoms/enable.js.map +1 -0
  111. package/dist/commands/liberica/uoms/get.d.ts +3 -0
  112. package/dist/commands/liberica/uoms/get.d.ts.map +1 -0
  113. package/dist/commands/liberica/uoms/get.js +71 -0
  114. package/dist/commands/liberica/uoms/get.js.map +1 -0
  115. package/dist/commands/liberica/uoms/index.d.ts +3 -0
  116. package/dist/commands/liberica/uoms/index.d.ts.map +1 -0
  117. package/dist/commands/liberica/uoms/index.js +21 -0
  118. package/dist/commands/liberica/uoms/index.js.map +1 -0
  119. package/dist/commands/liberica/uoms/list.d.ts +3 -0
  120. package/dist/commands/liberica/uoms/list.d.ts.map +1 -0
  121. package/dist/commands/liberica/uoms/list.js +98 -0
  122. package/dist/commands/liberica/uoms/list.js.map +1 -0
  123. package/dist/commands/liberica/uoms/update.d.ts +3 -0
  124. package/dist/commands/liberica/uoms/update.d.ts.map +1 -0
  125. package/dist/commands/liberica/uoms/update.js +115 -0
  126. package/dist/commands/liberica/uoms/update.js.map +1 -0
  127. package/dist/core/api/client.d.ts +30 -0
  128. package/dist/core/api/client.d.ts.map +1 -1
  129. package/dist/core/api/client.js +590 -0
  130. package/dist/core/api/client.js.map +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/types/client.d.ts +100 -0
  133. package/dist/types/client.d.ts.map +1 -0
  134. package/dist/types/client.js +2 -0
  135. package/dist/types/client.js.map +1 -0
  136. package/dist/types/index.d.ts +6 -0
  137. package/dist/types/index.d.ts.map +1 -1
  138. package/dist/types/material.d.ts +49 -0
  139. package/dist/types/material.d.ts.map +1 -0
  140. package/dist/types/material.js +2 -0
  141. package/dist/types/material.js.map +1 -0
  142. package/dist/types/supplier.d.ts +53 -0
  143. package/dist/types/supplier.d.ts.map +1 -0
  144. package/dist/types/supplier.js +2 -0
  145. package/dist/types/supplier.js.map +1 -0
  146. package/dist/types/uom.d.ts +47 -0
  147. package/dist/types/uom.d.ts.map +1 -0
  148. package/dist/types/uom.js +2 -0
  149. package/dist/types/uom.js.map +1 -0
  150. package/docs/commands/REFERENCE.md +21 -15
  151. package/docs/commands/liberica/materials-create.md +293 -0
  152. package/docs/commands/liberica/materials-delete.md +240 -0
  153. package/docs/commands/liberica/materials-disable.md +150 -0
  154. package/docs/commands/liberica/materials-enable.md +146 -0
  155. package/docs/commands/liberica/materials-get.md +188 -0
  156. package/docs/commands/liberica/materials-list.md +198 -0
  157. package/docs/commands/liberica/materials-update.md +250 -0
  158. package/docs/commands/liberica/uoms-create.md +136 -0
  159. package/docs/commands/liberica/uoms-delete.md +119 -0
  160. package/docs/commands/liberica/uoms-disable.md +117 -0
  161. package/docs/commands/liberica/uoms-enable.md +115 -0
  162. package/docs/commands/liberica/uoms-get.md +119 -0
  163. package/docs/commands/liberica/uoms-list.md +155 -0
  164. package/docs/commands/liberica/uoms-update.md +148 -0
  165. package/package.json +2 -4
  166. package/src/commands/liberica/auth/index.ts +6 -0
  167. package/src/commands/liberica/clients/create.ts +122 -0
  168. package/src/commands/liberica/clients/delete.ts +125 -0
  169. package/src/commands/liberica/clients/get.ts +88 -0
  170. package/src/commands/liberica/clients/index.ts +19 -0
  171. package/src/commands/liberica/clients/list.ts +123 -0
  172. package/src/commands/liberica/clients/update.ts +103 -0
  173. package/src/commands/liberica/index.ts +11 -0
  174. package/src/commands/liberica/materials/create.ts +168 -0
  175. package/src/commands/liberica/materials/delete.ts +105 -0
  176. package/src/commands/liberica/materials/disable.ts +148 -0
  177. package/src/commands/liberica/materials/enable.ts +129 -0
  178. package/src/commands/liberica/materials/get.ts +83 -0
  179. package/src/commands/liberica/materials/index.ts +23 -0
  180. package/src/commands/liberica/materials/list.ts +142 -0
  181. package/src/commands/liberica/materials/update.ts +125 -0
  182. package/src/commands/liberica/suppliers/create.ts +149 -0
  183. package/src/commands/liberica/suppliers/delete.ts +102 -0
  184. package/src/commands/liberica/suppliers/disable.ts +145 -0
  185. package/src/commands/liberica/suppliers/enable.ts +126 -0
  186. package/src/commands/liberica/suppliers/get.ts +86 -0
  187. package/src/commands/liberica/suppliers/index.ts +23 -0
  188. package/src/commands/liberica/suppliers/list.ts +134 -0
  189. package/src/commands/liberica/suppliers/update.ts +128 -0
  190. package/src/commands/liberica/uoms/create.ts +134 -0
  191. package/src/commands/liberica/uoms/delete.ts +105 -0
  192. package/src/commands/liberica/uoms/disable.ts +148 -0
  193. package/src/commands/liberica/uoms/enable.ts +129 -0
  194. package/src/commands/liberica/uoms/get.ts +83 -0
  195. package/src/commands/liberica/uoms/index.ts +23 -0
  196. package/src/commands/liberica/uoms/list.ts +129 -0
  197. package/src/commands/liberica/uoms/update.ts +124 -0
  198. package/src/core/api/client.ts +758 -21
  199. package/src/index.ts +1 -1
  200. package/src/types/client.ts +115 -0
  201. package/src/types/index.ts +6 -0
  202. package/src/types/material.ts +61 -0
  203. package/src/types/supplier.ts +66 -0
  204. package/src/types/uom.ts +60 -0
  205. package/bin/barista.js +0 -3
@@ -0,0 +1,146 @@
1
+ # barista liberica materials enable
2
+
3
+ 启用(激活)物料。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials enable <materialId>` |
10
+ | 功能描述 | 启用(激活)物料 |
11
+ | HTTP方法 | POST |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ✅ 是 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── batchActive(@PostResource(path = "/batchActive", requiredPermission = true, requirePermissionCode = "ACTIVE_MASTER_MATERIAL"))
24
+ └── public ResponseData<?> batchActive(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @RequestBody @Validated(BaseRequest.batchDelete.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ └── materialIdList: Set<Long> (用于批量操作)
37
+ ```
38
+
39
+ ### Response DTO位置
40
+ ```
41
+ coffee-liberica-end/
42
+ └── business/liberica-business-sales/sales-api/
43
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
44
+ └── MasterMaterialResponse.java
45
+ └── 返回成功响应(无数据体)
46
+ ```
47
+
48
+ ## 2.3 CLI参数设计
49
+
50
+ ### 命令结构
51
+ ```
52
+ barista liberica materials enable <materialId> [options]
53
+ ```
54
+
55
+ ### 位置参数
56
+ | 参数 | 类型 | 必填 | 说明 |
57
+ |------|------|------|------|
58
+ | materialId | string | ✅ | 物料ID |
59
+
60
+ ### 全局选项
61
+ | 选项 | 类型 | 说明 |
62
+ |------|------|------|
63
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
64
+ | `--tenant` | string | 租户代码 |
65
+ | `--dry-run` | boolean | 预览模式(不实际调用API) |
66
+ | `--json` | boolean | JSON输出 |
67
+
68
+ ### 命令选项
69
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 |
70
+ |------|--------|------|------|--------|------|
71
+ | --force | -f | boolean | ⬜ | false | 跳过确认提示 |
72
+
73
+ **说明**:
74
+ - `--dry-run` 预览启用操作的影响(显示将启用的物料信息)
75
+ - `--force` 直接执行,不显示确认提示(适用于脚本自动化)
76
+
77
+ ## 2.4 字段映射表
78
+
79
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
80
+ |---------|---------|----------|----------|
81
+ | <materialId> (位置参数) | materialIdList[0] | string→Long | @NotEmpty, 单元素数组 |
82
+
83
+ **请求体构造**:
84
+ ```json
85
+ {
86
+ "materialIdList": [12345]
87
+ }
88
+ ```
89
+
90
+ ## 2.5 错误码引用
91
+
92
+ ### ExceptionEnum位置
93
+ ```
94
+ coffee-liberica-end/
95
+ └── business/liberica-business-sales/sales-api/
96
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
97
+ └── MasterMaterialExceptionEnum.java
98
+ ├── MASTER_MATERIAL_NOT_EXIST("01001410001", "租户物料不存在")
99
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001410006", "指定{}不存在")
100
+ └── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001410010", "指定{}不存在")
101
+ ```
102
+
103
+ ### 已知错误码
104
+ | 错误码 | 错误消息 | 触发条件 |
105
+ |--------|----------|----------|
106
+ | 01001410001 | 租户物料不存在 | materialId 不存在或不属于当前租户 |
107
+ | 01001410006 | 指定xxx不存在 | 指定关联的物料编码不存在 |
108
+ | 01001410010 | 指定xxx不存在 | 指定关联的物料名称不存在 |
109
+
110
+ ## 2.6 权限检查
111
+
112
+ | 检查项 | 位置 | 说明 |
113
+ |--------|------|------|
114
+ | PermissionConstants | `MasterMaterialPermissionConstants.ACTIVE_MASTER_MATERIAL` | Controller层 `@PostResource(requirePermissionCode = "ACTIVE_MASTER_MATERIAL")` |
115
+
116
+ ## 2.7 实现要点
117
+
118
+ 1. **批量API单条使用**:后端使用 `/batchActive` 批量接口,但 CLI 仅支持单条启用,将单个 ID 包装为单元素数组 `{ materialIdList: [id] }`
119
+ 2. **幂等性**:batchActive 操作是幂等的,对已启用的物料再次调用效果相同(直接设置 statusFlag=ENABLE)
120
+ 3. **Dry-run模式**:预览显示将启用的物料信息,但不实际发送请求
121
+ 4. **无强制选项**:--force 跳过确认提示,但不绕过后端权限检查
122
+ 5. **与disable对称**:enable 与 disable 互为逆操作,使用相同的 materialIdList 参数结构
123
+
124
+ ## 2.8 示例用法
125
+
126
+ ```bash
127
+ # 启用物料(交互确认)
128
+ barista liberica materials enable 12345
129
+
130
+ # 跳过确认直接启用
131
+ barista liberica materials enable 12345 --force
132
+
133
+ # Dry-run 预览
134
+ barista liberica materials enable 12345 --dry-run
135
+
136
+ # JSON 输出
137
+ barista liberica materials enable 12345 --force --json
138
+
139
+ # 物料不存在
140
+ barista liberica materials enable 99999
141
+ # 输出: Error: 租户物料不存在 (01001410001)
142
+
143
+ # 对已启用物料重复启用(幂等,无报错)
144
+ barista liberica materials enable 12345 --force
145
+ # 输出: ✓ 物料启用成功
146
+ ```
@@ -0,0 +1,188 @@
1
+ # barista liberica materials get
2
+
3
+ 获取单个物料详情。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials get <id>` |
10
+ | 功能描述 | 获取单个物料详情 |
11
+ | HTTP方法 | GET |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ⬜ 否 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── detail(@GetResource(path = "/detail"))
24
+ └── public ResponseData<MasterMaterialResponse> detail(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @ParameterObject @Validated(BaseRequest.detail.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ └── materialId: Long (@NotNull on detail)
37
+ ```
38
+
39
+ ### Response DTO位置
40
+ ```
41
+ coffee-liberica-end/
42
+ └── business/liberica-business-sales/sales-api/
43
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
44
+ └── MasterMaterialResponse.java
45
+ ├── materialId: Long
46
+ ├── materialCode: String
47
+ ├── materialNo: String
48
+ ├── materialName: String
49
+ ├── materialShortName: String
50
+ ├── materialMaker: String
51
+ ├── materialTags: Tags
52
+ ├── materialTagNames: List<String>
53
+ ├── materialClass: String
54
+ ├── mouldType: String
55
+ ├── materialBarCode: String
56
+ ├── materialType: String
57
+ ├── materialUomCode: String
58
+ ├── enableMultiUom: String (Y/N)
59
+ ├── multiUomCodes: MultiUom
60
+ ├── enableSale: String (Y/N)
61
+ ├── enablePurchase: String (Y/N)
62
+ ├── enableSubMaterial: String (Y/N)
63
+ ├── enableOutsourcing: String (Y/N)
64
+ ├── enableDivision: String (Y/N)
65
+ ├── enableShelfLifeManagement: String (Y/N)
66
+ ├── stopProduction: String (Y/N)
67
+ ├── shelfLifeUnit: String
68
+ ├── shelfLife: Integer
69
+ ├── shelfLifeWarningDays: Integer
70
+ ├── shippingMethod: String
71
+ ├── transactionMethod: String
72
+ ├── tradeType: String
73
+ ├── productionPeriod: Integer
74
+ ├── productionQuantityPerLot: BigDecimal
75
+ ├── lowLotRate: Float
76
+ ├── useMaterialLotRate: String (Y/N)
77
+ ├── substituteMaterials: SubstituteMaterials
78
+ ├── safetyInventory: BigDecimal
79
+ ├── defaultWarehouse: String
80
+ ├── defaultSupplier: String
81
+ ├── follower: String
82
+ ├── minPackageQuantity: String
83
+ ├── grossWeight: String
84
+ ├── netWeight: String
85
+ ├── color: String
86
+ ├── longX: BigDecimal
87
+ ├── longXUom: String
88
+ ├── wideY: BigDecimal
89
+ ├── wideYUom: String
90
+ ├── highZ: BigDecimal
91
+ ├── highZUom: String
92
+ ├── volume: String
93
+ ├── volumeUom: String
94
+ ├── thickness: BigDecimal
95
+ ├── thicknessUom: String
96
+ ├── totalThickness: BigDecimal
97
+ ├── diameter: BigDecimal
98
+ ├── diameterUom: String
99
+ ├── outerDiameter: BigDecimal
100
+ ├── outerDiameterUom: String
101
+ ├── innerDiameter: BigDecimal
102
+ ├── innerDiameterUom: String
103
+ ├── defaultClient: String
104
+ ├── unitPrice: BigDecimal
105
+ ├── currency: String
106
+ ├── statusFlag: Integer (1=enable, 2=disable)
107
+ ├── remark: String
108
+ ├── salesOrderCount: String
109
+ ├── salesOrderSummary: String
110
+ ├── createTime: String
111
+ └── updateTime: String
112
+ ```
113
+
114
+ ## 2.3 CLI参数设计
115
+
116
+ ### 命令结构
117
+ ```
118
+ barista liberica materials get <id> [options]
119
+ ```
120
+
121
+ ### 位置参数
122
+ | 参数 | 类型 | 必填 | 说明 |
123
+ |------|------|------|------|
124
+ | id | string | ✅ | 物料ID (materialId) |
125
+
126
+ ### 全局选项
127
+ | 选项 | 类型 | 说明 |
128
+ |------|------|------|
129
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
130
+ | `--tenant` | string | 租户代码 |
131
+ | `--json` | boolean | JSON输出 |
132
+
133
+ ### 命令选项
134
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 |
135
+ |------|--------|------|------|--------|------|
136
+ | — | — | — | — | — | 此命令无额外选项,ID 通过位置参数传入 |
137
+
138
+ ## 2.4 字段映射表
139
+
140
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
141
+ |---------|---------|----------|----------|
142
+ | <id> (位置参数) | materialId | string→Long | @NotNull, 必须为正整数 |
143
+
144
+ ## 2.5 错误码引用
145
+
146
+ ### ExceptionEnum位置
147
+ ```
148
+ coffee-liberica-end/
149
+ └── business/liberica-business-sales/sales-api/
150
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
151
+ └── MasterMaterialExceptionEnum.java
152
+ ├── MASTER_MATERIAL_NOT_EXIST("01001340001", "租户物料不存在")
153
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001340006", "指定{}不存在")
154
+ └── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001340010", "指定{}不存在")
155
+ ```
156
+
157
+ ### 已知错误码
158
+ | 错误码 | 错误消息 | 触发条件 |
159
+ |--------|----------|----------|
160
+ | 01001340001 | 租户物料不存在 | materialId 不存在或不属于当前租户 |
161
+
162
+ ## 2.6 权限检查
163
+
164
+ | 检查项 | 位置 | 说明 |
165
+ |--------|------|------|
166
+ | 注解 | `@GetResource(path = "/detail")` | 无 requiredPermission |
167
+
168
+ ## 2.7 实现要点
169
+
170
+ 1. **位置参数**:`get` 命令使用 `<id>` 位置参数指定物料ID
171
+ 2. **错误处理**:物料不存在时抛出 `MASTER_MATERIAL_NOT_EXIST`,CLI 显示友好错误信息
172
+ 3. **tenantId来源**:来自 X-TENANT-ID header,后端自动按租户隔离数据
173
+ 4. **API端点**:GET `/api/enterprise/sales/material/detail?materialId={id}`
174
+ 5. **ID类型注意**:后端使用 Long (BigInteger) 类型,CLI 中使用 string 避免 JavaScript 精度丢失
175
+
176
+ ## 2.8 示例用法
177
+
178
+ ```bash
179
+ # 获取物料详情
180
+ barista liberica materials get 12345
181
+
182
+ # JSON 输出
183
+ barista liberica materials get 12345 --json
184
+
185
+ # 物料不存在
186
+ barista liberica materials get 99999
187
+ # 输出: Error: 租户物料不存在 (01001340001)
188
+ ```
@@ -0,0 +1,198 @@
1
+ # barista liberica materials list
2
+
3
+ 分页查询物料列表。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials list` |
10
+ | 功能描述 | 分页查询物料列表 |
11
+ | HTTP方法 | GET |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ⬜ 否 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── page(@GetResource(path = "/page"))
24
+ └── public ResponseData<PageResult<MasterMaterialResponse>> page(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @ParameterObject MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ ├── pageNo: Long (分页页码,从0开始)
37
+ ├── pageSize: Long (分页大小)
38
+ ├── materialId: Long (物料ID)
39
+ ├── materialCode: String (物料编码)
40
+ ├── materialNo: String (物料号码)
41
+ ├── materialName: String (物料名称)
42
+ ├── materialClass: String (物料类别)
43
+ ├── statusFlag: Integer (状态:1=启用,2=禁用)
44
+ ├── queryMaterialTags: List<String> (物料标签查询条件)
45
+ ├── queryMaterialClass: List<String> (物料类别查询条件)
46
+ ├── queryMaterialCode: Set<String> (物料编码范围查询条件)
47
+ └── excludeMaterialCode: Set<String> (排除物料编码范围查询条件)
48
+ ```
49
+
50
+ ### Response DTO位置
51
+ ```
52
+ coffee-liberica-end/
53
+ └── business/liberica-business-sales/sales-api/
54
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
55
+ └── MasterMaterialResponse.java
56
+ ├── materialId: Long
57
+ ├── materialCode: String
58
+ ├── materialNo: String
59
+ ├── materialName: String
60
+ ├── materialShortName: String
61
+ ├── materialMaker: String
62
+ ├── materialTags: Tags
63
+ ├── materialClass: String
64
+ ├── materialBarCode: String
65
+ ├── materialType: String
66
+ ├── materialUomCode: String
67
+ ├── enableMultiUom: String (Y/N)
68
+ ├── enableSale: String (Y/N)
69
+ ├── enablePurchase: String (Y/N)
70
+ ├── enableSubMaterial: String (Y/N)
71
+ ├── enableOutsourcing: String (Y/N)
72
+ ├── enableDivision: String (Y/N)
73
+ ├── enableShelfLifeManagement: String (Y/N)
74
+ ├── stopProduction: String (Y/N)
75
+ ├── safetyInventory: BigDecimal
76
+ ├── defaultWarehouse: String
77
+ ├── defaultSupplier: String
78
+ ├── follower: String
79
+ ├── unitPrice: BigDecimal
80
+ ├── currency: String
81
+ ├── statusFlag: Integer (1=启用,2=禁用)
82
+ ├── remark: String
83
+ ├── createTime: String
84
+ └── updateTime: String
85
+ ```
86
+
87
+ ### 分页包装器
88
+ ```
89
+ cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult
90
+ ├── totalRows: long
91
+ ├── pageSize: long
92
+ ├── pageNo: long
93
+ └── rows: List<MasterMaterialResponse>
94
+ ```
95
+
96
+ ## 2.3 CLI参数设计
97
+
98
+ ### 命令结构
99
+ ```
100
+ barista liberica materials list [options]
101
+ ```
102
+
103
+ ### 全局选项
104
+ | 选项 | 类型 | 说明 |
105
+ |------|------|------|
106
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
107
+ | `--tenant` | string | 租户代码 |
108
+ | `--json` | boolean | JSON输出 |
109
+
110
+ ### 命令选项
111
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 | 对应DTO字段 |
112
+ |------|--------|------|------|--------|------|-------------|
113
+ | --page | -p | number | ⬜ | 1 | 页码(从1开始) | pageNo (转换:CLI页码-1) |
114
+ | --size | -s | number | ⬜ | 20 | 每页条数 | pageSize |
115
+ | --status | — | string | ⬜ | - | 状态:enable/disable | statusFlag (enable=1, disable=2) |
116
+ | --class | -c | string | ⬜ | - | 物料类别 | queryMaterialClass |
117
+ | --keyword | -k | string | ⬜ | - | 搜索关键词(物料编码/物料号码/物料名称) | materialCode/materialNo/materialName |
118
+
119
+ ## 2.4 字段映射表
120
+
121
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
122
+ |---------|---------|----------|----------|
123
+ | --page / -p | pageNo | number→Long,CLI页码-1 | >= 1 |
124
+ | --size / -s | pageSize | number→Long | 1-100 |
125
+ | --status | statusFlag | string→Integer | enable=1, disable=2 |
126
+ | --class / -c | queryMaterialClass | string→List<String> | - |
127
+ | --keyword / -k | materialCode/materialNo/materialName | 直接传递 | 模糊查询 |
128
+
129
+ ## 2.5 错误码引用
130
+
131
+ ### ExceptionEnum位置
132
+ ```
133
+ coffee-liberica-end/
134
+ └── business/liberica-business-sales/sales-api/
135
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
136
+ └── MasterMaterialExceptionEnum.java
137
+ ├── MASTER_MATERIAL_NOT_EXIST("01001411001", "租户物料不存在")
138
+ ├── MASTER_MATERIAL_CODE_FORMAT_CANNOT_EMPTY("01001411003", "物料编码规则不能为空")
139
+ ├── MASTER_MATERIAL_CODE_FORMAT_NOT_CORRECT("01001411004", "物料编码规则格式不正确")
140
+ ├── MASTER_MATERIAL_CODE_VALIDATE_EMPTY_ERROR("01001411005", "{}不能为空")
141
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001411006", "指定{}不存在")
142
+ ├── MASTER_MATERIAL_NO_VALIDATE_EMPTY_ERROR("01001411007", "{}不能为空")
143
+ ├── MASTER_MATERIAL_NO_VALIDATE_NOT_EXIST_ERROR("01001411008", "指定{}不存在")
144
+ ├── MASTER_MATERIAL_NAME_VALIDATE_EMPTY_ERROR("01001411009", "{}不能为空")
145
+ ├── MASTER_MATERIAL_NAME_VALIDATE_NOT_EXIST_ERROR("01001411010", "指定{}不存在")
146
+ └── MASTER_MATERIAL_NAME_DOES_NOT_MATCH_NO_ERROR("01001411011", "{}与{}不匹配")
147
+ ```
148
+
149
+ ### 已知错误码
150
+ | 错误码 | 错误消息 | 触发条件 |
151
+ |--------|----------|----------|
152
+ | 01001411001 | 租户物料不存在 | 查询详情时ID不存在 |
153
+ | 01001411006 | 指定物料编码不存在 | 物料编码无效 |
154
+ | 01001411008 | 指定物料号码不存在 | 物料号码无效 |
155
+ | 01001411010 | 指定物料名称不存在 | 物料名称无效 |
156
+
157
+ ## 2.6 权限检查
158
+
159
+ | 检查项 | 位置 | 说明 |
160
+ |--------|------|------|
161
+ | 注解 | `@GetResource(path = "/page")` | 无 requiredPermission(无需权限码) |
162
+
163
+ **注意**:page 接口在 Controller 层无需权限校验,数据范围通过 tenantId 隔离。
164
+
165
+ ## 2.7 实现要点
166
+
167
+ 1. **分页默认值**:page=1, size=20
168
+ 2. **分页转换**:CLI使用1-based页码,API使用0-based页码(调用时需减1)
169
+ 3. **搜索行为**:keyword 同时匹配 materialCode、materialNo 和 materialName(模糊查询)
170
+ 4. **状态映射**:CLI参数 `enable`/`disable` 映射到 API 值 `1`/`2`
171
+ 5. **无结果处理**:返回空列表,不抛出异常
172
+ 6. **tenantId来源**:来自 JWT token(无需 X-TENANT-ID header)
173
+ 7. **输出格式**:表格形式展示,分页信息在底部显示
174
+
175
+ ## 2.8 示例用法
176
+
177
+ ```bash
178
+ # 默认分页
179
+ barista liberica materials list
180
+
181
+ # 指定页码和每页条数
182
+ barista liberica materials list --page 2 --size 50
183
+
184
+ # 按状态筛选
185
+ barista liberica materials list --status enable
186
+
187
+ # 按物料类别筛选
188
+ barista liberica materials list --class "raw_material"
189
+
190
+ # 关键词搜索
191
+ barista liberica materials list --keyword "螺丝"
192
+
193
+ # 组合筛选
194
+ barista liberica materials list --page 1 --size 10 --status enable --keyword "M001"
195
+
196
+ # JSON 输出(便于脚本处理)
197
+ barista liberica materials list --page 1 --size 20 --json
198
+ ```