Esempio n. 1
0
        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 "}";
Esempio n. 2
0
        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"));
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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!"));
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        /// <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"));
        }
Esempio n. 11
0
        /// <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"));
        }
Esempio n. 12
0
        /// <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!"));
                }
            }
        }