public void SetUp() { #region Initial fake data of constructor _configContext = new ConfigContext { McpDb = "Data Source=10.37.36.195;Initial Catalog=MCPDev;uid=gary;pwd=Unsoul418!;", UploadPath = "C:/AppOs", ImageEndPoint = "http://*****:*****@$ "{AppContext.BaseDirectory.Substring(0, AppContext.BaseDirectory.IndexOf(" Wistron.AppStore.Web "))}\{@" Wistron.AppStore.Web \ Wistron.AppStore.Web \ wwwroot\unittest "}";
public TResult <AppOsDetailsViewModel> GetAvailbleAppDescription(string appID, int appOsID, byte osType) { List <WisAppOsOther> wisAppOsOther = new List <WisAppOsOther>(); WisAppList wisAppList = _appListService.GetAppName(appID); List <WisAppOs> wisAppOs = _appListService.GetAppOs(appID); List <WisAppPhoto> wisAppPhoto = _uploadFileService.GetPhotos(appID); AppDescription appDescription = _mapper.Map <WisAppList, AppDescription>(wisAppList); //取當前版 AppOsInfo appNowVersion = _mapper.Map <WisAppOs, AppOsInfo>( wisAppOs.Where( p => p.OSType == osType && p.Status == AppStatus.EnableBool && p.DelFlag == false && p.WebDownFlag == true && p.AppOSID == appOsID)?.OrderByDescending(p => p.CreateDT).FirstOrDefault()); //是否要取得多載點 的path路徑 if (appNowVersion.MultipleDownload) { wisAppOsOther = _uploadFileService.GetWisAppOsOther(appID, appOsID.ToString()); } //至少會有 WisAppOS table 原始台灣載點路徑 wisAppOsOther.Add(new WisAppOsOther { Site = "WHQ", FilePath = appNowVersion.FilePath }); //組成完整載點路徑: endpoint+path url List <DownloadUrlList> downloadUrlList = UploadFileHepler.GetDownloadUrlList(_configContext.OtherSideEndPoint, wisAppOsOther); //歷史紀錄 前5筆 List <AppOsInfo> appHistory = _mapper.Map <List <WisAppOs>, List <AppOsInfo> >( wisAppOs.Where( p => p.OSType == osType && p.DelFlag == false )?.OrderByDescending(p => p.CreateDT).Take(5).ToList()); //圖片資訊 FileNumber = 5 為 icon 圖片 List <AppPhotoContent> photo = _mapper.Map <List <WisAppPhoto>, List <AppPhotoContent> >(wisAppPhoto.Where(p => p.AppOS == osType)?.OrderBy(p => p.FileNumber).ToList()); AppOsDetailsViewModel viewModel = new AppOsDetailsViewModel { Description = appDescription, AppNowVersion = appNowVersion, AppOsHistory = appHistory, Photo = photo, DownloadList = downloadUrlList }; return(TResult <AppOsDetailsViewModel> .OK(viewModel, "OK")); }
public IActionResult EnableOrDisableMultipleDownload([FromForm] AppOsInfo request, [FromRoute] string appId, [FromRoute] string appOsId, [FromRoute] bool enable) { TResult <AppOsInfo> response = _appBiz.CreateOrDeleteMutipleFile(request); ViewBag.ImageEndPoint = _configContext.ImageEndPoint; ViewBag.Wording = response.Data.CompanyApp; ViewBag.ErrorCode = response.Rtncode == 1 ? "" : response.Rtncode.ToString(); ViewBag.ErrorMessage = response.Rtncode == 1 ? "" : $"{"異地載點更新 錯誤代碼: "}{response.Rtncode}{" 錯誤訊息: "}{response.RtnMsg}"; ViewBag.AlertMessage = response.Rtncode == 1 ? "異地載點更新成功!" : ""; return(response.Data.OSType == 1 ? PartialView("_AppIosForm", response.Data) : PartialView("_AppAndroidForm", response.Data)); }
public IActionResult UploadImage([FromRoute] int filetarget, [FromForm] AppOsInfo request) { //原本用 Blazor 專案寫 後來改成 MVC bussines 就沒Refactoring TResult <AppOsInfo> response = _appBiz.UploadImageFile(filetarget, request, request.File).Result; ViewBag.ImageEndPoint = _configContext.ImageEndPoint; ViewBag.Wording = response.Data.CompanyApp; ViewBag.ErrorCode = response.Rtncode == 1 ? "" : response.Rtncode.ToString(); ViewBag.ErrorMessage = response.Rtncode == 1 ? "" : $"{"上傳圖片檔失敗 錯誤代碼: "}{response.Rtncode}{" 錯誤訊息: "}{response.RtnMsg}"; ViewBag.AlertMessage = response.Rtncode == 1 ? "上傳圖片檔案成功!" : ""; //在取得資料時已放置 OSType 值 return(response.Data.OSType == 1 ? PartialView("_AppIosForm", response.Data) : PartialView("_AppAndroidForm", response.Data)); }
public IActionResult UploadAppFile([FromForm] AppOsInfo request) { TResult <AppOsInfo> response = _appBiz.UploadInstallFile(request, request.File).Result; ViewBag.ImageEndPoint = _configContext.ImageEndPoint; ViewBag.Wording = response.Data.CompanyApp; ViewBag.ErrorCode = response.Rtncode == 1 ? "" : response.Rtncode.ToString(); ViewBag.ErrorMessage = response.Rtncode == 1 ? "" : $"{"上傳安裝檔失敗 錯誤代碼: "}{response.Rtncode}{" 錯誤訊息: "}{response.RtnMsg}"; ViewBag.AlertMessage = response.Rtncode == 1 ? "上傳安裝檔案成功!" : ""; //在取得資料時已放置 OSType 值 return(response.Data.OSType == 1 ? PartialView("_AppIosForm", response.Data) : PartialView("_AppAndroidForm", response.Data)); }
public IActionResult InsertOrModifyAndroid([FromForm] AppOsInfo request) { TResult <bool> response = _appBiz.InsertOrModifyAppOs(request); ViewBag.ImageEndPoint = _configContext.ImageEndPoint; ViewBag.Wording = true; ViewBag.ErrorCode = response.Rtncode == 1 ? "" : response.Rtncode.ToString(); ViewBag.ErrorMessage = response.Rtncode == 1 ? "" : $"{"更新Android失敗 錯誤代碼: "}{response.Rtncode}{" 錯誤訊息: "}{response.RtnMsg}"; ViewBag.AlertMessage = response.Rtncode == 1 ? "更新Android成功!" : ""; //如果更新成功把 if (response.Data) { request.AppOSID = Convert.ToInt32(response.RtnMsg); } return(PartialView("_AppAndroidForm", request)); }
/// <summary> /// 頁簽畫面 ViewModel /// </summary> /// <param name="appID"></param> /// <param name="appOsID"></param> /// <param name="appOsType"></param> /// <returns></returns> public TResult <AppEditViewModel> GetCreateAndEditApp(string appID, string appOsID = "", string appOsType = "") { WisAppList wisAppList = _appListService.GetAppName(appID); List <WisAppOs> wisAppOs = _appListService.GetAppOs(appID); List <WisAppPhoto> wisAppPhoto = _uploadFileService.GetPhotos(appID); List <WisAppOsOther> wisAppOsOthers = _uploadFileService.GetWisAppOsOther(appID, appOsID); AppOsInfo editAppIos = null; AppOsInfo editAppAndroid = null; List <AppOsOther> iosAppOsOther = new List <AppOsOther>(); List <AppOsOther> androidAppOsOther = new List <AppOsOther>(); //DTO AppNameCreate appNameCreate = _mapper.Map <WisAppList, AppNameCreate>(wisAppList); #region 處理 User Group Name if (!string.IsNullOrEmpty(wisAppList.AppUserGroup)) { List <string> groupID = wisAppList.AppUserGroup.Split(',').ToList(); List <WisDefineGroup> wisDefineGroups = _appListService.GetDefineGroup(groupID); //組成 DigitalHR,ML1400,WZS All users 顯示在前端 string userGroupName = string.Join(",", wisDefineGroups.Select(p => p.GroupName).ToArray().Select((s, i) => s.ToString())); appNameCreate.AppUserGroupName = userGroupName; } #endregion //透過 AppOSID 取編輯 資料 if (appOsType == "IOS") {//選取的 AppOSID 為IOS 那 Android 拿取目前已啟動的資料 editAppIos = _mapper.Map <WisAppOs, AppOsInfo>(wisAppOs.Where(p => p.OSType == OsType.Ios && p.AppOSID.ToString() == appOsID).FirstOrDefault()); editAppAndroid = _mapper.Map <WisAppOs, AppOsInfo>(wisAppOs.Where(p => p.OSType == OsType.Android && p.Status == true).FirstOrDefault()); //多載點 iosAppOsOther = _mapper.Map <List <WisAppOsOther>, List <AppOsOther> >(wisAppOsOthers.Where(p => p.OSType == OsType.Ios).ToList()); } else if (appOsType == "Android") {//選取的 AppOSID 為Android 那 IOS 拿取目前已啟動的資料 editAppIos = _mapper.Map <WisAppOs, AppOsInfo>(wisAppOs.Where(p => p.OSType == OsType.Ios && p.Status == true).FirstOrDefault()); editAppAndroid = _mapper.Map <WisAppOs, AppOsInfo>(wisAppOs.Where(p => p.OSType == OsType.Android && p.AppOSID.ToString() == appOsID).FirstOrDefault()); //多載點 androidAppOsOther = _mapper.Map <List <WisAppOsOther>, List <AppOsOther> >(wisAppOsOthers.Where(p => p.OSType == OsType.Android).ToList()); } //歷史紀錄 List <AppOsInfo> appIosHistory = _mapper.Map <List <WisAppOs>, List <AppOsInfo> >(wisAppOs.Where(p => p.OSType == OsType.Ios && p.DelFlag == false)?.OrderByDescending(p => p.CreateDT).ToList()); List <AppOsInfo> appAndroidHistory = _mapper.Map <List <WisAppOs>, List <AppOsInfo> >(wisAppOs.Where(p => p.OSType == OsType.Android && p.DelFlag == false)?.OrderByDescending(p => p.CreateDT).ToList()); //圖片資訊 List <AppPhotoContent> iosPhoto = _mapper.Map <List <WisAppPhoto>, List <AppPhotoContent> >(wisAppPhoto.Where(p => p.AppOS == OsType.Ios).ToList()); List <AppPhotoContent> androidPhoto = _mapper.Map <List <WisAppPhoto>, List <AppPhotoContent> >(wisAppPhoto.Where(p => p.AppOS == OsType.Android).ToList()); //IOS if (editAppIos != null) { editAppIos.AppName = wisAppList.AppName; editAppIos.AppNameEn = wisAppList.AppNameEn; editAppIos.Photo = iosPhoto; editAppIos.AppOsHistory = appIosHistory ?? new List <AppOsInfo>(); editAppIos.AppOsOther = iosAppOsOther; editAppIos.DownloadUrlList = iosAppOsOther.Select(p => new DownloadUrlList { Site = p.Site, Url = p.FilePath }).ToList(); } else { //為 null 代表是只建立 app Name 而已 但是一定有 App ID 因為一定有建立 Create App name editAppIos = new AppOsInfo { AppID = appID, AppName = wisAppList.AppName, AppNameEn = wisAppList.AppNameEn, OSType = OsType.Ios, Status = true, Photo = iosPhoto, AppOsHistory = appIosHistory ?? new List <AppOsInfo>(), AppOsOther = iosAppOsOther }; } //Android if (editAppAndroid != null) { editAppAndroid.AppName = wisAppList.AppName; editAppAndroid.AppNameEn = wisAppList.AppNameEn; editAppAndroid.Photo = androidPhoto; editAppAndroid.AppOsHistory = appAndroidHistory ?? new List <AppOsInfo>(); editAppAndroid.AppOsOther = androidAppOsOther; editAppAndroid.DownloadUrlList = androidAppOsOther.Select(p => new DownloadUrlList { Site = p.Site, Url = p.FilePath }).ToList(); } else { //為 null 代表是只建立 app Name 而已 但是一定有 App ID 因為一定有建立 Create App name editAppAndroid = new AppOsInfo { AppID = appID, AppName = wisAppList.AppName, AppNameEn = wisAppList.AppNameEn, OSType = OsType.Android, Status = true, Photo = androidPhoto, AppOsHistory = appAndroidHistory ?? new List <AppOsInfo>(), AppOsOther = androidAppOsOther }; } AppEditViewModel appEditViewModel = new AppEditViewModel { AppName = appNameCreate, AppIos = editAppIos, AppAndroid = editAppAndroid }; return(TResult <AppEditViewModel> .OK(appEditViewModel, "OK")); }
/// <summary> /// 更新 Wis APP os /// </summary> /// <param name="appOsInfo"></param> /// <returns></returns> public TResult <bool> InsertOrModifyAppOs(AppOsInfo appOsInfo) { DateTime date = DateTime.Now; WisAppOs wisAppOs = _mapper.Map <AppOsInfo, WisAppOs>(appOsInfo); List <WisAppPhoto> wisAppPhoto = _mapper.Map <List <AppPhotoContent>, List <WisAppPhoto> >(appOsInfo.Photo); //視為存在條件 AppID & OsType & Version WisAppOs wisAppOsFromDb = _appListService.AppOsIsExisted(appOsInfo.AppID, appOsInfo.OSType, appOsInfo.Version); //沒有代表是新增 if (wisAppOsFromDb == null) { List <WisAppOsOther> insertWisAppOsOthers = new List <WisAppOsOther>(); wisAppOs.DelFlag = false; wisAppOs.LastUpdateUser = "******"; wisAppOs.CreateDT = date; wisAppOs.LastUpdateDT = date; //多載點處理 foreach (DownloadUrlList downloadUrl in appOsInfo.DownloadUrlList) { insertWisAppOsOthers.Add(new WisAppOsOther { AppID = wisAppOs.AppID, AppOsID = 0,//等transaction當中insert Site = downloadUrl.Site, OSType = wisAppOs.OSType, Version = wisAppOs.Version, FileName = appOsInfo.FileName, //IOS 為 ipa路徑 Android 為原始 apk檔案名稱 FilePath = downloadUrl.Url, //IOS 為plist路徑 Android 為apk路徑 LastUpdateUser = "******", LastUpdateDT = date, CreateDT = date }); } bool isInserted = _appListService.DisableAppOsStatusAndInsertAppOsAndPhotoAndOsOther(wisAppOs, wisAppPhoto, insertWisAppOsOthers); if (isInserted) { //取新增後的 appOsID int insertPrimaryKey = _appListService.GetAppOs(appOsInfo.AppID).Where(p => p.OSType == appOsInfo.OSType).Max(p => p.AppOSID); return(TResult <bool> .OK(true, insertPrimaryKey.ToString())); } else { return(TResult <bool> .Fail(false, FaultInfoRcConstants.ERR_CODE_FAIL, "Insert App Os fail!")); } } //有在DB 找到 代表更新 if (wisAppOsFromDb != null) { List <AppOsOther> updateAppOsOthers = new List <AppOsOther>(); wisAppOs.DelFlag = wisAppOsFromDb.DelFlag; wisAppOs.LastUpdateUser = wisAppOsFromDb.LastUpdateUser; wisAppOs.CreateDT = wisAppOsFromDb.CreateDT; wisAppOs.LastUpdateDT = date; //多載點 處理 foreach (DownloadUrlList downloadUrl in appOsInfo.DownloadUrlList) { AppOsOther appOsOther = appOsInfo.AppOsOther.Where(p => p.Site == downloadUrl.Site).Select(p => { return(p); }).FirstOrDefault(); // 更新 ipa or apk 檔案 appOsOther.FileName = wisAppOs.FileName; //更新 plist appOsOther.FilePath = downloadUrl.Url; updateAppOsOthers.Add(appOsOther); } List <WisAppOsOther> updateWisAppOsOther = _mapper.Map <List <AppOsOther>, List <WisAppOsOther> >(updateAppOsOthers); bool isUpdated = _appListService.DisableAppOsStatusAndModifyAppOsAndPhotoAndOsOther(wisAppOs, wisAppPhoto, updateWisAppOsOther); if (isUpdated)//返回 更新 { return(TResult <bool> .OK(true, appOsInfo.AppOSID.ToString())); } else { return(TResult <bool> .Fail(false, FaultInfoRcConstants.ERR_CODE_FAIL, "Update App Os fail!")); } } return(TResult <bool> .Fail(false, FaultInfoRcConstants.ERR_CODE_FAIL, "The proccess is fail!")); }
public void SetUp() { #region Initial fake data of constructor _configContext = new ConfigContext { McpDb = "Data Source=10.37.36.195;Initial Catalog=MCPDev;uid=gary;pwd=Unsoul418!;", UploadPath = "C:/AppOs", ImageEndPoint = "http://*****:*****@gmail.com", Category = "wistron App", DescriptionCh = "App說明-中文", DescriptionEn = "App說明-英文", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now, IsTop = true, CompanyApp = true, Delflag = false, AppOpen = true, AppUserGroup = "1, 2" }; _wisAppOs = new List <WisAppOs> { //以下為 IOS // Status 為啟用 new WisAppOs { AppOSID = 2, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", OSType = 1, Version = "1.0.1", PackageName = "com.wistron.portalapp.dev", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", Status = true, DescriptionCh = "版本更新 1.0.1", DescriptionEn = "The version is update 1.0.1", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now, DelFlag = false, FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", WebDownFlag = true, }, // Status 為不啟用 new WisAppOs { AppOSID = 3, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", OSType = 1, Version = "1.0.0", PackageName = "com.wistron.portalapp.dev", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", Status = false, DescriptionCh = "版本更新 1.0.0", DescriptionEn = "The version is update 1.0.0", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now, DelFlag = false, FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", WebDownFlag = true, }, //以下為 Android //Status 為啟用 new WisAppOs { AppOSID = 8, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", OSType = 2, Version = "1.0.1", PackageName = "com.wistron.portalapp.dev", FileName = "Portal 2.0_20201021(Dev 0.2.2).apk", Status = true, DescriptionCh = "版本更新 1.0.1", DescriptionEn = "The version is update 1.0.1", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now, DelFlag = false, FilePath = "PortalApp2.0/Android/Install/0.2.2-9e5f0b8dd1bf467096272cb1c41cca1d.apk", WebDownFlag = true, }, //Status 為不啟用 new WisAppOs { AppOSID = 9, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", OSType = 2, Version = "1.0.0", PackageName = "com.wistron.portalapp.dev", FileName = "Portal 2.0_20201021(Dev 0.2.2).apk", Status = false, DescriptionCh = "版本更新 1.0.0", DescriptionEn = "The version is update 1.0.0", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now, DelFlag = false, FilePath = "PortalApp2.0/Android/Install/0.2.2-9e5f0b8dd1bf467096272cb1c41cca1d.apk", WebDownFlag = true, } }; _wisAppPhoto = new List <WisAppPhoto> { new WisAppPhoto { AppPhotoID = 22, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOS = 1, FileNumber = 5, FileName = "024abd90fb4c49149156aff2d5fd99ac.png", FilePath = "PortalApp2.0/Android/Images/024abd90fb4c49149156aff2d5fd99ac.png", PhotoType = 1 // 1= Icon 圖片 2 = 一般圖片 }, new WisAppPhoto { AppPhotoID = 23, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOS = 2, FileNumber = 5, FileName = "398ce584d4304c518c0cf17128fd2001.png", FilePath = "PortalApp2.0/IOS/Images/398ce584d4304c518c0cf17128fd2001.png", PhotoType = 1 } }; _wisDefineGroup = new List <WisDefineGroup> { new WisDefineGroup { GroupID = "1", GroupName = "WZS All users", SelectGroup = "1", GroupInclude = "A33,A13,A10", SelectAccount = "1", AccountInclude = "10609123,200503036,2008L0323" }, new WisDefineGroup { GroupID = "2", GroupName = "ML10-Dept", SelectGroup = "2", GroupInclude = "ML1500,ML1400,ML1100", SelectAccount = "1", AccountInclude = "" } }; _wisAppOsOthers = new List <WisAppOsOther> { new WisAppOsOther { AppOtherID = 88, AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOsID = 2, Site = "WKS", OSType = 1, Version = "1.0.1", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", LastUpdateUser = "******", LastUpdateDT = DateTime.Now, CreateDT = DateTime.Now } }; _iosWisAppOsOthers = new List <WisAppOsOther>(); _androidWisAppOsOthers = new List <WisAppOsOther>(); _appOsInfo = new AppOsInfo { AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOSID = 2, OSType = DeviceType.Ios, AppName = "Test AppName", AppNameEn = "Test AppName", PackageName = "com.wistron.portalapp.dev", Version = "1,0.1", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", Status = true, WebDownFlag = true, DescriptionCh = "版本更新 1.0.1", DescriptionEn = "The version is update 1.0.1", CreateDT = DateTime.Now, LastUpdateDT = DateTime.Now, AppOsHistory = new List <AppOsInfo> { new AppOsInfo { AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOSID = 3, OSType = 1, AppName = "Test AppName", AppNameEn = "Test AppName", PackageName = "com.wistron.portalapp.dev", Version = "1,0.0", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", Status = false, WebDownFlag = true, DescriptionCh = "版本更新 1.0.0", DescriptionEn = "The version is update 1.0.0", CreateDT = DateTime.Now, LastUpdateDT = DateTime.Now, }, new AppOsInfo { AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOSID = 2, OSType = 1, AppName = "Test AppName", AppNameEn = "Test AppName", PackageName = "com.wistron.portalapp.dev", Version = "1,0.1", FileName = "PortalApp2.0/IOS/Install/0.2.1-ef04db152ccd4d1893998ec1f07fcc06.ipa", FilePath = "PortalApp2.0/IOS/Install/b2fcbfb55f5e4aa4a75a40e5ea09b514.plist", Status = true, WebDownFlag = true, DescriptionCh = "版本更新 1.0.1", DescriptionEn = "The version is update 1.0.1", CreateDT = DateTime.Now, LastUpdateDT = DateTime.Now, } }, Photo = new List <AppPhotoContent> { new AppPhotoContent { AppID = "4beedc78-0d31-496e-bb9c-81a79c9c6bc6", AppOS = 1, FileNumber = 5, FileName = "024abd90fb4c49149156aff2d5fd99ac.png", FilePath = "PortalApp2.0/Android/Images/024abd90fb4c49149156aff2d5fd99ac.png", PhotoType = 1 // 1= Icon 圖片 2 = 一般圖片 } } }; #endregion //fake service _appListService = Substitute.For <IAppListService>(); _uploadFileService = Substitute.For <IUploadFileService>(); _authService = Substitute.For <IAuthService>(); _targetObj = new AppBiz(_configContext, _appListService, _uploadFileService, _mapper, _authService); }
/// <summary> /// 上傳 Ios Android 安裝檔案 /// </summary> /// <param name="appOsInfo"></param> /// <param name="uploadFile"></param> /// <returns></returns> public async Task <TResult <AppOsInfo> > UploadInstallFile(AppOsInfo appOsInfo, IMatFileUploadEntry uploadFile) { //存放多載點 plist 檔案名稱 List <DownloadUrlList> downloadUrlList = new List <DownloadUrlList>(); #region 驗證檔案格式 int findExtension = uploadFile.Name.LastIndexOf("."); if (string.IsNullOrEmpty(appOsInfo.Version)) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_VERSIONREQUIRED, "必須輸入 版本號碼")); } if (appOsInfo.Photo.Where(p => p.FileNumber == 5).FirstOrDefault() == null) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_OSFORMATTYPE, "必須上傳 Icon 圖片")); } if (findExtension == -1) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_OSFORMATTYPE, "檔案格式錯誤: 無附檔名")); } string extension = uploadFile.Name.Substring(uploadFile.Name.LastIndexOf(".")).ToLower(); //驗證 Ios 是否符合格式 目前只看.ipa 檔案 if (appOsInfo.OSType == OsType.Ios && !extension.Equals(".ipa")) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_OSFORMATTYPE, "檔案格式限制: IOS 安裝檔應為 .ipa 格式")); } //驗證 Android 是否符合格式 目前只看.apk 檔案 if (appOsInfo.OSType == OsType.Android && !extension.Equals(".apk")) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_OSFORMATTYPE, "檔案格式限制: Android 安裝檔應為 .apk 格式")); } #endregion string fileName = $"{appOsInfo.Version}-{Guid.NewGuid().ToString("N")}{extension}"; //Create a new Name string osPath = OsType.Ios == appOsInfo.OSType ? "IOS" : "Android"; string filePath = Path.Combine(_configContext.UploadPath, appOsInfo.AppNameEn.Replace(" ", ""), osPath, "Install"); //檔案資料夾路徑不存在就新增 if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } using (var fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write)) { await uploadFile.WriteToStreamAsync(fs); } #region 如果是 IOS 必須做出 Plist 檔案 和多載點 plist //如果是IOS 除了上傳.ipa 檔案 還要上傳 Plist xml file if (appOsInfo.OSType == OsType.Ios) { //圖片 url 路徑 AppPhotoContent iosIconPhoto = appOsInfo.Photo.Where(P => P.FileNumber == 5).FirstOrDefault(); //多載點 plist foreach (OtherSideEndPoint endPoint in _configContext.OtherSideEndPoint) { // 組plist 黨案名稱 string pListFileName = $"{Guid.NewGuid().ToString("N")}{".plist"}"; // 組 ipa url 路徑 string ipaPath = $"{endPoint.Url}/{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{fileName}"; // 組圖片 url 路徑 string iconPath = iosIconPhoto != null ? $"{endPoint.Url}/{iosIconPhoto.FilePath.Replace(" ", "")}" : ""; //做出 plist xml 內容物 string plistXml = UploadFileHepler.GetPlistXml(ipaPath, iconPath, appOsInfo.PackageName, appOsInfo.Version, appOsInfo.AppNameEn); //存入 Plist 實體路徑 File.WriteAllText(Path.Combine(filePath, pListFileName), plistXml); //原始路徑 存在Wis_AppOS table if (endPoint.Site == "WHQ") { //原始載點不加入 DownloadUrlList //為 plist 檔案路徑 appOsInfo.FilePath = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{pListFileName}"; //為 .ipa 檔案路徑 appOsInfo.FileName = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{fileName}"; } else {//多載點資訊 存在 Wis_AppOs_Other downloadUrlList.Add(new DownloadUrlList { Site = endPoint.Site, Url = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{pListFileName}"//plist 路徑 }); } } //前端必須按下儲存按鈕 url資訊才會寫入 DB //Ios 上傳檔案路徑 是 plist檔案路徑 appOsInfo.DownloadUrlList = downloadUrlList; } #endregion #region Android 處理檔案 路徑 //Android 直接存放 apk 檔案路徑 if (appOsInfo.OSType == OsType.Android) { foreach (OtherSideEndPoint endPoint in _configContext.OtherSideEndPoint) { //Wis_AppOS url 路徑處理 if (endPoint.Site == "WHQ") { //為 .apk 檔案路徑 appOsInfo.FilePath = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{fileName}"; //為 .apk 原檔案名稱 appOsInfo.FileName = uploadFile.Name; } else {//Wis_AppOs_Other 資訊 downloadUrlList.Add(new DownloadUrlList { Site = endPoint.Site, Url = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Install"}/{fileName}"//.apk 檔案路徑 }); } } //Android 上傳檔案路徑 是apk檔案路徑 與原本路徑一模一樣 appOsInfo.DownloadUrlList = downloadUrlList; } #endregion return(TResult <AppOsInfo> .OK(appOsInfo, "OK")); }
/// <summary> /// 上傳圖片檔案 對象物件 AppOsInfo 裡的 AppPhotoContent /// </summary> /// <param name="fileNumber">記錄圖檔上傳位置 5 為安裝檔案Icon圖片</param> /// <param name="osType">IOS = 1 Android=2</param> /// <param name="appIos"></param> /// <param name="uploadFile"></param> /// <returns>實體路徑圖片</returns> public async Task <TResult <AppOsInfo> > UploadImageFile(int fileNumber, AppOsInfo appOsInfo, IMatFileUploadEntry uploadFile) { #region 驗證圖片檔案格式 //驗證圖片是否符合格式 目前只接受 PNG JPEG ImageFormat imageType = await _uploadFileService.CheckImageType(uploadFile); if (imageType == null) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_IMAGEFORMATTYPE, "檔案格式限制: jpg、jpeg、png")); } int findExtension = uploadFile.Name.LastIndexOf("."); if (findExtension == -1) { return(TResult <AppOsInfo> .Fail(null, FaultInfoRcConstants.ERR_CODE_OSFORMATTYPE, "檔案格式錯誤: 無附檔名")); } #endregion string extension = uploadFile.Name.Substring(uploadFile.Name.LastIndexOf(".")).ToLower(); string fileName = $"{Guid.NewGuid().ToString("N")}{extension}"; //Create a new Name string osPath = OsType.Ios == appOsInfo.OSType ? "IOS" : "Android"; string filePath = Path.Combine(_configContext.UploadPath, appOsInfo.AppNameEn.Replace(" ", ""), osPath, "Images"); //檔案資料夾路徑不存在就新增 if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } using (var fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write)) { await uploadFile.WriteToStreamAsync(fs); } AppPhotoContent appPhotoContent = new AppPhotoContent { AppID = appOsInfo.AppID, AppOS = appOsInfo.OSType, FileNumber = fileNumber, FileName = fileName, //exapmle Wistron%20Ark\IOS\Images\5-623cefb49e3946a28198464dd72b5bb4.png 子目錄位址 FilePath = $"{appOsInfo.AppNameEn.Replace(" ", "")}/{osPath}/{"Images"}/{fileName}", PhotoType = fileNumber == 5 ? PhotoType.IconType : PhotoType.NormalType }; //把有存在編號的 去除 在Add更新過後的 但還未更新資料庫 等待 按下儲存按鈕 AppPhotoContent existed = appOsInfo.Photo.Where(p => p.FileNumber == fileNumber).FirstOrDefault(); if (existed != null) { appOsInfo.Photo.Remove(existed); appOsInfo.Photo.Add(appPhotoContent); } else { appOsInfo.Photo.Add(appPhotoContent); } return(TResult <AppOsInfo> .OK(appOsInfo, "OK")); }
/// <summary> /// 更新 Wis APP os /// </summary> /// <param name="appOsInfo"></param> /// <returns></returns> public TResult <bool> InsertOrModifyAppOs(AppOsInfo appOsInfo) { //短解 應該前端要給預設值 DownloadUrlList.Count = 0 這樣的設定 要不然會throw exception if (appOsInfo.DownloadUrlList == null) { appOsInfo.DownloadUrlList = new List <DownloadUrlList>(); } //CompanyApp = false 欄位版本資訊為空值 補上預設值 原因是外部App 不需要輸入版本號 但是db 欄位為必填 if (string.IsNullOrEmpty(appOsInfo.Version)) { appOsInfo.Version = ""; } DateTime date = DateTime.Now; WisAppOs wisAppOs = _mapper.Map <AppOsInfo, WisAppOs>(appOsInfo); List <WisAppPhoto> wisAppPhoto = _mapper.Map <List <AppPhotoContent>, List <WisAppPhoto> >(appOsInfo.Photo); //視為存在條件 AppID & OsType & Version WisAppOs wisAppOsFromDb = _appListService.AppOsIsExisted(appOsInfo.AppID, appOsInfo.OSType, appOsInfo.Version); //沒有代表是新增 if (wisAppOsFromDb == null) { List <WisAppOsOther> insertWisAppOsOthers = new List <WisAppOsOther>(); wisAppOs.DelFlag = false; wisAppOs.LastUpdateUser = "******"; wisAppOs.CreateDT = date; wisAppOs.LastUpdateDT = date; //多載點功能啟用 才新增 if (appOsInfo.MultipleDownload) { //多載點處理 foreach (DownloadUrlList downloadUrl in appOsInfo.DownloadUrlList) { insertWisAppOsOthers.Add(new WisAppOsOther { AppID = wisAppOs.AppID, AppOsID = 0,//等transaction當中insert Site = downloadUrl.Site, OSType = wisAppOs.OSType, Version = wisAppOs.Version, FileName = appOsInfo.FileName, //IOS 為 ipa路徑 Android 為原始 apk檔案名稱 FilePath = downloadUrl.Url, //IOS 為plist路徑 Android 為apk路徑 LastUpdateUser = "******", LastUpdateDT = date, CreateDT = date }); } } bool isInserted = _appListService.DisableAppOsStatusAndInsertAppOsAndPhotoAndOsOther(wisAppOs, wisAppPhoto, insertWisAppOsOthers); if (isInserted) { //取新增後的 appOsID WisAppOs insertObject = _appListService.GetAppOs(appOsInfo.AppID).FirstOrDefault(p => p.OSType == appOsInfo.OSType && p.Status == AppStatus.EnableBool); return(TResult <bool> .OK(true, insertObject.AppOSID.ToString())); } else { return(TResult <bool> .Fail(false, FaultInfoRcConstants.ERR_CODE_FAIL, "Insert App Os fail!")); } } else { //有在DB 找到 代表更新 List <WisAppOsOther> insertWisAppOsOthers = new List <WisAppOsOther>(); wisAppOs.DelFlag = wisAppOsFromDb.DelFlag; wisAppOs.LastUpdateUser = wisAppOsFromDb.LastUpdateUser; wisAppOs.CreateDT = wisAppOsFromDb.CreateDT; wisAppOs.LastUpdateDT = date; //多載點功能啟用 才更新 if (appOsInfo.MultipleDownload) { //多載點 處理 foreach (DownloadUrlList downloadUrl in appOsInfo.DownloadUrlList) { insertWisAppOsOthers.Add(new WisAppOsOther { AppID = wisAppOs.AppID, AppOsID = wisAppOs.AppOSID,//必定會有 AppOsID Site = downloadUrl.Site, OSType = wisAppOs.OSType, Version = wisAppOs.Version, FileName = appOsInfo.FileName, //IOS 為 ipa路徑 Android 為原始 apk檔案名稱 FilePath = downloadUrl.Url, //IOS 為plist路徑 Android 為apk路徑 LastUpdateUser = "******", LastUpdateDT = date, CreateDT = date }); } } bool isUpdated = _appListService.DisableAppOsStatusAndModifyAppOsAndPhotoAndOsOther(wisAppOs, wisAppPhoto, insertWisAppOsOthers); if (isUpdated)//返回 更新 { return(TResult <bool> .OK(true, appOsInfo.AppOSID.ToString())); } else { return(TResult <bool> .Fail(false, FaultInfoRcConstants.ERR_CODE_FAIL, "Update App Os fail!")); } } }