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 | 66 | /// 备注 |
| 67 | 67 | /// </summary> |
| 68 | 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
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
| ... | ... | @@ -3237,7 +3237,8 @@ namespace NCC.Extend.LqKdKdjlb |
| 3237 | 3237 | /// "ItemId": "品项ID", |
| 3238 | 3238 | /// "ItemName": "品项名称", |
| 3239 | 3239 | /// "ItemType": "品项类型", |
| 3240 | - /// "SourceType": "来源类型" | |
| 3240 | + /// "SourceType": "来源类型", | |
| 3241 | + /// "StoreId": "门店ID" | |
| 3241 | 3242 | /// } |
| 3242 | 3243 | /// ``` |
| 3243 | 3244 | /// |
| ... | ... | @@ -3258,6 +3259,7 @@ namespace NCC.Extend.LqKdKdjlb |
| 3258 | 3259 | /// - ItemName: 品项名称(可选,模糊查询) |
| 3259 | 3260 | /// - ItemType: 品项类型(可选,精确匹配,对应项目资料表的qt2字段) |
| 3260 | 3261 | /// - SourceType: 来源类型(可选,精确匹配,如:购买、赠送、体验) |
| 3262 | + /// - StoreId: 门店ID(可选,精确匹配,根据开单记录表的门店ID筛选) | |
| 3261 | 3263 | /// |
| 3262 | 3264 | /// 返回数据结构: |
| 3263 | 3265 | /// ```json |
| ... | ... | @@ -3280,7 +3282,9 @@ namespace NCC.Extend.LqKdKdjlb |
| 3280 | 3282 | /// "actualPrice": 500.00, |
| 3281 | 3283 | /// "projectNumber": 5.0, |
| 3282 | 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 | 3303 | /// - projectNumber: 项目次数(decimal类型,支持小数) |
| 3300 | 3304 | /// - sourceType: 来源类型(字符串,如:购买、赠送、体验) |
| 3301 | 3305 | /// - remark: 备注(字符串) |
| 3306 | + /// - storeId: 门店ID(关联开单记录表的门店ID) | |
| 3307 | + /// - storeName: 门店名称(关联门店表的店名字段) | |
| 3302 | 3308 | /// </remarks> |
| 3303 | 3309 | /// <param name="input">查询参数</param> |
| 3304 | 3310 | /// <returns>开单品项明细记录列表(分页)</returns> |
| ... | ... | @@ -3341,7 +3347,8 @@ namespace NCC.Extend.LqKdKdjlb |
| 3341 | 3347 | // 2. 通过 EXISTS 子查询筛选关联字段(在分页前筛选,确保分页准确) |
| 3342 | 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 | 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 | 3353 | // 3. 先分页查询主表数据(查询实体类,提高性能) |
| 3347 | 3354 | var pagedData = await baseQuery.OrderBy(sidx + " " + sort).ToPagedListAsync(input.currentPage, input.pageSize); |
| ... | ... | @@ -3351,6 +3358,7 @@ namespace NCC.Extend.LqKdKdjlb |
| 3351 | 3358 | var memberIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.MemberId)).Select(x => x.MemberId).Distinct().ToList(); |
| 3352 | 3359 | var activityIds = pagedData.list.Where(x => !string.IsNullOrEmpty(x.ActivityId)).Select(x => x.ActivityId).Distinct().ToList(); |
| 3353 | 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 | 3364 | var memberDict = new Dictionary<string, (string Name, string Phone)>(); |
| ... | ... | @@ -3376,6 +3384,23 @@ namespace NCC.Extend.LqKdKdjlb |
| 3376 | 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 | 3404 | // 5. 组装返回数据 |
| 3380 | 3405 | var resultList = pagedData.list.Select(pxmx => new BillingItemDetailListOutput |
| 3381 | 3406 | { |
| ... | ... | @@ -3390,7 +3415,9 @@ namespace NCC.Extend.LqKdKdjlb |
| 3390 | 3415 | actualPrice = pxmx.ActualPrice, |
| 3391 | 3416 | projectNumber = pxmx.ProjectNumber, |
| 3392 | 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 | 3421 | }).ToList(); |
| 3395 | 3422 | |
| 3396 | 3423 | // 6. 返回分页结果 | ... | ... |