RepairUserController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. package com.repair.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.repair.annotation.PassToken;
  4. import com.repair.api.RepairUserControllerAPI;
  5. import com.repair.common.utils.paramUtils;
  6. import com.repair.model.enumModel.eUserZZ;
  7. import com.repair.model.pojo.*;
  8. import com.repair.model.request.ArticleBuildRequest;
  9. import com.repair.model.request.insertRepairUserRequest;
  10. import com.repair.model.request.updateAddressBookRequest;
  11. import com.repair.model.request.updateUserDataRequest;
  12. import com.repair.model.result.CommonResult;
  13. import com.repair.model.result.PageUtils;
  14. import com.repair.model.vo.*;
  15. import com.repair.services.*;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import org.springframework.validation.BindingResult;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import java.lang.reflect.Array;
  22. import java.text.SimpleDateFormat;
  23. import java.util.ArrayList;
  24. import java.util.Arrays;
  25. import java.util.Date;
  26. import java.util.List;
  27. import java.util.stream.Collectors;
  28. /**
  29. * <p>
  30. * 前端控制器
  31. * </p>
  32. *
  33. * @author ceshi
  34. * @since 2023-07-11
  35. */
  36. @RestController
  37. public class RepairUserController implements RepairUserControllerAPI {
  38. @Autowired
  39. private RepairUserService repairUserService;
  40. @Autowired
  41. private RepairRecordService repairRecordService;
  42. @Autowired
  43. private RepairArticleBuildService repairArticleBuildService;
  44. @Autowired
  45. private RepairDispatchRecordService repairDispatchRecordService;
  46. @Autowired
  47. private RepairCollaborateRecordService repairCollaborateRecordService;
  48. /**
  49. * 添加员工数据接口
  50. *
  51. * @param irur 员工数据
  52. * @return
  53. */
  54. @Override
  55. @Transactional(rollbackFor = {Exception.class})
  56. public CommonResult InsertRepairUser(insertRepairUserRequest irur) throws Exception {
  57. System.out.println("添加员工接口参数:" + JSON.toJSON(irur));
  58. if (irur == null) {
  59. return CommonResult.fail("参数不能为空!");
  60. }
  61. if (irur.getUserZzid() == null) {
  62. return CommonResult.fail("身份不能为空!");
  63. }
  64. //无法添加用户
  65. if (irur.getUserZzid().intValue() == eUserZZ.User.getValue()){
  66. return CommonResult.fail("无法添加用户身份!");
  67. }
  68. if (irur.getUserName() == null) {
  69. return CommonResult.fail("姓名不能为空!");
  70. }
  71. if (irur.getTeamId() == null) {
  72. return CommonResult.fail("维修班不能为空!");
  73. }
  74. if (irur.getSchoolId() == null) {
  75. return CommonResult.fail("校区不能为空!");
  76. }
  77. //参数判断
  78. if (irur.getUserZzid().intValue() != eUserZZ.Offline.getValue()) {
  79. if (irur.getCardNumber() == null) {
  80. return CommonResult.fail("微校卡号不能为空!");
  81. }
  82. if (irur.getUserPhone() == null) {
  83. return CommonResult.fail("手机号码不能为空!");
  84. }
  85. if (irur.getArticleBuilds() == null || irur.getArticleBuilds().size() <= 0) {
  86. return CommonResult.fail("报修关联楼栋不能为空!");
  87. }
  88. }
  89. RepairUser data = repairUserService.getRepairByCardNumber(irur.getCardNumber());
  90. RepairUser ru = new RepairUser();
  91. if (data != null && !data.getUserZzid().equals(eUserZZ.User.getValue())) {
  92. return CommonResult.fail("该卡号已存在!");
  93. } else if (data != null) {
  94. ru.setId(data.getId());
  95. }
  96. try {
  97. //报修类型关联楼栋新增 修改 删除
  98. List<RepairArticleBuild> ArticleBuilds = new ArrayList<>();//传进来的报修楼栋
  99. if (irur.getUserZzid().intValue() != eUserZZ.Offline.getValue() && data != null) {
  100. List<RepairArticleBuild> oldArticleBuilds = repairArticleBuildService.getRepairArticleBuilds(data.getId());
  101. for (ArticleBuildRequest articleBuild : irur.getArticleBuilds()) {
  102. if (articleBuild.getArticleId() == null) {
  103. return CommonResult.fail("报修物品ID不能为空");
  104. }
  105. if (articleBuild.getBuildIds() == null || articleBuild.getBuildIds().size() <= 0) {
  106. return CommonResult.fail("关联楼栋不能为空");
  107. }
  108. RepairArticleBuild articleData = new RepairArticleBuild();
  109. articleData.setUserId(data.getId());
  110. articleData.setArticleId(articleBuild.getArticleId());
  111. articleData.setBuildId(StringUtils.join(articleBuild.getBuildIds(), ','));
  112. if (articleBuild.getId() != null && articleBuild.getId() > 0) {
  113. articleData.setId(articleBuild.getId());
  114. }
  115. ArticleBuilds.add(articleData);
  116. }
  117. if (ArticleBuilds.size() > 0) {
  118. boolean result = repairArticleBuildService.saveorUpdateArticleBuildBatch(ArticleBuilds);
  119. if (!result) {
  120. throw new Exception("添加失败!");
  121. }
  122. }
  123. List<Integer> newDatas = ArticleBuilds.stream().map(RepairArticleBuild::getId).collect(Collectors.toList());
  124. List<Integer> oldDatas = oldArticleBuilds.stream().map(RepairArticleBuild::getId).collect(Collectors.toList());
  125. //oldData集合不在newDatas集合中的内容
  126. List<Integer> ids = oldDatas.stream().filter(item -> !newDatas.contains(item)).collect(Collectors.toList());//需要删除的id
  127. if (ids.size() > 0) {
  128. int deleted = repairArticleBuildService.deletedArticleBuildByIds(ids);
  129. if (deleted <= 0) {
  130. throw new Exception("添加失败!");
  131. }
  132. }
  133. }
  134. ru.setUserName(irur.getUserName());
  135. ru.setUserZzid(irur.getUserZzid());
  136. ru.setTeamId(irur.getTeamId());
  137. ru.setSchoolId(irur.getSchoolId());
  138. ru.setWorkType(irur.getWorkType());
  139. ru.setState(1);//设置正常接单
  140. if (irur.getUserZzid().intValue() != eUserZZ.Offline.getValue()) {
  141. ru.setCardNumber(irur.getCardNumber());
  142. ru.setUserPhone(irur.getUserPhone());
  143. ru.setAcceptanceAssessTime(irur.getAcceptanceAssessTime());
  144. ru.setMaintenanceAssessTime(irur.getMaintenanceAssessTime());
  145. }
  146. int result = 0;
  147. if (data != null) {
  148. result = repairUserService.updateRepairUser(ru);
  149. } else {
  150. result = repairUserService.insertRepairUser(ru);
  151. if (result > 0 && irur.getUserZzid().intValue() != eUserZZ.Offline.getValue()) {
  152. for (ArticleBuildRequest articleBuild : irur.getArticleBuilds()) {
  153. RepairArticleBuild articleData = new RepairArticleBuild();
  154. articleData.setUserId(result);
  155. articleData.setArticleId(articleBuild.getArticleId());
  156. articleData.setBuildId(StringUtils.join(articleBuild.getBuildIds(), ','));
  157. ArticleBuilds.add(articleData);
  158. }
  159. if (ArticleBuilds.size() > 0) {
  160. boolean insertBatch = repairArticleBuildService.saveArticleBuildBatch(ArticleBuilds);
  161. if (!insertBatch) {
  162. throw new Exception("添加失败!");
  163. }
  164. }
  165. }
  166. }
  167. if (result <= 0) {
  168. throw new Exception("添加失败!");
  169. }
  170. } catch (Exception e) {
  171. throw new Exception("添加失败!");
  172. }
  173. return CommonResult.ok("添加成功");
  174. }
  175. /**
  176. * 根据ID编辑用户数据的名称、手机号、身份、工种、维修班、楼栋关联ID、是否能转换、接单考核时间、维修考核时间
  177. *
  178. * @param ra 员工数据
  179. * @param bindingResult 是否为空判断
  180. * @return
  181. */
  182. @Override
  183. @Transactional(rollbackFor = {Exception.class})
  184. public CommonResult updateRepairUserById(updateUserDataRequest ra, BindingResult bindingResult) throws Exception {
  185. if (bindingResult.hasErrors()) {
  186. String st = paramUtils.getParamError(bindingResult);
  187. return CommonResult.fail(st);
  188. }
  189. RepairUser data = new RepairUser();
  190. data.setId(ra.getId());
  191. data.setSchoolId(ra.getSchoolId());
  192. data.setUserName(ra.getUserName());
  193. data.setUserPhone(ra.getUserPhone());
  194. data.setUserZzid(ra.getUserZzid());
  195. data.setWorkType(ra.getWorkType());
  196. data.setTeamId(ra.getTeamId());
  197. data.setIsChange(ra.getIsChange());
  198. data.setAcceptanceAssessTime(ra.getAcceptanceAssessTime());
  199. data.setMaintenanceAssessTime(ra.getMaintenanceAssessTime());
  200. try {
  201. if (ra.getArticleBuilds() != null && ra.getArticleBuilds().size() > 0) {
  202. //报修类型关联楼栋新增 修改 删除
  203. List<RepairArticleBuild> ArticleBuilds = new ArrayList<>();//传进来的报修楼栋
  204. List<RepairArticleBuild> oldArticleBuilds = repairArticleBuildService.getRepairArticleBuilds(data.getId());
  205. for (ArticleBuildRequest articleBuild : ra.getArticleBuilds()) {
  206. if (articleBuild.getArticleId() == null) {
  207. return CommonResult.fail("报修物品ID不能为空");
  208. }
  209. if (articleBuild.getBuildIds() == null || articleBuild.getBuildIds().size() <= 0) {
  210. return CommonResult.fail("关联楼栋不能为空");
  211. }
  212. RepairArticleBuild articleData = new RepairArticleBuild();
  213. articleData.setUserId(ra.getId());
  214. articleData.setArticleId(articleBuild.getArticleId());
  215. articleData.setBuildId(StringUtils.join(articleBuild.getBuildIds(), ','));
  216. if (articleBuild.getId() != null && articleBuild.getId() > 0) {
  217. articleData.setId(articleBuild.getId());
  218. }
  219. ArticleBuilds.add(articleData);
  220. }
  221. if(ArticleBuilds.size() > 0){
  222. boolean result = repairArticleBuildService.saveorUpdateArticleBuildBatch(ArticleBuilds);
  223. if (!result) {
  224. throw new Exception("添加失败!");
  225. }
  226. }
  227. List<Integer> newDatas = ArticleBuilds.stream().map(RepairArticleBuild::getId).collect(Collectors.toList());
  228. List<Integer> oldDatas = oldArticleBuilds.stream().map(RepairArticleBuild::getId).collect(Collectors.toList());
  229. //oldData集合不在newDatas集合中的内容
  230. List<Integer> ids = oldDatas.stream().filter(item -> !newDatas.contains(item)).collect(Collectors.toList());//需要删除的id
  231. if (ids.size() > 0) {
  232. int deleted = repairArticleBuildService.deletedArticleBuildByIds(ids);
  233. if (deleted <= 0) {
  234. throw new Exception("修改失败!");
  235. }
  236. }
  237. }
  238. int result = repairUserService.updateRepairUser(data);
  239. if (result <= 0) {
  240. throw new Exception("修改失败!");
  241. }
  242. } catch (Exception e) {
  243. throw new Exception("修改失败!");
  244. }
  245. return CommonResult.ok("修改成功");
  246. }
  247. /**
  248. * 用户分页数据查询
  249. *
  250. * @param currentPage 当前页
  251. * @param pageCount 一页数据条数
  252. * @param keyWord 关键字
  253. * @param teamId 维修班
  254. * 校方人员:0
  255. * 第三方人员:1
  256. * @param schoolId 校区ID
  257. * 黄家湖校区:1
  258. * 墨轩湖校区:2
  259. * @return
  260. */
  261. @Override
  262. public CommonResult queryPageRepairUser(int currentPage, int pageCount, String keyWord, Integer teamId, Integer schoolId) {
  263. PageUtils<RepairUserVo> result = repairUserService.queryPageRepairUser(currentPage, pageCount, keyWord, teamId, schoolId);
  264. List<ArticleBuildVo> articleBuilds = new ArrayList<>();
  265. if (result.getList() != null && result.getList().size() > 0) {
  266. List<Integer> userIds = result.getList().stream().map(RepairUserVo::getId).collect(Collectors.toList());
  267. articleBuilds = repairUserService.queryArticleBuilds(userIds);
  268. }
  269. for (RepairUserVo r : result.getList()) {
  270. r.setArticleNames(r.getArticleNames() == null ? new ArrayList() : r.getArticleNames());
  271. r.setBuildNames(r.getBuildNames() == null ? new ArrayList() : r.getBuildNames());
  272. r.setArticleBuilds(r.getArticleBuilds() == null ? new ArrayList<>() : r.getArticleBuilds());
  273. r.setUserZzname(eUserZZ.stringOf(r.getUserZzid()));
  274. if (articleBuilds.size() > 0) {
  275. List<ArticleBuildVo> ownerArticleBuild = articleBuilds.stream().filter(e -> e.getUserId().intValue() == r.getId()).collect(Collectors.toList());
  276. for (ArticleBuildVo owner : ownerArticleBuild) {
  277. r.getArticleNames().add(owner.getArticleName());
  278. r.getBuildNames().add(owner.getArticleName() + ":" + owner.getBuildName());
  279. ArticleBuildRequest data = new ArticleBuildRequest();
  280. data.setId(owner.getId());
  281. data.setArticleId(owner.getArticleId());
  282. List<String> builds = Arrays.asList(owner.getBuildId().split(","));
  283. data.setBuildIds(builds);
  284. r.getArticleBuilds().add(data);
  285. }
  286. }
  287. }
  288. return CommonResult.ok(result);
  289. }
  290. /**
  291. * 将原有用户表中的报修关联楼栋弄进去
  292. */
  293. @Override
  294. @PassToken
  295. public CommonResult insertArticleBuild() {
  296. List<RepairArticleBuild> result = repairArticleBuildService.queryRepairArticleBuilds();
  297. List<RepairUser> users = repairUserService.queryRepairUserByArticle();
  298. List<RepairArticleBuild> insertData = new ArrayList<>();
  299. for (RepairUser user : users) {
  300. List<String> articleIds = Arrays.asList(user.getArticleId().split(","));
  301. for (String articleId : articleIds) {
  302. if (result != null) {
  303. long count = result.stream().filter(e -> e.getArticleId().toString().equals(articleId) && e.getUserId().equals(user.getId())).count();
  304. if (count <= 0) {
  305. RepairArticleBuild insertD = new RepairArticleBuild();
  306. insertD.setArticleId(Integer.valueOf(articleId));
  307. insertD.setBuildId(user.getBuildId());
  308. insertD.setUserId(user.getId());
  309. insertData.add(insertD);
  310. }
  311. }
  312. }
  313. }
  314. boolean insertResult = repairArticleBuildService.saveArticleBuildBatch(insertData);
  315. return insertResult ? CommonResult.ok("操作成功") : CommonResult.fail("操作失败");
  316. }
  317. /**
  318. * 根据ID删除用户数据
  319. *
  320. * @param id 数据ID
  321. * @return
  322. */
  323. @Override
  324. @Transactional(rollbackFor = {Exception.class})
  325. public CommonResult deleteRepairUserById(int id) throws Exception {
  326. RepairUser data = repairUserService.getRepairById(id);
  327. if (data == null) {
  328. return CommonResult.fail("当前数据不存在,删除失败!");
  329. }
  330. //判断是否存在待接单或维修中数据:
  331. //接单表中是否存在当前用户ID的数据条数
  332. //维修表中是否存在当前用户ID的数据条数
  333. DisReceCountVo disCount = repairDispatchRecordService.queryDisReceCount(Integer.valueOf(id));
  334. if (disCount != null) {
  335. if (disCount.getDisCount() > 0 || disCount.getRecCount() > 0) {
  336. return CommonResult.fail("存在待处理工单,无法删除");
  337. }
  338. }
  339. try {
  340. //删除维修关联楼栋数据
  341. if(data.getUserZzid().intValue() != eUserZZ.Offline.getValue()){
  342. int deleteData = repairArticleBuildService.deleteRepairArticleBuildByWrapper(id);
  343. if(deleteData <= 0){
  344. throw new Exception("删除失败!");
  345. }
  346. }
  347. int result = repairUserService.deleteRepairUserById(id);
  348. if(result <= 0){
  349. throw new Exception("删除失败!");
  350. }
  351. } catch (Exception e) {
  352. throw new Exception("删除失败!");
  353. }
  354. return CommonResult.ok("删除成功");
  355. }
  356. /**
  357. * 根据卡号查找用户信息
  358. *
  359. * @param cardNumber 卡号
  360. * @return
  361. */
  362. @Override
  363. public CommonResult queryRepairUserByCardNumber(String cardNumber) {
  364. RepairUser result = repairUserService.getRepairByCardNumber(cardNumber);
  365. return result == null ? CommonResult.fail("数据不存在") : CommonResult.ok(result);
  366. }
  367. /**
  368. * 员工分页数据查询
  369. *
  370. * @param currentPage 当前页数
  371. * @param pageCount 一页数据条数
  372. * @param recordId 报修记录ID
  373. * @param keyWord 关键字
  374. * @return
  375. */
  376. @Override
  377. public CommonResult queryPageRepairUsers(int currentPage, int pageCount, Integer recordId, String keyWord) {
  378. RepairRecord rr = repairRecordService.getRepairById(recordId);
  379. if (rr == null) {
  380. return CommonResult.fail("维修单无效,获取维修师傅数据失败");
  381. }
  382. String dateNow = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  383. PageUtils<AutoDispatchUserVo> users = repairUserService.autoDispatchUser(currentPage, pageCount, rr.getSchoolId(), dateNow, rr.getArticleId(), rr.getBuildId(), keyWord);
  384. return CommonResult.ok(users);
  385. }
  386. /**
  387. * 转线下的员工列表分页数据查询
  388. *
  389. * @param currentPage 当前页数
  390. * @param pageCount 一页数据条数
  391. * @param recordId 报修记录ID
  392. * @param keyWord 关键字
  393. * @return
  394. */
  395. @Override
  396. public CommonResult queryPageOfflineUsers(Integer currentPage, Integer pageCount, Integer recordId, String keyWord) {
  397. currentPage = currentPage == null || currentPage <= 0 ? 1 : currentPage;
  398. pageCount = pageCount == null || pageCount <= 0 ? 100 : pageCount;
  399. RepairRecord rr = repairRecordService.getRepairById(recordId);
  400. if (rr == null) {
  401. return CommonResult.fail("维修单无效,获取维修师傅数据失败");
  402. }
  403. PageUtils<AutoOfflineUserVo> users = repairUserService.autoOfflineRepairUser(currentPage, pageCount, rr.getSchoolId(), keyWord);
  404. return CommonResult.ok(users);
  405. }
  406. /**
  407. * 通讯录数据查询
  408. *
  409. * @param schoolId 校区ID
  410. * @param userId 用户ID
  411. * @param keyWord 关键字
  412. * @return
  413. */
  414. @Override
  415. public CommonResult getAddressBook(Integer schoolId, Integer userId, String keyWord) {
  416. List<AddressBookVo> abs = repairUserService.queryAddressBook(userId, schoolId, keyWord);
  417. List<AddressBookListVo> result = new ArrayList<>();
  418. for (int i = 0; i <= 1; i++) {
  419. AddressBookListVo data = new AddressBookListVo();
  420. data.setId(i);
  421. data.setName(i == 0 ? "校方人员" : "第三方人员");
  422. List<AddressBookVo> abDatas = abs.stream().filter(e -> e.getTeamId() == data.getId()).collect(Collectors.toList());
  423. data.setList(abDatas);
  424. result.add(data);
  425. }
  426. return CommonResult.ok(result);
  427. }
  428. /**
  429. * 编辑通讯录
  430. *
  431. * @param uabp 通讯录数据
  432. * @param bindingResult 是否为空判断
  433. * @return
  434. */
  435. @Override
  436. public CommonResult updateAddressBook(updateAddressBookRequest uabp, BindingResult bindingResult) {
  437. if (bindingResult.hasErrors()) {
  438. String st = paramUtils.getParamError(bindingResult);
  439. return CommonResult.fail(st);
  440. }
  441. RepairUser data = repairUserService.getRepairById(uabp.getId());
  442. if (data == null) {
  443. return CommonResult.fail("当前数据不存在,编辑失败!");
  444. }
  445. data.setUserPhone(uabp.getPhone());
  446. data.setState(uabp.getState());
  447. data.setWorkType(uabp.getWorkType());
  448. data.setAcceptanceAssessTime(uabp.getAcceptanceTime());
  449. data.setMaintenanceAssessTime(uabp.getMaintenanceTime());
  450. int result = repairUserService.updateRepairUser(data);
  451. return result <= 0 ? CommonResult.fail("更新失败") : CommonResult.ok("更新成功");
  452. }
  453. /**
  454. * 协作人员分页数据查询
  455. *
  456. * @param currentPage 当前页数
  457. * @param pageCount 一页数据条数
  458. * @param schoolId 校区ID
  459. * @param userId 用户ID
  460. * @param keyWord 关键字
  461. * @return
  462. */
  463. @Override
  464. public CommonResult queryPageCollaborator(Integer currentPage, Integer pageCount, Integer schoolId, Integer userId, String keyWord, Integer recordId) {
  465. String dateNow = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  466. if (currentPage == null) {
  467. currentPage = 1;
  468. }
  469. if (pageCount == null) {
  470. pageCount = 100;
  471. }
  472. if (recordId != null) {
  473. RepairCollaborateRecord cdata = repairCollaborateRecordService.getRepairByRecordId(recordId);
  474. if (cdata == null) {
  475. return CommonResult.fail("协作申请无效,获取维修师傅数据失败");
  476. }
  477. userId = cdata.getUserId();
  478. }
  479. PageUtils<RepairWorkTypeVo> result = repairUserService.queryCollaboratorUser(currentPage, pageCount, schoolId, userId, dateNow, keyWord);
  480. return CommonResult.ok(result);
  481. }
  482. /**
  483. * 后勤首页工单完成排行榜
  484. *
  485. * @param currentPage 当前页数
  486. * @param pageCount 一页数据条数
  487. * @param schoolId 校区ID
  488. * @return
  489. */
  490. @Override
  491. public CommonResult queryPositiveReviewPage(int currentPage, int pageCount, Integer schoolId) {
  492. PageUtils<PositiveReviewVo> result = repairUserService.queryPositiveReviewPage(currentPage, pageCount, schoolId);
  493. return CommonResult.ok(result);
  494. }
  495. }