CensusController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.google.gson.Gson;
  4. import com.google.gson.reflect.TypeToken;
  5. import com.template.annotation.PassToken;
  6. import com.template.api.CensusControllerAPI;
  7. import com.template.api.LoginControllerAPI;
  8. import com.template.common.utils.*;
  9. import com.template.config.WxOpenidConfig;
  10. import com.template.model.enumModel.eSchool;
  11. import com.template.model.pojo.*;
  12. import com.template.model.request.changePasswordRequest;
  13. import com.template.model.request.loginRequest;
  14. import com.template.model.request.mobileLoginRequest;
  15. import com.template.model.request.payResultRequest;
  16. import com.template.model.result.CommonResult;
  17. import com.template.model.result.Wx_user;
  18. import com.template.model.vo.*;
  19. import com.template.services.*;
  20. import org.apache.poi.ss.usermodel.Row;
  21. import org.apache.poi.ss.usermodel.Sheet;
  22. import org.apache.poi.ss.usermodel.Workbook;
  23. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  24. import org.slf4j.Logger;
  25. import org.slf4j.LoggerFactory;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.util.StringUtils;
  29. import org.springframework.validation.BindingResult;
  30. import org.springframework.web.bind.annotation.RequestBody;
  31. import org.springframework.web.bind.annotation.RestController;
  32. import javax.annotation.Resource;
  33. import javax.servlet.http.HttpServletResponse;
  34. import java.net.URLEncoder;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * @Author: binguo
  39. * @Date: 2023/7/5 星期三 9:28
  40. * @Description: com.template.controller
  41. * @Version: 1.0
  42. */
  43. @RestController
  44. public class CensusController implements CensusControllerAPI {
  45. @Autowired
  46. private WelcomeBedService welcomeBedService;
  47. @Autowired
  48. private WelcomeOrgService welcomeOrgService;
  49. @Autowired
  50. private WelcomeStudentService welcomeStudentService;
  51. @Autowired
  52. private WelcomeAccountService welcomeAccountService;
  53. // #分配
  54. // #总人数 totalData
  55. // #已分配床位数 根据性别、学院求和的 totalBed
  56. // #已分配寝室数
  57. // select (select sum(1) as total from welcome_student where deleted = 0 and college = wb.college and iden_type = 1) as totalData,
  58. // SUM(1) as totalBed,college,sex,build,dormitory
  59. // from welcome_bed wb
  60. // where wb.deleted = 0 and wb.college is not null and wb.college != ''
  61. // group by wb.college,wb.sex,wb.build,wb.dormitory
  62. @Override
  63. public CommonResult queryBedTotal(String userId, Integer collegeId, String sex) {
  64. List<BedTotalVo> result = new ArrayList<>();
  65. WelcomeAccount wa = welcomeAccountService.getManageById(userId);
  66. if (wa == null) {
  67. return CommonResult.fail("当前账户已失效,无权限查看");
  68. }
  69. List<String> collegeIds = Arrays.asList(wa.getCollegeId().split(","));
  70. if(collegeId != null && collegeId.intValue() > 0){
  71. if (!collegeIds.contains(String.valueOf(collegeId))) {
  72. return CommonResult.ok(result);
  73. }else {
  74. collegeIds = new ArrayList<>();
  75. collegeIds.add(String.valueOf(collegeId));
  76. }
  77. }
  78. List<WelcomeOrg> orgs = welcomeOrgService.queryColleges(collegeIds);
  79. List<BedSqlTotalVo> sqlDatas = welcomeBedService.queryBedSqlList(collegeId, sex);
  80. List<StudentTotalVo> students = welcomeStudentService.queryStudentTotal();
  81. List<String> sexs = new ArrayList<>();
  82. if (StringUtils.hasText(sex)) {
  83. sexs.add(sex);
  84. } else {
  85. sexs.add("男");
  86. sexs.add("女");
  87. }
  88. for (WelcomeOrg org : orgs) {
  89. for (String sexStr : sexs) {
  90. BedTotalVo btv = new BedTotalVo();
  91. btv.setCollege(org.getName());
  92. btv.setSex(sexStr);
  93. List<BedSqlTotalVo> sqlDataCs = sqlDatas.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex() != null && e.getSex().equals(sexStr)).collect(Collectors.toList());
  94. if (sqlDataCs != null && sqlDataCs.size() > 0) {
  95. //int totalData = sqlDataCs.get(0).getTotalData() == null ? 0 : sqlDataCs.get(0).getTotalData();
  96. //btv.setTotal(totalData);//总人数
  97. int bedTotals = 0;
  98. for (BedSqlTotalVo d : sqlDataCs) {
  99. bedTotals = bedTotals + d.getTotalBed();
  100. }
  101. btv.setAssignedBed(bedTotals);//已分配床
  102. btv.setAssignedDormitory(sqlDataCs.size());//已分配寝室
  103. int buildCount = (int) sqlDataCs.stream().map(BedSqlTotalVo::getBuild).distinct().count();
  104. btv.setAssignedBuild(buildCount);//已分配楼栋
  105. } else {
  106. //btv.setTotal(0);
  107. btv.setAssignedBed(0);//已分配床
  108. btv.setAssignedDormitory(0);//已分配寝室
  109. btv.setAssignedBuild(0);//已分配楼栋
  110. }
  111. Optional<StudentTotalVo> ostudent = students.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex() != null && e.getSex().equals(sexStr)).findFirst();
  112. if (ostudent != null && ostudent.isPresent()) {
  113. btv.setTotal(ostudent.get().getTotal());
  114. } else {
  115. btv.setTotal(0);
  116. }
  117. result.add(btv);
  118. }
  119. }
  120. return CommonResult.ok(result);
  121. }
  122. @Override
  123. public void bedTotalExport(HttpServletResponse response, String userId, Integer collegeId, String sex) {
  124. List<BedTotalVo> result = new ArrayList<>();
  125. Workbook workbook = new XSSFWorkbook();
  126. Sheet sheet = workbook.createSheet("床位分配统计");
  127. WelcomeAccount wa = welcomeAccountService.getManageById(userId);
  128. if (wa == null) {
  129. System.out.println("当前账户已失效,无权限查看");
  130. ExcelUtils.excelDownload(workbook, "床位分配统计.xlsx", response);
  131. }
  132. List<String> collegeIds = Arrays.asList(wa.getCollegeId().split(","));
  133. if(collegeId != null && collegeId.intValue() > 0){
  134. if (!collegeIds.contains(String.valueOf(collegeId))) {
  135. ExcelUtils.excelDownload(workbook, "床位分配统计.xlsx", response);
  136. }else {
  137. collegeIds = new ArrayList<>();
  138. collegeIds.add(String.valueOf(collegeId));
  139. }
  140. }
  141. List<WelcomeOrg> orgs = welcomeOrgService.queryColleges(collegeIds);
  142. List<BedSqlTotalVo> sqlDatas = welcomeBedService.queryBedSqlList(collegeId, sex);
  143. List<StudentTotalVo> students = welcomeStudentService.queryStudentTotal();
  144. List<String> sexs = new ArrayList<>();
  145. if (StringUtils.hasText(sex)) {
  146. sexs.add(sex);
  147. } else {
  148. sexs.add("男");
  149. sexs.add("女");
  150. }
  151. for (WelcomeOrg org : orgs) {
  152. for (String sexStr : sexs) {
  153. BedTotalVo btv = new BedTotalVo();
  154. btv.setCollege(org.getName());
  155. btv.setSex(sexStr);
  156. List<BedSqlTotalVo> sqlDataCs = sqlDatas.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex() != null && e.getSex().equals(sexStr)).collect(Collectors.toList());
  157. if (sqlDataCs != null && sqlDataCs.size() > 0) {
  158. //int totalData = sqlDataCs.get(0).getTotalData() == null ? 0 : sqlDataCs.get(0).getTotalData();
  159. //btv.setTotal(totalData);//总人数
  160. int bedTotals = 0;
  161. for (BedSqlTotalVo d : sqlDataCs) {
  162. bedTotals = bedTotals + d.getTotalBed();
  163. }
  164. btv.setAssignedBed(bedTotals);//已分配床
  165. btv.setAssignedDormitory(sqlDataCs.size());//已分配寝室
  166. int buildCount = (int) sqlDataCs.stream().map(BedSqlTotalVo::getBuild).distinct().count();
  167. btv.setAssignedBuild(buildCount);//已分配楼栋
  168. } else {
  169. //btv.setTotal(0);
  170. btv.setAssignedBed(0);//已分配床
  171. btv.setAssignedDormitory(0);//已分配寝室
  172. btv.setAssignedBuild(0);//已分配楼栋
  173. }
  174. Optional<StudentTotalVo> ostudent = students.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex() != null && e.getSex().equals(sexStr)).findFirst();
  175. if (ostudent != null && ostudent.isPresent()) {
  176. btv.setTotal(ostudent.get().getTotal());
  177. } else {
  178. btv.setTotal(0);
  179. }
  180. result.add(btv);
  181. }
  182. }
  183. //导出
  184. Row headerRow = sheet.createRow(0);
  185. headerRow.createCell(0).setCellValue("序号");
  186. headerRow.createCell(1).setCellValue("学院名称");
  187. headerRow.createCell(2).setCellValue("性别");
  188. headerRow.createCell(3).setCellValue("总人数");
  189. headerRow.createCell(4).setCellValue("已分配床位数");
  190. headerRow.createCell(5).setCellValue("已分配寝室数");
  191. headerRow.createCell(6).setCellValue("已分配楼栋数");
  192. for (int i = 0; i < result.size(); i++) {
  193. BedTotalVo bedData = result.get(i);
  194. Row dataRow = sheet.createRow(i + 1);
  195. dataRow.createCell(0).setCellValue(i + 1);
  196. dataRow.createCell(1).setCellValue(bedData.getCollege());
  197. dataRow.createCell(2).setCellValue(bedData.getSex());
  198. dataRow.createCell(3).setCellValue(bedData.getTotal());
  199. dataRow.createCell(4).setCellValue(bedData.getAssignedBed());
  200. dataRow.createCell(5).setCellValue(bedData.getAssignedDormitory());
  201. dataRow.createCell(6).setCellValue(bedData.getAssignedBuild());
  202. }
  203. // 将工作簿写入文件
  204. ExcelUtils.excelDownload(workbook, "床位分配统计.xlsx", response);
  205. }
  206. // #总人数 totalData
  207. // #已入住人数 sleeper
  208. // #未入住人数 = 总人数 - 已入住人数
  209. // #总床位数 totalBed
  210. // #已入住床位数 = 已入住人数
  211. // #未入住床位数 = 总床位数 - 已入住床位数
  212. // select SUM(1) as totalBed,
  213. // (select SUM(1) as total from welcome_bed where deleted = 0 and `name` is not null and name != '' and college = wb.college and sex = wb.sex) as sleeper,
  214. // (select sum(1) as total from welcome_student where deleted = 0 and college = wb.college and iden_type = 1 and sex = wb.sex) as totalData,wb.college,wb.sex from welcome_bed wb
  215. // where wb.deleted = 0 and wb.college is not null
  216. // group by wb.college,wb.sex
  217. @Override
  218. public CommonResult queryCheckTotal(String userId, Integer collegeId, String sex) {
  219. List<SleepTotalVo> result = new ArrayList<>();
  220. WelcomeAccount wa = welcomeAccountService.getManageById(userId);
  221. if (wa == null) {
  222. return CommonResult.fail("当前账户已失效,无权限查看");
  223. }
  224. List<String> collegeIds = Arrays.asList(wa.getCollegeId().split(","));
  225. if(collegeId != null && collegeId.intValue() > 0){
  226. if (!collegeIds.contains(String.valueOf(collegeId))) {
  227. return CommonResult.ok(result);
  228. }else {
  229. collegeIds = new ArrayList<>();
  230. collegeIds.add(String.valueOf(collegeId));
  231. }
  232. }
  233. List<WelcomeOrg> orgs = welcomeOrgService.queryColleges(collegeIds);
  234. List<SleepSqlTotalVo> sqlDatas = welcomeBedService.queryTotalSqlList(collegeId, sex);
  235. List<StudentTotalVo> students = welcomeStudentService.queryStudentTotal();
  236. List<String> sexs = new ArrayList<>();
  237. if (StringUtils.hasText(sex)) {
  238. sexs.add(sex);
  239. } else {
  240. sexs.add("男");
  241. sexs.add("女");
  242. }
  243. for (WelcomeOrg org : orgs) {
  244. for (String sexStr : sexs) {
  245. SleepTotalVo btv = new SleepTotalVo();
  246. btv.setCollege(org.getName());
  247. btv.setSex(sexStr);
  248. Optional<StudentTotalVo> ostudent = students.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex().equals(sexStr)).findFirst();
  249. if (ostudent != null && ostudent.isPresent()) {
  250. btv.setTotalData(ostudent.get().getTotal());
  251. } else {
  252. btv.setTotalData(0);
  253. }
  254. List<SleepSqlTotalVo> sqlDataCs = sqlDatas.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex().equals(sexStr)).collect(Collectors.toList());
  255. if (sqlDataCs != null && sqlDataCs.size() > 0) {
  256. int toalData = btv.getTotalData();//sqlDataCs.get(0).getTotalData() == null ? 0 : sqlDataCs.get(0).getTotalData();
  257. int sleeper = sqlDataCs.get(0).getSleeper() == null ? 0 : sqlDataCs.get(0).getSleeper();
  258. int totalBed = sqlDataCs.get(0).getTotalBed() == null ? 0 : sqlDataCs.get(0).getTotalBed();
  259. //btv.setTotalData(toalData);//总人数
  260. btv.setSleeper(sleeper);//已入住人数
  261. btv.setUnSleeper((toalData - sleeper) < 0 ? 0 : (toalData - sleeper));//未入住人数
  262. btv.setTotalBed(totalBed);//总床数
  263. btv.setSleepBed(sleeper);//已入住床位数
  264. btv.setUnSleepBed((totalBed - sleeper) < 0 ? 0 : (totalBed - sleeper));//未入住床位数
  265. } else {
  266. //btv.setTotalData(0);//总人数
  267. btv.setSleeper(0);//已入住人数
  268. btv.setUnSleeper(0);//未入住人数
  269. btv.setTotalBed(0);//总床数
  270. btv.setSleepBed(0);//已入住床位数
  271. btv.setUnSleepBed(0);//未入住床位数
  272. }
  273. result.add(btv);
  274. }
  275. }
  276. return CommonResult.ok(result);
  277. }
  278. @Override
  279. public void checkTotalExport(HttpServletResponse response, String userId, Integer collegeId, String sex) {
  280. List<SleepTotalVo> result = new ArrayList<>();
  281. Workbook workbook = new XSSFWorkbook();
  282. Sheet sheet = workbook.createSheet("床位入住统计");
  283. WelcomeAccount wa = welcomeAccountService.getManageById(userId);
  284. if (wa == null) {
  285. System.out.println("当前账户已失效,无权限查看");
  286. ExcelUtils.excelDownload(workbook, "床位入住统计.xlsx", response);
  287. }
  288. List<String> collegeIds = Arrays.asList(wa.getCollegeId().split(","));
  289. if(collegeId != null && collegeId.intValue() > 0){
  290. if (!collegeIds.contains(String.valueOf(collegeId))) {
  291. ExcelUtils.excelDownload(workbook, "床位入住统计.xlsx", response);
  292. }else {
  293. collegeIds = new ArrayList<>();
  294. collegeIds.add(String.valueOf(collegeId));
  295. }
  296. }
  297. List<WelcomeOrg> orgs = welcomeOrgService.queryColleges(collegeIds);
  298. List<SleepSqlTotalVo> sqlDatas = welcomeBedService.queryTotalSqlList(collegeId, sex);
  299. List<StudentTotalVo> students = welcomeStudentService.queryStudentTotal();
  300. List<String> sexs = new ArrayList<>();
  301. if (StringUtils.hasText(sex)) {
  302. sexs.add(sex);
  303. } else {
  304. sexs.add("男");
  305. sexs.add("女");
  306. }
  307. for (WelcomeOrg org : orgs) {
  308. for (String sexStr : sexs) {
  309. SleepTotalVo btv = new SleepTotalVo();
  310. btv.setCollege(org.getName());
  311. btv.setSex(sexStr);
  312. Optional<StudentTotalVo> ostudent = students.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex().equals(sexStr)).findFirst();
  313. if (ostudent != null && ostudent.isPresent()) {
  314. btv.setTotalData(ostudent.get().getTotal());
  315. } else {
  316. btv.setTotalData(0);
  317. }
  318. List<SleepSqlTotalVo> sqlDataCs = sqlDatas.stream().filter(e -> e.getCollege().equals(org.getName()) && e.getSex().equals(sexStr)).collect(Collectors.toList());
  319. if (sqlDataCs != null && sqlDataCs.size() > 0) {
  320. int toalData = btv.getTotalData();//sqlDataCs.get(0).getTotalData() == null ? 0 : sqlDataCs.get(0).getTotalData();
  321. int sleeper = sqlDataCs.get(0).getSleeper() == null ? 0 : sqlDataCs.get(0).getSleeper();
  322. int totalBed = sqlDataCs.get(0).getTotalBed() == null ? 0 : sqlDataCs.get(0).getTotalBed();
  323. //btv.setTotalData(toalData);//总人数
  324. btv.setSleeper(sleeper);//已入住人数
  325. btv.setUnSleeper((toalData - sleeper) < 0 ? 0 : (toalData - sleeper));//未入住人数
  326. btv.setTotalBed(totalBed);//总床数
  327. btv.setSleepBed(sleeper);//已入住床位数
  328. btv.setUnSleepBed((totalBed - sleeper) < 0 ? 0 : (totalBed - sleeper));//未入住床位数
  329. } else {
  330. //btv.setTotalData(0);//总人数
  331. btv.setSleeper(0);//已入住人数
  332. btv.setUnSleeper(0);//未入住人数
  333. btv.setTotalBed(0);//总床数
  334. btv.setSleepBed(0);//已入住床位数
  335. btv.setUnSleepBed(0);//未入住床位数
  336. }
  337. result.add(btv);
  338. }
  339. }
  340. //导出
  341. Row headerRow = sheet.createRow(0);
  342. headerRow.createCell(0).setCellValue("序号");
  343. headerRow.createCell(1).setCellValue("学院名称");
  344. headerRow.createCell(2).setCellValue("性别");
  345. headerRow.createCell(3).setCellValue("总人数");
  346. headerRow.createCell(4).setCellValue("已入住人数");
  347. headerRow.createCell(5).setCellValue("未入住人数");
  348. headerRow.createCell(6).setCellValue("总床位数");
  349. headerRow.createCell(7).setCellValue("已入住床位数");
  350. headerRow.createCell(8).setCellValue("未入住床位数");
  351. for (int i = 0; i < result.size(); i++) {
  352. SleepTotalVo bedData = result.get(i);
  353. Row dataRow = sheet.createRow(i + 1);
  354. dataRow.createCell(0).setCellValue(i + 1);
  355. dataRow.createCell(1).setCellValue(bedData.getCollege());
  356. dataRow.createCell(2).setCellValue(bedData.getSex());
  357. dataRow.createCell(3).setCellValue(bedData.getTotalData());
  358. dataRow.createCell(4).setCellValue(bedData.getSleeper());
  359. dataRow.createCell(5).setCellValue(bedData.getUnSleeper());
  360. dataRow.createCell(6).setCellValue(bedData.getTotalBed());
  361. dataRow.createCell(7).setCellValue(bedData.getSleepBed());
  362. dataRow.createCell(8).setCellValue(bedData.getUnSleepBed());
  363. }
  364. // 将工作簿写入文件
  365. ExcelUtils.excelDownload(workbook, "床位入住统计.xlsx", response);
  366. }
  367. }