849 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			849 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
| //--------------------------------------------------------------------
 | |
| //     此代码由T4模板自动生成  byzhouhang 20210918
 | |
| //	   生成时间 2022-03-28 16:46:23 
 | |
| //     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
 | |
| //--------------------------------------------------------------------
 | |
| 
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| using IRaCIS.Core.Application.Interfaces;
 | |
| using IRaCIS.Core.Application.ViewModel;
 | |
| using Castle.Core.Internal;
 | |
| using MassTransit;
 | |
| using IRaCIS.Core.Infra.EFCore.Common.Dto;
 | |
| using Microsoft.Data.SqlClient;
 | |
| using Newtonsoft.Json;
 | |
| using Newtonsoft.Json.Linq;
 | |
| using IRaCIS.Core.Domain.Share;
 | |
| 
 | |
| namespace IRaCIS.Core.Application.Service 
 | |
| {
 | |
| 
 | |
|     /// <summary>
 | |
|     /// FrontAuditConfigService
 | |
|     /// </summary>	
 | |
|     [ApiExplorerSettings(GroupName = "Reviewer")]
 | |
|     public class FrontAuditConfigService : BaseService, IFrontAuditConfigService
 | |
|     {
 | |
| 
 | |
|         private readonly IRepository<FrontAuditConfig> _frontAuditConfigRepository;
 | |
|         private readonly IRepository<QCChallengeDialog> _qCChallengeDialogRepository;
 | |
|         private readonly IRepository<DataInspection> _dataInspectionRepository;
 | |
|         private readonly IRepository<QCChallenge> _qCChallengeRepository;
 | |
|         private readonly IRepository<Dictionary> _dictionaryRepository;
 | |
|         private readonly IRepository<Trial> _trialRepository;
 | |
|         private readonly IRepository<CheckChallengeDialog> _checkChallengeDialogRepository;
 | |
| 
 | |
|         public FrontAuditConfigService(IRepository<FrontAuditConfig> frontAuditConfigRepository,
 | |
|             IRepository<QCChallengeDialog> qCChallengeDialogRepository,
 | |
|               IRepository<DataInspection> dataInspectionRepository,
 | |
|             IRepository<QCChallenge> qCChallengeRepository,
 | |
|              IRepository<Dictionary> dictionaryRepository,
 | |
|               IRepository<Trial> trialRepository,
 | |
|             IRepository<CheckChallengeDialog> checkChallengeDialogRepository
 | |
|             )
 | |
|         {
 | |
|             _frontAuditConfigRepository = frontAuditConfigRepository;
 | |
|             this._qCChallengeDialogRepository = qCChallengeDialogRepository;
 | |
|             this._dataInspectionRepository = dataInspectionRepository;
 | |
|             this._qCChallengeRepository = qCChallengeRepository;
 | |
|             this._dictionaryRepository = dictionaryRepository;
 | |
|             this._trialRepository = trialRepository;
 | |
|             this._checkChallengeDialogRepository = checkChallengeDialogRepository;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取数据库所有表
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<TableList>> GetDatabaseTables()
 | |
|         {
 | |
|             return await _frontAuditConfigRepository._dbContext.GetTableList().ToListAsync();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取查询对象
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<AccessToDialogueOutDto>> GetDialogList(AccessToDialogueInDto inDto)
 | |
|         {
 | |
|             List<AccessToDialogueOutDto> data = new List<AccessToDialogueOutDto>();
 | |
| 
 | |
|             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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取表列名
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<TableList>> GetTableColumn(string tableName)
 | |
|         {
 | |
|             return await _frontAuditConfigRepository._dbContext.GetTableColumn(tableName).ToListAsync();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 复制配置项及其子项
 | |
|         /// </summary>
 | |
|         /// <param name="input">传入对象</param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task CopyFrontAuditConfigItem(CopyFrontAuditConfigItemDto input)
 | |
|         {
 | |
|             var id = NewId.NextGuid();
 | |
|             List<FrontAuditConfig> frontAudits= new List<FrontAuditConfig>();
 | |
| 
 | |
|             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();
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 批量添加字段
 | |
|         /// </summary>
 | |
|         /// <param name="data">数据集</param>
 | |
|         /// <returns></returns>
 | |
|         public async Task BatchAddFrontAudit(BatchAddFrontAudit data)
 | |
|         {
 | |
|             var maxSort = await _frontAuditConfigRepository.Where(x => x.ParentId == data.ParentId).MaxAsync(x => x.Sort);
 | |
| 
 | |
|             List<FrontAuditConfig>  fronts=new List<FrontAuditConfig>();
 | |
|             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);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 翻译稽查数据
 | |
|         /// </summary>
 | |
|         /// <param name="dto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<string>> SetInspectionEnumValue(SetInspectionEnumValueDto dto)
 | |
|         {
 | |
|             return await SetInspectionEnumValueDataList(dto);
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 翻译稽查数据
 | |
|         /// </summary>
 | |
|         /// <param name="dto">传入Dto</param>
 | |
|         /// <returns></returns>
 | |
|         private async Task<List<string>> SetInspectionEnumValueDataList(SetInspectionEnumValueDto dto)
 | |
|         {
 | |
|             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
 | |
|             }).ToListAsync();
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|             var listIdentification = auditDatas.Select(x => x.Identification).ToList();
 | |
|             foreach (var item in auditDatas)
 | |
|             {
 | |
|                 Dictionary<string, object> jsonDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(item.JsonStr);
 | |
| 
 | |
|               
 | |
|                 item.JsonStr = jsonDict["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["Data"] = JsonConvert.DeserializeObject<object>(item.JsonStr) ;
 | |
| 
 | |
|                 item.JsonStr = JsonConvert.SerializeObject(jsonDict);
 | |
|             }
 | |
| 
 | |
|             var resultJsonStrList = new List<string>();
 | |
| 
 | |
|             dto.AuditDataIds.ForEach(x =>
 | |
|             {
 | |
|                 var auditData = auditDatas.FirstOrDefault(y => y.Id == x);
 | |
|                 resultJsonStrList.Add(auditData?.JsonStr);
 | |
|             });
 | |
| 
 | |
|             if (resultJsonStrList.Count() < 2)
 | |
|             {
 | |
|                 resultJsonStrList.Add(String.Empty);
 | |
|             }
 | |
|             return resultJsonStrList;
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 格式化日期和时间
 | |
|         /// </summary>
 | |
|         /// <param name="Data">稽查数据</param>
 | |
|         /// <returns></returns>
 | |
|         private async Task<string> SetDataInspectionDateType(List<string> 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<IDictionary<string, object>>(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 == "Date")
 | |
|                         {
 | |
|                             jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd");
 | |
|                         }
 | |
| 
 | |
|                         if (datefirst.DateType == "DateTime")
 | |
|                         {
 | |
|                             jsonDataDic[item] = DateTime.Parse(jsonDataDic[item].ToString()).ToString("yyyy-MM-dd HH:mm:ss");
 | |
|                         }
 | |
|                     }
 | |
|                     catch (Exception)
 | |
|                     {
 | |
|                         continue;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|             }
 | |
| 
 | |
|             return JsonConvert.SerializeObject(jsonDataDic);
 | |
| 
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取外键表数据
 | |
|         /// </summary>
 | |
|         /// <param name="Table">表名称</param>
 | |
|         /// <param name="ForeignKeyValue">外键value</param>
 | |
|         /// <param name="ForeignKeyText">要查询的外键值</param>
 | |
|         /// <param name="value">传入的纸</param>
 | |
|         /// <returns></returns>
 | |
|         private async Task<string> GetInspectionEnumValue(List<string> 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<IDictionary<string, object>>(jsonStr);
 | |
|             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<IDictionary<string, object>>(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)
 | |
|                                              };
 | |
|                     jsonDataValueDic[item.Key] = string.Join(",", _frontAuditConfigRepository._dbContext.Database.SqlQuery<ForeignKey>(sql, paravalue).Select(x => x.Text).ToList());
 | |
|                 }
 | |
|             }
 | |
|             return JsonConvert.SerializeObject(jsonDataValueDic);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取枚举
 | |
|         /// </summary>
 | |
|         /// <param name="trialId">标识</param>
 | |
|         /// <param name="identifications">标识</param>
 | |
|         /// <param name="jsonStr">Json对象</param>
 | |
|         /// <returns></returns>
 | |
|         private async Task<string> SetEnum(Guid trialId, List<string> identificationList, string jsonStr)
 | |
|         {
 | |
|             if (jsonStr == null || jsonStr == "null")
 | |
|             {
 | |
|                 return null;
 | |
|             }
 | |
|             var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification))
 | |
|                               join p in _frontAuditConfigRepository.Where(x => x.Code != "AuditState" && x.EnumType == "Dictionary" && x.IsEnable) on u.Id equals p.ParentId
 | |
|                               select new
 | |
|                               {
 | |
|                                   Key = p.Code,
 | |
|                                   Code = p.DictionaryCode,
 | |
|                                   Type = p.DictionaryType
 | |
|                               }).ToListAsync();
 | |
| 
 | |
|             // 添加单双审
 | |
|             var trialtype = await _trialRepository.AsQueryable().Where(x => x.Id == trialId).Select(x => x.QCProcessEnum).FirstOrDefaultAsync();
 | |
| 
 | |
|             list.Add(new
 | |
|             {
 | |
| 
 | |
|                 Key = "AuditState",
 | |
|                 Code = trialtype == TrialQCProcess.SingleAudit ? "AuditStatePE" : "AuditStateRC",
 | |
|                 Type = "Code",
 | |
|             });
 | |
| 
 | |
| 
 | |
|             list = list.GroupBy(x => new { x.Key }, (key, lst) => new
 | |
|             {
 | |
|                 Key = key.Key,
 | |
|                 Code = lst.Max(x => x.Code),
 | |
|                 Type = lst.Max(x => x.Type),
 | |
|             }).ToList();
 | |
| 
 | |
|             var jsonDataDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(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.Type.ToLower() == "id".ToLower())
 | |
|                         {
 | |
|                             List<Guid> guids = new List<Guid>();
 | |
|                             arrays.ForEach(x =>
 | |
|                             {
 | |
|                                 guids.Add(Guid.Parse(x.ToString()));
 | |
|                             });
 | |
|                             jsonDataDic[item.Key] = string.Join(',', await _dictionaryRepository.Where(x => guids.Contains(x.Id)).Select(x => x.ValueCN).ToListAsync());
 | |
|                         }
 | |
|                         else if (item.Type.ToLower() == "ChildGroup".ToLower())
 | |
|                         {
 | |
|                             List<string> guids = new List<string>();
 | |
|                             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 = n.ValueCN
 | |
|                                     }).Select(x => x.value).ToListAsync()
 | |
|                                     );
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             List<string> guids = new List<string>();
 | |
|                             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
 | |
|                     {
 | |
|                         if (item.Type.ToLower() == "id".ToLower())
 | |
|                         {
 | |
|                             Guid guid = Guid.Parse(value.ToString());
 | |
|                             jsonDataDic[item.Key] = await _dictionaryRepository.Where(x => guid == x.Id).Select(x => x.ValueCN).FirstOrDefaultAsync();
 | |
|                         }
 | |
|                         else if (item.Type.ToLower() == "ChildGroup".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 = b.ValueCN
 | |
|                             }).Select(x => x.value).FirstOrDefaultAsync();
 | |
|                         }
 | |
|                         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 = b.ValueCN
 | |
|                             }).Select(x => x.value).FirstOrDefaultAsync();
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 catch (Exception)
 | |
