Browse Source

生成证书

he2802 3 years ago
parent
commit
d075defc72
21 changed files with 513 additions and 33 deletions
  1. 3 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  2. 3 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  3. 51 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonCertificateController.java
  4. 65 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserCertificateController.java
  5. 3 0
      zhongzheng-api/src/main/resources/application-dev.yml
  6. 3 0
      zhongzheng-api/src/main/resources/application-prod.yml
  7. 13 1
      zhongzheng-common/pom.xml
  8. 14 11
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java
  9. 229 19
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  10. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/CertificatePhotoVo.java
  11. 11 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  12. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserCertificateAddBo.java
  13. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserCertificateEditBo.java
  14. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserCertificateQueryBo.java
  15. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserCertificate.java
  16. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserCertificateMapper.java
  17. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserCertificateService.java
  18. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserCertificateServiceImpl.java
  19. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  20. 18 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserCertificateVo.java
  21. 36 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserCertificateMapper.xml

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

@@ -109,3 +109,6 @@ wx:
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         notifyUrl: http://42.192.164.187:19005/wx/pay/callback
         notifyUrl: http://42.192.164.187:19005/wx/pay/callback
+
+certificate:
+    host: http://192.168.1.38:8000/

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

@@ -109,3 +109,6 @@ wx:
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         notifyUrl: https://api.xyyxt.net/wx/pay/callback
         notifyUrl: https://api.xyyxt.net/wx/pay/callback
+
+certificate:
+    host: http://192.168.1.38:8000/

