1374 lines
		
	
	
		
			64 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			1374 lines
		
	
	
		
			64 KiB
		
	
	
	
		
			C#
		
	
	
//--------------------------------------------------------------------
 | 
						||
//     此代码由T4模板自动生成  byzhouhang 20210918
 | 
						||
//	   生成时间 2022-03-28 16:46:23 
 | 
						||
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
 | 
						||
//--------------------------------------------------------------------
 | 
						||
 | 
						||
using IRaCIS.Application.Contracts;
 | 
						||
using IRaCIS.Core.Application.Interfaces;
 | 
						||
using IRaCIS.Core.Application.ViewModel;
 | 
						||
using IRaCIS.Core.Domain.Models;
 | 
						||
using IRaCIS.Core.Infra.EFCore.Common;
 | 
						||
using MassTransit;
 | 
						||
using Microsoft.AspNetCore.Mvc;
 | 
						||
using Microsoft.Data.SqlClient;
 | 
						||
using Newtonsoft.Json;
 | 
						||
using Newtonsoft.Json.Linq;
 | 
						||
using Npgsql;
 | 
						||
 | 
						||
namespace IRaCIS.Core.Application.Service
 | 
						||
{
 | 
						||
 | 
						||
    /// <summary>
 | 
						||
    /// FrontAuditConfigService
 | 
						||
    /// </summary>	
 | 
						||
    [ApiExplorerSettings(GroupName = "Reviewer")]
 | 
						||
    public class FrontAuditConfigService(IRepository<FrontAuditConfig> _frontAuditConfigRepository,
 | 
						||
        IRepository<QCChallengeDialog> _qCChallengeDialogRepository,
 | 
						||
        IRepository<DataInspection> _dataInspectionRepository,
 | 
						||
        IRepository<QCChallenge> _qCChallengeRepository,
 | 
						||
        IRepository<Dictionary> _dictionaryRepository,
 | 
						||
        IRepository<Trial> _trialRepository,
 | 
						||
           IRepository<TrialAuditShow> _trialAuditShowRepository,
 | 
						||
        IRepository<UserRole> _userRoleRepository,
 | 
						||
 | 
						||
        IRepository<CheckChallengeDialog> _checkChallengeDialogRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IFrontAuditConfigService
 | 
						||
    {
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取数据库所有表
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost]
 | 
						||
        public List<TableList> GetDatabaseTables()
 | 
						||
        {
 | 
						||
            return _frontAuditConfigRepository._dbContext.GetContextTablesList();
 | 
						||
        }
 | 
						||
 | 
						||
        /// <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.CreateUserRole).Select(x => new AccessToDialogueOutDto()
 | 
						||
                    {
 | 
						||
                        CreateTime = x.CreateTime,
 | 
						||
                        CreateUserName = x.CreateUserRole.IdentityUser.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.CreateUserRole).Select(
 | 
						||
                        x => new AccessToDialogueOutDto()
 | 
						||
                        {
 | 
						||
                            CreateTime = x.CreateTime,
 | 
						||
                            CreateUserName = x.CreateUserRole.IdentityUser.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.CreateUserRole).Select(
 | 
						||
                        x => new AccessToDialogueOutDto()
 | 
						||
                        {
 | 
						||
                            CreateTime = x.CreateTime,
 | 
						||
                            CreateUserName = x.CreateUserRole.IdentityUser.UserName,
 | 
						||
                            TalkContent = x.TalkContent
 | 
						||
                        }
 | 
						||
                        ).OrderBy(x => x.CreateTime).ToListAsync();
 | 
						||
                    break;
 | 
						||
 | 
						||
            }
 | 
						||
 | 
						||
            return data;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取表列名
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost]
 | 
						||
        public List<TableList> GetTableColumn(string tableName)
 | 
						||
        {
 | 
						||
            return _frontAuditConfigRepository._dbContext.GetContextTableColumnList(tableName);
 | 
						||
        }
 | 
						||
 | 
						||
        /// <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, dto.AuditDataIds.FirstOrDefault());
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        public async Task<List<string>> 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<Guid> searchGuidList = new List<Guid>() { id };
 | 
						||
 | 
						||
            if (beforeId != Guid.Empty)
 | 
						||
            {
 | 
						||
                searchGuidList.Add(beforeId);
 | 
						||
            }
 | 
						||
 | 
						||
            return await SetInspectionEnumValueDataList(new SetInspectionEnumValueDto() { TrialId = trialId, AuditDataIds = searchGuidList }, id);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 翻译稽查数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="dto"></param>
 | 
						||
        /// <param name="currentInspectionId"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private async Task<List<string>> 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<string, object> jsonDict = (JsonConvert.DeserializeObject<Dictionary<string, object>>(item.JsonStr)).IfNullThrowException();
 | 
						||
 | 
						||
                if (!jsonDict.ContainsKey(nameof(InspectionJsonDetail.CommonData)))
 | 
						||
                {
 | 
						||
                    jsonDict.Add(nameof(InspectionJsonDetail.CommonData), new { });
 | 
						||
                }
 | 
						||
 | 
						||
                //查询关联父层级数据 现在都查询
 | 
						||
                if (1==1)
 | 
						||
                {
 | 
						||
                    //把父层级的数据的 CommonData 数据合并(每一个层级把下面层级需要的数据放在CommonData 里面)  麻烦点是每个层级都需要记录一些信息,而且名称不能重复
 | 
						||
 | 
						||
                    var objectLsit = new List<object>();
 | 
						||
 | 
						||
                    var relationParentDataObjList = await GetRelationParentData(item.Id, item.ObjectRelationParentId, item.ObjectRelationParentId2, item.ObjectRelationParentId3, item.CreateTime, item.BatchId, objectLsit);
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                    var currentCommonDataDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr());
 | 
						||
 | 
						||
                    foreach (var relationParentDataObj in relationParentDataObjList)
 | 
						||
                    {
 | 
						||
                        var otherDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(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);
 | 
						||
                                }
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
 | 
						||
                    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);
 | 
						||
 | 
						||
                //jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject<object>(item.JsonStr);
 | 
						||
                #endregion
 | 
						||
 | 
						||
                #region New
 | 
						||
 | 
						||
                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<object>(str);
 | 
						||
 | 
						||
 | 
						||
                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<object>(str2);
 | 
						||
                #endregion
 | 
						||
 | 
						||
 | 
						||
                #region 后续移除   避免前端看到的不统一  因为采用了新的关联方式,之前数据在Data里面取   现在配置在CommonData 里取 
 | 
						||
                //var dataDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(str);
 | 
						||
                //var commonDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(str2);
 | 
						||
                //foreach (var valuePair in dataDic)
 | 
						||
                //{
 | 
						||
                //    if (!commonDic.ContainsKey(valuePair.Key))
 | 
						||
                //    {
 | 
						||
                //        commonDic.Add(valuePair.Key, valuePair.Value);
 | 
						||
                //    }
 | 
						||
                //}
 | 
						||
 | 
						||
                //jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject<object>(commonDic.ToJsonStr());
 | 
						||
                #endregion
 | 
						||
 | 
						||
 | 
						||
                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;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        private async Task AddJsonObjectToDic(Guid id, Guid? objectRelationParentId, DateTime createTime, Guid batchId, List<object> 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 && relationParentInspection.EntityName!="UserRole")
 | 
						||
                {
 | 
						||
 | 
						||
                    Dictionary<string, object> jsonDic = (JsonConvert.DeserializeObject<Dictionary<string, object>>(relationParentInspection.JsonDetail)).IfNullThrowConvertException();
 | 
						||
 | 
						||
 | 
						||
                    //避免对象信息记录 把  Data里面的信息也取过去 但是加上稽查对象的前缀
 | 
						||
                    var dataDicObj = jsonDic[nameof(InspectionJsonDetail.Data)];
 | 
						||
 | 
						||
                    if (dataDicObj != null)
 | 
						||
                    {
 | 
						||
                        var entityName = relationParentInspection.EntityName;
 | 
						||
 | 
						||
                        IDictionary<string, object> newNamepDic = new Dictionary<string, object>();
 | 
						||
 | 
						||
                        var tempDic = JsonConvert.DeserializeObject<Dictionary<string, object>>(dataDicObj.ToJsonStr());
 | 
						||
 | 
						||
                        foreach (var valuePair in tempDic)
 | 
						||
                        {
 | 
						||
                            newNamepDic.Add(entityName + "_" + valuePair.Key, valuePair.Value);
 | 
						||
                        }
 | 
						||
 | 
						||
 | 
						||
                        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);
 | 
						||
                }
 | 
						||
 | 
						||
                else
 | 
						||
                {
 | 
						||
                    //用户的数据稽查没有  临时处理
 | 
						||
 | 
						||
 | 
						||
                    var userObj = await _userRoleRepository.Where(t => t.Id == objectRelationParentId).Select(t => new { UserRealName = t.IdentityUser.FullName, t.IdentityUser.Phone, t.IdentityUser.UserName, UserType = t.UserTypeRole.UserTypeShortName,t.UserTypeEnum, t.IdentityUser.EMail, t.IdentityUser.OrganizationName }).FirstOrDefaultAsync();
 | 
						||
 | 
						||
                    if (userObj != null)
 | 
						||
                    {
 | 
						||
                        objectLsit.Add(userObj);
 | 
						||
 | 
						||
                    }
 | 
						||
                }
 | 
						||
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        private async Task<List<object>> GetRelationParentData(Guid id, Guid? objectRelationParentId, Guid? objectRelationParentId2, Guid? objectRelationParentId3, DateTime createTime, Guid batchId, List<object> objectLsit)
 | 
						||
        {
 | 
						||
            await AddJsonObjectToDic(id, objectRelationParentId, createTime, batchId, objectLsit);
 | 
						||
            await AddJsonObjectToDic(id, objectRelationParentId2, createTime, batchId, objectLsit);
 | 
						||
 | 
						||
            await AddJsonObjectToDic(id, objectRelationParentId3, createTime, batchId, objectLsit);
 | 
						||
 | 
						||
            return objectLsit;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 格式化日期和时间
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="identificationList"></param>
 | 
						||
        /// <param name="identification"></param>
 | 
						||
        /// <param name="jsonStr"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private async Task<string> SetDataInspectionDateType(List<string> 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<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 == 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);
 | 
						||
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取外键表数据
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="identificationList"></param>
 | 
						||
        /// <param name="jsonStr"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        ///// <param name="Table">表名称</param>
 | 
						||
        ///// <param name="ForeignKeyValue">外键value</param>
 | 
						||
        ///// <param name="ForeignKeyText">要查询的外键值</param>
 | 
						||
        ///// <param name="value">传入的纸</param>
 | 
						||
        private async Task<string> GetInspectionEnumValue(List<string> 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,
 | 
						||
                                  p.ForeignKeyEnText,
 | 
						||
                                  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),
 | 
						||
                ForeignKeyEnText = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyEnText ?? lst.Max(x => x.ForeignKeyEnText),
 | 
						||
                ForeignKeyTable = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyTable ?? lst.Max(x => x.ForeignKeyTable),
 | 
						||
 | 
						||
            }).ToList();
 | 
						||
 | 
						||
            var jsonDataValueDic = (JsonConvert.DeserializeObject<IDictionary<string, object>>(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 (_userInfo.IsEn_Us && !item.ForeignKeyEnText.IsNullOrEmpty())
 | 
						||
                {
 | 
						||
                    ForeignKeyText = item.ForeignKeyEnText;
 | 
						||
 | 
						||
                }
 | 
						||
                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()}'";
 | 
						||
                        }
 | 
						||
 | 
						||
                        if (_frontAuditConfigRepository._dbContext.Database.IsSqlServer())
 | 
						||
                        {
 | 
						||
                            sql = $"select {ForeignKeyText} Text from [{Table}] where {ForeignKeyValue} in (@para)";
 | 
						||
 | 
						||
                        }
 | 
						||
                        else if (_frontAuditConfigRepository._dbContext.Database.IsNpgsql())
 | 
						||
                        {
 | 
						||
                            //sql = $"select {ForeignKeyText} Text from \"{Table}\" where {ForeignKeyValue} = ANY(STRING_TO_ARRAY(@para, ','))";
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            throw new Exception("不支持的数据库");
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        para = $"{JsonData["item"].ToString()}";
 | 
						||
 | 
						||
                        if (_frontAuditConfigRepository._dbContext.Database.IsSqlServer())
 | 
						||
                        {
 | 
						||
                            sql = $"select {ForeignKeyText}  Text from [{Table}] where {ForeignKeyValue} = @para";
 | 
						||
 | 
						||
 | 
						||
                        }
 | 
						||
                        else if (_frontAuditConfigRepository._dbContext.Database.IsNpgsql())
 | 
						||
                        {
 | 
						||
                            sql = $"select \"{ForeignKeyText}\" Text from \"{Table}\" where \"{ForeignKeyValue}\" = @para";
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            throw new Exception("不支持的数据库");
 | 
						||
                        }
 | 
						||
 | 
						||
 | 
						||
                        //https://learn.microsoft.com/zh-tw/ef/core/querying/sql-queries
 | 
						||
 | 
						||
                    }
 | 
						||
 | 
						||
                    if (_frontAuditConfigRepository._dbContext.Database.IsSqlServer())
 | 
						||
                    {
 | 
						||
 | 
						||
                        jsonDataValueDic[item.Key] = string.Join(",", _frontAuditConfigRepository._dbContext.Database.SqlQueryRaw<string>
 | 
						||
                               (sql, new SqlParameter("@para", para)).ToList());
 | 
						||
 | 
						||
                    }
 | 
						||
                    else if (_frontAuditConfigRepository._dbContext.Database.IsNpgsql())
 | 
						||
                    {
 | 
						||
 | 
						||
                        jsonDataValueDic[item.Key] = string.Join(",", _frontAuditConfigRepository._dbContext.Database.SqlQueryRaw<string>
 | 
						||
                               (sql, new NpgsqlParameter("@para", para)).ToList());
 | 
						||
                    }
 | 
						||
                    else
 | 
						||
                    {
 | 
						||
                        throw new Exception("不支持的数据库");
 | 
						||
                    }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return JsonConvert.SerializeObject(jsonDataValueDic);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取枚举
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="trialId">标识</param>
 | 
						||
        /// <param name="identificationList">标识</param>
 | 
						||
        /// <param name="identification"></param>
 | 
						||
        /// <param name="jsonStr">Json对象</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        private async Task<string> SetEnum(Guid trialId, List<string> 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<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.DataType == "Table")
 | 
						||
                        {
 | 
						||
                            var tableConfigList = JsonConvert.DeserializeObject<List<TableConfig>>(item.TableConfigJsonStr) ?? new List<TableConfig>();
 | 
						||
 | 
						||
 | 
						||
                            //处理静态翻译
 | 
						||
                            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<string>();
 | 
						||
 | 
						||
                            foreach (var dynamicTranslateInfo in dynamicTranslateInfoList)
 | 
						||
                            {
 | 
						||
                                var tempNameList = arrays[0][dynamicTranslateInfo.ListName].Select(t => t["DictionaryCode"].ToString()).Where(t => !string.IsNullOrEmpty(t)).ToList();
 | 
						||
 | 
						||
                                dynamicDictionaryNameList.AddRange(tempNameList);
 | 
						||
 | 
						||
                                dynamicDictionaryNameList = dynamicDictionaryNameList.Distinct().ToList();
 | 
						||
                            }
 | 
						||
 | 
						||
                            var specialDynamicColumnValueList = new List<string>();
 | 
						||
                            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();
 | 
						||
 | 
						||
                                dictionaryNameList.AddRange(dicNames);
 | 
						||
                            }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                            var allDictionaryNameList = dictionaryNameList.Union(dynamicDictionaryNameList).Distinct();
 | 
						||
 | 
						||
 | 
						||
                            var searchList = await _dictionaryRepository.Where(t => allDictionaryNameList.Contains(t.Parent.Code) && t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
 | 
						||
 | 
						||
                            //翻译的字典数据
 | 
						||
                            var translateDataList = searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList());
 | 
						||
 | 
						||
                            List<JObject> jsonList = new List<JObject>();
 | 
						||
                            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();
 | 
						||
                                }
 | 
						||
 | 
						||
                                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();
 | 
						||
                                }
 | 
						||
 | 
						||
                                //处理动态翻译
 | 
						||
 | 
						||
                                foreach (var dynamicTranslateInfo in dynamicTranslateInfoList)
 | 
						||
                                {
 | 
						||
 | 
						||
                                    var innerArrays = (JArray)jsonObject[dynamicTranslateInfo.ListName];
 | 
						||
 | 
						||
 | 
						||
                                    List<JObject> innberJsonList = new List<JObject>();
 | 
						||
 | 
						||
                                    foreach (var innerItem in innerArrays)
 | 
						||
                                    {
 | 
						||
                                        var innerObject = JObject.Parse(innerItem.ToString());
 | 
						||
 | 
						||
 | 
						||
                                        var dicName = innerObject["DictionaryCode"]?.ToString();
 | 
						||
 | 
						||
                                        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);
 | 
						||
 | 
						||
                                    }
 | 
						||
 | 
						||
                                    jsonObject[dynamicTranslateInfo.ListName] = JToken.FromObject(innberJsonList);
 | 
						||
 | 
						||
                                }
 | 
						||
 | 
						||
                                jsonList.Add(jsonObject);
 | 
						||
 | 
						||
                            }
 | 
						||
 | 
						||
                            jsonDataDic[item.Key] = JToken.FromObject(jsonList);
 | 
						||
 | 
						||
                            continue;
 | 
						||
 | 
						||
                        }
 | 
						||
 | 
						||
 | 
						||
                        if (item.Type.ToLower() == FrontAudit.Id.GetDescription().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 => _userInfo.IsEn_Us ? x.Value : x.ValueCN).ToListAsync());
 | 
						||
                        }
 | 
						||
                        else if (item.Type.ToLower() == FrontAudit.ChildGroup.GetDescription().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 = _userInfo.IsEn_Us ? n.Value : n.ValueCN
 | 
						||
                                    }).Select(x => x.value).ToListAsync()
 | 
						||
                                    );
 | 
						||
                        }
 | 
						||
 | 
						||
                        //稽查  后端查询记录出表格数据,但是表格数据需要翻译,显示给出了翻译字典名,翻译的配置
 | 
						||
                        else if (item.Type.ToLower() == FrontAudit.DictionaryType.GetDescription().ToLower())
 | 
						||
                        {
 | 
						||
 | 
						||
                            List<JObject> jsonList = new List<JObject>();
 | 
						||
 | 
						||
                            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<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 = _userInfo.IsEn_Us ? n.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();
 | 
						||
                        }
 | 
						||
                        // 
 | 
						||
                        else if (item.Type.ToLower() == FrontAudit.LineSpilt.GetDescription().ToLower())
 | 
						||
                        {
 | 
						||
                            var data = value.ToString().Split('|').ToList();
 | 
						||
 | 
						||
                            var codeList = await _dictionaryRepository.Where(x => x.Code == item.Code).Join(_dictionaryRepository.Where(x => data.Contains(x.Code)), a => a.Id, b => b.ParentId, (a, b) => new
 | 
						||
                            {
 | 
						||
                                value = _userInfo.IsEn_Us ? b.Value : b.ValueCN
 | 
						||
                            }).Select(x => x.value).ToListAsync();
 | 
						||
                            jsonDataDic[item.Key] = string.Join("|", codeList);
 | 
						||
 | 
						||
                        }
 | 
						||
                        //通过字典项的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);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        /// <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)).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;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <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<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
 | 
						||
        {
 | 
						||
            //var list = await (from data in _frontAuditConfigRepository.Where().Where(x => x.Id == frontAuditConfigId)
 | 
						||
            //                  join childrenType in _frontAuditConfigRepository.Where() 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<FrontAuditConfigDTO>(_mapper.ConfigurationProvider).ToListAsync();
 | 
						||
 | 
						||
            foreach (var item in list)
 | 
						||
            {
 | 
						||
                item.TableConfigList = JsonConvert.DeserializeObject<List<TableConfig>>(item.TableConfigJsonStr) ?? new List<TableConfig>();
 | 
						||
                item.UrlConfig = JsonConvert.DeserializeObject<UrlConfig>(item.UrlConfigJsonStr) ?? new UrlConfig();
 | 
						||
            }
 | 
						||
 | 
						||
            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), true).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.UserRoleId,
 | 
						||
                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.UserRoleId,
 | 
						||
                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 _frontAuditConfigRepository.AddRangeAsync(list);
 | 
						||
            await _frontAuditConfigRepository.SaveChangesAsync();
 | 
						||
 | 
						||
            return ResponseOutput.Ok();
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取模块类型列表
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="inDto"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost]
 | 
						||
        public async Task<object> GetModuleTypeList(GetModuleTypeListInDto inDto)
 | 
						||
        {
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
           var allfront = await (from data in _frontAuditConfigRepository.Where(x=>x.IsEnable && x.ConfigType == "M")
 | 
						||
                              join dic in _dictionaryRepository.Where(x => x.Parent.Code == "ModuleType" && x.IsEnable) on data.ModuleTypeId equals dic.Id
 | 
						||
                              join trialshow in _trialAuditShowRepository.Where(x => x.TrialId == inDto.TrialId) on data.Id equals trialshow.FrontAuditConfigId into trialshowtemp
 | 
						||
                              from lefttrialshow in trialshowtemp.DefaultIfEmpty()
 | 
						||
                              select new ModuleTypeData()
 | 
						||
                              {
 | 
						||
                                  IsShow = lefttrialshow == null ? data.IsDefaultChoice : lefttrialshow.IsShow,
 | 
						||
                                  Id = data.Id,
 | 
						||
                                  ParentId = data.ParentId,
 | 
						||
                                  DictionaryId = dic.Id,
 | 
						||
                                  ShowOrder=  dic.ShowOrder,
 | 
						||
                                  DictionaryValue = _userInfo.IsEn_Us ? dic.Value : dic.ValueCN,
 | 
						||
                              }).ToListAsync();
 | 
						||
 | 
						||
            var result = allfront.Where(x => x.IsShow && x.ParentId!=null).ToList();
 | 
						||
            FindParent(result, result.Select(x => x.ParentId).ToList());
 | 
						||
            void FindParent(List<ModuleTypeData> re, List<Guid?> Parentids)
 | 
						||
            {
 | 
						||
 | 
						||
                var parentList = allfront.Where(x => Parentids.Contains(x.Id)).ToList();
 | 
						||
                if (parentList.Count > 0)
 | 
						||
                {
 | 
						||
                    re.AddRange(parentList);
 | 
						||
 | 
						||
                    FindParent(re, parentList.Select(x => x.ParentId).ToList());
 | 
						||
                }
 | 
						||
            }
 | 
						||
 | 
						||
 | 
						||
            return result.OrderBy(x => x.ShowOrder).Select(x => new {
 | 
						||
 | 
						||
                x.DictionaryId,
 | 
						||
                x.DictionaryValue
 | 
						||
            }).Distinct().ToList();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取Description
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="moduleTypeId"></param>
 | 
						||
        /// <param name="trialId"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpGet]
 | 
						||
        public async Task<object> getModuleTypeDescriptionList(Guid moduleTypeId,Guid trialId)
 | 
						||
        {
 | 
						||
 | 
						||
 | 
						||
            var result = from data in _frontAuditConfigRepository.Where(x =>x.IsEnable && x.ModuleTypeId == moduleTypeId && x.ObjectTypeId != null && x.OptTypeId != null && x.Description.Length > 0)
 | 
						||
                         join trialshow in _trialAuditShowRepository.Where(x => x.TrialId == trialId) on data.Id equals trialshow.FrontAuditConfigId into trialshowtemp
 | 
						||
                         from lefttrialshow in trialshowtemp.DefaultIfEmpty()
 | 
						||
                         select new
 | 
						||
                         {
 | 
						||
                             IsShow= lefttrialshow==null? data.IsDefaultChoice : lefttrialshow.IsShow,
 | 
						||
                             FrontAuditConfigId = data.Id,
 | 
						||
                             data.Sort,
 | 
						||
                             Description =  _userInfo.IsEn_Us ? data.Description : data.DescriptionCN
 | 
						||
                         };
 | 
						||
          
 | 
						||
            return result.Where(x=>x.IsShow).Distinct().OrderBy(x=>x.Sort).ToList();
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取列表
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="iq"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        [HttpPost]
 | 
						||
        public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
 | 
						||
        {
 | 
						||
            var query = from data in _frontAuditConfigRepository.Where()
 | 
						||
                        join childrenType in _dictionaryRepository.Where() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
 | 
						||
                        from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
 | 
						||
                        join ModuleType in _dictionaryRepository.Where() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
 | 
						||
                        from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
 | 
						||
                        join OptTypeId in _dictionaryRepository.Where() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
 | 
						||
                        from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
 | 
						||
                        join ObjectTypeId in _dictionaryRepository.Where() 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,
 | 
						||
                            IsDefaultChoice= data.IsDefaultChoice,
 | 
						||
                            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();
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
        /// <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(_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());
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        /// <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(_localizer["FrontAudit_CannotDelSub"]);
 | 
						||
            }
 | 
						||
            var success = await _frontAuditConfigRepository.BatchDeleteNoTrackingAsync(t => t.Id == frontAuditConfigId);
 | 
						||
            return ResponseOutput.Result(success);
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
    }
 | 
						||
}
 |