|                 {
 | |
|                 }
 | |
|             }
 | |
|             return JsonConvert.SerializeObject(jsonDataDic);
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 格式化日期和时间
 | |
|         /// </summary>
 | |
|         /// <param name="Data">稽查数据</param>
 | |
|         /// <returns></returns>
 | |
|         private async Task<DataInspection> 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<IDictionary<string, object>>(Data.JsonDetail);
 | |
| 
 | |
|             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 == "Date")
 | |
|                         {
 | |
|                             JsonData[item] = DateTime.Parse(JsonData[item].ToString()).ToString("yyyy-MM-dd");
 | |
|                         }
 | |
| 
 | |
|                         if (datefirst.DateType == "DateTime")
 | |
|                         {
 | |
|                             JsonData[item] = DateTime.Parse(JsonData[item].ToString()).ToString("yyyy-MM-dd HH:mm:ss");
 | |
|                         }
 | |
|                     }
 | |
|                     catch (Exception)
 | |
|                     {
 | |
|                         continue;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|             Data.JsonDetail = JsonConvert.SerializeObject(JsonData);
 | |
| 
 | |
|             return Data;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// IsNullOrEmpty
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         /// <returns></returns>
 | |
|         private bool IsNullOrEmpty(object value)
 | |
|         {
 | |
|             if (value == null || value.ToString() == string.Empty)
 | |
|             {
 | |
|                 return true;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取子数据
 | |
|         /// </summary>
 | |
|         /// <param name="frontAuditConfigId"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpGet]
 | |
|         public async Task<List<FrontAuditConfig>> GetAuditConfigChildList(Guid frontAuditConfigId)
 | |
|         {
 | |
|             var list =await (from data in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.Id == frontAuditConfigId)
 | |
|                        join childrenType in _repository.GetQueryable<FrontAuditConfig>() on data.Id equals childrenType.ParentId 
 | |
|                        select childrenType).OrderBy(x=>x.Sort).ToListAsync();
 | |
|             return list;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 完全复制其他子项到当前项
 | |
|         /// </summary>
 | |
|         /// <param name="fully"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> 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();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Cope子项数据
 | |
|         /// </summary>
 | |
|         /// <param name="item"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> 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(),
 | |
|                 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();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取Description
 | |
|         /// </summary>
 | |
|         /// <param name="moduleTypeId"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpGet]
 | |
|         public async Task<List<string>> GetModuleTypeDescriptionList(Guid moduleTypeId)
 | |
|         {
 | |
|             var result= await _frontAuditConfigRepository.Where(x=>x.ModuleTypeId== moduleTypeId && x.Description!=string.Empty).Select(x=>x.Description).Distinct().ToListAsync();
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取列表
 | |
|         /// </summary>
 | |
|         /// <param name="iq"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
 | |
|         {
 | |
|             var query = from data in _repository.GetQueryable<FrontAuditConfig>()
 | |
|                      join childrenType in _repository.GetQueryable<Dictionary>() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
 | |
|                      from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
 | |
|                      join ModuleType in _repository.GetQueryable<Dictionary>() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
 | |
|                      from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
 | |
|                      join OptTypeId in _repository.GetQueryable<Dictionary>() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
 | |
|                      from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
 | |
|                      join ObjectTypeId in _repository.GetQueryable<Dictionary>() 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,
 | |
|                          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,
 | |
|                      };
 | |
| 
 | |
|             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();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 修改排序
 | |
|         /// </summary>
 | |
|         /// <param name="sortDataList"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<IResponseOutput> ChangeFrontAuditSort(List<FrontAuditSort> 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();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 新增或者修改
 | |
|         /// </summary>
 | |
|         /// <param name="addOrEditFrontAuditConfig"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<IResponseOutput> 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("标识重复");
 | |
|             }
 | |
| 
 | |
|             if (await _frontAuditConfigRepository.AnyAsync(x => x.Description == addOrEditFrontAuditConfig.Description && x.Id != addOrEditFrontAuditConfig.Id && x.ConfigType == "M" && addOrEditFrontAuditConfig.ConfigType == "M"))
 | |
|             {
 | |
|                 return ResponseOutput.NotOk("名称重复");
 | |
|             }
 | |
| 
 | |
|             var entity = await _frontAuditConfigRepository.InsertOrUpdateAsync(addOrEditFrontAuditConfig, true);
 | |
| 
 | |
|             return ResponseOutput.Ok(entity.Id.ToString());
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除
 | |
|         /// </summary>
 | |
|         /// <param name="frontAuditConfigId"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpDelete("{frontAuditConfigId:guid}")]
 | |
|         public async Task<IResponseOutput> DeleteFrontAuditConfig(Guid frontAuditConfigId)
 | |
|         {
 | |
|             if (await _frontAuditConfigRepository.AnyAsync(x => x.ParentId == frontAuditConfigId))
 | |
|             {
 | |
|                 return ResponseOutput.NotOk("存在子类 不能删除");
 | |
|             }
 | |
|             var success = await _repository.BatchDeleteAsync<FrontAuditConfig>(t => t.Id == frontAuditConfigId);
 | |
|             return ResponseOutput.Result(success);
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
| }
 |