using BaseOUDAL; using YLErp.BLL; using YLErp.DBModels.Enums; using YLErp.Modules.SuperviseReportModule.SAC.Common; using YLErp.Modules.SuperviseReportModule.SAC.Model; using static YLErp.DBModels.Consts.ConsReport; namespace YLErp.Modules.SuperviseReportModule.SAC.Service { class ReportEventReportService : ReportBaseService { public ReportEventReportService(OptUserInfo optUser) : base(optUser) { } protected override DataFlagsEnum BusiDataType => DataFlagsEnum.A1009; private List? _validOperationType = null; public override List ValidOperationType { get { _validOperationType ??= new List() { OptFlagsEnum.A, OptFlagsEnum.U, OptFlagsEnum.D, }; return _validOperationType; } } protected override SuperviseReportTypeEnum ReportType => SuperviseReportTypeEnum.SAC_EventReport; readonly List noteList = new(); public override bool CheckRequestParamer(ReportInfo req, out string errMsg) { if (!base.CheckRequestParamer(req, out errMsg)) { return false; } switch (req.EventReportStatus) { case OptFlagsEnum.A: var count = tempFilesService.QueryTempFile(req.ReportDate, "重大事项报告").Count(); if (count == 0) { errMsg = $"{req.ReportDate.ToString("yyyy-MM-dd")}不存在重大事项报告,请上传后操作"; return false; } if (base.GetReportNotes(ReportType, formatInfoTag(req.ReportDate.ToString("yyyy-MM-dd"))).Any()) { errMsg = $"{req.ReportDate.ToString("yyyy-MM-dd")}最新重大事项报告记录已报送成功,请选择补正"; return false; } break; case OptFlagsEnum.U: case OptFlagsEnum.D: if (req.EventReportDate == null) { errMsg = "重大事件报告非新增报送时,对应的业务编码不应为空"; return false; } var note = base.GetReportNotes(ReportType, formatInfoTag(req.EventReportDate?.ToString("yyyy-MM-dd"))).Where(O => O.ReportDate == req.EventReportDate).FirstOrDefault(); if (note == null) { errMsg = $"{req.EventReportDate?.ToString("yyyy-MM-dd")}不存在报送成功的重大事项报告记录,请重新选择"; return false; } if (req.EventReportStatus == OptFlagsEnum.U) { var fileIds = tempFilesService.QueryTempFile(req.ReportDate, "重大事项报告").Select(O => O.id.ToString()).ToArray(); var fileIdArr = note.DataId.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (!fileIds.Except(fileIdArr).Any()) { errMsg = $"{req.ReportDate.ToString("yyyy-MM-dd")}已上传重大事项报告附件都已报送成功,不需要再次报送"; return false; } } break; default: break; } if (string.IsNullOrWhiteSpace(req.EventReportDesc)) { errMsg = "重大事件报告说明不应为空"; return false; } var user = UserBLL.GetById(UserId); if (string.IsNullOrWhiteSpace(user.Name) || string.IsNullOrWhiteSpace(user.Mobile) || user.Mobile.Length != 11) { errMsg = "重大事件报告需要账号信息中的姓名及手机号作为报送人信息,请到相关页面正确填写!"; return false; } errMsg = ""; return true; } protected override BodyModel GenerateBody(out bool noData, out List fileList) { fileList = new List(); noData = false; var noteKey = formatInfoTag(_reqInfo.ReportDate.ToString("yyyy-MM-dd")); var model = new BodyModel { EventReport = new EventReportModel() }; var note = base.GetReportNotes(ReportType, noteKey).FirstOrDefault(); if (note == null && _operationType == OptFlagsEnum.A) { note = new SACReportNotes() { IsValid = true, }; } else { switch (_operationType) { case OptFlagsEnum.A: noData = true;//新增数据已报送,跳过 return model; case OptFlagsEnum.U: note.IsValid = true; break; case OptFlagsEnum.D: note.IsValid = false; break; case OptFlagsEnum.NONE: default: throw new ServiceException("未知操作类型"); } } using (var db = new YLContext()) { model.EventReport.ExceID = base.formatExceID(); model.EventReport.OperationType = _reqInfo.EventReportStatus; if (model.EventReport.OperationType != OptFlagsEnum.A) { model.EventReport.BizID = note.BizId; } var userInfo = UserBLL.GetById(UserId); model.EventReport.Name = userInfo.Name; model.EventReport.Telephone = userInfo.Mobile; model.EventReport.FixedPhone = userInfo.Tel; var files = tempFilesService.QueryTempFile(_reqInfo.ReportDate, "重大事项报告"); note.DataId = ""; foreach (var item in files) { if (ReportStatus.CheckCacheInfo(noteKey, item.fileName)) { continue; } if (!ReportStatus.CheckFileLength(item.filePath)) { model.EventReport.EventReportTuple?.Clear(); fileList.Clear(); break; } else { ReportStatus.AddCacheInfo(noteKey, item.fileName); } var info = new EventReportDetailModel { EventReport = item.fileName }; if (model.EventReport.EventReportTuple == null) { model.EventReport.EventReportTuple = new List(); } model.EventReport.EventReportTuple.Add(info); fileList.Add(item.filePath); note.DataId += item.id + ","; } model.EventReport.DetailedDescription = _reqInfo.EventReportDesc; } noData = !(model.EventReport.EventReportTuple?.Count > 0); if (!noData) { note.id = 0; note.InfoCache = $"{{\"Tag\":\"{_reqInfo.ReportDate.ToString("yyyy-MM-dd")}\"}}"; note.ExceId = model.EventReport.ExceID; note.CreateTime = DateTime.Now; note.FileTag = FileTag; note.ReportType = ReportType; note.ReportDate = _reqInfo.ReportDate; note.InfoTag = formatInfoTag(noteKey, true); note.OptTime = note.CreateTime; note.RetCode = ""; note.RetMsg = ""; note.ReportResponse = false; note.BizId = ""; note.changeStatus = false; noteList.Add(note); } return model; } protected override List CheckBodyValue(BodyModel model, out bool checkStatus) { var result = new List(); if (model.EventReport != null) { var listRoot = new List(); var helper = new CheckHelper(); var attHelper = new CheckHelper(); helper.ExecuteCheck(model.EventReport, (name, value, msg) => { listRoot.Add(new SacInfo(name, value, msg)); }); if (model.EventReport.EventReportTuple != null) { for (var i = 0; i < model.EventReport.EventReportTuple.Count; i++) { var listItem = new List(); var item = model.EventReport.EventReportTuple[i]; attHelper.ExecuteCheck(item, (name, value, msg) => { listItem.Add(new SacInfo(name, value, msg)); }); if (listItem.Count > 0) { var temp = new SacInfo("EventReportTuple", i) { SubMaps = new List(listItem) }; listRoot.Add(temp); } } } if (listRoot.Count > 0) { var errMsg = new SacInfo("EventReport") { SubMaps = new List(listRoot) }; result.Add(errMsg); } } checkStatus = result.Count > 0; return result; } private string formatInfoTag(string tag, bool suffixType = false) { var result = $"{BusiDataType}_{tag}_"; if (suffixType) { result = $"{result}{_operationType}"; } return result; } protected override string _changeCodeOfInfoTag(string infoTag, string newCode, out string originalCode) { //定期报告中不存在编号,也就不存在修改编号的情况; throw new NotImplementedException(); } public override bool BeforeOfGenerated(out string errMsg) { errMsg = ""; for (var i = 0; i < noteList.Count; i++) { base.SaveReportNotes(noteList[i]); } return true; } } }