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.
 
 
 
 
 
 

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