4.验证Excel并上传

  1. using DC.BE.Business.SAS;
  2. using DC.BE.Business.SYS;
  3. using DC.BE.Entity.SAS;
  4. using DC.BE.Entity.Security;
  5. using DC.BE.Entity.SYS;
  6. using DC.Framework.Entity.Definition;
  7. using Kendo.Mvc.Extensions;
  8. using Kendo.Mvc.UI;
  9. using Newtonsoft.Json;
  10. using System;
  11. using System.Linq;
  12. using System.Collections.Generic;
  13. using System.Web.Mvc;
  14. using DC.BE.Entity.Extension;
  15. using DC.BE.Entity.Common;
  16. using DC.BE.Business.SYS.SYSBModel;
  17. using System.Collections;
  18. using System.Text;
  19. using DC.BE.Business.ERP;
  20. using DC.BE.Entity.ERP;
  21. using DC.BE.Business.OA.OABModel;
  22. using System.Security.Authentication;
  23. using System.Security.Cryptography;
  24. using DC.Framework.Logging;
  25. using DC.Framework.Logging.ELLAB;
  26. using DC.Framework.Entity;
  27. using System.Reflection;
  28. using System.Linq.Expressions;
  29. using System.Web;
  30. using DC.Framework.Repository.Definition;
  31. using System.IO;
  32. using System.Data;
  33. using Excel;
  34. using DC.BE.Entity.CRM;
  35. using System.Configuration;
  36. using System.Data.Entity;
  37. using System.Security.Cryptography.X509Certificates;
  38. using DC.BE.Entity.Seeds;
  39. using System.Data.SqlClient;
  40. using DC.BE.Business.ERP.BModel;
  41. using System.Transactions;
  42. using DC.BE.Business.ERP.Parts;
  43. using DC.BE.Entity.ISP;
  44. using DC.BE.Entity.OA;
  45. using DC.BE.Business.OA;
  46.  
  47. namespace DC.BE.BusinessImpl.SYS
  48. {
  49. public class UploadBaseDataBusiness : IUploadBaseDataBusiness
  50. {
  51. private readonly ITsysManagementBusiness _tsysManagementBusiness;
  52. private static readonly ILogger Logger = LoggerFactory.GetLogger(typeof(TsysManagementBusiness).FullName);
  53. private readonly ITsysStoreInfoBusiness _tsysStoreInfoBusiness;
  54. private readonly ItsysCompOrgBusiness _tsysCompOrgBusiness;
  55. private readonly ItsysCompRoleBusiness _tsysCompRoleBusiness;
  56. private readonly IUnitOfWork _unitOfWork;
  57. private readonly ITsysBaseDateImportLogBusiness _TsysBaseDateImportLogBusiness;
  58. private readonly IDataContext _context;
  59. private readonly ITsysUserBusiness _tsysUserBusiness;
  60. private readonly DcContext _dcContext;
  61. //v2.00.066 李恒宇 add_s
  62. private readonly IterpPersonInfoBusiness _terpPersonInfoBusiness;
  63. //v2.00.066 李恒宇 add_e
  64. private readonly ITsysCompCodeBusiness _tsysCompCodeBusiness;
  65. private readonly ITerpPartTotolStoreInfoBusiness _terpPartTotalStoreInfoBusiness;
  66. private readonly ITsasRegCompanyBusiness _tsasRegcompanyBusiness;
  67. private readonly ITsysTransactionDefineBusiness _TsysTransactionDefineBusiness;
  68.  
  69. string tempcTblName; // 临时表名,用于批量更新或删除操作,这样快
  70. private ResultData RDS = new ResultData(); // 返回结果
  71. private readonly ItsysCompRegionBusiness _tsysCompRegionBusiness;
  72. private readonly ITsysGetNumberBusiness _tsysGetNumberBusiness;
  73. private readonly ITsasManagementBusiness _tsasManagementBusiness;
  74. private readonly IToaApprovalTypeMntBusiness _toaApprovalTypeMntBusiness;
  75. private readonly ITsysConfigureBusiness _tsysConfigureBusiness;
  76. private readonly ITsysMessageConfigBusiness _tsysMessageConfigBusiness;
  77.  
  78. public UploadBaseDataBusiness(ITsysManagementBusiness tsysManagementBusiness, ITsysStoreInfoBusiness tsysStoreInfoBusiness,
  79. ItsysCompOrgBusiness tsysCompOrgBusiness,
  80. IUnitOfWork unitOfWork,
  81. ITsysBaseDateImportLogBusiness TsysBaseDateImportLogBusiness
  82. , IDataContext context,
  83. ITsysUserBusiness tsysUserBusiness,
  84. ItsysCompRoleBusiness tsysCompRoleBusiness,
  85. DcContext dcContext,
  86. //v2.00.066 李恒宇 add_s
  87. IterpPersonInfoBusiness terpPersonInfoBusiness,
  88. //v2.00.066 李恒宇 add_e
  89. ITsysCompCodeBusiness tsysCompCodeBusiness,
  90. ITerpPartTotolStoreInfoBusiness terpPartTotalStoreInfoBusiness,
  91. ITsasRegCompanyBusiness tsasRegcompanyBusiness,
  92. ItsysCompRegionBusiness tsysCompRegionBusiness,
  93. ITsysTransactionDefineBusiness TsysTransactionDefineBusiness,
  94. ITsysGetNumberBusiness tsysGetNumberBusiness,
  95. ITsasManagementBusiness tsasManagementBusiness,
  96. IToaApprovalTypeMntBusiness toaApprovalTypeMntBusiness,
  97. ITsysConfigureBusiness tsysConfigureBusiness,
  98. ITsysMessageConfigBusiness tsysMessageConfigBusiness
  99. )
  100. {
  101. _tsysManagementBusiness = tsysManagementBusiness;
  102. _tsysStoreInfoBusiness = tsysStoreInfoBusiness;
  103. _unitOfWork = unitOfWork;
  104. _TsysBaseDateImportLogBusiness = TsysBaseDateImportLogBusiness;
  105. _context = context;
  106. _tsysUserBusiness = tsysUserBusiness;
  107. _tsysCompOrgBusiness = tsysCompOrgBusiness;
  108. _tsysCompRoleBusiness = tsysCompRoleBusiness;
  109. _dcContext = dcContext;
  110. //v2.00.066 李恒宇 add_s
  111. _terpPersonInfoBusiness = terpPersonInfoBusiness;
  112. //v2.00.066 李恒宇 add_e
  113. _tsysCompCodeBusiness = tsysCompCodeBusiness;
  114. _terpPartTotalStoreInfoBusiness = terpPartTotalStoreInfoBusiness;
  115. _tsasRegcompanyBusiness = tsasRegcompanyBusiness;
  116. _TsysTransactionDefineBusiness = TsysTransactionDefineBusiness;
  117. _tsysCompRegionBusiness = tsysCompRegionBusiness;
  118. _tsysGetNumberBusiness = tsysGetNumberBusiness;
  119. _tsasManagementBusiness = tsasManagementBusiness;
  120. _toaApprovalTypeMntBusiness = toaApprovalTypeMntBusiness;
  121. _tsysConfigureBusiness = tsysConfigureBusiness;
  122. _tsysMessageConfigBusiness = tsysMessageConfigBusiness;
  123. }
  124. public ResultData BaseDataTemplateImport(String compId, String middlePath)
  125. {
  126. FileInfo fi = new FileInfo(middlePath);
  127. var FilePath = middlePath;
  128. //var FileName = fi.Name.Split('.')[0].Split(' ')[1];
  129. var fileName = FilePath.Split('\\').Last().Substring(, FilePath.Split('\\').Last().IndexOf('+'));
  130. var FileName = fileName.Substring(, fileName.Length - );
  131. // FileStream类中
  132. String uploadResult = String.Empty;
  133.  
  134. tempcTblName = "##Temp_" + FileName + "_" + Guid.NewGuid().ToString("N");
  135.  
  136. switch (FileName)
  137. {
  138. case "tsysCompOrg": uploadResult = UploadTsysCompOrg(FilePath, compId, FileName); break;
  139. case "tsysUser": uploadResult = UploadTsysUser(FilePath, compId, FileName); break;
  140. case "terpPersonInfo": uploadResult = UploadTerpPersonInfo(FilePath, compId, FileName); break;
  141. case "tsysCompRole": uploadResult = UploadTsysCompRole(FilePath, compId, FileName); break;
  142. case "tsysUserRole": uploadResult = UploadTsysUserRole(FilePath, compId, FileName); break;
  143. case "tsysStoreInfo": uploadResult = UploadTsysStoreInfo(FilePath, compId, FileName); break;
  144. case "tsysStorePartition": uploadResult = UploadTsysStorePartition(FilePath, compId, FileName); break;
  145. case "tsysStoreLocation": uploadResult = UploadTsysStoreLocation(FilePath, compId, FileName); break;
  146. case "terpSupplierInfo": uploadResult = UploadTerpSupplierInfo(FilePath, compId, FileName); break;
  147. case "tcrmCustomerInfo": uploadResult = UploadTcrmCustomerInfo(FilePath, compId, FileName); break;
  148. case "TerpWorkHourCostTypeId": uploadResult = UploadTerpWorkHourCostTypeId(FilePath, compId, FileName); break;
  149. case "TerpBaseObject": uploadResult = UploadTerpBaseObject(FilePath); break;
  150. case "terpProductInfo": uploadResult = UploadTerpProductBase(FilePath, compId, FileName); break;
  151. case "terpPartInfo": uploadResult = UploadTerpPartInfo(FilePath, compId, FileName); break;
  152. case "terpSupplyBase": uploadResult = UploadTerpSupplyBase(FilePath, compId, FileName); break;
  153. case "terpMaterialBase": uploadResult = UploadTerpMaterialBase(FilePath, compId, FileName); break;
  154. case "terpTechUseMaterialDF": uploadResult = UploadTerpTechUseMaterialDF(FilePath, compId, FileName); break;
  155. case "terpProductDesignBom": uploadResult = UploadTerpDesignBom(FilePath, compId, FileName); break;
  156. case "terpPartRelation": uploadResult = UploadTerpDesignBomPartRelation(FilePath, compId, FileName); break;
  157. case "terpPartTotolStoreInfo": uploadResult = UploadTerpPartTotolStoreInfo(FilePath, compId, FileName); break;
  158. case "terpPartInStoreInfo": uploadResult = UploadTerpPartInStoreInfo(FilePath, compId, FileName); break;
  159. case "tsysCompCode": uploadResult = UploadTsysCompCode(FilePath, compId, FileName); break;
  160. case "tsasAgentRegister": uploadResult = UploadTsasAgentRegister(FilePath, compId, FileName); break;
  161. case "tsasRegCompServiceNote": uploadResult = UploadTsasRegCompServiceNote(FilePath, compId, FileName); break;
  162. case "terpQuoteMnt": uploadResult = UploadterpQuoteMnt(FilePath, compId, FileName); break;
  163. default:
  164. break;
  165. }
  166.  
  167. RDS.Msg = uploadResult;
  168. if (RDS.Msg.IndexOf("成功") > -)
  169. {
  170. RDS.Status = ;
  171. RDS.Data = string.Empty;
  172. }
  173. return RDS;
  174. }
  175.  
  176. #region 数据类型和长度验证(模板用 可sheet页选读)
  177. public Boolean BaseDataTemplateCheckTemplate(String extion, Stream fs, string compId, string FileName, ref String logMessage, int sheetIndex = )
  178. {
  179. IExcelDataReader excelReader;
  180.  
  181. if (extion.Equals(".xls"))
  182. {
  183. excelReader = ExcelReaderFactory.CreateBinaryReader(fs);
  184. }
  185. else
  186. {
  187. excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);
  188. }
  189. String message = String.Empty;
  190. DataSet result = excelReader.AsDataSet();
  191. var sheet = result.Tables[sheetIndex];
  192. var sheetName = result.Tables[sheetIndex].TableName;
  193. List<String> dataRequired = new List<String>();
  194. List<String> dataTypesTemp = new List<String>();
  195. List<String> dataTypes = new List<String>();
  196. List<String> dataLengths = new List<String>();
  197. String[] ziMu = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL" };
  198. Int64 rowNum = ;
  199. bool isError = false;
  200. TsysUser User = new TsysUser();
  201.  
  202. Guid Compid = Guid.Parse(compId);
  203. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == Compid).ToList().FirstOrDefault();
  204.  
  205. var logInfo = "开始上传" + FileName + "……";
  206. //AddMessage(logInfo, ref logMessage);
  207. AddLastMessage(ref logInfo);
  208. try
  209. {
  210. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == Compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  211. if (User == null && Compid.ToString() != "00000000-0000-0000-0000-000000000000")
  212. {
  213. string messageA = "公司" + company.CompanyName + "用户不存在";
  214. // AddLastMessage(ref messageA);
  215. // Logger.Information(messageA);
  216. //sw.WriteLine(messageA);
  217. AddMessage(messageA, ref logMessage);
  218. if (!excelReader.IsClosed)
  219. {
  220. excelReader.Close();
  221. }
  222. return false;
  223. }
  224. }
  225. catch (Exception ex)
  226. {
  227. Logger.Information(ex.Message);
  228. }
  229.  
  230. //获取必填项List
  231. Object[] requiredCell = sheet.Rows[].ItemArray;
  232. //获取数据类型List
  233. Object[] typeCell = sheet.Rows[].ItemArray;
  234. //获取数据长度List
  235. Object[] lengthCell = sheet.Rows[].ItemArray;
  236.  
  237. for (int i = ; i < requiredCell.Length; i++)
  238. {
  239. dataTypes.Add(typeCell[i].ToString());
  240. dataRequired.Add(requiredCell[i].ToString().Contains('*') ? "必填项" : String.Empty);
  241. dataLengths.Add(lengthCell[i].ToString());
  242. }
  243. //读取excel
  244. for (int j = ; j < sheet.Rows.Count; j++)
  245. {
  246.  
  247. Object[] cells = sheet.Rows[j].ItemArray;
  248. bool isNullLine = true;
  249. for (int i = ; i < cells.Count(); i++)
  250. {
  251. if (!string.IsNullOrEmpty(cells[i].ToString()))
  252. {
  253. isNullLine = false;
  254. break;
  255. }
  256. }
  257.  
  258. if (isNullLine)
  259. {
  260. if (rowNum < sheet.Rows.Count)
  261. {
  262. rowNum++;
  263. continue;
  264. }
  265. else
  266. {
  267. break;
  268. }
  269. }
  270.  
  271. //for (int i = 1; i < dataTypes.Count; i++)
  272. for (int i = ; i < dataTypes.Count; i++)
  273. {
  274.  
  275. //必填项
  276. if (dataRequired[i] == "必填项")
  277. {
  278. if (cells[i].ToString() == "" || cells[i].ToString() == null)
  279. {
  280. string messageB = "第" + (rowNum + ) + "行,第" + ziMu[i] + "列," + requiredCell[i] + " 必填项未填。";
  281. //Logger.Information(messageB);
  282. // AddLastMessage(ref messageB);
  283. AddMessage(messageB, ref logMessage);
  284. isError = true;
  285.  
  286. }
  287. else
  288. {
  289. #region switch数据类型
  290. switch (dataTypes[i])
  291. {
  292. //日期类型数据验证
  293. case "date":
  294. if (!_tsysManagementBusiness.CheckDate(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  295. {
  296. isError = true;
  297. AddLastMessage(ref message);
  298. }
  299. break;
  300. //INT32类型数据验证
  301. case "int":
  302. if (!_tsysManagementBusiness.CheckInt32(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  303. {
  304. isError = true;
  305. AddLastMessage(ref message);
  306. }
  307. break;
  308. //INT64类型数据验证
  309. case "bigint":
  310. if (!_tsysManagementBusiness.CheckInt64(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  311. {
  312. isError = true;
  313. AddLastMessage(ref message);
  314. }
  315. break;
  316. //DECIMAL类型数据验证
  317. case "decimal":
  318. if (_tsysManagementBusiness.CheckDecimal(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  319. {
  320. if (!_tsysManagementBusiness.CheckDecimalLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  321. {
  322. isError = true;
  323. AddLastMessage(ref message);
  324. }
  325. }
  326. else
  327. {
  328. isError = true;
  329. AddLastMessage(ref message);
  330. }
  331.  
  332. break;
  333. //VARCHAR类型数据验证
  334. case "varchar":
  335. if (_tsysManagementBusiness.CheckVarchar(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  336. {
  337. if (!_tsysManagementBusiness.CheckLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  338. {
  339. isError = true;
  340. AddLastMessage(ref message);
  341. }
  342. }
  343. else
  344. {
  345. isError = true;
  346. AddLastMessage(ref message);
  347. }
  348. break;
  349. //VARCHAR类型数据验证
  350. case "nvarchar":
  351.  
  352. if (!_tsysManagementBusiness.CheckLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  353. {
  354. isError = true;
  355. AddLastMessage(ref message);
  356. }
  357. break;
  358. }
  359. #endregion
  360. }
  361. }
  362. //非必填项
  363. else
  364. {
  365. if (cells[i].ToString() == "" || cells[i].ToString() == null)
  366. {
  367. continue;
  368. }
  369. else
  370. {
  371. #region switch数据类型
  372. switch (dataTypes[i])
  373. {
  374. //日期类型数据验证
  375. case "date":
  376. if (!_tsysManagementBusiness.CheckDate(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  377. {
  378.  
  379. isError = true;
  380. AddLastMessage(ref message);
  381. }
  382. break;
  383. //INT32类型数据验证
  384. case "int32":
  385. if (!_tsysManagementBusiness.CheckInt32(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  386. {
  387. isError = true;
  388. AddLastMessage(ref message);
  389. }
  390. break;
  391. //INT64类型数据验证
  392. case "int64":
  393. if (!_tsysManagementBusiness.CheckInt64(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  394. {
  395. isError = true;
  396. AddLastMessage(ref message);
  397. }
  398. break;
  399. //DECIMAL类型数据验证
  400. case "decimal":
  401. if (_tsysManagementBusiness.CheckDecimal(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  402. {
  403. if (!_tsysManagementBusiness.CheckDecimalLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  404. {
  405. isError = true;
  406. AddLastMessage(ref message);
  407. }
  408. }
  409. else
  410. {
  411. isError = true;
  412. AddLastMessage(ref message);
  413. }
  414.  
  415. break;
  416. //VARCHAR类型数据验证
  417. case "varchar":
  418. if (_tsysManagementBusiness.CheckVarchar(cells[i].ToString(), "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  419. {
  420. if (!_tsysManagementBusiness.CheckLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  421. {
  422. isError = true;
  423. AddLastMessage(ref message);
  424. }
  425. }
  426. else
  427. {
  428. isError = true;
  429. AddLastMessage(ref message);
  430. }
  431. break;
  432. //VARCHAR类型数据验证
  433. case "nvarchar":
  434.  
  435. if (!_tsysManagementBusiness.CheckLength(cells[i].ToString(), dataLengths[i], "第" + (rowNum + ) + "行,第" + ziMu[i] + "列", ref logMessage, ref message))
  436. {
  437. isError = true;
  438. AddLastMessage(ref message);
  439. }
  440. break;
  441. }
  442. #endregion
  443. }
  444. }
  445.  
  446. }
  447. rowNum++;
  448.  
  449. //else { rowNum = 0; break; }
  450. //}
  451. }
  452.  
  453. //验证结果有异常 SYSE0031
  454. if (isError)
  455. {
  456. return false;
  457. }
  458. else { return true; }
  459.  
  460. //var filePath = Path.Combine(@"C:\temp", company.CompanyLoginMark.ToString() + "基础数据导入日志.txt");
  461. //File.Delete(filePath);
  462. //using (FileStream fsm = new FileStream(filePath, FileMode.Append))
  463. //{
  464. // using (StreamWriter sw = new StreamWriter(fsm, System.Text.Encoding.Default))
  465. // {
  466. // }
  467. //}
  468. }
  469. #endregion
  470.  
  471. #region 公司组织机构上传
  472. //公司组织机构上传
  473. public String UploadTsysCompOrg(String filePath, String compId, String FileName)
  474. {
  475. String logInfo = "";
  476. String logMessage = "";
  477. Logger.Information("开始上传组织结构...");
  478. #region 数据存在,不能再次插入
  479. Guid Compid = Guid.Parse(compId);
  480. var extion = Path.GetExtension(filePath);
  481. int sheetNum = ;//读取sheet页
  482. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == Compid).ToList().FirstOrDefault();
  483. TsysUser User = new TsysUser();
  484. //共通验证
  485. using (FileStream fs = new FileStream(filePath, FileMode.Open))
  486. {
  487. if (!this.BaseDataTemplateCheckTemplate(extion, fs, compId, FileName, ref logMessage, sheetNum))
  488. {
  489. return "组织结构上传失败!";
  490. }
  491. }
  492. try
  493. {
  494. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == Compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  495. if (User == null)
  496. {
  497. logInfo = "公司" + company.CompanyName.ToString() + "用户不存在";
  498. AddLastMessage(ref logMessage);
  499. return "组织结构上传失败!";
  500. }
  501. }
  502. catch (Exception ex)
  503. {
  504. Logger.Information(ex.Message);
  505. }
  506. Guid UserId = User.Id;
  507. List<TsysCompOrg> updateOrgList = new List<TsysCompOrg>();
  508. try
  509. {
  510. updateOrgList = _unitOfWork.Repository<TsysCompOrg>().Get(x => x.CompanyId == Compid && x.Status == ).ToList();
  511. }
  512. catch (Exception ex)
  513. {
  514. Logger.Information(ex.Message);
  515. }
  516.  
  517. String CompanyName = "";
  518. try
  519. {
  520. CompanyName = _unitOfWork.Repository<TsasRegCompany>().Get(m => m.Id == Compid).FirstOrDefault().CompanyName;
  521. }
  522. catch (Exception ex)
  523. {
  524. Logger.Information(ex.Message);
  525. }
  526.  
  527. if (updateOrgList.Count > )
  528. {
  529. foreach (var item in updateOrgList)
  530. {
  531. if (item.OrgName != CompanyName)
  532. {
  533. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(, , )))
  534. {
  535. try
  536. {
  537. _tsysCompOrgBusiness.ISPDelete(item.Id);
  538. }
  539. catch (Exception ex)
  540. {
  541. item.Status = EntityStatusEnum.Active;
  542. _tsysCompOrgBusiness.ISPUpdate(item);
  543. logInfo = "数据正在被使用,无法再次重新上传,请在功能菜单上更正数据。";
  544. AddMessage(logInfo, ref logMessage);
  545. // AddLastMessage(ref logMessage);
  546. return "组织结构上传失败!";
  547. }
  548. scope.Complete();
  549. }
  550. }
  551. }
  552. }
  553. //容器准备
  554. List<Tuple<String, String, String>> AllExcelData = new List<Tuple<String, String, String>>();
  555. Dictionary<int, TsysCompOrg> allFixedData = new Dictionary<int, TsysCompOrg>();
  556. List<CheckTreeBModel> AllTree = new List<CheckTreeBModel>();
  557. List<UploadCompOrgBModel> NodeOrgs = new List<UploadCompOrgBModel>();
  558. #endregion
  559.  
  560. #region 读取excel数据
  561. using (FileStream newFs = new FileStream(filePath, FileMode.Open))
  562. {
  563. IExcelDataReader excelReader;
  564. if (extion.Equals(".xls"))
  565. {
  566. excelReader = ExcelReaderFactory.CreateBinaryReader(newFs);
  567. }
  568. else
  569. {
  570. excelReader = ExcelReaderFactory.CreateOpenXmlReader(newFs);
  571. }
  572. Boolean AllCheckResult = true;
  573. var sheet = excelReader.AsDataSet().Tables[sheetNum];
  574. for (int r = ; r < sheet.Rows.Count; r++)
  575. {
  576. Object[] currentRow = sheet.Rows[r].ItemArray;
  577. if (String.IsNullOrEmpty(currentRow[].ToString())
  578. && String.IsNullOrEmpty(currentRow[].ToString())
  579. && String.IsNullOrEmpty(currentRow[].ToString())
  580. ) { continue; }
  581. Tuple<String, String, String> ThisRow = new Tuple<String, String, String>(
  582. currentRow[].ToString(), //组织机构编码
  583. currentRow[].ToString(), //组织名
  584. currentRow[].ToString() //父组织机构编码
  585. );
  586. AllExcelData.Add(ThisRow);
  587. AllTree.Add(new CheckTreeBModel() { Child = ThisRow.Item1, Parent = ThisRow.Item3, RowNumber = r + });
  588. }
  589. #endregion
  590.  
  591. #region 父子级验证
  592. List<CheckTreeBModel> TreeBModel = new List<CheckTreeBModel>();
  593. TreeBModel = _tsysManagementBusiness.CheckTree(AllTree);
  594. for (int i = ; i < AllExcelData.Count; i++)
  595. {
  596. Boolean isTrue = _tsysManagementBusiness.CheckTree(TreeBModel, AllExcelData[i].Item1, AllExcelData[i].Item3);
  597. if (!isTrue)
  598. {
  599. logInfo = "第" + AllTree[i].RowNumber.ToString() + "行" + "组织机构编码父子级不正确";
  600. AddMessage(logInfo, ref logMessage);
  601. AllCheckResult = false;
  602. }
  603. }
  604. #endregion
  605.  
  606. if (!AllCheckResult)
  607. {
  608. AddLastMessage(ref logMessage);
  609.  
  610. return "组织结构上传失败!";
  611. }
  612. #region Tree结构
  613.  
  614. Hashtable nodeOrgList = new Hashtable();
  615. int row = ;
  616. foreach (var item in AllExcelData)
  617. {
  618. nodeOrgList.Add(item.Item1, new UploadCompOrgBModel
  619. {
  620. ChildCode = item.Item1,
  621. Id = Guid.NewGuid(),
  622. ParentCode = item.Item3,
  623. OrgName = item.Item2,
  624. RowExcel = row++,
  625. Items = new List<UploadCompOrgBModel>()
  626. });
  627. }
  628. Hashtable sortOrgList = new Hashtable();
  629. foreach (UploadCompOrgBModel item in nodeOrgList.Values)
  630. if (string.IsNullOrEmpty(item.ParentCode))
  631. NodeOrgs.Add(item);
  632. else
  633. {
  634. List<UploadCompOrgBModel> Items = ((UploadCompOrgBModel)nodeOrgList[item.ParentCode]).Items;
  635. Items.Add(item);
  636. if (sortOrgList[item.ParentCode] == null && Items.Count > )
  637. sortOrgList.Add(item.ParentCode, Items);
  638. }
  639. #endregion
  640.  
  641. #region 获取父子级顺序的集合
  642. allFixedData = _tsysManagementBusiness.BModelToEntity(NodeOrgs, Compid);
  643. #endregion
  644.  
  645. #region Insert
  646. DataTable DT = DBHelper.GetDataSet("select * from tsysCompOrg where 1<>1");
  647.  
  648. allFixedData.ToList().ForEach(t =>
  649. {
  650. DataRow drow = DT.NewRow();
  651. drow["Id"] = t.Value.Id;
  652. drow["Status"] = ;
  653. drow["RowVersion"] = default(byte[]);
  654. drow["CompanyId"] = compId;
  655. drow["CreatedDate"] = DateTime.Now;
  656. drow["CreatedBy"] = UserId;
  657. drow["UpdatedDate"] = DateTime.Now;
  658. drow["UpdatedBy"] = UserId;
  659. drow["OrganizationId"] = User.OrgId;
  660. drow["ParentOrgId"] = t.Value.ParentOrgId;
  661. drow["OrgCode"] = t.Value.OrgCode;
  662. drow["OrgName"] = t.Value.OrgName;
  663. drow["NodeCode"] = t.Value.NodeCode;
  664. drow["SortNo"] = t.Value.SortNo;
  665. DT.Rows.Add(drow);
  666. });
  667. try
  668. {
  669. DBHelper.BulkInsert(DT, "tsysCompOrg");
  670. }
  671. catch (Exception ex)
  672. {
  673. Logger.Information(ex.Message);
  674.  
  675. if (String.IsNullOrEmpty(logMessage))
  676. {
  677. return "组织结构上传失败!";
  678. }
  679. else
  680. {
  681. AddLastMessage(ref logMessage);
  682. return "组织结构上传失败!";
  683. }
  684. }
  685. #endregion
  686.  
  687. return "组织结构上传成功!";
  688. }
  689. }
  690. #endregion
  691.  
  692. #region 系统用户管理上传
  693.  
  694. //系统用户管理上传
  695. public String UploadTsysUser(String filePath, String compId, String FileName)
  696. {
  697. String logInfo = "";
  698. String logMessage = "";
  699. Logger.Information("开始上传系统用户...");
  700. #region ready
  701. var extion = Path.GetExtension(filePath);
  702. int sheetNum = ;//读取sheet页
  703. Guid Compid = Guid.Parse(compId);
  704. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == Compid).ToList().FirstOrDefault();
  705. using (FileStream fs = new FileStream(filePath, FileMode.Open))
  706. {
  707. if (!this.BaseDataTemplateCheckTemplate(extion, fs, compId, FileName, ref logMessage, sheetNum))
  708. {
  709. return "系统用户上传失败!";
  710. }
  711. }
  712. DataTable Dt = new DataTable();
  713. for (int i = ; i < ; i++)
  714. {
  715. Dt.Columns.Add(new DataColumn());
  716. }
  717. List<TerpUserAndRole> AllUserAndRoleData = new List<TerpUserAndRole>();
  718. TsysUser User = new TsysUser();
  719. try
  720. {
  721. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == Compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  722. if (User == null)
  723. {
  724. logInfo = "公司" + company.CompanyName.ToString() + "管理员用户不存在";
  725. AddMessage(logInfo, ref logMessage);
  726. // AddLastMessage(ref logMessage);
  727. return "系统用户上传失败!";
  728. }
  729. }
  730. catch (Exception ex)
  731. {
  732. Logger.Information(ex.Message);
  733. }
  734.  
  735. Guid UserId = User.Id;
  736. Guid OrganizationId = User.OrgId.Value;
  737. List<Int32> LogRowNumber = new List<Int32>();
  738. #endregion
  739.  
  740. #region get all value
  741. using (FileStream newFs = new FileStream(filePath, FileMode.Open))
  742. {
  743. IExcelDataReader excelReader;
  744. if (extion.Equals(".xls"))
  745. {
  746. excelReader = ExcelReaderFactory.CreateBinaryReader(newFs);
  747. }
  748. else
  749. {
  750. excelReader = ExcelReaderFactory.CreateOpenXmlReader(newFs);
  751. }
  752. Boolean AllCheckResult = true;
  753. var sheet = excelReader.AsDataSet().Tables[sheetNum];
  754. for (int r = ; r < sheet.Rows.Count; r++)
  755. {
  756. Object[] currentRow = sheet.Rows[r].ItemArray;
  757. if (
  758. String.IsNullOrEmpty(currentRow[].ToString())
  759. && String.IsNullOrEmpty(currentRow[].ToString())
  760. && String.IsNullOrEmpty(currentRow[].ToString())
  761. && String.IsNullOrEmpty(currentRow[].ToString())
  762. && String.IsNullOrEmpty(currentRow[].ToString())
  763. && String.IsNullOrEmpty(currentRow[].ToString())
  764. && String.IsNullOrEmpty(currentRow[].ToString())
  765. && String.IsNullOrEmpty(currentRow[].ToString())
  766. && String.IsNullOrEmpty(currentRow[].ToString())
  767. && String.IsNullOrEmpty(currentRow[].ToString())
  768. && String.IsNullOrEmpty(currentRow[].ToString())
  769. )
  770. { continue; }
  771.  
  772. #region read data row
  773. DataRow ThisRow = Dt.NewRow();
  774. ThisRow[] = currentRow[].ToString();//用户名UserName
  775. ThisRow[] = currentRow[].ToString();//员工编号EmployeeCode
  776. ThisRow[] = currentRow[].ToString(); //性别Gender
  777. ThisRow[] = currentRow[].ToString(); //组织机构编码OrgId
  778. ThisRow[] = currentRow[].ToString();//电话UserTel
  779. ThisRow[] = currentRow[].ToString();//邮箱UserEmail
  780. ThisRow[] = currentRow[].ToString();//登录ID
  781. ThisRow[] = currentRow[].ToString();//密码
  782. ThisRow[] = currentRow[].ToString();//系统角色AdminRole
  783. ThisRow[] = currentRow[].ToString();//角色名称
  784. ThisRow[] = currentRow[].ToString();//备注
  785. #endregion
  786.  
  787. #region check repeat
  788. //员工编码check加在Excel
  789. Dt.Rows.Add(ThisRow);
  790. LogRowNumber.Add(r + );
  791. #endregion
  792.  
  793. }
  794. #endregion
  795.  
  796. #region Get all fixed data
  797.  
  798. #region Get ready data
  799.  
  800. List<TsysCompOrg> allOrg = _tsysManagementBusiness.GetAllSYSCompOrg(compId);
  801. String Mark = "";
  802. try
  803. {
  804. Mark = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == Compid).FirstOrDefault().CompanyLoginMark;
  805. }
  806. catch (Exception ex)
  807. {
  808. Logger.Information(ex.Message);
  809. }
  810. List<TsysCompRole> AllCompRole = _tsysManagementBusiness.GetTsysCompRole(compId);
  811.  
  812. //性别
  813. var ProductiveNature = Guid.Parse("00000000-0000-0000-0000-000000000000");
  814. List<TsysCompCode> gender = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == ProductiveNature && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  815.  
  816. //系统角色
  817. var SystemRole = Guid.Parse("00000000-0000-0000-0000-000000000000");
  818. List<TsysCompCode> adminRole = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == SystemRole && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  819. #endregion
  820. for (int i = ; i < Dt.Rows.Count; i++)
  821. {
  822. TerpUserAndRole userAndRole = new TerpUserAndRole();
  823. userAndRole.Id = Guid.NewGuid();
  824. userAndRole.UserName = Dt.Rows[i][].ToString();
  825. userAndRole.EmployeeCode = Dt.Rows[i][].ToString();
  826.  
  827. if (!string.IsNullOrEmpty(Dt.Rows[i][].ToString()))
  828. {
  829. TsysCompCode _gender = gender.FirstOrDefault(t => t.Item_Name.Equals(Dt.Rows[i][].ToString()));
  830. if (_gender == null)
  831. {
  832. logInfo = "第" + LogRowNumber[i].ToString() + "行" + "第" + () + "列" + "性别未获取到";
  833. AddMessage(logInfo, ref logMessage);
  834. AllCheckResult = false;
  835. }
  836. else
  837. {
  838. userAndRole.Gender = _gender.Category_Code + _gender.Item_Code;
  839. }
  840. }
  841.  
  842. if (!string.IsNullOrEmpty(Dt.Rows[i][].ToString()))
  843. {
  844. if (allOrg != null)
  845. {
  846. TsysCompOrg org = allOrg.Where(x => !String.IsNullOrEmpty(x.OrgName) && x.OrgName.Equals(Dt.Rows[i][].ToString())).FirstOrDefault();
  847. if (org == null)
  848. {
  849. logInfo = "第" + LogRowNumber[i].ToString() + "行" + "第" + () + "列" + "组织机构未获取到";
  850. AddMessage(logInfo, ref logMessage);
  851. AllCheckResult = false;
  852. }
  853. else
  854. {
  855. userAndRole.OrgId = org.Id;
  856. }
  857. }
  858. else
  859. {
  860. logInfo = "第" + LogRowNumber[i].ToString() + "行" + "第" + () + "列" + "组织机构未获取到";
  861. AddMessage(logInfo, ref logMessage);
  862. AllCheckResult = false;
  863. }
  864. }
  865.  
  866. userAndRole.UserTel = Dt.Rows[i][].ToString();
  867. userAndRole.UserEmail = Dt.Rows[i][].ToString();
  868. userAndRole.LoginId = Dt.Rows[i][].ToString() + "@" + Mark;
  869.  
  870. string psw = Dt.Rows[i][].ToString();
  871. string salt = CreateSalt();
  872. string enPsw = ComputeHash(psw, salt);
  873. userAndRole.Password = psw;
  874. userAndRole.Salt = salt;
  875. userAndRole.LoginPwd = enPsw;
  876.  
  877. TsysCompCode _adminRole = adminRole.FirstOrDefault(t => t.Item_Name.Equals(Dt.Rows[i][].ToString()));
  878. if (_adminRole == null)
  879. {
  880. logInfo = "第" + LogRowNumber[i].ToString() + "行" + "第" + () + "列" + "系统角色未获取到";
  881. AddMessage(logInfo, ref logMessage);
  882. AllCheckResult = false;
  883. }
  884. else
  885. {
  886. userAndRole.AdminRole = _adminRole.Category_Code + _adminRole.Item_Code;
  887. }
  888.  
  889. if (!String.IsNullOrEmpty(compId))
  890. {
  891. userAndRole.CompanyId = Guid.Parse(compId);
  892. }
  893.  
  894. userAndRole.Memo = Dt.Rows[i][].ToString();
  895.  
  896. if (String.IsNullOrEmpty(Dt.Rows[i][].ToString()))
  897. {
  898. TsysCompRole CompRole = AllCompRole.Where(x => !String.IsNullOrEmpty(x.Role_Name) && x.Role_Name.Equals("普通用户")).FirstOrDefault();
  899. userAndRole.RelativeRoleId = CompRole.Id;
  900. }
  901. else
  902. {
  903. TsysCompRole CompRole = AllCompRole.Where(x => !String.IsNullOrEmpty(x.Role_Name) && x.Role_Name.Equals(Dt.Rows[i][].ToString())).FirstOrDefault();
  904. if (CompRole == null)
  905. {
  906. logInfo = "第" + LogRowNumber[i].ToString() + "行" + "第" + () + "列" + "角色名称未获取到";
  907. AddMessage(logInfo, ref logMessage);
  908. AllCheckResult = false;
  909. }
  910. else
  911. {
  912. userAndRole.RelativeRoleId = CompRole.Id;
  913. }
  914. }
  915. AllUserAndRoleData.Add(userAndRole);
  916.  
  917. }
  918.  
  919. if (!AllCheckResult)
  920. {
  921. AddLastMessage(ref logMessage);
  922. return "系统用户上传失败!";
  923. }
  924. #endregion
  925.  
  926. #region insert / update
  927. try
  928. {
  929. Guid CompId = Guid.Parse(compId);
  930.  
  931. // 取得当前表中数据
  932. List<TsysUser> _userList = _unitOfWork.Repository<TsysUser>().Get(t => t.Status == EntityStatusEnum.Active && t.CompanyId == CompId).ToList();
  933. List<TsysUserRole> _roleList = _unitOfWork.Repository<TsysUserRole>().Get(t => t.Status == EntityStatusEnum.Active && t.CompanyId == CompId).ToList();
  934.  
  935. var userMearge = from a in AllUserAndRoleData
  936. join b in _userList on a.EmployeeCode equals b.EmployeeCode into temp
  937. from tt in temp.DefaultIfEmpty()
  938. select
  939. new
  940. {
  941. t1 = a,
  942. t2 = tt
  943. };
  944.  
  945. //用户表数据取出
  946. var userInsert = userMearge.Where(t => t.t2 == null).Select(t => t.t1).ToList();
  947. var userOldUpdate = userMearge.Where(t => t.t2 != null).Select(t => t.t2).ToList();
  948. var userUpdate = userMearge.Where(t => t.t2 != null).Select(t => t.t1).ToList();
  949.  
  950. // 修改当前库为临时库
  951. ;
  952.  
  953. // 获取一个空表
  954. DataTable userDT = DBHelper.GetDataSet("select * from TsysUser where 1<>1");
  955. DataTable roleDT = DBHelper.GetDataSet("select * from TsysUserRole where 1<>1");
  956.  
  957. #region 批量赋值
  958. userInsert.ForEach(t =>
  959. {
  960. DataRow row = userDT.NewRow();
  961. row["Id"] = t.Id;
  962. row["LoginId"] = String.IsNullOrEmpty(t.LoginId) ? "" : t.LoginId;
  963. row["LoginPwd"] = String.IsNullOrEmpty(t.LoginPwd) ? "" : t.LoginPwd;
  964. row["Salt"] = String.IsNullOrEmpty(t.Salt) ? "" : t.Salt;
  965. row["AdminRole"] = String.IsNullOrEmpty(t.AdminRole) ? "" : t.AdminRole;
  966. row["UserName"] = String.IsNullOrEmpty(t.UserName) ? "" : t.UserName;
  967. row["Gender"] = String.IsNullOrEmpty(t.Gender) ? "" : t.Gender;
  968. row["EmployeeCode"] = String.IsNullOrEmpty(t.EmployeeCode) ? "" : t.EmployeeCode;
  969. row["OrgId"] = t.OrgId;
  970. row["UserEmail"] = String.IsNullOrEmpty(t.UserEmail) ? "" : t.UserEmail;
  971. row["UserTel"] = String.IsNullOrEmpty(t.UserTel) ? "" : t.UserTel;
  972. row["VerificationCode"] = String.IsNullOrEmpty(t.VerificationCode) ? "" : t.VerificationCode;
  973. if (t.VerificationDate != null) row["VerificationDate"] = t.VerificationDate;
  974. row["Memo"] = String.IsNullOrEmpty(t.Memo) ? "" : t.Memo;
  975. if (t.BelongToCompanyId != null) row["BelongToCompanyId"] = t.BelongToCompanyId; else row["BelongToCompanyId"] = new Guid();
  976. row["OrganizationId"] = OrganizationId;
  977. row["UserId"] = UserId;
  978. row["CompanyId"] = CompId;
  979. row["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  980. row["Status"] = ;
  981. row["RowVersion"] = default(byte[]);
  982. row["CreatedDate"] = DateTime.Now;
  983. row["CreatedBy"] = UserId;
  984. row["UpdatedDate"] = DateTime.Now;
  985. row["UpdatedBy"] = UserId;
  986. row["Enable"] = "";
  987. userDT.Rows.Add(row);
  988. DataRow row1 = roleDT.NewRow();
  989. row1["Id"] = Guid.NewGuid();
  990. if (t.Id != null) row1["RelativeUserId"] = t.Id;
  991. if (t.RelativeRoleId != null) row1["RelativeRoleId"] = t.RelativeRoleId;
  992. row1["OrganizationId"] = OrganizationId;
  993. row1["UserId"] = UserId;
  994. row1["CompanyId"] = CompId;
  995. row1["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  996. row1["Status"] = ;
  997. row1["RowVersion"] = default(byte[]);
  998. row1["CreatedDate"] = DateTime.Now;
  999. row1["CreatedBy"] = UserId;
  1000. row1["UpdatedDate"] = DateTime.Now;
  1001. row1["UpdatedBy"] = UserId;
  1002. roleDT.Rows.Add(row1);
  1003. });
  1004. #endregion
  1005. try
  1006. {
  1007. // 批量插入
  1008. DBHelper.BulkInsert(userDT, "TsysUser");
  1009. DBHelper.BulkInsert(roleDT, "TsysUserRole");
  1010. }
  1011. catch (Exception ex)
  1012. {
  1013. Logger.Error(ex);
  1014. if (String.IsNullOrEmpty(logMessage))
  1015. return "系统用户上传失败!";
  1016. else
  1017. {
  1018. AddLastMessage(ref logMessage);
  1019. return "系统用户上传失败!";
  1020. }
  1021. }
  1022. try
  1023. {
  1024. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(, , )))
  1025. {
  1026. var dbset = _context.Set<TsysUser>().ToList();
  1027. for (int i = ; i < userUpdate.Count; i++)
  1028. {
  1029. TsysUser findReuslt = dbset.FirstOrDefault(t => t.Id.Equals(userOldUpdate[i].Id));
  1030. TerpUserAndRole updateResult = userUpdate.FirstOrDefault(t => t.EmployeeCode.Equals(userOldUpdate[i].EmployeeCode));
  1031. findReuslt.LoginPwd = updateResult.LoginPwd;
  1032. findReuslt.Salt = updateResult.Salt;
  1033. findReuslt.AdminRole = updateResult.AdminRole;
  1034. findReuslt.UserName = updateResult.UserName;
  1035. findReuslt.Gender = updateResult.Gender;
  1036. findReuslt.EmployeeCode = updateResult.EmployeeCode;
  1037. findReuslt.OrgId = updateResult.OrgId;
  1038. findReuslt.UserEmail = updateResult.UserEmail;
  1039. findReuslt.UserTel = updateResult.UserTel;
  1040. findReuslt.Memo = updateResult.Memo;
  1041. findReuslt.LoginId = updateResult.LoginId;
  1042. findReuslt.UpdatedDate = DateTime.Now;
  1043. }
  1044.  
  1045. _context.SaveChanges();
  1046. scope.Complete();
  1047. }
  1048. }
  1049. catch (Exception ex)
  1050. {
  1051. Logger.Error(ex);
  1052. if (String.IsNullOrEmpty(logMessage))
  1053. return "系统用户上传失败!";
  1054. else
  1055. {
  1056. AddLastMessage(ref logMessage);
  1057. return "系统用户上传失败!";
  1058. }
  1059. }
  1060. }
  1061. catch (Exception ex)
  1062. {
  1063. Logger.Error(ex);
  1064. if (String.IsNullOrEmpty(logMessage))
  1065. return "系统用户上传失败!";
  1066. else
  1067. {
  1068. AddLastMessage(ref logMessage);
  1069. return "系统用户上传失败!";
  1070. }
  1071. }
  1072. #endregion
  1073.  
  1074. return "系统用户上传成功!";
  1075. }
  1076. }
  1077. #endregion
  1078.  
  1079. #region 公司角色名称上传
  1080.  
  1081. //公司角色名称上传
  1082. public String UploadTsysCompRole(String filePath, String compId, String FileName)
  1083. {
  1084. String logInfo = "";
  1085. String logMessage = "";
  1086. Logger.Information("开始上传公司角色...");
  1087. var extion = Path.GetExtension(filePath);
  1088. int sheetNum = ;//读取sheet页
  1089. Guid Compid = Guid.Parse(compId);
  1090. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == Compid).ToList().FirstOrDefault();
  1091. //类型,长度验证
  1092. using (FileStream fs = new FileStream(filePath, FileMode.Open))
  1093. {
  1094. if (!this.BaseDataTemplateCheckTemplate(extion, fs, compId, FileName, ref logMessage, sheetNum))
  1095. {
  1096. return "公司角色上传失败!";
  1097. }
  1098. }
  1099. #region 数据存在,不能再次插入
  1100. TsysUser User = new TsysUser();
  1101. try
  1102. {
  1103. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == Compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  1104. if (User == null)
  1105. {
  1106. logInfo = "公司" + company.CompanyName.ToString() + "管理员用户不存在";
  1107. AddMessage(logInfo, ref logMessage);
  1108. // AddLastMessage(ref logMessage);
  1109. return "公司角色上传失败!";
  1110. }
  1111. }
  1112. catch (Exception ex)
  1113. {
  1114. Logger.Information(ex.Message);
  1115. }
  1116. Guid UserId = User.Id;
  1117. Guid OrganizationId = User.OrgId.Value;
  1118.  
  1119. List<TsysCompRole> CompRoleList = new List<TsysCompRole>();
  1120. try
  1121. {
  1122. CompRoleList = _unitOfWork.Repository<TsysCompRole>().Get(x => x.CompanyId == Compid && x.Status == ).ToList();
  1123. }
  1124. catch (Exception ex)
  1125. {
  1126.  
  1127. Logger.Information(ex.Message);
  1128. }
  1129.  
  1130. if (CompRoleList.Count > )
  1131. {
  1132.  
  1133. foreach (var item in CompRoleList)
  1134. {
  1135. if (item.Role_Name.Equals("全部角色") || item.Role_Name.Equals("普通用户") || item.Role_Name.Equals("系统管理员"))
  1136. {
  1137. }
  1138. else
  1139. {
  1140. try
  1141. {
  1142. _tsysCompRoleBusiness.ISPDelete(item.Id);
  1143. }
  1144. catch (Exception ex)
  1145. {
  1146. item.Status = EntityStatusEnum.Active;
  1147. _tsysCompRoleBusiness.ISPUpdate(item);
  1148. logInfo = "数据正在被使用,无法再次重新上传,请在功能菜单上更正数据。";
  1149. AddMessage(logInfo, ref logMessage);
  1150. // AddLastMessage(ref logMessage);
  1151. return "公司角色上传失败!";
  1152. }
  1153. }
  1154. }
  1155. }
  1156. #endregion
  1157.  
  1158. #region 共同验证 容器准备
  1159.  
  1160. //容器准备
  1161. List<Tuple<String, String, String, String>> AllExcelData = new List<Tuple<String, String, String, String>>();
  1162. Dictionary<int, TsysCompRole> AllFixedData = new Dictionary<int, TsysCompRole>();
  1163. List<CheckTreeBModel> AllTree = new List<CheckTreeBModel>();
  1164. List<UploadCompRoleBModel> NodeRoles = new List<UploadCompRoleBModel>();
  1165. List<CheckRoleTreeBModel> AllRoleTree = new List<CheckRoleTreeBModel>(); //用来存储excel和db中所有角色名称
  1166.  
  1167. #endregion
  1168.  
  1169. #region 读取excel数据
  1170. using (FileStream newFs = new FileStream(filePath, FileMode.Open))
  1171. {
  1172. IExcelDataReader excelReader;
  1173. if (extion.Equals(".xls"))
  1174. {
  1175. excelReader = ExcelReaderFactory.CreateBinaryReader(newFs);
  1176. }
  1177. else
  1178. {
  1179. excelReader = ExcelReaderFactory.CreateOpenXmlReader(newFs);
  1180. }
  1181. Boolean AllCheckResult = true;
  1182. var sheet = excelReader.AsDataSet().Tables[sheetNum];
  1183. for (int r = ; r < sheet.Rows.Count; r++)
  1184. {
  1185. Object[] currentRow = sheet.Rows[r].ItemArray;
  1186. #region 读取行数据
  1187. if (String.IsNullOrEmpty(currentRow[].ToString())
  1188. && String.IsNullOrEmpty(currentRow[].ToString())
  1189. && String.IsNullOrEmpty(currentRow[].ToString())
  1190. && String.IsNullOrEmpty(currentRow[].ToString())
  1191. ) { continue; }
  1192.  
  1193. Tuple<String, String, String, String> ThisRow = new Tuple<String, String, String, String>(
  1194.  
  1195. currentRow[].ToString(), //角色编码
  1196. currentRow[].ToString(), //角色名称
  1197. currentRow[].ToString(), //角色类型
  1198. currentRow[].ToString() //父角色编码
  1199. );
  1200. #endregion
  1201. //编码重复验证在Excel
  1202. AllExcelData.Add(ThisRow);
  1203. AllTree.Add(new CheckTreeBModel() { Child = ThisRow.Item1, Parent = ThisRow.Item4, RowNumber = r + });
  1204. AllRoleTree.Add(new CheckRoleTreeBModel() { Child = ThisRow.Item1, Parent = ThisRow.Item4, RowNumber = r + , Role_Type = ThisRow.Item3 });
  1205. }
  1206. #endregion
  1207.  
  1208. // 角色类型
  1209. var ProductiveNature = Guid.Parse("00000000-0000-0000-0000-000000000000");
  1210. List<TsysCompCode> Role_Type = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == ProductiveNature && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1211. #region 父子级验证,码表验证
  1212. List<CheckTreeBModel> TreeBModel = new List<CheckTreeBModel>();
  1213. TreeBModel = _tsysManagementBusiness.CheckTree(AllTree);
  1214. for (int i = ; i < AllExcelData.Count; i++)
  1215. {
  1216. Boolean isTrue = _tsysManagementBusiness.CheckTree(TreeBModel, AllExcelData[i].Item1, AllExcelData[i].Item4);
  1217. if (!isTrue)
  1218. {
  1219. logInfo = "第" + AllTree[i].RowNumber.ToString() + "行" + "角色编码父子级不正确";
  1220. AddMessage(logInfo, ref logMessage);
  1221. AllCheckResult = false;
  1222. }
  1223.  
  1224. TsysCompCode _Role_Type = Role_Type.FirstOrDefault(t => t.Item_Name.Equals(AllExcelData[i].Item3));
  1225. //码表Check
  1226. if (_Role_Type == null)
  1227. {
  1228. logInfo = "第" + AllTree[i].RowNumber.ToString() + "行" + () + "列" + "角色类型未获取到";
  1229. AddMessage(logInfo, ref logMessage);
  1230. AllCheckResult = false;
  1231. }
  1232.  
  1233. //父元素角色类型Check
  1234. if (AllRoleTree.Any(x => x.Child == AllExcelData[i].Item4) && !AllRoleTree.Any(x => x.Child == AllExcelData[i].Item4 && (x.Role_Type.Equals("分组") || x.Role_Type.Equals(""))))
  1235. {
  1236. logInfo = "第" + AllTree[i].RowNumber.ToString() + "行父元素角色类型为角色,不可新建子角色";
  1237. AddMessage(logInfo, ref logMessage);
  1238. AllCheckResult = false;
  1239. }
  1240. }
  1241. #endregion
  1242.  
  1243. #region Check不过Return
  1244. if (!AllCheckResult)
  1245. {
  1246. AddLastMessage(ref logMessage);
  1247. return "公司角色上传失败!";
  1248. }
  1249. #endregion
  1250.  
  1251. #region Tree结构
  1252.  
  1253. Hashtable nodeRoleList = new Hashtable();
  1254. int row = ;
  1255.  
  1256. foreach (var item in AllExcelData)
  1257. {
  1258. TsysCompCode _Role_Type = Role_Type.FirstOrDefault(t => t.Item_Name.Equals(item.Item3));
  1259. nodeRoleList.Add(item.Item1, new UploadCompRoleBModel
  1260. {
  1261. ChildCode = item.Item1,
  1262. Id = Guid.NewGuid(),
  1263. ParentCode = item.Item4,
  1264. RoleName = item.Item2,
  1265. Role_Type = _Role_Type.Category_Code + _Role_Type.Item_Code,
  1266. RowExcel = row++,
  1267. Items = new List<UploadCompRoleBModel>()
  1268. });
  1269. }
  1270. Hashtable SortRoleList = new Hashtable();
  1271.  
  1272. foreach (UploadCompRoleBModel item in nodeRoleList.Values)
  1273. {
  1274. if (string.IsNullOrEmpty(item.ParentCode))
  1275. NodeRoles.Add(item);
  1276. else
  1277. {
  1278. List<UploadCompRoleBModel> Items = ((UploadCompRoleBModel)nodeRoleList[item.ParentCode]).Items;
  1279. Items.Add(item);
  1280. if (SortRoleList[item.ParentCode] == null && Items.Count > )
  1281. {
  1282. SortRoleList.Add(item.ParentCode, Items);
  1283. }
  1284. }
  1285. }
  1286. #endregion
  1287.  
  1288. AllFixedData = _tsysManagementBusiness.RoleBModelToEntity(NodeRoles, Compid);//获取父子级顺序的集合
  1289.  
  1290. #region Insert/Update
  1291. ;
  1292. // 获取一个空表
  1293. DataTable InsertDT = DBHelper.GetDataSet("select * from TsysCompRole where 1<>1");
  1294.  
  1295. AllFixedData.ToList().ForEach(t =>
  1296. {
  1297. DataRow InsertRow = InsertDT.NewRow();
  1298. InsertRow["Id"] = t.Value.Id;
  1299. InsertRow["Role_Code"] = String.IsNullOrEmpty(t.Value.Role_Code) ? "" : t.Value.Role_Code;
  1300. InsertRow["Role_Name"] = String.IsNullOrEmpty(t.Value.Role_Name) ? "" : t.Value.Role_Name;
  1301. InsertRow["Role_Type"] = String.IsNullOrEmpty(t.Value.Role_Type) ? "" : t.Value.Role_Type;
  1302. if (t.Value.SortNo != null) InsertRow["SortNo"] = t.Value.SortNo;
  1303. InsertRow["Node_Code"] = String.IsNullOrEmpty(t.Value.Node_Code) ? "" : t.Value.Node_Code;
  1304. if (t.Value.Parent_RoleId != null) InsertRow["Parent_RoleId"] = t.Value.Parent_RoleId;
  1305. InsertRow["OrganizationId"] = OrganizationId;
  1306. InsertRow["UserId"] = UserId;
  1307. InsertRow["CompanyId"] = Compid;
  1308. InsertRow["SourceId"] = String.IsNullOrEmpty(t.Value.SourceId) ? "" : t.Value.SourceId;
  1309. InsertRow["Status"] = ;
  1310. InsertRow["RowVersion"] = default(byte[]);
  1311. InsertRow["CreatedDate"] = DateTime.Now;
  1312. InsertRow["CreatedBy"] = UserId;
  1313. InsertRow["UpdatedDate"] = DateTime.Now;
  1314. InsertRow["UpdatedBy"] = UserId;
  1315. InsertDT.Rows.Add(InsertRow);
  1316. });
  1317. try
  1318. {
  1319. DBHelper.BulkInsert(InsertDT, "TsysCompRole");
  1320. }
  1321. catch (Exception ex)
  1322. {
  1323. Logger.Error(ex);
  1324. if (String.IsNullOrEmpty(logMessage))
  1325. return "公司角色上传失败!";
  1326. else
  1327. {
  1328. AddLastMessage(ref logMessage);
  1329. return "公司角色上传失败!";
  1330. }
  1331. }
  1332. #endregion
  1333.  
  1334. return "公司角色上传成功!";
  1335. }
  1336. // }
  1337. //}
  1338. }
  1339. #endregion
  1340.  
  1341. #region 人员基本信息上传
  1342.  
  1343. // 人员基本信息上传
  1344. public String UploadTerpPersonInfo(String filePath, String compId, string FileName)
  1345. {
  1346. String logMessage = "";
  1347. String logInfo = "";
  1348. Logger.Information("开始上传人员基本信息...");
  1349. var extion = Path.GetExtension(filePath);
  1350. int sheetNum = ;//读取sheet页
  1351. #region ready
  1352. using (FileStream fs = new FileStream(filePath, FileMode.Open))
  1353. {
  1354. if (!this.BaseDataTemplateCheckTemplate(extion, fs, compId, FileName, ref logMessage, sheetNum))
  1355. {
  1356. return "人员基本信息上传失败!";
  1357. }
  1358. }
  1359.  
  1360. #endregion
  1361.  
  1362. #region get all value
  1363. Guid compid = Guid.Parse(compId);
  1364. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == compid).ToList().FirstOrDefault();
  1365. using (FileStream newFs = new FileStream(filePath, FileMode.Open))
  1366. {
  1367. IExcelDataReader excelReader;
  1368. if (extion.Equals(".xls"))
  1369. {
  1370. excelReader = ExcelReaderFactory.CreateBinaryReader(newFs);
  1371. }
  1372. else
  1373. {
  1374. excelReader = ExcelReaderFactory.CreateOpenXmlReader(newFs);
  1375. }
  1376. Boolean AllCheckResult = true;
  1377.  
  1378. TsysUser User = new TsysUser();
  1379. try
  1380. {
  1381. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  1382. if (User == null)
  1383. {
  1384. logInfo = "公司" + company.CompanyName.ToString() + "管理员用户不存在";
  1385. if (!excelReader.IsClosed)
  1386. {
  1387. excelReader.Close();
  1388. }
  1389. AddMessage(logInfo, ref logMessage);
  1390. // AddLastMessage(ref logMessage);
  1391. return "人员基本信息上传失败!";
  1392. }
  1393. }
  1394. catch (Exception ex)
  1395. {
  1396.  
  1397. Logger.Information(ex.Message);
  1398. }
  1399.  
  1400. Guid UserId = User.Id;
  1401. Guid OrganizationId = User.OrgId.Value;
  1402. #region 码表插入
  1403. System.Data.DataTable secondSheet = excelReader.AsDataSet().Tables[sheetNum + ];
  1404. secondSheet.Rows[].Delete();
  1405. secondSheet.AcceptChanges();
  1406. //政治状态
  1407. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1408. //民族
  1409. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1410. //在职状态
  1411. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1412. //职称
  1413. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1414. //银行
  1415. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1416. //离职类型
  1417. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1418. //户口性质
  1419. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1420. //所属公司
  1421. SaveCompanyCodeCategoryBySecondSheet(, secondSheet, "", compid);
  1422. #endregion
  1423.  
  1424. List<TerpPersonInfo> AllFixdExeclData = new List<TerpPersonInfo>();
  1425.  
  1426. List<TsysCompOrg> allOrg = _tsysManagementBusiness.GetAllSYSCompOrg(compId);
  1427.  
  1428. // 性别
  1429. var ProductiveNature = Guid.Parse("00000000-0000-0000-0000-000000000000");
  1430. List<TsysCompCode> gender = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == ProductiveNature && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1431.  
  1432. // 婚姻状况
  1433. ProductiveNature = Guid.Parse("00000000-0000-0000-0000-000000000000");
  1434. List<TsysCompCode> maritalStatus = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == ProductiveNature && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1435.  
  1436. // 政治面貌
  1437. List<TsysCompCode> PoliticsStatus = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1438.  
  1439. // 民族
  1440. List<TsysCompCode> Nationality = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1441.  
  1442. // 在职状态
  1443. List<TsysCompCode> workState = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1444.  
  1445. // 员工类型
  1446. ProductiveNature = Guid.Parse("00000000-0000-0000-0000-000000000000");
  1447. List<TsysCompCode> employeeType = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == ProductiveNature && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1448.  
  1449. // 最高职称
  1450. List<TsysCompCode> workRank = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1451.  
  1452. // 开户银行
  1453. List<TsysCompCode> Bank = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1454.  
  1455. // 离职类型
  1456. List<TsysCompCode> dimissionType = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1457.  
  1458. //户口性质
  1459. List<TsysCompCode> Nature = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1460.  
  1461. //所属公司
  1462. List<TsysCompCode> CompanyName = _unitOfWork.Repository<TsysCompCode>().Get(t => t.CompanyId == compid && t.Category_Code == "" && t.Status == EntityStatusEnum.Active).ToList();
  1463.  
  1464. //读取数据
  1465. var sheet = excelReader.AsDataSet().Tables[sheetNum];
  1466. for (int r = ; r < sheet.Rows.Count; r++)
  1467. {
  1468. Object[] currentRow = sheet.Rows[r].ItemArray;
  1469. if (
  1470. String.IsNullOrEmpty(currentRow[].ToString())
  1471. && String.IsNullOrEmpty(currentRow[].ToString())
  1472. && String.IsNullOrEmpty(currentRow[].ToString())
  1473. && String.IsNullOrEmpty(currentRow[].ToString())
  1474. && String.IsNullOrEmpty(currentRow[].ToString())
  1475. && String.IsNullOrEmpty(currentRow[].ToString())
  1476. && String.IsNullOrEmpty(currentRow[].ToString())
  1477. && String.IsNullOrEmpty(currentRow[].ToString())
  1478. && String.IsNullOrEmpty(currentRow[].ToString())
  1479. && String.IsNullOrEmpty(currentRow[].ToString())
  1480. && String.IsNullOrEmpty(currentRow[].ToString())
  1481. && String.IsNullOrEmpty(currentRow[].ToString())
  1482. && String.IsNullOrEmpty(currentRow[].ToString())
  1483. && String.IsNullOrEmpty(currentRow[].ToString())
  1484. && String.IsNullOrEmpty(currentRow[].ToString())
  1485. && String.IsNullOrEmpty(currentRow[].ToString())
  1486. && String.IsNullOrEmpty(currentRow[].ToString())
  1487. && String.IsNullOrEmpty(currentRow[].ToString())
  1488. && String.IsNullOrEmpty(currentRow[].ToString())
  1489. && String.IsNullOrEmpty(currentRow[].ToString())
  1490. && String.IsNullOrEmpty(currentRow[].ToString())
  1491. && String.IsNullOrEmpty(currentRow[].ToString())
  1492. && String.IsNullOrEmpty(currentRow[].ToString())
  1493. && String.IsNullOrEmpty(currentRow[].ToString())
  1494. && String.IsNullOrEmpty(currentRow[].ToString())
  1495. && String.IsNullOrEmpty(currentRow[].ToString())
  1496. && String.IsNullOrEmpty(currentRow[].ToString())
  1497. && String.IsNullOrEmpty(currentRow[].ToString())
  1498. && String.IsNullOrEmpty(currentRow[].ToString())
  1499. && String.IsNullOrEmpty(currentRow[].ToString())
  1500. && String.IsNullOrEmpty(currentRow[].ToString())
  1501. && String.IsNullOrEmpty(currentRow[].ToString())
  1502. && String.IsNullOrEmpty(currentRow[].ToString())
  1503. && String.IsNullOrEmpty(currentRow[].ToString())
  1504. && String.IsNullOrEmpty(currentRow[].ToString())
  1505. )
  1506. { continue; }
  1507.  
  1508. //员工编号重复验证在Excel
  1509.  
  1510. TerpPersonInfo person = new TerpPersonInfo();
  1511. person.Id = Guid.NewGuid();
  1512. person.EmployeeCode = currentRow[].ToString();//员工编号
  1513. person.EmployeeName = currentRow[].ToString();//姓名
  1514.  
  1515. string orgName = currentRow[].ToString();//所属组织
  1516. if (allOrg == null || allOrg.Count == )
  1517. {
  1518. logInfo = "公司组织机构信息未获取到";
  1519. AddMessage(logInfo, ref logMessage);
  1520. AllCheckResult = false;
  1521. }
  1522. else
  1523. {
  1524. TsysCompOrg org = allOrg.Where(x => !String.IsNullOrEmpty(x.OrgName) && x.OrgName.Equals(orgName)).FirstOrDefault();
  1525. if (org == null)
  1526. {
  1527. logInfo = "第" + (r + ).ToString() + "行第3列所属组织未获取到";
  1528. AddMessage(logInfo, ref logMessage);
  1529. AllCheckResult = false;
  1530. }
  1531. else
  1532. {
  1533. person.OrgId = org.Id;
  1534. }
  1535.  
  1536. }
  1537.  
  1538. TsysCompCode _gender = gender.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString())); //性别 码表
  1539. if (_gender == null)
  1540. {
  1541. logInfo = "第" + (r + ).ToString() + "行第4列性别未获取到";
  1542. AddMessage(logInfo, ref logMessage);
  1543. AllCheckResult = false;
  1544. }
  1545. else
  1546. {
  1547. person.Gender = _gender.Category_Code + _gender.Item_Code;
  1548. }
  1549.  
  1550. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1551. {
  1552. person.Birthdate = Convert.ToDateTime(currentRow[].ToString());//出生日期
  1553. }
  1554.  
  1555. if (!string.IsNullOrEmpty(currentRow[].ToString()))
  1556. {
  1557. TsysCompCode _maritalStatus = maritalStatus.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));//婚姻状况 码表
  1558. if (_maritalStatus == null)
  1559. {
  1560. logInfo = "第" + (r + ).ToString() + "行第6列婚姻状况未获取到";
  1561. AddMessage(logInfo, ref logMessage);
  1562. AllCheckResult = false;
  1563. }
  1564. else
  1565. {
  1566. person.MaritalStatus = _maritalStatus.Category_Code + _maritalStatus.Item_Code;
  1567. }
  1568. }
  1569. person.IdNumber = currentRow[].ToString();//身份证号
  1570.  
  1571. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1572. {
  1573. TsysCompCode _PoliticsStatus = PoliticsStatus.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));//政治面貌 码表
  1574. if (_PoliticsStatus == null)
  1575. {
  1576. logInfo = "第" + (r + ).ToString() + "行第8列政治面貌未获取到";
  1577. AddMessage(logInfo, ref logMessage);
  1578. AllCheckResult = false;
  1579. }
  1580. else
  1581. {
  1582. person.PoliticsStatus = _PoliticsStatus.Category_Code + _PoliticsStatus.Item_Code;
  1583. }
  1584. }
  1585.  
  1586. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1587. {
  1588. TsysCompCode _Nationality = Nationality.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString())); //民族 码表
  1589. if (_Nationality == null)
  1590. {
  1591. logInfo = "第" + (r + ).ToString() + "行第9列民族未获取到";
  1592. AddMessage(logInfo, ref logMessage);
  1593. AllCheckResult = false;
  1594. }
  1595. else
  1596. {
  1597. person.Nationality = _Nationality.Category_Code + _Nationality.Item_Code;
  1598. }
  1599. }
  1600.  
  1601. person.MobilePhone = currentRow[].ToString();//移动电话
  1602. person.InterPhone = currentRow[].ToString();//内线电话
  1603. person.GroupPhone = currentRow[].ToString();//办公电话
  1604. person.EmailAddress = currentRow[].ToString();//电子邮件
  1605. person.EmergencyContact = currentRow[].ToString();//紧急联系人
  1606. person.EmergencyTel = currentRow[].ToString();//紧急联系人电话
  1607. person.HomePhone = currentRow[].ToString();//家庭电话
  1608. person.HomeAddress = currentRow[].ToString();//家庭住址
  1609. person.Memo = currentRow[].ToString();//备注
  1610.  
  1611. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1612. {
  1613. TsysCompCode _workState = workState.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));//在职状态 码表
  1614. if (_workState == null)
  1615. {
  1616. logInfo = "第" + (r + ).ToString() + "行第19列在职状态未获取到";
  1617. AddMessage(logInfo, ref logMessage);
  1618. AllCheckResult = false;
  1619. }
  1620. else
  1621. {
  1622. person.WorkState = _workState.Category_Code + _workState.Item_Code;
  1623. }
  1624. }
  1625.  
  1626. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1627. {
  1628. TsysCompCode _employeeType = employeeType.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString())); //员工类型 码表
  1629.  
  1630. if (_employeeType == null)
  1631. {
  1632. logInfo = "第" + (r + ).ToString() + "行第20列员工类型未获取到";
  1633. AddMessage(logInfo, ref logMessage);
  1634. AllCheckResult = false;
  1635. }
  1636. else
  1637. {
  1638. person.employeeType = _employeeType.Category_Code + _employeeType.Item_Code;
  1639. }
  1640. }
  1641. //参加工作日
  1642. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1643. {
  1644. person.WorkStartDate = Convert.ToDateTime(currentRow[].ToString());
  1645. }
  1646. //职务/岗位
  1647. person.Duty = currentRow[].ToString();
  1648.  
  1649. //加入工作日
  1650. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1651. {
  1652. person.TrialPeriodStartDate = Convert.ToDateTime(currentRow[].ToString());
  1653. }
  1654. //转正日期
  1655. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1656. {
  1657. person.RegularStartDate = Convert.ToDateTime(currentRow[].ToString());
  1658. }
  1659. //最高职称
  1660. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1661. {
  1662. TsysCompCode _workRank = workRank.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));//最高职称 码表
  1663. if (_workRank == null)
  1664. {
  1665. logInfo = "第" + (r + ).ToString() + "行第25列最高职称未获取到";
  1666. AddMessage(logInfo, ref logMessage);
  1667. AllCheckResult = false;
  1668. }
  1669. else
  1670. {
  1671. person.WorkRank = _workRank.Category_Code + _workRank.Item_Code;
  1672. }
  1673. }
  1674. //开户银行
  1675. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1676. {
  1677. TsysCompCode _Bank = Bank.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));//开户银行 码表
  1678. if (_Bank == null)
  1679. {
  1680. logInfo = "第" + (r + ).ToString() + "行第26列开户银行未获取到";
  1681. AddMessage(logInfo, ref logMessage);
  1682. AllCheckResult = false;
  1683. }
  1684. else
  1685. {
  1686. person.Bank = _Bank.Category_Code + _Bank.Item_Code;
  1687. }
  1688. }
  1689. person.BankCardNo = currentRow[].ToString();//银行账号
  1690. //离职日期
  1691. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1692. {
  1693. person.DimissionDate = Convert.ToDateTime(currentRow[].ToString());
  1694. }
  1695. //离职类型
  1696. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1697. {
  1698. TsysCompCode _dimissionType = dimissionType.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));
  1699. if (_dimissionType == null)
  1700. {
  1701. logInfo = "第" + (r + ).ToString() + "行第29列离职类型未获取到";
  1702. AddMessage(logInfo, ref logMessage);
  1703. AllCheckResult = false;
  1704. }
  1705. else
  1706. {
  1707. person.DimissionType = _dimissionType.Category_Code + _dimissionType.Item_Code;
  1708. }
  1709. }
  1710. //离职原因
  1711. person.DimissionReason = currentRow[].ToString();
  1712. //户籍所在地
  1713. person.Domicile = currentRow[].ToString();
  1714. //参保时间
  1715. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1716. {
  1717. person.InsuredTime = Convert.ToDateTime(currentRow[].ToString());
  1718. }
  1719. //户口性质
  1720. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1721. {
  1722. TsysCompCode _Nature = Nature.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));
  1723. if (_Nature == null)
  1724. {
  1725. logInfo = "第" + (r + ).ToString() + "行第33列离职类型未获取到";
  1726. AddMessage(logInfo, ref logMessage);
  1727. AllCheckResult = false;
  1728. }
  1729. else
  1730. {
  1731. person.Nature = _Nature.Category_Code + _Nature.Item_Code;
  1732. }
  1733. }
  1734. //家庭成员
  1735. person.Memberoffamily = currentRow[].ToString();
  1736. //所属公司
  1737. if (!String.IsNullOrEmpty(currentRow[].ToString()))
  1738. {
  1739. TsysCompCode _CompanyName = CompanyName.FirstOrDefault(t => t.Item_Name.Equals(currentRow[].ToString()));
  1740. if (_CompanyName == null)
  1741. {
  1742. logInfo = "第" + (r + ).ToString() + "行第35列离职类型未获取到";
  1743. AddMessage(logInfo, ref logMessage);
  1744. AllCheckResult = false;
  1745. }
  1746. else
  1747. {
  1748. person.CompanyName = _CompanyName.Category_Code + _CompanyName.Item_Code;
  1749. }
  1750. }
  1751. AllFixdExeclData.Add(person);
  1752. }
  1753. if (!AllCheckResult)
  1754. {
  1755. AddLastMessage(ref logMessage);
  1756. return "人员基本信息上传失败!";
  1757. }
  1758. #endregion
  1759.  
  1760. #region insert / update
  1761.  
  1762. //取出当前表中数据
  1763. List<TerpPersonInfo> _list = _unitOfWork.Repository<TerpPersonInfo>().Get(t => t.Status == EntityStatusEnum.Active && t.CompanyId == compid).ToList();
  1764.  
  1765. // 左联表,若当前DB中无匹配的数据则t2返回空,即t2 为空的是DB中不存在的数据,直接Insert(建议临时库可不考虑Update 情况,直接清表后Insert),
  1766. var mearge = from a in AllFixdExeclData
  1767. join b in _list on a.EmployeeCode equals b.EmployeeCode into temp
  1768. from tt in temp.DefaultIfEmpty()
  1769. select
  1770. new
  1771. {
  1772. t1 = a,
  1773. t2 = tt
  1774. };
  1775.  
  1776. // 取出需要Insert的记录
  1777. var batchInsert = mearge.Where(t => t.t2 == null).Select(t => t.t1).ToList();
  1778. var batchOldUpdate = mearge.Where(t => t.t2 != null).Select(t => t.t2).ToList();
  1779. var batchUpdate = mearge.Where(t => t.t2 != null).Select(t => t.t1).ToList();
  1780.  
  1781. ;
  1782. // 获取一个空表
  1783. DataTable PersonDT = DBHelper.GetDataSet("select * from TerpPersonInfo where 1<>1");
  1784. DataTable UserDT = DBHelper.GetDataSet("select * from TsysUser where 1<>1");
  1785. DataTable UserRoleDT = DBHelper.GetDataSet("select * from TsysUserRole where 1<>1");
  1786. String passWord = "DC3360";
  1787. Guid RelativeRoleId = _unitOfWork.Repository<TsysCompRole>().Get(x => x.Role_Name.Equals("普通用户") && x.CompanyId == compid).FirstOrDefault().Id;
  1788. batchInsert.ForEach(t =>
  1789. {
  1790. DataRow personRow = PersonDT.NewRow();
  1791. personRow["Id"] = t.Id;
  1792. personRow["EmployeeCode"] = String.IsNullOrEmpty(t.EmployeeCode) ? "" : t.EmployeeCode;
  1793. personRow["EmployeeName"] = String.IsNullOrEmpty(t.EmployeeName) ? "" : t.EmployeeName;
  1794. personRow["Gender"] = String.IsNullOrEmpty(t.Gender) ? "" : t.Gender;
  1795. personRow["Nationality"] = String.IsNullOrEmpty(t.Nationality) ? "" : t.Nationality;
  1796. personRow["EmailAddress"] = String.IsNullOrEmpty(t.EmailAddress) ? "" : t.EmailAddress;
  1797. personRow["IdNumber"] = String.IsNullOrEmpty(t.IdNumber) ? "" : t.IdNumber;
  1798. personRow["Nation"] = String.IsNullOrEmpty(t.Nation) ? "" : t.Nation;
  1799. personRow["HomeAddress"] = String.IsNullOrEmpty(t.HomeAddress) ? "" : t.HomeAddress;
  1800. personRow["PostCode"] = String.IsNullOrEmpty(t.PostCode) ? "" : t.PostCode;
  1801. personRow["MaritalStatus"] = String.IsNullOrEmpty(t.MaritalStatus) ? "" : t.MaritalStatus;
  1802. personRow["Country"] = String.IsNullOrEmpty(t.Country) ? "" : t.Country;
  1803. personRow["Birthplace"] = String.IsNullOrEmpty(t.Birthplace) ? "" : t.Birthplace;
  1804. personRow["PoliticsStatus"] = String.IsNullOrEmpty(t.PoliticsStatus) ? "" : t.PoliticsStatus;
  1805. personRow["EmergencyContact"] = String.IsNullOrEmpty(t.EmergencyContact) ? "" : t.EmergencyContact;
  1806. personRow["EmergencyTel"] = String.IsNullOrEmpty(t.EmergencyTel) ? "" : t.EmergencyTel;
  1807. if (t.Birthdate != null) personRow["Birthdate"] = t.Birthdate;
  1808. if (t.OrgId != null) personRow["OrgId"] = t.OrgId;
  1809. personRow["Duty"] = String.IsNullOrEmpty(t.Duty) ? "" : t.Duty;
  1810. personRow["MobilePhone"] = String.IsNullOrEmpty(t.MobilePhone) ? "" : t.MobilePhone;
  1811. personRow["HomePhone"] = String.IsNullOrEmpty(t.HomePhone) ? "" : t.HomePhone;
  1812. personRow["GraduateSchool"] = String.IsNullOrEmpty(t.GraduateSchool) ? "" : t.GraduateSchool;
  1813. personRow["Major"] = String.IsNullOrEmpty(t.Major) ? "" : t.Major;
  1814. personRow["Education"] = String.IsNullOrEmpty(t.Education) ? "" : t.Education;
  1815. personRow["Degree"] = String.IsNullOrEmpty(t.Degree) ? "" : t.Degree;
  1816. if (t.GraduateDate != null) personRow["GraduateDate"] = t.GraduateDate;
  1817. if (t.WorkStartDate != null) personRow["WorkStartDate"] = t.WorkStartDate;
  1818. personRow["TrialPeriod"] = String.IsNullOrEmpty(t.TrialPeriod) ? "" : t.TrialPeriod;
  1819. if (t.TrialPeriodStartDate != null) personRow["TrialPeriodStartDate"] = t.TrialPeriodStartDate;
  1820. if (t.TrialPeriodEndDate != null) personRow["TrialPeriodEndDate"] = t.TrialPeriodEndDate;
  1821. personRow["RegularType"] = String.IsNullOrEmpty(t.RegularType) ? "" : t.RegularType;
  1822. if (t.RegularStartDate != null) personRow["RegularStartDate"] = t.RegularStartDate;
  1823. personRow["CertificateFlg"] = String.IsNullOrEmpty(t.CertificateFlg) ? "" : t.CertificateFlg;
  1824. personRow["Bank"] = String.IsNullOrEmpty(t.Bank) ? "" : t.Bank;
  1825. personRow["BankCardNo"] = String.IsNullOrEmpty(t.BankCardNo) ? "" : t.BankCardNo;
  1826. personRow["GroupPhone"] = String.IsNullOrEmpty(t.GroupPhone) ? "" : t.GroupPhone;
  1827. personRow["InterPhone"] = String.IsNullOrEmpty(t.InterPhone) ? "" : t.InterPhone;
  1828. personRow["WorkState"] = String.IsNullOrEmpty(t.WorkState) ? "" : t.WorkState;
  1829. personRow["DimissionType"] = String.IsNullOrEmpty(t.DimissionType) ? "" : t.DimissionType;
  1830. if (t.DimissionDate != null) personRow["DimissionDate"] = t.DimissionDate;
  1831. personRow["DimissionReason"] = String.IsNullOrEmpty(t.DimissionReason) ? "" : t.DimissionReason;
  1832. personRow["ArchivalPlace"] = String.IsNullOrEmpty(t.ArchivalPlace) ? "" : t.ArchivalPlace;
  1833. if (t.EntryDate != null) personRow["EntryDate"] = t.EntryDate;
  1834. personRow["WorkRank"] = String.IsNullOrEmpty(t.WorkRank) ? "" : t.WorkRank;
  1835. //personRow["EmployeePic"] = String.IsNullOrEmpty(t.EmployeePic.ToString()) ? "" : t.EmployeePic.ToString();
  1836. personRow["Memo"] = String.IsNullOrEmpty(t.Memo) ? "" : t.Memo;
  1837. personRow["Domicile"] = String.IsNullOrEmpty(t.Domicile) ? "" : t.Domicile;
  1838. if (t.InsuredTime != null) personRow["InsuredTime"] = t.InsuredTime;
  1839. personRow["Nature"] = String.IsNullOrEmpty(t.Nature) ? "" : t.Nature;
  1840. personRow["Memberoffamily"] = String.IsNullOrEmpty(t.Memberoffamily) ? "" : t.Memberoffamily;
  1841. personRow["CompanyName"] = String.IsNullOrEmpty(t.CompanyName) ? "" : t.CompanyName;
  1842. personRow["employeeType"] = String.IsNullOrEmpty(t.employeeType) ? "" : t.employeeType;
  1843. personRow["OrganizationId"] = OrganizationId;
  1844. personRow["UserId"] = UserId;
  1845. personRow["CompanyId"] = compid;
  1846. personRow["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  1847. personRow["Status"] = ;
  1848. personRow["RowVersion"] = default(byte[]);
  1849. personRow["CreatedDate"] = DateTime.Now;
  1850. personRow["CreatedBy"] = UserId;
  1851. personRow["UpdatedDate"] = DateTime.Now;
  1852. personRow["UpdatedBy"] = UserId;
  1853. PersonDT.Rows.Add(personRow);
  1854. DataRow userRow = UserDT.NewRow();
  1855. userRow["Id"] = t.Id;
  1856. if (!String.IsNullOrEmpty(t.EmployeeCode) && !String.IsNullOrEmpty(company.CompanyLoginMark)) userRow["LoginId"] = t.EmployeeCode + "@" + company.CompanyLoginMark; ;
  1857. String salt = CreateSalt();
  1858. userRow["LoginPwd"] = ComputeHash(passWord, salt);
  1859. userRow["Salt"] = String.IsNullOrEmpty(salt) ? "" : salt;
  1860. userRow["AdminRole"] = "";
  1861. userRow["UserName"] = String.IsNullOrEmpty(t.EmployeeName) ? "" : t.EmployeeName;
  1862. userRow["Gender"] = String.IsNullOrEmpty(t.Gender) ? "" : t.Gender;
  1863. userRow["EmployeeCode"] = String.IsNullOrEmpty(t.EmployeeCode) ? "" : t.EmployeeCode;
  1864. userRow["OrgId"] = t.OrgId;
  1865. userRow["UserEmail"] = String.IsNullOrEmpty(t.EmailAddress) ? "" : t.EmailAddress;
  1866. userRow["UserTel"] = String.IsNullOrEmpty(t.MobilePhone) ? "" : t.MobilePhone;
  1867. //userRow["VerificationCode"] = String.IsNullOrEmpty(t.VerificationCode) ? "" : t.VerificationCode;
  1868. //if (t.VerificationDate != null) userRow["VerificationDate"] = t.VerificationDate;
  1869. userRow["Memo"] = String.IsNullOrEmpty(t.Memo) ? "" : t.Memo;
  1870. userRow["BelongToCompanyId"] = compid;
  1871. userRow["OrganizationId"] = OrganizationId;
  1872. userRow["UserId"] = UserId;
  1873. userRow["CompanyId"] = compid;
  1874. userRow["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  1875. userRow["Status"] = ;
  1876. userRow["RowVersion"] = default(byte[]);
  1877. userRow["CreatedDate"] = DateTime.Now;
  1878. userRow["CreatedBy"] = UserId;
  1879. userRow["UpdatedDate"] = DateTime.Now;
  1880. userRow["UpdatedBy"] = UserId;
  1881. userRow["Enable"] = "";
  1882. UserDT.Rows.Add(userRow);
  1883. DataRow userRoleRow = UserRoleDT.NewRow();
  1884. userRoleRow["Id"] = Guid.NewGuid();
  1885. if (t.Id != null) userRoleRow["RelativeUserId"] = t.Id;
  1886. if (RelativeRoleId != null) userRoleRow["RelativeRoleId"] = RelativeRoleId;
  1887. userRoleRow["OrganizationId"] = OrganizationId;
  1888. userRoleRow["UserId"] = UserId;
  1889. userRoleRow["CompanyId"] = compid;
  1890. userRoleRow["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  1891. userRoleRow["Status"] = ;
  1892. userRoleRow["RowVersion"] = default(byte[]);
  1893. userRoleRow["CreatedDate"] = DateTime.Now;
  1894. userRoleRow["CreatedBy"] = UserId;
  1895. userRoleRow["UpdatedDate"] = DateTime.Now;
  1896. userRoleRow["UpdatedBy"] = UserId;
  1897. UserRoleDT.Rows.Add(userRoleRow);
  1898. });
  1899. try
  1900. {
  1901. DBHelper.BulkInsert(PersonDT, "TerpPersonInfo");
  1902. DBHelper.BulkInsert(UserDT, "TsysUser");
  1903. DBHelper.BulkInsert(UserRoleDT, "TsysUserRole");
  1904. }
  1905. catch (Exception ex)
  1906. {
  1907. Logger.Error(ex);
  1908. if (String.IsNullOrEmpty(logMessage))
  1909. return "人员基本信息上传失败!";
  1910. else
  1911. {
  1912. AddLastMessage(ref logMessage);
  1913. return "人员基本信息上传失败!";
  1914. }
  1915. }
  1916.  
  1917. try
  1918. {
  1919. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(, , )))
  1920. {
  1921. var dbset = _context.Set<TerpPersonInfo>().ToList();
  1922. var dbsetUser = _context.Set<TsysUser>().ToList();
  1923. for (int i = ; i < batchOldUpdate.Count; i++)
  1924. {
  1925. TerpPersonInfo findReuslt = dbset.FirstOrDefault(t => t.Id.Equals(batchOldUpdate[i].Id));
  1926. TerpPersonInfo updateResult = batchUpdate.FirstOrDefault(t => t.EmployeeCode.Equals(batchOldUpdate[i].EmployeeCode));
  1927. findReuslt.EmployeeCode = updateResult.EmployeeCode;
  1928. findReuslt.EmployeeName = updateResult.EmployeeName;
  1929. findReuslt.OrgId = updateResult.OrgId;
  1930. findReuslt.Gender = updateResult.Gender;
  1931. findReuslt.Birthdate = Convert.ToDateTime(updateResult.Birthdate);
  1932. findReuslt.MaritalStatus = updateResult.MaritalStatus;
  1933. findReuslt.IdNumber = updateResult.IdNumber;
  1934. findReuslt.PoliticsStatus = updateResult.PoliticsStatus;
  1935. findReuslt.Nationality = updateResult.Nationality;
  1936. findReuslt.MobilePhone = updateResult.MobilePhone;
  1937. findReuslt.InterPhone = updateResult.InterPhone;
  1938. findReuslt.GroupPhone = updateResult.GroupPhone;
  1939. findReuslt.EmailAddress = updateResult.EmailAddress;
  1940. findReuslt.EmergencyContact = updateResult.EmergencyContact;
  1941. findReuslt.EmergencyTel = updateResult.EmergencyTel;
  1942. findReuslt.HomePhone = updateResult.HomePhone;
  1943. findReuslt.HomeAddress = updateResult.HomeAddress;
  1944. findReuslt.Memo = updateResult.Memo;
  1945. findReuslt.WorkState = updateResult.WorkState;
  1946. findReuslt.employeeType = updateResult.employeeType;
  1947. findReuslt.WorkStartDate = Convert.ToDateTime(updateResult.WorkStartDate);
  1948. findReuslt.Duty = updateResult.Duty;
  1949. findReuslt.TrialPeriodStartDate = Convert.ToDateTime(updateResult.TrialPeriodStartDate);
  1950. findReuslt.RegularStartDate = Convert.ToDateTime(updateResult.RegularStartDate);
  1951. findReuslt.WorkRank = updateResult.WorkRank;
  1952. findReuslt.Bank = updateResult.Bank;
  1953. findReuslt.BankCardNo = updateResult.BankCardNo;
  1954. findReuslt.DimissionType = updateResult.DimissionType;
  1955. findReuslt.DimissionDate = Convert.ToDateTime(updateResult.DimissionDate);
  1956. findReuslt.DimissionReason = updateResult.DimissionReason;
  1957. findReuslt.Domicile = updateResult.Domicile;
  1958. findReuslt.InsuredTime = updateResult.InsuredTime;
  1959. findReuslt.Nature = updateResult.Nature;
  1960. findReuslt.Memberoffamily = updateResult.Memberoffamily;
  1961. findReuslt.CompanyName = updateResult.CompanyName;
  1962. findReuslt.UpdatedDate = DateTime.Now;
  1963.  
  1964. TsysUser findUser = dbsetUser.FirstOrDefault(t => t.Id.Equals(batchOldUpdate[i].Id));
  1965. findUser.UserName = updateResult.EmployeeName;
  1966. findUser.Gender = updateResult.Gender;
  1967. findUser.OrgId = updateResult.OrgId;
  1968. findUser.EmployeeCode = updateResult.EmployeeCode;
  1969. findUser.UserEmail = updateResult.EmailAddress;
  1970. findUser.UserTel = updateResult.MobilePhone;
  1971. findUser.Memo = updateResult.Memo;
  1972. findUser.UpdatedDate = DateTime.Now;
  1973. }
  1974. _context.SaveChanges();
  1975. scope.Complete();
  1976. }
  1977. }
  1978. catch (Exception ex)
  1979. {
  1980. Logger.Error(ex);
  1981. if (String.IsNullOrEmpty(logMessage))
  1982. return "人员基本信息上传失败!";
  1983. else
  1984. {
  1985. AddLastMessage(ref logMessage);
  1986. return "人员基本信息上传失败!";
  1987. }
  1988. }
  1989. #endregion
  1990. return "人员基本信息上传成功!";
  1991. }
  1992.  
  1993. }
  1994. #endregion
  1995.  
  1996. #region 用户角色设置上传
  1997.  
  1998. //用户角色设置上传
  1999. public String UploadTsysUserRole(String filePath, String compId, string FileName)
  2000. {
  2001. String logInfo = "";
  2002. String logMessage = "";
  2003. Logger.Information("开始上传用户角色设置...");
  2004. var extion = Path.GetExtension(filePath);
  2005. Guid compid = Guid.Parse(compId);
  2006. TsasRegCompany company = _unitOfWork.Repository<TsasRegCompany>().Get(x => x.Id == compid).ToList().FirstOrDefault();
  2007. #region 共通验证 容器准备
  2008. //数据类型和长度验证(共通)
  2009. int sheetNum = ;//读取sheet页
  2010. using (FileStream fs = new FileStream(filePath, FileMode.Open))
  2011. {
  2012. if (!this.BaseDataTemplateCheckTemplate(extion, fs, compId, FileName, ref logMessage, sheetNum))
  2013. {
  2014. return "用户角色设置上传失败!";
  2015. }
  2016. }
  2017. //定义容器
  2018. List<Tuple<String, String>> AllExcelData = new List<Tuple<String, String>>();
  2019.  
  2020. List<TsysUserRole> AllFixdExeclData = new List<TsysUserRole>();
  2021. List<Int32> LogRowNumber = new List<Int32>();
  2022.  
  2023. TsysUser User = new TsysUser();
  2024. try
  2025. {
  2026. User = _unitOfWork.Repository<TsysUser>().Get(x => x.CompanyId == compid && x.AdminRole.Equals("") && x.Status == ).ToList().FirstOrDefault();
  2027. if (User == null)
  2028. {
  2029. logInfo = "公司" + company.CompanyName.ToString() + "管理员用户不存在";
  2030. AddMessage(logInfo, ref logMessage);
  2031. // AddLastMessage(ref logMessage);
  2032. return "用户角色设置上传失败!";
  2033. }
  2034. }
  2035. catch (Exception ex)
  2036. {
  2037. Logger.Information(ex.Message);
  2038. }
  2039.  
  2040. Guid UserId = User.Id;
  2041. Guid OrganizationId = User.OrgId.Value;
  2042. #endregion
  2043.  
  2044. #region 获取Execl数据
  2045. using (FileStream newFs = new FileStream(filePath, FileMode.Open))
  2046. {
  2047. IExcelDataReader excelReader;
  2048. if (extion.Equals(".xls"))
  2049. {
  2050. excelReader = ExcelReaderFactory.CreateBinaryReader(newFs);
  2051. }
  2052. else
  2053. {
  2054. excelReader = ExcelReaderFactory.CreateOpenXmlReader(newFs);
  2055. }
  2056. Boolean AllCheckResult = true; //检查结果定义(所有Check)
  2057. var sheet = excelReader.AsDataSet().Tables[sheetNum];
  2058. for (int r = ; r < sheet.Rows.Count; r++)
  2059. {
  2060. Object[] currentRow = sheet.Rows[r].ItemArray;
  2061. #region 获取行数据
  2062. //读行结束,跳出
  2063. if (String.IsNullOrEmpty(currentRow[].ToString())
  2064. && String.IsNullOrEmpty(currentRow[].ToString()))
  2065. {
  2066. continue;
  2067. }
  2068. //读取一行客户数据
  2069. Tuple<String, String> ThisRow = new Tuple<String, String>(
  2070. currentRow[].ToString(),
  2071. currentRow[].ToString()
  2072. );
  2073.  
  2074. #endregion
  2075. #region 重复性验证
  2076. Boolean RepeatCheckResult = true;
  2077.  
  2078. //重复性验证
  2079. foreach (var item in AllExcelData)
  2080. {
  2081. if (item.Item1.Equals(ThisRow.Item1) && item.Item2 == null)
  2082. {
  2083. if (ThisRow.Item2 == null)
  2084. {
  2085. String message = "第" + (r + ) + "行" + "该员工编号下角色编码重复";
  2086. AddMessage(message, ref logMessage);
  2087. RepeatCheckResult = false;
  2088. AllCheckResult = false;
  2089. }
  2090. }
  2091. else
  2092. {
  2093. if (item.Item1.Equals(ThisRow.Item1) && item.Item2.Equals(ThisRow.Item2)) //员工编号和角色编码重复性验证
  2094. {
  2095. String message = "第" + (r + ) + "行" + "该员工编号下角色编码重复";
  2096. AddMessage(message, ref logMessage);
  2097. RepeatCheckResult = false;
  2098. AllCheckResult = false;
  2099. }
  2100. }
  2101. }
  2102. #endregion
  2103. if (RepeatCheckResult) //验证通过 存储一条
  2104. {
  2105. AllExcelData.Add(ThisRow);
  2106. LogRowNumber.Add(r + );
  2107. }
  2108. }
  2109.  
  2110. #endregion
  2111.  
  2112. #region 外键来源
  2113. List<TsysUser> AllUser = _tsysManagementBusiness.GetAllTsysUser(compId).Where(x => x.Status == EntityStatusEnum.Active).ToList();
  2114.  
  2115. List<TsysCompRole> AllCompRole = _tsysManagementBusiness.GetTsysCompRole(compId).Where(x => x.Status == EntityStatusEnum.Active).ToList();
  2116. #endregion
  2117.  
  2118. #region 插入数据准备
  2119. for (int i = ; i < AllExcelData.Count; i++)
  2120. {
  2121. TsysUserRole UserRole = new TsysUserRole();
  2122. UserRole.Id = Guid.NewGuid();
  2123. UserRole.SourceId = AllExcelData[i].Item1;
  2124.  
  2125. if (AllUser != null)
  2126. {
  2127. TsysUser UserN = AllUser.Where(x => !String.IsNullOrEmpty(x.EmployeeCode) && x.EmployeeCode.Equals(AllExcelData[i].Item1)).FirstOrDefault();
  2128. if (UserN == null)
  2129. {
  2130. logInfo = "第" + LogRowNumber[i].ToString() + "行第(1)列员工编号未获取到";
  2131. AddMessage(logInfo, ref logMessage);
  2132. AllCheckResult = false;
  2133. }
  2134. else
  2135. {
  2136. UserRole.RelativeUserId = UserN.Id;
  2137. }
  2138. }
  2139. else
  2140. {
  2141. logInfo = "第" + LogRowNumber[i].ToString() + "行第 (1) 列员工编号未获取到";
  2142. AddMessage(logInfo, ref logMessage);
  2143. AllCheckResult = false;
  2144. }
  2145. if ((AllExcelData[i].Item2) == null)
  2146. {
  2147. TsysCompRole CompRoleN = AllCompRole.Where(x => !String.IsNullOrEmpty(x.Role_Name) && x.Role_Name.Equals("普通用户")).FirstOrDefault();
  2148. UserRole.RelativeRoleId = CompRoleN.Id;
  2149. }
  2150. else
  2151. {
  2152.  
  2153. TsysCompRole CompRoleN = AllCompRole.Where(x => !String.IsNullOrEmpty(x.Role_Code) && x.Role_Code.Equals(AllExcelData[i].Item2)).FirstOrDefault();
  2154. if (CompRoleN == null)
  2155. {
  2156. logInfo = "第" + LogRowNumber[i] + "行第 (2)列角色编码未获取到";
  2157. AddMessage(logInfo, ref logMessage);
  2158. AllCheckResult = false;
  2159. }
  2160. else
  2161. {
  2162. UserRole.RelativeRoleId = CompRoleN.Id;
  2163. }
  2164.  
  2165. }
  2166. //角色类型 为分组时不能添加人员
  2167. if (!string.IsNullOrEmpty(AllExcelData[i].Item2) && AllCompRole.Any(x => x.Role_Code == AllExcelData[i].Item2 && x.Role_Type == SysCode.角色类型.分组))
  2168. {
  2169. logInfo = "第" + LogRowNumber[i] + "行第 (2)列角色类型为分组不能添加人员";
  2170. AddMessage(logInfo, ref logMessage);
  2171. AllCheckResult = false;
  2172. }
  2173.  
  2174. if (!String.IsNullOrEmpty(compId))
  2175. {
  2176. UserRole.CompanyId = Guid.Parse(compId);
  2177. }
  2178. AllFixdExeclData.Add(UserRole);
  2179. }
  2180.  
  2181. if (!AllCheckResult)
  2182. {
  2183. AddLastMessage(ref logMessage);
  2184. return "用户角色设置上传失败!";
  2185. }
  2186. #endregion
  2187.  
  2188. #region Insert/Update
  2189.  
  2190. //取出当前表中数据
  2191. List<TsysUserRole> _list = _unitOfWork.Repository<TsysUserRole>().Get(t => t.Status == EntityStatusEnum.Active && t.CompanyId == compid).ToList();
  2192.  
  2193. // 左联表,若当前DB中无匹配的数据则t2返回空,即t2 为空的是DB中不存在的数据,直接Insert(建议临时库可不考虑Update 情况,直接清表后Insert),
  2194. var mearge = from a in AllFixdExeclData
  2195. join b in _list on a.RelativeUserId equals b.RelativeUserId into temp
  2196. from tt in temp.DefaultIfEmpty()
  2197. select
  2198. new
  2199. {
  2200. t1 = a,
  2201. t2 = tt
  2202. };
  2203.  
  2204. // 取出需要Insert的记录
  2205. var batchInsert = mearge.Where(t => t.t2 == null).Select(t => t.t1).ToList();
  2206.  
  2207. ;
  2208. // 获取一个空表
  2209. DataTable InsertDT = DBHelper.GetDataSet("select * from TsysUserRole where 1<>1");
  2210.  
  2211. batchInsert.ForEach(t =>
  2212. {
  2213. DataRow row = InsertDT.NewRow();
  2214. row["Id"] = t.Id;
  2215. row["RelativeUserId"] = String.IsNullOrEmpty(t.RelativeUserId.ToString()) ? "" : t.RelativeUserId.ToString();
  2216. row["RelativeRoleId"] = String.IsNullOrEmpty(t.RelativeRoleId.ToString()) ? "" : t.RelativeRoleId.ToString();
  2217. row["OrganizationId"] = OrganizationId;
  2218. row["UserId"] = UserId;
  2219. row["CompanyId"] = compid;
  2220. row["SourceId"] = String.IsNullOrEmpty(t.SourceId) ? "" : t.SourceId;
  2221. row["Status"] = ;
  2222. row["RowVersion"] = default(byte[]);
  2223. row["CreatedDate"] = DateTime.Now;
  2224. row["CreatedBy"] = UserId;
  2225. row["UpdatedDate"] = DateTime.Now;
  2226. row["UpdatedBy"] = UserId;
  2227. InsertDT.Rows.Add();
  2228. });
  2229.  
  2230. #endregion
  2231.  
  2232. return "用户角色设置上传成功!";
  2233.  
  2234. }
  2235. }
  2236. #endregion
  2237.  
  2238. private Type GetTypeByDBType(String dbType)
  2239. {
  2240. switch (dbType)
  2241. {
  2242. case "nvarchar":
  2243. case "varchar":
  2244. case "char":
  2245. case "nchar":
  2246. return typeof(String);
  2247. case "uniqueidentifier":
  2248. return typeof(Guid);
  2249. case "datetime":
  2250. case "date":
  2251. case "timestamp":
  2252. return typeof(DateTime);
  2253. case "smallint":
  2254. return typeof(Int16);
  2255. case "int":
  2256. return typeof(Int32);
  2257. case "bigint":
  2258. return typeof(Int64);
  2259. case "decimal":
  2260. return typeof(Decimal);
  2261. case "float":
  2262. return typeof(float);
  2263. default:
  2264. return typeof(Object);
  2265. }
  2266. }
  2267.  
  2268. private static string CreateSalt()
  2269. {
  2270. var data = new byte[];
  2271. new RNGCryptoServiceProvider().GetBytes(data);
  2272. return Convert.ToBase64String(data);
  2273. }
  2274.  
  2275. private static string ComputeHash(string source, string salt)
  2276. {
  2277. var bytes = Encoding.Unicode.GetBytes(salt.ToLower() + source);
  2278. return ComputeHash(bytes);
  2279. }
  2280.  
  2281. private static String ComputeHash(byte[] buffer)
  2282. {
  2283. using (var hashProvider = new SHA1CryptoServiceProvider())
  2284. {
  2285. var sha1Hash = hashProvider.ComputeHash(buffer);
  2286. return Convert.ToBase64String(sha1Hash);
  2287. }
  2288. }
  2289.  
  2290. public void SaveCompanyCodeCategoryBySecondSheet(int index, DataTable secondSheet, string categorycode, Guid compid)
  2291. {
  2292. var collection = secondSheet.AsEnumerable().Select(row => row[index].ToString());
  2293. foreach (var codename in collection)
  2294. {
  2295. if (!string.IsNullOrEmpty(codename))
  2296. {
  2297. string stringResult = _tsysManagementBusiness.GetCodeByItemNameAndCategoryCode(codename, categorycode, compid);
  2298. if (string.IsNullOrEmpty(stringResult))
  2299. {
  2300. _tsysCompCodeBusiness.SaveCompanyCodeCategoryByCompId(codename, categorycode, compid);
  2301. }
  2302. }
  2303. }
  2304. }
  2305.  
  2306. private void AddMessage(string message, ref string logMessage)
  2307. {
  2308. RDS.Data += message + "</BR>";
  2309. }
  2310.  
  2311. private void AddLastMessage(ref string logMessage)
  2312. {
  2313. RDS.Data += logMessage + "</BR>";
  2314. }
  2315.  
  2316. }
  2317. }

