using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using MadRunFabric.Common; using MadRunFabric.Model.PLCAutomationApi; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MongoDB.Driver; using PLCAutomationApi.IRepositories; namespace PLCAutomationApi.Controllers { /// /// 水电气数据录入 /// [ApiVersion("6.0")] [Produces("application/json")] [Route("api/[controller]")] public class InputDataController : BaseController { private readonly ILogger _logger; private readonly IPLC_InputDataRepository _plc_inputdataRepository; private readonly IPLC_MonthDataRepository _plc_monthdataRepository; public InputDataController(ILogger logger, IPLC_InputDataRepository plc_inputdataRepository, IPLC_MonthDataRepository plc_monthdataRepository) { _logger = logger; _plc_inputdataRepository = plc_inputdataRepository; _plc_monthdataRepository = plc_monthdataRepository; } [HttpGet("index")] public IActionResult Index() { return View(); } //[Authorize] [HttpPost("add")] public async Task AddData(string[] dataname,string[] datavalue,string inputtime,string projectname) { try { string ytime = DateTime.Now.AddDays (-1).ToString("yyyy-MM-dd"); PLC_InputData comodel = new PLC_InputData(); if (!string.IsNullOrWhiteSpace(inputtime)) { DateTime dt2 = new DateTime(); if (DateTime.TryParse(inputtime.Trim(), out dt2)) ytime = dt2.AddDays(-1).ToString("yyyy-MM-dd"); } else { inputtime = DateTime.Now.ToString("yyyy-MM-dd"); } int t = dataname.Length; int res = 0; for (int i = 0; i < dataname.Length; i++) { #region 判断是否有当天记录,若有则删除 //Dictionary dic = new Dictionary(); //dic.Add("deleteflag", "1"); var list = new List>(); var filterBuilder = Builders.Filter; list.Add(filterBuilder.Eq("dataname", dataname[i])); list.Add(filterBuilder.Eq("inputtime", inputtime)); list.Add(filterBuilder.Eq("projectname", projectname)); var filter = Builders.Filter.And(list); var count = await _plc_inputdataRepository.CountAsync(filter); if (count > 0) { var dModel = await _plc_inputdataRepository.GetSingle(s => s.dataname .Equals(dataname[i])&s.inputtime == inputtime&s.projectname ==projectname & s.deleteflag == 0, null); if (dModel != null) { dModel.deleteflag = 1; var tt = await _plc_inputdataRepository.Update(dModel); } } #endregion #region 更新昨天的止数 var fModel = await _plc_inputdataRepository.GetSingle(s => s.dataname.Equals(dataname[i]) & s.inputtime == ytime&s.projectname ==projectname & s.deleteflag == 0, null); if (fModel != null) { fModel.endvalue = datavalue[i]; var n = await _plc_inputdataRepository.Update(fModel); } #endregion #region 保存月数据 string year = DateTime.Now.Year.ToString(); int mon = Convert.ToDateTime(inputtime.Trim()).Month;// DateTime.Parse(inputtime.Trim()); var aModel = await _plc_monthdataRepository.GetSingle(s => s.datayear==year & s.datamonth == mon&s.dataname == dataname[i]&s.projectname ==projectname , null); if (aModel != null) { //判断更新止数 if (aModel.endday <= Convert.ToDateTime(inputtime.Trim()).Day) { aModel.endday = Convert.ToDateTime(inputtime.Trim()).Day; aModel.endvalue = datavalue[i]; aModel.endtime = inputtime.Trim(); var n = await _plc_monthdataRepository.Update(aModel); #region 判断如果为每月最后一天则将当前数做为下月起数 DateTime dtn = Convert.ToDateTime(inputtime.Trim()); DateTime startMonth = dtn.AddDays(1 - dtn.Day); //本月月初 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); if (endMonth.Day == dtn.Day)//最后一天 { string byear = startMonth.AddMonths(1).Year.ToString(); int bmon = startMonth.AddMonths(1).Month; var bModel = await _plc_monthdataRepository.GetSingle(s => s.datayear == byear & s.datamonth == bmon & s.dataname == dataname[i] & s.projectname == projectname, null); if (bModel != null) { //判断更新止数 if (bModel.endday <= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.endday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.endvalue = datavalue[i]; bModel.endtime = startMonth.AddMonths(1).ToString ("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } else if (bModel.startday >= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.startday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.startvalue = datavalue[i]; bModel.starttime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } } else { #region var amodel = new PLC_MonthData(); amodel.dataname = dataname[i]; amodel.startvalue = datavalue[i]; amodel.endvalue = datavalue[i]; amodel.datamonth = startMonth.AddMonths(1).Month; amodel.datayear = startMonth.AddMonths(1).Year.ToString(); amodel.startday = startMonth.AddMonths(1).Day; amodel.endday = startMonth.AddMonths(1).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); if (dataname[i].Contains("水")) { amodel.datakind = 0; } else if (dataname[i].Contains("天然气") || dataname[i].Contains("燃气")) { amodel.datakind = 2; } else if (dataname[i].Contains("氧")) { amodel.datakind = 3; } else { amodel.datakind = 1; } amodel.projectname = projectname; await _plc_monthdataRepository.Add(amodel); #endregion } } #endregion } else if (aModel.startday >= Convert.ToDateTime(inputtime.Trim()).Day) { aModel.startday = Convert.ToDateTime(inputtime.Trim()).Day; aModel.startvalue = datavalue[i]; aModel.starttime = inputtime.Trim(); var n = await _plc_monthdataRepository.Update(aModel); #region 判断如果为每月最后一天则将当前数做为下月起数 DateTime dtn = Convert.ToDateTime(inputtime.Trim()); DateTime startMonth = dtn.AddDays(1 - dtn.Day); //本月月初 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); if (endMonth.Day == dtn.Day)//最后一天 { string byear = startMonth.AddMonths(1).Year.ToString(); int bmon = startMonth.AddMonths(1).Month; var bModel = await _plc_monthdataRepository.GetSingle(s => s.datayear == byear & s.datamonth == bmon & s.dataname == dataname[i] & s.projectname == projectname, null); if (bModel != null) { //判断更新止数 if (bModel.endday <= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.endday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.endvalue = datavalue[i]; bModel.endtime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } else if (bModel.startday >= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.startday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.startvalue = datavalue[i]; bModel.starttime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } } else { #region var amodel = new PLC_MonthData(); amodel.dataname = dataname[i]; amodel.startvalue = datavalue[i]; amodel.endvalue = datavalue[i]; amodel.datamonth = startMonth.AddMonths(1).Month; amodel.datayear = startMonth.AddMonths(1).Year.ToString(); amodel.startday = startMonth.AddMonths(1).Day; amodel.endday = startMonth.AddMonths(1).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); if (dataname[i].Contains("水")) { amodel.datakind = 0; } else if (dataname[i].Contains("天然气") || dataname[i].Contains("燃气")) { amodel.datakind = 2; } else if (dataname[i].Contains("氧")) { amodel.datakind = 3; } else { amodel.datakind = 1; } amodel.projectname = projectname; await _plc_monthdataRepository.Add(amodel); #endregion } } #endregion } } else { var amodel = new PLC_MonthData(); amodel.dataname = dataname[i]; amodel.startvalue = datavalue[i]; amodel.endvalue = datavalue[i]; amodel.datamonth = mon; amodel.datayear = year; amodel.startday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.endday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); if (dataname[i].Contains("水")) { amodel.datakind = 0; } else if (dataname[i].Contains("天然气") || dataname[i].Contains("燃气")) { amodel.datakind = 2; } else if (dataname[i].Contains("氧")) { amodel.datakind = 3; } else { amodel.datakind = 1; } amodel.projectname = projectname; await _plc_monthdataRepository.Add(amodel); } #endregion var cmodel = new PLC_InputData(); cmodel.dataname = dataname[i]; cmodel.startvalue = datavalue[i]; cmodel.inputtime = inputtime; cmodel.createusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; //"8000"; cmodel.deleteflag = 0; cmodel.createtime = DateTime.Now.ToLocalTime(); if (dataname[i].Contains("水")) { cmodel.datakind = 0; } else if (dataname[i].Contains("天然气") || dataname[i].Contains("燃气")) { cmodel.datakind = 2; } else if (dataname[i].Contains("氧")) { cmodel.datakind = 3; } else { cmodel.datakind = 1; } cmodel.projectname = projectname; if (await _plc_inputdataRepository.Add(cmodel)) res++; } if (res == t) { return Success("添加数据成功"); } else { return Error("添加数据失败"); } } catch (Exception ex) { _logger.LogError(ex, "添加水电气数据异常"); return Error("添加水电气数据失败"); } } //[Authorize] [HttpPost("update")] public async Task UpdateData(string id, string datavalue)//(string dataname, string datavalue,string inputdate) { try { PLC_InputData comodel = new PLC_InputData(); var list = new List>(); var filterBuilder = Builders.Filter; //list.Add(filterBuilder.Eq("dataname", dataname)); //list.Add(filterBuilder.Eq("inputtime", DateTime.Now.ToString("yyyy-MM-dd"))); list.Add(filterBuilder.Eq("id", id)); var filter = Builders.Filter.And(list); var count = await _plc_inputdataRepository.CountAsync(filter); if (count > 0) { var dModel = await _plc_inputdataRepository.GetSingle(s => s.id .Equals(id) & s.deleteflag == 0, null); dModel.startvalue = datavalue; string inputtime = dModel.inputtime; string dataname = dModel.dataname; var tt = await _plc_inputdataRepository.Update(dModel); if (tt) { #region 保存月数据 string year = DateTime.Now.Year.ToString(); int mon = Convert.ToDateTime(inputtime.Trim()).Month;// DateTime.Parse(inputtime.Trim()); var aModel = await _plc_monthdataRepository.GetSingle(s => s.datayear == year & s.datamonth == mon & s.dataname == dataname&s.projectname ==dModel .projectname , null); if (aModel != null) { //判断更新止数 if (aModel.endday <= Convert.ToDateTime(inputtime.Trim()).Day) { aModel.endday = Convert.ToDateTime(inputtime.Trim()).Day; aModel.endvalue = datavalue; aModel.endtime = inputtime.Trim(); var n = await _plc_monthdataRepository.Update(aModel); #region 判断如果为每月最后一天则将当前数做为下月起数 DateTime dtn = Convert.ToDateTime(inputtime.Trim()); DateTime startMonth = dtn.AddDays(1 - dtn.Day); //本月月初 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); if (endMonth.Day == dtn.Day)//最后一天 { string byear = startMonth.AddMonths(1).Year.ToString(); int bmon = startMonth.AddMonths(1).Month; var bModel = await _plc_monthdataRepository.GetSingle(s => s.datayear == byear & s.datamonth == bmon & s.dataname == dataname & s.projectname == dModel.projectname, null); if (bModel != null) { //判断更新止数 if (bModel.endday <= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.endday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.endvalue = datavalue; bModel.endtime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } else if (bModel.startday >= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.startday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.startvalue = datavalue; bModel.starttime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } } else { #region var amodel = new PLC_MonthData(); amodel.dataname = dataname; amodel.startvalue = datavalue; amodel.datamonth = mon; amodel.datayear = year; amodel.startday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.endday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); amodel.projectname = dModel.projectname; await _plc_monthdataRepository.Add(amodel); #endregion } } #endregion } else if (aModel.startday>= Convert.ToDateTime(inputtime.Trim()).Day) { aModel.startday = Convert.ToDateTime(inputtime.Trim()).Day; aModel.startvalue = datavalue; aModel.starttime = inputtime.Trim(); var n = await _plc_monthdataRepository.Update(aModel); #region 判断如果为每月最后一天则将当前数做为下月起数 DateTime dtn = Convert.ToDateTime(inputtime.Trim()); DateTime startMonth = dtn.AddDays(1 - dtn.Day); //本月月初 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); if (endMonth.Day == dtn.Day)//最后一天 { string byear = startMonth.AddMonths(1).Year.ToString(); int bmon = startMonth.AddMonths(1).Month; var bModel = await _plc_monthdataRepository.GetSingle(s => s.datayear == byear & s.datamonth == bmon & s.dataname == dataname & s.projectname == dModel.projectname, null); if (bModel != null) { //判断更新止数 if (bModel.endday <= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.endday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.endvalue = datavalue; bModel.endtime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } else if (bModel.startday >= Convert.ToDateTime(startMonth.AddMonths(1)).Day) { bModel.startday = Convert.ToDateTime(startMonth.AddMonths(1)).Day; bModel.startvalue = datavalue; bModel.starttime = startMonth.AddMonths(1).ToString("yyyy-MM-dd"); var bn = await _plc_monthdataRepository.Update(bModel); } } else { #region var amodel = new PLC_MonthData(); amodel.dataname = dataname; amodel.startvalue = datavalue; amodel.datamonth = mon; amodel.datayear = year; amodel.startday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.endday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); amodel.projectname = dModel.projectname; await _plc_monthdataRepository.Add(amodel); #endregion } } #endregion } } else { var amodel = new PLC_MonthData(); amodel.dataname = dataname; amodel.startvalue = datavalue; amodel.datamonth = mon; amodel.datayear = year; amodel.startday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.endday = Convert.ToDateTime(inputtime.Trim()).Day; amodel.starttime = inputtime.Trim(); amodel.endtime = inputtime.Trim(); amodel.projectname = dModel.projectname; await _plc_monthdataRepository.Add(amodel); } #endregion return Success("修改数据成功"); } } return Error("修改数据失败"); } catch (Exception ex) { _logger.LogError(ex, "修改水电气数据异常"); return Error("修改水电气数据失败"); } } [HttpPost("delete")] public async Task Remove(string[] ids) { //使用逻辑删除 //物理删除的数据无法恢复 var res = 0; if (ids != null && ids.Length > 0) { foreach (var item in ids) { var ml = await _plc_inputdataRepository.GetSingle(item); ml.deleteflag = 1; if (await _plc_inputdataRepository.Update(ml)) res += 1; } if (res == ids.Length) return Success("删除成功"); else if (res > 0 && res < ids.Length) return Error("部分删除失败,请查看后重新操作"); else return Error("删除失败,请查看后重新操作"); } else return Error("请选择要删除的记录"); } //[Authorize] [HttpPost("deleteby")] public async Task DeleteData(string dataname, string inputdate) { try { PLC_InputData comodel = new PLC_InputData(); var list = new List>(); var filterBuilder = Builders.Filter; list.Add(filterBuilder.Eq("dataname", dataname)); list.Add(filterBuilder.Eq("inputtime", DateTime.Now.ToString("yyyy-MM-dd"))); var filter = Builders.Filter.And(list); var count = await _plc_inputdataRepository.CountAsync(filter); if (count > 0) { var dModel = await _plc_inputdataRepository.GetSingle(s => s.dataname.Equals(dataname) & s.inputtime == inputdate & s.deleteflag == 0, null); dModel.deleteflag = 1; var tt = await _plc_inputdataRepository.Update(dModel); if (tt) return Success("删除成功"); } return Error("删除失败"); } catch (Exception ex) { _logger.LogError(ex, "删除水电气数据异常"); return Error("删除水电气数据失败"); } } //[Authorize] [HttpGet("getlistbypage")] public async Task GetListsByPageAsync(string dataname, string stime, string etime,string projectname, int pageindex = 1, int pagesize = 10) { try { //排序字段 var sort = Builders.Sort.Descending("inputtime"); //根据条件查询集合 var flist = new List>(); flist.Add(Builders.Filter.Eq("deleteflag", 0)); if (!string.IsNullOrWhiteSpace(dataname)) flist.Add(Builders.Filter.Where(s => s.dataname.Equals(dataname))); if (!string.IsNullOrWhiteSpace(projectname)) flist.Add(Builders.Filter.Where(s => s.projectname.Equals(projectname))); if (!string.IsNullOrWhiteSpace(stime)) { DateTime dt2 = new DateTime(); if (DateTime.TryParse(stime.Trim(), out dt2)) flist.Add(Builders.Filter.Gt("createtime", stime + " 00:00:00")); } if (!string.IsNullOrWhiteSpace(etime)) { DateTime dt2 = new DateTime(); if (DateTime.TryParse(etime.Trim(), out dt2)) flist.Add(Builders.Filter.Lt("createtime", etime + " 23:59:59")); } var filter = Builders.Filter.And(flist); var list = await _plc_inputdataRepository.GetByPage(filter, pageindex, pagesize, sort); var count = await _plc_inputdataRepository.CountAsync(filter); var obj = new { state = "success", message = "根据条件获取分页数据成功", rows = list, total = count, }; return Content(obj.ToJson()); //return Success("根据条件获取值班电话分页数据成功", list);0 } catch (Exception ex) { _logger.LogError(ex, "根据条件获取分页数据异常"); return Error("根据条件获取分页数据异常"); } } //[Authorize] [HttpGet("getsingle")] public async Task GetSingleAsync(string id) { if (id != null && id.Trim() != "") { try { var dModel = await _plc_inputdataRepository.GetSingle(id.Trim()); if (dModel != null) { return Success("获取参数成功", dModel); } else { return Error("获取参数失败"); } } catch (Exception ex) { _logger.LogError(ex, "获取参数实体异常"); return Error("获取参数失败"); } } else { return Error("获取参数失败"); } } } }