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
}
}