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.
 
 
 
 
 
 

1286 lines
45 KiB

  1. using Learun.Application.Base.SystemModule;
  2. using Learun.Application.TwoDevelopment.EducationalAdministration;
  3. using Learun.Application.TwoDevelopment.LogisticsManagement;
  4. using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement;
  5. using Learun.Util;
  6. using Newtonsoft.Json;
  7. using NPOI.HSSF.UserModel;
  8. using NPOI.SS.UserModel;
  9. using NPOI.XSSF.UserModel;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.IO;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Web;
  17. using System.Web.Mvc;
  18. namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers
  19. {
  20. /// <summary>
  21. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  22. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  23. /// 创 建:超级管理员
  24. /// 日 期:2019-08-08 17:21
  25. /// 描 述:新生信息管理
  26. /// </summary>
  27. public class StuInfoFreshController : MvcControllerBase
  28. {
  29. private StuInfoFreshIBLL stuInfoFreshIBLL = new StuInfoFreshBLL();
  30. private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
  31. private ClassInfoIBLL classInfoIBLL = new ClassInfoBLL();
  32. private FinaChargesStandardIBLL finaChargesStandardIBLL = new FinaChargesStandardBLL();
  33. private AccommodationIBLL accommodationIBLL = new AccommodationBLL();
  34. private CdMajorIBLL cdMajorIBLL = new CdMajorBLL();
  35. private CdDeptIBLL cdDeptIBLL = new CdDeptBLL();
  36. #region 视图功能
  37. /// <summary>
  38. /// 主页面
  39. /// <summary>
  40. /// <returns></returns>
  41. [HttpGet]
  42. public ActionResult Index()
  43. {
  44. return View();
  45. }
  46. [HttpGet]
  47. public ActionResult IndexDC()
  48. {
  49. return View();
  50. }
  51. [HttpGet]
  52. public ActionResult SchoolUniform()
  53. {
  54. return View();
  55. }
  56. [HttpGet]
  57. public ActionResult StatusView()
  58. {
  59. return View();
  60. }
  61. [HttpGet]
  62. public ActionResult PrintSignFlow(string Id)
  63. {
  64. if (!string.IsNullOrEmpty(Id))
  65. {
  66. var vwinfo = stuInfoFreshIBLL.GetStuInfoFreshEntity(Id);
  67. if (!vwinfo.MajorNo.IsEmpty())
  68. {
  69. vwinfo.MajorName = cdMajorIBLL.GetCdMajorEntityByMajorNo(vwinfo.MajorNo).MajorName;
  70. }
  71. return View(vwinfo);
  72. }
  73. else
  74. {
  75. return View();
  76. }
  77. }
  78. /// <summary>
  79. /// 根据区域统计
  80. /// <summary>
  81. /// <returns></returns>
  82. [HttpGet]
  83. public ActionResult StatisticsArea()
  84. {
  85. return View();
  86. }
  87. /// <summary>
  88. /// 表单页
  89. /// <summary>
  90. /// <returns></returns>
  91. [HttpGet]
  92. public ActionResult Form()
  93. {
  94. var url = Config.GetValue("defaultheadimg");
  95. ViewBag.Url = url;
  96. return View();
  97. }
  98. [HttpGet]
  99. public ActionResult FormDC()
  100. {
  101. var url = Config.GetValue("defaultheadimg");
  102. ViewBag.Url = url;
  103. return View();
  104. }
  105. /// <summary>
  106. /// 表单查看页
  107. /// <summary>
  108. /// <returns></returns>
  109. [HttpGet]
  110. public ActionResult FormView()
  111. {
  112. var url = Config.GetValue("defaultheadimg");
  113. ViewBag.Url = url;
  114. return View();
  115. }
  116. /// <summary>
  117. /// 表单【学子在线】
  118. /// <summary>
  119. /// <returns></returns>
  120. [HttpGet]
  121. public ActionResult FormOfStudent()
  122. {
  123. var url = Config.GetValue("defaultheadimg");
  124. ViewBag.Url = url;
  125. return View();
  126. }
  127. /// <summary>
  128. /// 新生报到管理页面
  129. /// <summary>
  130. /// <returns></returns>
  131. [HttpGet]
  132. public ActionResult RegisterIndex()
  133. {
  134. return View();
  135. }
  136. /// <summary>
  137. /// 新生档案管理页面
  138. /// <summary>
  139. /// <returns></returns>
  140. [HttpGet]
  141. public ActionResult CollectFileIndex()
  142. {
  143. return View();
  144. }
  145. /// <summary>
  146. /// 新生领取用品页面
  147. /// <summary>
  148. /// <returns></returns>
  149. [HttpGet]
  150. public ActionResult GetKeyIndex()
  151. {
  152. return View();
  153. }
  154. /// <summary>
  155. /// 新生缴费管理页面
  156. /// <summary>
  157. /// <returns></returns>
  158. [HttpGet]
  159. public ActionResult PayFeeIndex()
  160. {
  161. return View();
  162. }
  163. /// <summary>
  164. /// 新生缴费管理表单页
  165. /// <summary>
  166. /// <returns></returns>
  167. [HttpGet]
  168. public ActionResult PayFeeForm()
  169. {
  170. return View();
  171. }
  172. /// <summary>
  173. /// 助学贷款表单页
  174. /// <summary>
  175. /// <returns></returns>
  176. [HttpGet]
  177. public ActionResult LoanForm()
  178. {
  179. return View();
  180. }
  181. /// <summary>
  182. /// 现场缴费表单页
  183. /// <summary>
  184. /// <returns></returns>
  185. [HttpGet]
  186. public ActionResult OnsitePayForm()
  187. {
  188. return View();
  189. }
  190. /// <summary>
  191. /// 主页面【学子在线-新生信息完善】
  192. /// <summary>
  193. /// <returns></returns>
  194. [HttpGet]
  195. public ActionResult IndexOfStudent()
  196. {
  197. return View();
  198. }
  199. /// <summary>
  200. /// 分配班级
  201. /// <summary>
  202. /// <returns></returns>
  203. [HttpGet]
  204. public ActionResult AllocationClass()
  205. {
  206. return View();
  207. }
  208. [HttpGet]
  209. public ActionResult AllocationClassDC()
  210. {
  211. return View();
  212. }
  213. /// <summary>
  214. /// 分配宿舍
  215. /// <summary>
  216. /// <returns></returns>
  217. [HttpGet]
  218. public ActionResult AllocationDormitory()
  219. {
  220. return View();
  221. }
  222. /// <summary>
  223. /// 分配床位
  224. /// <summary>
  225. /// <returns></returns>
  226. [HttpGet]
  227. public ActionResult AllocationBed()
  228. {
  229. return View();
  230. }
  231. /// <summary>
  232. /// 导入床位页
  233. /// <summary>
  234. /// <returns></returns>
  235. [HttpGet]
  236. public ActionResult ImportBedForm()
  237. {
  238. return View();
  239. }
  240. /// <summary>
  241. /// 导出学生宿页舍
  242. /// <summary>
  243. /// <returns></returns>
  244. [HttpGet]
  245. public ActionResult ExportBedForm()
  246. {
  247. return View();
  248. }
  249. /// <summary>
  250. /// 新生信息统计
  251. /// <summary>
  252. /// <returns></returns>
  253. [HttpGet]
  254. public ActionResult StatisticIndex()
  255. {
  256. var academic = Common.GetSemesterAndYear();
  257. ViewBag.Grade = academic.AcademicYearShort.Substring(0, 2);
  258. return View();
  259. }
  260. /// <summary>
  261. /// 新生信息班级统计
  262. /// <summary>
  263. /// <returns></returns>
  264. [HttpGet]
  265. public ActionResult StatisticClassIndex()
  266. {
  267. var academic = Common.GetSemesterAndYear();
  268. ViewBag.Grade = academic.AcademicYearShort.Substring(0, 2);
  269. return View();
  270. }
  271. #endregion
  272. #region 获取数据
  273. /// <summary>
  274. /// 获取列表数据
  275. /// <summary>
  276. /// <returns></returns>
  277. [HttpGet]
  278. [AjaxOnly]
  279. public ActionResult GetList(string queryJson)
  280. {
  281. var data = stuInfoFreshIBLL.GetList(queryJson);
  282. return Success(data);
  283. }
  284. /// <summary>
  285. /// 获取列表分页数据
  286. /// <param name="pagination">分页参数</param>
  287. /// <summary>
  288. /// <returns></returns>
  289. [HttpGet]
  290. [AjaxOnly]
  291. public ActionResult GetPageList(string pagination, string queryJson)
  292. {
  293. Pagination paginationobj = pagination.ToObject<Pagination>();
  294. var data = stuInfoFreshIBLL.GetPageList(paginationobj, queryJson);
  295. var jsonData = new
  296. {
  297. rows = data,
  298. total = paginationobj.total,
  299. page = paginationobj.page,
  300. records = paginationobj.records
  301. };
  302. return Success(jsonData);
  303. }
  304. /// <summary>
  305. /// 获取表单数据
  306. /// <summary>
  307. /// <returns></returns>
  308. [HttpGet]
  309. [AjaxOnly]
  310. public ActionResult GetFormData(string keyValue)
  311. {
  312. var StuInfoFreshData = stuInfoFreshIBLL.GetStuInfoFreshEntity(keyValue);
  313. StuInfoFreshData.Files = StuInfoFreshData.ID;
  314. //获取头像地址
  315. var url = Config.GetValue("defaultheadimg");
  316. if (StuInfoFreshData.IsPhoto == true && !string.IsNullOrEmpty(StuInfoFreshData.Photo))
  317. {
  318. var annexesFileEntity = annexesFileIBLL.GetEntity(StuInfoFreshData.Photo);
  319. if (annexesFileEntity != null)
  320. {
  321. url = "/" + annexesFileEntity.F_FilePath.Substring(annexesFileEntity.F_FilePath.IndexOf("Resource"));
  322. }
  323. }
  324. var StuInfoFreshEmergePeopleData = stuInfoFreshIBLL.GetStuInfoFreshEmergePeopleList(StuInfoFreshData.ID);
  325. var StuInfoFreshFamilyData = stuInfoFreshIBLL.GetStuInfoFreshFamilyList(StuInfoFreshData.ID);
  326. var jsonData = new
  327. {
  328. StuInfoFresh = StuInfoFreshData,
  329. StuInfoFreshEmergePeople = StuInfoFreshEmergePeopleData,
  330. StuInfoFreshFamily = StuInfoFreshFamilyData,
  331. Url = url
  332. };
  333. return Success(jsonData);
  334. }
  335. /// <summary>
  336. /// 获取分配宿舍列表
  337. /// </summary>
  338. /// <param name="pagination"></param>
  339. /// <param name="queryJson"></param>
  340. /// <returns></returns>
  341. [HttpGet]
  342. [AjaxOnly]
  343. public ActionResult GetDormitorys(string pagination, string queryJson)
  344. {
  345. Pagination paginationobj = pagination.ToObject<Pagination>();
  346. var data = stuInfoFreshIBLL.GetDormitorys(paginationobj, queryJson);
  347. var jsonData = new
  348. {
  349. rows = data,
  350. total = paginationobj.total,
  351. page = paginationobj.page,
  352. records = paginationobj.records
  353. };
  354. return Success(jsonData);
  355. }
  356. /// <summary>
  357. /// 获取分配宿舍列表
  358. /// </summary>
  359. /// <param name="pagination"></param>
  360. /// <param name="queryJson"></param>
  361. /// <returns></returns>
  362. [HttpGet]
  363. [AjaxOnly]
  364. public ActionResult GetDormitorys2(string pagination, string queryJson)
  365. {
  366. Pagination paginationobj = pagination.ToObject<Pagination>();
  367. var data = stuInfoFreshIBLL.GetDormitorys2(paginationobj, queryJson);
  368. var jsonData = new
  369. {
  370. rows = data,
  371. total = paginationobj.total,
  372. page = paginationobj.page,
  373. records = paginationobj.records
  374. };
  375. return Success(jsonData);
  376. }
  377. /// <summary>
  378. /// 获取分配宿舍左侧树形数据
  379. /// <summary>
  380. /// <returns></returns>
  381. [HttpGet]
  382. [AjaxOnly]
  383. public ActionResult GetDormitoryTree()
  384. {
  385. var data = stuInfoFreshIBLL.GetTree().OrderBy(x => x.value);
  386. return Success(data);
  387. }
  388. /// <summary>
  389. /// 获取分配床位左侧树形数据
  390. /// <summary>
  391. /// <returns></returns>
  392. [HttpGet]
  393. [AjaxOnly]
  394. public ActionResult GetBedTree(string classNo, string gender)
  395. {
  396. var data = stuInfoFreshIBLL.GetBedTree(classNo, gender).OrderBy(x => x.text);
  397. return Success(data);
  398. }
  399. #endregion
  400. #region 提交数据
  401. /// <summary>
  402. /// 删除实体数据
  403. /// <param name="keyValue">主键</param>
  404. /// <summary>
  405. /// <returns></returns>
  406. [HttpPost]
  407. [AjaxOnly]
  408. public ActionResult DeleteForm(string keyValue)
  409. {
  410. stuInfoFreshIBLL.DeleteEntity(keyValue);
  411. return Success("删除成功!");
  412. }
  413. /// <summary>
  414. /// 保存实体数据(新增、修改)
  415. /// <param name="keyValue">主键</param>
  416. /// <summary>
  417. /// <returns></returns>
  418. [HttpPost]
  419. [ValidateAntiForgeryToken]
  420. [AjaxOnly]
  421. public ActionResult SaveForm(string keyValue, string strEntity, string strstuInfoFreshEmergePeopleList, string strstuInfoFreshFamilyList)
  422. {
  423. StuInfoFreshEntity entity = strEntity.ToObject<StuInfoFreshEntity>();
  424. if (!string.IsNullOrEmpty(entity.Photo))
  425. {
  426. entity.IsPhoto = true;
  427. }
  428. else
  429. {
  430. entity.IsPhoto = false;
  431. }
  432. List<StuInfoFreshEmergePeopleEntity> stuInfoFreshEmergePeopleList = strstuInfoFreshEmergePeopleList.ToObject<List<StuInfoFreshEmergePeopleEntity>>();
  433. List<StuInfoFreshFamilyEntity> stuInfoFreshFamilyList = strstuInfoFreshFamilyList.ToObject<List<StuInfoFreshFamilyEntity>>();
  434. var kshList = stuInfoFreshIBLL.Getksh(entity.ksh);
  435. if (string.IsNullOrEmpty(keyValue))
  436. {
  437. if (kshList != null)
  438. {
  439. return Fail("保存失败,考生号不可重复");
  440. }
  441. }
  442. else
  443. {
  444. if (kshList != null && kshList.ID != keyValue)
  445. {
  446. return Fail("保存失败,考生号不可重复");
  447. }
  448. }
  449. stuInfoFreshIBLL.SaveEntity(keyValue, entity, stuInfoFreshEmergePeopleList, stuInfoFreshFamilyList);
  450. return Success("保存成功!");
  451. }
  452. /// <summary>
  453. /// 保存实体数据(新增、修改)
  454. /// <param name="keyValue">主键</param>
  455. /// <summary>
  456. /// <returns></returns>
  457. [HttpPost]
  458. [ValidateAntiForgeryToken]
  459. [AjaxOnly]
  460. public ActionResult SaveLoanForm(string keyValue, string strEntity)
  461. {
  462. StuInfoFreshEntity entity = strEntity.ToObject<StuInfoFreshEntity>();
  463. stuInfoFreshIBLL.SaveEntity(keyValue, entity);
  464. return Success("保存成功!");
  465. }
  466. #endregion
  467. #region 扩展数据
  468. /// <summary>
  469. /// 拍照
  470. /// </summary>
  471. /// <param name="stuId"></param>
  472. /// <param name="base64url"></param>
  473. /// <returns></returns>
  474. [HttpPost]
  475. [AjaxOnly]
  476. public ActionResult DoPhoto(string base64url)
  477. {
  478. var loginuser = LoginUserInfo.Get();
  479. //头像处理
  480. var folderId = Guid.NewGuid().ToString();
  481. string filePath = Config.GetValue("AnnexesFile");
  482. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  483. string FileEextension = ".png";
  484. string fileGuid = Guid.NewGuid().ToString();
  485. string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, loginuser.account, uploadDate, fileGuid, FileEextension);
  486. //创建文件夹
  487. string path = Path.GetDirectoryName(virtualPath);
  488. Directory.CreateDirectory(path);
  489. AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
  490. if (!System.IO.File.Exists(virtualPath))
  491. {
  492. byte[] bytes = Convert.FromBase64String(base64url.Replace("data:image/png;base64,", ""));
  493. FileInfo file = new FileInfo(virtualPath);
  494. FileStream fs = file.Create();
  495. fs.Write(bytes, 0, bytes.Length);
  496. fs.Close();
  497. //文件信息写入数据库
  498. fileAnnexesEntity.F_Id = fileGuid;
  499. fileAnnexesEntity.F_FileName = "userphoto.png";
  500. fileAnnexesEntity.F_FilePath = virtualPath;
  501. fileAnnexesEntity.F_FileSize = bytes.Length.ToString();
  502. fileAnnexesEntity.F_FileExtensions = FileEextension;
  503. fileAnnexesEntity.F_FileType = FileEextension.Replace(".", "");
  504. fileAnnexesEntity.F_CreateUserId = loginuser.userId;
  505. fileAnnexesEntity.F_CreateUserName = loginuser.realName;
  506. annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
  507. }
  508. var data = new
  509. {
  510. Url = virtualPath,
  511. AnnexesFileId = fileGuid
  512. };
  513. return Success(data);
  514. }
  515. /// <summary>
  516. ///确认报到、取消报到
  517. /// </summary>
  518. /// <returns></returns>
  519. [HttpPost]
  520. [AjaxOnly]
  521. public ActionResult IsRegister(string keyValue, string status)
  522. {
  523. stuInfoFreshIBLL.IsRegister(keyValue, status);
  524. return Success("操作成功");
  525. }
  526. /// <summary>
  527. ///收取学生档案
  528. /// </summary>
  529. /// <returns></returns>
  530. [HttpPost]
  531. [AjaxOnly]
  532. public ActionResult IsCollectFile(string keyValue, string status)
  533. {
  534. stuInfoFreshIBLL.IsCollectFile(keyValue, status);
  535. return Success("操作成功");
  536. }
  537. /// <summary>
  538. ///领取钥匙
  539. /// </summary>
  540. /// <returns></returns>
  541. [HttpPost]
  542. [AjaxOnly]
  543. public ActionResult IsGetKey(string keyValue, string status)
  544. {
  545. stuInfoFreshIBLL.IsGetKey(keyValue, status);
  546. return Success("操作成功");
  547. }
  548. /// <summary>
  549. ///领取校园卡
  550. /// </summary>
  551. /// <returns></returns>
  552. [HttpPost]
  553. [AjaxOnly]
  554. public ActionResult IsGetCard(string keyValue, string status)
  555. {
  556. stuInfoFreshIBLL.IsGetCard(keyValue, status);
  557. return Success("操作成功");
  558. }
  559. /// <summary>
  560. ///缴费
  561. /// </summary>
  562. /// <returns></returns>
  563. [HttpPost]
  564. [AjaxOnly]
  565. public ActionResult IsPayFee(string keyValue, string status)
  566. {
  567. stuInfoFreshIBLL.IsPayFee(keyValue, status);
  568. return Success("操作成功");
  569. }
  570. /// <summary>
  571. ///其他费用缴费
  572. /// </summary>
  573. /// <returns></returns>
  574. [HttpPost]
  575. [AjaxOnly]
  576. public ActionResult IsOtherPayFee(string keyValue, string status)
  577. {
  578. stuInfoFreshIBLL.IsOtherPayFee(keyValue, status);
  579. return Success("操作成功");
  580. }
  581. /// <summary>
  582. ///审核助学贷款
  583. /// </summary>
  584. /// <returns></returns>
  585. [HttpPost]
  586. [AjaxOnly]
  587. public ActionResult DoCheckLoan(string keyValue, string status)
  588. {
  589. stuInfoFreshIBLL.DoCheckLoan(keyValue, status);
  590. return Success("操作成功");
  591. }
  592. /// <summary>
  593. /// 获取新生缴费明细
  594. /// <summary>
  595. /// <returns></returns>
  596. [HttpGet]
  597. [AjaxOnly]
  598. public ActionResult GetPayFeeDetail(string keyValue)
  599. {
  600. var StuInfoFreshData = stuInfoFreshIBLL.GetStuInfoFreshEntity(keyValue);
  601. var FinaChargesStandardList = new List<FinaChargesStandardEntity>();
  602. if (!string.IsNullOrEmpty(StuInfoFreshData.ClassNo) && !string.IsNullOrEmpty(StuInfoFreshData.MajorNo))
  603. {
  604. var ClassInfoEntity = classInfoIBLL.GetClassInfoEntityByClassNo(StuInfoFreshData.ClassNo);
  605. if (ClassInfoEntity != null)
  606. {
  607. var academicAndYear = Common.GetSemesterAndYear();
  608. FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByMajorNoOfNotAll(StuInfoFreshData.MajorNo, academicAndYear.AcademicYearShort, academicAndYear.Semester, ClassInfoEntity.Grade).ToList();
  609. }
  610. }
  611. var PayFeeTotal = FinaChargesStandardList.Select(x => x.Standard).Sum();
  612. var jsonData = new
  613. {
  614. FinaChargesStandardList = FinaChargesStandardList,
  615. PayFeeTotal = PayFeeTotal
  616. };
  617. return Success(jsonData);
  618. }
  619. /// <summary>
  620. /// 分配班级
  621. /// </summary>
  622. /// <param name="classNo"></param>
  623. /// <param name="dataJson"></param>
  624. /// <returns></returns>
  625. [HttpPost]
  626. [AjaxOnly]
  627. public ActionResult DoAllocationClass(string classNo, string dataJson)
  628. {
  629. var StuInfoFreshList = JsonConvert.DeserializeObject<List<StuInfoFreshEntity>>(dataJson);
  630. var ClassInfoEntity = classInfoIBLL.GetClassInfoEntityByClassNo(classNo);
  631. if (ClassInfoEntity == null)
  632. {
  633. return Fail("分配的班级不存在!");
  634. }
  635. //获取当前班级已有人数
  636. var hasList = stuInfoFreshIBLL.GetStuInfoFreshListByClassNo(classNo);
  637. var hasLength = hasList.Count();
  638. var tempLength = hasLength;
  639. if (StuInfoFreshList.Any())
  640. {
  641. foreach (var item in StuInfoFreshList)
  642. {
  643. tempLength++;
  644. item.ClassNo = classNo;
  645. item.DeptNo = ClassInfoEntity.DeptNo;
  646. item.MajorNo = ClassInfoEntity.MajorNo;
  647. item.Grade = ClassInfoEntity.Grade;
  648. item.StuNo = string.Format("{0}{1}", classNo, tempLength < 10 ? "0" + tempLength : tempLength.ToString());
  649. }
  650. }
  651. stuInfoFreshIBLL.DoAllocationClass(StuInfoFreshList);
  652. return Success("分配成功!");
  653. }
  654. /// <summary>
  655. /// 分配宿舍
  656. /// </summary>
  657. /// <param name="classNo"></param>
  658. /// <param name="dataJson"></param>
  659. /// <returns></returns>
  660. [HttpPost]
  661. [AjaxOnly]
  662. public ActionResult DoAllocationDormitory(string classNo, string dataJson)
  663. {
  664. var acc_DormitoryBuildEntities = JsonConvert.DeserializeObject<List<Acc_DormitoryBuildEntity>>(dataJson);
  665. foreach (var entity in acc_DormitoryBuildEntities)
  666. {
  667. //预分床位数量是否合理
  668. if (entity.PlanBedNum < 1)
  669. {
  670. return Fail("预分床位数量至少为1位!");
  671. }
  672. if (entity.PlanBedNum > entity.RemainBedNum)
  673. {
  674. return Fail("预分床位数量不能超出可分配床位数量!");
  675. }
  676. entity.PlanClassNo = classNo;
  677. }
  678. stuInfoFreshIBLL.DoAllocationDormitory(acc_DormitoryBuildEntities);
  679. return Success("分配成功!");
  680. }
  681. /// <summary>
  682. /// 取消分配宿舍
  683. /// </summary>
  684. /// <param name="classNo"></param>
  685. /// <param name="dataJson"></param>
  686. /// <returns></returns>
  687. [HttpPost]
  688. [AjaxOnly]
  689. public ActionResult CancelAllocationDormitory(string classNo, string dataJson)
  690. {
  691. var acc_DormitoryBuildEntities = JsonConvert.DeserializeObject<List<Acc_DormitoryBuildEntity>>(dataJson);
  692. foreach (var entity in acc_DormitoryBuildEntities)
  693. {
  694. //取消已分配床位数量是否合理
  695. if (entity.CancelUseBedNum < 1)
  696. {
  697. return Fail("取消已分配床位数量至少为1位!");
  698. }
  699. if (entity.CancelUseBedNum > entity.UseBedNum)
  700. {
  701. return Fail("取消已分配床位数量不能超出已分配床位数量!");
  702. }
  703. entity.PlanClassNo = classNo;
  704. }
  705. stuInfoFreshIBLL.CancelAllocationDormitory(acc_DormitoryBuildEntities);
  706. return Success("取消分配成功!");
  707. }
  708. /// <summary>
  709. /// 分配床位
  710. /// </summary>
  711. /// <param name="dormitoryNo"></param>
  712. /// <param name="stuId"></param>
  713. /// <param name="dormitoryName"></param>
  714. /// <returns></returns>
  715. [HttpPost]
  716. [AjaxOnly]
  717. public ActionResult DoAllocationBed(string dormitoryNo, string keyValue)
  718. {
  719. stuInfoFreshIBLL.DoAllocationBed(dormitoryNo, keyValue);
  720. return Success("分配成功!");
  721. }
  722. /// <summary>
  723. /// 自动分配床位
  724. /// </summary>
  725. /// <param name="dormitoryNo"></param>
  726. /// <param name="stuId"></param>
  727. /// <param name="dormitoryName"></param>
  728. /// <returns></returns>
  729. [HttpPost]
  730. [AjaxOnly]
  731. public ActionResult DoAllocationBedOfAuto(string classNo)
  732. {
  733. stuInfoFreshIBLL.DoAllocationBedOfAuto(classNo);
  734. return Success("分配成功!");
  735. }
  736. [HttpGet]
  737. [AjaxOnly]
  738. public ActionResult ConfirmDormitory()
  739. {
  740. stuInfoFreshIBLL.ConfirmDormitory();
  741. return Success("操作成功!");
  742. }
  743. [HttpGet]
  744. [AjaxOnly]
  745. public ActionResult ConfirmDormitoryTwo()
  746. {
  747. stuInfoFreshIBLL.ConfirmDormitoryTwo();
  748. return Success("操作成功!");
  749. }
  750. [HttpPost]
  751. [AjaxOnly]
  752. public ActionResult GetUniform(string keyValue, bool Status)
  753. {
  754. stuInfoFreshIBLL.GetUniform(keyValue, Status);
  755. return Success("操作成功");
  756. }
  757. [HttpPost]
  758. [AjaxOnly]
  759. public ActionResult PayUniform(string keyValue, bool Status)
  760. {
  761. stuInfoFreshIBLL.PayUniform(keyValue, Status);
  762. return Success("操作成功");
  763. }
  764. /// <summary>
  765. /// 导入学籍信息
  766. /// </summary>
  767. /// <param name="dormitoryNo"></param>
  768. /// <param name="stuId"></param>
  769. /// <param name="dormitoryName"></param>
  770. /// <returns></returns>
  771. [HttpPost]
  772. [AjaxOnly]
  773. public ActionResult ImportStuInfoBasic()
  774. {
  775. stuInfoFreshIBLL.ImportStuInfoBasic();
  776. return Success("生成学籍信息成功!");
  777. }
  778. /// <summary>
  779. /// 导入床位
  780. /// </summary>
  781. /// <returns></returns>
  782. public ActionResult ImportBed(HttpPostedFileBase filedata)
  783. {
  784. if (filedata == null || filedata.FileName == null || filedata.ContentLength == 0)
  785. {
  786. if (Request.Files.Count > 0)
  787. {
  788. filedata = Request.Files[0];
  789. }
  790. }
  791. if (filedata == null)
  792. {
  793. return Fail("未获取到文件");
  794. }
  795. var pathoffirst = Config.GetValue("AnnexesFile");
  796. var pathofsecond = "/DormitoryBuildImportFile";
  797. var pathofthird = DateTime.Now.ToString("yyyyMMdd");
  798. var filename = filedata.FileName;
  799. var exten = Path.GetExtension(filename);
  800. var fileguid = Guid.NewGuid().ToString();
  801. var pathoffull = string.Format("{0}/{1}/{2}/{3}{4}", pathoffirst, pathofsecond, pathofthird, fileguid, exten);
  802. var pathofdown = string.Format("{0}/{1}/{2}{3}", pathofsecond, pathofthird, fileguid, exten);
  803. var directory = Path.GetDirectoryName(pathoffull);
  804. if (!Directory.Exists(directory))
  805. {
  806. Directory.CreateDirectory(directory);
  807. }
  808. //保存文件
  809. filedata.SaveAs(pathoffull);
  810. //读取文件
  811. var filePath = pathoffull;
  812. var strMsg = string.Empty;
  813. IWorkbook wk = null;
  814. string extension = System.IO.Path.GetExtension(filePath);
  815. try
  816. {
  817. FileStream fs = System.IO.File.OpenRead(filePath);
  818. if (extension.Equals(".xls"))
  819. {
  820. wk = new HSSFWorkbook(fs);
  821. }
  822. else
  823. {
  824. wk = new XSSFWorkbook(fs);
  825. }
  826. fs.Close();
  827. //读取当前表数据
  828. ISheet sheet = wk.GetSheetAt(0);
  829. IRow row = sheet.GetRow(0);
  830. int offset = 0;
  831. //导入床位成功数量
  832. int bedSuccNum = 0;
  833. var stuinfofreshlist = stuInfoFreshIBLL.GetList("{}");
  834. var accommodationList = accommodationIBLL.GetList();
  835. for (int i = 1; i <= sheet.LastRowNum; i++)
  836. {
  837. row = sheet.GetRow(i);
  838. if (row != null)
  839. {
  840. //姓名0、学号1、班级2、宿舍楼3、单元4、楼层5、房间6、床位7
  841. var stuInfoFreshEntity = stuinfofreshlist.FirstOrDefault(m => m.StuNo == row.GetCell(1).ToString());
  842. if (stuInfoFreshEntity == null)
  843. {
  844. continue;
  845. }
  846. var classInfoEntity = classInfoIBLL.GetClassInfoEntityByClassName(row.GetCell(2).ToString());
  847. if (classInfoEntity == null)
  848. {
  849. continue;
  850. }
  851. if (accommodationList.Any())
  852. {
  853. var build = accommodationList.FirstOrDefault(x => x.BuildType == "1" && x.Name == row.GetCell(3).ToString());
  854. if (build != null)
  855. {
  856. var unit = accommodationList.FirstOrDefault(x => x.BuildType == "2" && x.ParentID == build.ID && x.Name == row.GetCell(4).ToString());
  857. if (unit != null)
  858. {
  859. var floor = accommodationList.FirstOrDefault(x => x.BuildType == "3" && x.ParentID == unit.ID && x.Name == row.GetCell(5).ToString());
  860. if (floor != null)
  861. {
  862. var room = accommodationList.FirstOrDefault(x => x.BuildType == "4" && x.ParentID == floor.ID && x.Name == row.GetCell(6).ToString());
  863. if (room != null)
  864. {
  865. var bed = accommodationList.FirstOrDefault(x => x.BuildType == "5" && x.ParentID == room.ID && x.Name == row.GetCell(7).ToString());
  866. if (bed != null)
  867. {
  868. //分配床位
  869. stuInfoFreshIBLL.DoAllocationBed(bed.ID, stuInfoFreshEntity.ID);
  870. bedSuccNum++;
  871. //分配宿舍
  872. var alist = new List<Acc_DormitoryBuildEntity>();
  873. var accommodationEntity = new Acc_DormitoryBuildEntity();
  874. accommodationEntity.ID = room.ID;
  875. accommodationEntity.PlanBedNum = 1;
  876. accommodationEntity.PlanClassNo = classInfoEntity.ClassNo;
  877. accommodationEntity.bedId = bed.ID;
  878. alist.Add(accommodationEntity);
  879. stuInfoFreshIBLL.ImportDormitory(alist);
  880. }
  881. }
  882. }
  883. }
  884. }
  885. }
  886. }
  887. }
  888. strMsg = "导入床位成功" + bedSuccNum + "个!";
  889. }
  890. catch (Exception e)
  891. {
  892. return Fail("导入床位失败!" + strMsg);
  893. }
  894. return Success("导入床位成功!" + strMsg);
  895. }
  896. /// <summary>
  897. /// 导出学生宿舍信息
  898. /// </summary>
  899. /// <returns></returns>
  900. public FileResult ExportBed(string queryJson)
  901. {
  902. var fileHead = "学生宿舍信息";
  903. var postData = JsonConvert.DeserializeObject<StuInfoFreshEntity>(queryJson);
  904. if (!string.IsNullOrEmpty(postData.ClassNo))
  905. {
  906. var classInfoEntity = classInfoIBLL.GetClassInfoEntityByClassNo(postData.ClassNo);
  907. fileHead = classInfoEntity?.ClassName + fileHead;
  908. }
  909. else if (!string.IsNullOrEmpty(postData.MajorNo))
  910. {
  911. var majorEntity = cdMajorIBLL.GetCdMajorEntityByMajorNo(postData.MajorNo);
  912. fileHead = majorEntity?.MajorName + fileHead;
  913. }
  914. else if (!string.IsNullOrEmpty(postData.DeptNo))
  915. {
  916. var deptEntity = cdDeptIBLL.GetCdDeptEntityByNo(postData.DeptNo);
  917. fileHead = deptEntity?.DeptName + fileHead;
  918. }
  919. FileStreamResult result = null;
  920. HSSFWorkbook book = new HSSFWorkbook();
  921. ISheet sheet = book.CreateSheet("Sheet0");
  922. for (int i = 0; i <= 9; i++)
  923. {
  924. sheet.SetColumnWidth(i, 256 * 15);
  925. }
  926. IRow headrow = sheet.CreateRow(0);
  927. headrow.CreateCell(0).SetCellValue(fileHead);
  928. sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 9));
  929. IRow cellrow = sheet.CreateRow(1);
  930. cellrow.CreateCell(0).SetCellValue("姓名");
  931. cellrow.CreateCell(1).SetCellValue("学号");
  932. cellrow.CreateCell(2).SetCellValue("系");
  933. cellrow.CreateCell(3).SetCellValue("专业");
  934. cellrow.CreateCell(4).SetCellValue("班级");
  935. cellrow.CreateCell(5).SetCellValue("宿舍楼");
  936. cellrow.CreateCell(6).SetCellValue("单元");
  937. cellrow.CreateCell(7).SetCellValue("楼层");
  938. cellrow.CreateCell(8).SetCellValue("房间");
  939. cellrow.CreateCell(9).SetCellValue("床位");
  940. //获取数据源
  941. var data = stuInfoFreshIBLL.GetList(queryJson).ToList();
  942. foreach (var item in data)
  943. {
  944. var i = data.IndexOf(item);
  945. IRow row = sheet.CreateRow(2 + i);
  946. row.CreateCell(0).SetCellValue(item.StuName);
  947. row.CreateCell(1).SetCellValue(item.StuNo);
  948. row.CreateCell(2).SetCellValue(item.DeptName);
  949. row.CreateCell(3).SetCellValue(item.MajorName);
  950. row.CreateCell(4).SetCellValue(item.ClassName);
  951. row.CreateCell(5).SetCellValue(item.Build);
  952. row.CreateCell(6).SetCellValue(item.Unit);
  953. row.CreateCell(7).SetCellValue(item.floor);
  954. row.CreateCell(8).SetCellValue(item.Room);
  955. row.CreateCell(9).SetCellValue(item.Bed);
  956. }
  957. var fileguid = Guid.NewGuid().ToString();
  958. var path = Server.MapPath("~/Resource/DormitoryBuildExportFile/" + DateTime.Now.ToString("yyyyMMdd") + "/");
  959. var pathoffull = path + fileguid + ".xls";
  960. if (!Directory.Exists(path))
  961. {
  962. Directory.CreateDirectory(path);
  963. }
  964. FileStream fswrite = new FileStream(pathoffull, FileMode.OpenOrCreate, FileAccess.Write);
  965. book.Write(fswrite);
  966. fswrite.Close();
  967. FileStream fsread = new FileStream(pathoffull, FileMode.OpenOrCreate, FileAccess.Read);
  968. result = File(fsread, "application/ms-excel", fileHead + ".xls");
  969. return result;
  970. }
  971. /// <summary>
  972. /// 删除宿舍信息
  973. /// </summary>
  974. /// <param name="dormitoryNo"></param>
  975. /// <param name="stuId"></param>
  976. /// <param name="dormitoryName"></param>
  977. /// <returns></returns>
  978. [HttpPost]
  979. [AjaxOnly]
  980. public ActionResult DeleteBed(string keyValue)
  981. {
  982. stuInfoFreshIBLL.DeleteBed(keyValue);
  983. return Success("删除成功!");
  984. }
  985. /// <summary>
  986. /// 年级下拉框信息【新生信息统计】
  987. /// </summary>
  988. /// <returns></returns>
  989. [HttpGet]
  990. [AjaxOnly]
  991. public ActionResult GetGradeData()
  992. {
  993. var data = WebHelper.GenerateNearByYear2();
  994. return Success(data);
  995. }
  996. /// <summary>
  997. /// 获取列表数据
  998. /// <summary>
  999. /// <returns></returns>
  1000. [HttpGet]
  1001. [AjaxOnly]
  1002. public ActionResult GetStatisticList(string queryJson)
  1003. {
  1004. var data = stuInfoFreshIBLL.GetList2(queryJson);
  1005. var list = data.Where(x => !string.IsNullOrEmpty(x.MajorNo)).GroupBy(x => x.MajorNo).Select(x => new StatisticModel
  1006. {
  1007. MajorNo = x.Key,
  1008. MajorName = x.FirstOrDefault()?.MajorName,
  1009. Grade = x.FirstOrDefault()?.Grade,
  1010. TotalNum = x.Count(),
  1011. InfoNum = x.Count(y => y.IsStudentEdit == true),
  1012. RegisterNum = x.Count(y => y.RegisterStatus == "1"),
  1013. PayFeeNum = x.Count(y => y.PayFeeStatus == "1" || y.OnsitePayFeeStatus == "1"),
  1014. GetKeyNum = x.Count(y => y.GetKeyStatus == "1"),
  1015. GetCardNum = x.Count(y => y.GetCardStatus == "1"),
  1016. CollectFileNum = x.Count(y => y.CollectFileStatus == "1"),
  1017. LoanNum = x.Count(y => y.StudentLoanStatus == "1")
  1018. }).OrderBy(x => x.MajorNo);
  1019. //var aa = new StatisticModel
  1020. //{
  1021. // MajorNo = "全校",
  1022. // MajorName = "全校",
  1023. // Grade = list.FirstOrDefault()?.Grade,
  1024. // TotalNum = list.Select(x => x.TotalNum).Sum(),
  1025. // InfoNum = list.Select(x => x.InfoNum).Sum(),
  1026. // RegisterNum = list.Select(x => x.RegisterNum).Sum(),
  1027. // PayFeeNum = list.Select(x => x.PayFeeNum).Sum(),
  1028. // GetKeyNum = list.Select(x => x.GetKeyNum).Sum(),
  1029. //};
  1030. //var allList = new List<StatisticModel>();
  1031. //allList.Add(aa);
  1032. //allList.AddRange(list);
  1033. return Success(list);
  1034. }
  1035. /// <summary>
  1036. /// 获取列表数据
  1037. /// <summary>
  1038. /// <returns></returns>
  1039. [HttpGet]
  1040. [AjaxOnly]
  1041. public ActionResult GetStatisticListOfClass(string queryJson)
  1042. {
  1043. var data = stuInfoFreshIBLL.GetList2(queryJson);
  1044. var list = data.Where(x => !string.IsNullOrEmpty(x.ClassNo) && !string.IsNullOrEmpty(x.MajorNo)).GroupBy(x => new { x.MajorNo, x.ClassNo }).Select(x => new StatisticModel
  1045. {
  1046. ClassNo = x.Key.ClassNo,
  1047. ClassName = x.FirstOrDefault()?.ClassName,
  1048. Grade = x.FirstOrDefault()?.Grade,
  1049. MajorNo = x.Key.MajorNo,
  1050. MajorName = x.FirstOrDefault()?.MajorName,
  1051. TotalNum = x.Count(),
  1052. InfoNum = x.Count(y => y.IsStudentEdit == true),
  1053. RegisterNum = x.Count(y => y.RegisterStatus == "1"),
  1054. PayFeeNum = x.Count(y => y.PayFeeStatus == "1" || y.OnsitePayFeeStatus == "1"),
  1055. GetKeyNum = x.Count(y => y.GetKeyStatus == "1"),
  1056. GetCardNum = x.Count(y => y.GetCardStatus == "1"),
  1057. CollectFileNum = x.Count(y => y.CollectFileStatus == "1"),
  1058. LoanNum = x.Count(y => y.StudentLoanStatus == "1")
  1059. }).OrderBy(x => x.MajorNo).ThenBy(x => x.ClassNo);
  1060. return Success(list);
  1061. }
  1062. public class StatisticModel
  1063. {
  1064. public string MajorNo { get; set; }
  1065. public string MajorName { get; set; }
  1066. public string ClassNo { get; set; }
  1067. public string ClassName { get; set; }
  1068. public string Grade { get; set; }
  1069. /// <summary>
  1070. /// 总人数
  1071. /// </summary>
  1072. public int TotalNum { get; set; }
  1073. /// <summary>
  1074. /// 完善个人信息人数
  1075. /// </summary>
  1076. public int InfoNum { get; set; }
  1077. /// <summary>
  1078. /// 报到人数
  1079. /// </summary>
  1080. public int RegisterNum { get; set; }
  1081. /// <summary>
  1082. /// 缴费人数
  1083. /// </summary>
  1084. public int PayFeeNum { get; set; }
  1085. /// <summary>
  1086. /// 领钥匙人数
  1087. /// </summary>
  1088. public int GetKeyNum { get; set; }
  1089. /// <summary>
  1090. /// 已领取校园卡人数
  1091. /// </summary>
  1092. public int GetCardNum { get; set; }
  1093. /// <summary>
  1094. /// 已收取档案人数
  1095. /// </summary>
  1096. public int CollectFileNum { get; set; }
  1097. /// <summary>
  1098. /// 贷款人数
  1099. /// </summary>
  1100. public int LoanNum { get; set; }
  1101. }
  1102. /// <summary>
  1103. /// 获取列表数据
  1104. /// <summary>
  1105. /// <returns></returns>
  1106. [HttpGet]
  1107. [AjaxOnly]
  1108. public ActionResult GetStatisticArea(string queryJson)
  1109. {
  1110. var data = stuInfoFreshIBLL.GetList(queryJson);
  1111. var list = data.GroupBy(x => x.ProvinceNo).Select(x => new
  1112. {
  1113. ProvinceNo = x.Key,
  1114. TotalNum = x.Count(),
  1115. RegisterNum = x.Count(y => y.RegisterStatus == "1"),
  1116. BoyNum = x.Count(y => y.GenderNo == "1"),
  1117. GirlNum = x.Count(y => y.GenderNo == "0"),
  1118. }).OrderByDescending(a => a.TotalNum).ToList();
  1119. var item = new
  1120. {
  1121. ProvinceNo = "总计",
  1122. TotalNum = data.Count(),
  1123. RegisterNum = data.Count(y => y.RegisterStatus == "1"),
  1124. BoyNum = data.Count(y => y.GenderNo == "1"),
  1125. GirlNum = data.Count(y => y.GenderNo == "0"),
  1126. };
  1127. var zhounei = data.Where(a => a.ProvinceNo.Contains("42"));
  1128. var item1 = new
  1129. {
  1130. ProvinceNo = "省内",
  1131. TotalNum = zhounei.Count(),
  1132. RegisterNum = zhounei.Count(y => y.RegisterStatus == "1"),
  1133. BoyNum = zhounei.Count(y => y.GenderNo == "1"),
  1134. GirlNum = zhounei.Count(y => y.GenderNo == "0"),
  1135. };
  1136. var zhouwai = data.Where(a => !a.ProvinceNo.Contains("42"));
  1137. var item2 = new
  1138. {
  1139. ProvinceNo = "省外",
  1140. TotalNum = zhouwai.Count(),
  1141. RegisterNum = zhouwai.Count(y => y.RegisterStatus == "1"),
  1142. BoyNum = zhouwai.Count(y => y.GenderNo == "1"),
  1143. GirlNum = zhouwai.Count(y => y.GenderNo == "0"),
  1144. };
  1145. list.Add(item);
  1146. list.Add(item1);
  1147. list.Add(item2);
  1148. // var jsonData = new
  1149. // {
  1150. // rows = list,
  1151. // total = list.Count(),
  1152. // page = 1,
  1153. // records = list.Count();
  1154. //};
  1155. return Success(list);
  1156. }
  1157. #endregion
  1158. #region 上传图片
  1159. [HttpPost]
  1160. [AjaxOnly]
  1161. public ActionResult IsPhoto(string stuId, string base64url)
  1162. {
  1163. var loginuser = LoginUserInfo.Get();
  1164. //头像处理
  1165. var folderId = Guid.NewGuid().ToString();
  1166. string filePath = Config.GetValue("AnnexesFile");
  1167. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  1168. string FileEextension = ".png";
  1169. string fileGuid = Guid.NewGuid().ToString();
  1170. string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, loginuser.account, uploadDate, fileGuid, FileEextension);
  1171. //创建文件夹
  1172. string path = Path.GetDirectoryName(virtualPath);
  1173. Directory.CreateDirectory(path);
  1174. AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
  1175. if (!System.IO.File.Exists(virtualPath))
  1176. {
  1177. byte[] bytes = Convert.FromBase64String(base64url.Replace("data:image/png;base64,", ""));
  1178. FileInfo file = new FileInfo(virtualPath);
  1179. FileStream fs = file.Create();
  1180. fs.Write(bytes, 0, bytes.Length);
  1181. fs.Close();
  1182. //文件信息写入数据库
  1183. fileAnnexesEntity.F_Id = fileGuid;
  1184. fileAnnexesEntity.F_FileName = "userphoto.png";
  1185. fileAnnexesEntity.F_FilePath = virtualPath;
  1186. fileAnnexesEntity.F_FileSize = bytes.Length.ToString();
  1187. fileAnnexesEntity.F_FileExtensions = FileEextension;
  1188. fileAnnexesEntity.F_FileType = FileEextension.Replace(".", "");
  1189. fileAnnexesEntity.F_CreateUserId = loginuser.userId;
  1190. fileAnnexesEntity.F_CreateUserName = loginuser.realName;
  1191. annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
  1192. }
  1193. var result = stuInfoFreshIBLL.IsPhoto(stuId, true, fileGuid);
  1194. if (result.Item1)
  1195. {
  1196. return Success(result.Item2);
  1197. }
  1198. else
  1199. {
  1200. return Fail(result.Item2);
  1201. }
  1202. }
  1203. #endregion
  1204. }
  1205. }