using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Newtonsoft.Json.Linq;
using NPOI.HPSF;
using NPOI.POIFS.Crypt.Dsig;
using System.Text.RegularExpressions;
using Train.Application.Services;
using Train.Core.Common;
using Train.Core.Dtos.Account;
using Train.Core.Dtos.Base;
using Train.Core.IServices;
using Train.Core.Models;
using Train.Core.Models.Account;
using Train.Core.Models.Base;
using Train.Core.Models.Common;
using Train.Core.Repositories;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using Microsoft.Extensions.Configuration;
namespace Train.WebApi.Controllers
{
///
/// 收费方式管理
///
[Route(“[controller]/[action]”)]
[ApiController]
public class BaseChargeModeController: ControllerBase
{
private readonly IRepository<BaseChargeModeInfo, int> _repository;
private readonly IRepository<BaseChargeType, int> _repBaseChargeType;
private readonly IAdminAuditLogServer _adminAuditLogServer;
private readonly IAdminUserPermitServer _adminUserPermitServer;
public BaseChargeModeController(
IRepository<BaseChargeModeInfo, int> repository,
IRepository<BaseChargeType, int> repBaseChargeType,
IAdminAuditLogServer adminAuditLogServer,
IAdminUserPermitServer adminUserPermitServer)
{
_repository = repository;
_adminAuditLogServer = adminAuditLogServer;
_adminUserPermitServer = adminUserPermitServer;
_repBaseChargeType = repBaseChargeType;
}
#region 查询
/// <summary>
/// 信息详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("/[controller]/{Id}/info")]
public async Task<ResponseData<BaseChargeModeInfo>> Get(int Id)
{
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseChargeMode_Management_info"))
{
return ResponseHelper.BadRequest<BaseChargeModeInfo>("没有权限,无法操作,请添加权限", null);
}
var permit = GetPermitDict();
BaseChargeModeInfo baseChargeModeInfo = new BaseChargeModeInfo();
var result = await _repository.GetAll().Where(b => b.BaseChargeModeInfoId == Id && b.Del == 0).FirstOrDefaultAsync();
BaseChargeType res = await _repBaseChargeType.GetAll().Where(b => b.BaseChargeTypeId == result.BaseChargeTypeId && b.Del == 0).FirstOrDefaultAsync();
if (result != null)
{
baseChargeModeInfo.BaseChargeModeInfoId = result.BaseChargeModeInfoId;
baseChargeModeInfo.BaseChargeType = res;
baseChargeModeInfo.ChargeModeCode = result.ChargeModeCode;
baseChargeModeInfo.BaseChargeModeInfoGuid = result.BaseChargeModeInfoGuid;
baseChargeModeInfo.ChargeModeCode = result.ChargeModeCode;
baseChargeModeInfo.ChargeModeName = result.ChargeModeName;
baseChargeModeInfo.ChargeTypePhoto = result.ChargeTypePhoto;
baseChargeModeInfo.BaseChargeTypeId = result.BaseChargeTypeId;
baseChargeModeInfo.State = result.State;
baseChargeModeInfo.Del = result.Del;
baseChargeModeInfo.InputTime = result.InputTime;
baseChargeModeInfo.UpdateTime = result.UpdateTime;
baseChargeModeInfo.FreeTime = result.FreeTime;
baseChargeModeInfo.DayChargeEndTime = result.DayChargeEndTime;
baseChargeModeInfo.DayChargeStartTime = result.DayChargeStartTime;
baseChargeModeInfo.DayChargeMinuts = result.DayChargeMinuts;
baseChargeModeInfo.DayChargeFee = result.DayChargeFee;
baseChargeModeInfo.NightChargeEndTime = result.NightChargeEndTime;
baseChargeModeInfo.NightChargeStartTime = result.NightChargeStartTime;
baseChargeModeInfo.NightChargeMinuts = result.NightChargeMinuts;
baseChargeModeInfo.NightChargeFee = result.NightChargeFee;
}
AddAuditLog("查询成功", "ino", "");
return ResponseHelper.Ok("获取成功", baseChargeModeInfo);
}
/// <summary>
/// 动态条件查询
/// </summary>
/// <param name="searchInputDto">动态入参</param>
/// <returns>张文铭 3/13</returns>
[HttpPost]
public ActionResult<ResponseData<JObject>> GetList(SearchInputDto searchInputDto)
{
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseChargeMode_Management_info"))
{
return ResponseHelper.BadRequest<JObject>("没有权限,无法操作,请添加权限", null);
}
var permit = GetPermitDict();
JObject result = new JObject();
var (list, Count, Total) = SearchInputSQLDict.DynamicGetAll<BaseChargeModeInfo>(searchInputDto, "Base_ChargeMode", "BaseChargeModeInfoId");
result["List"] = list;
result["Count"] = Count;
result["Total"] = Total;
System.Diagnostics.Debug.WriteLine(result);
AddAuditLog("查询成功", "ino", "");
return ResponseHelper.Ok("查询成功", result, permit);
}
#endregion
#region 新增
/// <summary>
/// 添加一个收费模式
/// </summary>
/// <param name="BaseChargeModeInfo"></param>
/// <returns>张文铭 3/13</returns>
[HttpPost]
public async Task<ResponseData<BaseChargeModeInfo>> Add(BaseChargeModeInfo BaseChargeModeInfo)
{
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseDivideMode_Management_add"))
{
return ResponseHelper.BadRequest<BaseChargeModeInfo>("没有权限,无法操作,请添加权限", null);
}
var permit = GetPermitDict();
if (_repository.GetAll().AsNoTracking()
.Count(d => d.Del == 0 && d.ChargeModeCode == BaseChargeModeInfo.ChargeModeCode) > 0)
{
return ResponseHelper.BadRequest<BaseChargeModeInfo>("收费模式编号重复,请重新输入收费模式编号", null);
}
BaseChargeModeInfo model = new BaseChargeModeInfo();
model.BaseChargeModeInfoGuid = Guid.NewGuid();
model.Del = 0;
model.State = 0;
model.UpdateTime = DateTime.Now;
model.InputTime = DateTime.Now;
model.DayChargeMinuts = BaseChargeModeInfo.DayChargeMinuts;
model.DayChargeFee = BaseChargeModeInfo.DayChargeFee;
model.NightChargeEndTime = BaseChargeModeInfo.NightChargeEndTime;
model.NightChargeStartTime = BaseChargeModeInfo.NightChargeStartTime;
model.NightChargeMinuts = BaseChargeModeInfo.NightChargeMinuts;
model.NightChargeFee = BaseChargeModeInfo.NightChargeFee;
model.ChargeTypePhoto = BaseChargeModeInfo.ChargeTypePhoto;
model.ChargeModeCode = BaseChargeModeInfo.ChargeModeCode;
model.ChargeModeName = BaseChargeModeInfo.ChargeModeName;
model.FreeTime = BaseChargeModeInfo.FreeTime;
model.DayChargeEndTime = BaseChargeModeInfo.DayChargeEndTime;
model.DayChargeStartTime = BaseChargeModeInfo.DayChargeStartTime;
model.BaseChargeTypeId = BaseChargeModeInfo.BaseChargeTypeId;
var result = await _repository.InsertAsync(model);
if (result.BaseChargeModeInfoId != 0)
{
AddAuditLog("添加成功", "ino", model.BaseChargeModeInfoId.ToString());
return ResponseHelper.Ok("添加成功", result);
}
AddAuditLog("添加失败", "waring", "");
return ResponseHelper.BadRequest<BaseChargeModeInfo>("添加失败", null);
}
#endregion
#region 删除
/// <summary>
/// 删除一个收费方式
/// </summary>
/// <param name="Id"></param>
/// <returns>张文铭 3/13</returns>
[Route("/[controller]/{Id}")]
[HttpDelete]
public async Task<ResponseData<int>> Remove(int Id)
{
//权限校验
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseDivideMode_Management_del"))
{
return ResponseHelper.BadRequest("没有权限,无法操作,请添加权限", 0);
}
//数据校验
if (Id == 0)
{
return ResponseHelper.BadRequest("数据错误,无法操作,请检查页面", 0);
}
var curChageMode = _repository.GetAll().AsNoTracking().FirstOrDefault(d => d.BaseChargeModeInfoId == Id);
if (curChageMode == null)//不存在该分成模式的数据
{
return ResponseHelper.BadRequest("数据错误,无法操作,请检查页面", 0);
}
curChageMode.Del = 1;
var result = _repository.Update(curChageMode);
if (result.Del == 1 && result.BaseChargeModeInfoId == Id)
{
AddAuditLog("删除成功", "ino", "");
return ResponseHelper.Ok("删除成功", 1);
}
AddAuditLog("删除失败", "waring", "");
return ResponseHelper.Ok("删除失败", 0);
}
#endregion
#region 更新
/// <summary>
/// 修改下拉框回填
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<ResponseData<List<BaseChargeType>>> getTypeIdList()
{
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseDivideMode_Management_info"))
{
return ResponseHelper.BadRequest<List<BaseChargeType>>("没有权限,无法操作,请添加权限", null);
}
var permit = GetPermitDict();
var result = await _repBaseChargeType.GetAll().Where(b => b.Del == 0).ToListAsync();
AddAuditLog("查询成功", "ino", "");
return ResponseHelper.Ok("获取成功", result, permit);
}
/// <summary>
/// 更新收费模式
/// </summary>
/// <param name="BaseChargeModeInfo"></param>
/// <returns></returns>
[HttpPut]
public async Task<ResponseData<BaseChargeModeInfo>> Update(BaseChargeModeInfo BaseChargeModeInfo)
{
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseDivideMode_Management_edit"))
{
return ResponseHelper.BadRequest<BaseChargeModeInfo>("没有权限,无法操作,请添加权限", null);
}
var permit = GetPermitDict();
//数据重复验证
if (_repository.GetAll().AsNoTracking()
.Count(d => d.Del == 0 && d.ChargeModeCode == BaseChargeModeInfo.ChargeModeCode && d.BaseChargeModeInfoId != BaseChargeModeInfo.BaseChargeModeInfoId) > 0)
{//收费模式编号判断
return ResponseHelper.BadRequest<BaseChargeModeInfo>("已存在相同收费编号,请重新输入收费模式编号", null);
}
var nowtime = DateTime.Now;
BaseChargeModeInfo model = await _repository.GetAll().FirstOrDefaultAsync(m => m.BaseChargeModeInfoId == BaseChargeModeInfo.BaseChargeModeInfoId);
if (model != null)
{
model.BaseChargeTypeId = BaseChargeModeInfo.BaseChargeTypeId;
model.DayChargeMinuts = BaseChargeModeInfo.DayChargeMinuts;
model.DayChargeFee = BaseChargeModeInfo.DayChargeFee;
model.NightChargeEndTime = BaseChargeModeInfo.NightChargeEndTime;
model.NightChargeStartTime = BaseChargeModeInfo.NightChargeStartTime;
model.NightChargeMinuts = BaseChargeModeInfo.NightChargeMinuts;
model.NightChargeFee = BaseChargeModeInfo.NightChargeFee;
model.ChargeTypePhoto = BaseChargeModeInfo.ChargeTypePhoto;
model.Del = BaseChargeModeInfo.Del;
model.InputTime = BaseChargeModeInfo.InputTime;
model.UpdateTime = nowtime;
model.State = BaseChargeModeInfo.State;
model.ChargeModeCode = BaseChargeModeInfo.ChargeModeCode;
model.ChargeModeName = BaseChargeModeInfo.ChargeModeName;
model.FreeTime = BaseChargeModeInfo.FreeTime;
model.DayChargeEndTime = BaseChargeModeInfo.DayChargeEndTime;
model.DayChargeStartTime = BaseChargeModeInfo.DayChargeStartTime;
var result = await _repository.UpdateAsync(model);
if (result.UpdateTime == nowtime)
{
AddAuditLog("更新成功", "ino", model.BaseChargeModeInfoId.ToString());
return ResponseHelper.Ok("更新成功", result);
}
}
AddAuditLog("更新失败", "waring", model.BaseChargeModeInfoId.ToString());
return ResponseHelper.BadRequest<BaseChargeModeInfo>("更新失败", null);
}
public class OS {
public bool State { get; set; }
public int Id { get; set; }
}
/// <summary>
/// 启用或停用
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResponseData<int>> getOpenOrStop(OS data)
{
//权限校验
var guid = GetUserBindGuid();
if (!_adminUserPermitServer.Trial(guid, "BaseDivideMode_Management_del"))
{
return ResponseHelper.BadRequest("没有权限,无法操作,请添加权限", 0);
}
var curChageMode = _repository.GetAll().AsNoTracking().FirstOrDefault(d => d.BaseChargeModeInfoId == data.Id);
//判断
if (data.State)
{
curChageMode.State = 0;
var result = _repository.Update(curChageMode);
if (result.State == 0 && result.BaseChargeModeInfoId == data.Id)
{
AddAuditLog("启用成功", "ino", "");
return ResponseHelper.Ok("启用成功", 1);
}
else
{
AddAuditLog("启用失败", "waring", "");
}
}
else {
curChageMode.State = 1;
var result = _repository.Update(curChageMode);
if (result.State == 1 && result.BaseChargeModeInfoId == data.Id)
{
AddAuditLog("停用成功", "ino", "");
return ResponseHelper.Ok("停用成功", 1);
}
else
{
AddAuditLog("停用失败", "waring", "");
}
}
return ResponseHelper.Ok("执行失败", 0);
}
/// <summary>
/// 图片接收
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> ChargeEdit(IFormFile file) {
{
if (file == null || file.Length == 0)
{
return BadRequest("未知错误");
}
// 获取上传文件的文件名和扩展名
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
var fileExtension = Path.GetExtension(file.FileName);
// 为上传文件生成一个唯一的文件名
var FileName = $"{fileName}_{System.Guid.NewGuid()}{fileExtension}";
// 将上传文件保存到本地磁盘
var builder = WebApplication.CreateBuilder();
//获取文件存储位置
string url = builder.Configuration["Path:Images"];
var filePath = Path.Combine(url, FileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
//int address = Request.HttpContext.Connection.LocalPort;
//return Ok("http://localhost:"+ address + "/upload/" + FileName);
return Ok(FileName);
}
}
#endregion
#region 导入
/// <summary>
/// 用户导入
/// </summary>
/// <param name="file">文件</param>
[HttpPost]
public async Task<ActionResult<ResponseData<int>>> UpLoadExcel(IFormFile file)
{
var guid = GetUserBindGuid();
var stream = file.OpenReadStream();
var adminUserDataTable = NPOIHelper.Sheet2DataTable(stream, "Sheet1", file.FileName);
if (adminUserDataTable == null)
{
return ResponseHelper.BadRequest("导入失败", 0);
}
AddAuditLog("导入成功", "ino", "");
return ResponseHelper.Ok("导入成功", 1);
}
#endregion
#region 添加审核日志-用户每一个操作都记录 还未修改对应的页面
/// <summary>
/// 添加审核日志-用户每一个操作都记录
/// </summary>
/// <param name="Value">用户做的操作</param>
/// <param name="LogGrade">日志等级 成功:ino 失败:waring 报错:error </param>
/// /// <param name="SourceGUID">日志来源的Guid </param>
private void AddAuditLog(string Value, string LogGrade, string SourceGUID)
{
var (ip, ua, Machine) = HttpContextHelper.qwerd(HttpContext);
if (SourceGUID == "")
{
SourceGUID = new Guid().ToString();
}
}
#endregion
#region 私有方法 权限还未修改对应的页面
/// <summary>
/// 登录用户获取用户和底表绑定的guid的方法,如果没有返回空
/// </summary>
/// <returns>没有登录返回空,已经登录返回与底表绑定的guid</returns>
private string GetUserBindGuid() => User.Claims.FirstOrDefault(n => n.Type == "OtherGuid")?.Value;
/// <summary>
/// 获取日志的权限字典(通用字典)
/// </summary>
/// <returns>通用的权限字典</returns>
private Dictionary<string, bool> GetPermitDict()
{
var guid = GetUserBindGuid();
//var guid = "3DE0D5FC-023F-47F7-9C0A-26FFE1E0E172";
var result = _adminUserPermitServer.GetPermit(guid, "BaseDivideMode_Management");
return result;
}
#endregion
}
}