SmartVisitorController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package com.template.controller;
  2. import com.seewo.open.sdk.DefaultSeewoClient;
  3. import com.seewo.open.sdk.SeewoClient;
  4. import com.seewo.open.sdk.auth.Account;
  5. import com.template.api.SmartVisitorControllerAPI;
  6. import com.template.common.utils.TimeExchange;
  7. import com.template.common.utils.paramUtils;
  8. import com.template.config.CosConfig;
  9. import com.template.config.SeewoConfig;
  10. import com.template.model.enumModel.eApproveStatu;
  11. import com.template.model.enumModel.eExamineStatu;
  12. import com.template.model.enumModel.eVisitorType;
  13. import com.template.model.pojo.*;
  14. import com.template.model.request.otherAppointmentRequest;
  15. import com.template.model.request.parentsAppointmentRequest;
  16. import com.template.model.result.CommonResult;
  17. import com.template.model.result.PageUtils;
  18. import com.template.model.vo.AffiliateUserVo;
  19. import com.template.model.vo.VisitorPageVo;
  20. import com.template.services.SmartUserService;
  21. import com.template.services.SmartVisitorService;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import org.springframework.validation.BindingResult;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.RestController;
  28. import javax.annotation.Resource;
  29. import java.util.ArrayList;
  30. import java.util.Date;
  31. import java.util.List;
  32. import java.util.stream.Collectors;
  33. /**
  34. * <p>
  35. * 前端控制器
  36. * </p>
  37. *
  38. * @author ceshi
  39. * @since 2023-12-04
  40. */
  41. @RestController
  42. public class SmartVisitorController implements SmartVisitorControllerAPI {
  43. @Autowired
  44. private SmartVisitorService smartVisitorService;
  45. @Autowired
  46. private SmartUserService smartUserService;
  47. @Resource
  48. private SeewoConfig seewoConfig;
  49. /**
  50. * 新增访客预约
  51. *
  52. * @param smartApply 访客预约数据
  53. * @param bindingResult
  54. * @return
  55. */
  56. @Override
  57. public CommonResult insertSmartVisitor(SmartVisitor smartApply, BindingResult bindingResult) {
  58. if (bindingResult.hasErrors()) {
  59. String st = paramUtils.getParamError(bindingResult);
  60. return CommonResult.fail(st);
  61. }
  62. int result = smartVisitorService.insertSmartVisitor(smartApply);
  63. return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
  64. }
  65. /**
  66. * 更新访客预约
  67. *
  68. * @param sa 访客预约数据
  69. * @param bindingResult
  70. * @return
  71. */
  72. @Override
  73. public CommonResult updateSmartVisitorById(SmartVisitor sa, BindingResult bindingResult) {
  74. if (bindingResult.hasErrors()) {
  75. String st = paramUtils.getParamError(bindingResult);
  76. return CommonResult.fail(st);
  77. }
  78. int result = smartVisitorService.updateSmartVisitor(sa);
  79. return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
  80. }
  81. /**
  82. * 访客预约分页数据查询
  83. *
  84. * @param currentPage 当前页数
  85. * @param pageCount 一页数据条数
  86. * @param name 查询名称
  87. * @return
  88. */
  89. @Override
  90. public CommonResult queryPageSmartVisitor(int currentPage, int pageCount, String name) {
  91. PageUtils<SmartVisitor> result = smartVisitorService.queryPageSmartVisitors(currentPage, pageCount, name);
  92. return CommonResult.ok(result);
  93. }
  94. @Override
  95. public CommonResult deleteSmartVisitorById(int id) {
  96. SmartVisitor data = smartVisitorService.getSmartById(id);
  97. if (data == null) {
  98. return CommonResult.fail("当前数据不存在,删除失败!");
  99. }
  100. int result = smartVisitorService.deleteSmartVisitorById(id);
  101. return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
  102. }
  103. @Override
  104. public CommonResult parentsAppointment(parentsAppointmentRequest par, BindingResult bindingResult) {
  105. if (bindingResult.hasErrors()) {
  106. String st = paramUtils.getParamError(bindingResult);
  107. return CommonResult.fail(st);
  108. }
  109. //参数判断 判断受访学生信息是否为空
  110. if (par.getStudents() == null) {
  111. return CommonResult.fail("请选择受访学生");
  112. }
  113. if (par.getStudents().size() <= 0) {
  114. return CommonResult.fail("请选择受访学生");
  115. }
  116. //根据用户ID查询相关信息
  117. SmartUser su = smartUserService.getSmartById(par.getUserId());
  118. if (su == null) {
  119. return CommonResult.fail("当前用户信息不合法,无法进行预约!");
  120. }
  121. List<SmartVisitor> svs = new ArrayList<>();
  122. for (AffiliateUserVo student : par.getStudents()) {
  123. SmartVisitor sv = new SmartVisitor();
  124. sv.setUserId(par.getUserId());
  125. sv.setUserName(su.getName());
  126. sv.setUserPhone(su.getPhone());
  127. sv.setUserNumber(su.getIdCard());
  128. sv.setPeerNum(par.getPeerNum());
  129. //sv.setCarNum(par.getCarNum());家长预约不能填写车牌号
  130. sv.setVisitReason(par.getVisitReason());
  131. sv.setStatu(eApproveStatu.Audit.getValue());
  132. sv.setVisitorTime(TimeExchange.StringToDate(par.getVisitorTime(), "yyyy-MM-dd HH:mm:ss"));
  133. sv.setVisitorDeadline(TimeExchange.StringToDate(TimeExchange.TimeDesH(sv.getVisitorTime(),4),"yyyy-MM-dd HH:mm:ss"));
  134. sv.setRespondent(student.getId());
  135. sv.setResponcode(student.getCardNo());
  136. sv.setRespondentName(student.getName());
  137. //将第一个受访学生的部门ID带过去
  138. sv.setDepartmentId(student.getDepartmentId());
  139. sv.setVisitorType(eVisitorType.Parent.getValue());
  140. svs.add(sv);
  141. }
  142. boolean result = smartVisitorService.insertVisitorBatch(svs);
  143. return result ? CommonResult.ok("预约成功,等待审批通过") : CommonResult.fail("预约失败");
  144. }
  145. @Override
  146. public CommonResult otherAppointment(otherAppointmentRequest oar, BindingResult bindingResult) {
  147. if (bindingResult.hasErrors()) {
  148. String st = paramUtils.getParamError(bindingResult);
  149. return CommonResult.fail(st);
  150. }
  151. //根据用户ID查询相关信息
  152. SmartUser su = smartUserService.getSmartById(oar.getUserId());
  153. if (su == null) {
  154. return CommonResult.fail("当前用户信息不合法,无法进行预约!");
  155. }
  156. SmartVisitor sv = new SmartVisitor();
  157. sv.setUserId(oar.getUserId());
  158. sv.setUserName(su.getName());
  159. sv.setUserPhone(su.getPhone());
  160. sv.setUserNumber(su.getIdCard());
  161. sv.setPeerNum(oar.getPeerNum());
  162. sv.setCarNum(oar.getCarNum());
  163. sv.setVisitReason(oar.getVisitReason());
  164. sv.setStatu(eApproveStatu.Audit.getValue());
  165. sv.setVisitorTime(TimeExchange.StringToDate(oar.getVisitorTime(), "yyyy-MM-dd HH:mm:ss"));
  166. sv.setVisitorDeadline(TimeExchange.StringToDate(TimeExchange.getEndOfDayStr(new Date()),"yyyy-MM-dd HH:mm:ss"));
  167. sv.setRespondentName(oar.getRespondentName());
  168. sv.setRespondentPhone(oar.getRespondentPhone());
  169. sv.setVisitorType(eVisitorType.Other.getValue());
  170. int result = smartVisitorService.insertSmartVisitor(sv);
  171. return result > 0 ? CommonResult.ok("预约成功,等待审批通过") : CommonResult.ok("预约失败");
  172. }
  173. @Override
  174. public CommonResult appointmentPageRecord(int currentPage, int pageCount, int userId, int type) {
  175. PageUtils<VisitorPageVo> result = smartVisitorService.smartVisitorPageByUserId(currentPage, pageCount, userId, type);
  176. return CommonResult.ok(result);
  177. }
  178. /**
  179. * 访客记录审核
  180. *
  181. * @param id 数据ID
  182. * @param type 操作类型:
  183. * 同意,并推送:1
  184. * 拒绝:2
  185. * @return
  186. */
  187. @Override
  188. @Transactional(rollbackFor = {Exception.class})
  189. public CommonResult examineRecord(int id, int type) throws Exception {
  190. SmartVisitor visitor = smartVisitorService.getSmartById(id);
  191. if (visitor == null) {
  192. return CommonResult.fail("访客记录已失效,审核失败!");
  193. }
  194. try{
  195. if (type == eExamineStatu.Agree.getValue()) {
  196. visitor.setStatu(eApproveStatu.Pushed.getValue());
  197. //家长访客预约才需要将消息推送到希沃电子班牌
  198. if (visitor.getVisitorType().intValue() == eVisitorType.Parent.getValue()) {
  199. String content = visitor.getRespondentName() + "你的家长将于" + TimeExchange.chineseDateTime(visitor.getVisitorTime()) + "到校!";
  200. //将预约信息推送到希沃班牌
  201. CommonResult seewo = pushInfo(visitor.getUserPhone(), visitor.getResponcode(), content);
  202. if(!seewo.getCode().equals("200")){
  203. throw new Exception("审核失败");
  204. }
  205. }
  206. //将数据写入门禁系统逻辑
  207. else{
  208. //家长不能使用车牌系统 其他的可以使用车牌逻辑
  209. }
  210. } else if (type == eExamineStatu.Refused.getValue()) {
  211. visitor.setStatu(eApproveStatu.Refused.getValue());
  212. }
  213. int result = smartVisitorService.updateSmartVisitor(visitor);
  214. if(result <= 0){
  215. throw new Exception("审核失败");
  216. }
  217. }catch (Exception e){
  218. throw new Exception("审核失败");
  219. }
  220. return CommonResult.ok("审核成功");
  221. }
  222. /**
  223. * 将预约信息推送到希沃电子班牌
  224. *
  225. * @param parentPhone 预约手机号(家长手机号 在希沃中学生会和家长手机号绑定 可以绑定多个家长)
  226. * @param studentCode 学生编号 希沃中的学生编号和万载系统中的一致
  227. * @param content 消息内容
  228. * @return
  229. */
  230. public CommonResult pushInfo(String parentPhone, String studentCode, String content) {
  231. //初始化客户端
  232. SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  233. HomeSchoolServiceSendNoteToKidParam param = new HomeSchoolServiceSendNoteToKidParam();
  234. //响应体,MimeType为 application/json
  235. HomeSchoolServiceSendNoteToKidParam.RequestBody requestBody = HomeSchoolServiceSendNoteToKidParam.RequestBody.builder()
  236. .build();
  237. param.setRequestBody(requestBody);
  238. //query
  239. HomeSchoolServiceSendNoteToKidParam.Query query = HomeSchoolServiceSendNoteToKidParam.Query.builder()
  240. .appId(seewoConfig.getAppId())
  241. .schoolUid(seewoConfig.getSchoolId())
  242. .senderPhone(parentPhone)
  243. .studentCode(studentCode)
  244. .type(1)
  245. .content(content)
  246. .autoRegister(0)
  247. .build();
  248. requestBody.setQuery(query);
  249. param.setRequestBody(requestBody);
  250. HomeSchoolServiceSendNoteToKidRequest request = new HomeSchoolServiceSendNoteToKidRequest(param);
  251. System.out.println("入参:" + request);
  252. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  253. //request.setServerUrl("https://openapi.test.seewo.com")
  254. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  255. HomeSchoolServiceSendNoteToKidResult result = seewoClient.invoke(request);
  256. System.out.println("出参:" + result);
  257. if(!result.getMessage().equals("success")){
  258. CommonResult.fail();
  259. }
  260. return CommonResult.ok();
  261. }
  262. }