he2802 3 жил өмнө
parent
commit
9a4dc05e9c
38 өөрчлөгдсөн 411 нэмэгдсэн , 38 устгасан
  1. 3 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 3 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  3. 3 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  4. 3 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  5. 3 0
      zhongzheng-api/src/main/resources/application-dev.yml
  6. 3 0
      zhongzheng-api/src/main/resources/application-pre.yml
  7. 3 0
      zhongzheng-api/src/main/resources/application-prod.yml
  8. 29 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  9. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/UserPeriodStatusAddBo.java
  10. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/UserPeriodStatusEditBo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/UserPeriodStatus.java
  12. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IUserPeriodService.java
  13. 3 30
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  14. 168 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  15. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodSectionVo.java
  16. 29 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserChapterList.java
  17. 35 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserCourseStudyRec.java
  18. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserImageRc.java
  19. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserStudyRec.java
  20. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/UserPeriodStatusVo.java
  21. 6 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java
  22. 6 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordEditBo.java
  23. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordAddBo.java
  24. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordEditBo.java
  25. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordPhotoAddBo.java
  26. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordPhotoEditBo.java
  27. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserBankRecord.java
  28. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyRecord.java
  29. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyRecordPhoto.java
  30. 5 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java
  31. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  32. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserBankRecordVo.java
  33. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyRecordPhotoVo.java
  34. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyRecordVo.java
  35. 2 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  36. 2 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/UserPeriodStatusMapper.xml
  37. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml
  38. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordPhotoMapper.xml

