passExamCheck(Long classId);
+
+
+}
diff --git a/src/main/java/com/subsidy/mapper/RenshejuHistoryMapper.java b/src/main/java/com/subsidy/mapper/RenshejuHistoryMapper.java
new file mode 100644
index 0000000..d71c37f
--- /dev/null
+++ b/src/main/java/com/subsidy/mapper/RenshejuHistoryMapper.java
@@ -0,0 +1,18 @@
+package com.subsidy.mapper;
+
+import com.subsidy.model.RenshejuHistoryDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 人社局推送失败记录表 Mapper 接口
+ * 
+ *
+ * @author Tuyp
+ * @since 2023-02-07
+ */
+ @Repository
+public interface RenshejuHistoryMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/subsidy/mapper/VodPlayHistoryMapper.java b/src/main/java/com/subsidy/mapper/VodPlayHistoryMapper.java
index df1fcc2..93e34cd 100644
--- a/src/main/java/com/subsidy/mapper/VodPlayHistoryMapper.java
+++ b/src/main/java/com/subsidy/mapper/VodPlayHistoryMapper.java
@@ -96,6 +96,10 @@ public interface VodPlayHistoryMapper extends BaseMapper {
      */
     List getVodPlayDay(Long classId, Long memberId, Date endDate);
 
+    /**
+     * 找到某个人最新的学习记录
+     */
+//    Long memberLatestRecord(Long memberId);
 
     double getStudyTotal();
 
diff --git a/src/main/java/com/subsidy/model/CompanyDictDO.java b/src/main/java/com/subsidy/model/CompanyDictDO.java
index 76af168..9643b32 100644
--- a/src/main/java/com/subsidy/model/CompanyDictDO.java
+++ b/src/main/java/com/subsidy/model/CompanyDictDO.java
@@ -56,6 +56,11 @@ public class CompanyDictDO extends BaseModel {
     private String address;
 
     /**
+     * 区域
+     */
+    private String areaName;
+
+    /**
      * 是否需要跳转到Q学友
      */
     private Boolean qxyStatus;
diff --git a/src/main/java/com/subsidy/model/RenshejuHistoryDO.java b/src/main/java/com/subsidy/model/RenshejuHistoryDO.java
new file mode 100644
index 0000000..d6a1567
--- /dev/null
+++ b/src/main/java/com/subsidy/model/RenshejuHistoryDO.java
@@ -0,0 +1,44 @@
+package com.subsidy.model;
+
+import com.subsidy.util.BaseModel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 
+ * 人社局推送失败记录表
+ * 
+ *
+ * @author Tuyp
+ * @since 2023-02-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("rensheju_history")
+public class RenshejuHistoryDO extends BaseModel {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 接口名称
+     */
+    private String interfaceName;
+
+    /**
+     * 入参
+     */
+    private String inputParam;
+
+    /**
+     * 出参
+     */
+    private Object outputParam;
+
+
+}
diff --git a/src/main/java/com/subsidy/model/VodPlayHistoryDO.java b/src/main/java/com/subsidy/model/VodPlayHistoryDO.java
index 2086fba..ec42acd 100644
--- a/src/main/java/com/subsidy/model/VodPlayHistoryDO.java
+++ b/src/main/java/com/subsidy/model/VodPlayHistoryDO.java
@@ -48,6 +48,11 @@ public class VodPlayHistoryDO extends BaseModel {
     private Integer playLength;
 
     /**
+     * 暂停时长
+     */
+    private Integer suspendLength;
+
+    /**
      * 播放视频位置
      */
     private Integer playRecord;
diff --git a/src/main/java/com/subsidy/service/ActivityDetectionService.java b/src/main/java/com/subsidy/service/ActivityDetectionService.java
index a02bb4c..777ebef 100644
--- a/src/main/java/com/subsidy/service/ActivityDetectionService.java
+++ b/src/main/java/com/subsidy/service/ActivityDetectionService.java
@@ -23,4 +23,5 @@ public interface ActivityDetectionService extends IService 
 
     IPage getCheckHistory(GetCheckHistoryDTO getCheckHistoryDTO);
 
+    String verifyError(ActivityDetectionDO activityDetectionDO);
 }
diff --git a/src/main/java/com/subsidy/service/RenSheJuService.java b/src/main/java/com/subsidy/service/RenSheJuService.java
new file mode 100644
index 0000000..99a89bd
--- /dev/null
+++ b/src/main/java/com/subsidy/service/RenSheJuService.java
@@ -0,0 +1,32 @@
+package com.subsidy.service;
+
+import com.subsidy.dto.renshe.*;
+import com.subsidy.vo.renshe.RensheResponseVO;
+import com.subsidy.vo.renshe.RensheStringVO;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface RenSheJuService {
+
+    RensheResponseVO classBaseInfo() throws IOException;
+
+    RensheResponseVO classHourBehavior() throws IOException;
+
+    RensheResponseVO uploadChapterBehavior() throws IOException;
+
+    RensheResponseVO uploadClassAnswerQuestionBehavior()throws IOException;
+
+    List uploadImage()throws IOException;
+
+    RensheResponseVO getClassCodeByPrivateKey()throws IOException;
+
+    RensheResponseVO uploadClassCode()throws IOException;
+
+    RensheResponseVO getErrorClass()throws IOException;
+
+    RensheStringVO clear()throws IOException;
+
+    void test();
+
+}
diff --git a/src/main/java/com/subsidy/service/RenshejuHistoryService.java b/src/main/java/com/subsidy/service/RenshejuHistoryService.java
new file mode 100644
index 0000000..73ef5ca
--- /dev/null
+++ b/src/main/java/com/subsidy/service/RenshejuHistoryService.java
@@ -0,0 +1,16 @@
+package com.subsidy.service;
+
+import com.subsidy.model.RenshejuHistoryDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 
+ * 人社局推送失败记录表 服务类
+ * 
+ *
+ * @author Tuyp
+ * @since 2023-02-07
+ */
+public interface RenshejuHistoryService extends IService {
+
+}
diff --git a/src/main/java/com/subsidy/service/impl/ActivityDetectionServiceImpl.java b/src/main/java/com/subsidy/service/impl/ActivityDetectionServiceImpl.java
index e2f1f6e..42e0f47 100644
--- a/src/main/java/com/subsidy/service/impl/ActivityDetectionServiceImpl.java
+++ b/src/main/java/com/subsidy/service/impl/ActivityDetectionServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.subsidy.common.exception.HttpException;
 import com.subsidy.dto.detection.GetCheckHistoryDTO;
 import com.subsidy.dto.detection.VerifyDTO;
+import com.subsidy.mapper.VodPlayHistoryMapper;
 import com.subsidy.model.ActivityDetectionDO;
 import com.subsidy.mapper.ActivityDetectionMapper;
 import com.subsidy.service.ActivityDetectionService;
@@ -13,6 +14,7 @@ import com.subsidy.util.ActivityDetectionUtils;
 import com.subsidy.util.ConstantUtils;
 import com.subsidy.vo.activity.GetCheckHistoryVO;
 import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
@@ -28,6 +30,9 @@ import javax.servlet.http.HttpServletRequest;
 @Service
 public class ActivityDetectionServiceImpl extends ServiceImpl implements ActivityDetectionService {
 
+    @Autowired
+    private VodPlayHistoryMapper vodPlayHistoryMapper;
+
     public String verify(VerifyDTO verifyDTO, HttpServletRequest request){
 
         try{
@@ -47,6 +52,11 @@ public class ActivityDetectionServiceImpl extends ServiceImpl()
                                 .lambda()
                                 .eq(ClassMemberMappingDO::getMemberId, imageCheckRecordDO.getMemberId())
                                 .eq(ClassMemberMappingDO::getClassId, imageCheckRecordDO.getClassId()));
-
-                        classMemberMappingDO.setPhoto(imageCheckRecordDO.getPhoto());
-                        classMemberMappingMapper.updateById(classMemberMappingDO);
+                        if (StringUtils.isEmpty(classMemberMappingDO.getPhoto())){
+                            classMemberMappingDO.setPhoto(imageCheckRecordDO.getPhoto());
+                            classMemberMappingMapper.updateById(classMemberMappingDO);
+                        }
                     }
                 } else {
                     activityDetectionDO.setStatus(0);
diff --git a/src/main/java/com/subsidy/service/impl/RenSheJuServiceImpl.java b/src/main/java/com/subsidy/service/impl/RenSheJuServiceImpl.java
new file mode 100644
index 0000000..25dd12e
--- /dev/null
+++ b/src/main/java/com/subsidy/service/impl/RenSheJuServiceImpl.java
@@ -0,0 +1,572 @@
+package com.subsidy.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.subsidy.common.configure.RenSheConfig;
+import com.subsidy.dto.renshe.*;
+import com.subsidy.mapper.ClassDictMapper;
+import com.subsidy.mapper.RenSheJuMapper;
+import com.subsidy.mapper.RenshejuHistoryMapper;
+import com.subsidy.model.ClassDictDO;
+import com.subsidy.model.ExerciseDoneResultDO;
+import com.subsidy.model.OprMemDictDO;
+import com.subsidy.model.RenshejuHistoryDO;
+import com.subsidy.service.RenSheJuService;
+import com.subsidy.util.OSSUtils;
+import com.subsidy.util.RenSheJuConstant;
+import com.subsidy.vo.renshe.*;
+import net.sf.json.JSONObject;
+import okhttp3.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+public class RenSheJuServiceImpl implements RenSheJuService {
+
+    @Autowired
+    private RenSheJuMapper renSheJuMapper;
+
+    @Autowired
+    private RenSheConfig renSheConfig;
+
+    @Autowired
+    private ClassDictMapper classDictMapper;
+
+    @Autowired
+    RenshejuHistoryMapper renshejuHistoryMapper;
+
+    public RensheResponseVO classBaseInfo() throws IOException {
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+        //拼数据
+        ClassBaseInfoDTO classBaseInfoDTO = new ClassBaseInfoDTO();
+        classBaseInfoDTO.setPrivateKey(getSecret());
+
+        List epidemicSituationClassBasics = new ArrayList<>();
+
+        //查找前一天产生数据的班级
+        List classIds = renSheJuMapper.newClasses();
+        for (Long classId : classIds) {
+            EpidemicSituationClassBasic epidemicSituationClassBasic = new EpidemicSituationClassBasic();
+            //班级基本信息
+            ClassBaseInfoVO classBaseInfoVO = renSheJuMapper.classBaseInfo(classId);
+            BeanUtils.copyProperties(classBaseInfoVO, epidemicSituationClassBasic);
+            epidemicSituationClassBasic.setDownCode(classBaseInfoVO.getDownCode());
+
+            //章节
+            List chapterLists = renSheJuMapper.classChapters(classId);
+            ChapterList2 chapterList2 = chapterLists.get(chapterLists.size() - 1);
+            chapterList2.setIsExam(1);
+            epidemicSituationClassBasic.setChapterList(chapterLists);
+
+            //学员列表
+            List memberVOS = renSheJuMapper.classMembers(classId);
+            epidemicSituationClassBasic.setStudentList(memberVOS);
+
+            epidemicSituationClassBasics.add(epidemicSituationClassBasic);
+        }
+        classBaseInfoDTO.setEpidemicSituationClassBasic(epidemicSituationClassBasics);
+
+        System.out.println(JSONObject.fromObject(classBaseInfoDTO).toString());
+
+        RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(classBaseInfoDTO).toString());
+//        Request request = new Request.Builder()
+//                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/uploadClass")
+//                .method("POST", body)
+//                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+//                .addHeader("Content-Type", "application/json")
+//                .build();
+//        Response response = client.newCall(request).execute();
+//        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+//        RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+//        renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_2);
+//        renshejuHistoryDO.setInputParam(JSONObject.fromObject(classBaseInfoDTO).toString());
+//        renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+//        renshejuHistoryMapper.insert(renshejuHistoryDO);
+//        System.out.println(rensheResponseVO);
+//        return rensheResponseVO;
+        return null;
+
+    }
+
+    public RensheResponseVO classHourBehavior() throws IOException {
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+        ClassHourBehaviorDTO classHourBehaviorDTO = new ClassHourBehaviorDTO();
+
+        classHourBehaviorDTO.setPrivateKey(getSecret());
+
+        List classHourBasics = new ArrayList<>();
+
+        //前一天新增视频学习数据的班级
+        List dailyStudyInfoVOS = renSheJuMapper.dailyStudyInfo();
+        for (DailyStudyInfoVO dailyStudyInfoVO : dailyStudyInfoVOS) {
+            ClassHourBasic classHourBasic = new ClassHourBasic();
+            BeanUtils.copyProperties(dailyStudyInfoVO, classHourBasic);
+            classHourBasic.setDownCode(dailyStudyInfoVO.getDownCode());
+
+            //上线时间列表
+            //找到当天每次上线下线时间
+            //上线时间
+            List loginRecords = renSheJuMapper.loginRecords(dailyStudyInfoVO.getMemberId());
+            //下线时间
+            List loginOutRecords = renSheJuMapper.loginOutRecords(dailyStudyInfoVO.getMemberId());
+
+            List loginLists = new ArrayList<>();
+            for (int i = 0; i < loginRecords.size(); i++) {
+                LoginList loginList = new LoginList();
+                loginList.setIp(loginRecords.get(i).getIpAddress());
+                loginList.setStartTime(Timestamp.valueOf(loginRecords.get(i).getCreateDate()).getTime());
+                loginList.setEndTime(Timestamp.valueOf(loginOutRecords.get(i).getCreateDate()).getTime());
+
+                //查看这个人该时间段的学习记录
+                List chapterList3s = renSheJuMapper.dailyStudyRecords(dailyStudyInfoVO.getMemberId(), dailyStudyInfoVO.getDownCode(), loginRecords.get(0).getCreateDate().toString().replace("T", " "), loginOutRecords.get(i).getCreateDate().toString().replace("T", " "));
+                loginList.setChapterList(chapterList3s);
+                loginLists.add(loginList);
+            }
+            classHourBasic.setLoginList(loginLists);
+
+            //活跃度列表
+            List activityLists = new ArrayList<>();
+            List activityDetectionDOS = renSheJuMapper.dailyActivities(dailyStudyInfoVO.getDownCode(), dailyStudyInfoVO.getMemberId());
+            for (DailyActivitiesVO dailyActivitiesVO : activityDetectionDOS) {
+
+                ActivityList activityList = new ActivityList();
+                if (dailyActivitiesVO.getAccess() == 1) {
+                    activityList.setAccess(0);
+                } else {
+                    activityList.setAccess(1);
+                    activityList.setErrorInfo(2);
+                }
+                activityList.setActivityDetection(2);
+                activityList.setActivityTime(dailyActivitiesVO.getActivityTime());
+                activityLists.add(activityList);
+            }
+            classHourBasic.setActivityList(activityLists);
+
+            classHourBasics.add(classHourBasic);
+        }
+        classHourBehaviorDTO.setClassHourBasic(classHourBasics);
+
+        System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(classHourBehaviorDTO));
+
+        RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(classHourBehaviorDTO).toString());
+
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/uploadClassHourBehavior")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .addHeader("Content-Type", "application/json")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_3);
+            renshejuHistoryDO.setInputParam(JSONObject.fromObject(classHourBehaviorDTO).toString());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+        System.out.println(rensheResponseVO);
+        return rensheResponseVO;
+    }
+
+    public RensheResponseVO uploadChapterBehavior() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+        UploadChapterBehaviorDTO uploadChapterBehaviorDTO = new UploadChapterBehaviorDTO();
+
+        uploadChapterBehaviorDTO.setPrivateKey(getSecret());
+
+        List chapterExamBasics = new ArrayList<>();
+
+        List dailyExamBasicVOS = renSheJuMapper.dailyExamBasic();
+
+        for (DailyExamBasicVO dailyExamBasicVO : dailyExamBasicVOS) {
+
+            //章节课程考试时间列表
+            ChapterExamBasic chapterExamBasic = new ChapterExamBasic();
+            BeanUtils.copyProperties(dailyExamBasicVO, chapterExamBasic);
+            chapterExamBasic.setDownCode(dailyExamBasicVO.getDownCode());
+
+            //最后一节课作为chapterCode
+            String vodId = renSheJuMapper.classVodName(dailyExamBasicVO.getDownCode());
+            chapterExamBasic.setChapterCode(vodId);
+
+            //考试活跃度列表
+            List activityLists = new ArrayList<>();
+            List activityDetectionDOS = renSheJuMapper.examActivities(dailyExamBasicVO.getDownCode(), dailyExamBasicVO.getMemberId());
+            for (ExamActivitiesVO dailyActivitiesVO : activityDetectionDOS) {
+
+                ActivityList activityList = new ActivityList();
+                if (null == dailyActivitiesVO.getAccess() || 0 == dailyActivitiesVO.getAccess()) {
+                    activityList.setAccess(1);
+                    activityList.setErrorInfo(1);
+                } else {
+                    activityList.setAccess(0);
+                }
+                activityList.setActivityDetection(1);
+                activityList.setActivityTime(dailyActivitiesVO.getActivityTime());
+                activityLists.add(activityList);
+            }
+            chapterExamBasic.setActivityList(activityLists);
+
+            //考试时间列表
+            //上线时间
+            List loginRecords = renSheJuMapper.loginRecords(dailyExamBasicVO.getMemberId());
+            //下线时间
+            List loginOutRecords = renSheJuMapper.loginOutRecords(dailyExamBasicVO.getMemberId());
+
+            List examLists = new ArrayList();
+
+            for (int i = 0; i < loginRecords.size(); i++) {
+                //找到该时间段内的测评
+                List exerciseDoneResultDOS = renSheJuMapper.dailyExerciseDone(dailyExamBasicVO.getMemberId(), loginRecords.get(i).getCreateDate().toString().replace("T", " "), loginOutRecords.get(i).getCreateDate().toString().replace("T", " "));
+                for (ExerciseDoneResultDO exerciseDoneResultDO : exerciseDoneResultDOS) {
+                    ExamList examList = new ExamList();
+                    examList.setStartTime(Timestamp.valueOf(exerciseDoneResultDO.getStartDate()).getTime());
+                    examList.setEndTime(Timestamp.valueOf(exerciseDoneResultDO.getCreateDate()).getTime());
+                    examList.setIp(loginRecords.get(i).getIpAddress());
+                    examLists.add(examList);
+                }
+            }
+            chapterExamBasic.setExamList(examLists);
+            chapterExamBasics.add(chapterExamBasic);
+        }
+
+        uploadChapterBehaviorDTO.setChapterExamBasic(chapterExamBasics);
+
+        System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(uploadChapterBehaviorDTO));
+
+        RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(uploadChapterBehaviorDTO).toString());
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/uploadChapterBehavior")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .addHeader("Content-Type", "application/json")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        System.out.println(rensheResponseVO);
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_4);
+            renshejuHistoryDO.setInputParam(JSONObject.fromObject(uploadChapterBehaviorDTO).toString());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+        return rensheResponseVO;
+    }
+
+    public RensheResponseVO uploadClassAnswerQuestionBehavior() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+        UploadClassAnswerQuestionBehaviorDTO uploadClassAnswerQuestionBehaviorDTO = new UploadClassAnswerQuestionBehaviorDTO();
+
+        //秘钥
+        uploadClassAnswerQuestionBehaviorDTO.setPrivateKey(getSecret());
+
+        List dailyAnswerVOS = renSheJuMapper.dailyAnswer();
+
+        HashMap> hashMap = new HashMap<>();
+        for (DailyAnswerVO dailyAnswerVO : dailyAnswerVOS) {
+
+            if (!hashMap.containsKey(dailyAnswerVO.getDownCode() + ":" + dailyAnswerVO.getIdentity())) {
+                List answerAndQuestionLists = new ArrayList<>();
+                AnswerAndQuestionList answerAndQuestionList = new AnswerAndQuestionList();
+                answerAndQuestionList.setAnswer(dailyAnswerVO.getAnswer());
+                answerAndQuestionList.setQuestion(dailyAnswerVO.getQuestion());
+                answerAndQuestionLists.add(answerAndQuestionList);
+                hashMap.put(dailyAnswerVO.getDownCode() + ":" + dailyAnswerVO.getIdentity(), answerAndQuestionLists);
+            } else {
+                List answerAndQuestionLists = hashMap.get(dailyAnswerVO.getDownCode() + ":" + dailyAnswerVO.getIdentity());
+                AnswerAndQuestionList answerAndQuestionList = new AnswerAndQuestionList();
+                answerAndQuestionList.setAnswer(dailyAnswerVO.getAnswer());
+                answerAndQuestionList.setQuestion(dailyAnswerVO.getQuestion());
+                answerAndQuestionLists.add(answerAndQuestionList);
+                hashMap.put(dailyAnswerVO.getDownCode() + ":" + dailyAnswerVO.getIdentity(), answerAndQuestionLists);
+            }
+        }
+
+        List answerBasics = new ArrayList<>();
+
+        for (String key : hashMap.keySet()) {
+            AnswerBasic answerBasic = new AnswerBasic();
+            String downCode = key.split(":")[0];
+            String identity = key.split(":")[1];
+            answerBasic.setDownCode(downCode);
+            answerBasic.setIdentity(identity);
+            answerBasic.setAnswerAndQuestionList(hashMap.get(key));
+            answerBasics.add(answerBasic);
+        }
+
+        uploadClassAnswerQuestionBehaviorDTO.setAnswerBasic(answerBasics);
+        System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(uploadClassAnswerQuestionBehaviorDTO));
+        RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(uploadClassAnswerQuestionBehaviorDTO).toString());
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/uploadClassAnswerQuestionBehavior")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .addHeader("Content-Type", "application/json")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        System.out.println(rensheResponseVO);
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_5);
+            renshejuHistoryDO.setInputParam(JSONObject.fromObject(uploadClassAnswerQuestionBehaviorDTO).toString());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+
+        return rensheResponseVO;
+    }
+
+    public List uploadImage() throws IOException {
+
+        List rensheResponseVOS = new ArrayList<>();
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+
+        //找到昨天做过人脸识别的班级
+        List classIds = renSheJuMapper.checkClassIds();
+        for (Long classId : classIds) {
+
+            UploadImageDTO uploadImage = new UploadImageDTO();
+            uploadImage.setPrivateKey(getSecret());
+            uploadImage.setDownCode(String.valueOf(classId));
+//            //查找班级下所有人做过的实名认证记录
+            List classImageChecksVOS = renSheJuMapper.classImageChecks(classId);
+
+            List imageDetailLists = new ArrayList();
+            //
+            for (ClassImageChecksVO classImageChecksVO : classImageChecksVOS) {
+                ImageDetailList imageDetailList = new ImageDetailList();
+                BeanUtils.copyProperties(classImageChecksVO, imageDetailList);
+                imageDetailList.setImageBase64(OSSUtils.image2Base64(classImageChecksVO.getImage()));
+                imageDetailList.setProcessType(0L);
+                imageDetailList.setDetectionType(0L);
+                imageDetailLists.add(imageDetailList);
+            }
+
+            //查找前一天做过考试验证的记录
+            List classImageChecksVOS1 = renSheJuMapper.passExamCheck(classId);
+
+            for (ClassImageChecksVO cic : classImageChecksVOS1) {
+                ImageDetailList imageDetailList = new ImageDetailList();
+                BeanUtils.copyProperties(cic, imageDetailList);
+                imageDetailList.setImageBase64(OSSUtils.image2Base64(cic.getImage()));
+                imageDetailList.setProcessType(2L);
+                imageDetailList.setDetectionType(1L);
+                imageDetailLists.add(imageDetailList);
+            }
+
+            uploadImage.setImageDetailList(imageDetailLists);
+            System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(uploadImage));
+            RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(uploadImage).toString());
+            Request request = new Request.Builder()
+                    .url(renSheConfig.getUrl() + "/import/downstream/enterprise/uploadImage")
+                    .method("POST", body)
+                    .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                    .addHeader("Content-Type", "application/json")
+                    .build();
+            Response response = client.newCall(request).execute();
+            RensheResponseVO rensheResponseVO= JSON.parseObject(response.body().string(), RensheResponseVO.class);
+
+            if (null!=rensheResponseVO.getCtt()){
+                RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+                renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_6);
+                renshejuHistoryDO.setInputParam(JSONObject.fromObject(uploadImage).toString());
+                renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+                renshejuHistoryMapper.insert(renshejuHistoryDO);
+            }
+            System.out.println(rensheResponseVO);
+            rensheResponseVOS.add(rensheResponseVO);
+        }
+
+        return rensheResponseVOS;
+    }
+
+    public RensheResponseVO getClassCodeByPrivateKey() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("text/plain");
+        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
+                .addFormDataPart("privateKey", getSecret())
+                .build();
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/getClassCodeByPrivateKey")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .build();
+        Response response = client.newCall(request).execute();
+        System.out.println(response);
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        System.out.println(rensheResponseVO);
+
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_7);
+            renshejuHistoryDO.setInputParam(getSecret());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+        return rensheResponseVO;
+    }
+
+    public RensheResponseVO uploadClassCode() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("application/json");
+
+        UploadClassCodeDTO uploadClassCodeDTO = new UploadClassCodeDTO();
+
+        uploadClassCodeDTO.setPrivateKey(getSecret());
+
+        //所有班级
+        List classIds = renSheJuMapper.newClasses();
+
+        List classCodeBasics = new ArrayList();
+        for (Long classId : classIds) {
+            ClassCodeBasic classCodeBasic = new ClassCodeBasic();
+            ClassDictDO classDictDO = classDictMapper.selectById(classId);
+            classCodeBasic.setDownCode(String.valueOf(classDictDO.getId()));
+            classCodeBasic.setClassCode(classDictDO.getClassCode());
+            classCodeBasics.add(classCodeBasic);
+        }
+        uploadClassCodeDTO.setClassCodeBasic(classCodeBasics);
+
+        System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(uploadClassCodeDTO));
+
+        RequestBody body = RequestBody.create(mediaType, JSONObject.fromObject(uploadClassCodeDTO).toString());
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl()+"/import/downstream/enterprise/uploadClassCode")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .addHeader("Content-Type", "application/json")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        System.out.println(rensheResponseVO);
+
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_8);
+            renshejuHistoryDO.setInputParam(JSONObject.fromObject(uploadClassCodeDTO).toString());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+        return rensheResponseVO;
+    }
+
+    public RensheResponseVO getErrorClass() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+        MediaType mediaType = MediaType.parse("text/plain");
+        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
+                .addFormDataPart("privateKey", getSecret())
+                .build();
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/getErrorClass")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheResponseVO rensheResponseVO = JSON.parseObject(response.body().string(), RensheResponseVO.class);
+        System.out.println(rensheResponseVO);
+        if (null!=rensheResponseVO.getCtt()){
+            RenshejuHistoryDO renshejuHistoryDO = new RenshejuHistoryDO();
+            renshejuHistoryDO.setInterfaceName(RenSheJuConstant.POST_9);
+            renshejuHistoryDO.setInputParam(getSecret());
+            renshejuHistoryDO.setOutputParam(rensheResponseVO.getCtt().toString());
+            renshejuHistoryMapper.insert(renshejuHistoryDO);
+        }
+        return rensheResponseVO;
+    }
+
+    public RensheStringVO clear() throws IOException {
+
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+//        MediaType mediaType = MediaType.parse("text/plain");
+        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
+                .addFormDataPart("privateKey", getSecret())
+                .build();
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/import/downstream/enterprise/clear")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .build();
+        Response response = client.newCall(request).execute();
+        RensheStringVO rensheStringVO = JSON.parseObject(response.body().string(), RensheStringVO.class);
+        System.out.println(rensheStringVO);
+
+        return rensheStringVO;
+    }
+
+
+    public String getSecret() throws IOException {
+        OkHttpClient client = new OkHttpClient().newBuilder()
+                .build();
+//        MediaType mediaType = MediaType.parse("text/plain");
+        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
+                .addFormDataPart("publicKey", renSheConfig.getSecretKey())
+                .build();
+        Request request = new Request.Builder()
+                .url(renSheConfig.getUrl() + "/token/accessPrivateKey")
+                .method("POST", body)
+                .addHeader("User-Agent", "Apifox/1.0.0 (https://www.apifox.cn)")
+                .build();
+        Response response = client.newCall(request).execute();
+        GetSecretVO getSecretVO = JSON.parseObject(response.body().string(), GetSecretVO.class);
+        System.out.println(getSecretVO);
+        return getSecretVO.getCtt().getPrivateKey();
+    }
+
+    public static void main(String[] args) {
+//        GetSecretVO getSecretVO = new GetSecretVO();
+//
+//        getSecretVO.setC(1);
+//        getSecretVO.setMsg("aaaa");
+//        GetSecretChildVO getSecretChildVO = new GetSecretChildVO();
+//        getSecretChildVO.setIp("1121");
+//        getSecretChildVO.setPrivateKey("1111111");
+////        getSecretChildVO.setValidTime("2212");
+//        getSecretVO.setCtt(getSecretChildVO);
+//        String s = JSONObject.fromObject(getSecretVO).toString();
+//        System.out.println(s);
+
+        LocalDateTime localDateTime = LocalDateTime.now();
+        System.out.println(localDateTime.toString());
+
+    }
+
+    public void test(){
+        System.out.println("132222222222222222222222222222");
+    }
+
+}
diff --git a/src/main/java/com/subsidy/service/impl/RenshejuHistoryServiceImpl.java b/src/main/java/com/subsidy/service/impl/RenshejuHistoryServiceImpl.java
new file mode 100644
index 0000000..bf9f47a
--- /dev/null
+++ b/src/main/java/com/subsidy/service/impl/RenshejuHistoryServiceImpl.java
@@ -0,0 +1,20 @@
+package com.subsidy.service.impl;
+
+import com.subsidy.model.RenshejuHistoryDO;
+import com.subsidy.mapper.RenshejuHistoryMapper;
+import com.subsidy.service.RenshejuHistoryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * 人社局推送失败记录表 服务实现类
+ * 
+ *
+ * @author Tuyp
+ * @since 2023-02-07
+ */
+@Service
+public class RenshejuHistoryServiceImpl extends ServiceImpl implements RenshejuHistoryService {
+
+}
diff --git a/src/main/java/com/subsidy/util/RenSheJuConstant.java b/src/main/java/com/subsidy/util/RenSheJuConstant.java
new file mode 100644
index 0000000..a79e493
--- /dev/null
+++ b/src/main/java/com/subsidy/util/RenSheJuConstant.java
@@ -0,0 +1,51 @@
+package com.subsidy.util;
+
+public class RenSheJuConstant {
+
+    /**
+     * POST-2:班级基本信息信息采集接口
+     */
+    public static final String POST_2 = "POST_2_classBaseInfo";
+
+    /**
+     * POST-3:学时信息采集接口
+     */
+    public static final String POST_3 = "POST_3_classHourBehavior";
+
+    /**
+     * POST-4:考试信息采集接口
+     */
+    public static final String POST_4 = "POST_4_uploadChapterBehavior";
+
+    /**
+     * POST-5:答疑辅导采集接口
+     */
+    public static final String POST_5 = "POST_5_uploadClassAnswerQuestionBehavior";
+
+    /**
+     * POST-6 班级活跃度/实名认证照片信息采集接口
+     */
+    public static final String POST_6 = "POST_6_uploadImage";
+
+    /**
+     * POST-7 获取培训待绑定的(班级编号,项目编号)列表
+     */
+    public static final String POST_7 = "POST_7_getClassCodeByPrivateKey";
+
+    /**
+     * POST-8 上下游班级数据绑定接口
+     */
+    public static final String POST_8 = "POST_8_uploadClassCode";
+
+    /**
+     * POST-9 获取推送失败班级列表
+     */
+    public static final String POST_9 = "POST_9_getErrorClass";
+
+    /**
+     * POST-10 清除推送失败班级缓存
+     */
+    public static final String POST_10 = "POST_10_clear";
+
+
+}
diff --git a/src/main/java/com/subsidy/vo/administer/OperatorsVO.java b/src/main/java/com/subsidy/vo/administer/OperatorsVO.java
index e866734..91fef68 100644
--- a/src/main/java/com/subsidy/vo/administer/OperatorsVO.java
+++ b/src/main/java/com/subsidy/vo/administer/OperatorsVO.java
@@ -35,4 +35,6 @@ public class OperatorsVO {
     private String superviseName;
 
     private String companyCode;
+
+    private String areaName;
 }