NPOI 上传Excel功能(三)的更多相关文章

  1. NPOI 上传Excel功能

    1.首先写一个Excel表格,第一行数据库类型(varchar.date.decimal).第二行数据库类型长度(100.12,4.时间日期为空)2.html 加按钮 { type: "bu ...

  2. NPOI 上传Excel功能(二)

    3.上传文件,写入log using DC.BE.Business.SYS; using DC.BE.Entity.ERP; using DC.BE.Entity.SAS; using DC.BE.E ...

  3. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  4. .Net NPOI 上传excel文件、提交后台获取excel里的数据

    1.导入NPOI.dll 2.添加类NPOIExcel.cs using System; using System.Collections.Generic; using System.Text; us ...

  5. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现

    ----------------------------------------------------------------------------------------------[版权申明: ...

  6. Salesforce LWC学习(三十二)实现上传 Excel解析其内容

    本篇参考:salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容 上一篇我们写了aura方式上传excel解析其内容.lwc作为salesforce的新宠儿,逐渐的 ...

  7. 微信小程序上传Excel文本文件功能

    问题: 在开发过程中会发现微信小程序有很多功能都还不能满足我们的需求,谁叫客户就是上帝呢,前几天小编遇到了这么个问题,就是用微信小程序上传文件,但是还以为微信带有这个模块,可是查了许久还是没有找到,只 ...

  8. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  9. java上传excel到后台解析入库

    背景:最近需要做一个excel模板导入的功能,以便用户可以自己增删改查数据,当然,只有特别的用户才能有此权限,捋了捋思路,还是从前端写起 实现: 页面最后的效果如下,可以自己修改,删除,导入导出数据, ...

随机推荐

  1. Java的错误类型

    程序的错误分为:编译期语法错误.运行期异常错误和运行期逻辑错误 (1)编译期语法错误可以借助Eclipse的帮助方便地定位错误,并进行修改 如: (2)运行期异常,即 没有语法错误,编译可以通过,但运 ...

  2. 一篇自己都看不懂的点分治&点分树学习笔记

    淀粉质点分治可真是个好东西 Part A.点分治 众所周知,树上分治算法有$3$种:点分治.边分治.链分治(最后一个似乎就是树链剖分),它们名字的不同是由于分治方式的不同的.点分治,顾名思义,每一次选 ...

  3. Django model中的class Meta详解

    通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...

  4. java连接Mysql8

    相较于之前版本会有部分改动 pom依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql- ...

  5. H5 字体属性补充

    04-字体属性补充 abc我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  6. mysql安装设置mysql字符集utf8及修改密码

    MySQL的下载,建议下载MySQL的解压缩版本 MySQL官网下载推荐别下最新版本的原因是因为很多之前用的jar包和工具类不兼容最新版本的 可以下5.多的和六点多的 这样的压缩包解压再配置就行了 安 ...

  7. HDU - 1698 线段树区间修改,区间查询

    这就是很简单的基本的线段树的基本操作,区间修改,区间查询,对区间内部信息打上laze标记,然后维护即可. 我自己做的时候太傻逼了...把区间修改写错了,对给定区间进行修改的时候,mid取的是节点的左右 ...

  8. 1. FPGA内部的逻辑资源

    CLB(包括LUT.加法器.寄存器.MUX(多路选择器)) 时钟网络资源(全局时钟网络,区域时钟网络,IO时钟网络),理解时钟网络的本质和意义 时钟处理单元(PLL,DCM),理解时钟网络资源和时钟处 ...

  9. ubuntu中更改apache默认目录的方法

    如上,在这两个文件中,我都改为/home/www 及/home/www/html

  10. 福州大学软件工程1816 | W班 第3次作业成绩排名

    写在前面 汇总成绩排名链接 1.作业链接 第三次作业--原型设计(结对第一次) 2.评分准则 本次作业总分 25分,由以下部分组成: (1)在随笔开头请加上该博客链接,以方便阅读时查看作业需求,并备注 ...