From 486def538916e3d4df8365881d45002e882def49 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Tue, 24 Sep 2024 17:38:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=81=E4=B9=A6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/controller/ClassController.java | 187 +++++++++--------- 1 file changed, 92 insertions(+), 95 deletions(-) diff --git a/src/main/java/com/peanut/modules/common/controller/ClassController.java b/src/main/java/com/peanut/modules/common/controller/ClassController.java index af80ccdf..6d371066 100644 --- a/src/main/java/com/peanut/modules/common/controller/ClassController.java +++ b/src/main/java/com/peanut/modules/common/controller/ClassController.java @@ -19,6 +19,7 @@ import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -401,115 +402,111 @@ public class ClassController { //生成证书 @RequestMapping("/generateCertificateClass") + @Transactional public R generateCertificateClass(@RequestBody Map params) { - try { - //证书类型A a证 B b证 ZK自考 - String type = params.get("type").toString(); - MyUserEntity user = ShiroUtils.getUser(); - String photoUrl = user.getPhoto();//证书人照片 - String realName = user.getName();//真是姓名 - UserCertificate userCertificate = new UserCertificate(); - userCertificate.setType(type); - userCertificate.setUserId(ShiroUtils.getUId()); - if ("ZK".equals(type)){ - CourseEntity courseEntity = courseService.getById(params.get("relationId").toString()); - String courseTitle = courseEntity.getTitle(); - if (courseTitle.contains("【")){ - courseTitle = courseEntity.getTitle().substring(0,courseEntity.getTitle().indexOf("【")); + //抢锁 + Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock", "123"); + if(lock) { + try { + //证书类型A a证 B b证 ZK自考 + String type = params.get("type").toString(); + MyUserEntity user = ShiroUtils.getUser(); + String photoUrl = user.getPhoto();//证书人照片 + String realName = user.getName();//真是姓名 + UserCertificate userCertificate = new UserCertificate(); + userCertificate.setType(type); + userCertificate.setUserId(ShiroUtils.getUId()); + if ("ZK".equals(type)){ + CourseEntity courseEntity = courseService.getById(params.get("relationId").toString()); + String courseTitle = courseEntity.getTitle(); + if (courseTitle.contains("【")){ + courseTitle = courseEntity.getTitle().substring(0,courseEntity.getTitle().indexOf("【")); + } + userCertificate.setTitle(courseTitle); + ClassExamUser classExamUser = classExamUserService.getOne(new LambdaQueryWrapper() + .eq(ClassExamUser::getUserId,ShiroUtils.getUId()) + .eq(ClassExamUser::getRelationId,params.get("relationId").toString())); + String endYear = DateUtil.year(classExamUser.getEndTime())+""; + String endMonth = DateUtil.month(classExamUser.getEndTime())+1+""; + String endDay = DateUtil.dayOfMonth(classExamUser.getEndTime())+""; + String[] description= {endYear,endMonth,endDay,courseTitle}; + String[] edes = {courseEntity.getEtitle()}; + String certificateNo = getNextCertificateNo(type,courseEntity.getTitleAbbr());//证书编号 + String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName, description, edes, endYear,endMonth,endDay); + userCertificate.setCertificateNo(certificateNo); + userCertificate.setCertificateUrl(url); + userCertificate.setCourseId(courseEntity.getId()); + userCertificateService.save(userCertificate); + }else { + ClassEntity classEntity = classEntityService.getById(params.get("relationId").toString()); + String startYear = DateUtil.year(classEntity.getStartTime())+""; + String startMonth = DateUtil.month(classEntity.getStartTime())+1+""; + String startDay = DateUtil.dayOfMonth(classEntity.getStartTime())+""; + String endYear = DateUtil.year(classEntity.getEndTime())+""; + String endMonth = DateUtil.month(classEntity.getEndTime())+1+""; + String endDay = DateUtil.dayOfMonth(classEntity.getEndTime())+""; + List> list = classEntityService.classCourseInfoClassId(classEntity.getId()); + for (Map map:list){ + userCertificate.setCourseId((Integer) map.get("courseId")); + double keshiTotal = (double)map.get("keshi"); + String keshi = (keshiTotal+"").replace(".0",""); + String courseTitle = map.get("courseTitle").toString(); + if (courseTitle.contains("【")){ + courseTitle = courseTitle.substring(0,courseTitle.indexOf("【")); + } + String[] des = {startYear,startMonth,startDay,endYear,endMonth,endDay, + classEntity.getTitle(),courseTitle,keshi}; + String[] edes = {map.get("courseETitle").toString(),keshi}; + String certificateNo = getNextCertificateNo(type,map.get("titleAbbr").toString()); + String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName,des, edes, endYear,endMonth,endDay); + userCertificate.setCertificateUrl(url); + userCertificate.setCertificateNo(certificateNo); + userCertificate.setTitle(classEntity.getTitle()); + userCertificate.setClassId(classEntity.getId()); + userCertificateService.save(userCertificate); + } } - userCertificate.setTitle(courseTitle); - String certificateNo = getNextCertificateNo(type,courseEntity.getTitleAbbr());//证书编号 - ClassExamUser classExamUser = classExamUserService.getOne(new LambdaQueryWrapper() - .eq(ClassExamUser::getUserId,ShiroUtils.getUId()) - .eq(ClassExamUser::getRelationId,params.get("relationId").toString())); - String endYear = DateUtil.year(classExamUser.getEndTime())+""; - String endMonth = DateUtil.month(classExamUser.getEndTime())+1+""; - String endDay = DateUtil.dayOfMonth(classExamUser.getEndTime())+""; - String[] description= {endYear,endMonth,endDay,courseTitle}; - String[] edes = {courseEntity.getEtitle()}; - String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName, description, edes, endYear,endMonth,endDay); - userCertificate.setCertificateNo(certificateNo); - userCertificate.setCertificateUrl(url); - userCertificate.setCourseId(courseEntity.getId()); - userCertificateService.save(userCertificate); + }finally { //解锁 redisTemplate.delete("lock"); - }else { - ClassEntity classEntity = classEntityService.getById(params.get("relationId").toString()); - String startYear = DateUtil.year(classEntity.getStartTime())+""; - String startMonth = DateUtil.month(classEntity.getStartTime())+1+""; - String startDay = DateUtil.dayOfMonth(classEntity.getStartTime())+""; - String endYear = DateUtil.year(classEntity.getEndTime())+""; - String endMonth = DateUtil.month(classEntity.getEndTime())+1+""; - String endDay = DateUtil.dayOfMonth(classEntity.getEndTime())+""; - List> list = classEntityService.classCourseInfoClassId(classEntity.getId()); - for (Map map:list){ - userCertificate.setCourseId((Integer) map.get("courseId")); - String certificateNo = getNextCertificateNo(type,map.get("titleAbbr").toString()); - userCertificate.setCertificateNo(certificateNo); - double keshiTotal = (double)map.get("keshi"); - String keshi = (keshiTotal+"").replace(".0",""); - String courseTitle = map.get("courseTitle").toString(); - if (courseTitle.contains("【")){ - courseTitle = courseTitle.substring(0,courseTitle.indexOf("【")); - } - String[] des = {startYear,startMonth,startDay,endYear,endMonth,endDay, - classEntity.getTitle(),courseTitle,keshi}; - String[] edes = {map.get("courseETitle").toString(),keshi}; - String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName,des, edes, endYear,endMonth,endDay); - userCertificate.setTitle(classEntity.getTitle()); - userCertificate.setCertificateUrl(url); - userCertificate.setClassId(classEntity.getId()); - userCertificateService.save(userCertificate); - //解锁 - redisTemplate.delete("lock"); - } } - return R.ok(); - }finally { - //解锁 - redisTemplate.delete("lock"); + }else { + generateCertificateClass(params); } - + return R.ok(); } //获取下一个编号 public String getNextCertificateNo(String type,String courseNamePinyin){ - //抢锁 - Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock", "123"); - if(lock) { - List userCertificateList = userCertificateService.list(new LambdaQueryWrapper() - .orderByDesc(UserCertificate::getCreateTime)); - String res = ""; - if (userCertificateList.size() > 0){ - UserCertificate u0 = userCertificateList.get(0); - String certificateNo = u0.getCertificateNo(); - int no = 0; - if (certificateNo.contains("ZK")){ - no = Integer.parseInt(certificateNo.substring(5,11))+1; - }else { - no = Integer.parseInt(certificateNo.substring(3,9))+1; - } - if ("A".equals(type)){ - res = "NO."+String.format("%06d", no); - }else if ("B".equals(type)){ - res = "NO."+String.format("%06d", no); - }else if ("ZK".equals(type)){ - res = "NO.ZK"+String.format("%06d", no); - } + List userCertificateList = userCertificateService.list(new LambdaQueryWrapper() + .orderByDesc(UserCertificate::getId)); + String res = ""; + if (userCertificateList.size() > 0){ + UserCertificate u0 = userCertificateList.get(0); + String certificateNo = u0.getCertificateNo(); + int no = 0; + if (certificateNo.contains("ZK")){ + no = Integer.parseInt(certificateNo.substring(5,11))+1; }else { - if ("A".equals(type)){ - res = "NO.000001"; - }else if ("B".equals(type)){ - res = "NO.000001"; - }else if ("ZK".equals(type)){ - res = "NO.ZK000001"; - } + no = Integer.parseInt(certificateNo.substring(3,9))+1; + } + if ("A".equals(type)){ + res = "NO."+String.format("%06d", no); + }else if ("B".equals(type)){ + res = "NO."+String.format("%06d", no); + }else if ("ZK".equals(type)){ + res = "NO.ZK"+String.format("%06d", no); } - return res+courseNamePinyin; }else { - return getNextCertificateNo(type,courseNamePinyin); + if ("A".equals(type)){ + res = "NO.000001"; + }else if ("B".equals(type)){ + res = "NO.000001"; + }else if ("ZK".equals(type)){ + res = "NO.ZK000001"; + } } + return res+courseNamePinyin; }