using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using NCC.ClayObject; using NCC.Common.Configuration; using NCC.Common.Core.Manager; using NCC.Common.Enum; using NCC.Common.Extension; using NCC.Common.Filter; using NCC.Common.Helper; using NCC.Common.Model.NPOI; using NCC.DataEncryption; using NCC.Dependency; using NCC.DynamicApiController; using NCC.Extend.Entitys.Dto.LqXhHyhk; using NCC.Extend.Entitys.Dto.LqXhJksyj; using NCC.Extend.Entitys.Dto.LqXhKjbsyj; using NCC.Extend.Entitys.Dto.LqXhPxmx; using NCC.Extend.Entitys.lq_kd_kdjlb; using NCC.Extend.Entitys.lq_kd_pxmx; using NCC.Extend.Entitys.lq_khxx; using NCC.Extend.Entitys.lq_xh_hyhk; using NCC.Extend.Entitys.lq_xh_jksyj; using NCC.Extend.Entitys.lq_xh_kjbsyj; using NCC.Extend.Entitys.lq_xh_pxmx; using NCC.Extend.Interfaces.LqXhHyhk; using NCC.FriendlyException; using NCC.JsonSerialization; using SqlSugar; using Yitter.IdGenerator; namespace NCC.Extend.LqXhHyhk { /// /// 耗卡记录表服务 /// [ApiDescriptionSettings(Tag = "绿纤耗卡记录表服务", Name = "LqXhHyhk", Order = 200, Groups = new[] { "Default" })] [Route("api/Extend/[controller]")] public class LqXhHyhkService : ILqXhHyhkService, IDynamicApiController, ITransient { private readonly ISqlSugarRepository _lqXhHyhkRepository; private readonly ISqlSugarRepository _lqXhJksyjRepository; private readonly ISqlSugarRepository _lqXhKjbsyjRepository; private readonly ISqlSugarRepository _lqXhPxmxRepository; private readonly SqlSugarScope _db; private readonly IUserManager _userManager; private readonly ILogger _logger; /// /// 初始化一个类型的新实例 /// public LqXhHyhkService( ISqlSugarRepository lqXhHyhkRepository, ISqlSugarRepository lqXhJksyjRepository, ISqlSugarRepository lqXhKjbsyjRepository, ISqlSugarRepository lqXhPxmxRepository, IUserManager userManager, ILogger logger ) { _lqXhHyhkRepository = lqXhHyhkRepository; _db = _lqXhHyhkRepository.Context; _lqXhJksyjRepository = lqXhJksyjRepository; _lqXhKjbsyjRepository = lqXhKjbsyjRepository; _lqXhPxmxRepository = lqXhPxmxRepository; _userManager = userManager; _logger = logger; } #region 获取会员耗卡 /// /// 获取会员耗卡 /// /// /// 获取耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息 /// 按照耗卡的完整格式返回数据,不包含汇总信息 /// /// 返回数据结构: /// - 主表信息:耗卡基础信息、门店信息、会员信息等 /// - 品项明细列表:每个品项包含完整的项目信息(项目次数、是否有效、来源类型等) /// - 健康师业绩列表:按品项关联的健康师业绩信息 /// - 科技部老师业绩列表:按品项关联的科技部老师业绩信息 /// /// 耗卡记录主键ID /// 耗卡记录完整信息 /// 查询成功 /// 耗卡记录不存在 /// 服务器内部错误 [HttpGet("{id}")] public async Task GetInfo(string id) { try { // 1. 查询主表信息 var entity = await _db.Queryable().FirstAsync(p => p.Id == id); if (entity == null) { throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在"); } var output = entity.Adapt(); // 2. 查询品项明细列表 var lqXhPxmxList = await _db.Queryable().Where(w => w.ConsumeInfoId == entity.Id).ToListAsync(); // 3. 查询健康师业绩列表 var lqXhJksyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); // 4. 查询科技部老师业绩列表 var lqXhKjbsyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); // 5. 构建品项明细输出,每个品项关联对应的业绩信息 var pxmxOutputList = new List(); foreach (var pxmx in lqXhPxmxList) { var pxmxOutput = new LqXhPxmxInfoOutput { id = pxmx.Id, consumeInfoId = pxmx.ConsumeInfoId, billingItemId = pxmx.BillingItemId, px = pxmx.Px, pxmc = pxmx.Pxmc, pxjg = pxmx.Pxjg, memberId = pxmx.MemberId, createTime = pxmx.CreateTIme, projectNumber = pxmx.ProjectNumber, sourceType = pxmx.SourceType, totalPrice = pxmx.TotalPrice, isEffective = pxmx.IsEffective, }; // 关联该品项的健康师业绩 var jksyjForPx = lqXhJksyjList.Where(j => j.Kdpxid == pxmx.Id).ToList(); pxmxOutput.lqXhJksyjList = jksyjForPx.Adapt>(); // 关联该品项的科技部老师业绩 var kjbsyjForPx = lqXhKjbsyjList.Where(k => k.Hkpxid == pxmx.Id).ToList(); pxmxOutput.lqXhKjbsyjList = kjbsyjForPx.Adapt>(); pxmxOutputList.Add(pxmxOutput); } // 6. 设置输出结果 output.lqXhPxmxList = pxmxOutputList; // 7. 设置全局业绩列表(用于兼容性,但主要使用品项关联的业绩) output.lqXhJksyjList = lqXhJksyjList.Adapt>(); output.lqXhKjbsyjList = lqXhKjbsyjList.Adapt>(); return output; } catch (Exception ex) { _logger.LogError(ex, "获取耗卡记录失败,ID:{Id}", id); throw NCCException.Oh(ErrorCode.COM1000, "获取耗卡记录失败"); } } #endregion #region 获取会员耗卡列表 /// /// 获取会员耗卡列表 /// /// 请求参数 /// [HttpGet("")] public async Task GetList([FromQuery] LqXhHyhkListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; List queryHksj = input.hksj != null ? input.hksj.Split(',').ToObeject>() : null; DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null; DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md)) .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh)) .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc)) .WhereIF(!string.IsNullOrEmpty(input.hy), p => p.Hy.Equals(input.hy)) .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh)) .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc)) .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx)) // 注意:xfje 和 sgfy 现在是 decimal 类型,不支持字符串模糊查询 // .WhereIF(!string.IsNullOrEmpty(input.xfje), p => SqlFunc.ToString(p.Xfje).Contains(input.xfje)) // .WhereIF(!string.IsNullOrEmpty(input.sgfy), p => SqlFunc.ToString(p.Sgfy).Contains(input.sgfy)) .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb)) .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0)) .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.czry), p => p.Czry.Equals(input.czry)) .Select(it => new LqXhHyhkListOutput { id = it.Id, md = it.Md, mdbh = it.Mdbh, mdmc = it.Mdmc, hy = it.Hy, hyzh = it.Hyzh, hymc = it.Hymc, gklx = it.Gklx, xfje = SqlFunc.ToString(it.Xfje), sgfy = SqlFunc.ToString(it.Sgfy), sfykjb = it.Sfykjb, hksj = it.Hksj, czry = it.Czry, }) .MergeTable() .OrderBy(sidx + " " + input.sort) .ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(data); } #endregion #region 新建会员耗卡 /// /// 新建会员耗卡 /// /// /// 创建会员耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息 /// /// 示例请求: /// ```json /// { /// "hyid": "会员ID", /// "hkmd": "耗卡门店", /// "hksj": "2025-01-11", /// "lqXhPxmxList": [ /// { /// "px": "品项编号", /// "pxmc": "品项名称", /// "pxjg": 100.00, /// "projectNumber": 1, /// "xfzs": "否", /// "lqXhJksyjList": [ /// { /// "jks": "健康师", /// "jksxm": "健康师姓名", /// "jksyj": "100" /// } /// ] /// } /// ] /// } /// ``` /// /// 参数说明: /// - hyid: 会员ID /// - hkmd: 耗卡门店 /// - lqXhPxmxList: 耗卡品项明细列表 /// /// 会员耗卡创建参数 /// 无返回值 /// 创建成功 /// 参数错误或数据验证失败 /// 服务器内部错误 [HttpPost("")] public async Task Create([FromBody] LqXhHyhkCrInput input) { var userInfo = await _userManager.GetUserInfo(); var entity = input.Adapt(); entity.Id = YitIdHelper.NextId().ToString(); entity.Czry = _userManager.UserId; entity.CreateTime = DateTime.Now; try { // 开启事务 _db.BeginTran(); // 新增会员耗卡记录 var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync(); // 收集所有需要插入的实体,然后批量插入 var allPxmxEntities = new List(); var allJksyjEntities = new List(); var allKjbsyjEntities = new List(); // 处理品项明细列表 if (input.lqXhPxmxList != null && input.lqXhPxmxList.Any()) { foreach (var item in input.lqXhPxmxList) { // 创建品项明细实体 var lqXhPxmxEntity = new LqXhPxmxEntity { Id = YitIdHelper.NextId().ToString(), ConsumeInfoId = newEntity.Id, BillingItemId = item.billingItemId, CreateTIme = DateTime.Now, MemberId = entity.Hy, ProjectNumber = item.projectNumber ?? 1, TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)), Px = item.px, Pxmc = item.pxmc, Pxjg = item.pxjg, SourceType = item.sourceType, }; allPxmxEntities.Add(lqXhPxmxEntity); // 收集该品项关联的健康师业绩 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any()) { foreach (var ijks_tem in item.lqXhJksyjList) { allJksyjEntities.Add( new LqXhJksyjEntity { Id = YitIdHelper.NextId().ToString(), Glkdbh = newEntity.Id, Jks = ijks_tem.jks, Jksxm = ijks_tem.jksxm, Jkszh = ijks_tem.jkszh, Jksyj = ijks_tem.jksyj, Yjsj = DateTime.Now, JsjId = ijks_tem.jsjId, Kdpxid = lqXhPxmxEntity.Id, LaborCost = ijks_tem.laborCost, KdpxNumber = ijks_tem.kdpxNumber, } ); } } // 收集该品项关联的科技部老师业绩 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any()) { foreach (var ikjbs_tem in item.lqXhKjbsyjList) { allKjbsyjEntities.Add( new LqXhKjbsyjEntity { Id = YitIdHelper.NextId().ToString(), Glkdbh = newEntity.Id, Kjbls = ikjbs_tem.kjbls, Kjblsxm = ikjbs_tem.kjblsxm, Kjblszh = ikjbs_tem.kjblszh, Kjblsyj = ikjbs_tem.kjblsyj, Yjsj = DateTime.Now, Hkpxid = lqXhPxmxEntity.Id, LaborCost = ikjbs_tem.laborCost, HdpxNumber = ikjbs_tem.hdpxNumber, } ); } } } } // 批量插入品项明细 if (allPxmxEntities.Any()) { // 分别处理插入和更新 var existingEntities = allPxmxEntities.Where(e => !string.IsNullOrEmpty(e.Id)).ToList(); var newEntities = allPxmxEntities.Where(e => string.IsNullOrEmpty(e.Id)).ToList(); if (existingEntities.Any()) { await _db.Updateable(existingEntities).ExecuteCommandAsync(); } if (newEntities.Any()) { await _db.Insertable(newEntities).ExecuteCommandAsync(); } } // 批量插入健康师业绩 if (allJksyjEntities.Any()) { await _db.Insertable(allJksyjEntities).ExecuteCommandAsync(); } // 批量插入科技部老师业绩 if (allKjbsyjEntities.Any()) { await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync(); } // 提交事务 _db.CommitTran(); } catch (Exception ex) { // 回滚事务 _db.RollbackTran(); Console.WriteLine($"新建会员耗卡失败: {ex.Message}"); Console.WriteLine($"堆栈跟踪: {ex.StackTrace}"); throw NCCException.Oh(ErrorCode.COM1000, $"新建会员耗卡失败: {ex.Message}"); } } #endregion #region 获取会员耗卡无分页列表 /// /// 获取会员耗卡无分页列表 /// /// 请求参数 /// [NonAction] public async Task GetNoPagingList([FromQuery] LqXhHyhkListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; List queryHksj = input.hksj != null ? input.hksj.Split(',').ToObeject>() : null; DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null; DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md)) .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh)) .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc)) .WhereIF(!string.IsNullOrEmpty(input.hy), p => p.Hy.Equals(input.hy)) .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh)) .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc)) .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx)) .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb)) .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0)) .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.czry), p => p.Czry.Equals(input.czry)) .Select(it => new LqXhHyhkListOutput { id = it.Id, md = it.Md, mdbh = it.Mdbh, mdmc = it.Mdmc, hy = it.Hy, hyzh = it.Hyzh, hymc = it.Hymc, gklx = it.Gklx, xfje = SqlFunc.ToString(it.Xfje), sgfy = SqlFunc.ToString(it.Sgfy), sfykjb = it.Sfykjb, hksj = it.Hksj, czry = it.Czry, }) .MergeTable() .OrderBy(sidx + " " + input.sort) .ToListAsync(); return data; } #endregion #region 导出会员耗卡 /// /// 导出会员耗卡 /// /// 请求参数 /// [HttpGet("Actions/Export")] public async Task Export([FromQuery] LqXhHyhkListQueryInput input) { var userInfo = await _userManager.GetUserInfo(); var exportData = new List(); if (input.dataType == 0) { var data = Clay.Object(await this.GetList(input)); exportData = data.Solidify>().list; } else { exportData = await this.GetNoPagingList(input); } List paramList = "[{\"value\":\"耗卡编号\",\"field\":\"id\"},{\"value\":\"门店\",\"field\":\"md\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"会员\",\"field\":\"hy\"},{\"value\":\"会员账号\",\"field\":\"hyzh\"},{\"value\":\"会员名称\",\"field\":\"hymc\"},{\"value\":\"顾客类型\",\"field\":\"gklx\"},{\"value\":\"消费金额\",\"field\":\"xfje\"},{\"value\":\"手工费用\",\"field\":\"sgfy\"},{\"value\":\"是否有科技部\",\"field\":\"sfykjb\"},{\"value\":\"耗卡时间\",\"field\":\"hksj\"},{\"value\":\"操作人员\",\"field\":\"czry\"},]".ToList(); ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "会员耗卡.xls"; excelconfig.HeadFont = "微软雅黑"; excelconfig.HeadPoint = 10; excelconfig.IsAllSizeColumn = true; excelconfig.ColumnModel = new List(); List selectKeyList = input.selectKey.Split(',').ToList(); foreach (var item in selectKeyList) { var isExist = paramList.Find(p => p.field == item); if (isExist != null) { excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); } } var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; ExcelExportHelper.Export(exportData, excelconfig, addPath); var fileName = _userManager.UserId + "|" + addPath + "|xls"; var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; return output; } #endregion #region 批量删除会员耗卡 /// /// 批量删除会员耗卡 /// /// 主键数组 /// [HttpPost("batchRemove")] public async Task BatchRemove([FromBody] List ids) { var entitys = await _db.Queryable().In(it => it.Id, ids).ToListAsync(); if (entitys.Count > 0) { try { //开启事务 _db.BeginTran(); //批量删除会员耗卡 await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.Glkdbh, ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.Glkdbh, ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.ConsumeInfoId, ids).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1002); } } } #endregion #region 更新会员耗卡 /// /// 更新会员耗卡,不会删除品项明细,只会更新或新增 /// /// 主键 /// 参数 /// [HttpPut("{id}")] public async Task Update(string id, [FromBody] LqXhHyhkUpInput input) { var entity = input.Adapt(); try { //开启事务 _db.BeginTran(); entity.UpdateTime = DateTime.Now; //更新会员耗卡记录 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); //清空原有数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); // 注意:品项明细表不做删除操作,只更新或新增 // await _db.Deleteable().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync(); // 收集所有需要插入的实体,然后批量插入 var allPxmxEntities = new List(); var allJksyjEntities = new List(); var allKjbsyjEntities = new List(); // 处理品项明细列表 if (input.lqXhPxmxList != null && input.lqXhPxmxList.Any()) { foreach (var item in input.lqXhPxmxList) { // 检查品项明细是否已存在 var existingPxmx = await _db.Queryable() .Where(p => p.Id == item.id) .FirstAsync(); LqXhPxmxEntity lqXhPxmxEntity; if (existingPxmx != null) { // 更新现有记录 lqXhPxmxEntity = existingPxmx; // 注意:LqXhPxmxEntity 没有 UpdateTime 字段 lqXhPxmxEntity.MemberId = entity.Hy; lqXhPxmxEntity.ProjectNumber = item.projectNumber ?? 1; lqXhPxmxEntity.TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)); lqXhPxmxEntity.Px = item.px; lqXhPxmxEntity.Pxmc = item.pxmc; lqXhPxmxEntity.Pxjg = item.pxjg; lqXhPxmxEntity.SourceType = item.sourceType; } else { // 创建新记录 lqXhPxmxEntity = new LqXhPxmxEntity { Id = YitIdHelper.NextId().ToString(), ConsumeInfoId = entity.Id, BillingItemId = item.billingItemId, CreateTIme = DateTime.Now, MemberId = entity.Hy, ProjectNumber = item.projectNumber ?? 1, TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)), Px = item.px, Pxmc = item.pxmc, Pxjg = item.pxjg, SourceType = item.sourceType, }; } allPxmxEntities.Add(lqXhPxmxEntity); // 收集该品项关联的健康师业绩 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any()) { foreach (var ijks_tem in item.lqXhJksyjList) { allJksyjEntities.Add( new LqXhJksyjEntity { Id = YitIdHelper.NextId().ToString(), Glkdbh = entity.Id, Jks = ijks_tem.jks, Jksxm = ijks_tem.jksxm, Jkszh = ijks_tem.jkszh, Jksyj = ijks_tem.jksyj, Yjsj = DateTime.Now, JsjId = ijks_tem.jsjId, Kdpxid = lqXhPxmxEntity.Id, LaborCost = ijks_tem.laborCost, KdpxNumber = ijks_tem.kdpxNumber, } ); } } // 收集该品项关联的科技部老师业绩 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any()) { foreach (var ikjbs_tem in item.lqXhKjbsyjList) { allKjbsyjEntities.Add( new LqXhKjbsyjEntity { Id = YitIdHelper.NextId().ToString(), Glkdbh = entity.Id, Kjbls = ikjbs_tem.kjbls, Kjblsxm = ikjbs_tem.kjblsxm, Kjblszh = ikjbs_tem.kjblszh, Kjblsyj = ikjbs_tem.kjblsyj, Yjsj = DateTime.Now, Hkpxid = lqXhPxmxEntity.Id, LaborCost = ikjbs_tem.laborCost, HdpxNumber = ikjbs_tem.hdpxNumber, } ); } } } } // 批量插入品项明细 if (allPxmxEntities.Any()) { // 分别处理插入和更新 var existingEntities = allPxmxEntities.Where(e => !string.IsNullOrEmpty(e.Id)).ToList(); var newEntities = allPxmxEntities.Where(e => string.IsNullOrEmpty(e.Id)).ToList(); if (existingEntities.Any()) { await _db.Updateable(existingEntities).ExecuteCommandAsync(); } if (newEntities.Any()) { await _db.Insertable(newEntities).ExecuteCommandAsync(); } } // 批量插入健康师业绩 if (allJksyjEntities.Any()) { await _db.Insertable(allJksyjEntities).ExecuteCommandAsync(); } // 批量插入科技部老师业绩 if (allKjbsyjEntities.Any()) { await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync(); } //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1001); } } #endregion #region 删除会员耗卡 /// /// 删除会员耗卡 /// /// [HttpDelete("{id}")] public async Task Delete(string id) { var entity = await _db.Queryable().FirstAsync(p => p.Id == id); _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); try { //开启事务 _db.BeginTran(); //删除会员耗卡记录 await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1002); } } #endregion } }