diff --git a/WcsMain/ApiServe/Controllers/Dto/WcsDto/Scan/QueryScanRecordWithPageRequest.cs b/WcsMain/ApiServe/Controllers/Dto/WcsDto/Scan/QueryScanRecordWithPageRequest.cs
new file mode 100644
index 0000000..7dd4520
--- /dev/null
+++ b/WcsMain/ApiServe/Controllers/Dto/WcsDto/Scan/QueryScanRecordWithPageRequest.cs
@@ -0,0 +1,41 @@
+using System.Text.Json.Serialization;
+
+namespace WcsMain.ApiServe.Controllers.Dto.WcsDto.Scan;
+
+public class QueryScanRecordWithPageRequest
+{
+ ///
+ /// 模糊查询字符串
+ ///
+ [JsonPropertyName("searchStr")]
+ public string? SearchStr { get; set; }
+
+ ///
+ /// 查询时间范围
+ ///
+ [JsonPropertyName("timeRange")]
+ public List? TimeRange { get; set; }
+
+ ///
+ /// 分页信息
+ ///
+ [JsonPropertyName("page")]
+ public ScaanRecordPage? Page { get; set; }
+
+
+}
+
+public class ScaanRecordPage
+{
+ ///
+ /// 每页大小
+ ///
+ [JsonPropertyName("pageSize")]
+ public int PageSize { get; set; }
+
+ ///
+ /// 当前页数
+ ///
+ [JsonPropertyName("pageIndex")]
+ public int PageIndex { get; set; }
+}
\ No newline at end of file
diff --git a/WcsMain/ApiServe/Controllers/WcsController/ScanController.cs b/WcsMain/ApiServe/Controllers/WcsController/ScanController.cs
new file mode 100644
index 0000000..4cd480b
--- /dev/null
+++ b/WcsMain/ApiServe/Controllers/WcsController/ScanController.cs
@@ -0,0 +1,36 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WcsMain.ApiServe.ControllerFilter.ExceptionFilter;
+using WcsMain.ApiServe.Controllers.Dto;
+using WcsMain.ApiServe.Controllers.Dto.WcsDto.Scan;
+using WcsMain.ApiServe.Service.WcsService;
+using WcsMain.DataBase.TableEntity;
+
+namespace WcsMain.ApiServe.Controllers.WcsController;
+
+///
+/// 扫码器相关接口
+///
+[Route("api/wcs/scan")]
+[ApiController]
+[WcsExceptionFilter]
+public class ScanController(ScanService scanService) : ControllerBase
+{
+ ///
+ /// 分页查询扫码记录
+ ///
+ ///
+ ///
+ [HttpPost("queryScanRecordWithPage")]
+ public WcsApiResponse> QueryScanRecordWithPage([FromBody] QueryScanRecordWithPageRequest request) => scanService.QueryScanRecordWithPage(request);
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/WcsMain/ApiServe/Service/WcsService/ScanService.cs b/WcsMain/ApiServe/Service/WcsService/ScanService.cs
new file mode 100644
index 0000000..fdb90ae
--- /dev/null
+++ b/WcsMain/ApiServe/Service/WcsService/ScanService.cs
@@ -0,0 +1,31 @@
+using WcsMain.ApiServe.Controllers.Dto;
+using WcsMain.ApiServe.Controllers.Dto.WcsDto.Scan;
+using WcsMain.ApiServe.Factory;
+using WcsMain.DataBase.Dao;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.WcsAttribute.AutoFacAttribute;
+
+namespace WcsMain.ApiServe.Service.WcsService;
+
+///
+/// 扫码器相关控制器的Service
+///
+[Service]
+public class ScanService(AppScanRecordDao scanRecordDao)
+{
+ ///
+ /// 分页查询扫码记录
+ ///
+ ///
+ ///
+ public WcsApiResponse> QueryScanRecordWithPage(QueryScanRecordWithPageRequest request)
+ {
+ (List? records, int totalCount) = scanRecordDao.Query(request);
+ if(records == default)
+ {
+ return WcsApiResponseFactory.DataBaseErr>();
+ }
+ return WcsApiResponseFactory.Success(totalCount, records);
+ }
+
+}
diff --git a/WcsMain/DataBase/Dao/AppScanRecordDao.cs b/WcsMain/DataBase/Dao/AppScanRecordDao.cs
new file mode 100644
index 0000000..9de1218
--- /dev/null
+++ b/WcsMain/DataBase/Dao/AppScanRecordDao.cs
@@ -0,0 +1,96 @@
+using WcsMain.ApiServe.Controllers.Dto.WcsDto.Scan;
+using WcsMain.Common;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.WcsAttribute.AutoFacAttribute;
+
+namespace WcsMain.DataBase.Dao;
+
+[Component]
+public class AppScanRecordDao
+{
+
+ ///
+ /// 条件查询
+ ///
+ ///
+ ///
+ public List? Query(AppScanRecord queryEntity)
+ {
+ try
+ {
+ var sqlFuc = CommonTool.DbServe.Queryable()
+ .WhereIF(queryEntity.RecordId != default, it => it.RecordId == queryEntity.RecordId)
+ .WhereIF(queryEntity.ScanId != default, it => it.ScanId == queryEntity.ScanId)
+ .WhereIF(queryEntity.Area != default, it => it.Area == queryEntity.Area)
+ .WhereIF(queryEntity.Code != default, it => it.Code == queryEntity.Code)
+ .WhereIF(queryEntity.Tag != default, it => it.Tag == queryEntity.Tag)
+ .WhereIF(queryEntity.Remark != default, it => it.Remark == queryEntity.Remark);
+ return sqlFuc.ToList();
+ }
+ catch(Exception ex)
+ {
+ _ = ex;
+ return default;
+ }
+ }
+
+ ///
+ /// 查询所有
+ ///
+ ///
+ public List? Query() => Query(new AppScanRecord());
+
+
+ ///
+ /// 分页查询
+ ///
+ ///
+ ///
+ public (List? records, int totalCount) Query(QueryScanRecordWithPageRequest request)
+ {
+ try
+ {
+ int totalRows = 0;
+ var sqlFuc = CommonTool.DbServe.Queryable()
+ .WhereIF(!string.IsNullOrEmpty(request.SearchStr),
+ w => w.ScanId!.Contains(request.SearchStr!)
+ || w.Code!.Contains(request.SearchStr!)
+ || w.Area!.Contains(request.SearchStr!)
+ || w.Tag!.Contains(request.SearchStr!)
+ || w.Remark!.Contains(request.SearchStr!));
+ if (request.TimeRange is { Count: 2 }) // 时间范围
+ {
+ sqlFuc.Where(w => w.ScanTime > request.TimeRange[0] && w.ScanTime < request.TimeRange[1]);
+ }
+ sqlFuc = sqlFuc.OrderByDescending(o => new { o.ScanTime });
+ var queryResult = sqlFuc.ToPageList(request.Page!.PageIndex, request.Page!.PageSize, ref totalRows);
+ return (queryResult, totalRows);
+ }
+ catch (Exception ex)
+ {
+ _ = ex;
+ return default;
+ }
+ }
+
+ ///
+ /// 插入数据
+ ///
+ ///
+ ///
+ public int Insert(params AppScanRecord[] records)
+ {
+ try
+ {
+ var sqlFuc = CommonTool.DbServe.Insertable(records);
+ return sqlFuc.ExecuteCommand();
+ }
+ catch (Exception ex)
+ {
+ _ = ex;
+ return default;
+ }
+ }
+
+
+}
diff --git a/WcsMain/DataBase/TableEntity/AppScanRecord.cs b/WcsMain/DataBase/TableEntity/AppScanRecord.cs
new file mode 100644
index 0000000..3987824
--- /dev/null
+++ b/WcsMain/DataBase/TableEntity/AppScanRecord.cs
@@ -0,0 +1,61 @@
+using SqlSugar;
+using System.Text.Json.Serialization;
+
+namespace WcsMain.DataBase.TableEntity;
+
+///
+/// 扫码记录
+///
+[SugarTable("tbl_app_scan_record")]
+public class AppScanRecord
+{
+ ///
+ /// 记录ID
+ ///
+ [JsonPropertyName("recordId")]
+ [SugarColumn(IsPrimaryKey = true, ColumnName = "record_id")]
+ public string? RecordId { get; set; }
+
+ ///
+ /// 扫码ID
+ ///
+ [JsonPropertyName("scanId")]
+ [SugarColumn(ColumnName = "scan_id")]
+ public string? ScanId { get; set; }
+
+ ///
+ /// 区域
+ ///
+ [JsonPropertyName("area")]
+ [SugarColumn(ColumnName = "area")]
+ public string? Area { get; set; }
+
+ ///
+ /// 条码
+ ///
+ [JsonPropertyName("code")]
+ [SugarColumn(ColumnName = "code")]
+ public string? Code { get; set; }
+
+ ///
+ /// 标记
+ ///
+ [JsonPropertyName("tag")]
+ [SugarColumn(ColumnName = "tag")]
+ public string? Tag { get; set; }
+
+ ///
+ /// 扫码时间
+ ///
+ [JsonPropertyName("scanTime")]
+ [SugarColumn(ColumnName = "scan_time")]
+ public DateTime? ScanTime { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [JsonPropertyName("remark")]
+ [SugarColumn(ColumnName = "remark")]
+ public string? Remark { get; set; }
+
+}