# 时间戳转换 - Product Requirement Document

## Overview
- **Summary**: 将到货及出库模块接口文档中提到的所有时间字段从DateTime类型统一转换为long类型的毫秒时间戳（UTC），确保API接口文档与实际代码实现一致。
- **Purpose**: 解决数据库中可null DateTime类型与API接口long类型时间戳之间的转换问题，提供一致的API接口体验。
- **Target Users**: 后端开发人员、API调用方

## Goals
- 将出库交接单相关接口中的所有时间参数从DateTime?改为long?
- 将返回实体中的所有时间字段转换为long?类型的时间戳
- 保持文档与代码实现的一致性
- 确保时间戳使用UTC时区

## Non-Goals (Out of Scope)
- 不修改数据库表结构
- 不修改实体类的数据库映射属性
- 不影响其他模块的接口

## Background & Context
根据接口文档要求，所有时间字段应使用long类型的毫秒时间戳（UTC）。目前代码中仍有部分接口使用DateTime类型，需要统一转换。

## Functional Requirements
- **FR-1**: 修改出库交接单控制器中的所有时间参数为long?类型
- **FR-2**: 创建时间戳转换辅助方法，处理DateTime与long之间的双向转换
- **FR-3**: 修改返回实体时的时间字段转换逻辑，确保所有返回的时间都是时间戳格式
- **FR-4**: 修改到货交接单控制器中的时间参数（如果有）
- **FR-5**: 修改袋牌相关接口中的时间字段（如果有）

## Non-Functional Requirements
- **NFR-1**: 转换逻辑必须处理null值情况
- **NFR-2**: 时间戳必须使用UTC时区
- **NFR-3**: 保持API向后兼容性（尽可能）

## Constraints
- **Technical**: .NET 6+, C#, ASP.NET Core
- **Business**: 需要尽快完成，避免影响API调用方
- **Dependencies**: 依赖现有代码结构

## Assumptions
- 所有时间戳都使用毫秒级精度
- 所有时间戳都基于UTC时区
- SqlSugar ORM能正确处理DateTime?类型的数据库映射

## Acceptance Criteria

### AC-1: 出库交接单创建接口时间参数转换
- **Given**: 用户调用创建出库交接单接口
- **When**: 传入deliveryTime参数
- **Then**: 参数类型为long?，系统正确转换为DateTime?存储到数据库
- **Verification**: `programmatic`

### AC-2: 出库交接单确认接口时间参数转换
- **Given**: 用户调用确认出库交接单接口
- **When**: 传入deliveryTime参数
- **Then**: 参数类型为long?，系统正确转换为DateTime?存储到数据库
- **Verification**: `programmatic`

### AC-3: 出库交接单列表查询接口时间参数转换
- **Given**: 用户调用查询出库交接单列表接口
- **When**: 传入startDeliveryTime和endDeliveryTime参数
- **Then**: 参数类型为long?，系统正确转换为DateTime?进行查询
- **Verification**: `programmatic`

### AC-4: 返回实体时间字段转换
- **Given**: 系统返回包含时间字段的实体数据
- **When**: 序列化响应数据
- **Then**: 所有DateTime类型字段都转换为long?类型的时间戳
- **Verification**: `programmatic`

### AC-5: 空值处理正确
- **Given**: 时间字段为null
- **When**: 进行转换
- **Then**: 转换结果也为null，不抛出异常
- **Verification**: `programmatic`

## Open Questions
- [ ] 是否需要修改其他模块的接口？
- [ ] 是否需要添加单元测试？