diff --git a/src/main/java/com/subsidy/vo/renshe/ActivityList9.java b/src/main/java/com/subsidy/vo/renshe/ActivityList9.java
new file mode 100644
index 0000000..df2cb5e
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/ActivityList9.java
@@ -0,0 +1,37 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class ActivityList9 {
+
+    /**
+     * 活跃度是否通过
+     */
+    private String access;
+    /**
+     * 活跃度检测依据
+     */
+    private String activityDetection;
+    /**
+     * 活跃度检测时间
+     */
+    private String activityTime;
+    /**
+     * 活跃度未通过原因
+     */
+    private String errorInfo;
+    /**
+     * 未通过详情
+     */
+    private String errorMessage;
+    /**
+     * 修改日期
+     */
+    private String updateDate;
+    /**
+     * 同步状态
+     */
+    private String updateStatus;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/ChapterList9.java b/src/main/java/com/subsidy/vo/renshe/ChapterList9.java
new file mode 100644
index 0000000..3b54fb2
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/ChapterList9.java
@@ -0,0 +1,38 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class ChapterList9 {
+
+    /**
+     * 章节(课程)编码,与基本信息内的章节(课程)编码相对应
+     */
+    private String chapterCode;
+    /**
+     * 章节(课程)学习时长,本次登录时间段内本章节学习累计时长【分】
+     */
+    private long chapterTime;
+    /**
+     * 学习结束时间
+     */
+    private String endTime;
+    /**
+     * 未通过详情
+     */
+    private String errorMessage;
+    /**
+     * 学习开始时间
+     */
+    private String startTime;
+    /**
+     * 修改日期
+     */
+    private String updateDate;
+    /**
+     * 同步状态
+     */
+    private String updateStatus;
+
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/ClassBaseInfoVO.java b/src/main/java/com/subsidy/vo/renshe/ClassBaseInfoVO.java
new file mode 100644
index 0000000..5f0e434
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/ClassBaseInfoVO.java
@@ -0,0 +1,26 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class ClassBaseInfoVO {
+
+    private String downCode;
+
+    private String shortName;
+
+    private Long learnHour;
+
+    private Long courseHour;
+
+    private Long startDate;
+
+    private Long endDate;
+
+    private String areaName;
+
+    private String trainingName;
+
+    private String trainingCode;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/ClassImageChecksVO.java b/src/main/java/com/subsidy/vo/renshe/ClassImageChecksVO.java
new file mode 100644
index 0000000..3a5b265
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/ClassImageChecksVO.java
@@ -0,0 +1,37 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class ClassImageChecksVO {
+
+    /**
+     * 检测时间,【13位时间戳】【精确到毫秒】如检测类型为活跃度检测则与【学时信息采集接口】、【考试信息采集接口】activityTime时间保持一致
+     */
+    private Long activityTime;
+    /**
+     * 检测类型,0.实名认证  1活跃度检测    (实名认证第一次必须是活体采集)
+     */
+    private Long detectionType;
+    /**
+     * 学员身份证,会对身份证号长度、格式进行校验、X用大写
+     */
+    private String identity;
+    /**
+     * Base64图片,【jpg】【30kb~50kb】【413*295】
+     */
+    private String image;
+    /**
+     * 学员电话号,会对学生手机号长度、格式进行校验
+     */
+    private String phone;
+    /**
+     * 行为类型,0实名认证  1 学时行为类型的活跃度检测  2 考试行为类型的活跃度检测
+     */
+    private Long processType;
+    /**
+     * 学员姓名
+     */
+    private String studentName;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/Ctt7.java b/src/main/java/com/subsidy/vo/renshe/Ctt7.java
new file mode 100644
index 0000000..44f3133
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/Ctt7.java
@@ -0,0 +1,25 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class Ctt7 {
+
+    /**
+     * 所在区域名称
+     */
+    private String areaName;
+    /**
+     * 班级(项目)编号
+     */
+    private String classCode;
+    /**
+     * 项目(项目)名称
+     */
+    private String name;
+    /**
+     * 所属企业名称
+     */
+    private String trainingUnit;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/Ctt9.java b/src/main/java/com/subsidy/vo/renshe/Ctt9.java
new file mode 100644
index 0000000..52ac825
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/Ctt9.java
@@ -0,0 +1,60 @@
+package com.subsidy.vo.renshe;
+
+import com.subsidy.dto.renshe.LoginList;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Ctt9 {
+
+    /**
+     * 活跃度列表,【数组】
+     */
+    private List activityList;
+    /**
+     * 班级(项目)编码
+     */
+    private Object downCode;
+    /**
+     * 未通过详情
+     */
+    private String errorMessage;
+    /**
+     * 学员身份证,会对身份证号长度、格式进行校验、X用大写
+     */
+    private String identity;
+    /**
+     * 当日累计学习时长,视频暂停时间不计入【分】
+     */
+    private Object learnTime;
+    /**
+     * 上线时间列表,【数组】
+     */
+    private List loginList;
+    /**
+     * 当日累计登陆时长,该字段数据应为当日产生LoginList列表内多条下线时间-上线时间累加和【分】
+     */
+    private Object loginTime;
+    /**
+     * 学员电话,会对手机号长度、格式进行校验
+     */
+    private String phone;
+    /**
+     * 当日累计播放时长,视频暂停时间计入【分】
+     */
+    private Object playTime;
+    /**
+     * 学员姓名
+     */
+    private String studentName;
+    /**
+     * 修改日期
+     */
+    private Long updateDate;
+    /**
+     * 同步状态
+     */
+    private String updateStatus;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/DailyActivitiesVO.java b/src/main/java/com/subsidy/vo/renshe/DailyActivitiesVO.java
new file mode 100644
index 0000000..5bb512d
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/DailyActivitiesVO.java
@@ -0,0 +1,13 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class DailyActivitiesVO {
+
+    private Integer access;
+
+    private Long activityTime;
+
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/DailyAnswerVO.java b/src/main/java/com/subsidy/vo/renshe/DailyAnswerVO.java
new file mode 100644
index 0000000..f7d9d42
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/DailyAnswerVO.java
@@ -0,0 +1,20 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class DailyAnswerVO {
+
+    private Long id;
+
+    private Long askId;
+
+    private String downCode;
+
+    private String identity;
+
+    private Long answer;
+
+    private Long question;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/DailyExamBasicVO.java b/src/main/java/com/subsidy/vo/renshe/DailyExamBasicVO.java
new file mode 100644
index 0000000..58724b3
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/DailyExamBasicVO.java
@@ -0,0 +1,23 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class DailyExamBasicVO {
+
+
+    private Long memberId;
+
+    private String downCode;
+
+    private String studentName;
+
+    private String phone;
+
+    private String identity;
+
+    private Long access;
+
+    private Long examTime;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/DailyStudyInfoVO.java b/src/main/java/com/subsidy/vo/renshe/DailyStudyInfoVO.java
new file mode 100644
index 0000000..eb488d3
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/DailyStudyInfoVO.java
@@ -0,0 +1,42 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class DailyStudyInfoVO {
+
+    private Long memberId;
+
+//    private Long classId;
+
+    /**
+     * 临时班级(临时项目)编号
+     */
+    private String downCode;
+    /**
+     * 学员身份证号,会对身份证号长度、格式进行校验、X用大写
+     */
+    private String identity;
+    /**
+     * 当日累计学习时长,视频暂停时间不计入【秒】
+     */
+    private long learnTime;
+
+    /**
+     * 当日累计登陆时长,该字段数据应为当日产生LoginList列表内多条下线时间-上线时间累加和【秒】
+     */
+    private long loginTime;
+    /**
+     * 学员电话号,会对学生手机号长度、格式进行校验
+     */
+    private String phone;
+    /**
+     * 当日累计播放时长,视频暂停时间计入【秒】
+     */
+    private Long playTime;
+    /**
+     * 学员姓名
+     */
+    private String studentName;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/ExamActivitiesVO.java b/src/main/java/com/subsidy/vo/renshe/ExamActivitiesVO.java
new file mode 100644
index 0000000..d90e3cd
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/ExamActivitiesVO.java
@@ -0,0 +1,12 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class ExamActivitiesVO {
+
+    private Integer access;
+
+    private Long activityTime;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/GetSecretChildVO.java b/src/main/java/com/subsidy/vo/renshe/GetSecretChildVO.java
new file mode 100644
index 0000000..405ca3e
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/GetSecretChildVO.java
@@ -0,0 +1,14 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class GetSecretChildVO {
+
+      private String privateKey;
+
+      private String validTime;
+
+      private String ip;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/GetSecretVO.java b/src/main/java/com/subsidy/vo/renshe/GetSecretVO.java
new file mode 100644
index 0000000..3967b06
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/GetSecretVO.java
@@ -0,0 +1,14 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class GetSecretVO {
+
+    private Integer c;
+
+    private String msg;
+
+    private GetSecretChildVO ctt;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/LoginList9.java b/src/main/java/com/subsidy/vo/renshe/LoginList9.java
new file mode 100644
index 0000000..30dad11
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/LoginList9.java
@@ -0,0 +1,39 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LoginList9 {
+
+    /**
+     * 章节(课程)学时列表
+     */
+    private List chapterList;
+    /**
+     * 下线时间,【13位时间戳】【精确到毫秒】
+     */
+    private long endTime;
+    /**
+     * 未通过详情
+     */
+    private String errorMessage;
+    /**
+     * 登录ip,会对IP进行校验
+     */
+    private String ip;
+    /**
+     * 上线时间,【13位时间戳】【精确到毫秒】
+     */
+    private long startTime;
+    /**
+     * 修改日期
+     */
+    private String updateDate;
+    /**
+     * 同步状态
+     */
+    private String updateStatus;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/MemberVO.java b/src/main/java/com/subsidy/vo/renshe/MemberVO.java
new file mode 100644
index 0000000..8753fef
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/MemberVO.java
@@ -0,0 +1,15 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class MemberVO {
+
+    private String name;
+
+    private String phone;
+
+    private String identity;
+
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/RensheResponseVO.java b/src/main/java/com/subsidy/vo/renshe/RensheResponseVO.java
new file mode 100644
index 0000000..f1b2ce9
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/RensheResponseVO.java
@@ -0,0 +1,21 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class RensheResponseVO {
+
+    /**
+     * 响应码
+     */
+    private long c;
+    /**
+     * 响应体
+     */
+    private Object ctt;
+    /**
+     * 响应信息
+     */
+    private String msg;
+
+}
diff --git a/src/main/java/com/subsidy/vo/renshe/RensheStringVO.java b/src/main/java/com/subsidy/vo/renshe/RensheStringVO.java
new file mode 100644
index 0000000..2dc9eaa
--- /dev/null
+++ b/src/main/java/com/subsidy/vo/renshe/RensheStringVO.java
@@ -0,0 +1,21 @@
+package com.subsidy.vo.renshe;
+
+import lombok.Data;
+
+@Data
+public class RensheStringVO {
+
+    /**
+     * 响应码
+     */
+    private long c;
+    /**
+     * 响应体
+     */
+    private Object ctt;
+    /**
+     * 响应信息
+     */
+    private String msg;
+
+}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
index c07a6e3..1dbb2bb 100644
--- a/src/main/resources/application-dev.properties
+++ b/src/main/resources/application-dev.properties
@@ -57,4 +57,4 @@ qxueyou.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq95qxy
 qxueyou.url=https://dev.qxueyou.com/auth/user/token
 
 renshe.url = https://test.shzypxy.com
-renshe.secretKey = 111
\ No newline at end of file
+renshe.secretKey = ad927f0b-6a39-43a7-bac7-163baef1fff7
\ No newline at end of file
diff --git a/src/main/resources/application-online.properties b/src/main/resources/application-online.properties
index 441d9b9..5bca86a 100644
--- a/src/main/resources/application-online.properties
+++ b/src/main/resources/application-online.properties
@@ -54,4 +54,7 @@ spring.redis.lettuce.pool.min-idle=8
 
 qxueyou.appId=qxywz5nnWMI77CM3Tx
 qxueyou.securityKey=626737T1-65K0-5xC2-0Y0V-2Aq95qxy
-qxueyou.url=https://dev.qxueyou.com/auth/user/token
\ No newline at end of file
+qxueyou.url=https://dev.qxueyou.com/auth/user/token
+
+renshe.url = https://api.shzypxy.com
+renshe.secretKey = 111
\ No newline at end of file
diff --git a/src/main/resources/mapper/ClassDictMapper.xml b/src/main/resources/mapper/ClassDictMapper.xml
index b18c881..4801738 100644
--- a/src/main/resources/mapper/ClassDictMapper.xml
+++ b/src/main/resources/mapper/ClassDictMapper.xml
@@ -250,4 +250,14 @@
         order by t.create_date desc
     
 
+    
+
 
diff --git a/src/main/resources/mapper/CompanyDictMapper.xml b/src/main/resources/mapper/CompanyDictMapper.xml
index 6844115..4c5107e 100644
--- a/src/main/resources/mapper/CompanyDictMapper.xml
+++ b/src/main/resources/mapper/CompanyDictMapper.xml
@@ -33,7 +33,8 @@
             t2.logo,
             t2.address,
             t2.supervise_name,
-            t2.company_code
+            t2.company_code,
+            t2.area_name
         FROM
             administer t
             left join role_administer_mapping t4 on t.id = t4.administer_id
diff --git a/src/main/resources/mapper/RenSheJuMapper.xml b/src/main/resources/mapper/RenSheJuMapper.xml
new file mode 100644
index 0000000..7545a9c
--- /dev/null
+++ b/src/main/resources/mapper/RenSheJuMapper.xml
@@ -0,0 +1,404 @@
+
+
+
+
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+        create_date,
+        update_date,
+        delete_date,
+        id, company_id, cert_id
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+
diff --git a/src/main/resources/mapper/RenshejuHistoryMapper.xml b/src/main/resources/mapper/RenshejuHistoryMapper.xml
new file mode 100644
index 0000000..1095cf9
--- /dev/null
+++ b/src/main/resources/mapper/RenshejuHistoryMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+        create_date,
+        update_date,
+        delete_date,
+        id, interface_name, input_param, output_param
+    
+
+
diff --git a/src/main/resources/mapper/VodPlayHistoryMapper.xml b/src/main/resources/mapper/VodPlayHistoryMapper.xml
index c16ee43..dba0765 100644
--- a/src/main/resources/mapper/VodPlayHistoryMapper.xml
+++ b/src/main/resources/mapper/VodPlayHistoryMapper.xml
@@ -399,6 +399,18 @@
             t.create_date
     
 
+
+
+
+
+
+
+
+
+
+
+
+