From 0beb4e197c13ccce94a943e158993c503700f4da Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 20 八月 2026 17:57:23 +0800
Subject: [PATCH] feat(sales): 实现发货模块部分发货与批量发货功能

---
 shipping_list_page.json                                                       |    1 
 src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java   |    6 
 docs/admin_full_permission.md                                                 |   59 ++++
 src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java         |    2 
 src/main/resources/mapper/device/DeviceMaintenanceMapper.xml                  |    1 
 docs/device_maintenance_batch_add.md                                          |   91 +++++++
 src/main/java/com/ruoyi/sales/service/ShippingInfoService.java                |    5 
 docs/partial_batch_shipping.md                                                |  286 +++++++++++++++++++++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                    |    8 
 src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java                        |    5 
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                        |    1 
 src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java                          |    5 
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java       |   81 ++++++
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                  |   10 
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java |   30 ++
 src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java    |   10 
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java          |   72 +++--
 src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java                    |    4 
 doc/20260820_shipping_info_add_quantity.sql                                   |    9 
 19 files changed, 653 insertions(+), 33 deletions(-)

diff --git a/doc/20260820_shipping_info_add_quantity.sql b/doc/20260820_shipping_info_add_quantity.sql
new file mode 100644
index 0000000..0a953bb
--- /dev/null
+++ b/doc/20260820_shipping_info_add_quantity.sql
@@ -0,0 +1,9 @@
+-- shipping_info 鏂板"鏈鍙戣揣鏁伴噺"瀛楁锛屾敮鎸侀儴鍒嗗彂璐�
+ALTER TABLE shipping_info
+    ADD COLUMN quantity DECIMAL(18, 2) NULL COMMENT '鏈鍙戣揣鏁伴噺' AFTER sales_ledger_product_id;
+
+-- 鍘嗗彶鏁版嵁鍥炲~锛氬瓨閲忓彂璐у崟鎸夊搴斾骇鍝佽鏁伴噺鍥炲~
+UPDATE shipping_info si
+    LEFT JOIN sales_ledger_product slp ON si.sales_ledger_product_id = slp.id
+SET si.quantity = slp.quantity
+WHERE si.quantity IS NULL;
diff --git a/docs/admin_full_permission.md b/docs/admin_full_permission.md
new file mode 100644
index 0000000..e5fcdf0
--- /dev/null
+++ b/docs/admin_full_permission.md
@@ -0,0 +1,59 @@
+# 绠$悊鍛樺叏妯″潡鍏ㄦ潈闄愯眮鍏�
+
+## 鍔熻兘璇存槑
+
+绠$悊鍛樿处鍙凤紙admin銆佹櫘閫�2銆佹渶楂�1 瑙掕壊锛夊湪鍏ㄩ儴妯″潡鎷ユ湁鎵�鏈夋煡鐪嬨�佺紪杈戙�佹柊澧炪�佸垹闄ゆ潈闄愶紝涓嶅啀鍙楀悇妯″潡"褰掑睘浜�/缁存姢浜�"绛夌‖缂栫爜闄愬埗绾︽潫銆�
+
+鍏ㄥ眬鏉冮檺灞傦紙`*:*:*` 鏉冮檺銆佹暟鎹寖鍥磋繃婊ゃ�佺鎴疯绾ц繃婊わ級鍘熸湰宸插 admin 鏀捐锛屾湰鏀瑰姩瑙i櫎鐨勬槸鍚勬ā鍧椾腑**褰掑睘浜�/缁存姢浜烘牎楠�**鐨勯澶栭檺鍒躲��
+
+## admin 鍒ゅ畾鏂瑰紡
+
+鍓嶇缁熶竴浣跨敤锛堜笌 `approvalProcess/index.vue`銆乣safeWorkApproval/index.vue` 鏃㈡湁妯″紡涓�鑷达級锛�
+
+```js
+const isAdminUser = computed(() =>
+  ["admin", "鏅��2", "鏈�楂�1"].some(r => (userStore.roles || []).includes(r))
+);
+```
+
+鍚庣瀵瑰簲 `SecurityUtils.isAdmin(userId)`锛坄SecurityUtils.java`锛�= 鎷ユ湁 `鏅��2` / `admin` / `鏈�楂�1` 浠讳竴瑙掕壊銆�
+
+## 娑夊強椤甸潰涓庢敼鍔�
+
+| 妯″潡 | 椤甸潰 | 闄愬埗鐐� | 鏀瑰姩 |
+|------|------|--------|------|
+| 閿�鍞� | `salesManagement/salesLedger/index.vue` | 缂栬緫/鍒犻櫎鎸夐挳浠呯淮鎶や汉鍙搷浣滐紱闈炵淮鎶や汉閲戦鍒楁樉绀� `*****`锛涘悎璁℃帺鐮� | `canEditLedger`/`canDeleteLedger` 鍔� `\|\| isAdminUser.value`锛涗袱涓噾棰� formatter 鍔� `&& !isAdminUser.value`锛沗summarizeChildrenTable` 鍚屾牱璞佸厤 |
+| 瀹㈡埛 | `basicData/customerFileOpenSea/index.vue` | 鍏捣鍒犻櫎鎷︽埅"涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�" | 鍒犻櫎 filter 鍔� `&& !isAdminUser.value` |
+| 瀹㈡埛 | `basicData/customerFile/index.vue` | 绉佹捣鍒犻櫎鎷︽埅"鍏捣鍒嗛厤鐨勫鎴蜂笉鑳藉垹闄�" | 鍒犻櫎 filter 鍔� `&& !isAdminUser.value` |
+| 渚涘簲鍟� | `basicData/supplierManage/components/HomeTab.vue`銆乣BlacklistTab.vue` | 鍒犻櫎鎷︽埅浠栦汉缁存姢 | 鍒犻櫎 filter 鍔� `&& !isAdminUser.value` |
+| 閲囪喘 | `collaborativeApproval/purchaseApproval/index.vue` | 鍒犻櫎鎷︽埅浠栦汉缁存姢 | 鍒犻櫎 filter 鍔� `&& !isAdminUser.value` |
+| 璐ㄩ噺 | `qualityManagement/rawMaterialInspection/index.vue`銆乣processInspection/index.vue`銆乣finalInspection/index.vue` | 妫�楠�/鎻愪氦鎸夐挳浠呮楠屽憳鏈汉鍙搷浣� | disabled 鍒ゅ畾鍔� `&& !isAdminUser.value` |
+| 瀹㈡湇 | `customerService/feedbackRegistration/index.vue` | 鍒犻櫎鎷︽埅浠栦汉鏁版嵁 | 鍒犻櫎 filter 鍔� `&& !isAdminUser.value` |
+| 瀹夊叏 | `safeProduction/dangerInvestigation/index.vue` | 鏁存敼鎸夐挳浠呭綊灞炰汉鍙搷浣� | `isRectify` 瀵� admin 鎭掍负 `false`锛堟寜閽笉绂佺敤锛� |
+| 鐢熶骇 | `productionManagement/workOrder/index.vue` | 鎶ュ伐浠呭伐鍗�/宸ュ簭鎶ュ伐浜哄彲鎿嶄綔锛涙帓浜т粎宸ュ簭浜哄憳鍙搷浣� | `canCurrentUserReport` 鍔� `isAdminUser.value`锛沗canScheduleByWorkOrderNo` 瀵� admin 鐩存帴杩斿洖 `true` |
+
+## 鍚庣淇敼鐐�
+
+### `basic/controller/CustomerPrivatePoolController.java`锛堝鎴风娴峰垪琛級
+
+```java
+@GetMapping("/listPage")
+@ApiOperation("瀹㈡埛锛堢娴凤級鍒楄〃")
+public R listPage(CustomerPrivatePoolDto customerPrivatePoolDto, Page<CustomerPrivatePoolDto> page){
+    // 绠$悊鍛樺彲鏌ョ湅鍏ㄩ儴瀹㈡埛锛屼笉鍙楀綊灞炰汉闄愬埗
+    if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+        customerPrivatePoolDto.setBoundId(SecurityUtils.getUserId());
+    }
+    IPage<CustomerPrivatePoolDto> listPage = customerPrivatePoolService.listPage(page, customerPrivatePoolDto);
+    return R.ok(listPage);
+}
+```
+
+> `CustomerPrivatePoolMapper.xml` 鐨� `boundId != null` 鍔ㄦ�佹潯浠跺ぉ鐒舵敮鎸佺┖鍊艰烦杩囷紝鏃犻渶鏀� mapper銆�
+
+## 娉ㄦ剰浜嬮」
+
+- 鍚勯〉闈㈤渶鍦� `<script setup>` 涓紩鍏� `computed`锛堥儴鍒嗛〉闈㈠師鏈湭寮曞叆锛夊苟瀹氫箟 `isAdminUser`
+- 璐ㄩ噺妫�楠屼笁妯″潡涓�"妫�楠�/鎻愪氦"涓ゅ disabled 閫昏緫鍧囬渶鍚屾淇敼
+- 宸ュ崟椤垫鍓嶆湭浣跨敤 `userStore`锛屾湰娆℃柊澧� `import useUserStore from "@/store/modules/user"` 寮曞叆
+- 闈� admin 璐﹀彿涓婅堪闄愬埗淇濇寔鍘熸牱锛屼笉鍙楀奖鍝�
diff --git a/docs/device_maintenance_batch_add.md b/docs/device_maintenance_batch_add.md
new file mode 100644
index 0000000..24af1a0
--- /dev/null
+++ b/docs/device_maintenance_batch_add.md
@@ -0,0 +1,91 @@
+# 璁惧淇濆吇鎵归噺鏂板璁″垝
+
+## 鍔熻兘璇存槑
+
+鍦ㄨ澶囦繚鍏�-浠诲姟璁板綍椤�"鏂板璁″垝"涓紝鏀寔涓�娆″閫夊鍙拌澶囥�佸叡鐢ㄤ竴濂椾繚鍏婚」鐩�/璁″垝淇濆吇鏃ユ湡/褰曞叆浜猴紝涓�閿负鎵�鏈夐�変腑璁惧鍚勭敓鎴愪竴鏉′繚鍏昏鍒掞紝鍑忓皯閲嶅褰曞叆銆�
+
+## 娑夊強椤甸潰
+
+- 璁惧淇濆吇锛堜换鍔¤褰� tab锛�
+- 鏂板/缂栬緫璁惧淇濆吇璁″垝寮圭獥锛坄PlanModal.vue`锛�
+
+## API
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /device/maintenance/batchAdd | 鎵归噺鏂板璁惧淇濆吇璁″垝 |
+
+**璇锋眰鍙傛暟锛坆ody锛孞SON锛夛細**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| deviceIds | Long[] | 鏄� | 閫変腑鐨勮澶囧彴璐� id 鍒楄〃锛堣嚦灏� 1 涓級 |
+| maintenancePlanTime | datetime | 鏄� | 璁″垝淇濆吇鏃ユ湡锛堝叡鐢級 |
+| createUser | Integer | 鏄� | 褰曞叆浜猴紙鍏辩敤锛� |
+| maintenanceItem | String | 鍚� | 淇濆吇椤圭洰锛堝叡鐢級 |
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛" }`
+
+## 鍓嶇淇敼鐐�
+
+### 1. 鏂板鎵归噺 API锛坄src/api/equipmentManagement/upkeep.js`锛�
+
+```js
+export const batchAddUpkeep = (data) => {
+  return request({
+    url: "/device/maintenance/batchAdd",
+    method: "post",
+    data,
+  });
+};
+```
+
+### 2. 鏂板璁″垝寮圭獥璁惧涓嬫媺鏀逛负澶氶�夛紙`Form/PlanModal.vue`锛�
+
+```html
+<el-select
+  v-model="form.deviceIds"
+  multiple
+  @change="setDeviceModel"
+  placeholder="璇烽�夋嫨璁惧"
+  filterable
+  default-first-option
+  :reserve-keyword="false"
+>
+```
+
+- `form` 涓� `deviceLedgerId` 瀛楁鏇挎崲涓烘暟缁� `deviceIds: []`
+- `setDeviceModel` 鏀逛负鎸夐�変腑璁惧闆嗗悎灞曠ず瑙勬牸鍨嬪彿锛堥�楀彿杩炴帴锛�
+- 缂栬緫妯″紡鍥炴樉锛歚form.deviceIds = [data.deviceLedgerId]`
+
+### 3. 鎻愪氦閫昏緫涓夊垎鏀�
+
+```js
+const common = {
+  maintenancePlanTime: form.maintenancePlanTime,
+  createUser: form.createUser,
+  maintenanceItem: form.maintenanceItem,
+};
+if (id.value) {
+  // 缂栬緫璁″垝锛堝崟璁惧锛�
+  await editUpkeep({ id, deviceLedgerId: form.deviceIds[0], ...common, status });
+} else if (form.deviceIds.length > 1) {
+  // 鎵归噺鏂板
+  await batchAddUpkeep({ deviceIds: form.deviceIds, ...common });
+} else {
+  // 鍗曡澶囨柊澧�
+  await addUpkeep({ deviceLedgerId: form.deviceIds[0], ...common });
+}
+```
+
+## 鍚庣淇敼鐐�
+
+- `DeviceMaintenance` 鏂板 `deviceIds`锛堥潪琛ㄥ瓧娈碉紝`@TableField(exist = false)`锛�
+- `DeviceMaintenanceController` 鏂板 `POST /device/maintenance/batchAdd`
+- `DeviceMaintenanceServiceImpl.batchSaveDeviceRepair`锛氶亶鍘嗚澶� id锛屾寜璁惧鍙拌处濉厖鍚嶇О/瑙勬牸鍨嬪彿锛屾壒閲� `saveBatch`
+
+## 娉ㄦ剰浜嬮」
+
+- 鎵归噺鐢熸垚鐨勮褰曠姸鎬侀粯璁� `寰呬繚鍏�(0)`
+- 澶氬彴璁惧瑙勬牸鍨嬪彿涓嶅悓鏃讹紝寮圭獥鍐呰鏍煎瀷鍙蜂互閫楀彿杩炴帴灞曠ず锛堜粎灞曠ず锛屾彁浜ゅ悗鎸夊悇璁惧鍙拌处閲嶆柊濉厖锛�
+- 鍗曡澶囨柊澧炪�佽鍐�"缂栬緫"璁″垝閫昏緫淇濇寔涓嶅彉
diff --git a/docs/partial_batch_shipping.md b/docs/partial_batch_shipping.md
new file mode 100644
index 0000000..df1a588
--- /dev/null
+++ b/docs/partial_batch_shipping.md
@@ -0,0 +1,286 @@
+# 鍙戣揣妯″潡鏀归�狅細閮ㄥ垎鍙戣揣 + 鎵归噺鍙戣揣 + 瑙i櫎瀹屽伐闄愬埗
+
+## 鑳屾櫙
+
+鍙戣揣妯″潡鏈鏀归�犱笁椤硅兘鍔涳細
+
+1. **閮ㄥ垎鍙戣揣**锛氱郴缁熶笉鍐嶅己鍒惰姹傝鍗� 100% 瀹屽伐鎵嶅彲鍙戣揣锛屽彂璐у脊绐楀彲杈撳叆"鏈鍙戣揣鏁伴噺"锛屽鎵归�氳繃鍚庝粎鎸夎鏁伴噺鎵e噺搴撳瓨銆�
+2. **瑙i櫎鍙戣揣鎸夐挳閿佸畾**锛氫笉鍐嶅洜浜у搧鏃犲簱瀛樿褰� / 浜ч噺涓嶈冻锛堟湭瀹屽伐锛夐攣瀹�"鍙戣揣"鎸夐挳锛屽彧瑕佸瓨鍦ㄥ墿浣欏彲鍙戞暟閲忓嵆鍙彂璧峰彂璐с��
+3. **鎵归噺鍙戣揣**锛氭敮鎸佸悓涓�瀹㈡埛澶氭潯璁㈠崟鍕鹃�夊悗鎵归噺鍙戣揣锛屾棤闇�閫愭潯鎿嶄綔銆�
+
+## 娑夊強椤甸潰
+
+- 閿�鍞彴璐﹀垪琛ㄩ〉锛坄salesLedger/index.vue`锛夆�� 鍙戣揣寮圭獥銆佹壒閲忓彂璐у叆鍙�
+- 鍙戣揣淇℃伅绠$悊椤碉紙`deliveryLedger/index.vue`锛夆�� 鍙戣揣鏁伴噺灞曠ず
+
+## API
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /shippingInfo/add | 鍒涘缓鍙戣揣鍗曞苟鍙戣捣鍙戣揣瀹℃壒锛堟柊澧炴湰娆″彂璐ф暟閲忓弬鏁帮級 |
+| POST | /shippingInfo/batchAdd | 鎵归噺鍙戣揣锛氬悓涓�瀹㈡埛澶氭潯璁㈠崟锛岄�愭潯鍒涘缓鍙戣揣鍗曞苟鍙戣捣瀹℃壒 |
+| GET | /sales/product/list | 浜у搧鏄庣粏鍒楄〃锛堝搷搴旀柊澧炲凡鍙戞暟閲忋�佸墿浣欏彲鍙戞暟閲忥級 |
+
+### 1. POST /shippingInfo/add锛堣姹傚弬鏁板彉鏇达級
+
+**璇锋眰鍙傛暟锛�** 鍦ㄥ師鏈夊瓧娈靛熀纭�涓婃柊澧� `quantity`锛堟湰娆″彂璐ф暟閲忥級銆�
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| salesLedgerProductId | Long | 鏄� | 閿�鍞彴璐︿骇鍝佹槑缁咺D |
+| quantity | BigDecimal | 鍚� | 鏈鍙戣揣鏁伴噺锛屼笉浼犳椂榛樿鍙栦骇鍝佹槑缁嗗叏閲忔暟閲� |
+| type | String | 鍚� | 瀹℃壒澶囨敞鍓嶇紑锛堝 閮ㄥ垎鍙戣揣/鎵归噺鍙戣揣锛� |
+| approveUserIds | Array | 鍚� | 瀹℃壒浜篒D鍒楄〃 |
+| tempFileIds | Array | 鍚� | 涓存椂闄勪欢ID鍒楄〃 |
+| expressNumber | String | 鍚� | 蹇�掑崟鍙� |
+| expressCompany | String | 鍚� | 蹇�掑叕鍙� |
+| shippingCarNumber | String | 鍚� | 鍙戣揣杞︾墝鍙� |
+| shippingDate | String | 鍚� | 鍙戣揣鏃ユ湡 |
+
+**鏍¢獙瑙勫垯锛�** `quantity` 蹇呴』澶т簬 0 涓斾笉瓒呰繃"鍓╀綑鍙彂鏁伴噺"锛屽惁鍒欐帴鍙h繑鍥為敊璇��
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛" }`
+
+### 2. POST /shippingInfo/batchAdd锛堟柊澧炴帴鍙o級
+
+**璇锋眰浣擄細** 鏁扮粍锛屽厓绱犱负鍙戣揣鍗曟暟鎹紙瀛楁鍚� `/shippingInfo/add`锛夈��
+
+```json
+[
+  {
+    "salesLedgerId": 1,
+    "salesLedgerProductId": 100,
+    "quantity": 10,
+    "type": "鎵归噺鍙戣揣"
+  },
+  {
+    "salesLedgerId": 2,
+    "salesLedgerProductId": 200,
+    "quantity": 5,
+    "type": "鎵归噺鍙戣揣"
+  }
+]
+```
+
+**鏍¢獙瑙勫垯锛�** 鎵�鏈変骇鍝佹槑缁嗘墍灞為攢鍞彴璐﹀繀椤讳负**鍚屼竴瀹㈡埛**锛屽惁鍒欒繑鍥為敊璇�"鎵归噺鍙戣揣浠呮敮鎸佸悓涓�瀹㈡埛鐨勫鏉¤鍗�"銆傛瘡鏉℃暟鎹嫭绔嬬敓鎴愬彂璐х紪鍙峰苟鐙珛鍙戣捣瀹℃壒銆�
+
+**鍝嶅簲锛�** `{ "code": 200, "msg": "鎿嶄綔鎴愬姛" }`
+
+### 3. GET /sales/product/list锛堝搷搴旀柊澧炲瓧娈碉級
+
+鍝嶅簲涓瘡鏉′骇鍝佹槑缁嗘柊澧炰袱涓瓧娈碉細
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+|------|------|------|
+| alreadyShippedQuantity | BigDecimal | 宸插彂鏁伴噺锛堢姸鎬佷负"瀹℃牳閫氳繃 + 宸插彂璐�"鐨勫彂璐ц褰曟暟閲忎箣鍜岋級 |
+| unshippedQuantity | BigDecimal | 鍓╀綑鍙彂鏁伴噺 = 浜у搧鏄庣粏鏁伴噺 鈭� 宸插彂鏁伴噺 |
+
+## 鍓嶇淇敼鐐�
+
+### 1. 瑙i櫎鍙戣揣鎸夐挳閿佸畾锛坈anShip锛�
+
+`canShip` 鍘熼�昏緫瑕佹眰 `hasStockInventory`锛堜骇鍝佸繀椤绘湁搴撳瓨璁板綍锛変笖鍙戣揣鐘舵�佷负"寰呭彂璐�/瀹℃牳鎷掔粷"锛屽鑷存湭瀹屽伐/浜ч噺涓嶈冻鏃跺彂璐ф寜閽閿佸畾銆傛敼閫犲悗**绉婚櫎 `!row.hasStockInventory` 闄愬埗**锛屾敼涓哄垽鏂�"鍓╀綑鍙彂鏁伴噺 > 0"銆�
+
+```js
+// 鍘熼�昏緫
+canShip(row) {
+  return row.hasStockInventory
+    && (row.shippingStatus === '寰呭彂璐�' || row.shippingStatus === '瀹℃牳鎷掔粷');
+}
+
+// 鏂伴�昏緫锛氳В闄ゅ畬宸�/搴撳瓨閿佸畾锛屼粎闇�瀛樺湪鍓╀綑鍙彂鏁伴噺
+canShip(row) {
+  return row.unshippedQuantity > 0
+    && (row.shippingStatus === '寰呭彂璐�' || row.shippingStatus === '瀹℃牳鎷掔粷');
+}
+```
+
+### 2. 鍙戣揣寮圭獥鏂板"鏈鍙戣揣鏁伴噺"
+
+鍙戣揣寮圭獥锛坄deliveryForm`锛夋柊澧�"鏈鍙戣揣鏁伴噺"杈撳叆妗嗭紝榛樿鍊间负 `unshippedQuantity`锛堝墿浣欏彲鍙戞暟閲忥級锛屽苟鍋氫笂闄愭牎楠屻��
+
+```html
+<el-form-item label="鏈鍙戣揣鏁伴噺" prop="quantity">
+  <el-input-number
+    v-model="deliveryForm.quantity"
+    :min="0.01"
+    :max="Number(deliveryForm.unshippedQuantity)"
+    :precision="2"
+    placeholder="璇疯緭鍏ユ湰娆″彂璐ф暟閲�"
+  />
+  <span style="margin-left: 8px; color: #909399;">鍓╀綑鍙彂锛歿{ deliveryForm.unshippedQuantity }}</span>
+</el-form-item>
+```
+
+```js
+// data 涓垵濮嬪寲
+deliveryForm: {
+  salesLedgerProductId: null,
+  salesLedgerId: null,
+  quantity: null,        // 鏈鍙戣揣鏁伴噺
+  unshippedQuantity: 0,  // 鍓╀綑鍙彂鏁伴噺锛堟墦寮�寮圭獥鏃惰祴鍊硷級
+  type: '閮ㄥ垎鍙戣揣',
+  approveUserIds: [],
+  tempFileIds: [],
+},
+
+// 鎵撳紑鍙戣揣寮圭獥
+openDelivery(row) {
+  this.deliveryForm = {
+    salesLedgerProductId: row.id,
+    salesLedgerId: row.salesLedgerId,
+    quantity: row.unshippedQuantity,   // 榛樿鍙栧墿浣欏彲鍙戞暟閲�
+    unshippedQuantity: row.unshippedQuantity,
+    type: '閮ㄥ垎鍙戣揣',
+    approveUserIds: [],
+    tempFileIds: [],
+  };
+  this.deliveryOpen = true;
+},
+
+// 鎻愪氦鍙戣揣
+submitDelivery() {
+  const qty = Number(this.deliveryForm.quantity);
+  if (!qty || qty <= 0) {
+    this.$modal.msgError('鏈鍙戣揣鏁伴噺蹇呴』澶т簬 0');
+    return;
+  }
+  if (qty > Number(this.deliveryForm.unshippedQuantity)) {
+    this.$modal.msgError('鏈鍙戣揣鏁伴噺涓嶈兘瓒呰繃鍓╀綑鍙彂鏁伴噺');
+    return;
+  }
+  addShipping(this.deliveryForm).then(res => {
+    if (res.code === 200) {
+      this.$modal.msgSuccess('鍙戣揣鎴愬姛锛屽凡鍙戣捣瀹℃壒');
+      this.deliveryOpen = false;
+      this.getList(); // 鍒锋柊
+    }
+  });
+}
+```
+
+### 3. 鎵归噺鍙戣揣鎸夐挳 + 寮圭獥
+
+涓昏〃宸叉湁 `type="selection"` 澶嶉�夋銆傛柊澧�"鎵归噺鍙戣揣"鎸夐挳锛屽嬀閫�**鍚屼竴瀹㈡埛**鐨勫鏉¤鍗曞悗鐐瑰嚮锛屽脊鍑烘壒閲忓彂璐у脊绐椼��
+
+```html
+<el-button
+  type="primary"
+  icon="el-icon-s-order"
+  @click="handleBatchShipping"
+  :disabled="selectedLedgers.length === 0"
+>鎵归噺鍙戣揣</el-button>
+```
+
+```js
+data() {
+  return {
+    selectedLedgers: [],          // 鍕鹃�夌殑閿�鍞彴璐︼紙璁㈠崟锛�
+    batchShippingOpen: false,     // 鎵归噺鍙戣揣寮圭獥寮�鍏�
+    batchShippingRows: [],        // 鍙彂璐т骇鍝佽鍒楄〃
+  };
+},
+
+// 鍕鹃�夊彉鍖�
+handleSelectionChange(selection) {
+  this.selectedLedgers = selection;
+},
+
+// 鎵归噺鍙戣揣锛氭牎楠屽悓涓�瀹㈡埛鍚庢媺鍙栧彲鍙戜骇鍝佽
+async handleBatchShipping() {
+  if (!this.selectedLedgers.length) {
+    this.$modal.msgWarning('璇峰厛鍕鹃�夎鍙戣揣鐨勮鍗�');
+    return;
+  }
+  // 鍚屼竴瀹㈡埛鏍¢獙锛堝悗绔篃浼氭牎楠岋級
+  const customerNames = [...new Set(this.selectedLedgers.map(l => l.customerName))];
+  if (customerNames.length > 1) {
+    this.$modal.msgError('鎵归噺鍙戣揣浠呮敮鎸佸悓涓�瀹㈡埛鐨勫鏉¤鍗�');
+    return;
+  }
+  // 鎷夊彇鍚勮鍗曠殑浜у搧鏄庣粏锛屾敹闆嗗墿浣欏彲鍙戞暟閲� > 0 鐨勮
+  this.batchShippingRows = [];
+  for (const ledger of this.selectedLedgers) {
+    const res = await productList({ salesLedgerId: ledger.id, type: 1 });
+    const rows = (res.data || []).filter(r => Number(r.unshippedQuantity) > 0);
+    rows.forEach(r => {
+      r.salesLedgerId = ledger.id;
+      r.shipQuantity = r.unshippedQuantity; // 榛樿鏈鍙戣揣鏁伴噺 = 鍓╀綑鍙彂
+    });
+    this.batchShippingRows = this.batchShippingRows.concat(rows);
+  }
+  if (!this.batchShippingRows.length) {
+    this.$modal.msgWarning('鎵�閫夎鍗曟棤鍓╀綑鍙彂璐т骇鍝�');
+    return;
+  }
+  this.batchShippingOpen = true;
+},
+
+// 鎵归噺鎻愪氦
+submitBatchShipping() {
+  // 閫愯鏍¢獙鏁伴噺
+  for (const row of this.batchShippingRows) {
+    const qty = Number(row.shipQuantity);
+    if (!qty || qty <= 0) {
+      this.$modal.msgError('瀛樺湪鏈鍙戣揣鏁伴噺涓虹┖鎴栦负 0 鐨勮');
+      return;
+    }
+    if (qty > Number(row.unshippedQuantity)) {
+      this.$modal.msgError('瀛樺湪瓒呰繃鍓╀綑鍙彂鏁伴噺鐨勮');
+      return;
+    }
+  }
+  const reqs = this.batchShippingRows.map(r => ({
+    salesLedgerId: r.salesLedgerId,
+    salesLedgerProductId: r.id,
+    quantity: r.shipQuantity,
+    type: '鎵归噺鍙戣揣',
+    approveUserIds: [],
+  }));
+  batchAdd(reqs).then(res => {
+    if (res.code === 200) {
+      this.$modal.msgSuccess('鎵归噺鍙戣揣鎴愬姛锛屽凡鍙戣捣瀹℃壒');
+      this.batchShippingOpen = false;
+      this.getList();
+    }
+  });
+}
+```
+
+鎵归噺鍙戣揣寮圭獥琛ㄦ牸锛�
+
+```html
+<el-table :data="batchShippingRows" border>
+  <el-table-column label="浜у搧澶х被" prop="productCategory" />
+  <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
+  <el-table-column label="璁㈠崟鏁伴噺" prop="quantity" />
+  <el-table-column label="鍓╀綑鍙彂" prop="unshippedQuantity" />
+  <el-table-column label="鏈鍙戣揣鏁伴噺">
+    <template slot-scope="scope">
+      <el-input-number
+        v-model="scope.row.shipQuantity"
+        :min="0.01"
+        :max="Number(scope.row.unshippedQuantity)"
+        :precision="2"
+        size="small"
+      />
+    </template>
+  </el-table-column>
+</el-table>
+```
+
+### 4. 鍙戣揣淇℃伅绠$悊椤靛睍绀�
+
+`deliveryLedger/index.vue` 鍒楄〃寤鸿灞曠ず鏈鍙戣揣鏁伴噺鍒楋紙瀵瑰簲鍚庣 `shipping_info.quantity`锛夛紝鍖哄垎浜庤鍗曟暟閲忥細
+
+```html
+<el-table-column label="鏈鍙戣揣鏁伴噺" prop="quantity" align="center" />
+```
+
+## 娉ㄦ剰浜嬮」
+
+- **鍓╀綑鍙彂鏁伴噺鍙e緞**锛氫粎"瀹℃牳閫氳繃 + 宸插彂璐�"鐘舵�佸彂璐у崟鍗犵敤鏁伴噺锛�"寰呭鏍� / 瀹℃牳涓� / 瀹℃牳鎷掔粷"涓嶅崰鏁伴噺锛岄槻姝㈣秴鍙戙��
+- **鎵归噺鍙戣揣鐨勫鎴锋牎楠�**锛氬墠绔笌鍚庣鍧囨湁鏍¢獙锛屼粎鏀寔鍚屼竴瀹㈡埛澶氭潯璁㈠崟銆�
+- **閮ㄥ垎鍙戣揣鎵e簱瀛�**锛氬鎵归�氳繃鍚庢寜"鏈鍙戣揣鏁伴噺"鎵e噺搴撳瓨锛岃�岄潪璁㈠崟鍏ㄩ噺銆�
+- **鍒犻櫎浜у搧鏄庣粏**锛氫細绾ц仈鍒犻櫎鍏跺彂璐у崟锛屽墿浣欏彲鍙戞暟閲忛殢涔嬫仮澶嶃��
+- **鍘嗗彶鏁版嵁**锛氬瓨閲忓彂璐у崟宸茬敱鏁版嵁搴撹縼绉诲洖濉� `quantity`锛堢瓑浜庡搴斾骇鍝佹槑缁嗘暟閲忥級锛屾棫鏁版嵁鍓╀綑鍙彂鏁伴噺鏄剧ず涓嶅彈褰卞搷銆�
diff --git a/shipping_list_page.json b/shipping_list_page.json
new file mode 100644
index 0000000..2523354
--- /dev/null
+++ b/shipping_list_page.json
@@ -0,0 +1 @@
+{"msg":"鎿嶄綔鎴愬姛","code":200,"data":{"records":[{"salesContractNo":"2608164","customerName":"閫氬寲涓景鑽笟鏈夐檺鍏徃","id":839,"salesLedgerId":2076,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260820002-1787198120552","expressNumber":null,"expressCompany":null,"type":"鎵归噺鍙戣揣","shippingCarNumber":null,"createTime":"2026-08-20T11:55:21","updateTime":"2026-08-20T11:55:21","createUser":1,"updateUser":1,"tenantId":208,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀛熷拰鏍囬箍鑼稿彛鏈嶆恫10ml/鏀�*60鏀�/鐩掔ぜ鐩掞紙鏂扮増锛�"},{"salesContractNo":"2608165","customerName":"閫氬寲涓景鑽笟鏈夐檺鍏徃","id":840,"salesLedgerId":2077,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260820003-1787198120786","expressNumber":null,"expressCompany":null,"type":"鎵归噺鍙戣揣","shippingCarNumber":null,"createTime":"2026-08-20T11:55:21","updateTime":"2026-08-20T11:55:21","createUser":1,"updateUser":1,"tenantId":208,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀛熷拰鏍囬箍鑼稿彛鏈嶆恫10ml*60鏀鏄庝功锛堟柊鐗堬級"},{"salesContractNo":"2608164","customerName":"閫氬寲涓景鑽笟鏈夐檺鍏徃","id":838,"salesLedgerId":2076,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260820001-1787198042511","expressNumber":null,"expressCompany":null,"type":"閮ㄥ垎鍙戣揣","shippingCarNumber":null,"createTime":"2026-08-20T11:54:03","updateTime":"2026-08-20T11:54:03","createUser":1,"updateUser":1,"tenantId":208,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀛熷拰鏍囬箍鑼稿彛鏈嶆恫10ml/鏀�*60鏀�/鐩掔ぜ鐩掞紙鏂扮増锛�"},{"salesContractNo":"2605216","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":837,"salesLedgerId":1439,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716229-1784174973157","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:33","updateTime":"2026-07-16T12:09:33","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓滃崌鍒╁悍鏍囧綊鑺嶅湴榛勪父9鍏�/涓�*15涓�/鐩掑皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2605218","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":836,"salesLedgerId":1441,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716228-1784174964481","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:25","updateTime":"2026-07-16T12:09:25","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"0106-133","productName":"鍖卛瑁呯洅"},{"salesContractNo":"2605225","customerName":"鍖椾含鍗庢磱濂庨緳鑽笟鏈夐檺鍏徃","id":835,"salesLedgerId":1449,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716227-1784174959035","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:19","updateTime":"2026-07-16T12:09:19","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鐨偆搴锋礂娑�50ml涓洅"},{"salesContractNo":"2605224","customerName":"鍖椾含鍗庢磱濂庨緳鑽笟鏈夐檺鍏徃","id":834,"salesLedgerId":1448,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716226-1784174954143","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:14","updateTime":"2026-07-16T12:09:14","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鐨偆搴锋礂娑�50ml璇存槑涔�"},{"salesContractNo":"2605223","customerName":"椋為工锛堝悏鏋楋級涔冲搧鏈夐檺鍏徃","id":833,"salesLedgerId":1447,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716225-1784174949909","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:10","updateTime":"2026-07-16T12:09:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"椋炲竼3娈靛辜鍎块厤鏂瑰ザ绮夌洅瑁呭洓鑱斿寘绾哥洅锛圓10/2403锛屽甫浜岀淮鐮�,R113116401锛�"},{"salesContractNo":"2605021","customerName":"鍐呰挋鍙ゅぉ濂囦腑钂欏埗鑽偂浠芥湁闄愬叕鍙�","id":832,"salesLedgerId":1445,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716224-1784174941012","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:09:01","updateTime":"2026-07-16T12:09:01","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"琛�搴滈�愮榾涓歌湝涓镐腑鐩掓満鍖咃紙澶╁鍟嗘爣锛�2024鐗�(瑙勬牸锛�9g*10*100鐩�/浠讹級"},{"salesContractNo":"2605221","customerName":"灞辫タ澶╄嚧鑽笟鏈夐檺鍏徃","id":831,"salesLedgerId":1444,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716223-1784174935177","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:55","updateTime":"2026-07-16T12:08:55","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"浜慨鍫傛爣鐩愰吀宸︽哀姘熸矙鏄熻兌鍥�36绮掕鏄庝功"},{"salesContractNo":"2605220","customerName":"灞辫タ澶╄嚧鑽笟鏈夐檺鍏徃","id":830,"salesLedgerId":1443,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716222-1784174931166","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:51","updateTime":"2026-07-16T12:08:51","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"浜慨鍫傛爣鐩愰吀宸︽盁娌欐槦鑳跺泭36绮�/灏忕洅"},{"salesContractNo":"2605219","customerName":"澶╂触鐧惧拰鑷宠繙鍖荤枟鎶�鏈湁闄愬叕鍙�","id":829,"salesLedgerId":1442,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716221-1784174926572","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:47","updateTime":"2026-07-16T12:08:47","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"ProHeal 3D.Guaid,295*190*27","productName":"HPC 3D绾哥洅"},{"salesContractNo":"2605233","customerName":"涓逛笢瀹忎笟鍒惰嵂鏈夐檺鍏徃","id":828,"salesLedgerId":1457,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716220-1784174906620","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:27","updateTime":"2026-07-16T12:08:27","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓瑰畯鏍囧鏂规皑鑲界礌鐗�100鐗囧皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2605232","customerName":"绾藉搱浼嵂涓氭湁闄愬叕鍙�","id":827,"salesLedgerId":1456,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716219-1784174902515","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:23","updateTime":"2026-07-16T12:08:23","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"姝h繙鏍囧竷娲涜姮缂撻噴鑳跺泭12绮�*2鏉垮皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2605229","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":826,"salesLedgerId":1453,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716218-1784174893516","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:14","updateTime":"2026-07-16T12:08:14","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0092G灏忕洅锛堟柊鐗堬紝260702T锛�"},{"salesContractNo":"2605228","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":825,"salesLedgerId":1452,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716217-1784174889349","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:09","updateTime":"2026-07-16T12:08:09","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0114B灏忕洅锛堟柊鐗堬紝2605184锛�"},{"salesContractNo":"2605227","customerName":"姹熻タ鐪佽姍钃夊爞鑽笟鑲′唤鏈夐檺鍏徃","id":824,"salesLedgerId":1451,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716216-1784174885356","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:08:05","updateTime":"2026-07-16T12:08:05","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鏈变粊鍫傛爣娓呯伀鐗�0.19g*24鐗�*3鏉胯鏄庝功"},{"salesContractNo":"2605226","customerName":"姹熻タ鐪佽姍钃夊爞鑽笟鑲′唤鏈夐檺鍏徃","id":823,"salesLedgerId":1450,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716215-1784174879042","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:59","updateTime":"2026-07-16T12:07:59","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鏈变粊鍫傛爣娓呯伀鐗�0.19g*24鐗�*3鐗堝皬鐩�"},{"salesContractNo":"2606011","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":822,"salesLedgerId":1475,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716214-1784174875080","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:55","updateTime":"2026-07-16T12:07:55","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0172H灏忕洅锛堟柊鐗�,260514R锛�"},{"salesContractNo":"2606010","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":821,"salesLedgerId":1474,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716213-1784174870795","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:51","updateTime":"2026-07-16T12:07:51","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0031E灏忕洅锛堟柊鐗�,260513R)"},{"salesContractNo":"2606009","customerName":"涓逛笢瀹忎笟鍒惰嵂鏈夐檺鍏徃","id":820,"salesLedgerId":1473,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716212-1784174866726","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:47","updateTime":"2026-07-16T12:07:47","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓瑰畯鏍囩~閰稿簡澶ч湁绱犵⒊閰搁搵鑳跺泭10绮�/鏉�*1鏉�/鐩掕鏄庝功"},{"salesContractNo":"2606008","customerName":"涓逛笢瀹忎笟鍒惰嵂鏈夐檺鍏徃","id":819,"salesLedgerId":1472,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716211-1784174862786","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:43","updateTime":"2026-07-16T12:07:43","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓瑰畯鏍囩~閰稿簡澶ч湁绱犵⒊閰搁搵鑳跺泭10绮掕灏忕洅锛堝甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606007","customerName":"鍞愬北绗竴鍒惰嵂闆嗗洟鑲′唤鏈夐檺鍏徃","id":818,"salesLedgerId":1471,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716210-1784174858595","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:39","updateTime":"2026-07-16T12:07:39","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍠滅帿鐟版爣澶嶆柟鐢茬鍞戦槾閬撴爴14绮掕灏忕洅锛堝甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606005","customerName":"澶╂触鏌忔捣鑽笟鏈夐檺鍏徃","id":817,"salesLedgerId":1469,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716209-1784174850898","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:31","updateTime":"2026-07-16T12:07:31","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"璇鸿礉鍗庝箰鏍囦簩鐢插弻鑳嶆牸鍒楁湰鑴茶兌鍥婏紙I)1.25mg*60绮掑皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606001","customerName":"鍐呰挋鍙ゅぉ濂囦腑钂欏埗鑽偂浠芥湁闄愬叕鍙�","id":816,"salesLedgerId":1465,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716208-1784174840418","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:20","updateTime":"2026-07-16T12:07:20","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"钘ら粍鍋ラ涓�10琚嬩腑鐩�2026鐗堬紙瑙勬牸锛�18涓�/琚�*10琚�/鐩�*200鐩�/浠讹級"},{"salesContractNo":"2606014","customerName":"鍚夋灄鐪佹潪鍙傞鍝佹湁闄愬叕鍙�","id":815,"salesLedgerId":1484,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716207-1784174830314","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:10","updateTime":"2026-07-16T12:07:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鏉炲弬鐐掔倴棣�30鍏嬪皬鐩�(6923018904075)"},{"salesContractNo":"2606015-16","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":814,"salesLedgerId":1483,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716206-1784174825935","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:06","updateTime":"2026-07-16T12:07:06","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙鏂扮増锛�0106-371锛夊寘瑁呯洅锛堟柊鐗堬紝0106-372锛�"},{"salesContractNo":"2606017","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":813,"salesLedgerId":1481,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716205-1784174820905","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:07:01","updateTime":"2026-07-16T12:07:01","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙鏂扮増锛�0106-373锛�"},{"salesContractNo":"2606019","customerName":"鍖椾含涔濋緳鍒惰嵂鏈夐檺鍏徃","id":812,"salesLedgerId":1479,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716204-1784174814277","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:54","updateTime":"2026-07-16T12:06:54","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鐧惧鏅撴爣榫欒儐娉昏倽棰楃矑6鍏�*4琚嬪皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606036","customerName":"鍚夋灄鐪佹潪鍙傞鍝佹湁闄愬叕鍙�","id":811,"salesLedgerId":1496,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716203-1784174807318","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:47","updateTime":"2026-07-16T12:06:47","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鏉炲弬鐐掔倴棣�30鍏嬪皬鐩�(6923018904075)"},{"salesContractNo":"2606035","customerName":"澶╂触鍜屾不鑽笟闆嗗洟鏈夐檺鍏徃","id":810,"salesLedgerId":1495,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716202-1784174803257","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:43","updateTime":"2026-07-16T12:06:43","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"铚�姹夋湰鑽夋爣琛�搴滈�愮榾杞兌鍥�0.8g*6绮�/鏉�*3鏉�/鐩掑皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606034","customerName":"灞辫タ澶╄嚧鑽笟鏈夐檺鍏徃","id":809,"salesLedgerId":1494,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716201-1784174798620","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:39","updateTime":"2026-07-16T12:06:39","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"淇鏍囧鍚堢淮鐢熺礌B鐗�120鐗�/鐡剁摱绛�"},{"salesContractNo":"2606033","customerName":"灞辫タ澶╄嚧鑽笟鏈夐檺鍏徃","id":808,"salesLedgerId":1493,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716200-1784174793168","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:33","updateTime":"2026-07-16T12:06:33","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"淇鏍囧鍚堢淮鐢熺礌B鐗�120鐗�/鐡�*1鐡�/鐩掕鏄庝功"},{"salesContractNo":"2606032","customerName":"灞辫タ澶╄嚧鑽笟鏈夐檺鍏徃","id":807,"salesLedgerId":1492,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716199-1784174789158","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:29","updateTime":"2026-07-16T12:06:29","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"淇鏍囧鍚堢淮鐢熺礌B鐗�120鐗�/鐡跺皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606031","customerName":"涓逛笢瀹忎笟鍒惰嵂鏈夐檺鍏徃","id":806,"salesLedgerId":1491,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716198-1784174784922","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:25","updateTime":"2026-07-16T12:06:25","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓瑰畯鏍囩~閰稿簡澶ч湁绱犵⒊閰搁搵鑳跺泭10绮�/鏉�*1鏉�/鐩掕鏄庝功"},{"salesContractNo":"2606026","customerName":"鍖椾含涔濋緳鍒惰嵂鏈夐檺鍏徃","id":805,"salesLedgerId":1488,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716197-1784174767069","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:07","updateTime":"2026-07-16T12:06:07","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"纾烽吀鑻笝鍝屾灄鍙f湇婧舵恫100姣崌锛�100姣厠璇存槑涔︼紙鏂扮増锛�"},{"salesContractNo":"2606025","customerName":"鍖椾含涔濋緳鍒惰嵂鏈夐檺鍏徃","id":804,"salesLedgerId":1487,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716196-1784174761520","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:06:02","updateTime":"2026-07-16T12:06:02","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涔濊嵂鏍囧彲绔嬪仠纾烽吀鑻笝鍝屾灄鍙f湇婧舵恫100姣崌锛�100姣厠灏忕洅锛堟柊鐗堬紝甯﹁嵂鍝佽拷婧爜锛屼簩杞﹂棿锛�"},{"salesContractNo":"2606024","customerName":"鍖椾含涔濋緳鍒惰嵂鏈夐檺鍏徃","id":803,"salesLedgerId":1486,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716195-1784174757128","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:57","updateTime":"2026-07-16T12:05:57","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"杈惧畨闇栨爣姘ㄥ挅鎰堟晱婧舵恫80姣崌/鐡惰鏄庝功"},{"salesContractNo":"2606023","customerName":"鍖椾含涔濋緳鍒惰嵂鏈夐檺鍏徃","id":802,"salesLedgerId":1485,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716194-1784174752818","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:53","updateTime":"2026-07-16T12:05:53","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"杈惧畨闇栨爣姘ㄥ挅鎰堟晱婧舵恫80姣崌灏忕洅锛堜簩杞﹂棿锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606049","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":801,"salesLedgerId":1509,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716193-1784174748428","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:48","updateTime":"2026-07-16T12:05:48","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"澹叞鍋ヨ偩涓歌鏄庝功"},{"salesContractNo":"2606048","customerName":"澶╂触鍜屾不鑽笟闆嗗洟鏈夐檺鍏徃","id":800,"salesLedgerId":1508,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716192-1784174744430","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:44","updateTime":"2026-07-16T12:05:44","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍠勪妇鏍囧洓瀛f劅鍐掔墖0.37g*38鐗�*240鐩掑皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606047","customerName":"澶╂触鍜屾不鑽笟闆嗗洟鏈夐檺鍏徃","id":799,"salesLedgerId":1507,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716191-1784174738833","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:39","updateTime":"2026-07-16T12:05:39","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀹濋殕瀹濇鏍囨郴鐥㈡秷涓�1.5g*9琚嬪皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606045","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":798,"salesLedgerId":1505,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716190-1784174732631","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:33","updateTime":"2026-07-16T12:05:33","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"濡欏尰鎵侀箠鏍囧.鑵板仴鑲句父9g/涓�*24涓�/鐩掑皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606044","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":797,"salesLedgerId":1504,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716189-1784174728265","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:28","updateTime":"2026-07-16T12:05:28","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"褰掕妽鍦伴粍涓歌鏄庝功锛�5涓革紝8涓革紝10涓革紝15涓革紝40涓稿叡鐢級"},{"salesContractNo":"2606043","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":796,"salesLedgerId":1503,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716188-1784174723708","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:24","updateTime":"2026-07-16T12:05:24","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鎭╁▉鏍囧綊鑺嶅湴榛勪父5涓稿皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606042","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":795,"salesLedgerId":1502,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716187-1784174717877","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:18","updateTime":"2026-07-16T12:05:18","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鑸掔瓔涓歌鏄庝功(3涓搞��5涓搞��10涓搞��15涓搞��20涓搞��30涓稿叡鐢級"},{"salesContractNo":"2606041","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":794,"salesLedgerId":1501,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716186-1784174713672","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:14","updateTime":"2026-07-16T12:05:14","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"閫氬痉蹇爣鑸掔瓔涓�3g/涓�*10涓�/鐩掑皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606040","customerName":"澶╂触娴峰ゥ鏂鎶�鏈夐檺鍏徃","id":793,"salesLedgerId":1500,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716185-1784174709422","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:09","updateTime":"2026-07-16T12:05:09","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"绌翠綅璐存暦璐碅鍨嬨�丅鍨嬨�丆鍨嬨�丏鍨嬨�丒鍨嬨�丗鍨嬮�氱敤鐗堣鏄庝功"},{"salesContractNo":"2606039","customerName":"澶╂触娴峰ゥ鏂鎶�鏈夐檺鍏徃","id":792,"salesLedgerId":1499,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716184-1784174705324","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:05","updateTime":"2026-07-16T12:05:05","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"绌翠綅璐存暦璐�8璐村皬鐩掞紙澶鍨嬶紝鑳岄潰鏃犱汉鍥撅級"},{"salesContractNo":"2606038","customerName":"椋為工锛堝悏鏋楋級涔冲搧鏈夐檺鍏徃","id":791,"salesLedgerId":1498,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716183-1784174701017","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:05:01","updateTime":"2026-07-16T12:05:01","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"椋炲竼3娈靛辜鍎块厤鏂瑰ザ绮夌洅瑁呭洓鑱斿寘绾哥洅锛圓10/2403锛屽甫浜岀淮鐮�,R113116401锛�"},{"salesContractNo":"2606037","customerName":"椋為工锛堟嫓娉夛級涔冲搧鏈夐檺鍏徃","id":790,"salesLedgerId":1497,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716182-1784174696020","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:56","updateTime":"2026-07-16T12:04:56","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"椋為工钑寸墽鐫垮崥楂樻垚闀垮ザ绮夌洅瑁�200g绾哥洅锛堟柊鐗堬紝131*48*190-A0/2512,R113107602锛�"},{"salesContractNo":"2606055","customerName":"澶╂触甯傚仴鐢熷埗鑽湁闄愬叕鍙�","id":789,"salesLedgerId":1527,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716181-1784174692056","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:52","updateTime":"2026-07-16T12:04:52","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"8绮�*2鏉�","productName":"鍋ョ敓鐖辨皯鎰熷畾鏍囧鏂规皑閰氱兎鑳鸿兌鍥婂皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606056","customerName":"澶╂触甯傚仴鐢熷埗鑽湁闄愬叕鍙�","id":788,"salesLedgerId":1526,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716180-1784174687099","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:47","updateTime":"2026-07-16T12:04:47","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"12绮�*1鏉�","productName":"鍋ョ敓鐖辨皯鏃ュ悍鏍囧鏂规皑閰氱兎鑳鸿兌鍥婂皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606061","customerName":"澶╂触甯傚仴鐢熷埗鑽湁闄愬叕鍙�","id":787,"salesLedgerId":1522,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716179-1784174672200","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:32","updateTime":"2026-07-16T12:04:32","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍋ョ敓鐖辨皯鏍囧鏂规皑閰氱兎鑳鸿兌鍥婅鏄庝功锛�10绮�/20绮�/12绮�/14绮�/16绮�/22绮�/24绮�/28绮掑叡鐢級"},{"salesContractNo":"2606063","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":786,"salesLedgerId":1520,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716178-1784174665231","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:25","updateTime":"2026-07-16T12:04:25","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鑸掑父杞昏鏄庝功锛堟柊鐗堬級"},{"salesContractNo":"2606062","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":785,"salesLedgerId":1519,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716177-1784174661183","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:21","updateTime":"2026-07-16T12:04:21","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"1鍓�","productName":"鑸掑父杞讳腑鐩掞紙鏂扮増锛岋級"},{"salesContractNo":"2606059","customerName":"鍖呭ご甯傜孩鍗棩鐢ㄥ寲宸ユ湁闄愬叕鍙�","id":784,"salesLedgerId":1518,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716176-1784174657311","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:17","updateTime":"2026-07-16T12:04:17","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"120g灏忕洅","productName":"绾㈠崼鏍囩緤鑴傜殏瀚╄偆娑﹂锛堟柊鐗堬級"},{"salesContractNo":"2606053","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":783,"salesLedgerId":1512,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716175-1784174653353","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:13","updateTime":"2026-07-16T12:04:13","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙鏂扮増锛�0106-158锛�"},{"salesContractNo":"2606052","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":782,"salesLedgerId":1511,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716174-1784174649514","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:10","updateTime":"2026-07-16T12:04:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙鏂扮増锛�0106-251)"},{"salesContractNo":"2606051","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":781,"salesLedgerId":1510,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716173-1784174642835","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:04:03","updateTime":"2026-07-16T12:04:03","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙鏂扮増锛�0106-375锛�"},{"salesContractNo":"2606075","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":780,"salesLedgerId":1549,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716172-1784174635288","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:55","updateTime":"2026-07-16T12:03:55","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0206K灏忕洅锛堟柊鐗�,260605C锛�"},{"salesContractNo":"2606074","customerName":"鍖椾含娉藉畤鏄熺鎶�鏈夐檺鍏徃 ","id":779,"salesLedgerId":1548,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716171-1784174631274","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:51","updateTime":"2026-07-16T12:03:51","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鐦熷�嶅畨鐚槦鑰愮儹淇濇姢鍓傛椿鐤嫍锛堢粏鑳炴簮锛�50澶翠唤*10鐡跺皬鐩�(甯︿簩缁寸爜锛�"},{"salesContractNo":"2606073","customerName":"澶╂触甯傚仴鐢熷埗鑽湁闄愬叕鍙�","id":778,"salesLedgerId":1547,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716170-1784174627325","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:47","updateTime":"2026-07-16T12:03:47","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍋ョ敓鐖辨皯鏃ュ悍鏍囧涔欓叞姘ㄥ熀閰氱墖0.3g*12鐗�*2鏉垮皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606072","customerName":"娌冲寳瀹夌惇鑳朵笟鏈夐檺鍏徃   ","id":777,"salesLedgerId":1546,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716169-1784174623382","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:43","updateTime":"2026-07-16T12:03:43","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"TULIP涓洅锛堟柊鐗堬紝鎵瑰彿139锛�60鏀"},{"salesContractNo":"2606071","customerName":"娌冲寳瀹夌惇鑳朵笟鏈夐檺鍏徃   ","id":776,"salesLedgerId":1545,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716168-1784174619214","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:39","updateTime":"2026-07-16T12:03:39","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"TULIP灏忓崱锛堟柊鐗堬紝鎵瑰彿139锛�"},{"salesContractNo":"2606070","customerName":"娌冲寳瀹夌惇鑳朵笟鏈夐檺鍏徃   ","id":775,"salesLedgerId":1544,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716167-1784174615107","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:35","updateTime":"2026-07-16T12:03:35","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"TULIP涓洅锛堟壒鍙�138锛�60鏀锛�"},{"salesContractNo":"2606069","customerName":"娌冲寳瀹夌惇鑳朵笟鏈夐檺鍏徃   ","id":774,"salesLedgerId":1543,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716166-1784174608626","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:29","updateTime":"2026-07-16T12:03:29","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"TULIP灏忓崱锛堟壒鍙�138锛�"},{"salesContractNo":"2606067","customerName":"浼婃槬浜斿姞鍙傝嵂涓氭湁闄愬叕鍙�","id":773,"salesLedgerId":1541,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716165-1784174602571","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:23","updateTime":"2026-07-16T12:03:23","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鏋楀疂鏍囧埡浜斿姞鐗�60鐗�/鐩掑皬鐩掞紙鏂扮増锛屽甫鑽搧杩芥函鐮侊級"},{"salesContractNo":"2606065","customerName":"鍚夋灄绂忓悍鑽笟鑲′唤鏈夐檺鍏徃","id":772,"salesLedgerId":1539,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716164-1784174596582","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:17","updateTime":"2026-07-16T12:03:17","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍒╄偤鐗�0.45g*24鐗囧皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606087","customerName":"鍖椾含鐟炴垚鍖荤枟鍣ㄦ鏈夐檺鍏徃","id":771,"salesLedgerId":1558,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716163-1784174589554","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:10","updateTime":"2026-07-16T12:03:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍖呰鐩掞紙0106-372锛�"},{"salesContractNo":"2606086","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":770,"salesLedgerId":1557,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716162-1784174584999","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:03:05","updateTime":"2026-07-16T12:03:05","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0214L灏忕洅锛堟柊鐗�,2606048P锛�"},{"salesContractNo":"2606085","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":769,"salesLedgerId":1556,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716161-1784174579410","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:59","updateTime":"2026-07-16T12:02:59","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0214K灏忕洅锛堟柊鐗�,2606049P锛�"},{"salesContractNo":"2606081-2606084","customerName":"澶╂触璧幈鎭╃壒绉戞妧鍙戝睍鏈夐檺鍏徃","id":768,"salesLedgerId":1555,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716160-1784174574965","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:55","updateTime":"2026-07-16T12:02:55","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"璧幈鎭╃壒鏍囧己椋炲疂30ml灏忕洅锛堟柊鐗堬級 璧幈鎭╃壒鏍囧己椋炲疂60ml灏忕洅锛堟柊鐗堬級 璧幈鎭╃壒鏍囦繚鑲犲畨30ml灏忕洅锛堟柊鐗堬級 璧幈鎭╃壒鏍囦繚鑲犲畨60ml灏忕洅锛堟柊鐗堬級"},{"salesContractNo":"2606080","customerName":"鍖呭ご甯傜孩鍗棩鐢ㄥ寲宸ユ湁闄愬叕鍙�","id":767,"salesLedgerId":1554,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716159-1784174570170","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:50","updateTime":"2026-07-16T12:02:50","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"绾㈠崼鏍囩緤鑴傜殏瀚╄偆娑﹂120g灏忕洅锛堟柊鐗堬級"},{"salesContractNo":"2606079","customerName":"娌冲寳涓�鍝佸埗鑽偂浠芥湁闄愬叕鍙�","id":766,"salesLedgerId":1553,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716158-1784174564145","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:44","updateTime":"2026-07-16T12:02:44","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"浠欑悮鏍囪泲鐧界惀鐝�閰搁搧鍙f湇婧舵恫15ml:40mg*10鏀�/鐩掑皬鐩掞紙鏂扮増锛�03鐗堬紝甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606078","customerName":"娌冲寳涓�鍝佸埗鑽偂浠芥湁闄愬叕鍙�","id":765,"salesLedgerId":1552,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716157-1784174560016","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:40","updateTime":"2026-07-16T12:02:40","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍔涚煝鏍囩洂閰稿埄澶氬崱鍥犳敞灏勬恫5ml:0.1g*5鏀鏈虹洅锛�06鐗堬紝甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606077","customerName":"娌冲寳涓�鍝佸埗鑽偂浠芥湁闄愬叕鍙�","id":764,"salesLedgerId":1551,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716156-1784174555799","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:36","updateTime":"2026-07-16T12:02:36","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍔涚煝鏍囩洂閰镐箤鎷夊湴灏旀敞灏勬恫5ml锛�25mg*5鏀皬鐩掞紙08鐗堬紝甯﹁嵂鍝佽拷婧爜锛夐鏈虹洅"},{"salesContractNo":"2606094","customerName":"淇″悎鎻寸敓鍒惰嵂鑲′唤鏈夐檺鍏徃","id":763,"salesLedgerId":1565,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716155-1784174551699","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:32","updateTime":"2026-07-16T12:02:32","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鎻寸敓鍔涚淮椹潵閰告洸缇庡竷姹�鐗�100mg*20鐗囩礌鐧藉皬鐩�"},{"salesContractNo":"2606093","customerName":"涓婃捣鍑悎鑽e浘浠嵂涓氭湁闄愬叕鍙�","id":762,"salesLedgerId":1564,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716154-1784174547062","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:27","updateTime":"2026-07-16T12:02:27","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍑悎鑽f爣鎶よ倽鐗�100鐗�/鐩掑皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606092","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":761,"salesLedgerId":1563,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716153-1784174542553","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:23","updateTime":"2026-07-16T12:02:23","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0020C灏忕洅锛堟柊鐗�,2605211锛�"},{"salesContractNo":"2606091","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":760,"salesLedgerId":1562,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716152-1784174538242","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:18","updateTime":"2026-07-16T12:02:18","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0020B灏忕洅锛堟柊鐗�,2605218锛�"},{"salesContractNo":"2606090","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":759,"salesLedgerId":1561,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716151-1784174534181","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:14","updateTime":"2026-07-16T12:02:14","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0161E灏忕洅锛堟柊鐗�,2605084P锛�"},{"salesContractNo":"2606089","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":758,"salesLedgerId":1560,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716150-1784174530199","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:10","updateTime":"2026-07-16T12:02:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0175M灏忕洅锛堟柊鐗�,2605116P锛�"},{"salesContractNo":"2606088","customerName":"澶╂触鍗庨缚绉戞妧鑲′唤鏈夐檺鍏徃","id":757,"salesLedgerId":1559,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716149-1784174525079","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:05","updateTime":"2026-07-16T12:02:05","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"A.07.PM0164Y灏忕洅锛堟柊鐗�,2605083P锛�"},{"salesContractNo":"2606112","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":756,"salesLedgerId":1583,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716148-1784174520994","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:02:01","updateTime":"2026-07-16T12:02:01","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"娉ㄥ皠鐢ㄦ尝绫虫嘲閰禷鏍囩锛堟柊鐗堬級"},{"salesContractNo":"2606111","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":755,"salesLedgerId":1582,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716147-1784174516638","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:57","updateTime":"2026-07-16T12:01:57","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"娉ㄥ皠鐢ㄦ尝绫虫嘲閰禷涓洅锛堟柊鐗堬紝甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606110","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":754,"salesLedgerId":1581,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716146-1784174510648","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:51","updateTime":"2026-07-16T12:01:51","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"娉ㄥ皠鐢ㄦ尝绫虫嘲閰禷灏忕洅锛堟柊鐗堬紝甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606109","customerName":"鑸掓嘲绁烇紙鍖椾含锛夌敓鐗╁埗鑽偂浠芥湁闄愬叕鍙�","id":753,"salesLedgerId":1580,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716145-1784174506153","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:46","updateTime":"2026-07-16T12:01:46","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"娉ㄥ皠鐢ㄦ尝绫虫嘲閰禷澶х锛堟柊鐗堬級"},{"salesContractNo":"2606108","customerName":"瀹夊悏鐗�(澶╂触)绉戞妧鏈夐檺鍏徃","id":752,"salesLedgerId":1579,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716144-1784174501849","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:42","updateTime":"2026-07-16T12:01:42","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀹夊悏鐗逛华鍣ㄧ摝妤炵洅"},{"salesContractNo":"2606107","customerName":"娌冲寳涓夋槦鍖荤敤涔宠兌鍒跺搧鏈夐檺鍏徃","id":751,"salesLedgerId":1578,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716143-1784174497348","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:37","updateTime":"2026-07-16T12:01:37","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍑哄彛鍨嬫墜濂楃洅锛堟柊鐗堬紝闊╂枃鐗堬級"},{"salesContractNo":"2606105","customerName":"鍚夋灄绂忓悍鑽笟鑲′唤鏈夐檺鍏徃","id":750,"salesLedgerId":1576,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716142-1784174490886","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:31","updateTime":"2026-07-16T12:01:31","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"淇鐧介噾鏍囪挷鍦拌摑娑堢値鐗�26鐗�*3鏉�/鐩掕鏄庝功"},{"salesContractNo":"2606104","customerName":"鍚夋灄绂忓悍鑽笟鑲′唤鏈夐檺鍏徃","id":749,"salesLedgerId":1575,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716141-1784174486918","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:27","updateTime":"2026-07-16T12:01:27","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"淇鐧介噾鏍囪挷鍦拌摑娑堢値鐗�26鐗�*3鏉�/鐩掑皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606103","customerName":"绾藉搱浼嵂涓氭湁闄愬叕鍙�","id":748,"salesLedgerId":1574,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716140-1784174482613","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:23","updateTime":"2026-07-16T12:01:23","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"瀹夋嘲閭︽爣甯冩礇鑺紦閲婅兌鍥�0.3g*9绮�*2鏉�/鐩掑皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606100","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":747,"salesLedgerId":1571,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716139-1784174474522","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:15","updateTime":"2026-07-16T12:01:15","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍐犲績鐢熻剦涓歌鏄庝功锛�60g/鐡讹紝4.5g*4琚嬶紝4.5g*6琚嬶紝4.5g*10琚嬶紝4.5g*12琚嬶紝4.5g*30琚嬶紝4.5g*36琚嬶紝4.5g*60琚嬪叡鐢級"},{"salesContractNo":"2606099","customerName":"鍖椾含涓滃崌鍒惰嵂鏈夐檺鍏徃","id":746,"salesLedgerId":1570,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716138-1784174470043","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:10","updateTime":"2026-07-16T12:01:10","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"涓滃崌鍒╁悍鏍囧啝蹇冪敓鑴変父4.5g*12琚嬪皬鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606096","customerName":"娌冲寳绔嬬敓鑽笟闆嗗洟鏈夐檺鍏徃","id":745,"salesLedgerId":1567,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716137-1784174459903","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:01:00","updateTime":"2026-07-16T12:01:00","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鑻嶅博灞辨爣鐩婃皵寮鸿韩棰楃矑10g*24琚嬩腑鐩掔洅鎵�"},{"salesContractNo":"2606095","customerName":"娌冲寳绔嬬敓鑽笟闆嗗洟鏈夐檺鍏徃","id":744,"salesLedgerId":1566,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716136-1784174455349","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:00:55","updateTime":"2026-07-16T12:00:55","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鑻嶅博灞辨爣鐩婃皵寮鸿韩棰楃矑10g*24琚嬩腑鐩掞紙甯﹁嵂鍝佽拷婧爜锛�"},{"salesContractNo":"2606127","customerName":" 澶╂触甯傜編鐧婚珮椋熷搧鏈夐檺鍏徃","id":743,"salesLedgerId":1597,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716135-1784174450771","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:00:51","updateTime":"2026-07-16T12:00:51","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"缇庣櫥楂樺皬鐭汉鍐版縺鍑岀敓鐗涗钩鍛冲皬鐩掞紙鏂扮増锛�"},{"salesContractNo":"2606125","customerName":"淇″悎鎻寸敓鍒惰嵂鑲′唤鏈夐檺鍏徃","id":742,"salesLedgerId":1596,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716134-1784174444084","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:00:44","updateTime":"2026-07-16T12:00:44","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"绱犵櫧灏忕洅"},{"salesContractNo":"2606124","customerName":"澶╂触钃夊▉鐢熺墿绉戞妧鏈夐檺鍏徃","id":741,"salesLedgerId":1595,"salesLedgerProductId":null,"quantity":null,"status":"寰呭鏍�","shippingDate":null,"shippingNo":"SH20260716133-1784174439690","expressNumber":null,"expressCompany":null,"type":"璐ц溅","shippingCarNumber":null,"createTime":"2026-07-16T12:00:40","updateTime":"2026-07-16T12:00:40","createUser":211,"updateUser":211,"tenantId":211,"deptId":null,"approveUserIds":null,"tempFileIds":null,"commonFileList":[],"specificationModel":"/","productName":"鍏冲尽鐧惧勾鏍囧叧鐩搁緳涓�浠樿啅绌翠綅鍘嬪姏鍒烘縺璐翠娇鐢ㄨ鏄庝功锛圔0009-02锛�"}],"total":279,"size":100,"current":1,"orders":[],"optimizeCountSql":true,"searchCount":true,"maxLimit":null,"countId":null,"pages":3}}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java b/src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java
index 8b8edf7..c84d44f 100644
--- a/src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java
+++ b/src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java
@@ -39,8 +39,10 @@
     @GetMapping("/listPage")
     @ApiOperation("瀹㈡埛锛堢娴凤級鍒楄〃")
     public R listPage(CustomerPrivatePoolDto customerPrivatePoolDto, Page<CustomerPrivatePoolDto> page){
-        //鏌ヨ褰撳墠鐢ㄦ埛鐨勫鎴蜂俊鎭�
-        customerPrivatePoolDto.setBoundId(SecurityUtils.getUserId());
+        // 绠$悊鍛樺彲鏌ョ湅鍏ㄩ儴瀹㈡埛锛屼笉鍙楀綊灞炰汉闄愬埗
+        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+            customerPrivatePoolDto.setBoundId(SecurityUtils.getUserId());
+        }
         IPage<CustomerPrivatePoolDto> listPage = customerPrivatePoolService.listPage(page, customerPrivatePoolDto);
         return R.ok(listPage);
     }
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
index 0804b79..b835aae 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -10,6 +10,7 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -43,6 +44,15 @@
         return deviceMaintenanceService.saveDeviceRepair(deviceMaintenance);
     }
 
+    @PostMapping("/batchAdd")
+    @ApiOperation("鎵归噺娣诲姞璁惧淇濆吇")
+    public AjaxResult batchAdd(@RequestBody DeviceMaintenance deviceMaintenance) {
+        if (CollectionUtils.isEmpty(deviceMaintenance.getDeviceIds())) {
+            return AjaxResult.error("璇烽�夋嫨璁惧");
+        }
+        return deviceMaintenanceService.batchSaveDeviceRepair(deviceMaintenance);
+    }
+
     @ApiOperation("鏍规嵁id鏌ヨ璁惧淇濆吇")
     @GetMapping("/{id}")
     public AjaxResult detail(@PathVariable Long id) {
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
index 9c4bc88..236a057 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -107,4 +107,8 @@
      */
     @TableField(value = "maintenance_item")
     private String maintenanceItem;
+
+    @ApiModelProperty("鎵归噺閫夋嫨鐨勮澶囧彴璐d鍒楄〃")
+    @TableField(exist = false)
+    private List<Long> deviceIds;
 }
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
index 82db913..134dc41 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
@@ -15,6 +15,8 @@
 
     AjaxResult saveDeviceRepair(DeviceMaintenance deviceMaintenance);
 
+    AjaxResult batchSaveDeviceRepair(DeviceMaintenance deviceMaintenance);
+
     AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance);
 
     void export(HttpServletResponse response, Long[] ids);
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
index 6e90b28..1fceab7 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -9,7 +9,9 @@
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
 import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
+import com.ruoyi.device.service.IDeviceLedgerService;
 import com.ruoyi.device.service.IDeviceMaintenanceService;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +30,9 @@
     @Autowired
     private DeviceMaintenanceMapper deviceMaintenanceMapper;
 
+    @Autowired
+    private IDeviceLedgerService deviceLedgerService;
+
     @Override
     public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) {
 
@@ -44,6 +49,31 @@
     }
 
     @Override
+    public AjaxResult batchSaveDeviceRepair(DeviceMaintenance deviceMaintenance) {
+        List<Long> deviceIds = deviceMaintenance.getDeviceIds();
+        List<DeviceMaintenance> list = new ArrayList<>();
+        for (Long deviceId : deviceIds) {
+            DeviceLedger ledger = deviceLedgerService.getById(deviceId);
+            if (ledger == null) {
+                continue;
+            }
+            DeviceMaintenance m = new DeviceMaintenance();
+            m.setDeviceLedgerId(deviceId);
+            m.setDeviceName(ledger.getDeviceName());
+            m.setDeviceModel(ledger.getDeviceModel());
+            m.setMaintenancePlanTime(deviceMaintenance.getMaintenancePlanTime());
+            m.setMaintenanceItem(deviceMaintenance.getMaintenanceItem());
+            m.setCreateUser(deviceMaintenance.getCreateUser());
+            m.setStatus(0);
+            list.add(m);
+        }
+        if (list.isEmpty()) {
+            return AjaxResult.error("鏈壘鍒版湁鏁堣澶�");
+        }
+        return this.saveBatch(list) ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    @Override
     public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) {
         if (this.updateById(deviceMaintenance)) {
             return AjaxResult.success();
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 2b14921..6041f3d 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -2,20 +2,18 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.approve.bean.vo.ApproveProcessVO;
-import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.common.utils.OrderUtils;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.ShippingInfoDto;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ISalesLedgerService;
 import com.ruoyi.sales.service.ShippingInfoService;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import io.swagger.annotations.Api;
@@ -26,8 +24,9 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.time.LocalDate;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -45,9 +44,10 @@
     private CommonFileServiceImpl commonFileService;
 
     @Autowired
-    private ApproveProcessServiceImpl approveProcessService;
+    private ISalesLedgerService salesLedgerService;
+
     @Autowired
-    private StockUtils stockUtils;
+    private ISalesLedgerProductService salesLedgerProductService;
 
 
     @GetMapping("/listPage")
@@ -62,22 +62,44 @@
     @Transactional(rollbackFor = Exception.class)
     @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
     public AjaxResult add(@RequestBody ShippingInfoDto req) throws Exception {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH");
-        // 鍙戣揣瀹℃壒
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        approveProcessVO.setApproveType(7);
-        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
-        approveProcessVO.setApproveReason(req.getType() + ":" +sh);
-        approveProcessVO.setApproveUserIds(req.getApproveUserIds());
-        approveProcessVO.setApproveUser(loginUser.getUserId());
-        approveProcessVO.setApproveTime(LocalDate.now().toString());
-        approveProcessService.addApprove(approveProcessVO);
-        // 娣诲姞鍙戣揣娑堟伅
-        req.setShippingNo(sh);
-        req.setStatus("寰呭鏍�");
-        boolean save = shippingInfoService.save(req);
-        return save ? AjaxResult.success() : AjaxResult.error();
+        return shippingInfoService.addShipping(req) ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    @PostMapping("/batchAdd")
+    @ApiOperation("鎵归噺鍙戣揣锛氬悓涓�瀹㈡埛澶氭潯璁㈠崟锛岄�愭潯鍒涘缓鍙戣揣鍗曞苟鍙戣捣瀹℃壒")
+    @Transactional(rollbackFor = Exception.class)
+    @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
+    public AjaxResult batchAdd(@RequestBody List<ShippingInfoDto> reqs) throws Exception {
+        if (reqs == null || reqs.isEmpty()) {
+            return AjaxResult.error("璇烽�夋嫨瑕佸彂璐х殑浜у搧");
+        }
+        // 鏍¢獙鎵�鏈変骇鍝佽鎵�灞為攢鍞彴璐︿负鍚屼竴瀹㈡埛
+        List<Long> productIds = reqs.stream()
+                .map(ShippingInfoDto::getSalesLedgerProductId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        List<SalesLedgerProduct> products = salesLedgerProductService.listByIds(productIds);
+        List<Long> ledgerIds = products.stream()
+                .map(SalesLedgerProduct::getSalesLedgerId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        List<SalesLedger> ledgers = salesLedgerService.listByIds(ledgerIds);
+        long customerCount = ledgers.stream()
+                .map(SalesLedger::getCustomerName)
+                .filter(cn -> cn != null && !cn.trim().isEmpty())
+                .distinct()
+                .count();
+        if (customerCount > 1) {
+            return AjaxResult.error("鎵归噺鍙戣揣浠呮敮鎸佸悓涓�瀹㈡埛鐨勫鏉¤鍗�");
+        }
+        for (ShippingInfoDto req : reqs) {
+            if (!shippingInfoService.addShipping(req)) {
+                throw new RuntimeException("鎵归噺鍙戣揣澶辫触");
+            }
+        }
+        return AjaxResult.success();
     }
 
     @ApiOperation("鍙戣揣鎵e簱瀛�")
diff --git a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
index 260d217..3aff5d7 100644
--- a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -17,10 +17,9 @@
 public class ShippingInfoDto extends ShippingInfo {
 
     /**
-     * 瀹℃壒浜篿d鍒楄〃
+     * 瀹℃壒浜篿d鍒楄〃锛堝墠绔紶鏁扮粍锛屽吋瀹归�楀彿鍒嗛殧瀛楃涓诧級
      */
-    // 瀹℃壒浜�
-    private String approveUserIds;
+    private List<String> approveUserIds;
 
     private String type; // 鍙戣揣绫诲瀷
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 43a14fa..4aa4740 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -212,6 +212,14 @@
     @TableField(exist = false)
     @ApiModelProperty(value = "鍙戣揣鐘舵��")
     private String shippingStatus = "寰呭彂璐�";
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "宸插彂鏁伴噺锛堝鏍搁�氳繃+宸插彂璐э級")
+    private BigDecimal alreadyShippedQuantity = BigDecimal.ZERO;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍓╀綑鍙彂鏁伴噺")
+    private BigDecimal unshippedQuantity = BigDecimal.ZERO;
     /**
      * 浜у搧鐘舵��
      */
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index 6ac6ecd..87e5a46 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -7,6 +7,7 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -37,6 +38,10 @@
     @ApiModelProperty(value = "閿�鍞姤浠蜂骇鍝佽〃id")
     private Long salesLedgerProductId;
 
+    @ApiModelProperty(value = "鏈鍙戣揣鏁伴噺")
+    @Excel(name = "鏈鍙戣揣鏁伴噺")
+    private BigDecimal quantity;
+
     @ApiModelProperty(value = "鐘舵�� 寰呭鏍� 瀹℃牳涓� 锛屽鏍告嫆缁� 瀹℃牳閫氳繃 宸插彂璐�")
     @Excel(name = "鐘舵��")
     private String status;
diff --git a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
index 2aa1a13..25f78d9 100644
--- a/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
+++ b/src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -21,6 +21,11 @@
 
     boolean deductStock(ShippingInfoDto req) throws IOException;
 
+    /**
+     * 鍒涘缓鍙戣揣鍗曞苟鍙戣捣鍙戣揣瀹℃壒锛堥儴鍒嗗彂璐э細鎸夋湰娆″彂璐ф暟閲忓垱寤猴級
+     */
+    boolean addShipping(ShippingInfoDto req) throws Exception;
+
     boolean delete(List<Long> ids);
 
     List<SalesLedgerProductDto> getReturnManagementDtoById( Long shippingId);
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index c9651a7..e7f40ed 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -4,10 +4,14 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.dto.SalesLedgerProductDto;
@@ -21,10 +25,15 @@
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author :yys
@@ -64,10 +73,11 @@
         if (byId == null) {
             throw new RuntimeException("鍙戣揣淇℃伅涓嶅瓨鍦�");
         }
-        //鎵e噺搴撳瓨
+        //鎵e噺搴撳瓨锛堟寜鏈鍙戣揣鏁伴噺锛屾敮鎸侀儴鍒嗗彂璐э級
         if(!"宸插彂璐�".equals(byId.getStatus())){
             SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
-            stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+            BigDecimal shipQuantity = byId.getQuantity() != null ? byId.getQuantity() : salesLedgerProduct.getQuantity();
+            stockUtils.substractStock(salesLedgerProduct.getProductModelId(), shipQuantity, StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
         }
         byId.setExpressNumber(req.getExpressNumber());
         byId.setExpressCompany(req.getExpressCompany());
@@ -83,6 +93,73 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addShipping(ShippingInfoDto req) throws Exception {
+        // 鏍¢獙浜у搧琛�
+        SalesLedgerProduct product = salesLedgerProductMapper.selectById(req.getSalesLedgerProductId());
+        if (product == null) {
+            throw new RuntimeException("浜у搧鏄庣粏涓嶅瓨鍦�");
+        }
+        if (product.getQuantity() == null) {
+            throw new RuntimeException("浜у搧鏄庣粏鏁伴噺涓虹┖锛屾棤娉曞彂璐�");
+        }
+        // 鏈紶鏈鍙戣揣鏁伴噺鏃堕粯璁ゅ彇浜у搧琛屽叏閲�
+        if (req.getQuantity() == null) {
+            req.setQuantity(product.getQuantity());
+        }
+        validateQuantity(req.getSalesLedgerProductId(), req.getQuantity());
+        // 鍙戣揣瀹℃壒
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH");
+        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+        approveProcessVO.setApproveType(7);
+        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+        approveProcessVO.setApproveReason(req.getType() + ":" + sh);
+        List<String> approveUserIds = req.getApproveUserIds();
+        approveProcessVO.setApproveUserIds(
+                approveUserIds == null || approveUserIds.isEmpty() ? "" : String.join(",", approveUserIds));
+        approveProcessVO.setApproveUser(loginUser.getUserId());
+        approveProcessVO.setApproveTime(LocalDate.now().toString());
+        approveProcessService.addApprove(approveProcessVO);
+        // 娣诲姞鍙戣揣鍗�
+        req.setShippingNo(sh);
+        req.setStatus("寰呭鏍�");
+        return this.save(req);
+    }
+
+    /**
+     * 鍓╀綑鍙彂鏁伴噺 = 浜у搧琛屾暟閲� - 鐘舵�佷负"瀹℃牳閫氳繃/宸插彂璐�"鐨勫彂璐ф暟閲忎箣鍜�
+     */
+    public BigDecimal getUnshippedQuantity(Long salesLedgerProductId) {
+        SalesLedgerProduct product = salesLedgerProductMapper.selectById(salesLedgerProductId);
+        if (product == null || product.getQuantity() == null) {
+            return BigDecimal.ZERO;
+        }
+        List<ShippingInfo> shippedList = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
+                .eq(ShippingInfo::getSalesLedgerProductId, salesLedgerProductId)
+                .in(ShippingInfo::getStatus, Arrays.asList("瀹℃牳閫氳繃", "宸插彂璐�")));
+        BigDecimal shipped = shippedList.stream()
+                .map(ShippingInfo::getQuantity)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal remaining = product.getQuantity().subtract(shipped);
+        return remaining.compareTo(BigDecimal.ZERO) > 0 ? remaining : BigDecimal.ZERO;
+    }
+
+    /**
+     * 鏍¢獙鏈鍙戣揣鏁伴噺锛氬繀椤诲ぇ浜�0涓斾笉瓒呰繃鍓╀綑鍙彂鏁伴噺
+     */
+    private void validateQuantity(Long salesLedgerProductId, BigDecimal quantity) {
+        if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) {
+            throw new RuntimeException("鏈鍙戣揣鏁伴噺蹇呴』澶т簬0");
+        }
+        BigDecimal remaining = getUnshippedQuantity(salesLedgerProductId);
+        if (quantity.compareTo(remaining) > 0) {
+            throw new RuntimeException("鏈鍙戣揣鏁伴噺瓒呰繃鍓╀綑鍙彂鏁伴噺锛堝墿浣欏彲鍙戯細" + remaining + "锛�");
+        }
+    }
+
+    @Override
     public boolean delete(List<Long> ids) {
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getId, ids));
diff --git a/src/main/resources/mapper/device/DeviceMaintenanceMapper.xml b/src/main/resources/mapper/device/DeviceMaintenanceMapper.xml
index 531e7be..e630b9f 100644
--- a/src/main/resources/mapper/device/DeviceMaintenanceMapper.xml
+++ b/src/main/resources/mapper/device/DeviceMaintenanceMapper.xml
@@ -65,6 +65,7 @@
                dm.update_user,
                dm.tenant_id,
                dm.maintenance_actually_name,
+               dm.maintenance_item,
                dl.device_name,
                dl.device_model,
                su.user_name as create_user_name
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 6dc6802..e8f7241 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -14,7 +14,15 @@
         CASE
         WHEN t2.id IS NOT NULL THEN 1
         ELSE 0
-        END as has_stock_inventory
+        END as has_stock_inventory,
+        (SELECT IFNULL(SUM(si.quantity), 0)
+         FROM shipping_info si
+         WHERE si.sales_ledger_product_id = T1.id
+           AND si.status IN ('瀹℃牳閫氳繃', '宸插彂璐�')) AS already_shipped_quantity,
+        (IFNULL(T1.quantity, 0) - (SELECT IFNULL(SUM(si.quantity), 0)
+                                   FROM shipping_info si
+                                   WHERE si.sales_ledger_product_id = T1.id
+                                     AND si.status IN ('瀹℃牳閫氳繃', '宸插彂璐�'))) AS unshipped_quantity
         FROM
         sales_ledger_product T1
         LEFT JOIN stock_inventory t2 ON T1.product_model_id = t2.product_model_id
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 955a89f..93ef9a7 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -11,6 +11,7 @@
         s.express_number,
         s.express_company,
         s.shipping_no,
+        s.quantity,
         s.type,
         s.status,
         s.create_time,

--
Gitblit v1.9.3