11 小时以前 0beb4e197c13ccce94a943e158993c503700f4da
feat(sales): 实现发货模块部分发货与批量发货功能

- 新增本次发货数量字段支持部分发货,按实际发货数量扣减库存
- 添加批量发货功能支持同一客户多订单批量处理
- 增加剩余可发数量计算与校验防止超发
- 实现发货信息管理页面数量展示与审批流程
- 优化发货按钮逻辑解除完工限制提升用户体验
已修改14个文件
已添加5个文件
686 ■■■■■ 文件已修改
doc/20260820_shipping_info_add_quantity.sql 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/admin_full_permission.md 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/device_maintenance_batch_add.md 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/partial_batch_shipping.md 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shipping_list_page.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/controller/CustomerPrivatePoolController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ShippingInfoService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/device/DeviceMaintenanceMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/ShippingInfoMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
docs/admin_full_permission.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
# ç®¡ç†å‘˜å…¨æ¨¡å—全权限豁免
## åŠŸèƒ½è¯´æ˜Ž
管理员账号(admin、普通2、最高1 è§’色)在全部模块拥有所有查看、编辑、新增、删除权限,不再受各模块"归属人/维护人"等硬编码限制约束。
全局权限层(`*:*:*` æƒé™ã€æ•°æ®èŒƒå›´è¿‡æ»¤ã€ç§Ÿæˆ·è¡Œçº§è¿‡æ»¤ï¼‰åŽŸæœ¬å·²å¯¹ admin æ”¾è¡Œï¼Œæœ¬æ”¹åŠ¨è§£é™¤çš„æ˜¯å„æ¨¡å—ä¸­**归属人/维护人校验**的额外限制。
## 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 è´¦å·ä¸Šè¿°é™åˆ¶ä¿æŒåŽŸæ ·ï¼Œä¸å—å½±å“
docs/device_maintenance_batch_add.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
# è®¾å¤‡ä¿å…»æ‰¹é‡æ–°å¢žè®¡åˆ’
## åŠŸèƒ½è¯´æ˜Ž
在设备保养-任务记录页"新增计划"中,支持一次多选多台设备、共用一套保养项目/计划保养日期/录入人,一键为所有选中设备各生成一条保养计划,减少重复录入。
## æ¶‰åŠé¡µé¢
- è®¾å¤‡ä¿å…»ï¼ˆä»»åŠ¡è®°å½• tab)
- æ–°å¢ž/编辑设备保养计划弹窗(`PlanModal.vue`)
## API
| æ–¹æ³• | è·¯å¾„ | è¯´æ˜Ž |
|------|------|------|
| POST | /device/maintenance/batchAdd | æ‰¹é‡æ–°å¢žè®¾å¤‡ä¿å…»è®¡åˆ’ |
**请求参数(body,JSON):**
| å‚æ•° | ç±»åž‹ | å¿…å¡« | è¯´æ˜Ž |
|------|------|------|------|
| 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)`
- å¤šå°è®¾å¤‡è§„格型号不同时,弹窗内规格型号以逗号连接展示(仅展示,提交后按各设备台账重新填充)
- å•设备新增、行内"编辑"计划逻辑保持不变
docs/partial_batch_shipping.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,286 @@
# å‘货模块改造:部分发货 + æ‰¹é‡å‘è´§ + è§£é™¤å®Œå·¥é™åˆ¶
## èƒŒæ™¯
发货模块本次改造三项能力:
1. **部分发货**:系统不再强制要求订单 100% å®Œå·¥æ‰å¯å‘货,发货弹窗可输入"本次发货数量",审批通过后仅按该数量扣减库存。
2. **解除发货按钮锁定**:不再因产品无库存记录 / äº§é‡ä¸è¶³ï¼ˆæœªå®Œå·¥ï¼‰é”å®š"发货"按钮,只要存在剩余可发数量即可发起发货。
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 | æ˜¯ | é”€å”®å°è´¦äº§å“æ˜Žç»†ID |
| quantity | BigDecimal | å¦ | æœ¬æ¬¡å‘货数量,不传时默认取产品明细全量数量 |
| type | String | å¦ | å®¡æ‰¹å¤‡æ³¨å‰ç¼€ï¼ˆå¦‚ éƒ¨åˆ†å‘è´§/批量发货) |
| approveUserIds | Array | å¦ | å®¡æ‰¹äººID列表 |
| tempFileIds | Array | å¦ | ä¸´æ—¶é™„ä»¶ID列表 |
| expressNumber | String | å¦ | å¿«é€’单号 |
| expressCompany | String | å¦ | å¿«é€’公司 |
| shippingCarNumber | String | å¦ | å‘货车牌号 |
| shippingDate | String | å¦ | å‘货日期 |
**校验规则:** `quantity` å¿…须大于 0 ä¸”不超过"剩余可发数量",否则接口返回错误。
**响应:** `{ "code": 200, "msg": "操作成功" }`
### 2. POST /shippingInfo/batchAdd(新增接口)
**请求体:** æ•°ç»„,元素为发货单数据(字段同 `/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. è§£é™¤å‘货按钮锁定(canShip)
`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" />
```
## æ³¨æ„äº‹é¡¹
- **剩余可发数量口径**:仅"审核通过 + å·²å‘è´§"状态发货单占用数量;"待审核 / å®¡æ ¸ä¸­ / å®¡æ ¸æ‹’绝"不占数量,防止超发。
- **批量发货的客户校验**:前端与后端均有校验,仅支持同一客户多条订单。
- **部分发货扣库存**:审批通过后按"本次发货数量"扣减库存,而非订单全量。
- **删除产品明细**:会级联删除其发货单,剩余可发数量随之恢复。
- **历史数据**:存量发货单已由数据库迁移回填 `quantity`(等于对应产品明细数量),旧数据剩余可发数量显示不受影响。
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":"包i装盒"},{"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段幼儿配方奶粉盒装四联包纸盒(A10/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":"正远标布洛芬缓释胶囊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":"磷酸苯丙哌林口服溶液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":"九药标可立停磷酸苯丙哌林口服溶液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":"善举标四季感冒片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":"穴位贴敷贴A型、B型、C型、D型、E型、F型通用版说明书"},{"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贴小盒(大D型,背面无人图)"},{"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段幼儿配方奶粉盒装四联包纸盒(A10/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":"仙琚标蛋白琥珀酸铁口服溶液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":"上海凯合荣图们药业有限公司","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":"凯合荣标护肝片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":"注射用波米泰酶a标签(新版)"},{"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":"注射用波米泰酶a中盒(新版,带药品追溯码)"},{"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":"注射用波米泰酶a小盒(新版,带药品追溯码)"},{"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":"注射用波米泰酶a大箱(新版)"},{"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":"关御百年标关相龙一付膏穴位压力刺激贴使用说明书(B0009-02)"}],"total":279,"size":100,"current":1,"orders":[],"optimizeCountSql":true,"searchCount":true,"maxLimit":null,"countId":null,"pages":3}}
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);
    }
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) {
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -107,4 +107,8 @@
     */
    @TableField(value = "maintenance_item")
    private String maintenanceItem;
    @ApiModelProperty("批量选择的设备台账id列表")
    @TableField(exist = false)
    private List<Long> deviceIds;
}
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);
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();
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("发货扣库存")
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -17,10 +17,9 @@
public class ShippingInfoDto extends ShippingInfo {
    /**
     * å®¡æ‰¹äººid列表
     * å®¡æ‰¹äººid列表(前端传数组,兼容逗号分隔字符串)
     */
    // å®¡æ‰¹äºº
    private String approveUserIds;
    private List<String> approveUserIds;
    private String type; // å‘货类型
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;
    /**
     * äº§å“çŠ¶æ€
     */
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;
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);
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("发货信息不存在");
        }
        //扣减库存
        //扣减库存(按本次发货数量,支持部分发货)
        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));
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
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
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,