Commit 631fcb03ef97a7a53d211877c6d5ec7a833a4649

Authored by “wangming”
1 parent baff4257

feat: 开单品项明细记录列表接口新增门店信息

- 新增门店ID和门店名称返回字段
- 支持根据门店ID进行筛选
- 优化查询逻辑,通过批量查询提升性能
- 更新接口文档,完善参数和返回字段说明
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
... ... @@ -66,6 +66,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
66 66 /// 来源类型(购买/赠送/体验)
67 67 /// </summary>
68 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 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. 返回分页结果
... ...