+ 51 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonCertificateController.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.controller.cmmon;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.modules.course.bo.CourseQueryBo;
+import com.zhongzheng.modules.course.service.ICourseService;
+import com.zhongzheng.modules.course.vo.CourseUserVo;
+import com.zhongzheng.modules.goods.bo.GoodsAttachedQueryBo;
+import com.zhongzheng.modules.goods.vo.GoodsUserVo;
+import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.order.domain.Printer;
+import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
+import com.zhongzheng.modules.user.service.IUserCertificateService;
+import com.zhongzheng.modules.user.vo.UserCertificateVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * 证书Controller
+ *
+ * @author hjl
+ * @date 2021-10-09
+ */
+@Api(value = "证书游客访问接口", tags = {"游客访问接口"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/certificate/")
+public class CommonCertificateController extends BaseController {
+
+    private final IUserCertificateService iUserCertificateService;
+
+
+    @ApiOperation("获取证书详细信息")
+    @GetMapping("/detail")
+    public AjaxResult<UserCertificateVo> getInfo(UserCertificateQueryBo bo) {
+        return AjaxResult.success(iUserCertificateService.selectDetail(bo));
+    }
+
+
+}

+ 65 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserCertificateController.java

@@ -0,0 +1,65 @@
+package com.zhongzheng.controller.user;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import com.zhongzheng.modules.user.service.IUserCertificateService;
+import com.zhongzheng.modules.user.vo.UserCertificateVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 用户证书Controller
+ *
+ * @author hjl
+ * @date 2022-02-17
+ */
+@Api(value = "用户证书控制器", tags = {"用户证书管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/user/certificate")
+public class UserCertificateController extends BaseController {
+
+    private final IUserCertificateService iUserCertificateService;
+
+    private final WxTokenService wxTokenService;
+    /**
+     * 查询用户证书列表
+     */
+    @ApiOperation("查询用户证书列表")
+    @PreAuthorize("@ss.hasPermi('system:certificate:list')")
+    @GetMapping("/list")
+    public TableDataInfo<UserCertificateVo> list(UserCertificateQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<UserCertificateVo> list = iUserCertificateService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 获取用户证书详细信息
+     */
+    @ApiOperation("用户证书详细信息")
+    @PreAuthorize("@ss.hasPermi('system:certificate:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<UserCertificateVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iUserCertificateService.queryById(id));
+    }
+
+
+}

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

@@ -109,3 +109,6 @@ wx:
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         notifyUrl: http://42.192.164.187:19005/wx/pay/callback
         notifyUrl: http://42.192.164.187:19005/wx/pay/callback
+
+certificate:
+    host: http://192.168.1.38:8000/

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

@@ -121,3 +121,6 @@ wx:
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         key: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         appsecret: GdXyPxYjZx1234123yJzXgDxYpXyjpx9
         notifyUrl: https://api.xyyxt.net/wx/pay/callback
         notifyUrl: https://api.xyyxt.net/wx/pay/callback
+
+certificate:
+    host: http://192.168.1.38:8000/

+ 13 - 1
zhongzheng-common/pom.xml

@@ -59,7 +59,19 @@
             <artifactId>jackson-databind</artifactId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
         </dependency>
 
 
-        <!-- OSS SDK 相关依赖 -->
+        <!-- 二维码 -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+
+
         <!-- OSS SDK 相关依赖 -->
         <!-- OSS SDK 相关依赖 -->
         <dependency>
         <dependency>
             <groupId>com.aliyun.oss</groupId>
             <groupId>com.aliyun.oss</groupId>

+ 14 - 11
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java

@@ -111,33 +111,33 @@ public class OssServiceImpl implements OssService {
         int intDay = calCurrent.get(Calendar.DATE);
         int intDay = calCurrent.get(Calendar.DATE);
         int intMonth = calCurrent.get(Calendar.MONTH) + 1;
         int intMonth = calCurrent.get(Calendar.MONTH) + 1;
         int intYear = calCurrent.get(Calendar.YEAR);
         int intYear = calCurrent.get(Calendar.YEAR);
-        String now = String.valueOf(System.currentTimeMillis()) + "_";
+        String now = String.valueOf(System.currentTimeMillis()) ;
 
 
         RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
         RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
         switch(ossRequest.getImageStatus()){
         switch(ossRequest.getImageStatus()){
             case 0 :
             case 0 :
-                RandomFilename = "avatar"+"/"+sdf.format(new Date());
+                RandomFilename = "avatar"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 1 :
             case 1 :
-                RandomFilename = "IDNumber"+"/"+sdf.format(new Date());
+                RandomFilename = "IDNumber"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 2 :
             case 2 :
-                RandomFilename = "QuestionBank"+"/"+sdf.format(new Date());
+                RandomFilename = "QuestionBank"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 3 :
             case 3 :
-                RandomFilename = "guide"+"/"+sdf.format(new Date());
+                RandomFilename = "guide"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 4 :
             case 4 :
-                RandomFilename = "advertising"+"/"+sdf.format(new Date());
+                RandomFilename = "advertising"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 5 :
             case 5 :
-                RandomFilename = "IDCard"+"/"+sdf.format(new Date());
+                RandomFilename = "IDCard"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 6 :
             case 6 :
-                RandomFilename = "file"+"/"+sdf.format(new Date());
+                RandomFilename = "file"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
             case 7 :
             case 7 :
-                RandomFilename = "certificate"+"/"+sdf.format(new Date());
+                RandomFilename = "certificate"+"/"+sdf.format(new Date())+"/"+now;
                 break;
                 break;
         }
         }
 
 
@@ -186,13 +186,16 @@ public class OssServiceImpl implements OssService {
         try{
         try{
             OssRequest ossRequest = new OssRequest();
             OssRequest ossRequest = new OssRequest();
             ossRequest.setImageStatus(7);
             ossRequest.setImageStatus(7);
-            String fileName = ALIYUN_OSS_DIR_PREFIX+generateRandomFilename(ossRequest)+".jpg";
+            String fileName = generateRandomFilename(ossRequest)+".jpg";
 
 
             //调用oss方法实现上传
             //调用oss方法实现上传
             //第一个参数  Bucket名称
             //第一个参数  Bucket名称
             //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
             //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
             //第三个参数  上传文件输入流
             //第三个参数  上传文件输入流
-            PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream);
+            ObjectMetadata metadata = new ObjectMetadata();
+            metadata.setHeader("Content-Disposition", "attachment;filename="+fileName);
+            fileName = ALIYUN_OSS_DIR_PREFIX+fileName;
+            PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream,metadata);
             // 关闭OSSClient。
             // 关闭OSSClient。
             //ossClient.shutdown();
             //ossClient.shutdown();
             return fileName;
             return fileName;

+ 229 - 19
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -4,6 +4,9 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ServletUtils;
@@ -19,16 +22,23 @@ import com.zhongzheng.modules.base.vo.CertificateTpVo;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.CourseUserEducationTypeVo;
 import com.zhongzheng.modules.course.vo.CourseUserEducationTypeVo;
+import com.zhongzheng.modules.goods.domain.GoodsAttached;
 import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
 import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.user.bo.UserCertificateAddBo;
 import com.zhongzheng.modules.user.bo.UserCertificateAddBo;
+import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
 import com.zhongzheng.modules.user.service.IUserCertificateService;
 import com.zhongzheng.modules.user.service.IUserCertificateService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.service.IUserStudyRecordService;
+import com.zhongzheng.modules.user.vo.UserStudyRecordVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.user.vo.UserVo;
+import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -64,6 +74,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
     private IUserService iUserService;
     private IUserService iUserService;
     @Autowired
     @Autowired
     private OssService ossService;
     private OssService ossService;
+    @Autowired
+    private IUserStudyRecordService iUserStudyRecordService;
+
+
+    @Value("${certificate.host}")
+    private String CERTIFICATE_HOST;
 
 
     @Override
     @Override
     public CertificateTpVo queryById(Long tpId){
     public CertificateTpVo queryById(Long tpId){
@@ -131,6 +147,15 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             throw new CustomException("数据错误");
             throw new CustomException("数据错误");
         }
         }
         GoodsVo goodsVo = iGoodsService.selectDetail(bo.getGoodsId());
         GoodsVo goodsVo = iGoodsService.selectDetail(bo.getGoodsId());
+        //获取培训开始时间
+        UserStudyRecordQueryBo studyRecordQueryBo = new UserStudyRecordQueryBo();
+        studyRecordQueryBo.setUserId(bo.getUserId());
+        studyRecordQueryBo.setGoodsId(bo.getGoodsId());
+        studyRecordQueryBo.setGradeId(bo.getGradeId());
+        UserStudyRecordVo studyRecordVo = iUserStudyRecordService.queryLast(studyRecordQueryBo);
+        //获取培训结束时间
+        ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getUserId, bo.getUserId()).eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
+        //获取章列表
         List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
         List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
         UserVo userVo = iUserService.queryById(bo.getUserId());
         UserVo userVo = iUserService.queryById(bo.getUserId());
         if(Validator.isNotEmpty(goodsVo.getCertificateIds())){
         if(Validator.isNotEmpty(goodsVo.getCertificateIds())){
@@ -159,21 +184,12 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                     vo.setDateY(nowDate.substring(0, 4));
                     vo.setDateY(nowDate.substring(0, 4));
                     vo.setDateM(nowDate.substring(5, 7));
                     vo.setDateM(nowDate.substring(5, 7));
                     vo.setDateD(nowDate.substring(8, 10));
                     vo.setDateD(nowDate.substring(8, 10));
+                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+                    vo.setTrainStartTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     vo.setChapterList(chapterListTxt);
                     vo.setChapterList(chapterListTxt);
                     String ossPath = drawPic(vo);
                     String ossPath = drawPic(vo);
-
-                    UserCertificateAddBo addBo = new UserCertificateAddBo();
-                    addBo.setUserId(bo.getUserId());
-                    addBo.setGoodsId(bo.getGoodsId());
-                    addBo.setGradeId(bo.getGradeId());
-                    addBo.setCertificateTpId(tpVo.getTpId());
-                    addBo.setCertificateCode(code);
-                    addBo.setCertificatePath(ossPath);
-                    addBo.setClassHours(goodsVo.getClassHours());
-                    addBo.setEducationTypeId(goodsVo.getEducationTypeId());
-                    addBo.setProjectId(goodsVo.getProjectId());
-                    addBo.setBusinessId(goodsVo.getBusinessId());
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
                     iUserCertificateService.insertByAddBo(addBo);
                     iUserCertificateService.insertByAddBo(addBo);
 
 
                 }
                 }
@@ -191,14 +207,18 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                     vo.setDateY(nowDate.substring(0, 4));
                     vo.setDateY(nowDate.substring(0, 4));
                     vo.setDateM(nowDate.substring(5, 7));
                     vo.setDateM(nowDate.substring(5, 7));
                     vo.setDateD(nowDate.substring(8, 10));
                     vo.setDateD(nowDate.substring(8, 10));
+                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+                    vo.setTrainStartTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     vo.setChapterList(chapterListTxt);
                     vo.setChapterList(chapterListTxt);
-                    drawPic(vo);
+                    String ossPath = drawPic(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
 
 
                 }
                 }
                 else if("certificate03".equals(tpVo.getKeyValue())){
                 else if("certificate03".equals(tpVo.getKeyValue())){
                     CertificatePhotoVo vo = new CertificatePhotoVo();
                     CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYZC"+nowDate.substring(2, 4)+"03"+getCertificateCode();
+                    String code = "XYPX01YJ"+nowDate.substring(0, 4)+getCertificateCode();
                     vo.setCode(code);
                     vo.setCode(code);
                     vo.setRealname(userVo.getRealname());
                     vo.setRealname(userVo.getRealname());
                     vo.setIdCard(userVo.getIdCard());
                     vo.setIdCard(userVo.getIdCard());
@@ -217,16 +237,149 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
                     vo.setDateD(nowDate.substring(8, 10));
                     vo.setDateD(nowDate.substring(8, 10));
                     vo.setMajor("一级建造师继续教育培训");
                     vo.setMajor("一级建造师继续教育培训");
                     vo.setRemark1("其中必修");
                     vo.setRemark1("其中必修");
-                    vo.setRemark2("课 60 学时,测试成绩合格。");
+                    vo.setRemark2("课 "+goodsVo.getClassHours()+" 学时,测试成绩合格。");
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     List<String> chapterListTxt = changeChapterList(chapterList);
                     vo.setChapterList(chapterListTxt);
                     vo.setChapterList(chapterListTxt);
-                    drawPicOneBuild(vo);
-
+                    String ossPath =drawPicOneBuild(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
+                }
+                else if("certificate04".equals(tpVo.getKeyValue())){
+                    CertificatePhotoVo vo = new CertificatePhotoVo();
+                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+                    vo.setCode(code);
+                    vo.setRealname(userVo.getRealname());
+                    vo.setIdCard(userVo.getIdCard());
+                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+                    vo.setYear(date.substring(0, 4));
+                    vo.setType("选修");
+                    vo.setMajor("网络班");
+                    String sex = "男";
+                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                        sex = "女";
+                    }
+                    vo.setSex(sex);
+                    vo.setClassHours(goodsVo.getClassHours()+"");
+                    vo.setDateY(nowDate.substring(0, 4));
+                    vo.setDateM(nowDate.substring(5, 7));
+                    vo.setDateD(nowDate.substring(8, 10));
+                    vo.setMajor("一级建造师继续教育培训");
+                    vo.setRemark1("其中建");
+                    vo.setRemark2("筑工程课 "+goodsVo.getClassHours()+" 学时,测试成绩合格。");
+                    List<String> chapterListTxt = changeChapterList(chapterList);
+                    vo.setChapterList(chapterListTxt);
+                    String ossPath =drawPicOneBuild(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
+                }
+                else if("certificate05".equals(tpVo.getKeyValue())){
+                    CertificatePhotoVo vo = new CertificatePhotoVo();
+                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+                    vo.setCode(code);
+                    vo.setRealname(userVo.getRealname());
+                    vo.setIdCard(userVo.getIdCard());
+                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+                    vo.setYear(date.substring(0, 4));
+                    vo.setType("选修");
+                    vo.setMajor("网络班");
+                    String sex = "男";
+                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                        sex = "女";
+                    }
+                    vo.setSex(sex);
+                    vo.setClassHours(goodsVo.getClassHours()+"");
+                    vo.setDateY(nowDate.substring(0, 4));
+                    vo.setDateM(nowDate.substring(5, 7));
+                    vo.setDateD(nowDate.substring(8, 10));
+                    vo.setMajor("一级建造师继续教育培训");
+                    vo.setRemark1("其中机");
+                    vo.setRemark2("电工程课 "+goodsVo.getClassHours()+" 学时,测试成绩合格。");
+                    List<String> chapterListTxt = changeChapterList(chapterList);
+                    vo.setChapterList(chapterListTxt);
+                    String ossPath =drawPicOneBuild(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
+                }
+                else if("certificate06".equals(tpVo.getKeyValue())){
+                    CertificatePhotoVo vo = new CertificatePhotoVo();
+                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+                    vo.setCode(code);
+                    vo.setRealname(userVo.getRealname());
+                    vo.setIdCard(userVo.getIdCard());
+                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+                    vo.setYear(date.substring(0, 4));
+                    vo.setType("选修");
+                    vo.setMajor("网络班");
+                    String sex = "男";
+                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                        sex = "女";
+                    }
+                    vo.setSex(sex);
+                    vo.setClassHours(goodsVo.getClassHours()+"");
+                    vo.setDateY(nowDate.substring(0, 4));
+                    vo.setDateM(nowDate.substring(5, 7));
+                    vo.setDateD(nowDate.substring(8, 10));
+                    vo.setMajor("一级建造师继续教育培训");
+                    vo.setRemark1("其中市");
+                    vo.setRemark2("政公用工程课 "+goodsVo.getClassHours()+" 学时,测试成绩合格。");
+                    List<String> chapterListTxt = changeChapterList(chapterList);
+                    vo.setChapterList(chapterListTxt);
+                    String ossPath =drawPicOneBuild(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
+                }
+                else if("certificate07".equals(tpVo.getKeyValue())){
+                    CertificatePhotoVo vo = new CertificatePhotoVo();
+                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+                    vo.setCode(code);
+                    vo.setRealname(userVo.getRealname());
+                    vo.setIdCard(userVo.getIdCard());
+                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+                    vo.setYear(date.substring(0, 4));
+                    vo.setType("选修");
+                    vo.setMajor("网络班");
+                    String sex = "男";
+                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                        sex = "女";
+                    }
+                    vo.setSex(sex);
+                    vo.setClassHours(goodsVo.getClassHours()+"");
+                    vo.setDateY(nowDate.substring(0, 4));
+                    vo.setDateM(nowDate.substring(5, 7));
+                    vo.setDateD(nowDate.substring(8, 10));
+                    vo.setMajor("一级建造师继续教育培训");
+                    vo.setRemark1("其中公");
+                    vo.setRemark2("路工程课 "+goodsVo.getClassHours()+" 学时,测试成绩合格。");
+                    List<String> chapterListTxt = changeChapterList(chapterList);
+                    vo.setChapterList(chapterListTxt);
+                    String ossPath =drawPicOneBuild(vo);
+                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
+                    iUserCertificateService.insertByAddBo(addBo);
                 }
                 }
             }
             }
         }
         }
         return null;
         return null;
     }
     }
