using AutoMapper;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Ropin.Core.Common;
using Ropin.Inspection.Common;
using Ropin.Inspection.Common.Accessor.Interface;
using Ropin.Inspection.Common.Helper;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.Entities;
using Ropin.Inspection.Repository;
using Ropin.Inspection.Repository.DEV.Interface;
using Ropin.Inspection.Repository.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;

namespace Ropin.Inspection.Service
{
    public class TdevDevStoreService : ITdevDevStoreService
    {
        private readonly ITdevDevStoreRepository _repository;
        private readonly ITdevDevStoreLogRepository _tdevDevStoreLogRepository;
        private readonly IMapper _mapper;
        private readonly IClaimsAccessor _claims;
        private readonly InspectionDbContext _sqlDBContext;
        private readonly ITmtnDevOpsRecordRepository _tmtnDevOpsRecordRepository;
        private readonly ITdevMaintenanceTemplateRepository _maintenanceTemplateRepository;
        private readonly IUnitOfWork _unitOfWork;
        private readonly ITdevDevStoreDocRepository _devStoreDocRepository;
        private readonly ITdevWebScadaDevSpotRepository _devWebScadaDevSpotRepository;
        private readonly Idev_DevOpeAccountConfigRepository _devOpeAccountConfigRepository;

        public TdevDevStoreService(ITmtnDevOpsRecordRepository tmtnDevOpsRecordRepository,IClaimsAccessor claims, InspectionDbContext sqlDBContext, ITdevDevStoreLogRepository tdevDevStoreLogRepository, ITdevDevStoreRepository repository, IMapper mapper, ITdevMaintenanceTemplateRepository maintenanceTemplateRepository, IUnitOfWork unitOfWork, ITdevDevStoreDocRepository devStoreDocRepository, ITdevWebScadaDevSpotRepository devWebScadaDevSpotRepository, Idev_DevOpeAccountConfigRepository devOpeAccountConfigRepository)
        {
            _repository = repository;
            _tdevDevStoreLogRepository = tdevDevStoreLogRepository;
            _mapper = mapper;
            _claims = claims;
            _sqlDBContext = sqlDBContext;
            _tmtnDevOpsRecordRepository = tmtnDevOpsRecordRepository;
            _maintenanceTemplateRepository = maintenanceTemplateRepository;
            _unitOfWork = unitOfWork;
            _devStoreDocRepository = devStoreDocRepository;
            _devWebScadaDevSpotRepository = devWebScadaDevSpotRepository;
            _devOpeAccountConfigRepository = devOpeAccountConfigRepository;
        }
        public async Task<TdevDevStoreDetailViewModel> GetDevStoreByQRCodeAsync(string qRCode, string storeCode)
        {
            var content = await _repository.GetDevStoreByQRCodeAsync(qRCode, storeCode);
            return content;
        }
        public async Task<TsysUserViewModel> GetUserByDevStoreIdAndRoleNameAsync(string devStoreId, string roleName)
        {
            var content = await _repository.GetUserByDevStoreIdAndRoleNameAsync(devStoreId, roleName);
            return content;
        }
        
        public async Task DevOperateByQRCodeAsync(DevOperateCreateModel mode)
        {
            var content = await _repository.GetByIdAsync(mode.C_DevStoreCode);
            if (content == null)
            {
                throw new Exception("数据库中没有此数据");
            }
            content.C_LastUpdatedBy = _claims.Linsence==null? _claims.ApiUserId:Guid.Parse("6e864cbc-5252-11ec-8681-fa163e02b3e4");
            content.D_LastUpdatedOn = DateTime.Now;
            content.C_Status = mode.C_Type;
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("操作失败");
            }


