using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Security.Claims; using System.Threading.Tasks; using MadRunFabric.Common; using MadRunFabric.Model.WorkOrderApi; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using MongoDB.Driver; using WorkOrderApi.Areas.Hy_Order.Input; using WorkOrderApi.IRepositories; namespace WorkOrderApi.Areas.Hy_Order.Controllers { /// /// 客户授权管理 /// [Area("hy")] [Authorize] [ApiVersion("6.0")] [Route("api/[controller]")] [Produces("application/json")] public class CusAuthManageController : BaseController { private readonly ILogger _logger; private readonly ICus_AuthManageRepository _cus_authmanageRepository; private readonly IConfiguration _configuration; private readonly ICus_AuthOrderRepository _cus_authorderRepository; private readonly IBus_Msg_ListRepository _bus_msg_listRepository; public CusAuthManageController( ILogger logger, ICus_AuthManageRepository cus_authmanageRepository, IConfiguration configuration, IBus_Msg_ListRepository bus_msg_listRepository, ICus_AuthOrderRepository cus_authorderRepository ) { _logger = logger; _cus_authmanageRepository = cus_authmanageRepository; _configuration = configuration; _bus_msg_listRepository = bus_msg_listRepository; _cus_authorderRepository = cus_authorderRepository; } /// /// 获取基础数据列表 /// /// /// [Authorize] [HttpGet("getlistbypage")] public async Task GetListsByPage(string pro_name,string auth_type,string oem_name,string stime,string etime,string progress,string smanager,string pexecutor,string pmanager,string fmanager, string value, string code,int isend=-1, int pageindex = 1, int pagesize = 10) { try { //排序字段 var sort = Builders.Sort.Descending("createtime"); //根据条件查询集合 var flist = new List>(); flist.Add(Builders.Filter.Eq("isdelete", 0)); if (!string.IsNullOrWhiteSpace(pro_name)) flist.Add(Builders.Filter.Where(s => s.pro_name.Equals (pro_name))); if (!string.IsNullOrWhiteSpace(auth_type)) flist.Add(Builders.Filter.Where(s => s.auth_type.Equals(auth_type))); if (!string.IsNullOrWhiteSpace(oem_name)) flist.Add(Builders.Filter.Where(s => s.oem_name.Equals(oem_name))); if (!string.IsNullOrEmpty(stime)) { DateTime dt = DateTime.Parse(stime); if (DateTime.TryParse(dt.ToString("yyyy-MM-dd") + " 00:00:00", out dt)) flist.Add(Builders.Filter.Gt("authendtime", dt)); } if (!string.IsNullOrEmpty(stime)) { DateTime dt = DateTime.Parse(stime); if (DateTime.TryParse(dt.ToString("yyyy-MM-dd") + " 23:59:59", out dt)) flist.Add(Builders.Filter.Lt("authendtime", dt)); } if (!string.IsNullOrWhiteSpace(progress )) flist.Add(Builders.Filter.Where(s => s.pro_progress .Equals(progress))); if (!string.IsNullOrWhiteSpace(smanager)) flist.Add(Builders.Filter.Where(s => s.sale_manager .Equals(smanager))); if (!string.IsNullOrWhiteSpace(pexecutor)) flist.Add(Builders.Filter.Where(s => s.pro_executor .Equals(pexecutor))); if (!string.IsNullOrWhiteSpace(pmanager)) flist.Add(Builders.Filter.Where(s => s.product_manager .Equals(pmanager))); if (isend >-1) flist.Add(Builders.Filter.Eq("isend", isend )); var filter = Builders.Filter.And(flist); var list = await _cus_authmanageRepository.GetByPage(filter, pageindex, pagesize, sort); var count = await _cus_authmanageRepository.CountAsync(filter); var obj = new { state = "success", message = "根据条件获取分页数据成功", rows = list, total = count, }; return Content(obj.ToJson()); //return Success("根据条件获取分页数据成功", list); } catch (Exception ex) { _logger.LogError(ex, "获取基础数据分页数据异常"); return Error("获取基础数据分页数据失败"); } } /// /// 添加授权信息 /// [HttpPost("add")] public async Task AddAsync(CusAuthManageInput input) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; try { var model = new Cus_AuthManage(); #region model 添加客户对象 //model.id = cusid; model.pro_name = input.pro_name; model.auth_type = input.auth_type; model.oem_name = input.oem_name; model.authendtime = input.authendtime; model.auth_code = input.auth_code; model.auth_num = input.auth_num; model.pro_progress = input.pro_progress; model.sale_manager = input.sale_manager; model.pro_executor = input.pro_executor; model.product_manager = input.product_manager; model.finance_manager = input.finance_manager; model.general_manager = input.general_manager; model.isend = input.isend; model.content = input.content; model.createtime = DateTime.Now; model.createuser = usercode; model.createusername = username; #endregion string customerid = await _cus_authmanageRepository.AddRetID(model); if (!string.IsNullOrEmpty(customerid)) { return Success("保存成功"); } else return Error("保存失败"); } catch (Exception ex) { return Error(ex.Message); } } /// /// 修改授权信息 /// [HttpPost("update")] public async Task UpdateAsync(CusAuthManageInput input) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; var model = (await _cus_authmanageRepository.Get(p => p.id == input.id)).FirstOrDefault(); if (model != null) { #region model 客户对象 model.pro_name = input.pro_name; model.auth_type = input.auth_type; model.oem_name = input.oem_name; model.authendtime = input.authendtime; model.auth_code = input.auth_code; model.auth_num = input.auth_num; model.pro_progress = input.pro_progress; model.sale_manager = input.sale_manager; model.pro_executor = input.pro_executor; model.product_manager = input.product_manager; model.finance_manager = input.finance_manager; model.general_manager = input.general_manager; model.isend = input.isend; model.content = input.content; model.createtime = DateTime.Now; model.createuser = usercode; model.createusername = username; #endregion bool b = await _cus_authmanageRepository.UpdateOne(model); if (b) { return Success("保存成功"); } else return Error("保存失败"); } return Error("参数错误"); } /// /// 删除授权信息 /// /// /// [HttpPost("delete")] public async Task DeleteAsync(string[] ids) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; //使用逻辑删除 var res = 0; if (ids != null && ids.Length > 0) { foreach (var id in ids) { var model = await _cus_authmanageRepository.GetSingle(id); model.isdelete = 1; model.deleteuser = usercode; model.deletetime = DateTime.Now; if (await _cus_authmanageRepository.UpdateOne(model)) { res += 1; } } if (res == ids.Length) return Success("删除成功"); else if (res > 0 && res < ids.Length) return Error("部分删除失败"); else return Error("删除失败"); } else return Error("请选择要删除的记录"); } /// /// 获取授权到期提醒 /// /// /// [Authorize] [HttpGet("gettxlist")] public async Task GetListAsync(int daykind = 0)//到期前一月或前几天提醒 { #region 条件信息 var listfilter = new List>(); DateTime dtstart = DateTime.Now; var sort = Builders.Sort.Descending("authendtime"); var list = await _cus_authmanageRepository.Get(null, null, sort); switch (daykind) { case 0://到期前15天到期时间减去现在时间大于0小于等于30 DateTime dtend = dtstart.AddDays(15); DateTime dt = DateTime.Now.ToLocalTime(); if (DateTime.TryParse(dtstart.ToString("yyyy-MM-dd") + " 00:00:00", out dt)) listfilter.Add(Builders.Filter.Gt("authendtime", dt)); if (DateTime.TryParse(dtend.ToString("yyyy-MM-dd") + " 23:59:59", out dt)) listfilter.Add(Builders.Filter.Lt("authendtime", dt)); var filter = Builders.Filter.And(listfilter); list = await _cus_authmanageRepository.Get(filter, null, sort); break; case 1://到期当天 DateTime dtend1 = dtstart; DateTime dt1 = DateTime.Now.ToLocalTime(); if (DateTime.TryParse(dtstart.ToString("yyyy-MM-dd") + " 00:00:00", out dt1)) listfilter.Add(Builders.Filter.Gt("authendtime", dt1)); if (DateTime.TryParse(dtend1.ToString("yyyy-MM-dd") + " 23:59:59", out dt1)) listfilter.Add(Builders.Filter.Lt("authendtime", dt1)); var filter1 = Builders.Filter.And(listfilter); list = await _cus_authmanageRepository.Get(filter1, null, sort); break; default: break; } #endregion var obj = new { data = list }; return Success("成功", obj); } //导入授权信息 /// /// 上传文件并导入数据库 /// /// [HttpPost("importexcel")] public async Task ImportExcel(int headrow = 0) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; //if (string.IsNullOrEmpty(taskid)) // return Error("任务id不能为空"); //string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; Microsoft.AspNetCore.Http.IFormFile _upfile = Request.Form.Files[0]; if (!_upfile.ContentType.Equals("application/vnd.ms-excel") && !_upfile.ContentType.Equals("application/x-xls") && !_upfile.ContentType.Equals("application/x-xlsx") && !_upfile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !_upfile.ContentType.Equals("application/octet-stream")) return Error($"请正确上传Excel文件:file.ContentType={_upfile.ContentType}"); NPOIHelper npoi = new NPOIHelper(); var dtExcel = npoi.ExcelToTable1(_upfile, headrow); int num = dtExcel.Rows.Count; var cols = dtExcel.Columns; int colnum = cols.Count; string dbkeys = _configuration["upload:sqdbkeys"].ToString(); string[] dbcols = dbkeys.Split(","); string errmsg = string.Empty; if (num > 0) { int index = 1; foreach (System.Data.DataRow dr in dtExcel.Rows) { var model = new Cus_AuthManage(); model.createuser = usercode; model.createusername = username; //model.cusname = dr.cusname; //model.phone = dr.phone; //model.cusaddr = dr.cusaddr; model.createtime = DateTime.Now.ToLocalTime(); var dbcolslist = dbcols.ToList(); Type t = model.GetType(); PropertyInfo[] PropertyList = t.GetProperties(); foreach (PropertyInfo item in PropertyList) { if (dbcolslist.Contains(item.Name)) { object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType); item.SetValue(model, v, null); } } bool b = await _cus_authmanageRepository.Add(model); if (!b) { if (!string.IsNullOrEmpty(errmsg)) { errmsg = errmsg + "\r\n第" + index + "行导入失败!"; } else { errmsg = "第" + index + "行导入失败!"; } } index++; } } else { return Error("文件中无数据"); } if (!string.IsNullOrEmpty(errmsg)) { //删除已导入的部分 return Error(errmsg); } return Success("导入成功"); } /// /// 获取详情 /// [HttpGet("getsingle")] public async Task GetSingleAsync(string id) { var cls = await _cus_authmanageRepository.Get(p => p.id == id && p.isdelete == 0); var clmodel = cls.FirstOrDefault(); if (clmodel != null) { return Success("获取成功", clmodel); } else return Error("获取失败"); } //申请续期 /// /// 添加授权续期申请 /// [HttpPost("addsq")] public async Task AddSQAsync(string proid, string proname,string content,string authtype,string authendtime,int infotype=0) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; var model = new Cus_AuthOrder(); #region model 添加工单对象 model.pro_id = proid; model.pro_name = proname; model.content = content; model.auth_type = authtype; model.authendtime = DateTime.Parse (authendtime); model.infotype = infotype; model.createuser = usercode; model.createtime = DateTime.Now; model.isdelete = 0; #endregion bool bl = await _cus_authorderRepository.Add(model); if (bl) { string mes = ""; if (infotype == 1) { mes = usercode + "(" + username + ") 发起授权续期申请"; } else if (infotype == 2) { mes = usercode + "(" + username + ") 创建授权续期任务"; } else if (infotype == 3) { mes = usercode + "(" + username + ") 创建项目开启任务"; } else if (infotype == 4) { mes = usercode + "(" + username + ") 创建项目暂停任务"; } AddItems(proid, mes, usercode, username); return Success("保存成功"); } else return Error("保存失败"); } /// /// 获取基础数据列表 /// /// /// [Authorize] [HttpGet("getsqlistbypage")] public async Task GetSQListsByPage(string pro_name, string auth_type, string stime, string etime, string createuser,int infotype=-1, int state = -1, int pageindex = 1, int pagesize = 10) { try { //排序字段 var sort = Builders.Sort.Descending("createtime"); //根据条件查询集合 var flist = new List>(); flist.Add(Builders.Filter.Eq("isdelete", 0)); if (!string.IsNullOrWhiteSpace(pro_name)) flist.Add(Builders.Filter.Where(s => s.pro_name.Equals(pro_name))); if (!string.IsNullOrWhiteSpace(auth_type)) flist.Add(Builders.Filter.Where(s => s.auth_type.Equals(auth_type))); if (!string.IsNullOrWhiteSpace(createuser)) flist.Add(Builders.Filter.Where(s => s.createuser.Equals(createuser))); if (infotype > -1) { flist.Add(Builders.Filter.Eq("infotype", infotype)); } if (state > -1) { flist.Add(Builders.Filter.Eq("state", state)); } if (!string.IsNullOrEmpty(stime)) { DateTime dt = DateTime.Parse(stime); if (DateTime.TryParse(dt.ToString("yyyy-MM-dd") + " 00:00:00", out dt)) flist.Add(Builders.Filter.Gt("createtime", dt)); } if (!string.IsNullOrEmpty(stime)) { DateTime dt = DateTime.Parse(stime); if (DateTime.TryParse(dt.ToString("yyyy-MM-dd") + " 23:59:59", out dt)) flist.Add(Builders.Filter.Lt("createtime", dt)); } var filter = Builders.Filter.And(flist); var list = await _cus_authorderRepository.GetByPage(filter, pageindex, pagesize, sort); var count = await _cus_authorderRepository.CountAsync(filter); var obj = new { state = "success", message = "根据条件获取分页数据成功", rows = list, total = count, }; return Content(obj.ToJson()); //return Success("根据条件获取分页数据成功", list); } catch (Exception ex) { _logger.LogError(ex, "获取基础数据分页数据异常"); return Error("获取基础数据分页数据失败"); } } //添加操作记录 private async void AddItems(string pro_id, string detail, string usercode, string username) { var model = new Bus_Msg_List(); model.ordercode = pro_id; model.createuser = usercode; model.createusername = username; model.createtime = DateTime.Now; model.detail = detail; await _bus_msg_listRepository.Add(model); } /// /// 获取授权申请动态 /// [HttpGet("getdt")] public async Task GetDTAsync(string proid) { var cls = await _bus_msg_listRepository.Get(p => p.ordercode == proid && p.isdelete == 0); if (cls != null) { return Success("获取成功", cls); } else return Error("获取失败"); } /// /// 修改授权信息 /// [HttpPost("updatesq")] public async Task UpdateSQAsync(string id,string proid, string proname, string content, string authtype, string authendtime) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; var model = (await _cus_authorderRepository.Get(p => p.id ==id)).FirstOrDefault(); if (model != null) { #region model 添加对象 model.pro_id = proid; model.pro_name = proname; model.content = content; model.auth_type = authtype; model.authendtime = DateTime.Parse(authendtime); model.createuser = usercode; model.createtime = DateTime.Now; model.isdelete = 0; #endregion bool b = await _cus_authorderRepository.UpdateOne(model); if (b) { return Success("保存成功"); } else return Error("保存失败"); } return Error("参数错误"); } /// /// 删除授权信息 /// /// /// [HttpPost("deletesq")] public async Task DeleteSQAsync(string[] ids) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; //使用逻辑删除 var res = 0; if (ids != null && ids.Length > 0) { foreach (var id in ids) { var model = await _cus_authorderRepository.GetSingle(id); model.isdelete = 1; model.deleteuser = usercode; model.deletetime = DateTime.Now; if (await _cus_authorderRepository.UpdateOne(model)) { res += 1; } } if (res == ids.Length) return Success("删除成功"); else if (res > 0 && res < ids.Length) return Error("部分删除失败"); else return Error("删除失败"); } else return Error("请选择要删除的记录"); } //操作,通过、撤回、确认续期 /// /// 操作授权信息 /// /// /// [HttpPost("deal")] public async Task DealAsync(string id, int state = 0) { string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; var model = await _cus_authorderRepository.GetSingle(id); model.state = state; model.deleteuser = usercode; model.deletetime = DateTime.Now; if (await _cus_authorderRepository.UpdateOne(model)) { string mes = ""; if (state == 5) { mes = usercode + "(" + username + ") 撤回授权续期申请"; } else if (state == 6) { mes = usercode + "(" + username + ") 审批通过授权续期申请"; } else if (state == 7) { mes = usercode + "(" + username + ") 确认已续期"; } else if (state == 8) { mes = usercode + "(" + username + ") 确认已暂停"; } else if (state == 7) { mes = usercode + "(" + username + ") 确认已开启"; } AddItems(id, mes, usercode, username); return Success("操作成功"); } else return Error("操作失败"); } } }