You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2273 lines
94 KiB

  1. using Dapper;
  2. using Learun.Application.TwoDevelopment.EducationalAdministration;
  3. using Learun.Cache.Base;
  4. using Learun.Cache.Factory;
  5. using Learun.DataBase.Repository;
  6. using Learun.Util;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Linq;
  11. using System.Text;
  12. namespace Learun.Application.TwoDevelopment.LogisticsManagement
  13. {
  14. /// <summary>
  15. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  16. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  17. /// 创 建:超级管理员
  18. /// 日 期:2019-04-26 15:02
  19. /// 描 述:学生宿舍管理
  20. /// </summary>
  21. public class AccommodationService : RepositoryFactory
  22. {
  23. #region 缓存定义
  24. private ICache cache = CacheFactory.CaChe();
  25. private string cacheKey = "Learun_adms_excelError_"; // +公司主键
  26. #endregion
  27. #region 获取数据
  28. /// <summary>
  29. /// 获取页面显示列表数据
  30. /// <summary>
  31. /// <param name="queryJson">查询参数</param>
  32. /// <returns></returns>
  33. public IEnumerable<Acc_DormitoryBuildEntity> GetPageList(Pagination pagination, string queryJson)
  34. {
  35. try
  36. {
  37. var strSql = new StringBuilder();
  38. strSql.Append("SELECT ");
  39. strSql.Append(@"
  40. t.ID,
  41. t.Name,
  42. t.Address,
  43. t.Campus,
  44. t.Dept,
  45. t.BuildType,
  46. t.Major,
  47. t.Class,
  48. t.MainClass,
  49. t.Sex,
  50. t.Functionary,
  51. t.Phone,
  52. t.Price,
  53. t.Leader,
  54. t.StudentID,
  55. t.PlanStudentID,
  56. t.ParentID,
  57. t.Remark,
  58. t.Starred,
  59. t.HasToilet,t.RoomType,
  60. t.ApartmentId,t.UnitId,t.FloorId,t.CheckInStu,
  61. a.name as ApartmentName,b.name as UnitName,c.Name as FloorName
  62. ");
  63. strSql.Append(" FROM Acc_DormitoryBuild t ");
  64. strSql.Append(@" left join (select * FROM Acc_DormitoryBuild where BuildType='1') a on t.ApartmentId=a.ID
  65. left join(select * FROM Acc_DormitoryBuild where BuildType = '2') b on t.UnitId = b.ID
  66. left join(select * FROM Acc_DormitoryBuild where BuildType = '3') c on t.FloorId = c.ID ");
  67. strSql.Append(" WHERE 1=1 ");
  68. var queryParam = queryJson.ToJObject();
  69. // 虚拟参数
  70. var dp = new DynamicParameters(new { });
  71. if (!queryParam["ParentID"].IsEmpty())
  72. {
  73. dp.Add("ParentID", queryParam["ParentID"].ToString(), DbType.String);
  74. strSql.Append(" AND t.ParentID =@ParentID ");
  75. }
  76. //else
  77. //{
  78. // strSql.Append(" AND t.BuildType ='4' ");
  79. //}
  80. if (!queryParam["ApartmentId"].IsEmpty())
  81. {
  82. dp.Add("ApartmentId", queryParam["ApartmentId"].ToString(), DbType.String);
  83. strSql.Append(" AND t.ApartmentId =@ApartmentId ");
  84. }
  85. if (!queryParam["UnitId"].IsEmpty())
  86. {
  87. dp.Add("UnitId", queryParam["UnitId"].ToString(), DbType.String);
  88. strSql.Append(" AND t.UnitId =@UnitId ");
  89. }
  90. if (!queryParam["FloorId"].IsEmpty())
  91. {
  92. dp.Add("FloorId", queryParam["FloorId"].ToString(), DbType.String);
  93. strSql.Append(" AND t.FloorId =@FloorId ");
  94. }
  95. if (!queryParam["Name"].IsEmpty())
  96. {
  97. dp.Add("Name", "%" + queryParam["Name"].ToString() + "%", DbType.String);
  98. strSql.Append(" AND t.Name Like @Name ");
  99. }
  100. if (!queryParam["Campus"].IsEmpty())
  101. {
  102. dp.Add("Campus", "%" + queryParam["Campus"].ToString() + "%", DbType.String);
  103. strSql.Append(" AND t.Campus Like @Campus ");
  104. }
  105. if (!queryParam["Dept"].IsEmpty())
  106. {
  107. dp.Add("Dept", queryParam["Dept"].ToString(), DbType.String);
  108. strSql.Append(" AND t.Dept=@Dept ");
  109. }
  110. if (!queryParam["Class"].IsEmpty())
  111. {
  112. dp.Add("Class", queryParam["Class"].ToString(), DbType.String);
  113. strSql.Append(" AND t.Class=@Class ");
  114. }
  115. if (!queryParam["Major"].IsEmpty())
  116. {
  117. dp.Add("Major", queryParam["Major"].ToString(), DbType.String);
  118. strSql.Append(" AND t.Major=@Major ");
  119. }
  120. if (!queryParam["Sex"].IsEmpty())
  121. {
  122. dp.Add("Sex", queryParam["Sex"].ToString(), DbType.String);
  123. strSql.Append(" AND t.Sex = @Sex ");
  124. }
  125. if (!queryParam["Functionary"].IsEmpty())
  126. {
  127. dp.Add("Functionary", "%" + queryParam["Functionary"].ToString() + "%", DbType.String);
  128. strSql.Append(" AND t.Functionary Like @Functionary ");
  129. }
  130. if (!queryParam["Leader"].IsEmpty())
  131. {
  132. dp.Add("Leader", "%" + queryParam["Leader"].ToString() + "%", DbType.String);
  133. strSql.Append(" AND t.Leader Like @Leader ");
  134. }
  135. if (!queryParam["NoDistribution"].IsEmpty())
  136. {
  137. var noDistribution = queryParam["NoDistribution"].ToString();
  138. if (noDistribution.Contains("dept"))
  139. {
  140. strSql.Append(" AND (t.Dept is null or len(t.Dept)=0) ");
  141. }
  142. if (noDistribution.Contains("major"))
  143. {
  144. strSql.Append(" AND (t.Major is null or len(t.Major)=0) ");
  145. }
  146. if (noDistribution.Contains("class"))
  147. {
  148. strSql.Append(" AND (t.Class is null or len(t.Class)=0) ");
  149. }
  150. if (noDistribution.Contains("room"))
  151. {
  152. strSql.Append(" AND (t.CheckInStu is null or len(t.CheckInStu)=0 or t.CheckInStu=0) ");
  153. }
  154. }
  155. if (!queryParam["Distribution"].IsEmpty())
  156. {
  157. var distribution = queryParam["Distribution"].ToString();
  158. if (distribution.Contains("dept"))
  159. {
  160. strSql.Append(" AND len(t.Dept)>0 ");
  161. }
  162. if (distribution.Contains("major"))
  163. {
  164. strSql.Append(" AND len(t.Major)>0 ");
  165. }
  166. if (distribution.Contains("class"))
  167. {
  168. strSql.Append(" AND len(t.Class)>0 ");
  169. }
  170. if (distribution.Contains("room"))
  171. {
  172. strSql.Append(" AND t.CheckInStu>0 ");
  173. }
  174. }
  175. if (!queryParam["MainClass"].IsEmpty())
  176. {
  177. var MainClass = queryParam["MainClass"].ToString();
  178. if (MainClass == "0")
  179. {
  180. strSql.Append(" and t.class like '%,%'");
  181. }
  182. }
  183. if (!queryParam["SqlParameter"].IsEmpty())
  184. {
  185. strSql.Append(queryParam["SqlParameter"].ToString());
  186. }
  187. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(strSql.ToString(), dp, pagination).OrderBy(a => a.Name).ThenBy(a => a.Name).ToList();
  188. }
  189. catch (Exception ex)
  190. {
  191. if (ex is ExceptionEx)
  192. {
  193. throw;
  194. }
  195. else
  196. {
  197. throw ExceptionEx.ThrowServiceException(ex);
  198. }
  199. }
  200. }
  201. public IEnumerable<Acc_DormitoryBuildEntity> GetDromStu(string keyValue)
  202. {
  203. try
  204. {
  205. string sql = @"select ID,Name,DNo,StudentID,fb.stuNo,fb.stuname,fb.classno,fb.majorno,fb.deptno from Acc_DormitoryBuild zb
  206. left join StuInfoBasic fb on fb.Stuno = zb.StudentID
  207. where zb.BuildType = '5' and zb.ParentID = '" + keyValue + "' and (fb.stuNo is not null and fb.stuname is not null )";
  208. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(sql);
  209. }
  210. catch (Exception ex)
  211. {
  212. if (ex is ExceptionEx)
  213. {
  214. throw;
  215. }
  216. else
  217. {
  218. throw ExceptionEx.ThrowServiceException(ex);
  219. }
  220. }
  221. }
  222. public IEnumerable<Acc_DormitoryBuildEntity> GetBedListByRoomId(string RoomId)
  223. {
  224. try
  225. {
  226. string sql = $"select ID,Name,DNo,StudentID from Acc_DormitoryBuild where BuildType='5' and ParentID='{RoomId}'";
  227. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(sql);
  228. }
  229. catch (Exception ex)
  230. {
  231. if (ex is ExceptionEx)
  232. {
  233. throw;
  234. }
  235. else
  236. {
  237. throw ExceptionEx.ThrowServiceException(ex);
  238. }
  239. }
  240. }
  241. public IEnumerable<Acc_DormitoryBuildEntity> GetAllList()
  242. {
  243. try
  244. {
  245. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  246. }
  247. catch (Exception ex)
  248. {
  249. if (ex is ExceptionEx)
  250. {
  251. throw;
  252. }
  253. else
  254. {
  255. throw ExceptionEx.ThrowServiceException(ex);
  256. }
  257. }
  258. }
  259. public IEnumerable<Acc_DormitoryBuildEntity> GetClassifyList(Pagination pagination, string queryJson)
  260. {
  261. try
  262. {
  263. var strSql = new StringBuilder();
  264. strSql.Append("SELECT ");
  265. strSql.Append(@"
  266. t.ID,
  267. t.Name,
  268. t.Address,
  269. t.Campus,
  270. t.Dept,
  271. t.BuildType,
  272. t.Major,
  273. t.Class,
  274. t.Sex,
  275. t.Functionary,
  276. t.Phone,
  277. t.Price,
  278. t.Leader,
  279. t.StudentID,
  280. t.PlanStudentID,
  281. t.ParentID,
  282. t.Remark,
  283. t.Starred,
  284. t.HasToilet,t.RoomType,
  285. t.ApartmentId,t.UnitId,t.FloorId,t.CheckInStu,
  286. a.name as ApartmentName,b.name as UnitName,c.Name as FloorName
  287. ");
  288. strSql.Append(" FROM Acc_DormitoryBuild t ");
  289. strSql.Append(@" left join (select * FROM Acc_DormitoryBuild where BuildType='1') a on t.ApartmentId=a.ID
  290. left join(select * FROM Acc_DormitoryBuild where BuildType = '2') b on t.UnitId = b.ID
  291. left join(select * FROM Acc_DormitoryBuild where BuildType = '3') c on t.FloorId = c.ID ");
  292. strSql.Append(" WHERE 1=1 and (t.BuildType<>'5' and t.BuildType<>'4') ");
  293. var queryParam = queryJson.ToJObject();
  294. // 虚拟参数
  295. var dp = new DynamicParameters(new { });
  296. if (!queryParam["ParentID"].IsEmpty())
  297. {
  298. dp.Add("ParentID", queryParam["ParentID"].ToString(), DbType.String);
  299. strSql.Append(" AND t.ParentID =@ParentID ");
  300. }
  301. if (!queryParam["keyword"].IsEmpty())
  302. {
  303. strSql.Append($" AND t.Name like '%{queryParam["keyword"].ToString()}%' ");
  304. }
  305. if (!queryParam["ApartmentId"].IsEmpty())
  306. {
  307. dp.Add("ApartmentId", queryParam["ApartmentId"].ToString(), DbType.String);
  308. strSql.Append(" AND t.ApartmentId =@ApartmentId ");
  309. }
  310. if (!queryParam["UnitId"].IsEmpty())
  311. {
  312. dp.Add("UnitId", queryParam["UnitId"].ToString(), DbType.String);
  313. strSql.Append(" AND t.UnitId =@UnitId ");
  314. }
  315. if (!queryParam["FloorId"].IsEmpty())
  316. {
  317. dp.Add("FloorId", queryParam["FloorId"].ToString(), DbType.String);
  318. strSql.Append(" AND t.FloorId =@FloorId ");
  319. }
  320. if (!queryParam["Name"].IsEmpty())
  321. {
  322. dp.Add("Name", "%" + queryParam["Name"].ToString() + "%", DbType.String);
  323. strSql.Append(" AND t.Name Like @Name ");
  324. }
  325. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(strSql.ToString(), dp).ToList();
  326. //return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(strSql.ToString(), dp, pagination).ToList();
  327. }
  328. catch (Exception ex)
  329. {
  330. if (ex is ExceptionEx)
  331. {
  332. throw;
  333. }
  334. else
  335. {
  336. throw ExceptionEx.ThrowServiceException(ex);
  337. }
  338. }
  339. }
  340. internal string GetBuildType(string parentID)
  341. {
  342. try
  343. {
  344. var entity = this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(a => a.ID == parentID);
  345. if (null != entity)
  346. {
  347. return entity.BuildType;
  348. }
  349. else
  350. {
  351. return "";
  352. }
  353. }
  354. catch (Exception ex)
  355. {
  356. if (ex is ExceptionEx)
  357. {
  358. throw;
  359. }
  360. else
  361. {
  362. throw ExceptionEx.ThrowBusinessException(ex);
  363. }
  364. }
  365. }
  366. public string GetParentBuildType(string keyValue)
  367. {
  368. try
  369. {
  370. string sql = $@" select BuildType from [dbo].[Acc_DormitoryBuild] where Id=(
  371. select parentid from [dbo].[Acc_DormitoryBuild] where id='{keyValue}')";
  372. var data = this.BaseRepository("CollegeMIS").FindObject(sql);
  373. if (data == null)
  374. {
  375. return "";
  376. }
  377. else
  378. {
  379. return data.ToString();
  380. }
  381. }
  382. catch (Exception ex)
  383. {
  384. if (ex is ExceptionEx)
  385. {
  386. throw;
  387. }
  388. else
  389. {
  390. throw ExceptionEx.ThrowBusinessException(ex);
  391. }
  392. }
  393. }
  394. internal object GetRoomList(string parentID)
  395. {
  396. try
  397. {
  398. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  399. var floor = data.FirstOrDefault(a => a.ID == parentID);
  400. var unit = data.FirstOrDefault(a => a.ID == floor.ParentID);
  401. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  402. var rooms = data.Where(a => a.ParentID == parentID)
  403. .OrderBy(a => a.Name);
  404. List<floorsInfo> list = new List<floorsInfo>();
  405. foreach (var room in rooms)
  406. {
  407. var hasStudentsNum = 0;
  408. var bedsNum = 0;
  409. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  410. bedsNum = beds.Count;
  411. foreach (var bed in beds)
  412. {
  413. if (!string.IsNullOrEmpty(bed.StudentID))
  414. {
  415. hasStudentsNum++;
  416. }
  417. }
  418. floorsInfo floorinfo = new floorsInfo();
  419. floorinfo.dormitory = room;
  420. floorinfo.BedNum = bedsNum.ToString();
  421. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  422. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  423. list.Add(floorinfo);
  424. }
  425. return new
  426. {
  427. dormitoryName = dormitory.Name,
  428. dormitoryID = dormitory.ID,
  429. unitName = unit.Name,
  430. unitID = unit.ID,
  431. floorName = floor.Name,
  432. floorID = floor.ID,
  433. rows = list
  434. };
  435. }
  436. catch (Exception ex)
  437. {
  438. if (ex is ExceptionEx)
  439. {
  440. throw;
  441. }
  442. else
  443. {
  444. throw ExceptionEx.ThrowBusinessException(ex);
  445. }
  446. }
  447. }
  448. internal object GetFloorList(string parentID)
  449. {
  450. try
  451. {
  452. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  453. var unit = data.FirstOrDefault(a => a.ID == parentID);
  454. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  455. var floors = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList();
  456. List<floorsInfo> list = new List<floorsInfo>();
  457. foreach (var floor in floors)
  458. {
  459. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  460. var bedsNum = 0;
  461. var hasStudentsNum = 0;
  462. foreach (var room in rooms)
  463. {
  464. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  465. foreach (var bed in beds)
  466. {
  467. bedsNum++;
  468. if (!string.IsNullOrEmpty(bed.StudentID))
  469. {
  470. hasStudentsNum++;
  471. }
  472. }
  473. }
  474. floorsInfo floorinfo = new floorsInfo();
  475. floorinfo.dormitory = floor;
  476. floorinfo.RoomNum = rooms.Count.ToString();
  477. floorinfo.BedNum = bedsNum.ToString();
  478. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  479. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  480. list.Add(floorinfo);
  481. }
  482. return new { dormitoryName = dormitory.Name, dormitoryID = dormitory.ID, unitName = unit.Name, unitID = unit.ID, rows = list };
  483. }
  484. catch (Exception ex)
  485. {
  486. if (ex is ExceptionEx)
  487. {
  488. throw;
  489. }
  490. else
  491. {
  492. throw ExceptionEx.ThrowBusinessException(ex);
  493. }
  494. }
  495. }
  496. internal object GetUnitList(string ParentID)
  497. {
  498. try
  499. {
  500. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  501. var dormitory = data.FirstOrDefault(a => a.ID == ParentID);
  502. var Units = data.Where(a => a.ParentID == ParentID).ToList().OrderBy(a => a.Name).ToList();
  503. List<floorsInfo> list = new List<floorsInfo>();
  504. foreach (var unit in Units)
  505. {
  506. var floors = data.Where(a => a.ParentID == unit.ID).ToList();
  507. var roomsNum = 0;
  508. var bedsNum = 0;
  509. var hasStudentsNum = 0;
  510. foreach (var floor in floors)
  511. {
  512. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  513. roomsNum = roomsNum + rooms.Count;
  514. foreach (var room in rooms)
  515. {
  516. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  517. foreach (var bed in beds)
  518. {
  519. bedsNum++;
  520. if (!string.IsNullOrEmpty(bed.StudentID))
  521. {
  522. hasStudentsNum++;
  523. }
  524. }
  525. }
  526. }
  527. floorsInfo floorinfo = new floorsInfo();
  528. floorinfo.dormitory = unit;
  529. floorinfo.floorNum = floors.Count.ToString();
  530. floorinfo.BedNum = bedsNum.ToString();
  531. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  532. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  533. floorinfo.RoomNum = roomsNum.ToString();
  534. list.Add(floorinfo);
  535. }
  536. return new { rows = list, DormitoryName = dormitory.Name, DormitoryID = dormitory.ID };
  537. }
  538. catch (Exception ex)
  539. {
  540. if (ex is ExceptionEx)
  541. {
  542. throw;
  543. }
  544. else
  545. {
  546. throw ExceptionEx.ThrowBusinessException(ex);
  547. }
  548. }
  549. }
  550. public object GetDormitoryList()
  551. {
  552. try
  553. {
  554. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  555. var dormitorys = data.Where(a => a.BuildType == "1").ToList().OrderBy(a => a.Name).ToList();
  556. List<floorsInfo> list = new List<floorsInfo>();
  557. foreach (var dormitory in dormitorys)
  558. {
  559. var units = data.Where(a => a.ParentID == dormitory.ID).ToList();
  560. var roomsNum = 0;
  561. var bedsNum = 0;
  562. var hasStudentsNum = 0;
  563. foreach (var unit in units)
  564. {
  565. var floors = data.Where(a => a.ParentID == unit.ID).ToList();
  566. foreach (var floor in floors)
  567. {
  568. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  569. roomsNum = roomsNum + rooms.Count;
  570. foreach (var room in rooms)
  571. {
  572. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  573. foreach (var bed in beds)
  574. {
  575. bedsNum++;
  576. if (!string.IsNullOrEmpty(bed.StudentID))
  577. {
  578. hasStudentsNum++;
  579. }
  580. }
  581. }
  582. }
  583. }
  584. floorsInfo floorinfo = new floorsInfo();
  585. floorinfo.dormitory = dormitory;
  586. floorinfo.UnitNum = units.Count.ToString();
  587. if (units.Count > 0)
  588. {
  589. floorinfo.floorNum = data.Count(a => a.ParentID == units.FirstOrDefault().ID).ToString();
  590. }
  591. else
  592. {
  593. floorinfo.floorNum = "0";
  594. }
  595. floorinfo.BedNum = bedsNum.ToString();
  596. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  597. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  598. floorinfo.RoomNum = roomsNum.ToString();
  599. list.Add(floorinfo);
  600. }
  601. return list;
  602. }
  603. catch (Exception ex)
  604. {
  605. if (ex is ExceptionEx)
  606. {
  607. throw;
  608. }
  609. else
  610. {
  611. throw ExceptionEx.ThrowServiceException(ex);
  612. }
  613. }
  614. }
  615. internal object GetBedList(string parentID)
  616. {
  617. try
  618. {
  619. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  620. var room = data.FirstOrDefault(a => a.ID == parentID);
  621. var floor = data.FirstOrDefault(a => a.ID == room.ParentID);
  622. var unit = data.FirstOrDefault(a => a.ID == floor.ParentID);
  623. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  624. var beds = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList();
  625. List<floorsInfo> list = new List<floorsInfo>();
  626. foreach (var bed in beds)
  627. {
  628. floorsInfo floorInfo = new floorsInfo();
  629. floorInfo.dormitory = bed;
  630. if (!string.IsNullOrEmpty(bed.StudentID))
  631. {
  632. floorInfo.stuInfo = this.BaseRepository("CollegeMIS").FindEntity<StuInfoBasicEntity>(a => a.StuNo == bed.StudentID);
  633. }
  634. list.Add(floorInfo);
  635. }
  636. return new
  637. {
  638. rows = list,
  639. roomID = room.ID,
  640. roomName = room.Name,
  641. floorID = floor.ID,
  642. floorName = floor.Name,
  643. unitID = unit.ID,
  644. unitName = unit.Name,
  645. dormitoryID = dormitory.ID,
  646. dormitoryName = dormitory.Name
  647. };
  648. }
  649. catch (Exception ex)
  650. {
  651. if (ex is ExceptionEx)
  652. {
  653. throw;
  654. }
  655. else
  656. {
  657. throw ExceptionEx.ThrowServiceException(ex);
  658. }
  659. }
  660. }
  661. private class floorsInfo
  662. {
  663. public Acc_DormitoryBuildEntity dormitory { get; set; }
  664. public StuInfoBasicEntity stuInfo { get; set; }
  665. /// <summary>
  666. /// 单元数量
  667. /// </summary>
  668. public string UnitNum { get; set; }
  669. /// <summary>
  670. /// 楼层数量
  671. /// </summary>
  672. public string floorNum { get; set; }
  673. /// <summary>
  674. /// 房间数量
  675. /// </summary>
  676. public string RoomNum { get; set; }
  677. /// <summary>
  678. /// 床位数量
  679. /// </summary>
  680. public string BedNum { get; set; }
  681. /// <summary>
  682. /// 入住人数
  683. /// </summary>
  684. public string HasStudentNum { get; set; }
  685. /// <summary>
  686. /// 空床数量
  687. /// </summary>
  688. public string NoStudentNum { get; set; }
  689. }
  690. /// <summary>
  691. /// 获取Acc_DormitoryBuild表实体数据
  692. /// <param name="keyValue">主键</param>
  693. /// <summary>
  694. /// <returns></returns>
  695. public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntity(string keyValue)
  696. {
  697. try
  698. {
  699. return this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(keyValue);
  700. }
  701. catch (Exception ex)
  702. {
  703. if (ex is ExceptionEx)
  704. {
  705. throw;
  706. }
  707. else
  708. {
  709. throw ExceptionEx.ThrowServiceException(ex);
  710. }
  711. }
  712. }
  713. public List<Acc_DormitoryBuildEntity> GetClassifyTree()
  714. {
  715. try
  716. {
  717. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(x => (x.BuildType == "2" || x.BuildType == "1")).ToList();
  718. }
  719. catch (Exception ex)
  720. {
  721. if (ex is ExceptionEx)
  722. {
  723. throw;
  724. }
  725. else
  726. {
  727. throw ExceptionEx.ThrowServiceException(ex);
  728. }
  729. }
  730. }
  731. /// <summary>
  732. /// 获取Acc_DormitoryBuild表实体数据
  733. /// <param name="keyValue">主键</param>
  734. /// <summary>
  735. /// <returns></returns>
  736. public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntityByName(string name)
  737. {
  738. try
  739. {
  740. return this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(x => x.Name == name);
  741. }
  742. catch (Exception ex)
  743. {
  744. if (ex is ExceptionEx)
  745. {
  746. throw;
  747. }
  748. else
  749. {
  750. throw ExceptionEx.ThrowServiceException(ex);
  751. }
  752. }
  753. }
  754. /// <summary>
  755. /// 获取树形数据
  756. /// </summary>
  757. /// <returns></returns>
  758. public List<Acc_DormitoryBuildEntity> GetSqlTreeNew()
  759. {
  760. try
  761. {
  762. var aa = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().OrderBy(a => a.Name).ToList();
  763. var bb = this.BaseRepository("CollegeMIS").FindList<StuEnrollEntity>();
  764. foreach (var item in aa)
  765. {
  766. if (!string.IsNullOrEmpty(item.PlanStudentID))
  767. {
  768. var bbq = bb.FirstOrDefault(a => a.StuId == item.PlanStudentID);
  769. if (bbq != null)
  770. {
  771. item.Name = $"{item.Name}({bbq.StuName})";
  772. }
  773. }
  774. }
  775. return aa;
  776. }
  777. catch (Exception ex)
  778. {
  779. if (ex is ExceptionEx)
  780. {
  781. throw;
  782. }
  783. else
  784. {
  785. throw ExceptionEx.ThrowServiceException(ex);
  786. }
  787. }
  788. }
  789. /// <summary>
  790. /// 获取树形数据
  791. /// </summary>
  792. /// <returns></returns>
  793. public List<Acc_DormitoryBuildEntity> GetSqlTree()
  794. {
  795. try
  796. {
  797. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(a => a.BuildType != "5" && a.BuildType != "4").OrderBy(a => a.sort).ThenBy(a => a.Name).ToList();
  798. }
  799. catch (Exception ex)
  800. {
  801. if (ex is ExceptionEx)
  802. {
  803. throw;
  804. }
  805. else
  806. {
  807. throw ExceptionEx.ThrowServiceException(ex);
  808. }
  809. }
  810. }
  811. public List<Acc_DormitoryBuildEntity> GetDeptOrMajorOrClass(string strWhere)
  812. {
  813. try
  814. {
  815. string sql1 = " select distinct dept,d.DeptName from Acc_DormitoryBuild t join CdDept d on t.dept=d.deptno";
  816. string sql2 = " select distinct major,m.MajorName from Acc_DormitoryBuild t join CdMajor m on t.major=m.majorno";
  817. string sql3 = " select distinct class,c.ClassName from Acc_DormitoryBuild t join ClassInfo c on t.class=c.classno";
  818. string sql = @" where t.ID in (
  819. select parentid from[dbo].[Acc_DormitoryBuild] where BuildType = '5' and(studentid is not null and len(studentid) > 0)
  820. )";
  821. if (string.IsNullOrEmpty(strWhere))
  822. {
  823. sql = sql1 + sql;
  824. }
  825. else if (strWhere.Contains("deptno"))
  826. {
  827. sql = sql2 + sql + " and " + strWhere;
  828. }
  829. else if (strWhere.Contains("majorno"))
  830. {
  831. sql = sql3 + sql + " and " + strWhere;
  832. }
  833. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(sql).ToList();
  834. }
  835. catch (Exception ex)
  836. {
  837. if (ex is ExceptionEx)
  838. {
  839. throw;
  840. }
  841. else
  842. {
  843. throw ExceptionEx.ThrowServiceException(ex);
  844. }
  845. }
  846. }
  847. /// <summary>
  848. /// 获取非空床的系部专业 班级
  849. /// </summary>
  850. /// <returns></returns>
  851. public List<Acc_DormitoryBuildEntity> GetSelectData(string strWhere)
  852. {
  853. try
  854. {
  855. string sql =
  856. @"select distinct dept,d.DeptName,major,m.MajorName,class,c.ClassName from [dbo].[Acc_DormitoryBuild] t
  857. join CdDept d on t.dept=d.deptno
  858. join CdMajor m on t.major=m.majorno
  859. join ClassInfo c on t.class=c.classno
  860. where t.ID in (
  861. select parentid from [dbo].[Acc_DormitoryBuild] where BuildType='5' and (studentid is not null and len(studentid)>0)
  862. )";
  863. if (!string.IsNullOrEmpty(strWhere))
  864. {
  865. sql += " and " + strWhere;
  866. }
  867. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(sql).ToList();
  868. }
  869. catch (Exception ex)
  870. {
  871. if (ex is ExceptionEx)
  872. {
  873. throw;
  874. }
  875. else
  876. {
  877. throw ExceptionEx.ThrowServiceException(ex);
  878. }
  879. }
  880. }
  881. /// <summary>
  882. /// 获取树形数据(学生归宿)
  883. /// </summary>
  884. /// <returns></returns>
  885. public List<Acc_DormitoryBuildEntity> GetSqlTreeForReturn()
  886. {
  887. try
  888. {
  889. List<Acc_DormitoryBuildEntity> list = new List<Acc_DormitoryBuildEntity>();
  890. var roomSql = @"select * from [dbo].[Acc_DormitoryBuild] where ID in (
  891. select parentid from [dbo].[Acc_DormitoryBuild] where BuildType='5' and (studentid is not null and len(studentid)>0)
  892. )";
  893. List<Acc_DormitoryBuildEntity> roomList = this.BaseRepository("CollegeMIS")
  894. .FindList<Acc_DormitoryBuildEntity>(roomSql).ToList();
  895. list = roomList.Union(list).ToList();
  896. var apartIds = roomList.Select(x => x.ApartmentId).Distinct().ToList();
  897. var unitIds = roomList.Select(x => x.UnitId).Distinct().ToList();
  898. var floorIds = roomList.Select(x => x.FloorId).Distinct().ToList();
  899. var otherList = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(x =>
  900. apartIds.Contains(x.ID) || unitIds.Contains(x.ID) || floorIds.Contains(x.ID)).ToList();
  901. list = list.Union(otherList).ToList();
  902. return list.OrderBy(x => x.DNo).OrderBy(x => x.Name).ToList();
  903. }
  904. catch (Exception ex)
  905. {
  906. if (ex is ExceptionEx)
  907. {
  908. throw;
  909. }
  910. else
  911. {
  912. throw ExceptionEx.ThrowServiceException(ex);
  913. }
  914. }
  915. }
  916. /// <summary>
  917. /// 根据父id获取数据
  918. /// </summary>
  919. /// <param name="parentID">父id</param>
  920. /// <returns></returns>
  921. public DataTable GetTreeByParentId(string parentID)
  922. {
  923. try
  924. {
  925. return this.BaseRepository("CollegeMIS").FindTable($"SELECT * FROM dbo.Acc_DormitoryBuild WHERE ParentID = '{parentID}'");
  926. }
  927. catch (Exception ex)
  928. {
  929. if (ex is ExceptionEx)
  930. {
  931. throw;
  932. }
  933. else
  934. {
  935. throw ExceptionEx.ThrowServiceException(ex);
  936. }
  937. }
  938. }
  939. /// <summary>
  940. /// 根据父id获取数据
  941. /// </summary>
  942. /// <param name="parentID">父id</param>
  943. /// <returns></returns>
  944. public string GetDormitoryInfoByPlanStuNo(string stuNo)
  945. {
  946. try
  947. {
  948. var result = "";
  949. if (!string.IsNullOrEmpty(stuNo))
  950. {
  951. var dormitorys = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  952. var bed = dormitorys.FirstOrDefault(a => a.PlanStudentID == stuNo);
  953. if (bed != null)
  954. {
  955. var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID);
  956. var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID);
  957. var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID);
  958. var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID);
  959. result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}";
  960. }
  961. }
  962. return result;
  963. }
  964. catch (Exception ex)
  965. {
  966. if (ex is ExceptionEx)
  967. {
  968. throw;
  969. }
  970. else
  971. {
  972. throw ExceptionEx.ThrowServiceException(ex);
  973. }
  974. }
  975. }
  976. public string GetDormitoryInfoByStuNo(string stuNo)
  977. {
  978. try
  979. {
  980. var result = "";
  981. if (!string.IsNullOrEmpty(stuNo))
  982. {
  983. var dormitorys = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  984. var userInfo = this.BaseRepository("CollegeMIS")
  985. .FindEntity<StuInfoBasicEntity>(a => a.StuNo == stuNo);
  986. var bed = dormitorys.FirstOrDefault(a => a.StudentID == userInfo.StuId);
  987. if (bed != null)
  988. {
  989. var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID);
  990. var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID);
  991. var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID);
  992. var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID);
  993. result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}";
  994. }
  995. }
  996. return result;
  997. }
  998. catch (Exception ex)
  999. {
  1000. if (ex is ExceptionEx)
  1001. {
  1002. throw;
  1003. }
  1004. else
  1005. {
  1006. throw ExceptionEx.ThrowServiceException(ex);
  1007. }
  1008. }
  1009. }
  1010. public bool MatchDormitoryInfo(string stuNo, string dormitory, string unit, string floor, string room, string bed, List<Acc_DormitoryBuildEntity> data)
  1011. {
  1012. try
  1013. {
  1014. var stuInfo = this.BaseRepository("CollegeMIS").FindEntity<StuInfoBasicEntity>(a => a.StuNo == stuNo);
  1015. var dormitoryInfo = data.FirstOrDefault(a => a.BuildType == "1" && a.Name == dormitory);
  1016. if (dormitoryInfo != null)
  1017. {
  1018. var unitInfo = data.FirstOrDefault(a =>
  1019. a.BuildType == "2" && a.ParentID == dormitoryInfo.ID && a.Name == unit);
  1020. if (unitInfo != null)
  1021. {
  1022. var floorInfo = data.FirstOrDefault(a =>
  1023. a.BuildType == "3" && a.ParentID == unitInfo.ID && a.Name == floor);
  1024. if (floorInfo != null)
  1025. {
  1026. var roomInfo = data.FirstOrDefault(a =>
  1027. a.BuildType == "4" && a.ParentID == floorInfo.ID && a.Name == room);
  1028. if (roomInfo != null)
  1029. {
  1030. var bedInfo = data.FirstOrDefault(a =>
  1031. a.BuildType == "5" && a.ParentID == roomInfo.ID && a.Name == bed);
  1032. if (bedInfo != null && stuInfo != null)
  1033. {
  1034. var oldbedInfo = data.Where(a => a.StudentID == stuInfo.StuId);
  1035. foreach (var item in oldbedInfo)
  1036. {
  1037. item.StudentID = "";
  1038. this.BaseRepository("CollegeMIS").Update(item);
  1039. }
  1040. bedInfo.StudentID = stuInfo.StuId;
  1041. bedInfo.StuName = stuInfo.StuName;
  1042. bedInfo.Dept = stuInfo.DeptNo;
  1043. bedInfo.Major = stuInfo.MajorNo;
  1044. bedInfo.Class = stuInfo.ClassNo;
  1045. bedInfo.Sex = Convert.ToString(stuInfo.GenderNo);
  1046. this.BaseRepository("CollegeMIS").Update(bedInfo);
  1047. return true;
  1048. }
  1049. }
  1050. }
  1051. }
  1052. }
  1053. return false;
  1054. }
  1055. catch (Exception ex)
  1056. {
  1057. if (ex is ExceptionEx)
  1058. {
  1059. throw;
  1060. }
  1061. else
  1062. {
  1063. throw ExceptionEx.ThrowServiceException(ex);
  1064. }
  1065. }
  1066. }
  1067. #endregion 获取数据
  1068. #region 提交数据
  1069. /// <summary>
  1070. /// 删除实体数据
  1071. /// <param name="keyValue">主键</param>
  1072. /// <summary>
  1073. /// <returns></returns>
  1074. public void DeleteEntity(string keyValue)
  1075. {
  1076. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  1077. try
  1078. {
  1079. //单个删除
  1080. //this.BaseRepository("CollegeMIS").Delete<Acc_DormitoryBuildEntity>(t => t.ID == keyValue);
  1081. //多个删除
  1082. var keyvalueArr = keyValue.Split(',');
  1083. foreach (var item in keyvalueArr)
  1084. {
  1085. db.Delete<Acc_DormitoryBuildEntity>(t => t.ID == item);
  1086. DeleteAll(item);
  1087. }
  1088. db.Commit();
  1089. }
  1090. catch (Exception ex)
  1091. {
  1092. db.Rollback();
  1093. if (ex is ExceptionEx)
  1094. {
  1095. throw;
  1096. }
  1097. else
  1098. {
  1099. throw ExceptionEx.ThrowServiceException(ex);
  1100. }
  1101. }
  1102. }
  1103. public void DeleteBed(string keyValue, string ParentID)
  1104. {
  1105. try
  1106. {
  1107. this.BaseRepository("CollegeMIS").Delete<Acc_DormitoryBuildEntity>(t => t.ID == keyValue);
  1108. UpdateCheckInNum(ParentID);
  1109. }
  1110. catch (Exception ex)
  1111. {
  1112. if (ex is ExceptionEx)
  1113. {
  1114. throw;
  1115. }
  1116. else
  1117. {
  1118. throw ExceptionEx.ThrowServiceException(ex);
  1119. }
  1120. }
  1121. }
  1122. public void DeleteAll(string parentid)
  1123. {
  1124. var list = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(a => a.ParentID == parentid).ToList();
  1125. if (list.Count > 0)
  1126. {
  1127. foreach (var item in list)
  1128. {
  1129. if (item != null)
  1130. {
  1131. this.BaseRepository("CollegeMIS").Delete(item);
  1132. DeleteAll(item.ID);
  1133. }
  1134. }
  1135. }
  1136. }
  1137. /// <summary>
  1138. /// 批量添加单元、楼层、房间、床位
  1139. /// </summary>
  1140. /// <param name="keyValue"></param>
  1141. /// <param name="elementNum"></param>
  1142. /// <param name="floorNum"></param>
  1143. /// <param name="roomNum"></param>
  1144. /// <param name="bedNum"></param>
  1145. public void DormitoryAdd(string keyValue, int elementNum, int floorNum, int roomNum, int bedNum)
  1146. {
  1147. try
  1148. {
  1149. //获取本楼允许入住的性别
  1150. var dormitory = this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(a => a.ID == keyValue);
  1151. var currentUser = LoginUserInfo.Get();
  1152. if (elementNum > 0)
  1153. {
  1154. List<Acc_DormitoryBuildEntity> list = new List<Acc_DormitoryBuildEntity>();
  1155. //添加单元
  1156. for (int i = 1; i <= elementNum; i++)
  1157. {
  1158. var elementEntity = new Acc_DormitoryBuildEntity
  1159. {
  1160. ParentID = keyValue,
  1161. ApartmentId = keyValue,
  1162. Name = i.ToString() + "单元",
  1163. DNo = i.ToString(),
  1164. BuildType = "2",//单元类型
  1165. Sex = dormitory.Sex,
  1166. Address = dormitory.Address,
  1167. Campus = dormitory.Campus,
  1168. CreateBy = currentUser.realName,
  1169. CreateTime = DateTime.Now,
  1170. Dept = dormitory.Dept,
  1171. Class = dormitory.Class,
  1172. Functionary = dormitory.Functionary,
  1173. Major = dormitory.Major,
  1174. Phone = dormitory.Phone,
  1175. Price = dormitory.Price,
  1176. UpdateBy = currentUser.realName,
  1177. UpdateTime = DateTime.Now
  1178. };
  1179. elementEntity.Create();
  1180. elementEntity.UnitId = elementEntity.ID;
  1181. list.Add(elementEntity);
  1182. //添加楼层
  1183. if (floorNum > 0)
  1184. {
  1185. for (int j = 1; j <= floorNum; j++)
  1186. {
  1187. var floorEntity = new Acc_DormitoryBuildEntity
  1188. {
  1189. ParentID = elementEntity.ID,
  1190. ApartmentId = keyValue,
  1191. UnitId = elementEntity.ID,
  1192. Name = j.ToString() + "层",
  1193. DNo = j.ToString(),
  1194. BuildType = "3",//楼层类型,
  1195. Sex = dormitory.Sex,
  1196. Address = dormitory.Address,
  1197. Campus = dormitory.Campus,
  1198. CreateBy = currentUser.realName,
  1199. CreateTime = DateTime.Now,
  1200. Dept = dormitory.Dept,
  1201. Class = dormitory.Class,
  1202. Functionary = dormitory.Functionary,
  1203. Major = dormitory.Major,
  1204. Phone = dormitory.Phone,
  1205. Price = dormitory.Price,
  1206. UpdateBy = currentUser.realName,
  1207. UpdateTime = DateTime.Now
  1208. };
  1209. floorEntity.Create();
  1210. floorEntity.FloorId = floorEntity.ID;
  1211. list.Add(floorEntity);
  1212. //添加房间
  1213. if (roomNum > 0)
  1214. {
  1215. for (int n = 1; n <= roomNum; n++)
  1216. {
  1217. var roomEntity = new Acc_DormitoryBuildEntity
  1218. {
  1219. ParentID = floorEntity.ID,
  1220. ApartmentId = keyValue,
  1221. UnitId = elementEntity.ID,
  1222. FloorId = floorEntity.ID,
  1223. Name = j.ToString() + (n < 10 ? "0" + n.ToString() : n.ToString()) + "室",
  1224. DNo = j.ToString() + (n < 10 ? "0" + n.ToString() : n.ToString()),
  1225. BuildType = "4",//房间类型
  1226. Sex = dormitory.Sex,
  1227. Address = dormitory.Address,
  1228. Campus = dormitory.Campus,
  1229. CreateBy = currentUser.realName,
  1230. CreateTime = DateTime.Now,
  1231. Dept = dormitory.Dept,
  1232. Class = dormitory.Class,
  1233. Functionary = dormitory.Functionary,
  1234. Major = dormitory.Major,
  1235. Phone = dormitory.Phone,
  1236. Price = dormitory.Price,
  1237. RoomType = bedNum,
  1238. UpdateBy = currentUser.realName,
  1239. UpdateTime = DateTime.Now,
  1240. Starred = "3",
  1241. Leader = "暂无"
  1242. };
  1243. roomEntity.Create();
  1244. list.Add(roomEntity);
  1245. //床位添加
  1246. if (bedNum > 0)
  1247. {
  1248. for (int m = 1; m <= bedNum; m++)
  1249. {
  1250. var bedEntity = new Acc_DormitoryBuildEntity
  1251. {
  1252. ParentID = roomEntity.ID,
  1253. ApartmentId = keyValue,
  1254. UnitId = elementEntity.ID,
  1255. FloorId = floorEntity.ID,
  1256. Name = m.ToString() + "床",
  1257. DNo = m.ToString(),
  1258. BuildType = "5",
  1259. Sex = dormitory.Sex,
  1260. Address = dormitory.Address,
  1261. Campus = dormitory.Campus,
  1262. CreateBy = currentUser.realName,
  1263. CreateTime = DateTime.Now,
  1264. Dept = dormitory.Dept,
  1265. Class = dormitory.Class,
  1266. Functionary = dormitory.Functionary,
  1267. Major = dormitory.Major,
  1268. Phone = dormitory.Phone,
  1269. Price = dormitory.Price,
  1270. UpdateBy = currentUser.realName,
  1271. UpdateTime = DateTime.Now,
  1272. };
  1273. bedEntity.Create();
  1274. list.Add(bedEntity);
  1275. }
  1276. }
  1277. }
  1278. }
  1279. }
  1280. }
  1281. }
  1282. if (list.Count > 0)
  1283. {
  1284. this.BaseRepository("CollegeMIS").Insert(list);
  1285. }
  1286. }
  1287. }
  1288. catch (Exception ex)
  1289. {
  1290. if (ex is ExceptionEx)
  1291. {
  1292. throw;
  1293. }
  1294. else
  1295. {
  1296. throw ExceptionEx.ThrowServiceException(ex);
  1297. }
  1298. }
  1299. }
  1300. /// <summary>
  1301. /// 自动分配宿舍
  1302. /// </summary>
  1303. /// <param name="noNation">少数民族不能分一块</param>
  1304. /// <param name="noPlace">同一个地方的不能分一块</param>
  1305. /// <param name="Sex"></param>
  1306. public void Automatic_allocation_accommodation(bool noNation, bool noPlace, string Sex)
  1307. {
  1308. try
  1309. {
  1310. var boolSex = Convert.ToBoolean(Sex == "1");
  1311. //获取所有的宿舍单位
  1312. var allBuilds = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().Where(a => a.Sex == Sex).ToList();
  1313. //获取所有已经分配了床位的学生id
  1314. var hasBedStudentIDs = allBuilds
  1315. .Where(a => a.BuildType == "5")
  1316. .Where(a => a.StudentID != null && a.StudentID != "").Select(a => a.StudentID).ToList();
  1317. //获取还没有床位的学生
  1318. var students = this.BaseRepository("CollegeMIS").FindList<StuInfoBasicEntity>()
  1319. .Where(a => a.GenderNo == boolSex)
  1320. .Where(a => !hasBedStudentIDs.Contains(a.StuId))
  1321. .ToList();
  1322. //根据性别获取所有空闲的床位
  1323. var allBeds = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>()
  1324. .Where(a => a.Sex == Sex)
  1325. .Where(a => a.StudentID == null || a.StudentID == "")
  1326. .ToList();
  1327. if (allBeds.Count() > students.Count())
  1328. {
  1329. #region 普通分配
  1330. var beds = new List<Acc_DormitoryBuildEntity>();
  1331. var studentNo = 0;
  1332. var builds = allBuilds.Where(a => a.BuildType == "1").OrderBy(a => a.Name).ToList();
  1333. foreach (var build in builds)
  1334. {
  1335. if (studentNo < students.Count())
  1336. {
  1337. var elements = allBuilds.Where(a => a.ParentID == build.ID).OrderBy(a => a.Name).ToList();
  1338. foreach (var element in elements)
  1339. {
  1340. if (studentNo < students.Count())
  1341. {
  1342. var layers = allBuilds.Where(a => a.ParentID == element.ID).OrderBy(a => a.Name).ToList();
  1343. foreach (var layer in layers)
  1344. {
  1345. if (studentNo < students.Count())
  1346. {
  1347. var rooms = allBuilds.Where(a => a.ParentID == layer.ID).OrderBy(a => a.Name).ToList();
  1348. foreach (var room in rooms)
  1349. {
  1350. if (studentNo < students.Count())
  1351. {
  1352. var bedss = allBuilds.Where(a => a.ParentID == room.ID)
  1353. .Where(a => a.StudentID == null || a.StudentID == "")
  1354. .OrderBy(a => a.Name).ToList();
  1355. foreach (var bed in bedss)
  1356. {
  1357. if (studentNo < students.Count())
  1358. {
  1359. bed.StudentID = students[studentNo].StuId;
  1360. studentNo++;
  1361. beds.Add(bed);
  1362. }
  1363. }
  1364. }
  1365. }
  1366. }
  1367. }
  1368. }
  1369. }
  1370. }
  1371. }
  1372. //打乱
  1373. Random ram = new Random();
  1374. int currentIndex;
  1375. string tempValue;
  1376. for (int i = 0; i < beds.Count(); i++)
  1377. {
  1378. currentIndex = ram.Next(0, beds.Count() - i);
  1379. tempValue = beds[currentIndex].StudentID;
  1380. beds[currentIndex].StudentID = beds[beds.Count() - 1 - i].StudentID;
  1381. beds[beds.Count() - 1 - i].StudentID = tempValue;
  1382. }
  1383. #endregion 普通分配
  1384. #region 同一少数民族的不能在一起
  1385. if (noNation)
  1386. {
  1387. //var nationals = students.GroupBy(a => a.NationalityNo);
  1388. //List<string> studentids = new List<string>();
  1389. //foreach (var item in nationals)
  1390. //{
  1391. // var studentid=studentid.
  1392. // studentids.Add()
  1393. //}
  1394. var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList();
  1395. foreach (var room in roomsIDs)
  1396. {
  1397. //获取本宿舍相同民族超过2个学生的民族
  1398. var sameNationals = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1399. .Where(a => a.b.ParentID == room)
  1400. .Where(a => a.s.NationalityNo != "01")
  1401. .GroupBy(a => a.s.NationalityNo)
  1402. .Where(a => a.Count() > 1).ToList();
  1403. if (sameNationals.Count > 0)
  1404. {
  1405. //获取本宿舍的所有学生所属民族
  1406. var theRoomNationals = beds
  1407. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1408. .Where(a => a.b.ParentID == room)
  1409. .Where(a => a.s.NationalityNo != "01" && a.s.NationalityNo != "07")
  1410. .Select(a => a.s.NationalityNo).ToList();
  1411. //获取别的宿舍不含此民族的学生的宿舍
  1412. var bedNum = beds.Count(a => a.ParentID == room);
  1413. var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b })
  1414. .Where(a => !theRoomNationals.Contains(a.b.NationalityNo))
  1415. .Select(a => new { a.a.ID, a.a.ParentID })
  1416. .GroupBy(a => a.ParentID)
  1417. .Where(a => a.Count() == bedNum)
  1418. .ToList();
  1419. var changeTime = 0;//调换次数
  1420. if (otherRooms.Count > 0 && otherRooms.Count > changeTime)
  1421. {
  1422. Acc_DormitoryBuildEntity theBed;
  1423. Acc_DormitoryBuildEntity otherBed;
  1424. string tempStudentID;
  1425. //遍历学生超过俩个的民族
  1426. foreach (var national in sameNationals)
  1427. {
  1428. //获取此宿舍此民族的学生的床位
  1429. var theSameNationalBeds = beds
  1430. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1431. .Where(a => a.b.ParentID == room)
  1432. .Where(a => a.s.NationalityNo == national.Key)
  1433. .Select(a => a.b.ID).ToList();
  1434. //如果是俩个只要换一个就可以 依此类推
  1435. for (int j = 0; j < theSameNationalBeds.Count() - 1; j++)
  1436. {
  1437. if (otherRooms.Count > j)
  1438. {
  1439. //获取将要调换的床位
  1440. theBed = beds.FirstOrDefault(a => a.ID == theSameNationalBeds[j]);
  1441. otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key);
  1442. tempStudentID = otherBed.StudentID;
  1443. otherBed.StudentID = theBed.StudentID;
  1444. theBed.StudentID = tempStudentID;
  1445. changeTime++;
  1446. }
  1447. else
  1448. {
  1449. break;
  1450. }
  1451. }
  1452. }
  1453. }
  1454. }
  1455. }
  1456. }
  1457. #endregion 同一少数民族的不能在一起
  1458. #region 同一地方的不能在一起
  1459. if (noPlace)
  1460. {
  1461. var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList();
  1462. foreach (var room in roomsIDs)
  1463. {
  1464. //获取本宿舍相同地方超过2个学生的地方
  1465. var sameCitys = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1466. .Where(a => a.b.ParentID == room)
  1467. .GroupBy(a => a.s.F_CityId)
  1468. .Where(a => a.Count() > 1).ToList();
  1469. if (sameCitys.Count > 0)
  1470. {
  1471. //获取本宿舍的所有学生所属地方
  1472. var theRoomCitys = beds
  1473. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1474. .Where(a => a.b.ParentID == room)
  1475. .Select(a => a.s.F_CityId).ToList();
  1476. //获取别的宿舍不含此地方的学生的宿舍
  1477. var bedNum = beds.Count(a => a.ParentID == room);
  1478. var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b })
  1479. .Where(a => !theRoomCitys.Contains(a.b.F_CityId))
  1480. .Select(a => new { a.a.ID, a.a.ParentID })
  1481. .GroupBy(a => a.ParentID)
  1482. .Where(a => a.Count() == bedNum)
  1483. .ToList();
  1484. var changeTime = 0;//调换次数
  1485. if (otherRooms.Count > 0 && otherRooms.Count > changeTime)
  1486. {
  1487. Acc_DormitoryBuildEntity theBed;
  1488. Acc_DormitoryBuildEntity otherBed;
  1489. string tempStudentID;
  1490. //遍历学生超过俩个的地方
  1491. foreach (var city in sameCitys)
  1492. {
  1493. //获取此宿舍此地方的学生的床位
  1494. var theSameCityBeds = beds
  1495. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1496. .Where(a => a.b.ParentID == room)
  1497. .Where(a => a.s.F_CityId == city.Key)
  1498. .Select(a => a.b.ID).ToList();
  1499. //如果是俩个只要换一个就可以 依此类推
  1500. for (int j = 0; j < theSameCityBeds.Count() - 1; j++)
  1501. {
  1502. if (otherRooms.Count > j)
  1503. {
  1504. //获取将要调换的床位
  1505. theBed = beds.FirstOrDefault(a => a.ID == theSameCityBeds[j]);
  1506. otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key);
  1507. tempStudentID = otherBed.StudentID;
  1508. otherBed.StudentID = theBed.StudentID;
  1509. theBed.StudentID = tempStudentID;
  1510. changeTime++;
  1511. }
  1512. else
  1513. {
  1514. break;
  1515. }
  1516. }
  1517. }
  1518. }
  1519. }
  1520. }
  1521. }
  1522. #endregion 同一地方的不能在一起
  1523. this.BaseRepository("CollegeMIS").Update(beds);
  1524. }
  1525. }
  1526. catch (Exception ex)
  1527. {
  1528. if (ex is ExceptionEx)
  1529. {
  1530. throw;
  1531. }
  1532. else
  1533. {
  1534. throw ExceptionEx.ThrowServiceException(ex);
  1535. }
  1536. throw;
  1537. }
  1538. }
  1539. /// <summary>
  1540. /// 保存实体数据(新增、修改)
  1541. /// <param name="keyValue">主键</param>
  1542. /// <summary>
  1543. /// <returns></returns>
  1544. public void SaveEntity(string keyValue, Acc_DormitoryBuildEntity entity)
  1545. {
  1546. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  1547. try
  1548. {
  1549. var currentUser = LoginUserInfo.Get();
  1550. if (!string.IsNullOrEmpty(keyValue))
  1551. {
  1552. entity.Modify(keyValue);
  1553. entity.UpdateBy = currentUser.realName;
  1554. entity.UpdateTime = DateTime.Now;
  1555. db.Update(entity);
  1556. //更新下级
  1557. var childList = db.FindList<Acc_DormitoryBuildEntity>(x => x.ParentID == entity.ID);
  1558. foreach (var childItem in childList)
  1559. {
  1560. childItem.Campus = entity.Campus;
  1561. childItem.Dept = entity.Dept;
  1562. childItem.Major = entity.Major;
  1563. childItem.Class = entity.Class;
  1564. childItem.Sex = entity.Sex;
  1565. childItem.Functionary = entity.Functionary;
  1566. childItem.Address = entity.Address;
  1567. childItem.Phone = entity.Phone;
  1568. childItem.Price = entity.Price;
  1569. SaveEntity(childItem.ID, childItem);
  1570. }
  1571. db.Commit();
  1572. }
  1573. else
  1574. {
  1575. entity.Create();
  1576. if (entity.BuildType == "1")
  1577. {
  1578. entity.ApartmentId = entity.ID;
  1579. if (string.IsNullOrEmpty(entity.ParentID) || entity.ParentID == "-1")
  1580. {
  1581. var rootNode = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().FirstOrDefault(a => a.ParentID == null);
  1582. if (rootNode == null)
  1583. {
  1584. var rootEntity = new Acc_DormitoryBuildEntity
  1585. {
  1586. Name = "数字化智慧校园"
  1587. };
  1588. rootEntity.Create();
  1589. rootEntity.CreateBy = currentUser.realName;
  1590. rootEntity.CreateTime = DateTime.Now;
  1591. rootEntity.UpdateBy = currentUser.realName;
  1592. rootEntity.UpdateTime = DateTime.Now;
  1593. rootEntity.ApartmentId = rootEntity.ID;
  1594. entity.ParentID = rootEntity.ID;
  1595. this.BaseRepository("CollegeMIS").Insert(rootEntity);
  1596. }
  1597. else
  1598. {
  1599. entity.ParentID = rootNode.ID;
  1600. }
  1601. }
  1602. }
  1603. else
  1604. {
  1605. //上一级
  1606. var parentity = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().FirstOrDefault(a => a.ID == entity.ParentID);
  1607. switch (parentity.BuildType)
  1608. {
  1609. case "1":
  1610. entity.ApartmentId = parentity.ID;
  1611. entity.UnitId = entity.ID;
  1612. break;
  1613. case "2":
  1614. {
  1615. entity.FloorId = entity.ID;
  1616. entity.UnitId = parentity.ID;
  1617. entity.ApartmentId = parentity.ApartmentId;
  1618. }
  1619. break;
  1620. case "3":
  1621. {
  1622. entity.FloorId = parentity.ID;
  1623. entity.UnitId = parentity.UnitId;
  1624. entity.ApartmentId = parentity.ApartmentId;
  1625. }
  1626. break;
  1627. }
  1628. }
  1629. entity.CreateBy = currentUser.realName;
  1630. entity.CreateTime = DateTime.Now;
  1631. entity.UpdateBy = currentUser.realName;
  1632. entity.UpdateTime = DateTime.Now;
  1633. this.BaseRepository("CollegeMIS").Insert(entity);
  1634. }
  1635. }
  1636. catch (Exception ex)
  1637. {
  1638. if (ex is ExceptionEx)
  1639. {
  1640. throw;
  1641. }
  1642. else
  1643. {
  1644. throw ExceptionEx.ThrowServiceException(ex);
  1645. }
  1646. }
  1647. }
  1648. /// <summary>
  1649. /// 保存实体数据(新增、修改)
  1650. /// <param name="keyValue">主键</param>
  1651. /// <summary>
  1652. /// <returns></returns>
  1653. public void SaveBedEntity(string keyValue, string ParentID, Acc_DormitoryBuildEntity entity)
  1654. {
  1655. var db = this.BaseRepository("CollegeMIS");
  1656. try
  1657. {
  1658. db.BeginTrans();
  1659. if (!string.IsNullOrEmpty(keyValue))
  1660. {
  1661. entity.Modify(keyValue);
  1662. db.Update(entity);
  1663. }
  1664. else
  1665. {
  1666. var parentEntity = db.FindEntity<Acc_DormitoryBuildEntity>(ParentID);
  1667. entity.Create();
  1668. entity.ApartmentId = parentEntity.ApartmentId;
  1669. entity.UnitId = parentEntity.UnitId;
  1670. entity.FloorId = parentEntity.FloorId;
  1671. entity.ParentID = ParentID;
  1672. entity.BuildType = "5";
  1673. db.Insert(entity);
  1674. }
  1675. db.Commit();
  1676. UpdateCheckInNum(ParentID);
  1677. }
  1678. catch (Exception ex)
  1679. {
  1680. if (ex is ExceptionEx)
  1681. {
  1682. throw;
  1683. }
  1684. else
  1685. {
  1686. throw ExceptionEx.ThrowServiceException(ex);
  1687. }
  1688. }
  1689. }
  1690. private void UpdateCheckInNum(string ParentID)
  1691. {
  1692. try
  1693. {
  1694. string sql = $@"update [dbo].[Acc_DormitoryBuild] set RoomType=(
  1695. select count(1) from [dbo].[Acc_DormitoryBuild] where ParentId='{ParentID}' and BuildType='5'
  1696. )
  1697. where ID='{ParentID}'
  1698. ";
  1699. this.BaseRepository("CollegeMIS").ExecuteBySql(sql);
  1700. }
  1701. catch (Exception ex)
  1702. {
  1703. if (ex is ExceptionEx)
  1704. {
  1705. throw;
  1706. }
  1707. else
  1708. {
  1709. throw ExceptionEx.ThrowServiceException(ex);
  1710. }
  1711. }
  1712. }
  1713. public void SaveDeptClass(string keyValue, Acc_DormitoryBuildEntity entity, int type)
  1714. {
  1715. try
  1716. {
  1717. if (keyValue.Contains(","))
  1718. {
  1719. keyValue = string.Join("','", keyValue.Split(','));
  1720. }
  1721. string sql = $"update Acc_DormitoryBuild set ";
  1722. if (type == 1)
  1723. {
  1724. sql += $" Dept='{entity.Dept}' ";
  1725. }
  1726. else
  1727. {
  1728. if (entity.Class.Contains(','))
  1729. {
  1730. sql += $"Major='{entity.Major}',Class='{entity.Class}', MainClass='{entity.MainClass}'";
  1731. }
  1732. else
  1733. {
  1734. sql += $"Major='{entity.Major}',Class='{entity.Class}',MainClass ='{entity.Class}'";
  1735. }
  1736. }
  1737. sql += $" where ID in ('{keyValue}')";
  1738. this.BaseRepository("CollegeMIS").ExecuteBySql(sql);
  1739. }
  1740. catch (Exception ex)
  1741. {
  1742. if (ex is ExceptionEx)
  1743. {
  1744. throw;
  1745. }
  1746. else
  1747. {
  1748. throw ExceptionEx.ThrowServiceException(ex);
  1749. }
  1750. }
  1751. }
  1752. /// <summary>
  1753. /// 分配宿舍
  1754. /// </summary>
  1755. /// <param name="RoomId"></param>
  1756. /// <param name="list"></param>
  1757. public string SaveRoom(string RoomId, List<Acc_DormitoryBuildEntity> list)
  1758. {
  1759. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  1760. try
  1761. {
  1762. foreach (var entity in list)
  1763. {
  1764. //判断该学生是否已分配
  1765. if (!string.IsNullOrEmpty(entity.StudentID))
  1766. {
  1767. var count = db.FindList<Acc_DormitoryBuildEntity>().Count(x => x.StudentID == entity.StudentID && x.ID != entity.ID);
  1768. if (count > 0)
  1769. {
  1770. var stuname = db.FindEntity<StuInfoBasicEntity>(x => x.StuNo == entity.StudentID)?.StuName;
  1771. return "学生" + stuname + "已分配床位,不可重复分配!";
  1772. }
  1773. }
  1774. if (!string.IsNullOrEmpty(entity.StudentID))
  1775. {
  1776. //分配床位
  1777. string sql = $"update Acc_DormitoryBuild set StudentID='{entity.StudentID}' where ID='{entity.ID}'";
  1778. db.ExecuteBySql(sql);
  1779. }
  1780. }
  1781. int checkInStu = list.Where(x => x.StudentID != null).Count();
  1782. string checkInSql = $"update Acc_DormitoryBuild set CheckInStu='{checkInStu}' where ID='{RoomId}'";
  1783. db.ExecuteBySql(checkInSql);
  1784. db.Commit();
  1785. return "";
  1786. }
  1787. catch (Exception ex)
  1788. {
  1789. if (ex is ExceptionEx)
  1790. {
  1791. throw;
  1792. }
  1793. else
  1794. {
  1795. throw ExceptionEx.ThrowServiceException(ex);
  1796. }
  1797. }
  1798. }
  1799. /// <summary>
  1800. /// 同步宿舍信息
  1801. /// </summary>
  1802. public void SyncData()
  1803. {
  1804. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  1805. try
  1806. {
  1807. string sql = "select 学号,姓名,性别,公寓,单元,楼层,宿舍号,床位号 from t1 where 学号 is not null order by 公寓,单元,楼层,宿舍号,床位号";
  1808. DataTable dt = db.FindTable(sql);
  1809. //var list = db.FindList<Acc_DormitoryBuildEntity>();
  1810. //select * from Acc_DormitoryBuild where parentid= (select ID from Acc_DormitoryBuild where parentid=( select ID from Acc_DormitoryBuild where name='一号学生公寓'));
  1811. }
  1812. catch (Exception ex)
  1813. {
  1814. if (ex is ExceptionEx)
  1815. {
  1816. throw;
  1817. }
  1818. else
  1819. {
  1820. throw ExceptionEx.ThrowServiceException(ex);
  1821. }
  1822. }
  1823. }
  1824. /// <summary>
  1825. /// 导入宿舍信息
  1826. /// </summary>
  1827. /// <param name="dt"></param>
  1828. /// <returns></returns>
  1829. public (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid)
  1830. {
  1831. int snum = 0;
  1832. int fnum = 0;
  1833. var db = this.BaseRepository("CollegeMIS");
  1834. var msg = "";
  1835. try
  1836. {
  1837. db.BeginTrans();
  1838. var dormitoryBuildList = db.FindList<Acc_DormitoryBuildEntity>().ToList();
  1839. //系 专业 班级
  1840. var deptList = db.FindList<CdDeptEntity>();
  1841. var majorList = db.FindList<CdMajorEntity>(x => x.CheckMark == true);
  1842. var classList = db.FindList<ClassInfoEntity>(x => x.CheckMark == true);
  1843. //学生
  1844. var stuinfobasic = db.FindList<StuInfoBasicEntity>();
  1845. // 创建一个datatable容器用于保存导入失败的数据
  1846. DataTable failDt = new DataTable();
  1847. foreach (DataColumn dc in dt.Columns)
  1848. {
  1849. failDt.Columns.Add(dc.ColumnName, dc.DataType);
  1850. }
  1851. failDt.Columns.Add("导入错误", typeof(string));
  1852. dt.Columns.Add("导入错误", typeof(string));
  1853. //寝室Id
  1854. var dormitoryIds = new List<string>();
  1855. var user = LoginUserInfo.Get();
  1856. foreach (DataRow dr in dt.Rows)
  1857. {
  1858. try
  1859. {
  1860. if (!string.IsNullOrEmpty(dr["宿舍楼"].ToString().Trim()))
  1861. {
  1862. //系 专业 班级
  1863. var DeptNo = deptList.Where(x => x.DeptName == dr["系部"].ToString().Trim()).FirstOrDefault()?.DeptNo;
  1864. var MajorNo = majorList.Where(x => x.MajorName == dr["专业"].ToString().Trim() && x.DeptNo == DeptNo)
  1865. .FirstOrDefault()?.MajorNo;
  1866. var ClassNo = classList.Where(x => x.ClassName == dr["班级"].ToString()).FirstOrDefault()?.ClassNo;
  1867. if (string.IsNullOrEmpty(DeptNo))
  1868. {
  1869. fnum++;
  1870. dr["导入错误"] = "系部导入错误";
  1871. failDt.Rows.Add(dr.ItemArray);
  1872. continue;
  1873. }
  1874. if (string.IsNullOrEmpty(MajorNo))
  1875. {
  1876. fnum++;
  1877. dr["导入错误"] = "专业导入错误";
  1878. failDt.Rows.Add(dr.ItemArray);
  1879. continue;
  1880. }
  1881. if (string.IsNullOrEmpty(ClassNo))
  1882. {
  1883. fnum++;
  1884. dr["导入错误"] = "班级导入错误";
  1885. failDt.Rows.Add(dr.ItemArray);
  1886. continue;
  1887. }
  1888. var leaderno = "";
  1889. if (!string.IsNullOrEmpty(dr["舍长学号"].ToString()))
  1890. {
  1891. leaderno = stuinfobasic.Where(x => x.StuNo == dr["舍长学号"].ToString() && x.ClassNo == ClassNo).FirstOrDefault()?.StuNo;
  1892. if (string.IsNullOrEmpty(leaderno))
  1893. {
  1894. fnum++;
  1895. dr["导入错误"] = dr["舍长学号"] + "导入错误";
  1896. failDt.Rows.Add(dr.ItemArray);
  1897. continue;
  1898. }
  1899. }
  1900. var stuno = "";
  1901. if (!string.IsNullOrEmpty(dr["舍长学号"].ToString()))
  1902. {
  1903. stuno = stuinfobasic.Where(x => x.StuNo == dr["学生学号"].ToString() && x.ClassNo == ClassNo).FirstOrDefault()?.StuNo;
  1904. if (string.IsNullOrEmpty(stuno))
  1905. {
  1906. fnum++;
  1907. dr["导入错误"] = dr["学生学号"] + "导入错误";
  1908. failDt.Rows.Add(dr.ItemArray);
  1909. continue;
  1910. }
  1911. }
  1912. var parent = dormitoryBuildList.Where(x => x.Name == "数字化智慧校园").FirstOrDefault();
  1913. if (parent == null)
  1914. {
  1915. parent = new Acc_DormitoryBuildEntity();
  1916. parent.Create();
  1917. parent.DNo = "";
  1918. parent.Name = "数字化智慧校园";
  1919. //parent.BuildType = "1";
  1920. parent.CreateBy = user.realName;
  1921. parent.CreateTime = DateTime.Now;
  1922. parent.Campus = user.companyId;
  1923. db.Insert(parent);
  1924. dormitoryBuildList.Add(parent);
  1925. }
  1926. //宿舍楼
  1927. var apartmentName = dr["宿舍楼"].ToString().Trim();
  1928. var apartmentCode = dr["宿舍楼编号"].ToString();
  1929. var apartment = dormitoryBuildList.Where(x => x.Name == apartmentName && x.BuildType == "1")
  1930. .FirstOrDefault();
  1931. if (apartment == null)
  1932. {
  1933. //添加宿舍楼
  1934. apartment = new Acc_DormitoryBuildEntity();
  1935. apartment.Create();
  1936. apartment.ParentID = parent.ID;
  1937. apartment.DNo = apartmentCode;
  1938. apartment.Name = apartmentName;
  1939. apartment.BuildType = "1";
  1940. apartment.CreateBy = user.realName;
  1941. apartment.CreateTime = DateTime.Now;
  1942. apartment.Campus = user.companyId;
  1943. db.Insert(apartment);
  1944. dormitoryBuildList.Add(apartment);
  1945. }
  1946. //单元
  1947. var unitName = dr["单元"].ToString().Trim();
  1948. var unitCode = dr["单元编号"].ToString();
  1949. var unit = dormitoryBuildList.Where(x => x.Name == unitName && x.BuildType == "2" && x.ParentID == apartment.ID)
  1950. .FirstOrDefault();
  1951. if (unit == null)
  1952. {
  1953. //添加单元
  1954. unit = new Acc_DormitoryBuildEntity();
  1955. unit.Create();
  1956. unit.ParentID = apartment.ID;
  1957. unit.ApartmentId = apartment.ID;
  1958. unit.DNo = unitCode;
  1959. unit.Name = unitName;
  1960. unit.BuildType = "2";
  1961. unit.CreateBy = user.realName;
  1962. unit.CreateTime = DateTime.Now;
  1963. unit.Campus = user.companyId;
  1964. db.Insert(unit);
  1965. dormitoryBuildList.Add(unit);
  1966. }
  1967. //楼层
  1968. var floorName = dr["楼层"].ToString().Trim();
  1969. var floorCode = dr["楼层编号"].ToString();
  1970. var floor = dormitoryBuildList.Where(x => x.Name == floorName && x.DNo == floorCode && x.BuildType == "3" && x.ParentID == unit.ID)
  1971. .FirstOrDefault();
  1972. if (floor == null)
  1973. {
  1974. //添加楼层
  1975. floor = new Acc_DormitoryBuildEntity();
  1976. floor.Create();
  1977. floor.ParentID = unit.ID;
  1978. floor.ApartmentId = apartment.ID;
  1979. floor.UnitId = unit.ID;
  1980. floor.DNo = floorCode;
  1981. floor.Name = floorName;
  1982. floor.BuildType = "3";
  1983. floor.CreateBy = user.realName;
  1984. floor.CreateTime = DateTime.Now;
  1985. floor.Campus = user.companyId;
  1986. db.Insert(floor);
  1987. dormitoryBuildList.Add(floor);
  1988. }
  1989. //寝室
  1990. var dormitoryName = dr["寝室名称"].ToString().Trim();
  1991. var dormitoryCode = dr["寝室编号"].ToString().Trim();
  1992. var dormitory = dormitoryBuildList.Where(x => x.Name == dormitoryName && x.DNo == dormitoryCode && x.BuildType == "4" && x.ParentID == floor.ID)
  1993. .FirstOrDefault();
  1994. if (dormitory == null)
  1995. {
  1996. //添加
  1997. dormitory = new Acc_DormitoryBuildEntity();
  1998. dormitory.Create();
  1999. dormitory.Dept = DeptNo;
  2000. dormitory.Major = MajorNo;
  2001. dormitory.Class = ClassNo;
  2002. dormitory.ParentID = floor.ID;
  2003. dormitory.ApartmentId = apartment.ID;
  2004. dormitory.UnitId = unit.ID;
  2005. dormitory.FloorId = floor.ID;
  2006. dormitory.DNo = dormitoryCode;
  2007. dormitory.Name = dormitoryName;
  2008. dormitory.Sex = dr["性别"].ToString() == "女" ? "0" : "1";
  2009. dormitory.BuildType = "4";
  2010. dormitory.RoomType = Convert.ToInt32(dr["几人寝"].ToString());
  2011. dormitory.Leader = leaderno;
  2012. dormitory.Starred = "3";
  2013. dormitory.CreateBy = user.realName;
  2014. dormitory.CreateTime = DateTime.Now;
  2015. dormitory.Campus = user.companyId;
  2016. db.Insert(dormitory);
  2017. dormitoryBuildList.Add(dormitory);
  2018. }
  2019. dormitoryIds.Add(dormitory.ID);
  2020. //床位
  2021. var bedName = dr["床位"].ToString().Trim();
  2022. var bedCode = bedName.Replace("床", "").Replace("号", "");
  2023. var bed = dormitoryBuildList.Where(x => x.Name == bedName && x.DNo == bedCode && x.BuildType == "5" && x.ParentID == dormitory.ID)
  2024. .FirstOrDefault();
  2025. if (bed == null)
  2026. {
  2027. bed = new Acc_DormitoryBuildEntity();
  2028. bed.Create();
  2029. bed.ParentID = dormitory.ID;
  2030. bed.ApartmentId = apartment.ID;
  2031. bed.UnitId = unit.ID;
  2032. bed.FloorId = floor.ID;
  2033. bed.DNo = bedCode;
  2034. bed.Name = bedName;
  2035. bed.Dept = DeptNo;
  2036. bed.Major = MajorNo;
  2037. bed.Class = ClassNo;
  2038. bed.StudentID = stuno;
  2039. bed.Leader = leaderno;
  2040. bed.BuildType = "5";
  2041. bed.CreateBy = user.realName;
  2042. bed.CreateTime = DateTime.Now;
  2043. bed.Campus = user.companyId;
  2044. db.Insert(bed);
  2045. dormitoryBuildList.Add(bed);
  2046. snum++;
  2047. }
  2048. }
  2049. else
  2050. {
  2051. break;
  2052. }
  2053. }
  2054. catch (Exception e)
  2055. {
  2056. fnum++;
  2057. dr["导入错误"] = "出现异常:" + e.Message;
  2058. failDt.Rows.Add(dr.ItemArray);
  2059. continue;
  2060. }
  2061. }
  2062. db.Commit();
  2063. //更新寝室入住人数字段
  2064. var ids = string.Join("','", dormitoryIds);
  2065. var sql = $@" update a set a.CheckInStu=b.num
  2066. from Acc_DormitoryBuild a join (select parentid,count(1) as num from Acc_DormitoryBuild where buildtype='5' and studentid is not null and len(studentid)>0 and parentid in ('{ids}') group by parentid) b
  2067. on a.id=b.parentid
  2068. where a.id in ('{ids}') and a.buildtype='4'";
  2069. this.BaseRepository("CollegeMIS").ExecuteBySql(sql);
  2070. // 写入缓存如果有未导入的数据
  2071. if (failDt.Rows.Count > 0)
  2072. {
  2073. string errordt = failDt.ToJson();
  2074. cache.Write<string>(cacheKey + fileGuid, errordt, CacheId.excel);
  2075. }
  2076. return (failDt, snum, fnum);
  2077. }
  2078. catch (Exception ex)
  2079. {
  2080. db.Rollback();
  2081. if (ex is ExceptionEx)
  2082. {
  2083. throw;
  2084. }
  2085. else
  2086. {
  2087. throw ExceptionEx.ThrowServiceException(ex);
  2088. }
  2089. }
  2090. }
  2091. public List<ClassInfoEntity> GetClassNo(string keyValue)
  2092. {
  2093. try
  2094. {
  2095. var array = keyValue.Split(',');
  2096. var newarry = "";
  2097. for (int i = 0; i < array.Length; i++)
  2098. {
  2099. newarry += "'" + array[i] + "',";
  2100. }
  2101. newarry = newarry.TrimEnd(',');
  2102. StringBuilder sb = new StringBuilder();
  2103. sb.Append(@" select * from ClassInfo where classno in(" + newarry + ")");
  2104. return this.BaseRepository("CollegeMIS").FindList<ClassInfoEntity>(sb.ToString()).ToList();
  2105. }
  2106. catch (Exception ex)
  2107. {
  2108. if (ex is ExceptionEx)
  2109. {
  2110. throw;
  2111. }
  2112. else
  2113. {
  2114. throw ExceptionEx.ThrowServiceException(ex);
  2115. }
  2116. }
  2117. }
  2118. #endregion 提交数据
  2119. }
  2120. }