            //运行台账
            if (mode.C_Type == ((int)DevStatusEnum.Stop).ToString())
            {
                var devStoreLogSet =  _sqlDBContext.GetDbSet<TDEV_DevStoreLog>().AsNoTracking();
                var devStoreStartLog = devStoreLogSet.Where(x => x.C_Type == ((int)DevStatusEnum.Start).ToString()).OrderByDescending(x => x.D_CreateOn).Take(1).FirstOrDefault();
                if (devStoreStartLog == null) goto next;
                var devstore_log_datas = devStoreLogSet.Where(t => t.C_DeviceCode == mode.C_DevStoreCode && t.D_CreateOn > devStoreStartLog.D_CreateOn).OrderByDescending(x => x.D_CreateOn);//.Take(5)
                bool isAlarm = devstore_log_datas.Where(t=>t.C_Type == ((int)DevStatusEnum.Alarm).ToString()).Any()? true:false;
                var devOpeAccountS =  _sqlDBContext.GetDbSet<TDEV_DevOpeAccount>();

                //读取特性,属性名
                //PropertyInfo[] peroperties = typeof(TdevDevOpeContentViewModel).GetProperties(BindingFlags.Public | BindingFlags.Instance);
                //foreach (PropertyInfo property in peroperties)
                //{
                //    object[] objs = property.GetCustomAttributes(typeof(DescriptionAttribute), true);
                //    if (objs.Length > 0)
                //    {
                //        Console.WriteLine("{0}: {1}", property.Name, ((DescriptionAttribute)objs[0]).Description);
                //    }
                //}


                //var result = await FanyiHelper.GetWebScadaDevSpotValue(boxno, storeCode, names, unitNames, groupnames, calFormula, _nodeServices, calFormulaList);



                var devStore = await GetConditionAsync(new TdevDevStoreSearchModel { C_ID = mode.C_DevStoreCode });
                TdevDevStoreRunSpotConfigViewModel runSpotConfig = JsonConvert.DeserializeObject<TdevDevStoreRunSpotConfigViewModel>(devStore.FirstOrDefault().C_RunSpotConfig);

                var devSpotGroupNames = runSpotConfig?.RunSpotConfigList?.Where(x=>x.BReadDevSpot == true).Select(y=>y.DevSpotGroupName).ToList();
                var devSpotNames = runSpotConfig?.RunSpotConfigList?.Where(x => x.BReadDevSpot == true).Select(y => y.DevSpotName).ToList();
                var devSpotBoxNos = runSpotConfig?.RunSpotConfigList?.Where(x => x.BReadDevSpot ==true).Select(y => y.DevSpotBoxNo).ToList();
                //if(devSpotBoxNos.Any())
                var devSpotValues = await FanyiHelper.GetDevSpotValue(devSpotBoxNos.FirstOrDefault(), devSpotNames, devSpotGroupNames);

                var solidWasteRecordItems = await _tmtnDevOpsRecordRepository.GetRecordsConditionAsync(new TmtnDevOpsRecordDetailSearchModel { bSolidWaste = true, C_DevStoreCode = mode.C_DevStoreCode, IsPagination = false, Start = devStoreStartLog.D_CreateOn ,End = DateTime.Now});
                

                List<SolidWaste> DevOpsRecordSolidWaste = new List<SolidWaste>();
                if(solidWasteRecordItems.Any()&& solidWasteRecordItems.FirstOrDefault()!=null)
                foreach (var item in solidWasteRecordItems.ToList())
                {
                    if (item.C_Status == "7")
                    {
                        if (!string.IsNullOrWhiteSpace(item.C_SolidWaste))
                            DevOpsRecordSolidWaste.Add(JsonConvert.DeserializeObject<SolidWaste>(item.C_SolidWaste));
                    }
                }

                //DevOpsRecordSolidWaste.ForEach(x => {
                //    if (x.RoleName.Contains("设备管理员"))
                //        vm.DevManager += x.C_Name + " " + x.C_Mobile + " ";
                //    if (x.RoleName.Contains("设备运维员"))
                //        vm.DevOpser += x.C_Name + " " + x.C_Mobile + " ";
                //});

                TdevDevOpeContentViewModel devOpeContent = new TdevDevOpeContentViewModel
                {
                    Date = DateTime.Now,//.ToString("yyyy-MM-dd HH:mm:ss.fff")
                    DrainOutletNumber = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "DrainOutletNumber").FirstOrDefault().Value,
                    DevStoreName = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "DevStoreName").FirstOrDefault().Value,
                    DevStoreType = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "DevStoreType").FirstOrDefault().Value,
                    SpecificationsParameterName = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "SpecificationsParameterName").FirstOrDefault().Value,
                    SpecificationsDesignValue = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "SpecificationsDesignValue").FirstOrDefault().Value,
                    SpecificationsUnit = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "SpecificationsUnit").FirstOrDefault().Value,
                    RunStartTime = devStoreStartLog.D_CreateOn,
                    RunEndTime = DateTime.Now,
                    RunWhetherNormal = isAlarm,
                    FlueGasVolume = devSpotValues?.Where(x => x.name == devSpotNames.FirstOrDefault()).FirstOrDefault()?.value.ToString(),

                    //FlueGasVolumeid

                    PollutionFactor = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "PollutionFactor").FirstOrDefault().Value,
                    GovernanceEfficiency = devSpotValues?.Where(x => x.name == devSpotNames.ElementAtOrDefault(1)).FirstOrDefault()?.value.ToString(),
                    DataSources = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "DataSources").FirstOrDefault().Value,
                    HeightOfFlue = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "HeightOfFlue").FirstOrDefault().Value,
                    DischargeTemperature = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "DischargeTemperature").FirstOrDefault().Value,
                    Pressure = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "Pressure").FirstOrDefault().Value,
                    DischargeTime = (DateTime.Now - devStoreStartLog.D_CreateOn).TotalHours.ToString("F2"),
                    ConsumablePowerConsumption = runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "ConsumablePowerConsumption").FirstOrDefault().Value,
                    ConsumableName = DevOpsRecordSolidWaste.Any()? string.Join(",", DevOpsRecordSolidWaste.Select(x => x.NameSpecification).ToList().ToArray()):"/"
                    ,   // runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "ConsumableName").FirstOrDefault().Value,
                    ConsumableReplacementQuantity = DevOpsRecordSolidWaste.Any() ? string.Join(",", DevOpsRecordSolidWaste.Select(x => x.SpecificationNumber).ToList().ToArray()) : "/",//runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "ConsumableReplacementQuantity").FirstOrDefault().Value,
                    WasteName = DevOpsRecordSolidWaste.Any() ? string.Join(",", DevOpsRecordSolidWaste.Select(x => x.SolidWasteUnit).ToList().ToArray()) : "/",
                    //runSpotConfig?.RunSpotConfigList?.Where(x=>x.Name == "WasteName").FirstOrDefault().Value,
                    WasteProduction = DevOpsRecordSolidWaste.Any() ? string.Join(",", DevOpsRecordSolidWaste.Select(x => x.SolidWasteNumber).ToList().ToArray()) : "/",
                    //runSpotConfig?.RunSpotConfigList?.Where(x => x.Name == "WasteProduction").FirstOrDefault().Value,
                    //C_Content = "",
                    //C_Remark = "",
                    //C_CreateBy = _claims.ApiUserId,
                    //D_CreateOn = DateTime.Now
                };
                await devOpeAccountS.AddRangeAsync(new TDEV_DevOpeAccount {
                    C_ID = Guid.NewGuid().ToString(),
                    C_DevStoreCode = mode.C_DevStoreCode,
                    C_Content = JsonConvert.SerializeObject(devOpeContent),
                    C_Remark ="",
                    C_CreateBy = _claims.Linsence == null ? _claims.ApiUserId : Guid.Parse("6e864cbc-5252-11ec-8681-fa163e02b3e4"),
                    D_CreateOn = DateTime.Now
                });
                var qty = await _sqlDBContext.SaveChangesAsync();



            }

        next:

            await _tdevDevStoreLogRepository.CreateOneAsync(new TDEV_DevStoreLog { 
                C_ID = Guid.NewGuid().ToString(),
                C_DeviceCode = mode.C_DevStoreCode,
                C_LogMsg = mode.C_LogMsg,
                C_Type = mode.C_Type,
                C_CreateBy = _claims.Linsence == null ? _claims.ApiUserId : Guid.Parse("6e864cbc-5252-11ec-8681-fa163e02b3e4"),
                D_CreateOn = DateTime.Now
        });
            result = await _tdevDevStoreLogRepository.SaveAsync();
            if (!result)
            {
                throw new Exception("操作失败");
            }
        }
        public async Task CreateOneAsync(TdevDevStoreViewModel viewModel)
        {
            var id = Guid.NewGuid().ToString();
            var path = QRCoderHelper.RenderQrCode(id, "M", _claims.Linsence);
            var content = _mapper.Map<TDEV_DevStore>(viewModel);
            content.C_ID = id;
            content.C_CreateBy = _claims.ApiUserId;
            content.D_CreateOn = DateTime.Now;
            content.C_Status = "1";
            content.C_DevQRUrl = path;
            _repository.Create(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("创建失败");
            }
        }
        public async Task CopyCreateOneAsync(string oldId)
        {
            TDEV_DevStore content = await _repository.GetByIdAsync(oldId);
            if (content==null)
            {
                throw new Exception("没有此数据");
            }
            bool result = false;
            _unitOfWork.BeginTransaction();
            try
            {
                string newId = Guid.NewGuid().ToString();
                var path = QRCoderHelper.RenderQrCode(newId, "M", _claims.Linsence);
                //var content = _mapper.Map<TDEV_DevStore>(viewModel);
                content.C_ID = newId;
                content.C_Name = content.C_Name + "-拷贝";
                content.C_CreateBy = _claims.ApiUserId;
                content.D_CreateOn = DateTime.Now;
                content.C_Status = "1";
                content.C_DevQRUrl = path;
                content.C_LastUpdatedBy = null;
                content.D_LastUpdatedOn = null;
                result = await _unitOfWork.RegisterNew(content);
                if (result)
                {
                    TDEV_DevOpeAccountConfig cofMode = new TDEV_DevOpeAccountConfig();
                    var DevOpeAccountConfigMode = await _devOpeAccountConfigRepository.GetByConditionAsync(t => t.C_DevStoreCode == oldId);
                    if (DevOpeAccountConfigMode!=null&&DevOpeAccountConfigMode.Count()>0)
                    {
                        var cofEntity = DevOpeAccountConfigMode?.OrderByDescending(t => t.D_CreateOn).FirstOrDefault();
                        if (cofEntity!=null)
                        {
                            cofMode.C_ID = Guid.NewGuid().ToString();
                            cofMode.C_DevStoreCode = content.C_ID;
                            cofMode.C_Config = cofEntity.C_Config;
                            cofMode.C_Remark= content.C_Remark;
                            cofMode.C_CreateBy = _claims.ApiUserId;
                            cofMode.D_CreateOn= DateTime.Now;
                            result = await _unitOfWork.RegisterNew(cofMode);
                        }
                    }               
                    var WebScadaDevSpot= await _devWebScadaDevSpotRepository.GetByConditionAsync(t => t.C_DevCode == oldId);
                    List<TDEV_WebScadaDevSpot> webList = new List<TDEV_WebScadaDevSpot>();
                    foreach (var item in WebScadaDevSpot)
                    {
                        if (item!=null)
                        {
                            TDEV_WebScadaDevSpot tDEV_Web = new TDEV_WebScadaDevSpot();
                            tDEV_Web = item;
                            tDEV_Web.C_ID = Guid.NewGuid().ToString();
                            tDEV_Web.C_Name = item.C_Name;
                            tDEV_Web.C_ControlID=item.C_ControlID;
                            tDEV_Web.C_DevCode = content.C_ID;
                            tDEV_Web.C_LastUpdatedBy = null;
                            tDEV_Web.D_LastUpdatedOn = null;
                            tDEV_Web.C_CreateBy = _claims.ApiUserId;
                            tDEV_Web.D_CreateOn = DateTime.Now;
                            webList.Add(tDEV_Web);
                        }
                    }
                    if (webList!=null&& webList.Count>0)
                    {
                        result = await _unitOfWork.RegisterRangeNew(webList.ToList());
                    }
                    var doc = await _devStoreDocRepository.GetByConditionAsync(t => t.C_DevStoreCode == oldId);
                    List<TDEV_DevStoreDoc> docList = new List<TDEV_DevStoreDoc>();
                    foreach (var item in doc)
                    {
                        if (item != null)
                        {
                            item.C_ID = Guid.NewGuid().ToString();
                            item.C_DevStoreCode = content.C_ID;
                            item.C_LastUpdatedBy = null;
                            item.D_LastUpdatedOn = null;
                            item.C_CreateBy = _claims.ApiUserId;
                            item.D_CreateOn = DateTime.Now;
                            docList.Add(item);
                        }
                    }
                    if (docList!=null&& docList.Count>0)
                    {
                        result = await _unitOfWork.RegisterRangeNew(docList.ToList());
                    }
                }
            }
            catch
            {
                result = false;
                throw;
            }
            finally
            {
                if (result)
                    await _unitOfWork.CommitAsync();
                else
                    _unitOfWork.Rollback();
            }
        }

        public async Task<string> GetDevStoreQRCodeAsync(string devStore)
        {
            var path = QRCoderHelper.RenderQrCode(devStore, "M", _claims.Linsence);
            var content = await _repository.GetByIdAsync(devStore);
            if (content == null)
            {
                throw new Exception("没有此数据");
            }
            content.C_LastUpdatedBy = _claims.ApiUserId;
            content.D_LastUpdatedOn = DateTime.Now;
            content.C_DevQRUrl = path;
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("更新失败");
            }

            return await Task.FromResult(path);
        }

        public async Task DeleteAsync(string id)
        {
            var content = await _repository.GetByIdAsync(id);
            if (content == null)
            {
                throw new Exception("数据库中没有此数据");
            }
            //_repository.Delete(content);
            //var result = await _repository.SaveAsync();
            content.C_LastUpdatedBy = _claims.ApiUserId;
            content.D_LastUpdatedOn = DateTime.Now;
            content.C_Status = "0";
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("删除失败");
            }
        }
        public async Task DeleteByConditionAsync(string code)
        {
            var items = await _repository.GetByConditionAsync(C => C.C_ID == code);
            var content = items.FirstOrDefault();
            if (content == null)
            {
                throw new Exception("没有此数据");
            }
            content.C_LastUpdatedBy = _claims.ApiUserId;
            content.D_LastUpdatedOn = DateTime.Now;
            content.C_Status = "0";
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("删除失败");
            }
        }
        public async Task<IEnumerable<TdevDevStoreViewModel>> GetAllAsync()
        {
            var pagedList = await _repository.GetAllAsync();
            var contentDtoList = _mapper.Map<IEnumerable<TdevDevStoreViewModel>>(pagedList.Where(i => i.C_Status == "1").ToList());
            return contentDtoList.ToList();
        }
        public async Task<IEnumerable<TdevDevStoreViewModel>> GetConditionAsync(TdevDevStoreSearchModel searchModel)
        {
            IEnumerable<TdevDevStoreViewModel> list = await _repository.GetConditionAsync(searchModel, _claims?.LicenseTypeCode, _claims?.ApiUserId.ToString());
            searchModel.TotalCount = list.ToList().Count;
            return list;
        }
        public async Task<IEnumerable<DevStoreStatusGroup>> GetDevStoreStatusCount(TdevDevStoreSearchModel searchModel)
        {
            return await _repository.GetDevStoreStatusCount(searchModel, _claims?.LicenseTypeCode, _claims?.ApiUserId.ToString());
        }
        public async Task<TdevDevStoreViewModel> GetByIdAsync(string id)
        {
            var content = await _repository.GetByIdAsync(id);
            var contentDto = _mapper.Map<TdevDevStoreViewModel>(content);
            return contentDto;
        }

        public async Task UpdateAsync(string code, TdevDevStoreUpdateModel updateModel)
        {
            var items = await _repository.GetByConditionAsync(C => C.C_ID == code);
            var content = items.FirstOrDefault();
            if (content == null)
            {
                throw new Exception("没有此数据");
            }

            List<string> MTCodes = new List<string>
            {
                updateModel.C_OpsTempCode,
                updateModel.C_RepairTempCode,
                updateModel.C_RunTempCode
            };

            //验证模板是否禁用
            var templates = await _maintenanceTemplateRepository.GetByConditionAsync(x => MTCodes.Contains(x.C_ID));
            foreach (var template in templates)
            {
                if (template.C_Status == "0")
                {
                    throw new Exception("存在已禁用的模板");
                }
            }
            content.C_LastUpdatedBy = _claims.Linsence == null ? _claims.ApiUserId : Guid.Parse("6e864cbc-5252-11ec-8681-fa163e02b3e4");
            content.D_LastUpdatedOn = DateTime.Now;
            _mapper.Map(updateModel, content, typeof(TdevDevStoreUpdateModel), typeof(TDEV_DevStore));
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("更新失败");
            }
        }
        //保存运行台账配置
        public async Task UpdateDevStoreRunSpotConfigAsync(string code, TdevDevStoreRunSpotConfigViewModel updateModel)
        {
            var items = await _repository.GetByConditionAsync(C => C.C_ID == code);
            var content = items.FirstOrDefault();
            if (content == null)
            {
                throw new Exception("没有此数据");
            }
            bool result = false;
            _unitOfWork.BeginTransaction();
            try
            {
                TDEV_DevOpeAccountConfig config = new TDEV_DevOpeAccountConfig();
                config.C_ID = Guid.NewGuid().ToString();
                config.C_DevStoreCode = code;
                config.C_Config = JsonConvert.SerializeObject(updateModel);
                config.C_CreateBy = _claims.ApiUserId;
                config.D_CreateOn = DateTime.Now;
                result = await _unitOfWork.RegisterNew(config);
                if (!result)
                {
                    throw new Exception("更新失败");
                }
                else
                {
                    content.C_LastUpdatedBy = _claims.ApiUserId;
                    content.D_LastUpdatedOn = DateTime.Now;
                    content.C_RunSpotConfig = JsonConvert.SerializeObject(updateModel);
                    _repository.Update(content);
                    result = await _repository.SaveAsync();
                }
            }
            catch
            {
                _unitOfWork.Rollback();
                throw;
            }
            finally
            {
                if (result)
                    await _unitOfWork.CommitAsync();
                else
                    _unitOfWork.Rollback();
            }

        }

        public async Task UpdateDevStoreUserConfigAsync(string code, TdevDevStoreUserConfigViewModel updateModel)
        {
            var items = await _repository.GetByConditionAsync(C => C.C_ID == code);
            var content = items.FirstOrDefault();
            if (content == null)
            {
                throw new Exception("没有此数据");
            }
            content.C_LastUpdatedBy = _claims.ApiUserId;
            content.D_LastUpdatedOn = DateTime.Now;
            content.C_UserConfig = JsonConvert.SerializeObject(updateModel.UserConfigList);
            _repository.Update(content);
            var result = await _repository.SaveAsync();
            if (!result)
            {
                throw new Exception("更新失败");
            }

        }


        public Task<int> UpdateOneAsync(TdevDevStoreViewModel viewModel, params string[] fields)
        {
            throw new NotImplementedException();
        }

        public Task<bool> IsExistAsync(string id)
        {
            throw new NotImplementedException();
        }

        public Task<IEnumerable<TdevDevStoreViewModel>> GetByConditionAsync(Expression<Func<TdevDevStoreViewModel, bool>> expression)
        {
            throw new NotImplementedException();
        }

        public Task UpdateAsync(string code, TpntAreaUpdateModel updateModel)
        {
            throw new NotImplementedException();
        }

        public Task<IEnumerable<TdevDevStoreViewModel>> GetConditionAsync(TpntAreaSearchModel searchModel)
        {
            throw new NotImplementedException();
        }
    }
}