1.核销接口

2.核销接口联调
3.核销记录
4.限制ip
5.定时清除访客
6.定时提取 核销记录 并处理
main
862857010@qq.com 2 years ago
parent 3b4b950f4c
commit 3e617d2daa
  1. 7
      src/main/java/com/cjy/back/ybsjAppointment/controller/YbsjyAppointmentSettingController.java
  2. 41
      src/main/java/com/cjy/back/ybsjAppointment/dao/YbsjyAppointmentRecordMapper.java
  3. 104
      src/main/java/com/cjy/back/ybsjAppointment/dao/YbsjyAppointmentRecordMapper.xml
  4. 4
      src/main/java/com/cjy/back/ybsjAppointment/dao/YbsjyAppointmentSettingMapper.xml
  5. 9
      src/main/java/com/cjy/back/ybsjAppointment/entity/AppointmentRequestTurnstileLogEntity.java
  6. 44
      src/main/java/com/cjy/back/ybsjAppointment/entity/AppointmentWriteOffLogEntity.java
  7. 75
      src/main/java/com/cjy/back/ybsjAppointment/entity/vo/ExtractRecordsDataVO.java
  8. 87
      src/main/java/com/cjy/back/ybsjAppointment/filter/IpRestrictionFilter.java
  9. 12
      src/main/java/com/cjy/back/ybsjAppointment/service/YbsjyAppointmentRecordService.java
  10. 5
      src/main/java/com/cjy/back/ybsjAppointment/service/YbsjyAppointmentSettingService.java
  11. 24
      src/main/java/com/cjy/back/ybsjAppointment/service/impl/YbsjyAppointmentRecordImpl.java
  12. 63
      src/main/java/com/cjy/back/ybsjAppointment/service/impl/YbsjyAppointmentSettingServiceImpl.java
  13. 66
      src/main/java/com/cjy/back/ybsjAppointment/task/ClearVisitorInformationTask.java
  14. 110
      src/main/java/com/cjy/back/ybsjAppointment/task/ExtractWriteOffRecordsTask.java
  15. 12
      src/main/java/com/cjy/util/HttpUtil.java
  16. 6
      src/main/resources/application.properties
  17. 1
      src/main/resources/spring-servlet.xml
  18. 1
      src/main/webapp/WEB-INF/spring-servlet.xml

@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
/**
* @author liangjiawei
@ -143,4 +144,10 @@ public class YbsjyAppointmentSettingController {
}
@RequestMapping("writeOff")
public ServerResponse writeOff(String time, String idCard) throws ParseException {
return ybsjyAppointmentSettingService.writeOff(time, idCard);
}
}

@ -1,10 +1,12 @@
package com.cjy.back.ybsjAppointment.dao;
import com.cjy.back.ybsjAppointment.entity.AppointmentWriteOffLogEntity;
import com.cjy.back.ybsjAppointment.entity.YbsjyAppointmentSettingEntity;
import com.cjy.back.ybsjAppointment.entity.vo.AppointmentDocumentsDetails;
import com.cjy.back.ybsjAppointment.entity.vo.AppointmentPersonVO;
import com.cjy.back.ybsjAppointment.entity.vo.GetAppointmentRecordVO;
import com.cjy.common.mybatis.page.PageParameter;
import com.cjy.util.ServerResponse;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -95,4 +97,43 @@ public interface YbsjyAppointmentRecordMapper {
* @return
*/
int updateDocumentsSate(Long Id);
int updateDocumentsSateList(@Param("ids") List<Long> id);
/**
* 核销
* @param time
* @param id
* @return
*/
int writeOff(@Param("time") String time , @Param("id") String id);
/**
* 通过日期和身份证获取到预约人信息
* @param date
* @param idCard
* @return
*/
Map<String,Object> getAppointmentPeopleInfo(@Param("date")String date, @Param("idCard") String idCard);
/**
* 保存核销日志
* @param appointmentWriteOffLogEntity
* @return
*/
int saveAppointmentWriteOffLog(AppointmentWriteOffLogEntity appointmentWriteOffLogEntity );
int saveAppointmentWriteOffLogList(List<AppointmentWriteOffLogEntity> appointmentWriteOffLogEntity );
/**
* 获取当天已核销或者取消的数据
* @return
*/
List<Map<String,Object> > getWrittenOffAppointmentData();
/**
* 修改数据清除状态
* @param ids
* @return
*/
int updateClearVisitorsState(@Param("ids") List<String> ids);
}

