package com.template.controller; import com.seewo.open.sdk.DefaultSeewoClient; import com.seewo.open.sdk.SeewoClient; import com.seewo.open.sdk.auth.Account; import com.template.api.SmartVisitorControllerAPI; import com.template.common.utils.TimeExchange; import com.template.common.utils.paramUtils; import com.template.config.CosConfig; import com.template.config.SeewoConfig; import com.template.model.enumModel.eApproveStatu; import com.template.model.enumModel.eExamineStatu; import com.template.model.enumModel.eVisitorType; import com.template.model.pojo.*; import com.template.model.request.otherAppointmentRequest; import com.template.model.request.parentsAppointmentRequest; import com.template.model.result.CommonResult; import com.template.model.result.PageUtils; import com.template.model.vo.AffiliateUserVo; import com.template.model.vo.VisitorPageVo; import com.template.services.SmartUserService; import com.template.services.SmartVisitorService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author ceshi * @since 2023-12-04 */ @RestController public class SmartVisitorController implements SmartVisitorControllerAPI { @Autowired private SmartVisitorService smartVisitorService; @Autowired private SmartUserService smartUserService; @Resource private SeewoConfig seewoConfig; /** * 新增访客预约 * * @param smartApply 访客预约数据 * @param bindingResult * @return */ @Override public CommonResult insertSmartVisitor(SmartVisitor smartApply, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } int result = smartVisitorService.insertSmartVisitor(smartApply); return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败"); } /** * 更新访客预约 * * @param sa 访客预约数据 * @param bindingResult * @return */ @Override public CommonResult updateSmartVisitorById(SmartVisitor sa, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } int result = smartVisitorService.updateSmartVisitor(sa); return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败"); } /** * 访客预约分页数据查询 * * @param currentPage 当前页数 * @param pageCount 一页数据条数 * @param name 查询名称 * @return */ @Override public CommonResult queryPageSmartVisitor(int currentPage, int pageCount, String name) { PageUtils result = smartVisitorService.queryPageSmartVisitors(currentPage, pageCount, name); return CommonResult.ok(result); } @Override public CommonResult deleteSmartVisitorById(int id) { SmartVisitor data = smartVisitorService.getSmartById(id); if (data == null) { return CommonResult.fail("当前数据不存在,删除失败!"); } int result = smartVisitorService.deleteSmartVisitorById(id); return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败"); } @Override public CommonResult parentsAppointment(parentsAppointmentRequest par, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } //参数判断 判断受访学生信息是否为空 if (par.getStudents() == null) { return CommonResult.fail("请选择受访学生"); } if (par.getStudents().size() <= 0) { return CommonResult.fail("请选择受访学生"); } //根据用户ID查询相关信息 SmartUser su = smartUserService.getSmartById(par.getUserId()); if (su == null) { return CommonResult.fail("当前用户信息不合法,无法进行预约!"); } List svs = new ArrayList<>(); for (AffiliateUserVo student : par.getStudents()) { SmartVisitor sv = new SmartVisitor(); sv.setUserId(par.getUserId()); sv.setUserName(su.getName()); sv.setUserPhone(su.getPhone()); sv.setUserNumber(su.getIdCard()); sv.setPeerNum(par.getPeerNum()); //sv.setCarNum(par.getCarNum());家长预约不能填写车牌号 sv.setVisitReason(par.getVisitReason()); sv.setStatu(eApproveStatu.Audit.getValue()); sv.setVisitorTime(TimeExchange.StringToDate(par.getVisitorTime(), "yyyy-MM-dd HH:mm:ss")); sv.setVisitorDeadline(TimeExchange.StringToDate(TimeExchange.TimeDesH(sv.getVisitorTime(),4),"yyyy-MM-dd HH:mm:ss")); sv.setRespondent(student.getId()); sv.setResponcode(student.getCardNo()); sv.setRespondentName(student.getName()); //将第一个受访学生的部门ID带过去 sv.setDepartmentId(student.getDepartmentId()); sv.setVisitorType(eVisitorType.Parent.getValue()); svs.add(sv); } boolean result = smartVisitorService.insertVisitorBatch(svs); return result ? CommonResult.ok("预约成功,等待审批通过") : CommonResult.fail("预约失败"); } @Override public CommonResult otherAppointment(otherAppointmentRequest oar, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } //根据用户ID查询相关信息 SmartUser su = smartUserService.getSmartById(oar.getUserId()); if (su == null) { return CommonResult.fail("当前用户信息不合法,无法进行预约!"); } SmartVisitor sv = new SmartVisitor(); sv.setUserId(oar.getUserId()); sv.setUserName(su.getName()); sv.setUserPhone(su.getPhone()); sv.setUserNumber(su.getIdCard()); sv.setPeerNum(oar.getPeerNum()); sv.setCarNum(oar.getCarNum()); sv.setVisitReason(oar.getVisitReason()); sv.setStatu(eApproveStatu.Audit.getValue()); sv.setVisitorTime(TimeExchange.StringToDate(oar.getVisitorTime(), "yyyy-MM-dd HH:mm:ss")); sv.setVisitorDeadline(TimeExchange.StringToDate(TimeExchange.getEndOfDayStr(new Date()),"yyyy-MM-dd HH:mm:ss")); sv.setRespondentName(oar.getRespondentName()); sv.setRespondentPhone(oar.getRespondentPhone()); sv.setVisitorType(eVisitorType.Other.getValue()); int result = smartVisitorService.insertSmartVisitor(sv); return result > 0 ? CommonResult.ok("预约成功,等待审批通过") : CommonResult.ok("预约失败"); } @Override public CommonResult appointmentPageRecord(int currentPage, int pageCount, int userId, int type) { PageUtils result = smartVisitorService.smartVisitorPageByUserId(currentPage, pageCount, userId, type); return CommonResult.ok(result); } /** * 访客记录审核 * * @param id 数据ID * @param type 操作类型: * 同意,并推送:1 * 拒绝:2 * @return */ @Override @Transactional(rollbackFor = {Exception.class}) public CommonResult examineRecord(int id, int type) throws Exception { SmartVisitor visitor = smartVisitorService.getSmartById(id); if (visitor == null) { return CommonResult.fail("访客记录已失效,审核失败!"); } try{ if (type == eExamineStatu.Agree.getValue()) { visitor.setStatu(eApproveStatu.Pushed.getValue()); //家长访客预约才需要将消息推送到希沃电子班牌 if (visitor.getVisitorType().intValue() == eVisitorType.Parent.getValue()) { String content = visitor.getRespondentName() + "你的家长将于" + TimeExchange.chineseDateTime(visitor.getVisitorTime()) + "到校!"; //将预约信息推送到希沃班牌 CommonResult seewo = pushInfo(visitor.getUserPhone(), visitor.getResponcode(), content); if(!seewo.getCode().equals("200")){ throw new Exception("审核失败"); } } //将数据写入门禁系统逻辑 else{ //家长不能使用车牌系统 其他的可以使用车牌逻辑 } } else if (type == eExamineStatu.Refused.getValue()) { visitor.setStatu(eApproveStatu.Refused.getValue()); } int result = smartVisitorService.updateSmartVisitor(visitor); if(result <= 0){ throw new Exception("审核失败"); } }catch (Exception e){ throw new Exception("审核失败"); } return CommonResult.ok("审核成功"); } /** * 将预约信息推送到希沃电子班牌 * * @param parentPhone 预约手机号(家长手机号 在希沃中学生会和家长手机号绑定 可以绑定多个家长) * @param studentCode 学生编号 希沃中的学生编号和万载系统中的一致 * @param content 消息内容 * @return */ public CommonResult pushInfo(String parentPhone, String studentCode, String content) { //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); HomeSchoolServiceSendNoteToKidParam param = new HomeSchoolServiceSendNoteToKidParam(); //响应体,MimeType为 application/json HomeSchoolServiceSendNoteToKidParam.RequestBody requestBody = HomeSchoolServiceSendNoteToKidParam.RequestBody.builder() .build(); param.setRequestBody(requestBody); //query HomeSchoolServiceSendNoteToKidParam.Query query = HomeSchoolServiceSendNoteToKidParam.Query.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .senderPhone(parentPhone) .studentCode(studentCode) .type(1) .content(content) .autoRegister(0) .build(); requestBody.setQuery(query); param.setRequestBody(requestBody); HomeSchoolServiceSendNoteToKidRequest request = new HomeSchoolServiceSendNoteToKidRequest(param); System.out.println("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 HomeSchoolServiceSendNoteToKidResult result = seewoClient.invoke(request); System.out.println("出参:" + result); if(!result.getMessage().equals("success")){ CommonResult.fail(); } return CommonResult.ok(); } }