public IActionResult CsvImportProccess(CsvFormData data) { var langRequest = Request.HttpContext.Features.Get <IRequestCultureFeature>(); var culture = langRequest.RequestCulture.Culture; var _lang = culture.ToString(); var attachedFile = Request.Form.Files["CsvFile"]; if (attachedFile == null || attachedFile.Length <= 0) { return(Json(null)); } var csvReader = new StreamReader(attachedFile.OpenReadStream(), Encoding.GetEncoding(932), false); var uploadModelList = new List <UserCsvData>(); string inputDataRead; var values = new List <string>(); while ((inputDataRead = csvReader.ReadLine()) != null) { values.Add(inputDataRead.Trim()); } Boolean err = false; //get header var head = values[0]; var arrHead = head.Split(','); int total_col = arrHead.Length; int[] col_val = new int[total_col]; if (total_col > 8) { for (int i = 8; i < total_col; i++) { string machine_name = arrHead[i]; Machine m = _db.Machines.Where(m => m.MachineNameJp == machine_name).FirstOrDefault(); if (m == null) { err = true; WriteLog("Error at header - Machine: [" + machine_name + "] not exist."); break; } else { col_val[i] = m.MachineId; } } } //remove header values.Remove(values[0]); /*values.Remove(values[values.Count - 1]);*/ if (!err) { List <string> cate_name_list = new List <string>(); int row = 1; foreach (var value in values) { var uploadModelRecord = new UserCsvData(); var eachValue = value.Split(','); if (eachValue[0] == "" || countJapaneseStringLength(eachValue[0]) > 100) { WriteLog("Error at rows: " + row + " - 所属名(GroupName): [" + eachValue[1] + "] too long."); err = true; break; } else { var group_name = eachValue[0]; var group = _db.Groups.Include(c => c.Users).Where(c => c.GroupNameJp == group_name && c.Status != 0).FirstOrDefault(); if (group == null) { WriteLog("Error at rows: " + row + " - 所属名 (GroupName): [" + group_name + "] not exist."); err = true; break; } else { uploadModelRecord.GroupName = group_name; uploadModelRecord.GroupId = group.GroupId; if (eachValue[1] == "" || countJapaneseStringLength(eachValue[1]) > 64) { WriteLog("Error at rows: " + row + " - ユーザーID (UserId): [" + eachValue[1] + "] too long."); err = true; break; } else { uploadModelRecord.LoginAccount = eachValue[1]; } if (eachValue[2] == "" || countJapaneseStringLength(eachValue[2]) > 64) { WriteLog("Error at rows: " + row + " - パスワード (LoginPassword): [" + eachValue[2] + "] too long."); err = true; break; } else { uploadModelRecord.LoginPassword = eachValue[2]; } if (eachValue[3] == "" || countJapaneseStringLength(eachValue[3]) > 100) { WriteLog("Error at rows: " + row + " - ユーザー名(UserNameJp): [" + eachValue[3] + "] too long."); err = true; break; } else { uploadModelRecord.UserNameJp = eachValue[3]; } if (eachValue[4] == "" || countJapaneseStringLength(eachValue[4]) > 100) { WriteLog("Error at rows: " + row + " - ユーザー名(UserNameEn): [" + eachValue[4] + "] too long."); err = true; break; } else { uploadModelRecord.UserNameEn = eachValue[4]; } if (eachValue[5] == "" || countJapaneseStringLength(eachValue[5]) > 50) { WriteLog("Error at rows: " + row + " - ユーザー区分 (UserType): [" + eachValue[5] + "] too long."); err = true; break; } else { if (eachValue[5] == "管理者") { uploadModelRecord.UserType = 1; } else { uploadModelRecord.UserType = 0; } } if (eachValue[6] == "" || countJapaneseStringLength(eachValue[6]) > 20 || countJapaneseStringLength(eachValue[6]) < 3) { WriteLog("Error at rows: " + row + " - Tel: [" + eachValue[6] + "] too long."); err = true; break; } else { if (checkTelFormat(eachValue[6])) { uploadModelRecord.Tel = eachValue[6]; } else { WriteLog("Error at rows: " + row + " - Tel: [" + eachValue[6] + "] is not a Tel number."); err = true; break; } } if (eachValue[7] == "" || countJapaneseStringLength(eachValue[7]) > 100) { WriteLog("Error at rows: " + row + " - Mail: [" + eachValue[7] + "] too long."); err = true; break; } else { uploadModelRecord.Mail = eachValue[7]; } List <int> Lmachines = new List <int>(); if (total_col > 8) { for (int j = 8; j < total_col; j++) { if (eachValue[j] == "1") { Lmachines.Add(col_val[j]); } } } uploadModelRecord.MachineId = Lmachines; } } uploadModelList.Add(uploadModelRecord);// newModel needs to be an object of type ContextTables. row++; } } if (err) { var result = new { status = 400, message = (_lang == "en-US") ? "The content of the file is not correct." : "ファイルの内容が正しくありません。" }; return(Json(result)); } else { foreach (var item in uploadModelList) { var user = _db.Users.Include(u => u.CanUseMachines).Where(u => u.LoginAccount == item.LoginAccount).FirstOrDefault(); if (user == null) { var us = new User(); us.LoginAccount = item.LoginAccount; us.LoginPassword = item.LoginPassword; us.GroupId = item.GroupId; us.UserNameEn = item.UserNameEn; us.UserNameJp = item.UserNameJp; us.UserType = item.UserType; us.Status = 1; us.Tel = item.Tel; us.Mail = item.Mail; _db.Users.Add(us); _db.SaveChanges(); var newUser = _db.Users.Include(u => u.CanUseMachines).Where(u => u.UserId == us.UserId).FirstOrDefault(); if (item.MachineId != null) { foreach (int i in item.MachineId) { var canUseMachine = new CanUseMachine(); canUseMachine.MachineId = i; canUseMachine.UserId = us.UserId; newUser.CanUseMachines.Add(canUseMachine); } _db.SaveChanges(); } } else { user.UserNameJp = item.UserNameJp; user.UserNameEn = item.UserNameEn; user.Tel = item.Tel; user.Mail = item.Mail; user.LoginAccount = item.LoginAccount; user.LoginPassword = item.LoginPassword; user.UserType = item.UserType; user.Status = 1; user.GroupId = item.GroupId; _db.Users.Update(user); user.CanUseMachines.Clear(); _db.SaveChanges(); if (item.MachineId != null) { foreach (int i in item.MachineId) { var canUseMachine = new CanUseMachine(); canUseMachine.MachineId = i; canUseMachine.UserId = user.UserId; user.CanUseMachines.Add(canUseMachine); } _db.SaveChanges(); } } } var result = new { status = 200, message = "Import success", data = uploadModelList }; return(Json(result)); } }
/* * CSV import * **/ public IActionResult CsvImportProccess(CsvFormData data) { var langRequest = Request.HttpContext.Features.Get <IRequestCultureFeature>(); var culture = langRequest.RequestCulture.Culture; var _lang = culture.ToString(); var attachedFile = Request.Form.Files["CsvFile"]; if (attachedFile == null || attachedFile.Length <= 0) { return(Json(null)); } var csvReader = new StreamReader(attachedFile.OpenReadStream(), Encoding.GetEncoding(932), false); var uploadModelList = new List <CsvData>(); string inputDataRead; var values = new List <string>(); while ((inputDataRead = csvReader.ReadLine()) != null) { values.Add(inputDataRead.Trim()); } /*values.Remove(values[0]); * values.Remove(values[values.Count - 1]);*/ Boolean err = false; List <string> cate_name_list = new List <string>(); int row = 1; foreach (var value in values) { var uploadModelRecord = new CsvData(); var eachValue = value.Split(','); if (eachValue[0] == "" || countJapaneseStringLength(eachValue[0]) > 50) { err = true; break; } else { var cate_name = eachValue[0]; var category = _db.Categories.Include(c => c.Machines).Where(c => c.CategoryNameJp == cate_name && c.Status != 0).FirstOrDefault(); if (category == null) { WriteLog("Error at rows: " + row + " - 分類名(Category): [" + cate_name + "] not exist."); err = true; break; } else { uploadModelRecord.CategoryName = cate_name; if (eachValue[1] == "" || countJapaneseStringLength(eachValue[1]) > 100) { WriteLog("Error at rows: " + row + " - 機器名(MachineNameJp): [" + eachValue[1] + "] too long."); err = true; break; } else { uploadModelRecord.MachineNameJp = eachValue[1]; } if (eachValue[2] == "" || countJapaneseStringLength(eachValue[2]) > 100) { WriteLog("Error at rows: " + row + " - 機器名(MachineNameEn): [" + eachValue[2] + "] too long."); err = true; break; } else { uploadModelRecord.MachineNameEn = eachValue[2]; } if (eachValue[3] == "" || countJapaneseStringLength(eachValue[3]) > 100) { WriteLog("Error at rows: " + row + " - メーカー名(MakerNameJp): [" + eachValue[3] + "] too long."); err = true; break; } else { uploadModelRecord.MakerNameJp = eachValue[3]; } if (eachValue[4] == "" || countJapaneseStringLength(eachValue[4]) > 50) { WriteLog("Error at rows: " + row + " - 型式(ModelJp): [" + eachValue[4] + "] too long."); err = true; break; } else { uploadModelRecord.ModelJp = eachValue[4]; } if (eachValue[5] == "" || countJapaneseStringLength(eachValue[5]) > 50) { WriteLog("Error at rows: " + row + " - 型式(ModelEn): [" + eachValue[5] + "] too long."); err = true; break; } else { uploadModelRecord.ModelEn = eachValue[5]; } if (eachValue[6] == "" || countJapaneseStringLength(eachValue[6]) > 100) { WriteLog("Error at rows: " + row + " - 設置場所(PlaceJp): [" + eachValue[6] + "] too long."); err = true; break; } else { uploadModelRecord.PlaceJp = eachValue[6]; } if (eachValue[7] == "" || countJapaneseStringLength(eachValue[7]) > 100) { WriteLog("Error at rows: " + row + " - 設置場所(PlaceEn): [" + eachValue[7] + "] too long."); err = true; break; } else { uploadModelRecord.PlaceEn = eachValue[7]; } if (!err) { var machine_query = _db.Machines.Where(m => m.MachineNameEn == uploadModelRecord.MachineNameEn && m.MachineNameJp == uploadModelRecord.MachineNameJp && m.Status == 1 && m.CategoryId == category.CategoryId).FirstOrDefault(); if (machine_query != null) { machine_query.MachineNameJp = uploadModelRecord.MachineNameJp; machine_query.MachineNameEn = uploadModelRecord.MachineNameEn; machine_query.MakerNameJp = uploadModelRecord.MakerNameJp; machine_query.ModelJp = uploadModelRecord.ModelJp; machine_query.ModelEn = uploadModelRecord.ModelEn; machine_query.PlaceJp = uploadModelRecord.PlaceJp; machine_query.PlaceEn = uploadModelRecord.PlaceEn; machine_query.Status = 1; _db.Machines.Update(machine_query); _db.SaveChanges(); } else { Machine machine = new Machine(); machine.MachineNameJp = uploadModelRecord.MachineNameJp; machine.MachineNameEn = uploadModelRecord.MachineNameEn; machine.MakerNameJp = uploadModelRecord.MakerNameJp; machine.ModelJp = uploadModelRecord.ModelJp; machine.ModelEn = uploadModelRecord.ModelEn; machine.PlaceJp = uploadModelRecord.PlaceJp; machine.PlaceEn = uploadModelRecord.PlaceEn; machine.Status = 1; category.Machines.Add(machine); } } } } uploadModelList.Add(uploadModelRecord);// newModel needs to be an object of type ContextTables. row++; } if (err) { var result = new { status = 400, message = (_lang == "en-US") ? "The content of the file is not correct." : "ファイルの内容が正しくありません。" }; return(Json(result)); } else { _db.SaveChanges(); var result = new { status = 200, message = "Import success", data = uploadModelList }; return(Json(result)); } }