Commit 631fcb03ef97a7a53d211877c6d5ec7a833a4649
1 parent
baff4257
feat: 开单品项明细记录列表接口新增门店信息
- 新增门店ID和门店名称返回字段 - 支持根据门店ID进行筛选 - 优化查询逻辑,通过批量查询提升性能 - 更新接口文档,完善参数和返回字段说明
Showing
3 changed files
with
46 additions
and
4 deletions
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/BillingItemDetailListOutput.cs
| @@ -66,6 +66,16 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb | @@ -66,6 +66,16 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb | ||
| 66 | /// 备注 | 66 | /// 备注 |
| 67 | /// </summary> | 67 | /// </summary> |
| 68 | public string remark { get; set; } | 68 | public string remark { get; set; } |
| 69 | + | ||
| 70 | + /// <summary> | ||
| 71 | + /// 门店ID | ||
| 72 | + /// </summary> | ||
| 73 | + public string storeId { get; set; } | ||
| 74 | + | ||
| 75 | + /// <summary> | ||
| 76 | + /// 门店名称 | ||
| 77 | + /// </summary> | ||
| 78 | + public string storeName { get; set; } | ||
| 69 | } | 79 | } |
| 70 | } | 80 | } |
| 71 | 81 |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/BillingItemDetailListQueryInput.cs
| @@ -66,6 +66,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb | @@ -66,6 +66,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb | ||
| 66 | /// 来源类型(购买/赠送/体验) | 66 | /// 来源类型(购买/赠送/体验) |
| 67 | /// </summary> | 67 | /// </summary> |
| 68 | public string SourceType { get; set; } | 68 | public string SourceType { get; set; } |
| 69 | + | ||
| 70 | + /// <summary> | ||
| 71 | + /// 门店ID | ||
| 72 | + /// </summary> | ||
| 73 | + public string StoreId { get; set; } | ||
| 69 | } | 74 | } |
| 70 | } | 75 | } |
| 71 | 76 |
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
| @@ -3237,7 +3237,8 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3237,7 +3237,8 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3237 | /// "ItemId": "品项ID", | 3237 | /// "ItemId": "品项ID", |
| 3238 | /// "ItemName": "品项名称", | 3238 | /// "ItemName": "品项名称", |
| 3239 | /// "ItemType": "品项类型", | 3239 | /// "ItemType": "品项类型", |
| 3240 | - /// "SourceType": "来源类型" | 3240 | + /// "SourceType": "来源类型", |
| 3241 | + /// "StoreId": "门店ID" | ||
| 3241 | /// } | 3242 | /// } |
| 3242 | /// ``` | 3243 | /// ``` |
| 3243 | /// | 3244 | /// |
| @@ -3258,6 +3259,7 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3258,6 +3259,7 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3258 | /// - ItemName: 品项名称(可选,模糊查询) | 3259 | /// - ItemName: 品项名称(可选,模糊查询) |
| 3259 | /// - ItemType: 品项类型(可选,精确匹配,对应项目资料表的qt2字段) | 3260 | /// - ItemType: 品项类型(可选,精确匹配,对应项目资料表的qt2字段) |
| 3260 | /// - SourceType: 来源类型(可选,精确匹配,如:购买、赠送、体验) | 3261 | /// - SourceType: 来源类型(可选,精确匹配,如:购买、赠送、体验) |
| 3262 | + /// - StoreId: 门店ID(可选,精确匹配,根据开单记录表的门店ID筛选) | ||
| 3261 | /// | 3263 | /// |
| 3262 | /// 返回数据结构: | 3264 | /// 返回数据结构: |
| 3263 | /// ```json | 3265 | /// ```json |
| @@ -3280,7 +3282,9 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3280,7 +3282,9 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3280 | /// "actualPrice": 500.00, | 3282 | /// "actualPrice": 500.00, |
| 3281 | /// "projectNumber": 5.0, | 3283 | /// "projectNumber": 5.0, |
| 3282 | /// "sourceType": "购买", | 3284 | /// "sourceType": "购买", |
| 3283 | - /// "remark": "备注" | 3285 | + /// "remark": "备注", |
| 3286 | + /// "storeId": "门店ID", | ||
| 3287 | + /// "storeName": "门店名称" | ||
| 3284 | /// } | 3288 | /// } |
| 3285 | /// ] | 3289 | /// ] |
| 3286 | /// } | 3290 | /// } |
| @@ -3299,6 +3303,8 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3299,6 +3303,8 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3299 | /// - projectNumber: 项目次数(decimal类型,支持小数) | 3303 | /// - projectNumber: 项目次数(decimal类型,支持小数) |
| 3300 | /// - sourceType: 来源类型(字符串,如:购买、赠送、体验) | 3304 | /// - sourceType: 来源类型(字符串,如:购买、赠送、体验) |
| 3301 | /// - remark: 备注(字符串) | 3305 | /// - remark: 备注(字符串) |
| 3306 | + /// - storeId: 门店ID(关联开单记录表的门店ID) | ||
| 3307 | + /// - storeName: 门店名称(关联门店表的店名字段) | ||
| 3302 | /// </remarks> | 3308 | /// </remarks> |
| 3303 | /// <param name="input">查询参数</param> | 3309 | /// <param name="input">查询参数</param> |
| 3304 | /// <returns>开单品项明细记录列表(分页)</returns> | 3310 | /// <returns>开单品项明细记录列表(分页)</returns> |
| @@ -3341,7 +3347,8 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3341,7 +3347,8 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3341 | // 2. 通过 EXISTS 子查询筛选关联字段(在分页前筛选,确保分页准确) | 3347 | // 2. 通过 EXISTS 子查询筛选关联字段(在分页前筛选,确保分页准确) |
| 3342 | baseQuery = baseQuery.WhereIF(!string.IsNullOrEmpty(input.MemberName), pxmx => SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == pxmx.MemberId && x.Khmc != null && x.Khmc.Contains(input.MemberName)).Any()) | 3348 | baseQuery = baseQuery.WhereIF(!string.IsNullOrEmpty(input.MemberName), pxmx => SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == pxmx.MemberId && x.Khmc != null && x.Khmc.Contains(input.MemberName)).Any()) |
| 3343 | .WhereIF(!string.IsNullOrEmpty(input.MemberPhone), pxmx => SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == pxmx.MemberId && x.Sjh == input.MemberPhone).Any()) | 3349 | .WhereIF(!string.IsNullOrEmpty(input.MemberPhone), pxmx => SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == pxmx.MemberId && x.Sjh == input.MemberPhone).Any()) |
| 3344 | - .WhereIF(!string.IsNullOrEmpty(input.ItemType), pxmx => SqlFunc.Subqueryable<LqXmzlEntity>().Where(x => x.Id == pxmx.Px && x.Fl4 == input.ItemType).Any()); | 3350 | + .WhereIF(!string.IsNullOrEmpty(input.ItemType), pxmx => SqlFunc.Subqueryable<LqXmzlEntity>().Where(x => x.Id == pxmx.Px && x.Fl4 == input.ItemType).Any()) |
| 3351 | + .WhereIF(!string.IsNullOrEmpty(input.StoreId), pxmx => SqlFunc.Subqueryable<LqKdKdjlbEntity>().Where(x => x.Id == pxmx.Glkdbh && x.Djmd == input.StoreId).Any()); | ||
| 3345 | 3352 | ||
| 3346 | // 3. 先分页查询主表数据(查询实体类,提高性能) | 3353 | // 3. 先分页查询主表数据(查询实体类,提高性能) |
| 3347 | var pagedData = await baseQuery.OrderBy(sidx + " " + sort).ToPagedListAsync(input.currentPage, input.pageSize); | 3354 | var pagedData = await baseQuery.OrderBy(sidx + " " + sort).ToPagedListAsync(input.currentPage, input.pageSize); |
| @@ -3351,6 +3358,7 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3351,6 +3358,7 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3351 | var memberIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.MemberId)).Select(x => x.MemberId).Distinct().ToList(); | 3358 | var memberIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.MemberId)).Select(x => x.MemberId).Distinct().ToList(); |
| 3352 | var activityIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.ActivityId)).Select(x => x.ActivityId).Distinct().ToList(); | 3359 | var activityIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.ActivityId)).Select(x => x.ActivityId).Distinct().ToList(); |
| 3353 | var projectIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.Px)).Select(x => x.Px).Distinct().ToList(); | 3360 | var projectIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.Px)).Select(x => x.Px).Distinct().ToList(); |
| 3361 | + var billingIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.Glkdbh)).Select(x => x.Glkdbh).Distinct().ToList(); | ||
| 3354 | 3362 | ||
| 3355 | // 批量查询会员信息 | 3363 | // 批量查询会员信息 |
| 3356 | var memberDict = new Dictionary<string, (string Name, string Phone)>(); | 3364 | var memberDict = new Dictionary<string, (string Name, string Phone)>(); |
| @@ -3376,6 +3384,23 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3376,6 +3384,23 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3376 | projectDict = projects.ToDictionary(x => x.Id, x => x.Qt2 ?? ""); | 3384 | projectDict = projects.ToDictionary(x => x.Id, x => x.Qt2 ?? ""); |
| 3377 | } | 3385 | } |
| 3378 | 3386 | ||
| 3387 | + // 批量查询开单记录,获取门店ID | ||
| 3388 | + var billingStoreDict = new Dictionary<string, string>(); | ||
| 3389 | + if (billingIds.Any()) | ||
| 3390 | + { | ||
| 3391 | + var billings = await _db.Queryable<LqKdKdjlbEntity>().Where(x => billingIds.Contains(x.Id)).Select(x => new { x.Id, x.Djmd }).ToListAsync(); | ||
| 3392 | + billingStoreDict = billings.ToDictionary(x => x.Id, x => x.Djmd ?? ""); | ||
| 3393 | + } | ||
| 3394 | + | ||
| 3395 | + // 批量查询门店信息 | ||
| 3396 | + var storeDict = new Dictionary<string, string>(); | ||
| 3397 | + var storeIds = billingStoreDict.Values.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList(); | ||
| 3398 | + if (storeIds.Any()) | ||
| 3399 | + { | ||
| 3400 | + var stores = await _db.Queryable<LqMdxxEntity>().Where(x => storeIds.Contains(x.Id)).Select(x => new { x.Id, x.Dm }).ToListAsync(); | ||
| 3401 | + storeDict = stores.ToDictionary(x => x.Id, x => x.Dm ?? ""); | ||
| 3402 | + } | ||
| 3403 | + | ||
| 3379 | // 5. 组装返回数据 | 3404 | // 5. 组装返回数据 |
| 3380 | var resultList = pagedData.list.Select(pxmx => new BillingItemDetailListOutput | 3405 | var resultList = pagedData.list.Select(pxmx => new BillingItemDetailListOutput |
| 3381 | { | 3406 | { |
| @@ -3390,7 +3415,9 @@ namespace NCC.Extend.LqKdKdjlb | @@ -3390,7 +3415,9 @@ namespace NCC.Extend.LqKdKdjlb | ||
| 3390 | actualPrice = pxmx.ActualPrice, | 3415 | actualPrice = pxmx.ActualPrice, |
| 3391 | projectNumber = pxmx.ProjectNumber, | 3416 | projectNumber = pxmx.ProjectNumber, |
| 3392 | sourceType = pxmx.SourceType, | 3417 | sourceType = pxmx.SourceType, |
| 3393 | - remark = pxmx.Remark | 3418 | + remark = pxmx.Remark, |
| 3419 | + storeId = pxmx.Glkdbh != null && billingStoreDict.ContainsKey(pxmx.Glkdbh) ? billingStoreDict[pxmx.Glkdbh] : "", | ||
| 3420 | + storeName = pxmx.Glkdbh != null && billingStoreDict.ContainsKey(pxmx.Glkdbh) && !string.IsNullOrEmpty(billingStoreDict[pxmx.Glkdbh]) && storeDict.ContainsKey(billingStoreDict[pxmx.Glkdbh]) ? storeDict[billingStoreDict[pxmx.Glkdbh]] : "" | ||
| 3394 | }).ToList(); | 3421 | }).ToList(); |
| 3395 | 3422 | ||
| 3396 | // 6. 返回分页结果 | 3423 | // 6. 返回分页结果 |