+ 3 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -5,6 +5,7 @@ import com.zhongzheng.common.config.RuoYiConfig;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.model.LoginBody;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.framework.config.ServerConfig;
@@ -27,6 +28,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -135,6 +137,7 @@ public class CommonController
     @GetMapping("common/jzs/goodsList")
     public AjaxResult<List<GoodsJzsVo>> goodsList()
     {
+
         GoodsQueryBo queryBo = new GoodsQueryBo();
         List<GoodsJzsVo> goodsJzsVoList = iGoodsService.selectRjJzsList(queryBo);
         return AjaxResult.success(goodsJzsVoList);

+ 3 - 0
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -132,6 +132,9 @@ liveGotoURL: http://120.79.166.78:19014/
 
 enCodeVersion: develop
 
+oldStudySys:
+    syncPath: http://gdxypx.xy.com/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 3 - 0
zhongzheng-admin/src/main/resources/application-pre.yml

@@ -132,6 +132,9 @@ liveGotoURL: http://120.79.166.78:19010/
 
 enCodeVersion: trial
 
+oldStudySys:
+    syncPath: http://test.jqbao.net/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 3 - 0
zhongzheng-admin/src/main/resources/application-prod.yml

@@ -132,6 +132,9 @@ liveGotoURL: https://web.xyyxt.net/
 
 enCodeVersion: release
 
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 3 - 0
zhongzheng-api/src/main/resources/application-dev.yml

@@ -133,6 +133,9 @@ liveGotoURL: http://120.79.166.78:19014/
 
 enCodeVersion: develop
 
+oldStudySys:
+    syncPath: http://gdxypx.xy.com/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 3 - 0
zhongzheng-api/src/main/resources/application-pre.yml

@@ -132,6 +132,9 @@ liveGotoURL: http://120.79.166.78:19010/
 
 enCodeVersion: trial
 
+oldStudySys:
+    syncPath: http://test.jqbao.net/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 3 - 0
zhongzheng-api/src/main/resources/application-prod.yml

@@ -144,6 +144,9 @@ liveGotoURL: https://web.xyyxt.net/
 
 enCodeVersion: release
 
+oldStudySys:
+    syncPath: https://www.xyyxt.net/System/PostUserStudyRecords
+
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     periodPath: http://jypt-dev.gdcic.net/organjxjy/XueshiShenqing

+ 29 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -276,5 +276,34 @@ public class ToolsUtils {
         return result;
     }
 
+    public static String EncoderByMd5(String str) {
+        String result = "";
+        MessageDigest md5 = null;
+        try {
+            md5 = MessageDigest.getInstance("MD5");
+            // 这句是关键
+            md5.update(str.getBytes("gb2312"));
+        } catch (NoSuchAlgorithmException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        byte b[] = md5.digest();
+        int i;
+        StringBuffer buf = new StringBuffer("");
+        for (int offset = 0; offset < b.length; offset++) {
+            i = b[offset];
+            if (i < 0)
+                i += 256;
+            if (i < 16)
+                buf.append("0");
+            buf.append(Integer.toHexString(i));
+        }
+        result = buf.toString();
+
+        return result;
+    }
 
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/UserPeriodStatusAddBo.java

@@ -49,4 +49,7 @@ public class UserPeriodStatusAddBo {
     /** 审核原因 */
     @ApiModelProperty("审核原因")
     private String auditReason;
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/UserPeriodStatusEditBo.java

@@ -58,4 +58,8 @@ public class UserPeriodStatusEditBo {
     /** 审核原因 */
     @ApiModelProperty("审核原因")
     private String auditReason;
+
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/domain/UserPeriodStatus.java

@@ -51,4 +51,6 @@ private static final long serialVersionUID=1L;
     private String auditUserName;
     /** 审核原因 */
     private String auditReason;
+    /** 访问IP */
+    private String ip;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IUserPeriodService.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.grade.service;
 
 import com.zhongzheng.modules.grade.domain.UserPeriod;
+import com.zhongzheng.modules.grade.vo.SyncUserCourseStudyRec;
 import com.zhongzheng.modules.grade.vo.UserPeriodVo;
 import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
 import com.zhongzheng.modules.grade.bo.UserPeriodAddBo;
@@ -62,4 +63,6 @@ public interface IUserPeriodService extends IService<UserPeriod> {
 	Boolean rollbackPeriod(UserPeriodEditBo bo);
 
 	Long todayStudySectionNum(UserPeriodQueryBo bo);
+
+	SyncUserCourseStudyRec syncStudyLogToOld(UserPeriodEditBo bo);
 }

+ 3 - 30
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -18,6 +18,7 @@ import com.zhongzheng.common.core.redis.RedisLockEntity;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.AES;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.polyv.PolyvUtils;
@@ -679,41 +680,13 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     }
 
 
-    public static String EncoderByMd5(String str) {
-        String result = "";
-        MessageDigest md5 = null;
-        try {
-            md5 = MessageDigest.getInstance("MD5");
-            // 这句是关键
-            md5.update(str.getBytes("gb2312"));
-        } catch (NoSuchAlgorithmException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (UnsupportedEncodingException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        byte b[] = md5.digest();
-        int i;
-        StringBuffer buf = new StringBuffer("");
-        for (int offset = 0; offset < b.length; offset++) {
-            i = b[offset];
-            if (i < 0)
-                i += 256;
-            if (i < 16)
-                buf.append("0");
-            buf.append(Integer.toHexString(i));
-        }
-        result = buf.toString();
 
-        return result;
-    }
 
     public String dataSign(String SourceMsg, String PKey) {
         String TempPKey;
-        TempPKey = EncoderByMd5(PKey);
+        TempPKey = ToolsUtils.EncoderByMd5(PKey);
         TempPKey = SourceMsg + TempPKey;
-        TempPKey = EncoderByMd5(TempPKey);
+        TempPKey = ToolsUtils.EncoderByMd5(TempPKey);
         return TempPKey;
     }
 

+ 168 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -1,9 +1,11 @@
 package com.zhongzheng.modules.grade.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -12,26 +14,42 @@ import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.base.service.ICertificateTpService;
+import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.service.ICourseBusinessService;
+import com.zhongzheng.modules.course.service.ICourseChapterSectionService;
+import com.zhongzheng.modules.course.service.ICourseMenuService;
+import com.zhongzheng.modules.course.service.ICourseModuleChapterService;
+import com.zhongzheng.modules.course.vo.CourseMenuVo;
+import com.zhongzheng.modules.course.vo.CourseModuleChapterVo;
+import com.zhongzheng.modules.course.vo.CourseVo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseQueryBo;
 import com.zhongzheng.modules.goods.domain.Goods;
+import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.grade.domain.UserPeriodStatus;
 import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
+import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IUserPeriodStatusService;
-import com.zhongzheng.modules.grade.vo.ClassPeriodStudentVo;
-import com.zhongzheng.modules.grade.vo.UserPeriodStatusVo;
+import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
 import com.zhongzheng.modules.inform.service.IInformRemindService;
 import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.inform.vo.InformRemindVo;
+import com.zhongzheng.modules.order.domain.OrderGoods;
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
 import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxLoginService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,10 +64,10 @@ import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
 import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
 import com.zhongzheng.modules.grade.domain.UserPeriod;
 import com.zhongzheng.modules.grade.mapper.UserPeriodMapper;
-import com.zhongzheng.modules.grade.vo.UserPeriodVo;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -111,6 +129,29 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     @Autowired
     private ICourseBusinessService iCourseBusinessService;
 
+    @Value("${aliyun.oss.endpoint}")
+    private String ossHost;
+
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+
+    @Autowired
+    private IClassGradeService iClassGradeService;
+
+    @Autowired
+    private IGoodsCourseService iGoodsCourseService;
+
+    @Autowired
+    private ICourseMenuService iCourseMenuService;
+
+    @Autowired
+    private ICourseModuleChapterService iCourseModuleChapterService;
+
+    @Autowired
+    private IUserStudyRecordPhotoService userStudyRecordPhotoService;
+
+    @Value("${oldStudySys.syncPath}")
+    private String SYNC_PATH;
 
     @Override
     public UserPeriodVo queryById(Long id) {
@@ -392,9 +433,131 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         bo.setStatus(1);
         sendPeriodSMS(bo);
         sendPeriodSevenSMS(bo);
+        syncStudyLogToOld(bo);
         return true;
     }
 
+    @Override
+    public SyncUserCourseStudyRec syncStudyLogToOld(UserPeriodEditBo bo) {
+        UserVo userVo = iUserService.queryById(bo.getUserId());
+        ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId,bo.getUserId()).eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
+        OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderGoodsId,gradeUser.getOrderGoodsId()).last("limit 1"));
+        ClassGrade classGrade = iClassGradeService.getOne(new LambdaQueryWrapper<ClassGrade>().eq(ClassGrade::getGradeId,gradeUser.getGradeId()).last("limit 1"));
+        SyncUserCourseStudyRec studyRec = new SyncUserCourseStudyRec();
+        studyRec.setName(userVo.getRealname());
+        studyRec.setIdNum(userVo.getIdCard());
+        studyRec.setMobile(userVo.getTelphone());
+        studyRec.setGender(userVo.getSex()==1?"男":"女");
+        studyRec.setRecentPhotoSrc(Validator.isNotEmpty(userVo.getOneInchPhotos())?ossHost+"/"+userVo.getOneInchPhotos():"");
+        studyRec.setIdcardPhotoSrc(Validator.isNotEmpty(userVo.getIdCardImg1())?ossHost+"/"+userVo.getIdCardImg1():"");
+        studyRec.setIdcardPhotoSrc2(Validator.isNotEmpty(userVo.getIdCardImg2())?ossHost+"/"+userVo.getIdCardImg2():"");
+        studyRec.setCourseId(bo.getGoodsId());
+        studyRec.setCourseBuyTime(DateUtils.timestampToDateFormat(orderGoods.getCreateTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+        studyRec.setClassNo(classGrade.getOfficialName());
+        GoodsVo goodsVo = iGoodsService.queryById(bo.getGoodsId());
+        List<SyncUserChapterList> ChapterList = new ArrayList<>();
+        GoodsCourseQueryBo goodsCourseQueryBo = new GoodsCourseQueryBo();
+        goodsCourseQueryBo.setGoodsId(goodsVo.getGoodsId());
+        List<CourseVo> courseVoList = iGoodsCourseService.selectList(goodsCourseQueryBo);
+        for(CourseVo courseVo : courseVoList){
+            CourseMenuQueryBo menuQueryBo = new CourseMenuQueryBo();
+            menuQueryBo.setCourseId(courseVo.getCourseId());
+            List<CourseMenuVo> courseMenuVoList = iCourseMenuService.selectList(menuQueryBo);
+            courseMenuVoList.forEach(courseMenuVo -> {
+                if(courseMenuVo.getType()==1){
+                    //获取章信息
+                    List<CourseModuleChapterVo> courseModuleChapterVoList = iCourseModuleChapterService.getListById(courseMenuVo.getMenuId());
+                    courseModuleChapterVoList.forEach(courseModuleChapterVo -> {
+                        SyncUserChapterList syncUserChapterItem = new SyncUserChapterList();
+                        syncUserChapterItem.setChapterId(courseModuleChapterVo.getChapterId());
+                        syncUserChapterItem.setChapterName(courseModuleChapterVo.getName());
+
+                        UserPeriodQueryBo userPeriodQueryBo = new UserPeriodQueryBo();
+                        userPeriodQueryBo.setCourseId(courseVo.getCourseId());
+                        userPeriodQueryBo.setGoodsId(bo.getGoodsId());
+                        userPeriodQueryBo.setUserId(bo.getUserId());
+                        userPeriodQueryBo.setChapterId(courseModuleChapterVo.getChapterId());
+                        userPeriodQueryBo.setModuleId(courseMenuVo.getMenuId());
+                        userPeriodQueryBo.setGradeId(bo.getGradeId());
+                        userPeriodQueryBo.setType(2);
+                        List<UserPeriodStatusVo> userPeriodStatusVos = userPeriodStatusService.selectPeriodStatus(userPeriodQueryBo);
+                        if (!CollectionUtils.isEmpty(userPeriodStatusVos)&&userPeriodStatusVos.size()>0) {
+                            int numIndex = userPeriodStatusVos.size() - 1;
+                            UserPeriodStatusVo userPeriodStatusVo = userPeriodStatusVos.get(numIndex);
+                            LambdaQueryWrapper<UserStudyRecordPhoto> lqw = Wrappers.lambdaQuery();
+                            lqw.eq(UserStudyRecordPhoto::getPeriodId, userPeriodStatusVo.getId());
+                            List<UserStudyRecordPhoto> examPhoto = userStudyRecordPhotoService.list(lqw);
+                            if(Validator.isNotEmpty(examPhoto)&&examPhoto.size()>0){
+                                UserStudyRecordPhoto photo = examPhoto.get(0);
+                                syncUserChapterItem.setImageSrc(ossHost+"/"+photo.getPhoto());
+                                syncUserChapterItem.setImageTime(DateUtils.timestampToDateFormat(photo.getCreateTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                syncUserChapterItem.setMatchData(Validator.isNotEmpty(photo.getSimilarity())?photo.getSimilarity().toString():null);
+                                syncUserChapterItem.setExamTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                syncUserChapterItem.setExamScore(userPeriodStatusVo.getPerformance().toString());
+                                syncUserChapterItem.setStudyIP(userPeriodStatusVo.getIp());
+                            }
+                        }
+                        List<ClassPeriodSectionVo> classPeriodSectionVos = classGradeUserMapper.listPeriodSection(courseModuleChapterVo.getChapterId(), bo.getGoodsId(), courseVo.getCourseId(), bo.getUserId());
+                        Collections.sort(classPeriodSectionVos);
+                        List<SyncUserStudyRec> RecList = new ArrayList<>();
+                        for (ClassPeriodSectionVo classPeriodSectionVo : classPeriodSectionVos) {
+                            SyncUserStudyRec syncUserStudyRec = new SyncUserStudyRec();
+                            syncUserStudyRec.setVideoId(classPeriodSectionVo.getId());
+                            syncUserStudyRec.setVideoKey(classPeriodSectionVo.getRecordingUrl());
+
+                            UserPeriodQueryBo userPeriodQueryBo2 = new UserPeriodQueryBo();
+                            userPeriodQueryBo2.setSectionId(classPeriodSectionVo.getId());
+                            userPeriodQueryBo2.setCourseId(courseVo.getCourseId());
+                            userPeriodQueryBo2.setGoodsId(bo.getGoodsId());
+                            userPeriodQueryBo2.setUserId(bo.getUserId());
+                            userPeriodQueryBo2.setChapterId(courseModuleChapterVo.getChapterId());
+                            userPeriodQueryBo2.setModuleId(0L);
+                            userPeriodQueryBo2.setGradeId(bo.getGradeId());
+                            List<UserPeriodStatusVo> userPeriodStatusVos2 = userPeriodStatusService.selectPeriodStatus(userPeriodQueryBo2);
+                            if (!CollectionUtils.isEmpty(userPeriodStatusVos2)) {
+                                int numIndex2 = userPeriodStatusVos2.size() - 1;
+                                UserPeriodStatusVo userPeriodStatusVo = userPeriodStatusVos2.get(numIndex2);
+                                LambdaQueryWrapper<UserStudyRecordPhoto> lqw = Wrappers.lambdaQuery();
+                                lqw.eq(UserStudyRecordPhoto::getPeriodId, userPeriodStatusVo.getId());
+                                List<UserStudyRecordPhoto> videoPhoto2 = userStudyRecordPhotoService.list(lqw);
+                                syncUserStudyRec.setCreateTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                syncUserStudyRec.setEndTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                syncUserChapterItem.setStudyIP(userPeriodStatusVo.getIp());
+                                List<SyncUserImageRc> ImgList = new ArrayList<>();
+                                for (UserStudyRecordPhoto videoPhoto : videoPhoto2) {
+                                    SyncUserImageRc imageRc = new SyncUserImageRc();
+                                    imageRc.setImgSrc(ossHost+"/"+videoPhoto.getPhoto());
+                                    imageRc.setCreateTime(DateUtils.timestampToDateFormat(videoPhoto.getCreateTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                    imageRc.setMatchData(Validator.isNotEmpty(videoPhoto.getSimilarity())?videoPhoto.getSimilarity().toString():null);
+                                    ImgList.add(imageRc);
+                                }
+                            }
+                            RecList.add(syncUserStudyRec);
+                        }
+                        syncUserChapterItem.setRecList(RecList);
+                        ChapterList.add(syncUserChapterItem);
+                    });
+
+                }
+            });
+        }
+        studyRec.setChapterList(ChapterList);
+        //学习记录推送到旧系统
+        Map<String, String> params = new HashMap<>();
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+        params.put("stamp", nowTime.toString());
+        params.put("sign", sign);
+        params.put("jsonstr", JSONObject.toJSONString(studyRec));
+        String respone = "";
+        try {
+            respone = HttpUtils.postFormBody(SYNC_PATH, params);
+        } catch (IOException e) {
+            throw new CustomException("请求错误");
+        }
+        return studyRec;
+    }
+
     /**
      * 打回操作
      *
@@ -450,6 +613,8 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         return baseMapper.todayStudySectionNum(bo);
     }
 
+
+
     //学时通过处理事件
     private void periodPass(ClassGradeUserQueryBo classGradeUserQueryBo) {
         //生成证书

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodSectionVo.java

@@ -165,6 +165,8 @@ public class ClassPeriodSectionVo implements Comparable<ClassPeriodSectionVo> {
 	@Excel(name = "节类型 1录播 2直播 3回放")
 	@ApiModelProperty("节类型 1录播 2直播 3回放")
 	private Integer sectionType;
+	@ApiModelProperty("录播地址")
+	private String recordingUrl;
 
 	@Override
 	public int compareTo(ClassPeriodSectionVo o) {

+ 29 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserChapterList.java

@@ -0,0 +1,29 @@
+package com.zhongzheng.modules.grade.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SyncUserChapterList {
+    private static final long serialVersionUID = 1L;
+
+    private Long ChapterId;
+
+    private String ChapterName;
+
+    private String ImageSrc;
+
+    private String ImageTime;
+
+    private String MatchData;
+
+    private String ExamTime;
+
+    private String ExamScore;
+
+    private String StudyIP;
+
+    private List<SyncUserStudyRec> RecList;
+}

+ 35 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserCourseStudyRec.java

@@ -0,0 +1,35 @@
+package com.zhongzheng.modules.grade.vo;
+
+import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SyncUserCourseStudyRec {
+    private static final long serialVersionUID = 1L;
+
+    private String Name;
+
+    private String IdNum;
+
+    private String Mobile;
+
+    private String Gender;
+
+    private String RecentPhotoSrc;
+
+    private String IdcardPhotoSrc;
+
+    private String IdcardPhotoSrc2;
+
+    private Long CourseId;
+
+    private String CourseBuyTime;
+
+    private String ClassNo;
+
+    private List<SyncUserChapterList> ChapterList;
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserImageRc.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.grade.vo;
+
+import lombok.Data;
+
+@Data
+public class SyncUserImageRc {
+    private static final long serialVersionUID = 1L;
+
+    private String ImgSrc;
+
+    private String CreateTime;
+
+    private String MatchData;
+}

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserStudyRec.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.grade.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SyncUserStudyRec {
+    private static final long serialVersionUID = 1L;
+
+    private Long VideoId;
+
+    private String VideoKey;
+
+    private String CreateTime;
+
+    private String EndTime;
+
+    private String StudyIP;
+
+    private List<SyncUserImageRc> ImgList;
+}

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/UserPeriodStatusVo.java

@@ -93,4 +93,10 @@ public class UserPeriodStatusVo {
 
 	@ApiModelProperty("节时长(分钟)")
 	private Long durationTime;
+
+	/** 访问IP */
+	@Excel(name = "访问IP")
+	@ApiModelProperty("访问IP")
+	private String ip;
+
 }

+ 6 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java

@@ -72,5 +72,10 @@ public class UserBankRecordAddBo {
     /** 题卷类型 1章卷 2节卷 3模块卷 */
     @ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
     private Integer type;
-
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
+    /** 相似度 */
+    @ApiModelProperty("相似度")
+    private Integer similarity;
 }

+ 6 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordEditBo.java

@@ -75,5 +75,10 @@ public class UserBankRecordEditBo {
     /** 题卷类型 1章卷 2节卷 3模块卷 */
     @ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
     private Integer type;
-
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
+    /** 相似度 */
+    @ApiModelProperty("相似度")
+    private Integer similarity;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordAddBo.java

@@ -86,4 +86,10 @@ public class UserStudyRecordAddBo {
     private String identification;;
     @ApiModelProperty(" 节类型 1录播 2直播 3回放")
     private Integer sectionType;
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
+    /** 相似度 */
+    @ApiModelProperty("相似度")
+    private Integer similarity;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordEditBo.java

@@ -88,4 +88,7 @@ public class UserStudyRecordEditBo {
     /**  来源平台 1小程序 2网站 */
     @ApiModelProperty(" 来源平台 1小程序 2网站")
     private String fromPlat;
+    /** 访问IP */
+    @ApiModelProperty("访问IP")
+    private String ip;
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordPhotoAddBo.java

@@ -42,4 +42,9 @@ public class UserStudyRecordPhotoAddBo {
     @ApiModelProperty("用户ID")
     private Long userId;
 
+
+    /** 相似度 */
+    @ApiModelProperty("相似度")
+    private Integer similarity;
+
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserStudyRecordPhotoEditBo.java

@@ -46,4 +46,7 @@ public class UserStudyRecordPhotoEditBo {
     @ApiModelProperty("用户ID")
     private Long userId;
 
+    /** 相似度 */
+    @ApiModelProperty("相似度")
+    private Integer similarity;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserBankRecord.java

@@ -66,4 +66,6 @@ private static final long serialVersionUID=1L;
 
     /** 题卷类型 1章卷 2节卷 3模块卷 */
     private Integer type;
+    /** 访问IP */
+    private String ip;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyRecord.java

@@ -77,4 +77,6 @@ private static final long serialVersionUID=1L;
     private String identification;
     /**  节类型 1录播 2直播 3回放 */
     private Integer sectionType;
+    /** 访问IP */
+    private String ip;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyRecordPhoto.java

@@ -43,4 +43,7 @@ private static final long serialVersionUID=1L;
     private Integer status;
     /** 用户ID */
     private Long userId;
+
+    /** 相似度 */
+    private Integer similarity;
 }

+ 5 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.grade.domain.UserPeriod;
 import com.zhongzheng.modules.grade.domain.UserPeriodStatus;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
@@ -130,7 +132,7 @@ public class UserBankRecordServiceImpl extends ServiceImpl<UserBankRecordMapper,
         validEntityBeforeSave(add);
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
-
+        add.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
 
         if(this.save(add)){
             Long recordId =  add.getRecordId();
@@ -164,7 +166,7 @@ public class UserBankRecordServiceImpl extends ServiceImpl<UserBankRecordMapper,
         boolean b = this.updateById(update);
         UserBankRecordVo userBankRecordVo = this.queryById(update.getRecordId());
         updateExam(userBankRecordVo,update);
-        if(userBankRecordVo.getType()==1){//章卷才进来
+        if(userBankRecordVo.getType()==1||userBankRecordVo.getType()==3){//章卷模块卷才进来
             //判断有无学习结束
             UserStudyRecord userStudyRecord = new UserStudyRecord();
             userStudyRecord.setUserId(bo.getUserId());
@@ -208,6 +210,7 @@ public class UserBankRecordServiceImpl extends ServiceImpl<UserBankRecordMapper,
                 userPeriodStatusAddBo.setCreateTime(DateUtils.getNowTime());
                 userPeriodStatusAddBo.setUpdateTime(DateUtils.getNowTime());
                 userPeriodStatusAddBo.setPerformance(userBankRecordVo.getPerformance());
+                userPeriodStatusAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
                 iUserPeriodStatusService.save(userPeriodStatusAddBo);
                 //将照片绑定学时
                 LambdaQueryWrapper<UserStudyRecordPhoto> lqw = Wrappers.lambdaQuery();

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -14,6 +14,8 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ip.IpUtils;
 import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CoursePhotoLog;
@@ -298,7 +300,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
 //        if(Validator.isEmpty(bo.getOrderGoodsId())){
 //            throw new CustomException("订单商品ID缺失");
 //        }
-
+        bo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
         String key = "STUDY_Record_"+bo.getUserId();
         Long value = redisCache.getCacheObject(key);
         if(value!=null&&(Validator.isEmpty(bo.getStatus())||bo.getStatus()!=1)){
@@ -884,6 +886,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             userPeriodStatusAddBo.setPeriodId(userPeriod.getId());
             userPeriodStatusAddBo.setCreateTime(DateUtils.getNowTime());
             userPeriodStatusAddBo.setUpdateTime(DateUtils.getNowTime());
+            userPeriodStatusAddBo.setIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
             iUserPeriodStatusService.save(userPeriodStatusAddBo);
             periodId = userPeriodStatusAddBo.getId();
         } else {
@@ -941,6 +944,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             userStudyRecordPhotoAddBo.setPeriodId(periodId);
             userStudyRecordPhotoAddBo.setStatus(1);
             userStudyRecordPhotoAddBo.setUserId(entity.getUserId());
+            userStudyRecordPhotoAddBo.setSimilarity(bo.getSimilarity());
             userStudyRecordPhotoService.insertByAddBo(userStudyRecordPhotoAddBo);
         }
     }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserBankRecordVo.java

@@ -92,5 +92,9 @@ public class UserBankRecordVo {
 	/** 题卷类型 1章卷 2节卷 3模块卷 */
 	@ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
 	private Integer type;
+	/** 访问IP */
+	@Excel(name = "访问IP")
+	@ApiModelProperty("访问IP")
+	private String ip;
 
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyRecordPhotoVo.java

@@ -45,4 +45,13 @@ public class UserStudyRecordPhotoVo {
 	@ApiModelProperty("1 视频 2卷")
 	private Integer status;
 
+	/** 用户ID */
+	@Excel(name = "用户ID")
+	@ApiModelProperty("用户ID")
+	private Long userId;
+	/** 相似度 */
+	@Excel(name = "相似度")
+	@ApiModelProperty("相似度")
+	private Integer similarity;
+
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyRecordVo.java

@@ -117,4 +117,9 @@ public class UserStudyRecordVo {
 	@Excel(name = "来源平台 1小程序 2PC网站")
 	@ApiModelProperty("来源平台 1小程序 2PC网站")
 	private String fromPlat;
+
+	/** 访问IP */
+	@Excel(name = "访问IP")
+	@ApiModelProperty("访问IP")
+	private String ip;
 }

+ 2 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -203,6 +203,7 @@
         <result property="realLiveStartTime" column="real_live_start_time"/>
         <result property="realLiveEndTime" column="real_live_end_time"/>
         <result property="realDuration" column="real_duration"/>
+        <result property="recordingUrl" column="recording_url"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.course.vo.CourseChapterVo" id="CourseChapterResultVo">
@@ -1031,6 +1032,7 @@
         cs.real_live_end_time,
         cs.real_duration,
         NULL AS class_hours,
+        cs.recording_url,
         3 AS type
         FROM
         course_chapter_section ccs

+ 2 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/UserPeriodStatusMapper.xml

@@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="auditUserName" column="audit_user_name"/>
         <result property="auditTime" column="audit_time"/>
         <result property="auditReason" column="audit_reason"/>
+        <result property="ip" column="ip"/>
     </resultMap>
 
 
@@ -33,6 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="performance" column="performance"/>
         <result property="auditUserName" column="audit_user_name"/>
         <result property="durationTime" column="duration_time"/>
+        <result property="ip" column="ip"/>
     </resultMap>
 
     <select id="selectPeriodStatus" parameterType="com.zhongzheng.modules.grade.bo.UserPeriodQueryBo" resultMap="UserPeriodStatusVo">

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -22,6 +22,7 @@
         <result property="orderGoodsId" column="order_goods_id"/>
         <result property="photo" column="photo"/>
         <result property="fromPlat" column="from_plat"/>
+        <result property="ip" column="ip"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.user.vo.GoodsStudyRecordVo" id="GoodsStudyRecordVoResult">

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordPhotoMapper.xml

@@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="periodId" column="period_id"/>
         <result property="status" column="status"/>
         <result property="userId" column="user_id"/>
+        <result property="similarity" column="similarity"/>
     </resultMap>
 
     <select id="selectGradePhoto" parameterType="map" resultType="string">