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.
 
 
 
 
 
 

1327 lines
55 KiB

  1. using Dapper;
  2. using Learun.Application.TwoDevelopment.EducationalAdministration;
  3. using Learun.DataBase.Repository;
  4. using Learun.Util;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Linq;
  9. using System.Text;
  10. namespace Learun.Application.TwoDevelopment.LogisticsManagement
  11. {
  12. /// <summary>
  13. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  14. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  15. /// 创 建:超级管理员
  16. /// 日 期:2019-04-26 15:02
  17. /// 描 述:学生宿舍管理
  18. /// </summary>
  19. public class AccommodationService : RepositoryFactory
  20. {
  21. #region 获取数据
  22. /// <summary>
  23. /// 获取页面显示列表数据
  24. /// <summary>
  25. /// <param name="queryJson">查询参数</param>
  26. /// <returns></returns>
  27. public IEnumerable<Acc_DormitoryBuildEntity> GetPageList(Pagination pagination, string queryJson)
  28. {
  29. try
  30. {
  31. var strSql = new StringBuilder();
  32. strSql.Append("SELECT ");
  33. strSql.Append(@"
  34. t.ID,
  35. t.Name,
  36. t.Address,
  37. t.Campus,
  38. t.Dept,
  39. t.BuildType,
  40. t.Major,
  41. t.Class,
  42. t.Sex,
  43. t.Functionary,
  44. t.Phone,
  45. t.Price,
  46. t.Leader,
  47. t.StudentID,
  48. t.PlanStudentID,
  49. t.ParentID,
  50. t.Remark,
  51. t.Starred,
  52. t.HasToilet,
  53. stb.StuName
  54. ");
  55. strSql.Append(" FROM Acc_DormitoryBuild t LEFT JOIN dbo.StuInfoBasic stb ON t.StudentID=stb.StuId");
  56. strSql.Append(" WHERE 1=1 ");
  57. var queryParam = queryJson.ToJObject();
  58. // 虚拟参数
  59. var dp = new DynamicParameters(new { });
  60. if (!queryParam["ParentID"].IsEmpty())
  61. {
  62. dp.Add("ParentID", queryParam["ParentID"].ToString(), DbType.String);
  63. strSql.Append(" AND t.ParentID =@ParentID ");
  64. }
  65. if (!queryParam["Name"].IsEmpty())
  66. {
  67. dp.Add("Name", "%" + queryParam["Name"].ToString() + "%", DbType.String);
  68. strSql.Append(" AND t.Name Like @Name ");
  69. }
  70. if (!queryParam["Campus"].IsEmpty())
  71. {
  72. dp.Add("Campus", "%" + queryParam["Campus"].ToString() + "%", DbType.String);
  73. strSql.Append(" AND t.Campus Like @Campus ");
  74. }
  75. if (!queryParam["Dept"].IsEmpty())
  76. {
  77. dp.Add("Dept", "%" + queryParam["Dept"].ToString() + "%", DbType.String);
  78. strSql.Append(" AND t.Dept Like @Dept ");
  79. }
  80. if (!queryParam["Class"].IsEmpty())
  81. {
  82. dp.Add("Class", "%" + queryParam["Class"].ToString() + "%", DbType.String);
  83. strSql.Append(" AND t.Class Like @Class ");
  84. }
  85. if (!queryParam["Major"].IsEmpty())
  86. {
  87. dp.Add("Major", "%" + queryParam["Major"].ToString() + "%", DbType.String);
  88. strSql.Append(" AND t.Major Like @Major ");
  89. }
  90. if (!queryParam["Sex"].IsEmpty())
  91. {
  92. dp.Add("Sex", queryParam["Sex"].ToString(), DbType.String);
  93. strSql.Append(" AND t.Sex = @Sex ");
  94. }
  95. if (!queryParam["Functionary"].IsEmpty())
  96. {
  97. dp.Add("Functionary", "%" + queryParam["Functionary"].ToString() + "%", DbType.String);
  98. strSql.Append(" AND t.Functionary Like @Functionary ");
  99. }
  100. if (!queryParam["Leader"].IsEmpty())
  101. {
  102. dp.Add("Leader", "%" + queryParam["Leader"].ToString() + "%", DbType.String);
  103. strSql.Append(" AND t.Leader Like @Leader ");
  104. }
  105. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(strSql.ToString(), dp, pagination).OrderBy(a => a.Name).ThenBy(a => a.Name).ToList();
  106. }
  107. catch (Exception ex)
  108. {
  109. if (ex is ExceptionEx)
  110. {
  111. throw;
  112. }
  113. else
  114. {
  115. throw ExceptionEx.ThrowServiceException(ex);
  116. }
  117. }
  118. }
  119. public IEnumerable<Acc_DormitoryBuildEntity> GetAllList()
  120. {
  121. try
  122. {
  123. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  124. }
  125. catch (Exception ex)
  126. {
  127. if (ex is ExceptionEx)
  128. {
  129. throw;
  130. }
  131. else
  132. {
  133. throw ExceptionEx.ThrowServiceException(ex);
  134. }
  135. }
  136. }
  137. internal string GetBuildType(string parentID)
  138. {
  139. try
  140. {
  141. var entity = this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(a => a.ParentID == parentID);
  142. if (null != entity)
  143. {
  144. return entity.BuildType;
  145. }
  146. else
  147. {
  148. return "";
  149. }
  150. }
  151. catch (Exception ex)
  152. {
  153. if (ex is ExceptionEx)
  154. {
  155. throw;
  156. }
  157. else
  158. {
  159. throw ExceptionEx.ThrowBusinessException(ex);
  160. }
  161. }
  162. }
  163. internal object GetRoomList(string parentID)
  164. {
  165. try
  166. {
  167. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  168. var floor = data.FirstOrDefault(a => a.ID == parentID);
  169. var unit = data.FirstOrDefault(a => a.ID == floor.ParentID);
  170. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  171. var rooms = data.Where(a => a.ParentID == parentID)
  172. .OrderBy(a => a.Name);
  173. List<floorsInfo> list = new List<floorsInfo>();
  174. foreach (var room in rooms)
  175. {
  176. var hasStudentsNum = 0;
  177. var bedsNum = 0;
  178. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  179. bedsNum = beds.Count;
  180. foreach (var bed in beds)
  181. {
  182. if (!string.IsNullOrEmpty(bed.StudentID))
  183. {
  184. hasStudentsNum++;
  185. }
  186. }
  187. floorsInfo floorinfo = new floorsInfo();
  188. floorinfo.dormitory = room;
  189. floorinfo.BedNum = bedsNum.ToString();
  190. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  191. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  192. list.Add(floorinfo);
  193. }
  194. return new
  195. {
  196. dormitoryName = dormitory.Name,
  197. dormitoryID = dormitory.ID,
  198. unitName = unit.Name,
  199. unitID = unit.ID,
  200. floorName = floor.Name,
  201. floorID = floor.ID,
  202. rows = list
  203. };
  204. }
  205. catch (Exception ex)
  206. {
  207. if (ex is ExceptionEx)
  208. {
  209. throw;
  210. }
  211. else
  212. {
  213. throw ExceptionEx.ThrowBusinessException(ex);
  214. }
  215. }
  216. }
  217. internal object GetFloorList(string parentID)
  218. {
  219. try
  220. {
  221. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  222. var unit = data.FirstOrDefault(a => a.ID == parentID);
  223. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  224. var floors = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList();
  225. List<floorsInfo> list = new List<floorsInfo>();
  226. foreach (var floor in floors)
  227. {
  228. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  229. var bedsNum = 0;
  230. var hasStudentsNum = 0;
  231. foreach (var room in rooms)
  232. {
  233. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  234. foreach (var bed in beds)
  235. {
  236. bedsNum++;
  237. if (!string.IsNullOrEmpty(bed.StudentID))
  238. {
  239. hasStudentsNum++;
  240. }
  241. }
  242. }
  243. floorsInfo floorinfo = new floorsInfo();
  244. floorinfo.dormitory = floor;
  245. floorinfo.RoomNum = rooms.Count.ToString();
  246. floorinfo.BedNum = bedsNum.ToString();
  247. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  248. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  249. list.Add(floorinfo);
  250. }
  251. return new { dormitoryName = dormitory.Name, dormitoryID = dormitory.ID, unitName = unit.Name, unitID = unit.ID, rows = list };
  252. }
  253. catch (Exception ex)
  254. {
  255. if (ex is ExceptionEx)
  256. {
  257. throw;
  258. }
  259. else
  260. {
  261. throw ExceptionEx.ThrowBusinessException(ex);
  262. }
  263. }
  264. }
  265. internal object GetUnitList(string ParentID)
  266. {
  267. try
  268. {
  269. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  270. var dormitory = data.FirstOrDefault(a => a.ID == ParentID);
  271. var Units = data.Where(a => a.ParentID == ParentID).ToList().OrderBy(a => a.Name).ToList();
  272. List<floorsInfo> list = new List<floorsInfo>();
  273. foreach (var unit in Units)
  274. {
  275. var floors = data.Where(a => a.ParentID == unit.ID).ToList();
  276. var roomsNum = 0;
  277. var bedsNum = 0;
  278. var hasStudentsNum = 0;
  279. foreach (var floor in floors)
  280. {
  281. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  282. roomsNum = roomsNum + rooms.Count;
  283. foreach (var room in rooms)
  284. {
  285. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  286. foreach (var bed in beds)
  287. {
  288. bedsNum++;
  289. if (!string.IsNullOrEmpty(bed.StudentID))
  290. {
  291. hasStudentsNum++;
  292. }
  293. }
  294. }
  295. }
  296. floorsInfo floorinfo = new floorsInfo();
  297. floorinfo.dormitory = unit;
  298. floorinfo.floorNum = floors.Count.ToString();
  299. floorinfo.BedNum = bedsNum.ToString();
  300. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  301. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  302. floorinfo.RoomNum = roomsNum.ToString();
  303. list.Add(floorinfo);
  304. }
  305. return new { rows = list, DormitoryName = dormitory.Name, DormitoryID = dormitory.ID };
  306. }
  307. catch (Exception ex)
  308. {
  309. if (ex is ExceptionEx)
  310. {
  311. throw;
  312. }
  313. else
  314. {
  315. throw ExceptionEx.ThrowBusinessException(ex);
  316. }
  317. }
  318. }
  319. public object GetDormitoryList()
  320. {
  321. try
  322. {
  323. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  324. var dormitorys = data.Where(a => a.BuildType == "1").ToList().OrderBy(a => a.Name).ToList();
  325. List<floorsInfo> list = new List<floorsInfo>();
  326. foreach (var dormitory in dormitorys)
  327. {
  328. var units = data.Where(a => a.ParentID == dormitory.ID).ToList();
  329. var roomsNum = 0;
  330. var bedsNum = 0;
  331. var hasStudentsNum = 0;
  332. foreach (var unit in units)
  333. {
  334. var floors = data.Where(a => a.ParentID == unit.ID).ToList();
  335. foreach (var floor in floors)
  336. {
  337. var rooms = data.Where(a => a.ParentID == floor.ID).ToList();
  338. roomsNum = roomsNum + rooms.Count;
  339. foreach (var room in rooms)
  340. {
  341. var beds = data.Where(a => a.ParentID == room.ID).ToList();
  342. foreach (var bed in beds)
  343. {
  344. bedsNum++;
  345. if (!string.IsNullOrEmpty(bed.StudentID))
  346. {
  347. hasStudentsNum++;
  348. }
  349. }
  350. }
  351. }
  352. }
  353. floorsInfo floorinfo = new floorsInfo();
  354. floorinfo.dormitory = dormitory;
  355. floorinfo.UnitNum = units.Count.ToString();
  356. if (units.Count > 0)
  357. {
  358. floorinfo.floorNum = data.Count(a => a.ParentID == units.FirstOrDefault().ID).ToString();
  359. }
  360. else
  361. {
  362. floorinfo.floorNum = "0";
  363. }
  364. floorinfo.BedNum = bedsNum.ToString();
  365. floorinfo.HasStudentNum = hasStudentsNum.ToString();
  366. floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString();
  367. floorinfo.RoomNum = roomsNum.ToString();
  368. list.Add(floorinfo);
  369. }
  370. return list;
  371. }
  372. catch (Exception ex)
  373. {
  374. if (ex is ExceptionEx)
  375. {
  376. throw;
  377. }
  378. else
  379. {
  380. throw ExceptionEx.ThrowServiceException(ex);
  381. }
  382. }
  383. }
  384. internal object GetBedList(string parentID)
  385. {
  386. try
  387. {
  388. var data = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  389. var room = data.FirstOrDefault(a => a.ID == parentID);
  390. var floor = data.FirstOrDefault(a => a.ID == room.ParentID);
  391. var unit = data.FirstOrDefault(a => a.ID == floor.ParentID);
  392. var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID);
  393. var beds = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList();
  394. List<floorsInfo> list = new List<floorsInfo>();
  395. foreach (var bed in beds)
  396. {
  397. floorsInfo floorInfo = new floorsInfo();
  398. floorInfo.dormitory = bed;
  399. if (!string.IsNullOrEmpty(bed.StudentID))
  400. {
  401. floorInfo.stuInfo = this.BaseRepository("CollegeMIS").FindEntity<StuInfoBasicEntity>(a => a.StuId == bed.StudentID);
  402. }
  403. list.Add(floorInfo);
  404. }
  405. return new
  406. {
  407. rows = list,
  408. roomID = room.ID,
  409. roomName = room.Name,
  410. floorID = floor.ID,
  411. floorName = floor.Name,
  412. unitID = unit.ID,
  413. unitName = unit.Name,
  414. dormitoryID = dormitory.ID,
  415. dormitoryName = dormitory.Name
  416. };
  417. }
  418. catch (Exception ex)
  419. {
  420. if (ex is ExceptionEx)
  421. {
  422. throw;
  423. }
  424. else
  425. {
  426. throw ExceptionEx.ThrowServiceException(ex);
  427. }
  428. }
  429. }
  430. private class floorsInfo
  431. {
  432. public Acc_DormitoryBuildEntity dormitory { get; set; }
  433. public StuInfoBasicEntity stuInfo { get; set; }
  434. /// <summary>
  435. /// 单元数量
  436. /// </summary>
  437. public string UnitNum { get; set; }
  438. /// <summary>
  439. /// 楼层数量
  440. /// </summary>
  441. public string floorNum { get; set; }
  442. /// <summary>
  443. /// 房间数量
  444. /// </summary>
  445. public string RoomNum { get; set; }
  446. /// <summary>
  447. /// 床位数量
  448. /// </summary>
  449. public string BedNum { get; set; }
  450. /// <summary>
  451. /// 入住人数
  452. /// </summary>
  453. public string HasStudentNum { get; set; }
  454. /// <summary>
  455. /// 空床数量
  456. /// </summary>
  457. public string NoStudentNum { get; set; }
  458. }
  459. /// <summary>
  460. /// 获取Acc_DormitoryBuild表实体数据
  461. /// <param name="keyValue">主键</param>
  462. /// <summary>
  463. /// <returns></returns>
  464. public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntity(string keyValue)
  465. {
  466. try
  467. {
  468. return this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(keyValue);
  469. }
  470. catch (Exception ex)
  471. {
  472. if (ex is ExceptionEx)
  473. {
  474. throw;
  475. }
  476. else
  477. {
  478. throw ExceptionEx.ThrowServiceException(ex);
  479. }
  480. }
  481. }
  482. /// <summary>
  483. /// 获取Acc_DormitoryBuild表实体数据
  484. /// <param name="keyValue">主键</param>
  485. /// <summary>
  486. /// <returns></returns>
  487. public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntityByName(string name)
  488. {
  489. try
  490. {
  491. return this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(x => x.Name == name);
  492. }
  493. catch (Exception ex)
  494. {
  495. if (ex is ExceptionEx)
  496. {
  497. throw;
  498. }
  499. else
  500. {
  501. throw ExceptionEx.ThrowServiceException(ex);
  502. }
  503. }
  504. }
  505. /// <summary>
  506. /// 获取树形数据
  507. /// </summary>
  508. /// <returns></returns>
  509. public List<Acc_DormitoryBuildEntity> GetSqlTreeNew()
  510. {
  511. try
  512. {
  513. var aa = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().OrderBy(a => a.Name).ToList();
  514. var bb = this.BaseRepository("CollegeMIS").FindList<StuEnrollEntity>();
  515. foreach (var item in aa)
  516. {
  517. if (!string.IsNullOrEmpty(item.PlanStudentID))
  518. {
  519. var bbq = bb.FirstOrDefault(a => a.StuId == item.PlanStudentID);
  520. if (bbq != null)
  521. {
  522. item.Name = $"{item.Name}({bbq.StuName})";
  523. }
  524. }
  525. }
  526. return aa;
  527. }
  528. catch (Exception ex)
  529. {
  530. if (ex is ExceptionEx)
  531. {
  532. throw;
  533. }
  534. else
  535. {
  536. throw ExceptionEx.ThrowServiceException(ex);
  537. }
  538. }
  539. }
  540. /// <summary>
  541. /// 获取树形数据
  542. /// </summary>
  543. /// <returns></returns>
  544. public List<Acc_DormitoryBuildEntity> GetSqlTree()
  545. {
  546. try
  547. {
  548. return this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(a => a.BuildType != "5").OrderBy(a => a.sort).ThenBy(a => a.Name).ToList();
  549. }
  550. catch (Exception ex)
  551. {
  552. if (ex is ExceptionEx)
  553. {
  554. throw;
  555. }
  556. else
  557. {
  558. throw ExceptionEx.ThrowServiceException(ex);
  559. }
  560. }
  561. }
  562. /// <summary>
  563. /// 根据父id获取数据
  564. /// </summary>
  565. /// <param name="parentID">父id</param>
  566. /// <returns></returns>
  567. public DataTable GetTreeByParentId(string parentID)
  568. {
  569. try
  570. {
  571. return this.BaseRepository("CollegeMIS").FindTable($"SELECT * FROM dbo.Acc_DormitoryBuild WHERE ParentID = '{parentID}'");
  572. }
  573. catch (Exception ex)
  574. {
  575. if (ex is ExceptionEx)
  576. {
  577. throw;
  578. }
  579. else
  580. {
  581. throw ExceptionEx.ThrowServiceException(ex);
  582. }
  583. }
  584. }
  585. /// <summary>
  586. /// 根据父id获取数据
  587. /// </summary>
  588. /// <param name="parentID">父id</param>
  589. /// <returns></returns>
  590. public string GetDormitoryInfoByPlanStuNo(string stuNo)
  591. {
  592. try
  593. {
  594. var result = "";
  595. if (!string.IsNullOrEmpty(stuNo))
  596. {
  597. var dormitorys = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  598. var bed = dormitorys.FirstOrDefault(a => a.PlanStudentID == stuNo);
  599. if (bed != null)
  600. {
  601. var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID);
  602. var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID);
  603. var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID);
  604. var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID);
  605. result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}";
  606. }
  607. }
  608. return result;
  609. }
  610. catch (Exception ex)
  611. {
  612. if (ex is ExceptionEx)
  613. {
  614. throw;
  615. }
  616. else
  617. {
  618. throw ExceptionEx.ThrowServiceException(ex);
  619. }
  620. }
  621. }
  622. public string GetDormitoryInfoByStuNo(string stuNo)
  623. {
  624. try
  625. {
  626. var result = "";
  627. if (!string.IsNullOrEmpty(stuNo))
  628. {
  629. var dormitorys = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>();
  630. var userInfo = this.BaseRepository("CollegeMIS")
  631. .FindEntity<StuInfoBasicEntity>(a => a.StuNo == stuNo);
  632. var bed = dormitorys.FirstOrDefault(a => a.StudentID == userInfo.StuId);
  633. if (bed != null)
  634. {
  635. var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID);
  636. var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID);
  637. var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID);
  638. var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID);
  639. result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}";
  640. }
  641. }
  642. return result;
  643. }
  644. catch (Exception ex)
  645. {
  646. if (ex is ExceptionEx)
  647. {
  648. throw;
  649. }
  650. else
  651. {
  652. throw ExceptionEx.ThrowServiceException(ex);
  653. }
  654. }
  655. }
  656. public bool MatchDormitoryInfo(string stuNo, string dormitory, string unit, string floor, string room, string bed, List<Acc_DormitoryBuildEntity> data)
  657. {
  658. try
  659. {
  660. var stuInfo = this.BaseRepository("CollegeMIS").FindEntity<StuInfoBasicEntity>(a => a.StuNo == stuNo);
  661. var dormitoryInfo = data.FirstOrDefault(a => a.BuildType == "1" && a.Name == dormitory);
  662. if (dormitoryInfo != null)
  663. {
  664. var unitInfo = data.FirstOrDefault(a =>
  665. a.BuildType == "2" && a.ParentID == dormitoryInfo.ID && a.Name == unit);
  666. if (unitInfo != null)
  667. {
  668. var floorInfo = data.FirstOrDefault(a =>
  669. a.BuildType == "3" && a.ParentID == unitInfo.ID && a.Name == floor);
  670. if (floorInfo != null)
  671. {
  672. var roomInfo = data.FirstOrDefault(a =>
  673. a.BuildType == "4" && a.ParentID == floorInfo.ID && a.Name == room);
  674. if (roomInfo != null)
  675. {
  676. var bedInfo = data.FirstOrDefault(a =>
  677. a.BuildType == "5" && a.ParentID == roomInfo.ID && a.Name == bed);
  678. if (bedInfo != null && stuInfo != null)
  679. {
  680. var oldbedInfo = data.Where(a => a.StudentID == stuInfo.StuId);
  681. foreach (var item in oldbedInfo)
  682. {
  683. item.StudentID = "";
  684. this.BaseRepository("CollegeMIS").Update(item);
  685. }
  686. bedInfo.StudentID = stuInfo.StuId;
  687. bedInfo.StuName = stuInfo.StuName;
  688. this.BaseRepository("CollegeMIS").Update(bedInfo);
  689. return true;
  690. }
  691. }
  692. }
  693. }
  694. }
  695. return false;
  696. }
  697. catch (Exception ex)
  698. {
  699. if (ex is ExceptionEx)
  700. {
  701. throw;
  702. }
  703. else
  704. {
  705. throw ExceptionEx.ThrowServiceException(ex);
  706. }
  707. }
  708. }
  709. #endregion 获取数据
  710. #region 提交数据
  711. /// <summary>
  712. /// 删除实体数据
  713. /// <param name="keyValue">主键</param>
  714. /// <summary>
  715. /// <returns></returns>
  716. public void DeleteEntity(string keyValue)
  717. {
  718. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  719. try
  720. {
  721. //单个删除
  722. //this.BaseRepository("CollegeMIS").Delete<Acc_DormitoryBuildEntity>(t => t.ID == keyValue);
  723. //多个删除
  724. var keyvalueArr = keyValue.Split(',');
  725. foreach (var item in keyvalueArr)
  726. {
  727. db.Delete<Acc_DormitoryBuildEntity>(t => t.ID == item);
  728. DeleteAll(item);
  729. }
  730. db.Commit();
  731. }
  732. catch (Exception ex)
  733. {
  734. db.Rollback();
  735. if (ex is ExceptionEx)
  736. {
  737. throw;
  738. }
  739. else
  740. {
  741. throw ExceptionEx.ThrowServiceException(ex);
  742. }
  743. }
  744. }
  745. public void DeleteAll(string parentid)
  746. {
  747. var list = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>(a => a.ParentID == parentid).ToList();
  748. if (list.Count > 0)
  749. {
  750. foreach (var item in list)
  751. {
  752. if (item != null)
  753. {
  754. this.BaseRepository("CollegeMIS").Delete(item);
  755. DeleteAll(item.ID);
  756. }
  757. }
  758. }
  759. }
  760. /// <summary>
  761. /// 批量添加单元、楼层、房间、床位
  762. /// </summary>
  763. /// <param name="keyValue"></param>
  764. /// <param name="elementNum"></param>
  765. /// <param name="floorNum"></param>
  766. /// <param name="roomNum"></param>
  767. /// <param name="bedNum"></param>
  768. public void DormitoryAdd(string keyValue, int elementNum, int floorNum, int roomNum, int bedNum)
  769. {
  770. try
  771. {
  772. //获取本楼允许入住的性别
  773. var dormitory = this.BaseRepository("CollegeMIS").FindEntity<Acc_DormitoryBuildEntity>(a => a.ID == keyValue);
  774. var currentUser = LoginUserInfo.Get();
  775. if (elementNum > 0)
  776. {
  777. List<Acc_DormitoryBuildEntity> list = new List<Acc_DormitoryBuildEntity>();
  778. //添加单元
  779. for (int i = 1; i <= elementNum; i++)
  780. {
  781. var elementEntity = new Acc_DormitoryBuildEntity
  782. {
  783. ParentID = keyValue,
  784. Name = i.ToString() + "单元",
  785. BuildType = "2",//单元类型
  786. Sex = dormitory.Sex,
  787. Address = dormitory.Address,
  788. Campus = dormitory.Campus,
  789. CreateBy = currentUser.realName,
  790. CreateTime = DateTime.Now,
  791. Dept = dormitory.Dept,
  792. Class = dormitory.Class,
  793. Functionary = dormitory.Functionary,
  794. Major = dormitory.Major,
  795. Phone = dormitory.Phone,
  796. Price = dormitory.Price,
  797. UpdateBy = currentUser.realName,
  798. UpdateTime = DateTime.Now
  799. };
  800. elementEntity.Create();
  801. list.Add(elementEntity);
  802. //添加楼层
  803. if (floorNum > 0)
  804. {
  805. for (int j = 1; j <= floorNum; j++)
  806. {
  807. var floorEntity = new Acc_DormitoryBuildEntity
  808. {
  809. ParentID = elementEntity.ID,
  810. Name = j.ToString() + "层",
  811. BuildType = "3",//楼层类型,
  812. Sex = dormitory.Sex,
  813. Address = dormitory.Address,
  814. Campus = dormitory.Campus,
  815. CreateBy = currentUser.realName,
  816. CreateTime = DateTime.Now,
  817. Dept = dormitory.Dept,
  818. Class = dormitory.Class,
  819. Functionary = dormitory.Functionary,
  820. Major = dormitory.Major,
  821. Phone = dormitory.Phone,
  822. Price = dormitory.Price,
  823. UpdateBy = currentUser.realName,
  824. UpdateTime = DateTime.Now
  825. };
  826. floorEntity.Create();
  827. list.Add(floorEntity);
  828. //添加房间
  829. if (roomNum > 0)
  830. {
  831. for (int n = 1; n <= roomNum; n++)
  832. {
  833. var roomEntity = new Acc_DormitoryBuildEntity
  834. {
  835. ParentID = floorEntity.ID,
  836. Name = j.ToString() + (n < 10 ? "0" + n.ToString() : n.ToString()) + "室",
  837. BuildType = "4",//房间类型
  838. Sex = dormitory.Sex,
  839. Address = dormitory.Address,
  840. Campus = dormitory.Campus,
  841. CreateBy = currentUser.realName,
  842. CreateTime = DateTime.Now,
  843. Dept = dormitory.Dept,
  844. Class = dormitory.Class,
  845. Functionary = dormitory.Functionary,
  846. Major = dormitory.Major,
  847. Phone = dormitory.Phone,
  848. Price = dormitory.Price,
  849. UpdateBy = currentUser.realName,
  850. UpdateTime = DateTime.Now,
  851. Starred = "3",
  852. Leader = "暂无"
  853. };
  854. roomEntity.Create();
  855. list.Add(roomEntity);
  856. //床位添加
  857. if (bedNum > 0)
  858. {
  859. for (int m = 1; m <= bedNum; m++)
  860. {
  861. var bedEntity = new Acc_DormitoryBuildEntity
  862. {
  863. ParentID = roomEntity.ID,
  864. Name = m.ToString() + "床",
  865. BuildType = "5",
  866. Sex = dormitory.Sex,
  867. Address = dormitory.Address,
  868. Campus = dormitory.Campus,
  869. CreateBy = currentUser.realName,
  870. CreateTime = DateTime.Now,
  871. Dept = dormitory.Dept,
  872. Class = dormitory.Class,
  873. Functionary = dormitory.Functionary,
  874. Major = dormitory.Major,
  875. Phone = dormitory.Phone,
  876. Price = dormitory.Price,
  877. UpdateBy = currentUser.realName,
  878. UpdateTime = DateTime.Now,
  879. };
  880. bedEntity.Create();
  881. list.Add(bedEntity);
  882. }
  883. }
  884. }
  885. }
  886. }
  887. }
  888. }
  889. if (list.Count > 0)
  890. {
  891. this.BaseRepository("CollegeMIS").Insert(list);
  892. }
  893. }
  894. }
  895. catch (Exception ex)
  896. {
  897. if (ex is ExceptionEx)
  898. {
  899. throw;
  900. }
  901. else
  902. {
  903. throw ExceptionEx.ThrowServiceException(ex);
  904. }
  905. }
  906. }
  907. /// <summary>
  908. /// 自动分配宿舍
  909. /// </summary>
  910. /// <param name="noNation">少数民族不能分一块</param>
  911. /// <param name="noPlace">同一个地方的不能分一块</param>
  912. /// <param name="Sex"></param>
  913. public void Automatic_allocation_accommodation(bool noNation, bool noPlace, string Sex)
  914. {
  915. try
  916. {
  917. var boolSex = Convert.ToBoolean(Sex == "1");
  918. //获取所有的宿舍单位
  919. var allBuilds = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().Where(a => a.Sex == Sex).ToList();
  920. //获取所有已经分配了床位的学生id
  921. var hasBedStudentIDs = allBuilds
  922. .Where(a => a.BuildType == "5")
  923. .Where(a => a.StudentID != null && a.StudentID != "").Select(a => a.StudentID).ToList();
  924. //获取还没有床位的学生
  925. var students = this.BaseRepository("CollegeMIS").FindList<StuInfoBasicEntity>()
  926. .Where(a => a.GenderNo == boolSex)
  927. .Where(a => !hasBedStudentIDs.Contains(a.StuId))
  928. .ToList();
  929. //根据性别获取所有空闲的床位
  930. var allBeds = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>()
  931. .Where(a => a.Sex == Sex)
  932. .Where(a => a.StudentID == null || a.StudentID == "")
  933. .ToList();
  934. if (allBeds.Count() > students.Count())
  935. {
  936. #region 普通分配
  937. var beds = new List<Acc_DormitoryBuildEntity>();
  938. var studentNo = 0;
  939. var builds = allBuilds.Where(a => a.BuildType == "1").OrderBy(a => a.Name).ToList();
  940. foreach (var build in builds)
  941. {
  942. if (studentNo < students.Count())
  943. {
  944. var elements = allBuilds.Where(a => a.ParentID == build.ID).OrderBy(a => a.Name).ToList();
  945. foreach (var element in elements)
  946. {
  947. if (studentNo < students.Count())
  948. {
  949. var layers = allBuilds.Where(a => a.ParentID == element.ID).OrderBy(a => a.Name).ToList();
  950. foreach (var layer in layers)
  951. {
  952. if (studentNo < students.Count())
  953. {
  954. var rooms = allBuilds.Where(a => a.ParentID == layer.ID).OrderBy(a => a.Name).ToList();
  955. foreach (var room in rooms)
  956. {
  957. if (studentNo < students.Count())
  958. {
  959. var bedss = allBuilds.Where(a => a.ParentID == room.ID)
  960. .Where(a => a.StudentID == null || a.StudentID == "")
  961. .OrderBy(a => a.Name).ToList();
  962. foreach (var bed in bedss)
  963. {
  964. if (studentNo < students.Count())
  965. {
  966. bed.StudentID = students[studentNo].StuId;
  967. studentNo++;
  968. beds.Add(bed);
  969. }
  970. }
  971. }
  972. }
  973. }
  974. }
  975. }
  976. }
  977. }
  978. }
  979. //打乱
  980. Random ram = new Random();
  981. int currentIndex;
  982. string tempValue;
  983. for (int i = 0; i < beds.Count(); i++)
  984. {
  985. currentIndex = ram.Next(0, beds.Count() - i);
  986. tempValue = beds[currentIndex].StudentID;
  987. beds[currentIndex].StudentID = beds[beds.Count() - 1 - i].StudentID;
  988. beds[beds.Count() - 1 - i].StudentID = tempValue;
  989. }
  990. #endregion 普通分配
  991. #region 同一少数民族的不能在一起
  992. if (noNation)
  993. {
  994. //var nationals = students.GroupBy(a => a.NationalityNo);
  995. //List<string> studentids = new List<string>();
  996. //foreach (var item in nationals)
  997. //{
  998. // var studentid=studentid.
  999. // studentids.Add()
  1000. //}
  1001. var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList();
  1002. foreach (var room in roomsIDs)
  1003. {
  1004. //获取本宿舍相同民族超过2个学生的民族
  1005. var sameNationals = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1006. .Where(a => a.b.ParentID == room)
  1007. .Where(a => a.s.NationalityNo != "01")
  1008. .GroupBy(a => a.s.NationalityNo)
  1009. .Where(a => a.Count() > 1).ToList();
  1010. if (sameNationals.Count > 0)
  1011. {
  1012. //获取本宿舍的所有学生所属民族
  1013. var theRoomNationals = beds
  1014. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1015. .Where(a => a.b.ParentID == room)
  1016. .Where(a => a.s.NationalityNo != "01" && a.s.NationalityNo != "07")
  1017. .Select(a => a.s.NationalityNo).ToList();
  1018. //获取别的宿舍不含此民族的学生的宿舍
  1019. var bedNum = beds.Count(a => a.ParentID == room);
  1020. var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b })
  1021. .Where(a => !theRoomNationals.Contains(a.b.NationalityNo))
  1022. .Select(a => new { a.a.ID, a.a.ParentID })
  1023. .GroupBy(a => a.ParentID)
  1024. .Where(a => a.Count() == bedNum)
  1025. .ToList();
  1026. var changeTime = 0;//调换次数
  1027. if (otherRooms.Count > 0 && otherRooms.Count > changeTime)
  1028. {
  1029. Acc_DormitoryBuildEntity theBed;
  1030. Acc_DormitoryBuildEntity otherBed;
  1031. string tempStudentID;
  1032. //遍历学生超过俩个的民族
  1033. foreach (var national in sameNationals)
  1034. {
  1035. //获取此宿舍此民族的学生的床位
  1036. var theSameNationalBeds = beds
  1037. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1038. .Where(a => a.b.ParentID == room)
  1039. .Where(a => a.s.NationalityNo == national.Key)
  1040. .Select(a => a.b.ID).ToList();
  1041. //如果是俩个只要换一个就可以 依此类推
  1042. for (int j = 0; j < theSameNationalBeds.Count() - 1; j++)
  1043. {
  1044. if (otherRooms.Count > j)
  1045. {
  1046. //获取将要调换的床位
  1047. theBed = beds.FirstOrDefault(a => a.ID == theSameNationalBeds[j]);
  1048. otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key);
  1049. tempStudentID = otherBed.StudentID;
  1050. otherBed.StudentID = theBed.StudentID;
  1051. theBed.StudentID = tempStudentID;
  1052. changeTime++;
  1053. }
  1054. else
  1055. {
  1056. break;
  1057. }
  1058. }
  1059. }
  1060. }
  1061. }
  1062. }
  1063. }
  1064. #endregion 同一少数民族的不能在一起
  1065. #region 同一地方的不能在一起
  1066. if (noPlace)
  1067. {
  1068. var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList();
  1069. foreach (var room in roomsIDs)
  1070. {
  1071. //获取本宿舍相同地方超过2个学生的地方
  1072. var sameCitys = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1073. .Where(a => a.b.ParentID == room)
  1074. .GroupBy(a => a.s.F_CityId)
  1075. .Where(a => a.Count() > 1).ToList();
  1076. if (sameCitys.Count > 0)
  1077. {
  1078. //获取本宿舍的所有学生所属地方
  1079. var theRoomCitys = beds
  1080. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1081. .Where(a => a.b.ParentID == room)
  1082. .Select(a => a.s.F_CityId).ToList();
  1083. //获取别的宿舍不含此地方的学生的宿舍
  1084. var bedNum = beds.Count(a => a.ParentID == room);
  1085. var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b })
  1086. .Where(a => !theRoomCitys.Contains(a.b.F_CityId))
  1087. .Select(a => new { a.a.ID, a.a.ParentID })
  1088. .GroupBy(a => a.ParentID)
  1089. .Where(a => a.Count() == bedNum)
  1090. .ToList();
  1091. var changeTime = 0;//调换次数
  1092. if (otherRooms.Count > 0 && otherRooms.Count > changeTime)
  1093. {
  1094. Acc_DormitoryBuildEntity theBed;
  1095. Acc_DormitoryBuildEntity otherBed;
  1096. string tempStudentID;
  1097. //遍历学生超过俩个的地方
  1098. foreach (var city in sameCitys)
  1099. {
  1100. //获取此宿舍此地方的学生的床位
  1101. var theSameCityBeds = beds
  1102. .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s })
  1103. .Where(a => a.b.ParentID == room)
  1104. .Where(a => a.s.F_CityId == city.Key)
  1105. .Select(a => a.b.ID).ToList();
  1106. //如果是俩个只要换一个就可以 依此类推
  1107. for (int j = 0; j < theSameCityBeds.Count() - 1; j++)
  1108. {
  1109. if (otherRooms.Count > j)
  1110. {
  1111. //获取将要调换的床位
  1112. theBed = beds.FirstOrDefault(a => a.ID == theSameCityBeds[j]);
  1113. otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key);
  1114. tempStudentID = otherBed.StudentID;
  1115. otherBed.StudentID = theBed.StudentID;
  1116. theBed.StudentID = tempStudentID;
  1117. changeTime++;
  1118. }
  1119. else
  1120. {
  1121. break;
  1122. }
  1123. }
  1124. }
  1125. }
  1126. }
  1127. }
  1128. }
  1129. #endregion 同一地方的不能在一起
  1130. this.BaseRepository("CollegeMIS").Update(beds);
  1131. }
  1132. }
  1133. catch (Exception ex)
  1134. {
  1135. if (ex is ExceptionEx)
  1136. {
  1137. throw;
  1138. }
  1139. else
  1140. {
  1141. throw ExceptionEx.ThrowServiceException(ex);
  1142. }
  1143. throw;
  1144. }
  1145. }
  1146. /// <summary>
  1147. /// 保存实体数据(新增、修改)
  1148. /// <param name="keyValue">主键</param>
  1149. /// <summary>
  1150. /// <returns></returns>
  1151. public void SaveEntity(string keyValue, Acc_DormitoryBuildEntity entity)
  1152. {
  1153. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  1154. try
  1155. {
  1156. var currentUser = LoginUserInfo.Get();
  1157. if (!string.IsNullOrEmpty(keyValue))
  1158. {
  1159. entity.Modify(keyValue);
  1160. entity.UpdateBy = currentUser.realName;
  1161. entity.UpdateTime = DateTime.Now;
  1162. db.Update(entity);
  1163. //更新下级
  1164. var childList = db.FindList<Acc_DormitoryBuildEntity>(x => x.ParentID == entity.ID);
  1165. foreach (var childItem in childList)
  1166. {
  1167. childItem.Campus = entity.Campus;
  1168. childItem.Dept = entity.Dept;
  1169. childItem.Major = entity.Major;
  1170. childItem.Class = entity.Class;
  1171. childItem.Sex = entity.Sex;
  1172. childItem.Functionary = entity.Functionary;
  1173. childItem.Address = entity.Address;
  1174. childItem.Phone = entity.Phone;
  1175. childItem.Price = entity.Price;
  1176. SaveEntity(childItem.ID, childItem);
  1177. }
  1178. db.Commit();
  1179. }
  1180. else
  1181. {
  1182. if (entity.BuildType == "1")
  1183. {
  1184. if (string.IsNullOrEmpty(entity.ParentID))
  1185. {
  1186. var rootNode = this.BaseRepository("CollegeMIS").FindList<Acc_DormitoryBuildEntity>().FirstOrDefault(a => a.ParentID == null);
  1187. if (rootNode == null)
  1188. {
  1189. var rootEntity = new Acc_DormitoryBuildEntity
  1190. {
  1191. Name = "数字化智慧校园"
  1192. };
  1193. rootEntity.Create();
  1194. rootEntity.CreateBy = currentUser.realName;
  1195. rootEntity.CreateTime = DateTime.Now;
  1196. rootEntity.UpdateBy = currentUser.realName;
  1197. rootEntity.UpdateTime = DateTime.Now;
  1198. entity.ParentID = rootEntity.ID;
  1199. this.BaseRepository("CollegeMIS").Insert(rootEntity);
  1200. }
  1201. else
  1202. {
  1203. entity.ParentID = rootNode.ID;
  1204. }
  1205. }
  1206. }
  1207. entity.Create();
  1208. entity.CreateBy = currentUser.realName;
  1209. entity.CreateTime = DateTime.Now;
  1210. entity.UpdateBy = currentUser.realName;
  1211. entity.UpdateTime = DateTime.Now;
  1212. this.BaseRepository("CollegeMIS").Insert(entity);
  1213. }
  1214. }
  1215. catch (Exception ex)
  1216. {
  1217. if (ex is ExceptionEx)
  1218. {
  1219. throw;
  1220. }
  1221. else
  1222. {
  1223. throw ExceptionEx.ThrowServiceException(ex);
  1224. }
  1225. }
  1226. }
  1227. #endregion 提交数据
  1228. }
  1229. }