he2802 před 1 rokem
rodič
revize
8bf1004610

+ 6 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -32,6 +32,7 @@ import com.zhongzheng.modules.bank.service.IQuestionOtherService;
 import com.zhongzheng.modules.bank.service.IQuestionService;
 import com.zhongzheng.modules.bank.vo.QuestionVo;
 import com.zhongzheng.modules.base.bo.ConfigQueryBo;
+import com.zhongzheng.modules.base.service.ICertificateTpService;
 import com.zhongzheng.modules.course.bo.ExternalQuestionBo;
 import com.zhongzheng.modules.course.bo.ReplenishExamBo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
@@ -165,6 +166,8 @@ public class CommonController extends BaseController {
     private IQuestionOtherService iQuestionOtherService;
     @Autowired
     private OssService ossService;
+    @Autowired
+    private ICertificateTpService iCertificateTpService;
     /**
      * 通用下载请求
      *
@@ -478,10 +481,11 @@ public class CommonController extends BaseController {
     }
 
     @ApiOperation("测试分班")
-    @GetMapping("common/jzs/grade")
-    public AjaxResult<Void> testGrade() {
+    @PostMapping("common/free/grade")
+    public AjaxResult<Void> testGrade(@RequestBody ClassGradeUserQueryBo bo) {
         //   iClassGradeService.checkEjjjPeopleNumLimit(195L,984L);
         //   iUserService.batchUpdateTelId();
+        iCertificateTpService.makeCertificatePhoto(bo);
         return AjaxResult.success();
     }
 

binární
zhongzheng-common/src/main/resources/static/001.png


binární
zhongzheng-common/src/main/resources/static/004.jpg


binární
zhongzheng-common/src/main/resources/static/004.png


+ 134 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -30,10 +30,8 @@ import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
 import com.zhongzheng.modules.course.mapper.CourseMenuMapper;
 import com.zhongzheng.modules.course.service.ICourseMenuService;
 import com.zhongzheng.modules.course.service.ICourseModuleService;
-import com.zhongzheng.modules.course.vo.CourseChapterVo;
-import com.zhongzheng.modules.course.vo.CourseMenuVo;
-import com.zhongzheng.modules.course.vo.CourseModuleVo;
-import com.zhongzheng.modules.course.vo.CourseVo;
+import com.zhongzheng.modules.course.service.IMajorService;
+import com.zhongzheng.modules.course.vo.*;
 import com.zhongzheng.modules.goods.bo.GoodsCourseQueryBo;
 import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
@@ -102,9 +100,13 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
     @Autowired
     private ICourseModuleService iCourseModuleService;
 
+    @Autowired
+    private IMajorService iMajorService;
+
     @Value("${certificate.host}")
     private String CERTIFICATE_HOST;
 
+
     @Override
     public CertificateTpVo queryById(Long tpId){
         CertificateTp db = this.baseMapper.selectById(tpId);
@@ -193,10 +195,17 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             //获取章列表
             List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
             BigDecimal totalTime = new BigDecimal(0);
+            BigDecimal publicTotalTime = new BigDecimal(0);
             for(CourseChapterVo chapterVo : chapterList){
-                totalTime=totalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
+                if(Validator.isEmpty(chapterVo.getCommonSign())||chapterVo.getCommonSign()==0){
+                    totalTime=totalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
+                }else if(chapterVo.getCommonSign()==1){
+                    publicTotalTime=publicTotalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
+                }
+
             }
             goodsVo.setClassHours(totalTime.divide(new BigDecimal(45*60),BigDecimal.ROUND_HALF_UP));
+            goodsVo.setPublicClassHours(publicTotalTime.divide(new BigDecimal(45*60),BigDecimal.ROUND_HALF_UP));
             if(Validator.isNotEmpty(goodsVo.getCertificateTpId())){
                 //        String[] s = goodsVo.getCertificateIds().split(",");
                 List<Long> tpIds = new ArrayList<>();
@@ -482,6 +491,43 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
             iUserCertificateService.insertByAddBo(addBo);
         }
+        else if("certificate09".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            if(Validator.isEmpty(goodsVo.getMajorId())){
+                throw new CustomException("生成证书专业缺失");
+            }
+            if(Validator.isEmpty(userVo.getOneInchPhotos())){
+                throw new CustomException("生成证书一寸照片缺失");
+            }
+            MajorVo majorVo = iMajorService.queryById(goodsVo.getMajorId());
+            String onePhoto = userVo.getOneInchPhotos();
+            String code = "XYSGXC"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setOneInchPhotos(onePhoto);
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setMajor("施工现场专业人员");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setPublicClassHours(goodsVo.getPublicClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor(majorVo.getCategoryName());
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicSGXC(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
     }
 
     private UserCertificateAddBo mergeData(ClassGradeUserQueryBo bo, GoodsVo goodsVo,CertificatePhotoVo vo,Long certificateTpId,String certificatePath,Long moduleId){
@@ -503,6 +549,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         addBo.setTrainStartTime(vo.getTrainStartTime());
         addBo.setTrainEndTime(vo.getTrainEndTime());
         addBo.setChapterStr(ArrayUtils.toString(vo.getChapterList(), ","));
+        addBo.setPublicClassHours(goodsVo.getPublicClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP ));
         return addBo;
     }
     private String getCertificateCode(){
@@ -679,6 +726,88 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         return imgName;
     }
 
+    private  String drawPicSGXC(CertificatePhotoVo entity){
+        Font font = new Font("微软雅黑", Font.PLAIN, 55);// 添加字体的属性设置 微软雅黑
+        Font font2 = new Font("微软雅黑", Font.BOLD, 58);
+        String imgName = null;
+        try {
+            // 加载图片
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/004.jpg");
+            //        String imageLocalUrl = projectUrl + "003.jpg";
+            //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
+            BufferedImage imageLocal = ImageIO.read(imgStream);
+            // 以本地图片为模板
+            Graphics2D g = imageLocal.createGraphics();
+            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+            // 设置文本样式
+            g.setFont(font);
+            g.setColor(Color.BLACK);
+
+            InputStream oneInchPhotos =  ossService.getStreamByObject(entity.getOneInchPhotos());
+            BufferedImage oneInchBuffered = ImageIO.read(oneInchPhotos);
+            g.drawImage(oneInchBuffered, 430, 960, 300, 400, null);
+
+
+
+            g.drawString(entity.getCode(), 1235, 1245);
+            g.drawString(entity.getRealname(), 1235, 1011);
+            g.drawString(entity.getIdCard(), 1235, 1126);
+            g.drawString(entity.getMajor(), 1235, 1368);
+/*
+            g.drawString(entity.getDateY(), 780, 365);
+            g.drawString(entity.getDateM(), 905, 365);
+
+            g.drawString(entity.getRemark1(), 1035, 408);
+            g.drawString(entity.getRemark2(), 728, 460);
+*/
+
+            g.drawString(entity.getDateY(), 1332, 2973);
+            g.drawString(entity.getDateM(), 1594, 2973);
+            g.drawString(entity.getDateD(), 1781, 2973);
+
+            g.setFont(font2);
+            g.drawString(entity.getRealname(), 455, 1616);
+            g.drawString(entity.getDateY()+"年"+entity.getDateM()+"月"+entity.getDateD()+"日", 846, 1616);
+            g.drawString("施工现场专业人员", 1508, 1616);
+
+            g.drawString(entity.getDateY(), 311, 1770);
+            g.drawString(String.valueOf(Integer.parseInt(entity.getPublicClassHours())+Integer.parseInt(entity.getClassHours())), 1341, 1770);
+
+            g.drawString(entity.getPublicClassHours(), 311, 1920);
+            g.drawString(entity.getClassHours(), 881, 1920);
+
+            InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
+            BufferedImage logoBuffered = ImageIO.read(logoStream);
+            g.drawImage(logoBuffered, 1438, 2555, 529, 528, null);
+
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 360, 360);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 324, 2583, 360, 360, null);
+            // 完成模板修改
+            g.dispose();
+            // 获取新文件的地址
+            // 生成新的合成过的用户二维码并写入新图片
+            //        ImageIO.write(imageLocal, "jpg", outputfile);
+            //上传OSS
+            InputStream is =  bufferedImageToInputStream(imageLocal);
+            String ossPath = ossService.uploadInputStream(is,7);
+            if(imgStream!=null){
+                imgStream.close();
+            }
+            return ossPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // 返回给页面的图片地址(因为绝对路径无法访问)
+        //    imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";
+
+        return imgName;
+    }
+
     public InputStream bufferedImageToInputStream(BufferedImage image){
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         try {

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

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -24,6 +25,8 @@ public class CertificatePhotoVo {
 	private String realname;
 	@ApiModelProperty("身份证号")
 	private String idCard;
+	@ApiModelProperty("一寸照片")
+	private String oneInchPhotos;
 
 	@ApiModelProperty("年份")
 	private String year;
@@ -54,5 +57,8 @@ public class CertificatePhotoVo {
 	/** 培训结束时间 */
 	@ApiModelProperty("培训结束时间")
 	private Long trainEndTime;
+	@Excel(name = "公共学时")
+	@ApiModelProperty("公共学时")
+	private String publicClassHours;
 
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java

@@ -129,6 +129,10 @@ public class GoodsVo {
 	@Excel(name = "学时")
 	@ApiModelProperty("学时")
 	private BigDecimal classHours;
+
+	@Excel(name = "公共学时")
+	@ApiModelProperty("公共学时")
+	private BigDecimal publicClassHours;
 	/** 标准价格详情json */
 	@Excel(name = "标准价格详情json")
 	@ApiModelProperty("标准价格详情json")

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

@@ -85,4 +85,6 @@ public class UserCertificateAddBo {
     /** 1单证书 2多证书 */
     @ApiModelProperty("1单证书 2多证书")
     private Integer moreCertificateStatus;
+    @ApiModelProperty("公共学时")
+    private BigDecimal publicClassHours;
 }

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

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.user.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -70,4 +71,6 @@ private static final long serialVersionUID=1L;
     private Long moduleId;
     /** 1单证书 2多证书 */
     private Integer moreCertificateStatus;
+
+    private BigDecimal publicClassHours;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserCertificateVo.java

@@ -122,4 +122,6 @@ public class UserCertificateVo {
 	@Excel(name = "1单证书 2多证书")
 	@ApiModelProperty("1单证书 2多证书")
 	private Integer moreCertificateStatus;
+
+	private BigDecimal publicClassHours;
 }

+ 7 - 3
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -240,6 +240,7 @@
     <resultMap type="com.zhongzheng.modules.course.vo.CourseChapterVo" id="CourseChapterResultVo">
         <result property="chapterId" column="chapter_id"/>
         <result property="name" column="name"/>
+        <result property="commonSign" column="common_sign"/>
     </resultMap>
 
     <select id="selectUser" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo"
@@ -1531,22 +1532,25 @@
         SELECT ui.* from (SELECT
         cc.chapter_id,
         cc.`name`,
-        m.sort
+        m.sort,
+        cm.common_sign
         FROM
         course_module_chapter p
         LEFT JOIN course_chapter cc ON p.chapter_id = cc.chapter_id
         LEFT JOIN course_menu m ON m.menu_id = p.module_id
         LEFT JOIN goods_course gc ON gc.course_id = m.course_id
+        LEFT JOIN course_module cm ON p.module_id = cm.module_id
         WHERE
         gc.goods_id = #{goodsId}
         <if test="moduleId != null and moreCertificateStatus == 2 ">
             AND p.module_id = #{moduleId}
         </if>
-        AND m.type =  1 UNION
+        AND m.type =  1 UNION ALL
         SELECT
         cc.chapter_id,
         cc.`name`,
-        m.sort
+        m.sort,
+         0 as common_sign
         FROM
         course_menu m
         LEFT JOIN course_chapter cc ON m.menu_id = cc.chapter_id