+
+    private UserCertificateAddBo mergeData(ClassGradeUserQueryBo bo, GoodsVo goodsVo,CertificatePhotoVo vo,Long certificateTpId,String certificatePath){
+        UserCertificateAddBo addBo = new UserCertificateAddBo();
+        addBo.setUserId(bo.getUserId());
+        addBo.setGoodsId(bo.getGoodsId());
+        addBo.setGradeId(bo.getGradeId());
+        addBo.setCertificateTpId(certificateTpId);
+        addBo.setCertificateCode(vo.getCode());
+        addBo.setCertificatePath(certificatePath);
+        addBo.setClassHours(goodsVo.getClassHours());
+        addBo.setEducationTypeId(goodsVo.getEducationTypeId());
+        addBo.setProjectId(goodsVo.getProjectId());
+        addBo.setBusinessId(goodsVo.getBusinessId());
+        addBo.setSchoolId(goodsVo.getGoodsId());
+        addBo.setMajorId(goodsVo.getMajorId());
+        addBo.setYear(vo.getYear());
+        addBo.setPushDate(DateUtils.getDate());
+        addBo.setChapterStr(ArrayUtils.toString(vo.getChapterList(), ","));
+        return addBo;
+    }
     private String getCertificateCode(){
     private String getCertificateCode(){
         Long id = iUserCertificateService.selectMaxId();
         Long id = iUserCertificateService.selectMaxId();
         String nowId = Long.toString(id);
         String nowId = Long.toString(id);
@@ -310,6 +463,13 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             g.drawString(entity.getDateY(), 2280, 1599);
             g.drawString(entity.getDateY(), 2280, 1599);
             g.drawString(entity.getDateM(), 2505, 1599);
             g.drawString(entity.getDateM(), 2505, 1599);
             g.drawString(entity.getDateD(), 2712, 1599);
             g.drawString(entity.getDateD(), 2712, 1599);
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"certificate.html?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 320, 320);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 320, 1330, 320, 320, null);
             // 完成模板修改
             // 完成模板修改
             g.dispose();
             g.dispose();
             // 获取新文件的地址
             // 获取新文件的地址
@@ -360,12 +520,22 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             g.drawString(entity.getDateM(), 1019, 677);
             g.drawString(entity.getDateM(), 1019, 677);
             g.drawString(entity.getDateD(), 1071, 677);
             g.drawString(entity.getDateD(), 1071, 677);
 
 
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"certificate.html?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 120, 120);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 128, 660, 120, 120, null);
             // 完成模板修改
             // 完成模板修改
             g.dispose();
             g.dispose();
             // 获取新文件的地址
             // 获取新文件的地址
             File outputfile = new File(imgName);
             File outputfile = new File(imgName);
             // 生成新的合成过的用户二维码并写入新图片
             // 生成新的合成过的用户二维码并写入新图片
-            ImageIO.write(imageLocal, "jpg", outputfile);
+    //        ImageIO.write(imageLocal, "jpg", outputfile);
+            //上传OSS
+            InputStream is =  bufferedImageToInputStream(imageLocal);
+            return ossService.uploadInputStream(is,7);
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
@@ -378,7 +548,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
     public InputStream bufferedImageToInputStream(BufferedImage image){
     public InputStream bufferedImageToInputStream(BufferedImage image){
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         try {
         try {
-            ImageIO.write(image, "png", os);
+            ImageIO.write(image, "jpg", os);
             InputStream input = new ByteArrayInputStream(os.toByteArray());
             InputStream input = new ByteArrayInputStream(os.toByteArray());
             return input;
             return input;
         } catch (IOException e) {
         } catch (IOException e) {
@@ -387,6 +557,46 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         return null;
         return null;
     }
     }
 
 
+    public  BufferedImage toBufferedImage(BitMatrix matrix) {
+        int black = 0xFF000000;
+        int white  = 0x00FFFFFF;
+        int width = matrix.getWidth();
+        int height = matrix.getHeight();
+        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        for (int x = 0; x < width; x++) {
+            for (int y = 0; y < height; y++) {
+                image.setRGB(x, y, matrix.get(x, y) ? black : white);
+            }
+        }
+        int imgHeight = image.getHeight();//取得图片的长和宽
+        int imgWidth = image.getWidth();
+        int c = image.getRGB(3, 3);
+        int alpha = 10;
+        //防止越位
+        if (alpha < 0) {
+            alpha = 0;
+        } else if (alpha > 10) {
+            alpha = 10;
+        }
+        BufferedImage tmpImg = new BufferedImage(imgWidth, imgHeight,BufferedImage.TYPE_4BYTE_ABGR);//新建一个类型支持透明的BufferedImage
+        for(int i = 0; i < imgWidth; ++i)//把原图片的内容复制到新的图片,同时把背景设为透明
+        {
+            for(int j = 0; j < imgHeight; ++j){
+                //把背景设为透明
+                if(image.getRGB(i, j) == c){
+                    tmpImg .setRGB(i, j, c & 0x00ffffff);
+                }
+                //设置透明度
+                else{
+                    int rgb = tmpImg .getRGB(i, j);
+                    rgb = ((alpha * 255 / 10) << 24) | (rgb & 0x00ffffff);
+                    tmpImg .setRGB(i, j, rgb);
+                }
+            }
+        }
+        return tmpImg ;
+    }
+
     @Override
     @Override
     public List<CertificateTpVo> selectList(CertificateTpQueryBo bo) {
     public List<CertificateTpVo> selectList(CertificateTpQueryBo bo) {
         return this.baseMapper.selectList(bo);
         return this.baseMapper.selectList(bo);

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/CertificatePhotoVo.java

@@ -48,5 +48,11 @@ public class CertificatePhotoVo {
 	private String remark1;
 	private String remark1;
 	@ApiModelProperty("说明2")
 	@ApiModelProperty("说明2")
 	private String remark2;
 	private String remark2;
+	/** 培训开始时间 */
+	@ApiModelProperty("培训开始时间")
+	private Long trainStartTime;
+	/** 培训结束时间 */
+	@ApiModelProperty("培训结束时间")
+	private Long trainEndTime;
 
 
 }
 }

+ 11 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.modules.base.service.ICertificateTpService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
@@ -63,6 +64,9 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     @Autowired
     @Autowired
     private IClassGradeUserService iClassGradeUserService;
     private IClassGradeUserService iClassGradeUserService;
 
 
+    @Autowired
+    private ICertificateTpService iCertificateTpService;
+
     @Autowired
     @Autowired
     private IUserService iUserService;
     private IUserService iUserService;
 
 
@@ -189,6 +193,12 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             classGradeUser1.setUpdateTime(DateUtils.getNowTime());
             classGradeUser1.setUpdateTime(DateUtils.getNowTime());
             List<ClassGradeUser> list1 = iClassGradeUserService.list(classGradeUser);
             List<ClassGradeUser> list1 = iClassGradeUserService.list(classGradeUser);
             iClassGradeUserService.update(classGradeUser1, classGradeUser);
             iClassGradeUserService.update(classGradeUser1, classGradeUser);
+            //生成证书
+            ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
+            classGradeUserQueryBo.setUserId(userPeriodVo.getUserId());
+            classGradeUserQueryBo.setGradeId(userPeriodVo.getGradeId());
+            classGradeUserQueryBo.setGoodsId(userPeriodVo.getGoodsId());
+            iCertificateTpService.makeCertificatePhoto(classGradeUserQueryBo);
         } else {
         } else {
             //作弊情况下判断是否已经全部审核完成,完成发送消息
             //作弊情况下判断是否已经全部审核完成,完成发送消息
             for (UserPeriod userPeriod : listPeriodVo) {
             for (UserPeriod userPeriod : listPeriodVo) {
@@ -273,7 +283,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         Integer gradePeriodStatus = iClassGradeUserService.updateUserPeriodStatus(classGradeUserQueryBo);
         Integer gradePeriodStatus = iClassGradeUserService.updateUserPeriodStatus(classGradeUserQueryBo);
         if(gradePeriodStatus==1){
         if(gradePeriodStatus==1){
             //生成证书
             //生成证书
-
+            iCertificateTpService.makeCertificatePhoto(classGradeUserQueryBo);
         }
         }
 
 
         //发送消息
         //发送消息

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserCertificateAddBo.java

@@ -68,4 +68,13 @@ public class UserCertificateAddBo {
     /** 所属专业 */
     /** 所属专业 */
     @ApiModelProperty("所属专业")
     @ApiModelProperty("所属专业")
     private Long majorId;
     private Long majorId;
+    /** 证书学习年份 */
+    @ApiModelProperty("证书学习年份")
+    private String year;
+    /** 证书发布年份 */
+    @ApiModelProperty("证书发布年份")
+    private String pushDate;
+    /** 章名,拼接 */
+    @ApiModelProperty("章名,拼接")
+    private String chapterStr;
 }
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserCertificateEditBo.java

@@ -77,4 +77,13 @@ public class UserCertificateEditBo {
     /** 所属专业 */
     /** 所属专业 */
     @ApiModelProperty("所属专业")
     @ApiModelProperty("所属专业")
     private Long majorId;
     private Long majorId;
+    /** 证书学习年份 */
+    @ApiModelProperty("证书学习年份")
+    private String year;
+    /** 证书发布年份 */
+    @ApiModelProperty("证书发布年份")
+    private String pushDate;
+    /** 章名,拼接 */
+    @ApiModelProperty("章名,拼接")
+    private String chapterStr;
 }
 }

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

@@ -86,4 +86,10 @@ public class UserCertificateQueryBo extends BaseEntity {
 	/** 所属专业 */
 	/** 所属专业 */
 	@ApiModelProperty("所属专业")
 	@ApiModelProperty("所属专业")
 	private Long majorId;
 	private Long majorId;
+	/** 证书学习年份 */
+	@ApiModelProperty("证书学习年份")
+	private String year;
+	/** 证书发布年份 */
+	@ApiModelProperty("证书发布年份")
+	private String pushDate;
 }
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserCertificate.java

@@ -60,4 +60,10 @@ private static final long serialVersionUID=1L;
     private Long schoolId;
     private Long schoolId;
     /** 所属专业 */
     /** 所属专业 */
     private Long majorId;
     private Long majorId;
+    /** 证书学习年份 */
+    private String year;
+    /** 证书发布年份 */
+    private String pushDate;
+    /** 章名,拼接 */
+    private String chapterStr;
 }
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserCertificateMapper.java

@@ -16,4 +16,5 @@ import java.util.List;
 public interface UserCertificateMapper extends BaseMapper<UserCertificate> {
 public interface UserCertificateMapper extends BaseMapper<UserCertificate> {
     Long selectMaxId();
     Long selectMaxId();
     List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
     List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
+    UserCertificateVo selectDetail(UserCertificateQueryBo code);
 }
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserCertificateService.java

@@ -32,6 +32,8 @@ public interface IUserCertificateService extends IService<UserCertificate> {
 
 
 	List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
 	List<UserCertificateVo> selectList(UserCertificateQueryBo bo);
 
 
+	UserCertificateVo selectDetail(UserCertificateQueryBo bo);
+
 	/**
 	/**
 	 * 根据新增业务对象插入用户证书
 	 * 根据新增业务对象插入用户证书
 	 * @param bo 用户证书新增业务对象
 	 * @param bo 用户证书新增业务对象

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserCertificateServiceImpl.java

@@ -1,8 +1,13 @@
 package com.zhongzheng.modules.user.service.impl;
 package com.zhongzheng.modules.user.service.impl;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.course.vo.CourseChapterVo;
+import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.user.bo.UserCertificateAddBo;
 import com.zhongzheng.modules.user.bo.UserCertificateAddBo;
 import com.zhongzheng.modules.user.bo.UserCertificateEditBo;
 import com.zhongzheng.modules.user.bo.UserCertificateEditBo;
 import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
 import com.zhongzheng.modules.user.bo.UserCertificateQueryBo;
@@ -10,6 +15,7 @@ import com.zhongzheng.modules.user.domain.UserCertificate;
 import com.zhongzheng.modules.user.mapper.UserCertificateMapper;
 import com.zhongzheng.modules.user.mapper.UserCertificateMapper;
 import com.zhongzheng.modules.user.service.IUserCertificateService;
 import com.zhongzheng.modules.user.service.IUserCertificateService;
 import com.zhongzheng.modules.user.vo.UserCertificateVo;
 import com.zhongzheng.modules.user.vo.UserCertificateVo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -30,6 +36,9 @@ import java.util.stream.Collectors;
 @Service
 @Service
 public class UserCertificateServiceImpl extends ServiceImpl<UserCertificateMapper, UserCertificate> implements IUserCertificateService {
 public class UserCertificateServiceImpl extends ServiceImpl<UserCertificateMapper, UserCertificate> implements IUserCertificateService {
 
 
+    @Autowired
+    private IClassGradeUserService iClassGradeUserService;
+
     @Override
     @Override
     public UserCertificateVo queryById(Long id){
     public UserCertificateVo queryById(Long id){
         UserCertificate db = this.baseMapper.selectById(id);
         UserCertificate db = this.baseMapper.selectById(id);
@@ -60,6 +69,21 @@ public class UserCertificateServiceImpl extends ServiceImpl<UserCertificateMappe
         return this.baseMapper.selectList(bo);
         return this.baseMapper.selectList(bo);
     }
     }
 
 
+    @Override
+    public UserCertificateVo selectDetail(UserCertificateQueryBo bo) {
+        UserCertificateVo userCertificateVo = this.baseMapper.selectDetail(bo);
+        if(Validator.isEmpty(userCertificateVo)){
+            throw new CustomException("证书不存在");
+        }
+        ClassGradeUserQueryBo queryBo = new ClassGradeUserQueryBo();
+        queryBo.setUserId(userCertificateVo.getUserId());
+        queryBo.setGoodsId(userCertificateVo.getGoodsId());
+        queryBo.setGradeId(userCertificateVo.getGradeId());
+        List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(queryBo);
+        userCertificateVo.setChapterList(chapterList);
+        return userCertificateVo;
+    }
+
     /**
     /**
     * 实体类转化成视图对象
     * 实体类转化成视图对象
     *
     *

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

@@ -128,6 +128,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         lqw.eq(bo.getModuleId() != null, UserStudyRecord::getModuleId, bo.getModuleId());
         lqw.eq(bo.getModuleId() != null, UserStudyRecord::getModuleId, bo.getModuleId());
         lqw.eq(bo.getChapterId() != null, UserStudyRecord::getChapterId, bo.getChapterId());
         lqw.eq(bo.getChapterId() != null, UserStudyRecord::getChapterId, bo.getChapterId());
         lqw.eq(bo.getGradeId() != null, UserStudyRecord::getGradeId, bo.getGradeId());
         lqw.eq(bo.getGradeId() != null, UserStudyRecord::getGradeId, bo.getGradeId());
+    //    lqw.eq( UserStudyRecord::getCurrentStatus, 1);
         UserStudyRecord last = this.getOne(lqw.ge(UserStudyRecord::getFirstStartTime,0).last("limit 1"));
         UserStudyRecord last = this.getOne(lqw.ge(UserStudyRecord::getFirstStartTime,0).last("limit 1"));
         if(Validator.isEmpty(last)){
         if(Validator.isEmpty(last)){
             return null;
             return null;

+ 18 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserCertificateVo.java

@@ -2,11 +2,12 @@ package com.zhongzheng.modules.user.vo;
 
 
 import com.zhongzheng.common.annotation.Excel;
 import com.zhongzheng.common.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import java.util.Date;
 import java.util.Date;
-
+import java.util.List;
 
 
 
 
 /**
 /**
@@ -95,4 +96,20 @@ public class UserCertificateVo {
 	@Excel(name = "所属专业")
 	@Excel(name = "所属专业")
 	@ApiModelProperty("所属专业")
 	@ApiModelProperty("所属专业")
 	private Long majorId;
 	private Long majorId;
+	/** 证书学习年份 */
+	@Excel(name = "证书学习年份")
+	@ApiModelProperty("证书学习年份")
+	private String year;
+	/** 证书发布年份 */
+	@Excel(name = "证书发布日期")
+	@ApiModelProperty("证书发布日期")
+	private String pushDate;
+	@ApiModelProperty("章列表")
+	private List<CourseChapterVo> chapterList;
+	@ApiModelProperty("模板键值")
+	private String keyValue;
+	/** 章名,拼接 */
+	@Excel(name = "章名,拼接")
+	@ApiModelProperty("章名,拼接")
+	private String chapterStr;
 }
 }

+ 36 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserCertificateMapper.xml

@@ -22,6 +22,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="projectId" column="project_id"/>
         <result property="projectId" column="project_id"/>
         <result property="schoolId" column="school_id"/>
         <result property="schoolId" column="school_id"/>
         <result property="majorId" column="major_id"/>
         <result property="majorId" column="major_id"/>
+        <result property="year" column="year"/>
+        <result property="pushDate" column="push_date"/>
+        <result property="chapterStr" column="chapterStr"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap type="com.zhongzheng.modules.user.vo.UserCertificateVo" id="UserCertificateVoResult">
     <resultMap type="com.zhongzheng.modules.user.vo.UserCertificateVo" id="UserCertificateVoResult">
@@ -38,6 +41,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="educationTypeId" column="education_type_id"/>
         <result property="educationTypeId" column="education_type_id"/>
         <result property="businessId" column="business_id"/>
         <result property="businessId" column="business_id"/>
         <result property="projectId" column="project_id"/>
         <result property="projectId" column="project_id"/>
+        <result property="schoolId" column="school_id"/>
+        <result property="majorId" column="major_id"/>
+        <result property="year" column="year"/>
+        <result property="pushDate" column="push_date"/>
+        <result property="chapterStr" column="chapterStr"/>
 
 
         <result property="educationName" column="education_name"/>
         <result property="educationName" column="education_name"/>
         <result property="projectName" column="project_name"/>
         <result property="projectName" column="project_name"/>
@@ -46,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="idCard" column="id_card"/>
         <result property="idCard" column="id_card"/>
         <result property="title" column="title"/>
         <result property="title" column="title"/>
         <result property="certificateName" column="certificate_name"/>
         <result property="certificateName" column="certificate_name"/>
+        <result property="keyValue" column="key_value"/>
     </resultMap>
     </resultMap>
 
 
     <select id="selectMaxId"   resultType="Long">
     <select id="selectMaxId"   resultType="Long">
@@ -92,5 +101,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="majorId != null and majorId != ''">
         <if test="majorId != null and majorId != ''">
             AND uc.major_id = #{majorId}
             AND uc.major_id = #{majorId}
         </if>
         </if>
+        <if test="userId != null and majorId != ''">
+            AND uc.user_id = #{userId}
+        </if>
+        order by uc.update_time desc
+    </select>
+
+    <select id="selectDetail" parameterType="com.zhongzheng.modules.user.bo.UserCertificateQueryBo" resultMap="UserCertificateVoResult">
+        SELECT
+        uc.*,
+        u.realname,
+        u.id_card,
+        ct.title,
+        c.certificate_name,
+        cet.education_name,
+        cpt.project_name,
+        cb.business_name,
+        ct.key_value
+        FROM
+        user_certificate uc
+        LEFT JOIN `user` u ON uc.user_id = u.user_id
+        LEFT JOIN certificate_tp ct ON uc.certificate_tp_id = ct.tp_id
+        LEFT JOIN certificate c ON ct.type_id = c.id
+        LEFT JOIN course_education_type cet ON uc.education_type_id = cet.id
+        LEFT JOIN course_project_type cpt ON uc.project_id = cpt.id
+        LEFT JOIN course_business cb ON uc.business_id = cb.id
+        where uc.certificate_code = #{certificateCode}
+
     </select>
     </select>
 </mapper>
 </mapper>