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 ReportOtherReportService : ReportBaseService { public ReportOtherReportService(OptUserInfo optUser) : base(optUser) { } protected override DataFlagsEnum BusiDataType => DataFlagsEnum.A1010; 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_OtherReport; readonly List noteList = new(); public override bool CheckRequestParamer(ReportInfo req, out string errMsg) { if (!base.CheckRequestParamer(req, out errMsg)) { return false; } switch (req.OtherReportStatus) { 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.OtherReportDate == null) { errMsg = "其他事项报告非新增报送时,对应的业务编码不应为空"; return false; } var note = base.GetReportNotes(ReportType, formatInfoTag(req.OtherReportDate?.ToString("yyyy-MM-dd"))).Where(O => O.ReportDate == req.OtherReportDate).FirstOrDefault(); if (note == null) { errMsg = $"{req.OtherReportDate?.ToString("yyyy-MM-dd")}不存在报送成功的其他事项报告记录,请重新选择"; return false; } if (req.OtherReportStatus == 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.OtherReportDesc)) { 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 { OtherReport = new OtherReportModel() }; var note = base.GetReportNotes(ReportType, noteKey).FirstOrDefault(); if (note == null && _operationType == OptFlagsEnum.A) { note = new SACReportNotes() { InfoCache = $"{{\"Tag\":\"{_reqInfo.ReportDate.ToString("yyyy-MM-dd")}\"}}", 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.OtherReport.OperationType = _reqInfo.OtherReportStatus; if (model.OtherReport.OperationType != OptFlagsEnum.A) { model.OtherReport.BizID = note.BizId; } var userInfo = UserBLL.GetById(UserId); model.OtherReport.Name = userInfo.Name; model.OtherReport.Telephone = userInfo.Mobile; model.OtherReport.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.OtherReport.OtherReportFileTuple?.Clear(); fileList.Clear(); break; } else { ReportStatus.AddCacheInfo(noteKey, item.fileName); } var info = new OtherReportFileDetailModel { OtherReportFile = item.fileName }; if (model.OtherReport.OtherReportFileTuple == null) { model.OtherReport.OtherReportFileTuple = new List(); } model.OtherReport.OtherReportFileTuple.Add(info); fileList.Add(item.filePath); note.DataId += item.id + ","; } model.OtherReport.DetailedDescription = _reqInfo.OtherReportDesc; } model.OtherReport.ExceID = base.formatExceID(); var notes = base.GetReportNotes(ReportType, noteKey); noData = !(model.OtherReport.OtherReportFileTuple?.Count > 0); if (!noData) { note.id = 0; note.ExceId = model.OtherReport.ExceID; note.CreateTime = DateTime.Now; note.FileTag = FileTag; note.ReportType = ReportType; note.ReportDate = _reqInfo.ReportDate; note.InfoTag = formatInfoTag(_reqInfo.ReportDate.ToString("yyyy-MM-dd"), 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?.OtherReport != null) { var listRoot = new List(); var helper = new CheckHelper(); var detailHelper = new CheckHelper(); helper.ExecuteCheck(model.OtherReport, (name, value, msg) => { listRoot.Add(new SacInfo(name, value, msg)); }); if (model.OtherReport.OtherReportFileTuple != null) { for (var i = 0; i < model.OtherReport.OtherReportFileTuple.Count; i++) { var listItem = new List(); var item = model.OtherReport.OtherReportFileTuple[i]; detailHelper.ExecuteCheck(item, (name, value, msg) => { listItem.Add(new SacInfo(name, value, msg)); }); if (listItem.Count > 0) { var temp = new SacInfo("OtherReportFileTuple", i) { SubMaps = new List(listItem) }; listRoot.Add(temp); } } } if (listRoot.Count > 0) { var errMsg = new SacInfo("OtherReport") { 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; } } }