using Mapster;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NCC.Common.Core.Manager;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.Extend.Entitys.Dto.LqZjlMdsmxsz;
using NCC.Extend.Entitys.Entity.lq_zjl_mdsmxsz;
using NCC.Extend.Interfaces.LqZjlMdsmxsz;
using NCC.System.Entitys.Permission;
using NCC.Extend.Entitys.lq_mdxx;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Yitter.IdGenerator;
using NCC.Common.Filter;
using NCC.Common.Enum;
using NCC.FriendlyException;
namespace NCC.Extend
{
///
/// 事业部总经理门店生命线设置服务
///
[ApiDescriptionSettings(Tag = "事业部总经理门店生命线设置服务(已废弃)", Name = "LqZjlMdsmxsz", Order = 200)]
[Route("api/Extend/[controller]")]
public class LqZjlMdsmxszService : ILqZjlMdsmxszService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
private readonly IHttpContextAccessor _httpContextAccessor;
///
/// 构造函数
///
/// 数据库上下文
/// 用户管理器
/// HTTP上下文访问器
public LqZjlMdsmxszService(
ISqlSugarClient db,
IUserManager userManager,
IHttpContextAccessor httpContextAccessor)
{
_db = db;
_userManager = userManager;
_httpContextAccessor = httpContextAccessor;
}
#region 根据总经理用户ID查询相关设置信息
///
/// 根据总经理用户ID查询相关设置信息
///
///
/// 根据总经理用户ID查询其管理的所有门店的生命线设置信息
///
/// 示例请求:
/// GET /api/Extend/LqZjlMdsmxsz/GetByZjlUserid?zjlUserid=zjl001
///
/// 业务逻辑:
/// 1. 根据总经理用户ID查询生命线设置记录
/// 2. 关联门店表获取门店详细信息
/// 3. 关联用户表获取总经理姓名
/// 4. 返回完整的设置信息列表
///
/// 总经理用户ID
/// 总经理门店生命线设置列表
/// 成功返回设置列表
/// 参数错误
/// 服务器内部错误
[HttpGet("GetByZjlUserid")]
public async Task GetByZjlUserid(string zjlUserid)
{
if (string.IsNullOrEmpty(zjlUserid))
{
return new { list = new List() };
}
var result = await _db.Queryable()
.LeftJoin((smx, u) => smx.ZjlUserid == u.Id)
.LeftJoin((smx, u, md) => smx.MdId == md.Id)
.Where((smx, u, md) => smx.ZjlUserid == zjlUserid && smx.Deletemark == 0)
.Select((smx, u, md) => new LqZjlMdsmxszListOutput
{
Id = smx.Id,
ZjlUserid = smx.ZjlUserid,
ZjlName = u.RealName,
MdId = smx.MdId,
Mdbm = md.Mdbm,
Dm = md.Dm,
Smx1 = smx.Smx1,
Tcbl1 = smx.Tcbl1,
Smx2 = smx.Smx2,
Tcbl2 = smx.Tcbl2,
Smx3 = smx.Smx3,
Tcbl3 = smx.Tcbl3,
Bz = smx.Bz,
Cjsj = smx.Cjsj,
Cjry = smx.Cjry,
Xgsj = smx.Xgsj,
Xgly = smx.Xgly
})
.ToListAsync();
return new { list = result };
}
#endregion
#region 批量创建事业部总经理门店生命线设置
///
/// 批量创建事业部总经理门店生命线设置
///
///
/// 为指定总经理批量创建多个门店的生命线设置
///
/// 示例请求:
/// ```json
/// POST /api/Extend/LqZjlMdsmxsz/BatchCreate
/// {
/// "zjlUserid": "zjl001",
/// "items": [
/// {
/// "mdId": "md001",
/// "smx1": 100000.00,
/// "tcbBl": 3.50,
/// "bz": "门店A生命线设置"
/// },
/// {
/// "mdId": "md002",
/// "smx1": 150000.00,
/// "tcbBl": 4.00,
/// "bz": "门店B生命线设置"
/// }
/// ]
/// }
/// ```
///
/// 业务逻辑:
/// 1. 验证总经理用户ID是否存在
/// 2. 验证门店ID是否有效
/// 3. 检查是否已存在相同的设置记录
/// 4. 批量插入新的设置记录
/// 5. 返回创建结果
///
/// 批量创建输入参数
/// 创建结果
/// 成功创建设置记录
/// 参数验证失败
/// 存在重复记录
/// 服务器内部错误
[HttpPost("BatchCreate")]
public async Task BatchCreate(LqZjlMdsmxszBatchCreateInput input)
{
// 验证总经理用户是否存在
var userExists = await _db.Queryable()
.Where(x => x.Id == input.ZjlUserid && x.DeleteMark == null)
.AnyAsync();
if (!userExists)
{
return new { success = false, message = "总经理用户不存在" };
}
// 验证门店ID是否有效
var mdIds = input.Items.Select(x => x.MdId).ToList();
var validMdIds = await _db.Queryable()
.Where(x => mdIds.Contains(x.Id))
.Select(x => x.Id)
.ToListAsync();
var invalidMdIds = mdIds.Except(validMdIds).ToList();
if (invalidMdIds.Any())
{
return new { success = false, message = $"以下门店ID不存在: {string.Join(", ", invalidMdIds)}" };
}
// 处理每个门店设置(支持新增和修改)
var currentTime = DateTime.Now;
var currentUser = _userManager.User?.Id ?? "system";
var addCount = 0;
var updateCount = 0;
foreach (var item in input.Items)
{
// 检查是否已存在
var existing = await _db.Queryable()
.Where(x => x.ZjlUserid == input.ZjlUserid && x.MdId == item.MdId && x.Deletemark == 0)
.FirstAsync();
if (existing != null)
{
// 更新现有记录
existing.Smx1 = item.Smx1;
existing.Tcbl1 = item.Tcbl1;
existing.Smx2 = item.Smx2;
existing.Tcbl2 = item.Tcbl2;
existing.Smx3 = item.Smx3;
existing.Tcbl3 = item.Tcbl3;
existing.Bz = item.Bz;
existing.Xgsj = currentTime;
existing.Xgly = currentUser;
await _db.Updateable(existing).ExecuteCommandAsync();
updateCount++;
}
else
{
// 新增记录
var entity = new LqZjlMdsmxszEntity
{
Id = YitIdHelper.NextId().ToString(),
ZjlUserid = input.ZjlUserid,
MdId = item.MdId,
Smx1 = item.Smx1,
Tcbl1 = item.Tcbl1,
Smx2 = item.Smx2,
Tcbl2 = item.Tcbl2,
Smx3 = item.Smx3,
Tcbl3 = item.Tcbl3,
Bz = item.Bz,
Cjsj = currentTime,
Cjry = currentUser,
Deletemark = 0
};
await _db.Insertable(entity).ExecuteCommandAsync();
addCount++;
}
}
return new
{
success = true,
message = "设置成功",
addCount = addCount,
updateCount = updateCount,
totalCount = addCount + updateCount
};
}
#endregion
#region 获取总经理所在组织能管理的门店
///
/// 获取总经理所在组织能管理的门店
///
///
/// 根据总经理的组织权限,获取其能管理的所有门店列表
///
/// 示例请求:
/// GET /api/Extend/LqZjlTcsz/ManagedStores
///
/// 业务逻辑:
/// 2. 根据用户组织ID获取下属组织列表
/// 3. 根据组织权限过滤门店数据
/// 4. 返回门店基本信息列表
///
/// 总经理能管理的门店列表
/// 成功返回门店列表
/// 未授权访问
/// 服务器内部错误
[HttpGet("ManagedStores/{userid}")]
public async Task GetManagedStores(string userid)
{
var userOrganizeId = await _db.Queryable().Where(x => x.Id == userid && x.DeleteMark == null).Select(x => x.OrganizeId).FirstAsync();
// 根据组织权限获取门店
var stores = await _db.Queryable()
.Where(s => s.Syb == userOrganizeId || s.Jyb == userOrganizeId || s.Kjb == userOrganizeId || s.Dxmb == userOrganizeId)
.ToListAsync();
return new { list = stores };
}
#endregion
#region 分页查询
///
/// 获取所有总经理门店生命线设置数据(分页查询)
///
/// 查询输入参数
/// 分页数据
[HttpGet("GetPageList")]
public async Task GetPageList([FromQuery] LqZjlMdsmxszListQueryInput input)
{
var sidx = input.sidx == null ? "id" : input.sidx;
var data = await _db.Queryable()
.WhereIF(!string.IsNullOrEmpty(input.ZjlUserid), p => p.ZjlUserid.Contains(input.ZjlUserid))
.WhereIF(!string.IsNullOrEmpty(input.MdId), p => p.MdId.Contains(input.MdId))
.Select(it => new LqZjlMdsmxszListOutput
{
Id = it.Id,
ZjlUserid = it.ZjlUserid,
ZjlName = SqlFunc.Subqueryable().Where(x => x.Id == it.ZjlUserid).Select(x => x.RealName),
MdId = it.MdId,
Mdbm = SqlFunc.Subqueryable().Where(x => x.Id == it.MdId).Select(x => x.Mdbm),
Dm = SqlFunc.Subqueryable().Where(x => x.Id == it.MdId).Select(x => x.Dm),
Smx1 = it.Smx1,
Tcbl1 = it.Tcbl1,
Smx2 = it.Smx2,
Tcbl2 = it.Tcbl2,
Smx3 = it.Smx3,
Tcbl3 = it.Tcbl3,
Bz = it.Bz,
Cjsj = it.Cjsj,
Cjry = it.Cjry,
Xgsj = it.Xgsj,
Xgly = it.Xgly
}).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult.SqlSugarPageResult(data);
}
#endregion
#region 更新总经理门店生命线设置
///
/// 更新总经理门店生命线设置
///
[HttpPut("{id}")]
public async Task Update(string id, [FromBody] LqZjlMdsmxszUpInput input)
{
var entity = await _db.Queryable()
.Where(x => x.Id == id && x.Deletemark == 0)
.FirstAsync();
if (entity == null)
{
throw NCCException.Oh(ErrorCode.COM1001);
}
// 更新字段
entity.Smx1 = input.Smx1;
entity.Tcbl1 = input.Tcbl1;
entity.Smx2 = input.Smx2;
entity.Tcbl2 = input.Tcbl2;
entity.Smx3 = input.Smx3;
entity.Tcbl3 = input.Tcbl3;
entity.Bz = input.Bz;
entity.Xgsj = DateTime.Now;
entity.Xgly = _userManager.User?.Id ?? "admin";
var isOk = await _db.Updateable(entity).ExecuteCommandAsync();
if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
}
#endregion
}
}