@ -3,6 +3,18 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cjy.back.ybsjAppointment.dao.YbsjyAppointmentRecordMapper">
<insert id="saveAppointmentWriteOffLog">
INSERT INTO ybsj_appointment_write_off_log(time, idCard, state)
VALUES (#{time}, #{idCard}, #{state});
</insert>
<insert id="saveAppointmentWriteOffLogList">
INSERT INTO ybsj_appointment_write_off_log( time, idCard, state)
values
<foreach item="item" collection="list" separator=",">
(#{item.time},#{item.idCard},#{item.state})
</foreach>
</insert>
<update id="deleteAppointmentRecord">
update ybsj_appointment_documents_info
set del_flag= 2,
@ -24,10 +36,41 @@
where appointment_documents_id = #{id}
</update>
<update id="updateAppointmentRecordSate">
update ybsj_appointment_people_info set expired_state=1,write_off=3,update_by=NOW() where id=#{id}
update ybsj_appointment_people_info
set expired_state=1,
write_off=3,
update_by=NOW()
where id = #{id}
</update>
<update id="updateDocumentsSate">
update ybsj_appointment_documents_info set appointment_documents_write_off =1,update_by=NOW() where id=#{id}
update ybsj_appointment_documents_info
set appointment_documents_write_off =1,
update_by=NOW()
where id = #{id}
</update>
<update id="writeOff">
update ybsj_appointment_people_info
set write_off_date=#{time},
write_off=1
where id = #{id}
</update>
<update id="updateClearVisitorsState">
update ybsj_appointment_people_info set clear_visitors=1 where 1=1
and id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="updateDocumentsSateList">
update ybsj_appointment_documents_info
set appointment_documents_write_off =1,
update_by=NOW()
where 1=1
and id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<select id="getAppointmentRecordListByPage" resultType="java.util.Map">
@ -195,28 +238,43 @@
</select>
<select id="getAppointmentNotWrittenOffRecord"
resultType="com.cjy.back.ybsjAppointment.entity.vo.AppointmentPersonVO">
SELECT
t1.id,
t1.`name`,
t1.phone,
t1.documents_type as documentsType ,
t1.documents_number as documentsNumber,
t1.reservation_code as reservationCode,
t1.appointment_documents_id as appointmentDocumentsId,
t1.appointment_time_info_id as appointmentTimeInfoId,
t1.qr_content as qrContent,
t1.appointment_date as appointmentDate,
t1.reservation_person as reservationPerson,
t2.end_time as endTime
FROM
ybsj_appointment_people_info t1
LEFT JOIN ybsj_appointment_time_info t2 on t1.appointment_time_info_id=t2.id
WHERE
t1.write_off_date IS NULL
and t1.write_off =0 and t1.del_flag!=2
-- AND t1.appointment_date = CURDATE()
SELECT t1.id,
t1.`name`,
t1.phone,
t1.documents_type as documentsType,
t1.documents_number as documentsNumber,
t1.reservation_code as reservationCode,
t1.appointment_documents_id as appointmentDocumentsId,
t1.appointment_time_info_id as appointmentTimeInfoId,
t1.qr_content as qrContent,
t1.appointment_date as appointmentDate,
t1.reservation_person as reservationPerson,
t2.end_time as endTime
FROM ybsj_appointment_people_info t1
LEFT JOIN ybsj_appointment_time_info t2 on t1.appointment_time_info_id = t2.id
WHERE t1.write_off_date IS NULL
AND t1.appointment_date = CURDATE()
and t1.write_off = 0
and t1.del_flag!=2
</select>
<select id="getNotWrittenOffCount" resultType="java.lang.Integer">
select count(*) from ybsj_appointment_people_info WHERE appointment_documents_id=#{id} and write_off=0
select count(*)
from ybsj_appointment_people_info
WHERE appointment_documents_id = #{id}
and write_off = 0
</select>
<select id="getAppointmentPeopleInfo" resultType="java.util.Map">
select id,name,phone,documents_type,documents_number,reservation_code,appointment_date,appointment_documents_id,appointment_time_info_id,write_off,qr_content,write_off_date,expired_state,reservation_person
from ybsj_appointment_people_info
where appointment_date = #{date}
and documents_number = #{idCard}
and write_off = 0
</select>
<select id="getWrittenOffAppointmentData" resultType="java.util.Map">
SELECT id,
documents_number as documentsNumber
FROM ybsj_appointment_people_info
WHERE clear_visitors = 0
</select>
</mapper>

@ -43,8 +43,8 @@
</insert>
<insert id="saveAppointmentRequestTurnstileLog">
INSERT INTO ybsj_appointment_request_turnstile_log (request_url, request_params, response_body, state)
VALUES ( #{requestUrl}, #{requestParams}, #{responseBody}, #{state})
INSERT INTO ybsj_appointment_request_turnstile_log (request_url, request_params, response_body, state,type)
VALUES ( #{requestUrl}, #{requestParams}, #{responseBody}, #{state},#{type})
</insert>
<update id="updateAppointmentSetting">
update ybsj_appointment_setting

@ -9,6 +9,7 @@ public class AppointmentRequestTurnstileLogEntity {
private String requestParams;
private String responseBody;
private String state;
private String type;
public String getRequestUrl() {
return requestUrl;
@ -41,4 +42,12 @@ public class AppointmentRequestTurnstileLogEntity {
public void setState(String state) {
this.state = state;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

@ -0,0 +1,44 @@
package com.cjy.back.ybsjAppointment.entity;
/**
* @author liangjiawei
* @createDate 2023/8/1
*/
public class AppointmentWriteOffLogEntity {
private Long id;
private String time;
private String idCard;
private String state;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}

@ -0,0 +1,75 @@
package com.cjy.back.ybsjAppointment.entity.vo;
/**
* @author liangjiawei
* @createDate 2023/8/1
*/
public class ExtractRecordsDataVO {
private String sn;
//是否有小
private String effective;
//进出
private String inOut;
private String idCard;
private String time;
//描述
private String describe;
//门号
private String doorId;
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getEffective() {
return effective;
}
public void setEffective(String effective) {
this.effective = effective;
}
public String getInOut() {
return inOut;
}
public void setInOut(String inOut) {
this.inOut = inOut;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public String getDoorId() {
return doorId;
}
public void setDoorId(String doorId) {
this.doorId = doorId;
}
}

@ -0,0 +1,87 @@
package com.cjy.back.ybsjAppointment.filter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* @author liangjiawei
* @createDate 2023/4/24
*/
@WebFilter
@Component
public class IpRestrictionFilter implements Filter {
@Value("${allowed.ip.list}")
private String allowedIps;
@Value("${allowed.method.methodList}")
private String methodConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
if (StringUtils.isBlank(allowedIps)) {
throw new ServletException("Allowed IPs not found.");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String method = ((HttpServletRequest)request).getRequestURI();
//先判断方法是否在配置中
List<String> methodList=Arrays.asList(methodConfig.split(","));
methodList.stream().forEach(item ->{
if(item.equals(method)){
// 获取请求 IP 地址并判断是否允许访问该接口...
if (allowedIps.contains(request.getRemoteAddr())) {
try {
chain.doFilter(request, response);
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
} else {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setStatus(HttpStatus.FORBIDDEN.value());
httpResponse.setCharacterEncoding("UTF-8"); // 设置字符编码为UTF-8
try {
httpResponse.getWriter().write("访问被禁止"); // 设置返回信息(中文)
} catch (IOException e) {
e.printStackTrace();
}
return ;
}
}else {
try {
chain.doFilter(request, response);
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
});
}
@Override
public void destroy() {
}
}

@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author liangjiawei
@ -88,4 +89,15 @@ public interface YbsjyAppointmentRecordService {
* @return
*/
int updateDocumentsSate(Long id);
/**
* 获取当天已核销或者取消的数据
*/
List<Map<String,Object> > getWrittenOffAppointmentData();
/**
* 修改数据清除状态
*/
int updateClearVisitorsState(List<String> ids);
}

@ -5,6 +5,7 @@ import com.cjy.back.ybsjAppointment.entity.vo.GetAppointmentRecordVO;
import com.cjy.back.ybsjAppointment.entity.vo.ReservationNowVO;
import com.cjy.util.ServerResponse;
import java.text.ParseException;
import java.util.List;
/**
@ -102,4 +103,8 @@ public interface YbsjyAppointmentSettingService {
ServerResponse writeOff(String time,String idCard) throws ParseException;
}

@ -7,13 +7,8 @@ import com.cjy.back.ybsjAppointment.entity.vo.GetAppointmentRecordVO;
import com.cjy.back.ybsjAppointment.service.YbsjyAppointmentRecordService;
import com.cjy.common.PageWrapper;
import com.cjy.util.ServerResponse;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
@ -302,4 +297,23 @@ public class YbsjyAppointmentRecordImpl implements YbsjyAppointmentRecordService
public int updateDocumentsSate(Long id) {
return ybsjyAppointmentRecordMapper.updateDocumentsSate(id);
}
/**
* 获取当天已核销或者取消的数据
* @return
*/
@Override
public List<Map<String,Object> > getWrittenOffAppointmentData() {
return ybsjyAppointmentRecordMapper.getWrittenOffAppointmentData();
}
/**
* 修改数据清除状态
* @param ids
* @return
*/
@Override
public int updateClearVisitorsState(List<String> ids) {
return ybsjyAppointmentRecordMapper.updateClearVisitorsState(ids);
}
}

@ -5,6 +5,7 @@ import com.cjy.back.ybsjAppointment.dao.YbsjyAppointmentRecordMapper;
import com.cjy.back.ybsjAppointment.dao.YbsjyAppointmentSettingMapper;
import com.cjy.back.ybsjAppointment.entity.AppointmentRequestTurnstileLogEntity;
import com.cjy.back.ybsjAppointment.entity.AppointmentTimeInfoEntity;
import com.cjy.back.ybsjAppointment.entity.AppointmentWriteOffLogEntity;
import com.cjy.back.ybsjAppointment.entity.YbsjyAppointmentSettingEntity;
import com.cjy.back.ybsjAppointment.entity.vo.*;
import com.cjy.back.ybsjAppointment.service.YbsjyAppointmentSettingService;
@ -18,6 +19,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -270,21 +274,21 @@ public class YbsjyAppointmentSettingServiceImpl implements YbsjyAppointmentSetti
item.setAppointmentDocumentsId(appointmentFormVO.getId());
item.setAppointmentDate(reservationNowVO.getAppointmentDate());
//设置权限
Map<String,String> map= new HashMap<>();
map.put("idCard",item.getDocumentsNumber());
map.put("startTime",item.getAppointmentDate()+" " +reservationNowVO.getStartTime()+":00");
map.put("endTime",item.getAppointmentDate()+" " +reservationNowVO.getEndTime()+":00");
String responseString =HttpUtil.sendPost(turnstileUrl+addAccessRight,map);
//记录访问日志
JSONObject accessRightResponseJson = JSONObject.parseObject(responseString);
//记录访问日志
AppointmentRequestTurnstileLogEntity addAccessRightAppointmentRequestTurnstileLogEntity=new AppointmentRequestTurnstileLogEntity();
addAccessRightAppointmentRequestTurnstileLogEntity.setRequestUrl(turnstileUrl+addAccessRight);
addAccessRightAppointmentRequestTurnstileLogEntity.setRequestParams(map.toString());
addAccessRightAppointmentRequestTurnstileLogEntity.setResponseBody(responseString);
addAccessRightAppointmentRequestTurnstileLogEntity.setState(accessRightResponseJson.get("code").toString());
ybsjyAppointmentSettingMapper.saveAppointmentRequestTurnstileLog(addAccessRightAppointmentRequestTurnstileLogEntity);
//
// Map<String,String> map= new HashMap<>();
// map.put("idCard",item.getDocumentsNumber());
// map.put("startTime",item.getAppointmentDate()+" " +reservationNowVO.getStartTime()+":00");
// map.put("endTime",item.getAppointmentDate()+" " +reservationNowVO.getEndTime()+":00");
// String responseString =HttpUtil.sendPost(turnstileUrl+addAccessRight,map);
// //记录访问日志
// JSONObject accessRightResponseJson = JSONObject.parseObject(responseString);
// //记录访问日志
// AppointmentRequestTurnstileLogEntity addAccessRightAppointmentRequestTurnstileLogEntity=new AppointmentRequestTurnstileLogEntity();
// addAccessRightAppointmentRequestTurnstileLogEntity.setRequestUrl(turnstileUrl+addAccessRight);
// addAccessRightAppointmentRequestTurnstileLogEntity.setRequestParams(map.toString());
// addAccessRightAppointmentRequestTurnstileLogEntity.setResponseBody(responseString);
// addAccessRightAppointmentRequestTurnstileLogEntity.setState(accessRightResponseJson.get("code").toString());
// ybsjyAppointmentSettingMapper.saveAppointmentRequestTurnstileLog(addAccessRightAppointmentRequestTurnstileLogEntity);
//添加访客
Map<String,String> map1= new HashMap<>();
@ -299,6 +303,7 @@ public class YbsjyAppointmentSettingServiceImpl implements YbsjyAppointmentSetti
VisitorResponseJsonAppointmentRequestTurnstileLogEntity.setRequestParams(map1.toString());
VisitorResponseJsonAppointmentRequestTurnstileLogEntity.setResponseBody(addVisitorResponseString);
VisitorResponseJsonAppointmentRequestTurnstileLogEntity.setState(addVisitorResponseJson.get("code").toString());
VisitorResponseJsonAppointmentRequestTurnstileLogEntity.setType("post");
ybsjyAppointmentSettingMapper.saveAppointmentRequestTurnstileLog(VisitorResponseJsonAppointmentRequestTurnstileLogEntity);
//获取二维码信息
@ -316,6 +321,7 @@ public class YbsjyAppointmentSettingServiceImpl implements YbsjyAppointmentSetti
appointmentRequestTurnstileLogEntity.setRequestParams(map2.toString());
appointmentRequestTurnstileLogEntity.setResponseBody(updateQRCodevResponseString);
appointmentRequestTurnstileLogEntity.setState(json.get("code").toString());
appointmentRequestTurnstileLogEntity.setType("post");
ybsjyAppointmentSettingMapper.saveAppointmentRequestTurnstileLog(appointmentRequestTurnstileLogEntity);
item.setQrContent(json1.get("二维码信息").toString());
});
@ -377,5 +383,32 @@ public class YbsjyAppointmentSettingServiceImpl implements YbsjyAppointmentSetti
return ServerResponse.createBySuccess(appointmentDocumentsDetails);
}
@Override
public ServerResponse writeOff(String time, String idCard) throws ParseException {
SimpleDateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = inputDateFormat.parse(time);
String formattedDate = outputDateFormat.format(date);
AppointmentWriteOffLogEntity appointmentWriteOffLogEntity =new AppointmentWriteOffLogEntity();
appointmentWriteOffLogEntity.setTime(time);
appointmentWriteOffLogEntity.setIdCard(idCard);
try {
Map<String,Object> map =ybsjyAppointmentRecordMapper.getAppointmentPeopleInfo(formattedDate.toString(),idCard.toString());
ybsjyAppointmentRecordMapper.writeOff(time,map.get("id").toString());
if(ybsjyAppointmentRecordMapper.getNotWrittenOffCount((Long) map.get("appointment_documents_id"))==0){
ybsjyAppointmentRecordMapper.updateDocumentsSate(Long.parseLong(map.get("appointment_documents_id").toString()));
}
appointmentWriteOffLogEntity.setState("200");
}catch (Exception e){
appointmentWriteOffLogEntity.setState("500");
}finally {
ybsjyAppointmentRecordMapper.saveAppointmentWriteOffLog(appointmentWriteOffLogEntity);
}
return ServerResponse.createBySuccess("接收成功");
}
}

@ -0,0 +1,66 @@
package com.cjy.back.ybsjAppointment.task;
import com.alibaba.fastjson.JSONObject;
import com.cjy.back.ybsjAppointment.dao.YbsjyAppointmentSettingMapper;
import com.cjy.back.ybsjAppointment.entity.AppointmentRequestTurnstileLogEntity;
import com.cjy.back.ybsjAppointment.service.YbsjyAppointmentRecordService;
import com.cjy.util.HttpUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author liangjiawei
* @createDate 2023/8/1
*/
@Component("clearVisitorInformationTask")
public class ClearVisitorInformationTask {
@Autowired
YbsjyAppointmentRecordService ybsjyAppointmentRecordService;
@Autowired
YbsjyAppointmentSettingMapper ybsjyAppointmentSettingMapper;
@Value("${turnstile.url}")
private String turnstileUrl;
@Value("${turnstile.clearSingleVisitor}")
private String clearSingleVisitor;
@Scheduled(cron = "0 0/45 * * * ?")
// @Scheduled(cron = "0 0/1 * * * ?")
public void clearVisitorInformationTask() {
//获取未清理权限的数据
List<Map<String, Object>> list = ybsjyAppointmentRecordService.getWrittenOffAppointmentData();
List<String> ids = new ArrayList<>();
list.stream().forEach(item -> {
String addVisitorResponseString = HttpUtil.doGet(turnstileUrl+clearSingleVisitor + "?idCard=" + item.get("documentsNumber"));
JSONObject addVisitorResponseJson = JSONObject.parseObject(addVisitorResponseString);
//记录访问日志
AppointmentRequestTurnstileLogEntity appointmentRequestTurnstileLogEntity = new AppointmentRequestTurnstileLogEntity();
appointmentRequestTurnstileLogEntity.setRequestUrl(turnstileUrl+clearSingleVisitor + "?idCard=" + item.get("documentsNumber"));
appointmentRequestTurnstileLogEntity.setType("get");
appointmentRequestTurnstileLogEntity.setResponseBody(addVisitorResponseString);
appointmentRequestTurnstileLogEntity.setState(addVisitorResponseJson.get("code").toString());
ybsjyAppointmentSettingMapper.saveAppointmentRequestTurnstileLog(appointmentRequestTurnstileLogEntity);
//修改数据清除状态
if (ids.size() < 500) {
ids.add(item.get("id").toString());
} else {
//修改数据状态
ybsjyAppointmentRecordService.updateClearVisitorsState(ids);
ids.clear();
ids.add(item.get("id").toString());
}
});
if (!ids.isEmpty()) {
//修改数据状态
ybsjyAppointmentRecordService.updateClearVisitorsState(ids);
}
}
}

@ -0,0 +1,110 @@
package com.cjy.back.ybsjAppointment.task;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cjy.back.ybsjAppointment.dao.YbsjyAppointmentRecordMapper;
import com.cjy.back.ybsjAppointment.entity.AppointmentWriteOffLogEntity;
import com.cjy.back.ybsjAppointment.entity.vo.ExtractRecordsDataVO;
import com.cjy.util.HttpUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author liangjiawei
* @createDate 2023/8/1
*/
@Component("extractWriteOffRecordsTask")
public class ExtractWriteOffRecordsTask {
@Value("${turnstile.extractRecords}")
private String extractRecords;
@Value("${turnstile.url}")
private String turnstileUrl;
@Autowired
YbsjyAppointmentRecordMapper ybsjyAppointmentRecordMapper;
@Scheduled(cron = "0 0/50 * * * ?")
// @Scheduled(cron = "0 0/1 * * * ?")
public void extractWriteOffRecordsTask() {
Map<String, String> params = new HashMap<>();
String extractRecordsString = HttpUtil.sendPost(turnstileUrl + extractRecords, params);
JSONObject extractRecordsJson = JSONObject.parseObject(extractRecordsString);
JSONArray extractRecordsDataJson = extractRecordsJson.getJSONArray("data");
List<ExtractRecordsDataVO> list = extractRecordsDataJson.toJavaList(ExtractRecordsDataVO.class);
List<AppointmentWriteOffLogEntity> appointmentWriteOffLogEntityList = new ArrayList<>();
List<Long> ids = new ArrayList<>();
//过滤出 描述是 操作员远程开门 的数据
List<ExtractRecordsDataVO> newList = list.stream().filter(i -> i.getDescribe().equals("操作员远程开门")).collect(Collectors.toList());
newList.stream().forEach(item -> {
SimpleDateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = item.getTime();
String idCard = item.getIdCard();
Date date = null;
try {
date = inputDateFormat.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
String formattedDate = outputDateFormat.format(date);
AppointmentWriteOffLogEntity appointmentWriteOffLogEntity = new AppointmentWriteOffLogEntity();
appointmentWriteOffLogEntity.setTime(time);
appointmentWriteOffLogEntity.setIdCard(idCard);
try {
Map<String, Object> map = ybsjyAppointmentRecordMapper.getAppointmentPeopleInfo(formattedDate, idCard);
if (map != null) {
ybsjyAppointmentRecordMapper.writeOff(time, map.get("id").toString());
if (ybsjyAppointmentRecordMapper.getNotWrittenOffCount((Long) map.get("appointment_documents_id")) == 0) {
if (ids.size() < 200) {
ids.add(Long.parseLong(map.get("appointment_documents_id").toString()));
} else {
ybsjyAppointmentRecordMapper.updateDocumentsSateList(ids);
ids.clear();
ids.add(Long.parseLong(map.get("appointment_documents_id").toString()));
}
}
appointmentWriteOffLogEntity.setState("200");
} else {
appointmentWriteOffLogEntity.setState("500");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (appointmentWriteOffLogEntityList.size() < 200) {
appointmentWriteOffLogEntityList.add(appointmentWriteOffLogEntity);
} else {
ybsjyAppointmentRecordMapper.saveAppointmentWriteOffLogList(appointmentWriteOffLogEntityList);
appointmentWriteOffLogEntityList.clear();
appointmentWriteOffLogEntityList.add(appointmentWriteOffLogEntity);
}
}
});
if (!appointmentWriteOffLogEntityList.isEmpty()) {
ybsjyAppointmentRecordMapper.saveAppointmentWriteOffLogList(appointmentWriteOffLogEntityList);
}
if (!ids.isEmpty()) {
ybsjyAppointmentRecordMapper.updateDocumentsSateList(ids);
}
}
}

@ -562,11 +562,15 @@ public class HttpUtil {
public static String sendPost(String url, Map<String, String> params) {
try {
StringBuilder requestBody = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
requestBody.append("\"").append(entry.getKey()).append("\":\"").append(entry.getValue()).append("\",");
if(!params.isEmpty()){
for (Map.Entry<String, String> entry : params.entrySet()) {
requestBody.append("\"").append(entry.getKey()).append("\":\"").append(entry.getValue()).append("\",");
}
requestBody.deleteCharAt(requestBody.length() - 1); // 删除最后一个逗号
requestBody.insert(0, "{").append("}");
}
requestBody.deleteCharAt(requestBody.length() - 1); // 删除最后一个逗号
requestBody.insert(0, "{").append("}");
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

@ -195,4 +195,10 @@ turnstile.url =http://192.168.130.155:33307
turnstile.addAccessRight = /access/addAccessRight
turnstile.addVisitor = /access/addVisitor
turnstile.updateQRCodev = /access/updateQRCode
turnstile.clearSingleVisitor = /access/clearSingleVisitor
turnstile.extractRecords = /access/extractRecords
allowed.ip.list=192.168.110.158
allowed.method.methodList= /appointmentSetting/writeOff

@ -31,6 +31,7 @@
<value>/upload</value>
<!--<value>/stat</value>-->
<value>/xiongan.html</value>
<value>/appointmentSetting/writeOff</value>
<value>/handan.html</value>
<value>/usersecret.html</value>
</list>

@ -82,6 +82,7 @@
<value>/shopping</value>
<value>/upload</value>
<value>/mobile</value>
<value>/appointmentSetting/writeOff</value>
<!-- <value>/stat</value>-->
<value>/ybsjSysParam/selectParamByUserKey</value>
<value>/ybsjSysParam/adminChart</value>

Loading…
Cancel
Save