diff --git a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs index bc3d7879a..74b59c269 100644 --- a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs @@ -22,1221 +22,1240 @@ using IRaCIS.Core.Infrastructure.Extention; namespace IRaCIS.Core.Application.Service { - /// - /// FrontAuditConfigService - /// - [ApiExplorerSettings(GroupName = "Reviewer")] - public class FrontAuditConfigService : BaseService, IFrontAuditConfigService - { - - private readonly IRepository _frontAuditConfigRepository; - private readonly IRepository _qCChallengeDialogRepository; - private readonly IRepository _dataInspectionRepository; - private readonly IRepository _qCChallengeRepository; - private readonly IRepository _dictionaryRepository; - private readonly IRepository _trialRepository; - private readonly IRepository _checkChallengeDialogRepository; - - public FrontAuditConfigService(IRepository frontAuditConfigRepository, - IRepository qCChallengeDialogRepository, - IRepository dataInspectionRepository, - IRepository qCChallengeRepository, - IRepository dictionaryRepository, - IRepository trialRepository, - IRepository checkChallengeDialogRepository - ) - { - _frontAuditConfigRepository = frontAuditConfigRepository; - this._qCChallengeDialogRepository = qCChallengeDialogRepository; - this._dataInspectionRepository = dataInspectionRepository; - this._qCChallengeRepository = qCChallengeRepository; - this._dictionaryRepository = dictionaryRepository; - this._trialRepository = trialRepository; - this._checkChallengeDialogRepository = checkChallengeDialogRepository; - } - - /// - /// 获取数据库所有表 - /// - /// - [HttpPost] - public async Task> GetDatabaseTables() - { - return await _frontAuditConfigRepository._dbContext.GetTableList().ToListAsync(); - } - - /// - /// 获取查询对象 - /// - /// - /// - [HttpPost] - public async Task> GetDialogList(AccessToDialogueInDto inDto) - { - List data = new List(); - - switch (inDto.Type) - { - case AccessToDialogueEnum.Question: - - AccessToDialogueOutDto title = (await _qCChallengeRepository.Where(x => x.Id == inDto.Id).Include(x => x.CreateUser).Select(x => new AccessToDialogueOutDto() - { - CreateTime = x.CreateTime, - CreateUserName = x.CreateUser.UserName, - TalkContent = x.Content, - IsTitle = true, - }).FirstOrDefaultAsync()) ?? new AccessToDialogueOutDto(); - - data = await _qCChallengeDialogRepository.Where(x => x.QCChallengeId == inDto.Id && x.CreateTime <= inDto.Createtime).Include(x => x.CreateUser).Select( - x => new AccessToDialogueOutDto() - { - CreateTime = x.CreateTime, - CreateUserName = x.CreateUser.UserName, - TalkContent = x.TalkContent - } - ).OrderBy(x => x.CreateTime).ToListAsync(); - - data.Insert(0, title); - - break; - case AccessToDialogueEnum.Consistency: - data = await _checkChallengeDialogRepository.Where(x => x.SubjectVisitId == inDto.Id && x.CreateTime <= inDto.Createtime).Include(x => x.CreateUser).Select( - x => new AccessToDialogueOutDto() - { - CreateTime = x.CreateTime, - CreateUserName = x.CreateUser.UserName, - TalkContent = x.TalkContent - } - ).OrderBy(x => x.CreateTime).ToListAsync(); - break; - - } - - return data; - } - - /// - /// 获取表列名 - /// - /// - [HttpPost] - public async Task> GetTableColumn(string tableName) - { - return await _frontAuditConfigRepository._dbContext.GetTableColumn(tableName).ToListAsync(); - } - - /// - /// 复制配置项及其子项 - /// - /// 传入对象 - /// - [HttpPost] - public async Task CopyFrontAuditConfigItem(CopyFrontAuditConfigItemDto input) - { - var id = NewId.NextGuid(); - List frontAudits = new List(); - - var frontAuditConfig = (await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == input.ChildId)).Clone(); - var fronts = await _frontAuditConfigRepository.Where(x => x.ParentId == frontAuditConfig.Id).ToListAsync(); - fronts.ForEach(x => - { - x.Id = NewId.NextGuid(); - x.ParentId = id; - }); - frontAuditConfig.ParentId = input.ParentId; - frontAuditConfig.Id = id; - frontAudits.Add(frontAuditConfig); - frontAudits.AddRange(fronts); - - await _frontAuditConfigRepository.AddRangeAsync(frontAudits); - await _frontAuditConfigRepository.SaveChangesAsync(); - - } - - /// - /// 批量添加字段 - /// - /// 数据集 - /// - public async Task BatchAddFrontAudit(BatchAddFrontAudit data) - { - var maxSort = await _frontAuditConfigRepository.Where(x => x.ParentId == data.ParentId).MaxAsync(x => x.Sort); - - List fronts = new List(); - foreach (var item in data.Columns) - { - maxSort++; - fronts.Add(new FrontAuditConfig() - { - Sort = maxSort, - Code = item.Name, - ValueCN = item.Remake, - IsEnable = true, - ParentId = data.ParentId - }); - } - - await _frontAuditConfigRepository.AddRangeAsync(fronts); - } - - /// - /// 翻译稽查数据 - /// - /// - /// - [HttpPost] - public async Task> SetInspectionEnumValue(SetInspectionEnumValueDto dto) - { - return await SetInspectionEnumValueDataList(dto, dto.AuditDataIds.FirstOrDefault()); - } - - - public async Task> GetInspectionJsonDataList(Guid trialId, Guid id) - { - //找到上一条Id - - - var currentInspection = await _dataInspectionRepository.Where(t => t.Id == id).Select(t => new { t.GeneralId, t.ObjectRelationParentId, t.CreateTime }).FirstNotNullAsync(); - - var beforeId = await _dataInspectionRepository.Where(x => x.GeneralId == currentInspection.GeneralId && x.CreateTime <= currentInspection.CreateTime && x.Id != id).OrderByDescending(x => x.CreateTime).Select(t => t.Id) - .FirstOrDefaultAsync(); - - List searchGuidList = new List() { id }; - - if (beforeId != Guid.Empty) - { - searchGuidList.Add(beforeId); - } - - return await SetInspectionEnumValueDataList(new SetInspectionEnumValueDto() { TrialId = trialId, AuditDataIds = searchGuidList }, id); - } - - - - /// - /// 翻译稽查数据 - /// - /// - /// - /// - private async Task> SetInspectionEnumValueDataList(SetInspectionEnumValueDto dto, Guid currentInspectionId) - { - var auditDatas = await _dataInspectionRepository.AsQueryable().Where(x => dto.AuditDataIds.Contains(x.Id)).Select(x => new SetInspectionEnumDataDto() - { - Id = x.Id, - JsonStr = x.JsonDetail, - Identification = x.Identification, - ObjectRelationParentId = x.ObjectRelationParentId, - ObjectRelationParentId2 = x.ObjectRelationParentId2, - ObjectRelationParentId3 = x.ObjectRelationParentId3, - CreateTime = x.CreateTime, - BatchId = x.BatchId, - - }).ToListAsync(); - - - - - var listIdentification = auditDatas.Select(x => x.Identification).Distinct().ToList(); - foreach (var item in auditDatas) - { - Dictionary jsonDict = (JsonConvert.DeserializeObject>(item.JsonStr)).IfNullThrowException(); - - if (!jsonDict.ContainsKey(nameof(InspectionJsonDetail.CommonData))) - { - jsonDict.Add(nameof(InspectionJsonDetail.CommonData), new { }); - } - - //查询关联父层级数据 - if (item.Id == currentInspectionId) - { - //把父层级的数据的 CommonData 数据合并(每一个层级把下面层级需要的数据放在CommonData 里面) 麻烦点是每个层级都需要记录一些信息,而且名称不能重复 - - var objectLsit = new List(); - - var relationParentDataObjList = await GetRelationParentData(item.Id, item.ObjectRelationParentId, item.ObjectRelationParentId2, item.ObjectRelationParentId3, item.CreateTime, item.BatchId, objectLsit); - - - - var currentCommonDataDic = JsonConvert.DeserializeObject>(jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr()); - - foreach (var relationParentDataObj in relationParentDataObjList) - { - var otherDic = JsonConvert.DeserializeObject>(relationParentDataObj.ToJsonStr()); - - foreach (var valuePair in otherDic) - { - //关联层级的数据 - if (valuePair.Key.Contains("_")) - { - var entityProperName = valuePair.Key.Split("_").ToList().Last(); - - if (!currentCommonDataDic.ContainsKey(entityProperName)) - { - currentCommonDataDic.Add(entityProperName, valuePair.Value); - } - else - { - if (!currentCommonDataDic.ContainsKey(valuePair.Key)) - { - currentCommonDataDic.Add(valuePair.Key, valuePair.Value); + /// + /// FrontAuditConfigService + /// + [ApiExplorerSettings(GroupName = "Reviewer")] + public class FrontAuditConfigService : BaseService, IFrontAuditConfigService + { + + private readonly IRepository _frontAuditConfigRepository; + private readonly IRepository _qCChallengeDialogRepository; + private readonly IRepository _dataInspectionRepository; + private readonly IRepository _qCChallengeRepository; + private readonly IRepository _dictionaryRepository; + private readonly IRepository _trialRepository; + private readonly IRepository _checkChallengeDialogRepository; + + public FrontAuditConfigService(IRepository frontAuditConfigRepository, + IRepository qCChallengeDialogRepository, + IRepository dataInspectionRepository, + IRepository qCChallengeRepository, + IRepository dictionaryRepository, + IRepository trialRepository, + IRepository checkChallengeDialogRepository + ) + { + _frontAuditConfigRepository = frontAuditConfigRepository; + this._qCChallengeDialogRepository = qCChallengeDialogRepository; + this._dataInspectionRepository = dataInspectionRepository; + this._qCChallengeRepository = qCChallengeRepository; + this._dictionaryRepository = dictionaryRepository; + this._trialRepository = trialRepository; + this._checkChallengeDialogRepository = checkChallengeDialogRepository; + } + + /// + /// 获取数据库所有表 + /// + /// + [HttpPost] + public async Task> GetDatabaseTables() + { + return await _frontAuditConfigRepository._dbContext.GetTableList().ToListAsync(); + } + + /// + /// 获取查询对象 + /// + /// + /// + [HttpPost] + public async Task> GetDialogList(AccessToDialogueInDto inDto) + { + List data = new List(); + + switch (inDto.Type) + { + case AccessToDialogueEnum.Question: + + AccessToDialogueOutDto title = (await _qCChallengeRepository.Where(x => x.Id == inDto.Id).Include(x => x.CreateUser).Select(x => new AccessToDialogueOutDto() + { + CreateTime = x.CreateTime, + CreateUserName = x.CreateUser.UserName, + TalkContent = x.Content, + IsTitle = true, + }).FirstOrDefaultAsync()) ?? new AccessToDialogueOutDto(); + + data = await _qCChallengeDialogRepository.Where(x => x.QCChallengeId == inDto.Id && x.CreateTime <= inDto.Createtime).Include(x => x.CreateUser).Select( + x => new AccessToDialogueOutDto() + { + CreateTime = x.CreateTime, + CreateUserName = x.CreateUser.UserName, + TalkContent = x.TalkContent + } + ).OrderBy(x => x.CreateTime).ToListAsync(); + + data.Insert(0, title); + + break; + case AccessToDialogueEnum.Consistency: + data = await _checkChallengeDialogRepository.Where(x => x.SubjectVisitId == inDto.Id && x.CreateTime <= inDto.Createtime).Include(x => x.CreateUser).Select( + x => new AccessToDialogueOutDto() + { + CreateTime = x.CreateTime, + CreateUserName = x.CreateUser.UserName, + TalkContent = x.TalkContent + } + ).OrderBy(x => x.CreateTime).ToListAsync(); + break; + + } + + return data; + } + + /// + /// 获取表列名 + /// + /// + [HttpPost] + public async Task> GetTableColumn(string tableName) + { + return await _frontAuditConfigRepository._dbContext.GetTableColumn(tableName).ToListAsync(); + } + + /// + /// 复制配置项及其子项 + /// + /// 传入对象 + /// + [HttpPost] + public async Task CopyFrontAuditConfigItem(CopyFrontAuditConfigItemDto input) + { + var id = NewId.NextGuid(); + List frontAudits = new List(); + + var frontAuditConfig = (await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == input.ChildId)).Clone(); + var fronts = await _frontAuditConfigRepository.Where(x => x.ParentId == frontAuditConfig.Id).ToListAsync(); + fronts.ForEach(x => + { + x.Id = NewId.NextGuid(); + x.ParentId = id; + }); + frontAuditConfig.ParentId = input.ParentId; + frontAuditConfig.Id = id; + frontAudits.Add(frontAuditConfig); + frontAudits.AddRange(fronts); + + await _frontAuditConfigRepository.AddRangeAsync(frontAudits); + await _frontAuditConfigRepository.SaveChangesAsync(); + + } + + /// + /// 批量添加字段 + /// + /// 数据集 + /// + public async Task BatchAddFrontAudit(BatchAddFrontAudit data) + { + var maxSort = await _frontAuditConfigRepository.Where(x => x.ParentId == data.ParentId).MaxAsync(x => x.Sort); + + List fronts = new List(); + foreach (var item in data.Columns) + { + maxSort++; + fronts.Add(new FrontAuditConfig() + { + Sort = maxSort, + Code = item.Name, + ValueCN = item.Remake, + IsEnable = true, + ParentId = data.ParentId + }); + } + + await _frontAuditConfigRepository.AddRangeAsync(fronts); + } + + /// + /// 翻译稽查数据 + /// + /// + /// + [HttpPost] + public async Task> SetInspectionEnumValue(SetInspectionEnumValueDto dto) + { + return await SetInspectionEnumValueDataList(dto, dto.AuditDataIds.FirstOrDefault()); + } + + + public async Task> GetInspectionJsonDataList(Guid trialId, Guid id) + { + //找到上一条Id + + + var currentInspection = await _dataInspectionRepository.Where(t => t.Id == id).Select(t => new { t.GeneralId, t.ObjectRelationParentId, t.CreateTime }).FirstNotNullAsync(); + + var beforeId = await _dataInspectionRepository.Where(x => x.GeneralId == currentInspection.GeneralId && x.CreateTime <= currentInspection.CreateTime && x.Id != id).OrderByDescending(x => x.CreateTime).Select(t => t.Id) + .FirstOrDefaultAsync(); + + List searchGuidList = new List() { id }; + + if (beforeId != Guid.Empty) + { + searchGuidList.Add(beforeId); + } + + return await SetInspectionEnumValueDataList(new SetInspectionEnumValueDto() { TrialId = trialId, AuditDataIds = searchGuidList }, id); + } + + + + /// + /// 翻译稽查数据 + /// + /// + /// + /// + private async Task> SetInspectionEnumValueDataList(SetInspectionEnumValueDto dto, Guid currentInspectionId) + { + var auditDatas = await _dataInspectionRepository.AsQueryable().Where(x => dto.AuditDataIds.Contains(x.Id)).Select(x => new SetInspectionEnumDataDto() + { + Id = x.Id, + JsonStr = x.JsonDetail, + Identification = x.Identification, + ObjectRelationParentId = x.ObjectRelationParentId, + ObjectRelationParentId2 = x.ObjectRelationParentId2, + ObjectRelationParentId3 = x.ObjectRelationParentId3, + CreateTime = x.CreateTime, + BatchId = x.BatchId, + + }).ToListAsync(); + + + + + var listIdentification = auditDatas.Select(x => x.Identification).Distinct().ToList(); + foreach (var item in auditDatas) + { + Dictionary jsonDict = (JsonConvert.DeserializeObject>(item.JsonStr)).IfNullThrowException(); + + if (!jsonDict.ContainsKey(nameof(InspectionJsonDetail.CommonData))) + { + jsonDict.Add(nameof(InspectionJsonDetail.CommonData), new { }); + } + + //查询关联父层级数据 + if (item.Id == currentInspectionId) + { + //把父层级的数据的 CommonData 数据合并(每一个层级把下面层级需要的数据放在CommonData 里面) 麻烦点是每个层级都需要记录一些信息,而且名称不能重复 + + var objectLsit = new List(); + + var relationParentDataObjList = await GetRelationParentData(item.Id, item.ObjectRelationParentId, item.ObjectRelationParentId2, item.ObjectRelationParentId3, item.CreateTime, item.BatchId, objectLsit); + + + + var currentCommonDataDic = JsonConvert.DeserializeObject>(jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr()); + + foreach (var relationParentDataObj in relationParentDataObjList) + { + var otherDic = JsonConvert.DeserializeObject>(relationParentDataObj.ToJsonStr()); + + foreach (var valuePair in otherDic) + { + //关联层级的数据 + if (valuePair.Key.Contains("_")) + { + var entityProperName = valuePair.Key.Split("_").ToList().Last(); + + if (!currentCommonDataDic.ContainsKey(entityProperName)) + { + currentCommonDataDic.Add(entityProperName, valuePair.Value); + } + else + { + if (!currentCommonDataDic.ContainsKey(valuePair.Key)) + { + currentCommonDataDic.Add(valuePair.Key, valuePair.Value); - } - } - } - else - { - if (!currentCommonDataDic.ContainsKey(valuePair.Key)) - { - currentCommonDataDic.Add(valuePair.Key, valuePair.Value); - } - } - } - } + } + } + } + else + { + if (!currentCommonDataDic.ContainsKey(valuePair.Key)) + { + currentCommonDataDic.Add(valuePair.Key, valuePair.Value); + } + } + } + } - jsonDict[nameof(InspectionJsonDetail.CommonData)] = currentCommonDataDic; - } + jsonDict[nameof(InspectionJsonDetail.CommonData)] = currentCommonDataDic; + } - #region Old - //item.JsonStr = jsonDict[nameof(InspectionJsonDetail.Data)].ToString(); - //if (item.Identification == string.Empty || item.JsonStr == string.Empty) - //{ - // continue; - //} - //item.JsonStr = await GetInspectionEnumValue(listIdentification, item.JsonStr); - //item.JsonStr = await SetEnum(dto.TrialId, listIdentification, item.JsonStr); - //item.JsonStr = await SetDataInspectionDateType(listIdentification, item.JsonStr); + #region Old + //item.JsonStr = jsonDict[nameof(InspectionJsonDetail.Data)].ToString(); + //if (item.Identification == string.Empty || item.JsonStr == string.Empty) + //{ + // continue; + //} + //item.JsonStr = await GetInspectionEnumValue(listIdentification, item.JsonStr); + //item.JsonStr = await SetEnum(dto.TrialId, listIdentification, item.JsonStr); + //item.JsonStr = await SetDataInspectionDateType(listIdentification, item.JsonStr); - //jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject(item.JsonStr); - #endregion + //jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject(item.JsonStr); + #endregion - #region New + #region New - var str = jsonDict[nameof(InspectionJsonDetail.Data)].ToString(); - if (item.Identification == string.Empty || str == string.Empty) - { - continue; - } - str = await GetInspectionEnumValue(listIdentification, str); - str = await SetEnum(dto.TrialId, listIdentification, str); - str = await SetDataInspectionDateType(listIdentification, str); + var str = jsonDict[nameof(InspectionJsonDetail.Data)].ToString(); + if (item.Identification == string.Empty || str == string.Empty) + { + continue; + } + str = await GetInspectionEnumValue(listIdentification, item.Identification, str); + str = await SetEnum(dto.TrialId, listIdentification, item.Identification, str); + str = await SetDataInspectionDateType(listIdentification, item.Identification, str); - jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject(str); + jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject(str); - var str2 = jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr(); - if (item.Identification == string.Empty || str2 == string.Empty) - { - continue; - } - str2 = await GetInspectionEnumValue(listIdentification, str2); - str2 = await SetEnum(dto.TrialId, listIdentification, str2); - str2 = await SetDataInspectionDateType(listIdentification, str2); + var str2 = jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr(); + if (item.Identification == string.Empty || str2 == string.Empty) + { + continue; + } + str2 = await GetInspectionEnumValue(listIdentification, item.Identification, str2); + str2 = await SetEnum(dto.TrialId, listIdentification, item.Identification, str2); + str2 = await SetDataInspectionDateType(listIdentification, item.Identification, str2); - jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject(str2); - #endregion + jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject(str2); + #endregion - #region 后续移除 避免前端看到的不统一 因为采用了新的关联方式,之前数据在Data里面取 现在配置在CommonData 里取 - //var dataDic = JsonConvert.DeserializeObject>(str); - //var commonDic = JsonConvert.DeserializeObject>(str2); - //foreach (var valuePair in dataDic) - //{ - // if (!commonDic.ContainsKey(valuePair.Key)) - // { - // commonDic.Add(valuePair.Key, valuePair.Value); - // } - //} + #region 后续移除 避免前端看到的不统一 因为采用了新的关联方式,之前数据在Data里面取 现在配置在CommonData 里取 + //var dataDic = JsonConvert.DeserializeObject>(str); + //var commonDic = JsonConvert.DeserializeObject>(str2); + //foreach (var valuePair in dataDic) + //{ + // if (!commonDic.ContainsKey(valuePair.Key)) + // { + // commonDic.Add(valuePair.Key, valuePair.Value); + // } + //} - //jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject(commonDic.ToJsonStr()); - #endregion + //jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject(commonDic.ToJsonStr()); + #endregion - item.JsonStr = JsonConvert.SerializeObject(jsonDict); - } + item.JsonStr = JsonConvert.SerializeObject(jsonDict); + } - var resultJsonStrList = new List(); + var resultJsonStrList = new List(); - dto.AuditDataIds.ForEach(x => - { - var auditData = auditDatas.FirstOrDefault(y => y.Id == x); + dto.AuditDataIds.ForEach(x => + { + var auditData = auditDatas.FirstOrDefault(y => y.Id == x); - resultJsonStrList.Add(auditData?.JsonStr); - }); + resultJsonStrList.Add(auditData?.JsonStr); + }); - if (resultJsonStrList.Count < 2) - { - resultJsonStrList.Add(String.Empty); - } - return resultJsonStrList; - } + if (resultJsonStrList.Count < 2) + { + resultJsonStrList.Add(String.Empty); + } + return resultJsonStrList; + } - private async Task AddJsonObjectToDic(Guid id, Guid? objectRelationParentId, DateTime createTime, Guid batchId, List objectLsit) - { - if (objectRelationParentId != null) - { - //父子层级的数据可能在同一个批次 进行更新 但是后插入的是父层级的数据 找父层级的稽查应该优先同一批次的 - var relationParentInspection = await _dataInspectionRepository.Where(t => t.GeneralId == objectRelationParentId && (t.CreateTime <= createTime || t.BatchId == batchId) && t.Id != id).OrderByDescending(x => x.CreateTime).Select(t => new { t.ObjectRelationParentId, t.CreateTime, t.JsonDetail, t.BatchId, t.ObjectRelationParentId2, t.ObjectRelationParentId3, t.EntityName, t.Id }).FirstOrDefaultAsync(); + private async Task AddJsonObjectToDic(Guid id, Guid? objectRelationParentId, DateTime createTime, Guid batchId, List objectLsit) + { + if (objectRelationParentId != null) + { + //父子层级的数据可能在同一个批次 进行更新 但是后插入的是父层级的数据 找父层级的稽查应该优先同一批次的 + var relationParentInspection = await _dataInspectionRepository.Where(t => t.GeneralId == objectRelationParentId && (t.CreateTime <= createTime || t.BatchId == batchId) && t.Id != id).OrderByDescending(x => x.CreateTime).Select(t => new { t.ObjectRelationParentId, t.CreateTime, t.JsonDetail, t.BatchId, t.ObjectRelationParentId2, t.ObjectRelationParentId3, t.EntityName, t.Id }).FirstOrDefaultAsync(); - if (relationParentInspection != null) - { + if (relationParentInspection != null) + { - Dictionary jsonDic = (JsonConvert.DeserializeObject>(relationParentInspection.JsonDetail)).IfNullThrowConvertException(); + Dictionary jsonDic = (JsonConvert.DeserializeObject>(relationParentInspection.JsonDetail)).IfNullThrowConvertException(); - //避免对象信息记录 把 Data里面的信息也取过去 但是加上稽查对象的前缀 - var dataDicObj = jsonDic[nameof(InspectionJsonDetail.Data)]; + //避免对象信息记录 把 Data里面的信息也取过去 但是加上稽查对象的前缀 + var dataDicObj = jsonDic[nameof(InspectionJsonDetail.Data)]; - if (dataDicObj != null) - { - var entityName = relationParentInspection.EntityName; + if (dataDicObj != null) + { + var entityName = relationParentInspection.EntityName; - IDictionary newNamepDic = new Dictionary(); + IDictionary newNamepDic = new Dictionary(); - var tempDic = JsonConvert.DeserializeObject>(dataDicObj.ToJsonStr()); + var tempDic = JsonConvert.DeserializeObject>(dataDicObj.ToJsonStr()); - foreach (var valuePair in tempDic) - { - newNamepDic.Add(entityName + "_" + valuePair.Key, valuePair.Value); - } + foreach (var valuePair in tempDic) + { + newNamepDic.Add(entityName + "_" + valuePair.Key, valuePair.Value); + } - objectLsit.Add(newNamepDic); - } + objectLsit.Add(newNamepDic); + } - await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); - await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId2, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); - await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId3, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); - } + await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); + await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId2, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); + await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId3, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); + } - else - { - //用户的数据稽查没有 临时处理 + else + { + //用户的数据稽查没有 临时处理 - var userObj = await _repository.Where(t => t.Id == objectRelationParentId).Select(t => new { UserRealName = t.FullName, t.Phone, t.UserName, UserType = t.UserTypeRole.UserTypeShortName, t.EMail, t.OrganizationName }).FirstOrDefaultAsync(); + var userObj = await _repository.Where(t => t.Id == objectRelationParentId).Select(t => new { UserRealName = t.FullName, t.Phone, t.UserName, UserType = t.UserTypeRole.UserTypeShortName, t.EMail, t.OrganizationName }).FirstOrDefaultAsync(); - if (userObj != null) - { - objectLsit.Add(userObj); + if (userObj != null) + { + objectLsit.Add(userObj); - } - } + } + } - } - } + } + } - private async Task> GetRelationParentData(Guid id, Guid? objectRelationParentId, Guid? objectRelationParentId2, Guid? objectRelationParentId3, DateTime createTime, Guid batchId, List objectLsit) - { - await AddJsonObjectToDic(id, objectRelationParentId, createTime, batchId, objectLsit); - await AddJsonObjectToDic(id, objectRelationParentId2, createTime, batchId, objectLsit); + private async Task> GetRelationParentData(Guid id, Guid? objectRelationParentId, Guid? objectRelationParentId2, Guid? objectRelationParentId3, DateTime createTime, Guid batchId, List objectLsit) + { + await AddJsonObjectToDic(id, objectRelationParentId, createTime, batchId, objectLsit); + await AddJsonObjectToDic(id, objectRelationParentId2, createTime, batchId, objectLsit); - await AddJsonObjectToDic(id, objectRelationParentId3, createTime, batchId, objectLsit); + await AddJsonObjectToDic(id, objectRelationParentId3, createTime, batchId, objectLsit); - return objectLsit; - } + return objectLsit; + } - /// - /// 格式化日期和时间 - /// - /// - /// - /// - private async Task SetDataInspectionDateType(List identificationList, string jsonStr) - { - var list = await (from parent in _frontAuditConfigRepository.AsQueryable().Where(x => identificationList.Contains(x.Identification)) - join child in _frontAuditConfigRepository.AsQueryable().Where(x => x.EnumType == "Date" && x.IsEnable) on parent.Id equals child.ParentId - select new DateDto() - { - Code = child.Code, - DateType = child.DateType, - }).ToListAsync(); - - list = list.GroupBy(x => new { x.Code }, (key, lst) => new DateDto() - { - Code = key.Code, - DateType = lst.Max(x => x.DateType), - }).ToList(); - - var jsonDataDic = JsonConvert.DeserializeObject>(jsonStr); - - if (jsonDataDic == null) - { - return jsonStr; - } - - foreach (var item in jsonDataDic.Keys) - { - var datefirst = list.FirstOrDefault(x => x.Code.ToLower() == item.ToLower()); - if (datefirst != null && !IsNullOrEmpty(jsonDataDic[item])) - { - try - { - if (datefirst.DateType == FrontAuditDateType.Date.GetDescription()) - { - jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd"); - } - - if (datefirst.DateType == FrontAuditDateType.DateTime.GetDescription()) - { - jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); - } - } - catch (Exception) - { - continue; - } - } - - } - - return JsonConvert.SerializeObject(jsonDataDic); - - - } - - /// - /// 获取外键表数据 - /// - /// - /// - /// - ///// 表名称 - ///// 外键value - ///// 要查询的外键值 - ///// 传入的纸 - private async Task GetInspectionEnumValue(List identificationList, string jsonStr) - { - var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification)) - join p in _frontAuditConfigRepository.Where(x => x.EnumType == "Foreign" && x.IsEnable) on u.Id equals p.ParentId - select new - { - Key = p.Code, - ForeignKeyValue = p.ForeignKeyValue, - ForeignKeyText = p.ForeignKeyText, - ForeignKeyTable = p.ForeignKeyTableName - }).ToListAsync(); - list = list.GroupBy(x => new { x.Key }, (key, lst) => new - { - Key = key.Key, - ForeignKeyValue = lst.Max(x => x.ForeignKeyValue), - ForeignKeyText = lst.Max(x => x.ForeignKeyText), - ForeignKeyTable = lst.Max(x => x.ForeignKeyTable), - - }).ToList(); - - var jsonDataValueDic = (JsonConvert.DeserializeObject>(jsonStr)).IfNullThrowConvertException(); - foreach (var item in list) - { - if (!jsonDataValueDic.ContainsKey(item.Key)) - { - continue; - } - string Table = item.ForeignKeyTable; - string ForeignKeyValue = item.ForeignKeyValue; - string ForeignKeyText = item.ForeignKeyText; - if (jsonDataValueDic[item.Key] != null) - { - string value = jsonDataValueDic[item.Key].ToString(); - string para = string.Empty; - string sql = string.Empty; - var JsonData = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(new { item = value })); - if (JsonData["item"].GetType() == typeof(JArray)) - { - foreach (var v in JsonData["item"] as JArray) - { - para += para == string.Empty ? $"'{v.ToString()}'" : $",'{v.ToString()}'"; - } - sql = $"select {ForeignKeyText} Text from [{Table}] where {ForeignKeyValue} in (@para)"; - } - else - { - para = $"{JsonData["item"].ToString()}"; - sql = $"select {ForeignKeyText} Text from [{Table}] where {ForeignKeyValue} = @para"; - } - SqlParameter[] paravalue = new SqlParameter[] { - new SqlParameter("@para",para) - }; - - //https://learn.microsoft.com/zh-tw/ef/core/querying/sql-queries - jsonDataValueDic[item.Key] = string.Join(",", _frontAuditConfigRepository._dbContext.Database.SqlQuery(sql, paravalue).Select(x => x.Text).ToList()); - } - } - return JsonConvert.SerializeObject(jsonDataValueDic); - } - - - /// - /// 获取枚举 - /// - /// 标识 - /// 标识 - /// Json对象 - /// - private async Task SetEnum(Guid trialId, List identificationList, string jsonStr) - { - if (jsonStr == null || jsonStr == "null") - { - return null; - } - - - //DictionaryCode='' and EnumType='Dictionary' 是审核状态 - var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification)) - join p in _frontAuditConfigRepository.Where(x => (x.DictionaryCode != string.Empty && x.EnumType == "Dictionary") || (x.DataType == "Table") && x.IsEnable) on u.Id equals p.ParentId - select new - { - //前端展示类型 - DataType = p.DataType, - TableConfigJsonStr = p.TableConfigJsonStr, - Key = p.Code, - Code = p.DictionaryCode, - Type = p.DictionaryType - }).ToListAsync(); - - //两条不同的标识 但是里面配置有相同的翻译字典 - list = list.Distinct().ToList(); - - // 添加单双审 - var trialtype = await _trialRepository.AsQueryable().Where(x => x.Id == trialId).Select(x => x.QCProcessEnum).FirstOrDefaultAsync(); - - if (!list.Any(x => x.Key == "AuditState")) - { - list.Add(new - { - DataType = string.Empty, - TableConfigJsonStr = string.Empty, - Key = "AuditState", - Code = trialtype == TrialQCProcess.SingleAudit ? "AuditStatePE" : "AuditStateRC", - Type = "Code", - }); - } - - var jsonDataDic = JsonConvert.DeserializeObject>(jsonStr); - foreach (var item in list) - { - try - { - - if (!jsonDataDic.ContainsKey(item.Key) || jsonDataDic[item.Key] == null) - { - continue; - } - var value = jsonDataDic[item.Key]; - - //翻译的是数组 - if (value.GetType() == typeof(JArray)) - { - JArray arrays = (JArray)value; - - //动态配置表翻译 - if (item.DataType == "Table") - { - var tableConfigList = JsonConvert.DeserializeObject>(item.TableConfigJsonStr) ?? new List(); + /// + /// 格式化日期和时间 + /// + /// + /// + /// + private async Task SetDataInspectionDateType(List identificationList, string identification, string jsonStr) + { + var list = await (from parent in _frontAuditConfigRepository.AsQueryable().Where(x => identificationList.Contains(x.Identification)) + join child in _frontAuditConfigRepository.AsQueryable().Where(x => x.EnumType == "Date" && x.IsEnable) on parent.Id equals child.ParentId + select new DateDto() + { + Identification = parent.Identification, + + Code = child.Code, + DateType = child.DateType, + }).ToListAsync(); + + list = list.GroupBy(x => new { x.Code }, (key, lst) => new DateDto() + { + + Code = key.Code, + DateType = lst.FirstOrDefault(y => y.Identification == identification)?.DateType ?? lst.Max(x => x.DateType), + }).ToList(); + + var jsonDataDic = JsonConvert.DeserializeObject>(jsonStr); + + if (jsonDataDic == null) + { + return jsonStr; + } + + foreach (var item in jsonDataDic.Keys) + { + var datefirst = list.FirstOrDefault(x => x.Code.ToLower() == item.ToLower()); + if (datefirst != null && !IsNullOrEmpty(jsonDataDic[item])) + { + try + { + if (datefirst.DateType == FrontAuditDateType.Date.GetDescription()) + { + jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd"); + } + + if (datefirst.DateType == FrontAuditDateType.DateTime.GetDescription()) + { + jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + catch (Exception) + { + continue; + } + } + + } + + return JsonConvert.SerializeObject(jsonDataDic); + + + } + + /// + /// 获取外键表数据 + /// + /// + /// + /// + ///// 表名称 + ///// 外键value + ///// 要查询的外键值 + ///// 传入的纸 + private async Task GetInspectionEnumValue(List identificationList, string identification, string jsonStr) + { + var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification)) + join p in _frontAuditConfigRepository.Where(x => x.EnumType == "Foreign" && x.IsEnable) on u.Id equals p.ParentId + select new + { + Key = p.Code, + Identification = u.Identification, + ForeignKeyValue = p.ForeignKeyValue, + ForeignKeyText = p.ForeignKeyText, + ForeignKeyTable = p.ForeignKeyTableName + }).ToListAsync(); + list = list.GroupBy(x => new { x.Key }, (key, lst) => new + { + Key = key.Key, + Identification = string.Empty, + ForeignKeyValue = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyValue ?? lst.Max(x => x.ForeignKeyValue), + ForeignKeyText = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyText ?? lst.Max(x => x.ForeignKeyText), + ForeignKeyTable = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyTable ?? lst.Max(x => x.ForeignKeyTable), + + }).ToList(); + + var jsonDataValueDic = (JsonConvert.DeserializeObject>(jsonStr)).IfNullThrowConvertException(); + foreach (var item in list) + { + if (!jsonDataValueDic.ContainsKey(item.Key)) + { + continue; + } + string Table = item.ForeignKeyTable; + string ForeignKeyValue = item.ForeignKeyValue; + string ForeignKeyText = item.ForeignKeyText; + if (jsonDataValueDic[item.Key] != null) + { + string value = jsonDataValueDic[item.Key].ToString(); + string para = string.Empty; + string sql = string.Empty; + var JsonData = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(new { item = value })); + if (JsonData["item"].GetType() == typeof(JArray)) + { + foreach (var v in JsonData["item"] as JArray) + { + para += para == string.Empty ? $"'{v.ToString()}'" : $",'{v.ToString()}'"; + } + sql = $"select {ForeignKeyText} Text from [{Table}] where {ForeignKeyValue} in (@para)"; + } + else + { + para = $"{JsonData["item"].ToString()}"; + sql = $"select {ForeignKeyText} Text from [{Table}] where {ForeignKeyValue} = @para"; + } + SqlParameter[] paravalue = new SqlParameter[] { + new SqlParameter("@para",para) + }; + + //https://learn.microsoft.com/zh-tw/ef/core/querying/sql-queries + jsonDataValueDic[item.Key] = string.Join(",", _frontAuditConfigRepository._dbContext.Database.SqlQuery(sql, paravalue).Select(x => x.Text).ToList()); + } + } + return JsonConvert.SerializeObject(jsonDataValueDic); + } + + + /// + /// 获取枚举 + /// + /// 标识 + /// 标识 + /// Json对象 + /// + private async Task SetEnum(Guid trialId, List identificationList, string identification, string jsonStr) + { + if (jsonStr == null || jsonStr == "null") + { + return null; + } + + + //DictionaryCode='' and EnumType='Dictionary' 是审核状态 + var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification)) + join p in _frontAuditConfigRepository.Where(x => (x.DictionaryCode != string.Empty && x.EnumType == "Dictionary") || (x.DataType == "Table") && x.IsEnable) on u.Id equals p.ParentId + select new + { + Key = p.Code, + Identification = u.Identification, + //前端展示类型 + DataType = p.DataType, + + TableConfigJsonStr = p.TableConfigJsonStr, + + Code = p.DictionaryCode, + Type = p.DictionaryType + }).ToListAsync(); + + //两条不同的标识 但是里面配置有相同的翻译字典 + list = list.GroupBy(x => new { x.Key }, (key, lst) => new + { + Key = key.Key, + Identification = string.Empty, + DataType = lst.FirstOrDefault(y => y.Identification == identification)?.DataType ?? lst.Max(x => x.DataType), + TableConfigJsonStr = lst.FirstOrDefault(y => y.Identification == identification)?.TableConfigJsonStr ?? lst.Max(x => x.TableConfigJsonStr), + Code = lst.FirstOrDefault(y => y.Identification == identification)?.Code ?? lst.Max(x => x.Code), + Type = lst.FirstOrDefault(y => y.Identification == identification)?.Type ?? lst.Max(x => x.Type), + + + }).ToList(); + + // 添加单双审 + var trialtype = await _trialRepository.AsQueryable().Where(x => x.Id == trialId).Select(x => x.QCProcessEnum).FirstOrDefaultAsync(); + + if (!list.Any(x => x.Key == "AuditState")) + { + list.Add(new + { + Key = "AuditState", + Identification = string.Empty, + DataType = string.Empty, + TableConfigJsonStr = string.Empty, + Code = trialtype == TrialQCProcess.SingleAudit ? "AuditStatePE" : "AuditStateRC", + Type = "Code", + }); + } + + var jsonDataDic = JsonConvert.DeserializeObject>(jsonStr); + foreach (var item in list) + { + try + { + + if (!jsonDataDic.ContainsKey(item.Key) || jsonDataDic[item.Key] == null) + { + continue; + } + var value = jsonDataDic[item.Key]; + //翻译的是数组 + if (value.GetType() == typeof(JArray)) + { + JArray arrays = (JArray)value; - //处理静态翻译 - var translateInfoList = tableConfigList.Where(t => t.IsNeedTransalate).Select(t => new { t.ColumnValue, t.TranslateDictionaryName }).Distinct().ToList(); - var dictionaryNameList = translateInfoList.Select(t => t.TranslateDictionaryName).Distinct().ToList(); + //动态配置表翻译 + if (item.DataType == "Table") + { + var tableConfigList = JsonConvert.DeserializeObject>(item.TableConfigJsonStr) ?? new List(); + //处理静态翻译 + var translateInfoList = tableConfigList.Where(t => t.IsNeedTransalate).Select(t => new { t.ColumnValue, t.TranslateDictionaryName }).Distinct().ToList(); + var dictionaryNameList = translateInfoList.Select(t => t.TranslateDictionaryName).Distinct().ToList(); - //处理动态翻译 会在数组中提供 一个属性 “DictionaryCode” 这个是默认约束,做稽查的时候记得注意,免得配置麻烦 - var dynamicTranslateInfoList = tableConfigList.Where(t => t.IsDynamicTranslate && t.IsList).Select(t => new { t.ListName, t.ColumnValue }).Distinct().ToList(); - var dynamicDictionaryNameList = new List(); - foreach (var dynamicTranslateInfo in dynamicTranslateInfoList) - { - var tempNameList = arrays[0][dynamicTranslateInfo.ListName].Select(t => t["DictionaryCode"].ToString()).Where(t => !string.IsNullOrEmpty(t)).ToList(); + //处理动态翻译 会在数组中提供 一个属性 “DictionaryCode” 这个是默认约束,做稽查的时候记得注意,免得配置麻烦 + var dynamicTranslateInfoList = tableConfigList.Where(t => t.IsDynamicTranslate && t.IsList).Select(t => new { t.ListName, t.ColumnValue }).Distinct().ToList(); - dynamicDictionaryNameList.AddRange(tempNameList); + var dynamicDictionaryNameList = new List(); - dynamicDictionaryNameList = dynamicDictionaryNameList.Distinct().ToList(); - } + foreach (var dynamicTranslateInfo in dynamicTranslateInfoList) + { + var tempNameList = arrays[0][dynamicTranslateInfo.ListName].Select(t => t["DictionaryCode"].ToString()).Where(t => !string.IsNullOrEmpty(t)).ToList(); - var specialDynamicColumnValueList = new List(); - if (tableConfigList.Any(t => t.IsDynamicTranslate && t.IsList == false)) - { - // 兼容之前数组的那种方式 实际配置只会配置一条 - specialDynamicColumnValueList = tableConfigList.Where(t => t.IsDynamicTranslate && t.IsList == false) - .Select(t => t.ColumnValue ).Distinct().ToList(); + dynamicDictionaryNameList.AddRange(tempNameList); - var dicNames= arrays.Where(t=>!string.IsNullOrEmpty( t["DictionaryCode"].ToString()) ).Select(t => t["DictionaryCode"].ToString()).Distinct().ToList(); + dynamicDictionaryNameList = dynamicDictionaryNameList.Distinct().ToList(); + } - dictionaryNameList.AddRange(dicNames); - } - + var specialDynamicColumnValueList = new List(); + if (tableConfigList.Any(t => t.IsDynamicTranslate && t.IsList == false)) + { + // 兼容之前数组的那种方式 实际配置只会配置一条 + specialDynamicColumnValueList = tableConfigList.Where(t => t.IsDynamicTranslate && t.IsList == false) + .Select(t => t.ColumnValue ).Distinct().ToList(); + var dicNames= arrays.Where(t=>!string.IsNullOrEmpty( t["DictionaryCode"].ToString()) ).Select(t => t["DictionaryCode"].ToString()).Distinct().ToList(); - var allDictionaryNameList = dictionaryNameList.Union(dynamicDictionaryNameList).Distinct(); + dictionaryNameList.AddRange(dicNames); + } - var searchList = await _dictionaryRepository.Where(t => allDictionaryNameList.Contains(t.Parent.Code) && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - //翻译的字典数据 - var translateDataList = searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList()); + var allDictionaryNameList = dictionaryNameList.Union(dynamicDictionaryNameList).Distinct(); - List jsonList = new List(); - foreach (JToken arraysItem in arrays) - { - var jsonObject = JObject.Parse(arraysItem.ToString()); - //处理静态翻译 - foreach (var translateInfo in translateInfoList) - { - //Json 解析后 true 变为了True - jsonObject[translateInfo.ColumnValue] = translateDataList[translateInfo.TranslateDictionaryName].Where(t => t.Code.ToLower() == jsonObject[translateInfo.ColumnValue]?.ToString().ToLower()).Select(t => _userInfo.IsEn_Us?t.Value: t.ValueCN).FirstOrDefault(); - } + var searchList = await _dictionaryRepository.Where(t => allDictionaryNameList.Contains(t.Parent.Code) && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - foreach (var specialDynamicColumnValue in specialDynamicColumnValueList) - { - jsonObject[specialDynamicColumnValue] = - translateDataList[jsonObject["DictionaryCode"].ToString()].Where(t => t.Code.ToLower() == jsonObject[specialDynamicColumnValue]?.ToString().ToLower()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefault(); - } + //翻译的字典数据 + var translateDataList = searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList()); - //处理动态翻译 + List jsonList = new List(); + foreach (JToken arraysItem in arrays) + { + var jsonObject = JObject.Parse(arraysItem.ToString()); - foreach (var dynamicTranslateInfo in dynamicTranslateInfoList) - { + //处理静态翻译 + foreach (var translateInfo in translateInfoList) + { + //Json 解析后 true 变为了True + jsonObject[translateInfo.ColumnValue] = translateDataList[translateInfo.TranslateDictionaryName].Where(t => t.Code.ToLower() == jsonObject[translateInfo.ColumnValue]?.ToString().ToLower()).Select(t => _userInfo.IsEn_Us?t.Value: t.ValueCN).FirstOrDefault(); + } - var innerArrays = (JArray)jsonObject[dynamicTranslateInfo.ListName]; + foreach (var specialDynamicColumnValue in specialDynamicColumnValueList) + { + jsonObject[specialDynamicColumnValue] = + translateDataList[jsonObject["DictionaryCode"].ToString()].Where(t => t.Code.ToLower() == jsonObject[specialDynamicColumnValue]?.ToString().ToLower()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefault(); + } + //处理动态翻译 - List innberJsonList = new List(); + foreach (var dynamicTranslateInfo in dynamicTranslateInfoList) + { - foreach (var innerItem in innerArrays) - { - var innerObject = JObject.Parse(innerItem.ToString()); + var innerArrays = (JArray)jsonObject[dynamicTranslateInfo.ListName]; - var dicName = innerObject["DictionaryCode"]?.ToString(); + List innberJsonList = new List(); - if (dicName != null && !string.IsNullOrEmpty(dicName)) - { - innerObject[dynamicTranslateInfo.ColumnValue] = translateDataList[dicName].Where(t => t.Code.ToLower() == innerObject[dynamicTranslateInfo.ColumnValue].ToString().ToLower()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefault(); + foreach (var innerItem in innerArrays) + { + var innerObject = JObject.Parse(innerItem.ToString()); - } - innberJsonList.Add(innerObject); - } + var dicName = innerObject["DictionaryCode"]?.ToString(); - jsonObject[dynamicTranslateInfo.ListName] = JToken.FromObject(innberJsonList); + if (dicName != null && !string.IsNullOrEmpty(dicName)) + { + innerObject[dynamicTranslateInfo.ColumnValue] = translateDataList[dicName].Where(t => t.Code.ToLower() == innerObject[dynamicTranslateInfo.ColumnValue].ToString().ToLower()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefault(); - } + } + innberJsonList.Add(innerObject); - jsonList.Add(jsonObject); + } - } + jsonObject[dynamicTranslateInfo.ListName] = JToken.FromObject(innberJsonList); - jsonDataDic[item.Key] = JToken.FromObject(jsonList); + } - continue; + jsonList.Add(jsonObject); - } + } - - if (item.Type.ToLower() == FrontAudit.Id.GetDescription().ToLower()) - { - List guids = new List(); - arrays.ForEach(x => - { - guids.Add(Guid.Parse(x.ToString())); - }); - jsonDataDic[item.Key] = string.Join(',', await _dictionaryRepository.Where(x => guids.Contains(x.Id)).Select(x => _userInfo.IsEn_Us ? x.Value : x.ValueCN).ToListAsync()); - } - else if (item.Type.ToLower() == FrontAudit.ChildGroup.GetDescription().ToLower()) - { - List guids = new List(); - arrays.ForEach(x => - { - guids.Add(x.ToString()); - }); - jsonDataDic[item.Key] = string.Join(',', await - _dictionaryRepository.Where(x => x.Code == item.Code).GroupJoin( - _dictionaryRepository.Where(x => guids.Contains(x.ChildGroup)), a => a.Id, b => b.ParentId, (a, b) => new - { - parent = b - }).SelectMany(a => a.parent, (m, n) => new - { - value = _userInfo.IsEn_Us ? n.Value : n.ValueCN - }).Select(x => x.value).ToListAsync() - ); - } - - //稽查 后端查询记录出表格数据,但是表格数据需要翻译,显示给出了翻译字典名,翻译的配置 - else if (item.Type.ToLower() == FrontAudit.DictionaryType.GetDescription().ToLower()) - { - - List jsonList = new List(); - - foreach (JToken arraysItem in arrays) - { - var jsonObject = JObject.Parse(arraysItem.ToString()); - try - { - if (jsonObject["DictionaryCode"] != null && jsonObject["DictionaryCode"].ToString() != string.Empty) - { - - jsonObject[item.Code] = await _dictionaryRepository.Where(x => x.Code == jsonObject["DictionaryCode"].ToString()).Join(_dictionaryRepository.Where(x => x.Code == jsonObject[item.Code].ToString()), a => a.Id, b => b.ParentId, (a, b) => new - { - value = _userInfo.IsEn_Us ? b.Value : b.ValueCN - }).Select(x => x.value).FirstOrDefaultAsync(); - - } - jsonList.Add(jsonObject); - - - } - catch (Exception) - { - jsonList.Add(jsonObject); - - } - } - - - jsonDataDic[item.Key] = JToken.FromObject(jsonList); - } - else - { - List guids = new List(); - arrays.ForEach(x => - { - guids.Add(x.ToString()); - }); - jsonDataDic[item.Key] = string.Join(',', await - _dictionaryRepository.Where(x => x.Code == item.Code).GroupJoin( - _dictionaryRepository.Where(x => guids.Contains(x.Code)), a => a.Id, b => b.ParentId, (a, b) => new - { - parent = b - }).SelectMany(a => a.parent, (m, n) => new - { - value = n.ValueCN - }).Select(x => x.value).ToListAsync() - ); - } - } - - //翻译的是单个字段 - else - { - //通过字典项的Guid 翻译 - if (item.Type.ToLower() == FrontAudit.Id.GetDescription().ToLower()) - { - Guid guid = Guid.Parse(value.ToString()); - jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Id == guid).Select(x => _userInfo.IsEn_Us ? x.Value : x.ValueCN).FirstOrDefaultAsync(); - } - else if (item.Type.ToLower() == FrontAudit.ChildGroup.GetDescription().ToLower()) - { - jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Code == item.Code).Join(_dictionaryRepository.Where(x => x.ChildGroup == value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new - { - value = _userInfo.IsEn_Us ? b.Value : b.ValueCN - }).Select(x => x.value).FirstOrDefaultAsync(); - } - //通过字典项的code 翻译 枚举或者 bool - else - { - jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Code == item.Code).Join(_dictionaryRepository.Where(x => x.Code == value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new - { - value = _userInfo.IsEn_Us ? b.Value : b.ValueCN - }).Select(x => x.value).FirstOrDefaultAsync(); - } - } - } - catch (Exception) - { - } - } - return JsonConvert.SerializeObject(jsonDataDic); - } - - - - - /// - /// 格式化日期和时间 - /// - /// 稽查数据 - /// - private async Task SetDataInspectionDateType(DataInspection Data) - { - var list = await (from parent in _frontAuditConfigRepository.AsQueryable().Where(x => x.Identification == Data.Identification) - join child in _frontAuditConfigRepository.AsQueryable().Where(x => x.EnumType == "Date") on parent.Id equals child.ParentId - select new DateDto() - { - Code = child.Code, - DateType = child.DateType, - }).ToListAsync(); - - var JsonData = (JsonConvert.DeserializeObject>(Data.JsonDetail)).IfNullThrowException(); - - foreach (var item in JsonData.Keys) - { - var datefirst = list.FirstOrDefault(x => x.Code.ToLower() == item.ToLower()); - if (datefirst != null && !IsNullOrEmpty(JsonData[item])) - { - try - { - if (datefirst.DateType == FrontAuditDateType.Date.GetDescription()) - { - JsonData[item] = DateTime.Parse(JsonData[item].ToString()!).ToString("yyyy-MM-dd"); - } - - if (datefirst.DateType == FrontAuditDateType.DateTime.GetDescription()) - { - JsonData[item] = DateTime.Parse(JsonData[item].ToString()!).ToString("yyyy-MM-dd HH:mm:ss"); - } - } - catch (Exception) - { - continue; - } - } - - } - Data.JsonDetail = JsonConvert.SerializeObject(JsonData); - - return Data; - } - - /// - /// IsNullOrEmpty - /// - /// - /// - private bool IsNullOrEmpty(object value) - { - if (value == null || value.ToString() == string.Empty) - { - return true; - } - else - { - return false; - } - } - - - - /// - /// 获取子数据 - /// - /// - /// - [HttpGet] - public async Task> GetAuditConfigChildList(Guid frontAuditConfigId) - { - //var list = await (from data in _repository.GetQueryable().Where(x => x.Id == frontAuditConfigId) - // join childrenType in _repository.GetQueryable() on data.Id equals childrenType.ParentId - // select childrenType).OrderBy(x => x.Sort).ToListAsync(); - //return list; - - var list = await _frontAuditConfigRepository.Where(t => t.ParentId == frontAuditConfigId).OrderBy(x => x.Sort).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - - foreach (var item in list) - { - item.TableConfigList = JsonConvert.DeserializeObject>(item.TableConfigJsonStr) ?? new List(); - item.UrlConfig = JsonConvert.DeserializeObject(item.UrlConfigJsonStr) ?? new UrlConfig(); - } - - return list; - } - - /// - /// 完全复制其他子项到当前项 - /// - /// - /// - [HttpPost] - public async Task FullyReplicated(FullyReplicated fully) - { - await _frontAuditConfigRepository.DeleteFromQueryAsync(x => x.ParentId == fully.ToItemId); - var list = await _frontAuditConfigRepository.Where(x => x.ParentId == fully.FromItemId).ToListAsync(); - list.ForEach(x => - { - x.Id = NewId.NextGuid(); - x.ParentId = fully.ToItemId; - }); - await _frontAuditConfigRepository.AddRangeAsync(list); - await _frontAuditConfigRepository.SaveChangesAsync(); - return ResponseOutput.Ok(); - } - - - /// - /// Cope子项数据 - /// - /// - /// - [HttpPost] - public async Task CopyOtherToThisItem(CopyOtherToThisItem item) - { - - var lists = _frontAuditConfigRepository.Where(x => x.ParentId == item.AddItemGuid).ToList(); - - var additem = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == item.AddItemGuid); - - var alllist = _frontAuditConfigRepository.Where(x => item.DataSourceGuids.Contains(x.ParentId)).ToList().GroupBy(x => new { x.ValueCN }, (key, lst) => new FrontAuditConfig - { - Sort = lst.Select(x => x.Sort).FirstOrDefault(), - TableConfigJsonStr = lst.Select(x => x.TableConfigJsonStr).FirstOrDefault(), - UrlConfigJsonStr = lst.Select(x => x.UrlConfigJsonStr).FirstOrDefault(), - IsShowByTrialConfig = lst.Select(x => x.IsShowByTrialConfig).FirstOrDefault(), - TrialConfigRelyFieldName = lst.Select(x => x.TrialConfigRelyFieldName).FirstOrDefault(), - Code = lst.Max(x => x.Code), - ConfigType = lst.Select(x => x.ConfigType).FirstOrDefault(), - CreateTime = DateTime.Now, - Description = lst.Select(x => x.Description).FirstOrDefault(), - //EnumList = lst.Select(x => x.EnumList).FirstOrDefault(), - //IsConfig = lst.Select(x => x.IsConfig).FirstOrDefault(), - IsShowParent = lst.Select(x => x.IsShowParent).FirstOrDefault(), - ParentId = item.AddItemGuid, - CreateUserId = _userInfo.Id, - IsEnable = lst.Select(x => x.IsEnable).FirstOrDefault(), - DictionaryKey = lst.Select(x => x.DictionaryKey).FirstOrDefault(), - EnumType = lst.Select(x => x.EnumType).FirstOrDefault(), - UpdateTime = DateTime.Now, - ValueCN = lst.Select(x => x.ValueCN).FirstOrDefault(), - Value = lst.Max(x => x.Value), - UpdateUserId = _userInfo.Id, - ChildrenTypeId = additem?.ChildrenTypeId, - ModuleTypeId = additem?.ModuleTypeId, - ObjectTypeId = additem?.ObjectTypeId, - OptTypeId = additem?.OptTypeId, - DictionaryCode = lst.Max(x => x.DictionaryCode), - DictionaryType = lst.Max(x => x.DictionaryType), - DateType = lst.Select(x => x.DateType).FirstOrDefault(), - ForeignKeyValue = lst.Select(x => x.ForeignKeyValue).FirstOrDefault(), - ForeignKeyText = lst.Select(x => x.ForeignKeyText).FirstOrDefault(), - ForeignKeyTableName = lst.Select(x => x.ForeignKeyTableName).FirstOrDefault(), - DataType = lst.Select(x => x.DataType).FirstOrDefault(), - Id = NewId.NextGuid()//新id, - }).ToList(); - - // 获取已存在的所有名称 - var names = lists.Select(x => x.ValueCN).ToList(); - - // 获取不存在的数据 - var list = alllist.Where(x => !names.Contains(x.ValueCN)).ToList(); - - // 获取要添加的name - var addvaluecns = list.Select(x => x.ValueCN); - - // 获取要修改的数据 - var neewupdate = lists.Where(x => !addvaluecns.Contains(x.ValueCN)); - - neewupdate.ForEach(x => - { - var item = alllist.FirstOrDefault(y => y.ValueCN == x.ValueCN); - if (item != null) - { - x.Code = item.Code; - x.Value = !item.Code.IsNullOrEmpty() ? item.Value : x.Value; - x.DictionaryType = !item.DictionaryType.IsNullOrEmpty() ? item.DictionaryType : x.DictionaryType; - x.DictionaryCode = !item.DictionaryCode.IsNullOrEmpty() ? item.DictionaryCode : x.DictionaryCode; - x.DataType = !item.DataType.IsNullOrEmpty() ? item.DataType : x.DataType; - x.DateType = !item.DateType.IsNullOrEmpty() ? item.DateType : x.DateType; - x.DictionaryKey = !item.DictionaryKey.IsNullOrEmpty() ? item.DictionaryKey : x.DictionaryKey; - x.IsShowParent = /*!item.IsShowParent == null ?*/ item.IsShowParent /*: x.IsShowParent*/; - x.ForeignKeyTableName = !item.ForeignKeyTableName.IsNullOrEmpty() ? item.ForeignKeyTableName : x.ForeignKeyTableName; - x.ForeignKeyText = !item.ForeignKeyText.IsNullOrEmpty() ? item.ForeignKeyText : x.ForeignKeyText; - x.ForeignKeyValue = !item.ForeignKeyValue.IsNullOrEmpty() ? item.ForeignKeyValue : x.ForeignKeyValue; - x.EnumType = !item.EnumType.IsNullOrEmpty() ? item.EnumType : x.EnumType; - } - - }); - - - await _repository.UpdateRange(neewupdate); - await _repository.AddRangeAsync(list); - await _repository.SaveChangesAsync(); - - return ResponseOutput.Ok(); - } - - - /// - /// 获取Description - /// - /// - /// - [HttpGet] - public async Task> GetModuleTypeDescriptionList(Guid moduleTypeId) - { - var result =( await _frontAuditConfigRepository.Where(x => x.ModuleTypeId == moduleTypeId && x.ObjectTypeId != null && x.OptTypeId != null && x.Description.Length > 0).Select(x => new { x.Description, x.DescriptionCN, x.Sort }).OrderBy(t => t.Sort).ToListAsync() - ).Select(t => _userInfo.IsEn_Us? t.Description:t.DescriptionCN).Distinct().ToList(); - return result; - } - - /// - /// 获取列表 - /// - /// - /// - [HttpPost] - public async Task> GetFrontAuditConfigList(FrontAuditConfigQuery iq) - { - var query = from data in _repository.GetQueryable() - join childrenType in _repository.GetQueryable() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp - from leftchildrenType in childrenTypetemp.DefaultIfEmpty() - join ModuleType in _repository.GetQueryable() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp - from leftModuleType in ModuleTypetemp.DefaultIfEmpty() - join OptTypeId in _repository.GetQueryable() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp - from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty() - join ObjectTypeId in _repository.GetQueryable() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp - from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty() - select new FrontAuditConfigView() - { - IsShowParent = data.IsShowParent, - ChildrenTypeId = data.ChildrenTypeId, - Code = data.Code, - ConfigType = data.ConfigType, - CreateTime = data.CreateTime, - CreateUserId = data.CreateUserId, - Description = data.Description, - DescriptionCN=data.DescriptionCN, - IsConfig = data.IsConfig, - IsEnable = data.IsEnable, - ModuleTypeId = data.ModuleTypeId, - Id = data.Id, - ParentId = data.ParentId, - UpdateTime = data.UpdateTime, - Value = data.Value, - ChildrenTypeValueCN = leftchildrenType.ValueCN, - ModuleTypeValue = leftModuleType.Value, - ModuleTypeValueCN = leftModuleType.ValueCN, - OptTypeId = data.OptTypeId, - OptTypeValue = leftOptTypeId.Value, - OptTypeValueCN = leftOptTypeId.ValueCN, - UpdateUserId = data.UpdateUserId, - Sort = data.Sort, - ValueCN = data.ValueCN, - ChildrenTypeValue = leftchildrenType.Value, - - DictionaryKey = data.DictionaryKey, - EnumType = data.EnumType, - ObjectTypeId = data.ObjectTypeId, - ObjectTypeValue = leftObjectTypeIdtemp.Value, - ObjectTypeValueCN = leftObjectTypeIdtemp.ValueCN, - IsShowByTrialConfig = data.IsShowByTrialConfig, - TrialConfigRelyFieldName = data.TrialConfigRelyFieldName, - - Identification = data.Identification, - IsHaveReason = data.IsHaveReason, - IsHaveSign = data.IsHaveSign, - IsFinish = data.IsFinish, - IsJoinPlan = data.IsJoinPlan, - DataType = data.DataType, - ChildDataLabel = data.ChildDataLabel, - ChildDataValue = data.ChildDataValue, - IsSpecialType = data.IsSpecialType, - DateType = data.DataType, - DictionaryCode = data.DictionaryCode, - DictionaryType = data.DictionaryType, - InterfaceName = data.InterfaceName, - - UrlConfigJsonStr = data.UrlConfigJsonStr, - TableConfigJsonStr = data.TableConfigJsonStr, - }; - - query = query - .WhereIf(!iq.Value.IsNullOrEmpty(), x => x.Value == iq.Value) - .WhereIf(!iq.ValueCN.IsNullOrEmpty(), x => x.ValueCN == iq.ValueCN) - .WhereIf(!iq.Description.IsNullOrEmpty(), x => x.Description == iq.Description) - .WhereIf(iq.OptTypeId != null, x => x.OptTypeId == iq.OptTypeId) - .WhereIf(!iq.Code.IsNullOrEmpty(), x => x.Code == iq.Code) - .WhereIf(iq.ChildrenTypeId != null, x => x.ChildrenTypeId == iq.ChildrenTypeId) - .WhereIf(iq.ModuleTypeId != null, x => x.ModuleTypeId == iq.ModuleTypeId) - .WhereIf(iq.ObjectTypeId != null, x => x.ObjectTypeId == iq.ObjectTypeId) - .WhereIf(!iq.ConfigType.IsNullOrEmpty(), x => x.ConfigType == iq.ConfigType); - - return await query.OrderBy(x => x.Sort).ToListAsync(); - } - - - /// - /// 修改排序 - /// - /// - /// - public async Task ChangeFrontAuditSort(List sortDataList) - { - foreach (var item in sortDataList) - { - await _frontAuditConfigRepository.BatchUpdateNoTrackingAsync(x => x.Id == item.Id, x => new FrontAuditConfig - { - Sort = item.Sort - }); - } - await _frontAuditConfigRepository.SaveChangesAsync(); - return ResponseOutput.Ok(); - } - - /// - /// 新增或者修改 - /// - /// - /// - public async Task AddOrUpdateFrontAuditConfig(FrontAuditConfigAddOrEdit addOrEditFrontAuditConfig) - { - - if (await _frontAuditConfigRepository.AnyAsync(x => x.Identification != string.Empty && x.Identification == addOrEditFrontAuditConfig.Identification && x.Id != addOrEditFrontAuditConfig.Id && x.ConfigType == "M" && addOrEditFrontAuditConfig.ConfigType == "M")) - { - //---标识重复 - return ResponseOutput.NotOk(_localizer["FrontAudit_IdDup"]); - } - - if (await _frontAuditConfigRepository.AnyAsync(x => x.Description == addOrEditFrontAuditConfig.Description && x.Id != addOrEditFrontAuditConfig.Id && x.ConfigType == "M" && addOrEditFrontAuditConfig.ConfigType == "M")) - { - //---名称重复 - return ResponseOutput.NotOk(_localizer["FrontAudit_NameDup"]); - } - - if (addOrEditFrontAuditConfig.ConfigType == "C") - { - addOrEditFrontAuditConfig.Description = ""; - } - - addOrEditFrontAuditConfig.TableConfigJsonStr = JsonConvert.SerializeObject(addOrEditFrontAuditConfig.TableConfigList); - addOrEditFrontAuditConfig.UrlConfigJsonStr = JsonConvert.SerializeObject(addOrEditFrontAuditConfig.UrlConfig); - - var entity = await _frontAuditConfigRepository.InsertOrUpdateAsync(addOrEditFrontAuditConfig, true); - - return ResponseOutput.Ok(entity.Id.ToString()); - - } - - /// - /// 删除 - /// - /// - /// - [HttpDelete("{frontAuditConfigId:guid}")] - public async Task DeleteFrontAuditConfig(Guid frontAuditConfigId) - { - if (await _frontAuditConfigRepository.AnyAsync(x => x.ParentId == frontAuditConfigId)) - { - //---存在子类 不能删除 - return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]); - } - var success = await _repository.BatchDeleteAsync(t => t.Id == frontAuditConfigId); - return ResponseOutput.Result(success); - } - - - } + jsonDataDic[item.Key] = JToken.FromObject(jsonList); + + continue; + + } + + + if (item.Type.ToLower() == FrontAudit.Id.GetDescription().ToLower()) + { + List guids = new List(); + arrays.ForEach(x => + { + guids.Add(Guid.Parse(x.ToString())); + }); + jsonDataDic[item.Key] = string.Join(',', await _dictionaryRepository.Where(x => guids.Contains(x.Id)).Select(x => _userInfo.IsEn_Us ? x.Value : x.ValueCN).ToListAsync()); + } + else if (item.Type.ToLower() == FrontAudit.ChildGroup.GetDescription().ToLower()) + { + List guids = new List(); + arrays.ForEach(x => + { + guids.Add(x.ToString()); + }); + jsonDataDic[item.Key] = string.Join(',', await + _dictionaryRepository.Where(x => x.Code == item.Code).GroupJoin( + _dictionaryRepository.Where(x => guids.Contains(x.ChildGroup)), a => a.Id, b => b.ParentId, (a, b) => new + { + parent = b + }).SelectMany(a => a.parent, (m, n) => new + { + value = _userInfo.IsEn_Us ? n.Value : n.ValueCN + }).Select(x => x.value).ToListAsync() + ); + } + + //稽查 后端查询记录出表格数据,但是表格数据需要翻译,显示给出了翻译字典名,翻译的配置 + else if (item.Type.ToLower() == FrontAudit.DictionaryType.GetDescription().ToLower()) + { + + List jsonList = new List(); + + foreach (JToken arraysItem in arrays) + { + var jsonObject = JObject.Parse(arraysItem.ToString()); + try + { + if (jsonObject["DictionaryCode"] != null && jsonObject["DictionaryCode"].ToString() != string.Empty) + { + + jsonObject[item.Code] = await _dictionaryRepository.Where(x => x.Code == jsonObject["DictionaryCode"].ToString()).Join(_dictionaryRepository.Where(x => x.Code == jsonObject[item.Code].ToString()), a => a.Id, b => b.ParentId, (a, b) => new + { + value = _userInfo.IsEn_Us ? b.Value : b.ValueCN + }).Select(x => x.value).FirstOrDefaultAsync(); + + } + jsonList.Add(jsonObject); + + + } + catch (Exception) + { + jsonList.Add(jsonObject); + + } + } + + + jsonDataDic[item.Key] = JToken.FromObject(jsonList); + } + else + { + List guids = new List(); + arrays.ForEach(x => + { + guids.Add(x.ToString()); + }); + jsonDataDic[item.Key] = string.Join(',', await + _dictionaryRepository.Where(x => x.Code == item.Code).GroupJoin( + _dictionaryRepository.Where(x => guids.Contains(x.Code)), a => a.Id, b => b.ParentId, (a, b) => new + { + parent = b + }).SelectMany(a => a.parent, (m, n) => new + { + value = n.ValueCN + }).Select(x => x.value).ToListAsync() + ); + } + } + + //翻译的是单个字段 + else + { + //通过字典项的Guid 翻译 + if (item.Type.ToLower() == FrontAudit.Id.GetDescription().ToLower()) + { + Guid guid = Guid.Parse(value.ToString()); + jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Id == guid).Select(x => _userInfo.IsEn_Us ? x.Value : x.ValueCN).FirstOrDefaultAsync(); + } + else if (item.Type.ToLower() == FrontAudit.ChildGroup.GetDescription().ToLower()) + { + jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Code == item.Code).Join(_dictionaryRepository.Where(x => x.ChildGroup == value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new + { + value = _userInfo.IsEn_Us ? b.Value : b.ValueCN + }).Select(x => x.value).FirstOrDefaultAsync(); + } + //通过字典项的code 翻译 枚举或者 bool + else + { + jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => x.Code == item.Code).Join(_dictionaryRepository.Where(x => x.Code == value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new + { + value = _userInfo.IsEn_Us ? b.Value : b.ValueCN + }).Select(x => x.value).FirstOrDefaultAsync(); + } + } + } + catch (Exception) + { + } + } + return JsonConvert.SerializeObject(jsonDataDic); + } + + + + + /// + /// 格式化日期和时间 + /// + /// 稽查数据 + /// + private async Task SetDataInspectionDateType(DataInspection Data) + { + var list = await (from parent in _frontAuditConfigRepository.AsQueryable().Where(x => x.Identification == Data.Identification) + join child in _frontAuditConfigRepository.AsQueryable().Where(x => x.EnumType == "Date") on parent.Id equals child.ParentId + select new DateDto() + { + Code = child.Code, + DateType = child.DateType, + }).ToListAsync(); + + var JsonData = (JsonConvert.DeserializeObject>(Data.JsonDetail)).IfNullThrowException(); + + foreach (var item in JsonData.Keys) + { + var datefirst = list.FirstOrDefault(x => x.Code.ToLower() == item.ToLower()); + if (datefirst != null && !IsNullOrEmpty(JsonData[item])) + { + try + { + if (datefirst.DateType == FrontAuditDateType.Date.GetDescription()) + { + JsonData[item] = DateTime.Parse(JsonData[item].ToString()!).ToString("yyyy-MM-dd"); + } + + if (datefirst.DateType == FrontAuditDateType.DateTime.GetDescription()) + { + JsonData[item] = DateTime.Parse(JsonData[item].ToString()!).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + catch (Exception) + { + continue; + } + } + + } + Data.JsonDetail = JsonConvert.SerializeObject(JsonData); + + return Data; + } + + /// + /// IsNullOrEmpty + /// + /// + /// + private bool IsNullOrEmpty(object value) + { + if (value == null || value.ToString() == string.Empty) + { + return true; + } + else + { + return false; + } + } + + + + /// + /// 获取子数据 + /// + /// + /// + [HttpGet] + public async Task> GetAuditConfigChildList(Guid frontAuditConfigId) + { + //var list = await (from data in _repository.GetQueryable().Where(x => x.Id == frontAuditConfigId) + // join childrenType in _repository.GetQueryable() on data.Id equals childrenType.ParentId + // select childrenType).OrderBy(x => x.Sort).ToListAsync(); + //return list; + + var list = await _frontAuditConfigRepository.Where(t => t.ParentId == frontAuditConfigId).OrderBy(x => x.Sort).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + foreach (var item in list) + { + item.TableConfigList = JsonConvert.DeserializeObject>(item.TableConfigJsonStr) ?? new List(); + item.UrlConfig = JsonConvert.DeserializeObject(item.UrlConfigJsonStr) ?? new UrlConfig(); + } + + return list; + } + + /// + /// 完全复制其他子项到当前项 + /// + /// + /// + [HttpPost] + public async Task FullyReplicated(FullyReplicated fully) + { + await _frontAuditConfigRepository.DeleteFromQueryAsync(x => x.ParentId == fully.ToItemId); + var list = await _frontAuditConfigRepository.Where(x => x.ParentId == fully.FromItemId).ToListAsync(); + list.ForEach(x => + { + x.Id = NewId.NextGuid(); + x.ParentId = fully.ToItemId; + }); + await _frontAuditConfigRepository.AddRangeAsync(list); + await _frontAuditConfigRepository.SaveChangesAsync(); + return ResponseOutput.Ok(); + } + + + /// + /// Cope子项数据 + /// + /// + /// + [HttpPost] + public async Task CopyOtherToThisItem(CopyOtherToThisItem item) + { + + var lists = _frontAuditConfigRepository.Where(x => x.ParentId == item.AddItemGuid).ToList(); + + var additem = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == item.AddItemGuid); + + var alllist = _frontAuditConfigRepository.Where(x => item.DataSourceGuids.Contains(x.ParentId)).ToList().GroupBy(x => new { x.ValueCN }, (key, lst) => new FrontAuditConfig + { + Sort = lst.Select(x => x.Sort).FirstOrDefault(), + TableConfigJsonStr = lst.Select(x => x.TableConfigJsonStr).FirstOrDefault(), + UrlConfigJsonStr = lst.Select(x => x.UrlConfigJsonStr).FirstOrDefault(), + IsShowByTrialConfig = lst.Select(x => x.IsShowByTrialConfig).FirstOrDefault(), + TrialConfigRelyFieldName = lst.Select(x => x.TrialConfigRelyFieldName).FirstOrDefault(), + Code = lst.Max(x => x.Code), + ConfigType = lst.Select(x => x.ConfigType).FirstOrDefault(), + CreateTime = DateTime.Now, + Description = lst.Select(x => x.Description).FirstOrDefault(), + //EnumList = lst.Select(x => x.EnumList).FirstOrDefault(), + //IsConfig = lst.Select(x => x.IsConfig).FirstOrDefault(), + IsShowParent = lst.Select(x => x.IsShowParent).FirstOrDefault(), + ParentId = item.AddItemGuid, + CreateUserId = _userInfo.Id, + IsEnable = lst.Select(x => x.IsEnable).FirstOrDefault(), + DictionaryKey = lst.Select(x => x.DictionaryKey).FirstOrDefault(), + EnumType = lst.Select(x => x.EnumType).FirstOrDefault(), + UpdateTime = DateTime.Now, + ValueCN = lst.Select(x => x.ValueCN).FirstOrDefault(), + Value = lst.Max(x => x.Value), + UpdateUserId = _userInfo.Id, + ChildrenTypeId = additem?.ChildrenTypeId, + ModuleTypeId = additem?.ModuleTypeId, + ObjectTypeId = additem?.ObjectTypeId, + OptTypeId = additem?.OptTypeId, + DictionaryCode = lst.Max(x => x.DictionaryCode), + DictionaryType = lst.Max(x => x.DictionaryType), + DateType = lst.Select(x => x.DateType).FirstOrDefault(), + ForeignKeyValue = lst.Select(x => x.ForeignKeyValue).FirstOrDefault(), + ForeignKeyText = lst.Select(x => x.ForeignKeyText).FirstOrDefault(), + ForeignKeyTableName = lst.Select(x => x.ForeignKeyTableName).FirstOrDefault(), + DataType = lst.Select(x => x.DataType).FirstOrDefault(), + Id = NewId.NextGuid()//新id, + }).ToList(); + + // 获取已存在的所有名称 + var names = lists.Select(x => x.ValueCN).ToList(); + + // 获取不存在的数据 + var list = alllist.Where(x => !names.Contains(x.ValueCN)).ToList(); + + // 获取要添加的name + var addvaluecns = list.Select(x => x.ValueCN); + + // 获取要修改的数据 + var neewupdate = lists.Where(x => !addvaluecns.Contains(x.ValueCN)); + + neewupdate.ForEach(x => + { + var item = alllist.FirstOrDefault(y => y.ValueCN == x.ValueCN); + if (item != null) + { + x.Code = item.Code; + x.Value = !item.Code.IsNullOrEmpty() ? item.Value : x.Value; + x.DictionaryType = !item.DictionaryType.IsNullOrEmpty() ? item.DictionaryType : x.DictionaryType; + x.DictionaryCode = !item.DictionaryCode.IsNullOrEmpty() ? item.DictionaryCode : x.DictionaryCode; + x.DataType = !item.DataType.IsNullOrEmpty() ? item.DataType : x.DataType; + x.DateType = !item.DateType.IsNullOrEmpty() ? item.DateType : x.DateType; + x.DictionaryKey = !item.DictionaryKey.IsNullOrEmpty() ? item.DictionaryKey : x.DictionaryKey; + x.IsShowParent = /*!item.IsShowParent == null ?*/ item.IsShowParent /*: x.IsShowParent*/; + x.ForeignKeyTableName = !item.ForeignKeyTableName.IsNullOrEmpty() ? item.ForeignKeyTableName : x.ForeignKeyTableName; + x.ForeignKeyText = !item.ForeignKeyText.IsNullOrEmpty() ? item.ForeignKeyText : x.ForeignKeyText; + x.ForeignKeyValue = !item.ForeignKeyValue.IsNullOrEmpty() ? item.ForeignKeyValue : x.ForeignKeyValue; + x.EnumType = !item.EnumType.IsNullOrEmpty() ? item.EnumType : x.EnumType; + } + + }); + + + await _repository.UpdateRange(neewupdate); + await _repository.AddRangeAsync(list); + await _repository.SaveChangesAsync(); + + return ResponseOutput.Ok(); + } + + + /// + /// 获取Description + /// + /// + /// + [HttpGet] + public async Task> GetModuleTypeDescriptionList(Guid moduleTypeId) + { + var result =( await _frontAuditConfigRepository.Where(x => x.ModuleTypeId == moduleTypeId && x.ObjectTypeId != null && x.OptTypeId != null && x.Description.Length > 0).Select(x => new { x.Description, x.DescriptionCN, x.Sort }).OrderBy(t => t.Sort).ToListAsync() + ).Select(t => _userInfo.IsEn_Us? t.Description:t.DescriptionCN).Distinct().ToList(); + return result; + } + + /// + /// 获取列表 + /// + /// + /// + [HttpPost] + public async Task> GetFrontAuditConfigList(FrontAuditConfigQuery iq) + { + var query = from data in _repository.GetQueryable() + join childrenType in _repository.GetQueryable() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp + from leftchildrenType in childrenTypetemp.DefaultIfEmpty() + join ModuleType in _repository.GetQueryable() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp + from leftModuleType in ModuleTypetemp.DefaultIfEmpty() + join OptTypeId in _repository.GetQueryable() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp + from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty() + join ObjectTypeId in _repository.GetQueryable() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp + from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty() + select new FrontAuditConfigView() + { + IsShowParent = data.IsShowParent, + ChildrenTypeId = data.ChildrenTypeId, + Code = data.Code, + ConfigType = data.ConfigType, + CreateTime = data.CreateTime, + CreateUserId = data.CreateUserId, + Description = data.Description, + DescriptionCN=data.DescriptionCN, + IsConfig = data.IsConfig, + IsEnable = data.IsEnable, + ModuleTypeId = data.ModuleTypeId, + Id = data.Id, + ParentId = data.ParentId, + UpdateTime = data.UpdateTime, + Value = data.Value, + ChildrenTypeValueCN = leftchildrenType.ValueCN, + ModuleTypeValue = leftModuleType.Value, + ModuleTypeValueCN = leftModuleType.ValueCN, + OptTypeId = data.OptTypeId, + OptTypeValue = leftOptTypeId.Value, + OptTypeValueCN = leftOptTypeId.ValueCN, + UpdateUserId = data.UpdateUserId, + Sort = data.Sort, + ValueCN = data.ValueCN, + ChildrenTypeValue = leftchildrenType.Value, + + DictionaryKey = data.DictionaryKey, + EnumType = data.EnumType, + ObjectTypeId = data.ObjectTypeId, + ObjectTypeValue = leftObjectTypeIdtemp.Value, + ObjectTypeValueCN = leftObjectTypeIdtemp.ValueCN, + IsShowByTrialConfig = data.IsShowByTrialConfig, + TrialConfigRelyFieldName = data.TrialConfigRelyFieldName, + + Identification = data.Identification, + IsHaveReason = data.IsHaveReason, + IsHaveSign = data.IsHaveSign, + IsFinish = data.IsFinish, + IsJoinPlan = data.IsJoinPlan, + DataType = data.DataType, + ChildDataLabel = data.ChildDataLabel, + ChildDataValue = data.ChildDataValue, + IsSpecialType = data.IsSpecialType, + DateType = data.DataType, + DictionaryCode = data.DictionaryCode, + DictionaryType = data.DictionaryType, + InterfaceName = data.InterfaceName, + + UrlConfigJsonStr = data.UrlConfigJsonStr, + TableConfigJsonStr = data.TableConfigJsonStr, + }; + + query = query + .WhereIf(!iq.Value.IsNullOrEmpty(), x => x.Value == iq.Value) + .WhereIf(!iq.ValueCN.IsNullOrEmpty(), x => x.ValueCN == iq.ValueCN) + .WhereIf(!iq.Description.IsNullOrEmpty(), x => x.Description == iq.Description) + .WhereIf(iq.OptTypeId != null, x => x.OptTypeId == iq.OptTypeId) + .WhereIf(!iq.Code.IsNullOrEmpty(), x => x.Code == iq.Code) + .WhereIf(iq.ChildrenTypeId != null, x => x.ChildrenTypeId == iq.ChildrenTypeId) + .WhereIf(iq.ModuleTypeId != null, x => x.ModuleTypeId == iq.ModuleTypeId) + .WhereIf(iq.ObjectTypeId != null, x => x.ObjectTypeId == iq.ObjectTypeId) + .WhereIf(!iq.ConfigType.IsNullOrEmpty(), x => x.ConfigType == iq.ConfigType); + + return await query.OrderBy(x => x.Sort).ToListAsync(); + } + + + /// + /// 修改排序 + /// + /// + /// + public async Task ChangeFrontAuditSort(List sortDataList) + { + foreach (var item in sortDataList) + { + await _frontAuditConfigRepository.BatchUpdateNoTrackingAsync(x => x.Id == item.Id, x => new FrontAuditConfig + { + Sort = item.Sort + }); + } + await _frontAuditConfigRepository.SaveChangesAsync(); + return ResponseOutput.Ok(); + } + + /// + /// 新增或者修改 + /// + /// + /// + public async Task AddOrUpdateFrontAuditConfig(FrontAuditConfigAddOrEdit addOrEditFrontAuditConfig) + { + + if (await _frontAuditConfigRepository.AnyAsync(x => x.Identification != string.Empty && x.Identification == addOrEditFrontAuditConfig.Identification && x.Id != addOrEditFrontAuditConfig.Id && x.ConfigType == "M" && addOrEditFrontAuditConfig.ConfigType == "M")) + { + //---标识重复 + return ResponseOutput.NotOk(_localizer["FrontAudit_IdDup"]); + } + + if (await _frontAuditConfigRepository.AnyAsync(x => x.Description == addOrEditFrontAuditConfig.Description && x.Id != addOrEditFrontAuditConfig.Id && x.ConfigType == "M" && addOrEditFrontAuditConfig.ConfigType == "M")) + { + //---名称重复 + return ResponseOutput.NotOk(_localizer["FrontAudit_NameDup"]); + } + + if (addOrEditFrontAuditConfig.ConfigType == "C") + { + addOrEditFrontAuditConfig.Description = ""; + } + + addOrEditFrontAuditConfig.TableConfigJsonStr = JsonConvert.SerializeObject(addOrEditFrontAuditConfig.TableConfigList); + addOrEditFrontAuditConfig.UrlConfigJsonStr = JsonConvert.SerializeObject(addOrEditFrontAuditConfig.UrlConfig); + + var entity = await _frontAuditConfigRepository.InsertOrUpdateAsync(addOrEditFrontAuditConfig, true); + + return ResponseOutput.Ok(entity.Id.ToString()); + + } + + /// + /// 删除 + /// + /// + /// + [HttpDelete("{frontAuditConfigId:guid}")] + public async Task DeleteFrontAuditConfig(Guid frontAuditConfigId) + { + if (await _frontAuditConfigRepository.AnyAsync(x => x.ParentId == frontAuditConfigId)) + { + //---存在子类 不能删除 + return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]); + } + var success = await _repository.BatchDeleteAsync(t => t.Id == frontAuditConfigId); + return ResponseOutput.Result(success); + } + + + } } diff --git a/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs b/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs index 9bd9e5ac3..fa9559eec 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs @@ -11,7 +11,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common.Dto public string Code { get; set; } public string DateType { get; set; } - } + + public string Identification { get; set; } + } public class TypeNameDto {