diff --git a/application-tenant/tenant-admin/pom.xml b/application-tenant/tenant-admin/pom.xml index e33206c..eb54156 100644 --- a/application-tenant/tenant-admin/pom.xml +++ b/application-tenant/tenant-admin/pom.xml @@ -149,6 +149,11 @@ apelet + common-msg-notice + 1.0.0 + + + apelet common-association 1.0.0 diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java index 3a0d02d..00ac785 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java @@ -15,9 +15,10 @@ import org.springframework.scheduling.annotation.EnableScheduling; * @date 2023-08-04 */ @ComponentScan("apelet") +@EnableDiscoveryClient @EnableScheduling @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) -@MapperScan("apelet.common.**.dao") +@MapperScan({"apelet.common.**.dao", "apelet.msgnotice.mapper"}) public class TenantAdminApplication { public static void main(String[] args) { diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java index 43dd5ba..f5a18c3 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java @@ -42,6 +42,7 @@ public class FilterConfig { corsConfiguration.addAllowedMethod("*"); corsConfiguration.addExposedHeader(applicationConfig.getRefreshedTokenHeaderKey()); corsConfiguration.setAllowCredentials(true); + corsConfiguration.setMaxAge(3600L); configSource.registerCorsConfiguration("/**", corsConfiguration); } return new CorsFilter(configSource); diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java index 2a39305..957958b 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java @@ -21,8 +21,7 @@ import java.util.Map; * @date 2023-08-04 */ @Configuration -@EnableTransactionManagement -@MapperScan(value = {"apelet.tenantadmin.upms.dao","apelet.tenantadmin.tenant.dao", "apelet.common.*.dao"}) +@MapperScan(value = {"apelet.tenantadmin.upms.dao","apelet.tenantadmin.tenant.dao", "apelet.common.*.dao", "apelet.association.dao"}) public class MultiDataSourceConfig extends BaseMultiDataSourceConfig { @Bean(initMethod = "init", destroyMethod = "close") diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java index e106625..9516e0e 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java @@ -1080,6 +1080,7 @@ public class LoginController { } List menuList = allMenuList.stream() .filter(m -> m.getMenuType() <= SysMenuType.TYPE_MENU).collect(Collectors.toList()); + jsonData.put("user", user); jsonData.put("menuList", menuList); jsonData.put("permCodeList", permCodeList); Set permSet = null; diff --git a/application-tenant/tenant-admin/src/main/resources/application-config.yml b/application-tenant/tenant-admin/src/main/resources/application-config.yml index 23b47e3..f753b89 100644 --- a/application-tenant/tenant-admin/src/main/resources/application-config.yml +++ b/application-tenant/tenant-admin/src/main/resources/application-config.yml @@ -86,13 +86,13 @@ knife4j: aliyun: oss: - enabled: false + enabled: true expireSeconds: 1000 - # 下面几项均需在申请阿里云OSS后,根据自己的实际情况进行配置。 - endpoint: - accessKey: - secretKey: - bucketName: + endpoint: https://oss-cn-beijing.aliyuncs.com + accessKey: LTAI5t5fEgzRRtdmBvczVS6r + secretKey: uESFiyyi6EwCkM5w4a4pbx6TmVhqgx + bucketName: yy-test12 + minio: enabled: false @@ -145,7 +145,7 @@ common-redis: # master-slave: # 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。 # address: redis://localhost:6379,redis://localhost:6378,... - address: redis://localhost:6379 + address: redis://192.168.100.25:6379 # 链接超时,单位毫秒。 timeout: 6000 # 单位毫秒。分布式锁的超时检测时长。 @@ -153,7 +153,7 @@ common-redis: lockWatchdogTimeout: 60000 # redis 密码,空可以不填。 password: - database: 0 + database: 1 pool: # 连接池数量。 poolSize: 20 diff --git a/application-tenant/tenant-admin/src/main/resources/bootstrap.yml b/application-tenant/tenant-admin/src/main/resources/bootstrap.yml index 7b52d96..b74406d 100644 --- a/application-tenant/tenant-admin/src/main/resources/bootstrap.yml +++ b/application-tenant/tenant-admin/src/main/resources/bootstrap.yml @@ -2,7 +2,7 @@ spring: application: name: tenant-admin profiles: - active: @profile.name@ + active: dev main: allow-bean-definition-overriding: true allow-circular-references: true diff --git a/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml b/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml index 304caf6..d622b1e 100644 --- a/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml +++ b/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml @@ -5,7 +5,7 @@ logging: config: classpath:logback-spring.xml server: - port: 8077 + port: 8099 application: # Jwt令牌加密的签名值。该值的长度要超过10个字符(过短会报错)。 @@ -133,7 +133,7 @@ sequence: # 是否使用基于美团Leaf的分布式Id生成器。 advanceIdGenerator: true # 多个zk服务之间逗号分隔。 - zkAddress: localhost:2181 + zkAddress: 192.168.100.25:2181 # 与本机的ip一起构成zk中标识不同服务实例的key值。 idPort: 18083 # zk中生成WorkNode的路径。不同的业务可以使用不同的路径,以免冲突。 @@ -146,7 +146,7 @@ common-log: kafkaTopic: SysOperationLog-TenantAdmin mybatis-plus: - mapper-locations: classpath:apelet/tenantadmin/tenant/dao/mapper/*Mapper.xml,apelet/tenantadmin/upms/dao/mapper/*Mapper.xml,apelet/common/report/dao/mapper/*Mapper.xml,apelet/common/datasync/dao/mapper/*Mapper.xml,apelet/common/log/dao/mapper/*Mapper.xml,apelet/common/flow/dao/mapper/*Mapper.xml,apelet/common/online/dao/mapper/*Mapper.xml,apelet/common/generator/dao/mapper/*Mapper.xml,apelet/common/botp/dao/mapper/*Mapper.xml,apelet/tenantadmin/app/dao/mapper/*Mapper.xml,apelet/common/mobile/dao/mapper/*Mapper.xml,apelet/common/eas/dao/mapper/*Mapper.xml + mapper-locations: classpath:apelet/tenantadmin/tenant/dao/mapper/*Mapper.xml,apelet/common/demo/report/dao/mapper/*Mapper.xml,apelet/tenantadmin/upms/dao/mapper/*Mapper.xml,apelet/common/report/dao/mapper/*Mapper.xml,apelet/common/datasync/dao/mapper/*Mapper.xml,apelet/common/log/dao/mapper/*Mapper.xml,apelet/common/flow/dao/mapper/*Mapper.xml,apelet/common/online/dao/mapper/*Mapper.xml,apelet/common/generator/dao/mapper/*Mapper.xml,apelet/common/botp/dao/mapper/*Mapper.xml,apelet/tenantadmin/app/dao/mapper/*Mapper.xml,apelet/common/mobile/dao/mapper/*Mapper.xml,apelet/common/eas/dao/mapper/*Mapper.xml,classpath:mapper/*Mapper.xml type-aliases-package: apelet.tenantadmin.*.model,apelet.common.report.model,apelet.common.datasync.model,apelet.common.log.model,apelet.common.flow.model,apelet.common.online.model,apelet.common.mobile.model,apelet.common.eas.model global-config: db-config: @@ -203,17 +203,17 @@ spring: druid: # 租户管理数据源。 tenant-admin: - url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.100.35:3306/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: X7&9p8L2@6z4K7!8 # 租户业务平台的通用业务数据,如字典、在线表单、流程、报表的定义等数据。 tenant-common: - url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.100.35:3306/apelet_xhgl?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai username: root password: X7&9p8L2@6z4K7!8 # 默认生成的操作日志数据源配置。 operation-log: - url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.100.35:3306/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: X7&9p8L2@6z4K7!8 driverClassName: com.mysql.cj.jdbc.Driver diff --git a/common/common-association/pom.xml b/common/common-association/pom.xml index 2226fb4..8740d9b 100644 --- a/common/common-association/pom.xml +++ b/common/common-association/pom.xml @@ -23,6 +23,7 @@ javacv-platform 1.5.13 + apelet common-msg-notice @@ -35,6 +36,11 @@ apelet + common-aliyun-oss + 1.0.0 + + + apelet common-generator 1.0.0 @@ -63,6 +69,8 @@ javase 3.5.1 + + diff --git a/common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java b/common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java index 4f635ad..91060c2 100644 --- a/common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java +++ b/common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java @@ -14,7 +14,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.*; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @RestController diff --git a/common/common-association/src/main/java/apelet/association/controller/CourseController.java b/common/common-association/src/main/java/apelet/association/controller/CourseController.java new file mode 100644 index 0000000..61eb0b9 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/controller/CourseController.java @@ -0,0 +1,171 @@ +package apelet.association.controller; + +import apelet.association.model.CourseCourseware; +import apelet.association.model.CourseVideo; +import apelet.association.service.CourseCoursewareService; +import apelet.association.service.CourseService; +import apelet.association.service.CourseVideoService; +import apelet.common.aliyun.oss.config.AliyunOssProperties; +import apelet.common.aliyun.oss.wrapper.AliyunOssTemplate; + +import apelet.common.core.exception.MyRuntimeException; +import apelet.common.core.object.*; +import apelet.common.generator.utils.OrmGenDataSourceUtil; +import apelet.common.orm.impl.Filter; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.OSSObject; +import com.aliyun.oss.model.ObjectMetadata; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; + + +/** + * 课程管理 + */ +@RestController +@RequestMapping("/tenantadmin/Course") +public class CourseController { + + + @Autowired + private CourseCoursewareService courseCoursewareService; + @Autowired + private CourseVideoService courseVideoService; + @Autowired + private AliyunOssTemplate aliyunOssTemplate; + @Autowired + private OSS ossClient; + + + private static final String VIDEO_MIME = "video/mp4"; + + /** + * 视频断点续播 —— 根据学习进度自动从对应字节偏移量开始流式输出 + */ + @GetMapping("/queryVideoProgress") + public void queryVideoProgress( + @RequestParam("videoId") Long videoId, + @RequestParam("userId") Long userId, + HttpServletRequest request, + HttpServletResponse response) throws IOException { + + CourseVideo courseVideo = courseVideoService.getById(videoId); + if (courseVideo == null || courseVideo.getVideoUrl() == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "视频不存在"); + return; + } + + String videoUrl = courseVideo.getVideoUrl(); + JSONArray jsonArray = JSON.parseArray(videoUrl); + JSONObject urlObject = jsonArray.getJSONObject(0); + String filePath = urlObject.getString("uploadPath") + "/" + urlObject.getString("filename"); + AliyunOssProperties properties = aliyunOssTemplate.getProperties(); + String bucketName = properties.getBucketName(); + ObjectMetadata meta = ossClient.getObjectMetadata(bucketName, filePath); + long totalSize = meta.getContentLength(); + long start = courseVideoService.getByteOffsetByTime(videoId, userId); + long end = totalSize - 1; + String rangeHeader = request.getHeader(HttpHeaders.RANGE); + if (rangeHeader != null && rangeHeader.startsWith("bytes=")) { + String rangeVal = rangeHeader.substring(6); + String[] arr = rangeVal.split("-"); + if (!CharSequenceUtil.isBlank(arr[0])) { + start = Long.parseLong(arr[0]); + } + if (arr.length > 1 && !CharSequenceUtil.isBlank(arr[1])) { + end = Long.parseLong(arr[1]); + } + } + start = Math.max(start, 0); + end = Math.min(end, totalSize - 1); + if (start >= totalSize) { + response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + totalSize); + response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); + return; + } + long sliceLength = end - start + 1; + response.setContentType(VIDEO_MIME); + response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); + response.setHeader(HttpHeaders.CONTENT_RANGE, + String.format("bytes %d-%d/%d", start, end, totalSize)); + response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(sliceLength)); + response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, filePath); + getObjectRequest.setRange(start, end); + try (OSSObject ossObject = ossClient.getObject(getObjectRequest); + InputStream is = ossObject.getObjectContent()) { + byte[] buffer = new byte[8192]; + int read; + while ((read = is.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, read); + } + response.getOutputStream().flush(); + } + } + + + /** + * 保存课程视频学习记录 + * + * @return + */ + @PostMapping("/videoLearning") + public ResponseResult videoLearning(@RequestBody CourseVideo courseVideo) { + courseVideoService.saveVideoLearning(courseVideo); + return ResponseResult.success(); + } + + + /** + * 查询课件学习进度 + * + * @param coursewareId + * @param userId + * @return + */ + @GetMapping("/queryCoursewareProgress") + public ResponseResult queryCoursewareProgress( + @RequestParam("coursewareId") Long coursewareId, @RequestParam("userId") Long userId) { + Object result = courseCoursewareService.getCourseLearningProgress(coursewareId, userId); + return ResponseResult.success(result); + } + + + /** + * 课程课件学习记录 + * + * @return + */ + @PostMapping("/coursewareLearning") + public ResponseResult coursewareLearning(@RequestBody CourseCourseware courseCourseware) { + courseCoursewareService.saveCoursewareLearning(courseCourseware); + return ResponseResult.success(); + } + + +} diff --git a/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java b/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java new file mode 100644 index 0000000..4b73ddd --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java @@ -0,0 +1,183 @@ +package apelet.association.controller; + +import apelet.association.dto.UserExerciseDto; +import apelet.association.model.*; +import apelet.association.service.*; +import apelet.common.core.exception.MyRuntimeException; +import apelet.common.core.object.*; +import apelet.common.generator.utils.OrmGenDataSourceUtil; +import apelet.common.orm.impl.Filter; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/tenantadmin/questionBank") +public class DoPracticeProblemsController { + + @Autowired + private OrmGenDataSourceUtil ormGenDataSourceUtil; + + @Autowired + private ExamService examService; + + @Autowired + private QuestionBankService questionBankService; + @Autowired + private QuestionBankEntryService questionBankEntryService; + + @Autowired + private ExamQuestionsService examQuestionsService; + @Autowired + private ExamQuestionsEntryService examQuestionsEntryService; + + @Autowired + private RedissonClient redissonClient; + + @PostConstruct + public void checkRedisConfig() throws IOException { + System.out.println("Redisson config: {}" + redissonClient.getConfig().toYAML()); + System.out.println("Redisson config: {}" + redissonClient.getConfig().toYAML()); + System.out.println("Redisson config: {}" + redissonClient.getConfig().toYAML()); + } + + /** + * 刷题 + * + * @param id 题库id + * @return + */ + @GetMapping("/doPracticeProblems") + public ResponseResult doPracticeProblems(@RequestParam(name = "id") String id) { + Map result = new HashMap<>(); + ObjectValue questionBank = ormGenDataSourceUtil.queryOne("question_bank", id); + ObjectCollection collection = questionBank.getObjectCollection("question_bank_entry"); + if (collection == null || collection.isEmpty()) { + throw new MyRuntimeException("题库下没有试题, 请先添加试题!!!"); + } + result.put("questionBankId", id); + result.put("questionBankName", questionBank.getString("name")); + List list = new ArrayList<>(); + + //保存用户刷题记录 + long batchNumber = IdUtil.getSnowflakeNextId(); + result.put("batchNumber", batchNumber); + + collection.forEach(f -> { + ObjectValue examQuestions = f.getObjectValue("exam_questions_id"); + list.add(examQuestions.getString("id")); + + ObjectValue userExercise = new ObjectValue("user_exercise"); + ObjectValue xySysUser = new ObjectValue("xy_sys_user"); + xySysUser.put("id", TokenData.takeFromRequest().getUserId()); + userExercise.put("question_bank_id", questionBank); + userExercise.put("exam_questions_id", examQuestions); + userExercise.put("membership_apply_id", xySysUser); + userExercise.put("batch", batchNumber); + userExercise.put("is_correct", 0); + userExercise.put("create_time", DateUtil.now()); + try { + ormGenDataSourceUtil.addNew(userExercise.getTableName(), userExercise); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + List> examQuestionsList = new ArrayList<>(); + result.put("examQuestionsList", examQuestionsList); + + Filter filter = new Filter(); + filter.add(new FilterItem("id", FilterItem.INNER, CharSequenceUtil.join(",", list))); + filter.add(new FilterItem("type", FilterItem.not_equals, 4)); + ObjectCollection examQuestions = ormGenDataSourceUtil.query("exam_questions", filter, new Selector()); + int no = 1; + for (ObjectValue examQuestion : examQuestions) { + Map hashMap = new HashMap<>(); + hashMap.put("id", examQuestion.getString("id")); + hashMap.put("no", no); + hashMap.put("name", examQuestion.getString("name")); + hashMap.put("type", examQuestion.getString("type")); + hashMap.put("title", examQuestion.getString("content")); + hashMap.put("exam_picture", examQuestion.getString("exam_picture")); + + String answer = examQuestion.getString("answer"); + hashMap.put("standardAnswer", answer.chars().mapToObj(c -> String.valueOf((char) c)).toArray(String[]::new)); + hashMap.put("standardAnswerText", answer); + hashMap.put("analysis", examQuestion.getString("analysis")); + hashMap.put("score", examQuestion.getString("score")); + hashMap.put("difficulty", examQuestion.getString("difficulty")); + ObjectCollection examQuestionsEntry = examQuestion.getObjectCollection("exam_questions_entry"); + List> option = new ArrayList<>(); + examQuestionsEntry.forEach(f -> option.add(f.getValues())); + hashMap.put("options", option); + examQuestionsList.add(hashMap); + no++; + } + return ResponseResult.success(result); + } + + + /** + * 刷题 提交答案 + * + * @return + */ + @PostMapping("/submitPractice") + public ResponseResult submitPractice(@RequestBody UserExerciseDto userExerciseDto) { + + return ResponseResult.success(); + } + + + /** + * 考试 + * + * @param id 考试 id + * @return + */ + @GetMapping("/doExam") + public ResponseResult doExam(@RequestParam(name = "id") String id) { + Map result = new HashMap<>(); + Exam exam = examService.getById(id); + result.put("exam", exam); + Long questionBankId = exam.getQuestionBankId(); + // 题库 + List questionBankEntryList = questionBankEntryService.list(new LambdaQueryWrapper().eq( + QuestionBankEntry::getParentId, questionBankId)); + List collect = questionBankEntryList.stream().map(QuestionBankEntry::getExamQuestionsId).collect(Collectors.toList()); + // 题库试题 + List examQuestionsList = examQuestionsService.list(new LambdaQueryWrapper().in(ExamQuestions::getId, collect)); + // 试题选项 + List examQuestionsEntries = examQuestionsEntryService.list(new LambdaQueryWrapper().in(ExamQuestionsEntry::getParentId, collect)); + + examQuestionsList.forEach(examQuestions -> { + examQuestions.setExamQuestionsEntryList(examQuestionsEntries.stream().filter(f -> f.getParentId().equals(examQuestions.getId())).collect(Collectors.toList())); + }); + result.put("examQuestionsList", examQuestionsList); + return ResponseResult.success(result); + } + + + /** + * 考试 提交答案 + * + * @return + */ + @PostMapping("/submitExam") + public ResponseResult submitExam(@RequestBody UserExerciseDto userExerciseDto) { + + return ResponseResult.success(); + } + + +} diff --git a/common/common-association/src/main/java/apelet/association/dao/CourseCoursewareMapper.java b/common/common-association/src/main/java/apelet/association/dao/CourseCoursewareMapper.java new file mode 100644 index 0000000..53052cf --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/CourseCoursewareMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.Course; +import apelet.association.model.CourseCourseware; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface CourseCoursewareMapper extends BaseDaoMapper { +} diff --git a/common/common-association/src/main/java/apelet/association/dao/CourseMapper.java b/common/common-association/src/main/java/apelet/association/dao/CourseMapper.java new file mode 100644 index 0000000..828d63e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/CourseMapper.java @@ -0,0 +1,7 @@ +package apelet.association.dao; + +import apelet.association.model.Course; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface CourseMapper extends BaseDaoMapper { +} diff --git a/common/common-association/src/main/java/apelet/association/dao/CourseVideoMapper.java b/common/common-association/src/main/java/apelet/association/dao/CourseVideoMapper.java new file mode 100644 index 0000000..dc9e5f3 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/CourseVideoMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.Course; +import apelet.association.model.CourseVideo; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface CourseVideoMapper extends BaseDaoMapper { +} diff --git a/common/common-association/src/main/java/apelet/association/dao/ExamMapper.java b/common/common-association/src/main/java/apelet/association/dao/ExamMapper.java new file mode 100644 index 0000000..91e0ac8 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/ExamMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.Course; +import apelet.association.model.Exam; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface ExamMapper extends BaseDaoMapper { +} diff --git a/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsEntryMapper.java b/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsEntryMapper.java new file mode 100644 index 0000000..15e21c7 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsEntryMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.ExamQuestionsEntry; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface ExamQuestionsEntryMapper extends BaseDaoMapper { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsMapper.java b/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsMapper.java new file mode 100644 index 0000000..7510f41 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/ExamQuestionsMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.ExamQuestions; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface ExamQuestionsMapper extends BaseDaoMapper { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/dao/QuestionBankEntryMapper.java b/common/common-association/src/main/java/apelet/association/dao/QuestionBankEntryMapper.java new file mode 100644 index 0000000..022e5d7 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/QuestionBankEntryMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.QuestionBankEntry; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface QuestionBankEntryMapper extends BaseDaoMapper { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/dao/QuestionBankMapper.java b/common/common-association/src/main/java/apelet/association/dao/QuestionBankMapper.java new file mode 100644 index 0000000..9cf21c8 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/QuestionBankMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.QuestionBank; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface QuestionBankMapper extends BaseDaoMapper { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/dao/UserCourseProgressMapper.java b/common/common-association/src/main/java/apelet/association/dao/UserCourseProgressMapper.java new file mode 100644 index 0000000..7bed915 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/UserCourseProgressMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.UserCourseProgress; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface UserCourseProgressMapper extends BaseDaoMapper { + +} diff --git a/common/common-association/src/main/java/apelet/association/dao/UserExerciseMapper.java b/common/common-association/src/main/java/apelet/association/dao/UserExerciseMapper.java new file mode 100644 index 0000000..d1f7021 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dao/UserExerciseMapper.java @@ -0,0 +1,8 @@ +package apelet.association.dao; + +import apelet.association.model.UserExercise; +import apelet.common.core.base.dao.BaseDaoMapper; + +public interface UserExerciseMapper extends BaseDaoMapper { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/dto/QuestionBankDto.java b/common/common-association/src/main/java/apelet/association/dto/QuestionBankDto.java new file mode 100644 index 0000000..4dc320b --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dto/QuestionBankDto.java @@ -0,0 +1,10 @@ +package apelet.association.dto; + +import apelet.association.model.QuestionBank; + +import java.io.Serializable; + +public class QuestionBankDto extends QuestionBank implements Serializable { + + +} diff --git a/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java b/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java new file mode 100644 index 0000000..816a5ae --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java @@ -0,0 +1,24 @@ +package apelet.association.dto; + +import apelet.association.model.UserExercise; +import lombok.Data; +import org.flowable.spring.security.UserDto; + +import java.util.List; + +@Data +public class UserExerciseDto { + + // 考试id + Long examId; + + // 题库id + Long questionBankId; + + // 答题用户id + Long userId; + + //答题记录 + List userExerciseList; + +} diff --git a/common/common-association/src/main/java/apelet/association/model/Course.java b/common/common-association/src/main/java/apelet/association/model/Course.java new file mode 100644 index 0000000..1a25a67 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/Course.java @@ -0,0 +1,224 @@ +package apelet.association.model; // 请根据你的实际包名修改 + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 课程表 + */ +@Data +@TableName("course") +public class Course implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 创建人登录名称 + */ + @TableField("create_user_id") + private String createUserId; + + /** + * 创建日期 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新人登录名称 + */ + @TableField("update_user_id") + private String updateUserId; + + /** + * 更新日期 + */ + @TableField("update_time") + private Date updateTime; + + /** + * 逻辑删除标记(1: 正常 -1: 已删除) + */ + @TableField("deleted_flag") + private Integer deletedFlag; + + /** + * 编码 + */ + @TableField("number") + private String number; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 流程状态 + */ + @TableField("flow_status") + private Integer flowStatus; + + /** + * 流程最新状态 + */ + @TableField("flow_approval_status") + private Integer flowApprovalStatus; + + /** + * 流程实例id + */ + @TableField("pro_ins_id") + private String proInsId; + + /** + * 状态 + */ + @TableField("billstatus") + private String billstatus; + + /** + * 公司 + */ + @TableField("org") + private Integer org; + + /** + * 来源单据ID + */ + @TableField("srcbillid") + private Integer srcbillid; + + /** + * 来源单据编码 + */ + @TableField("srcbillnumber") + private Integer srcbillnumber; + + /** + * 来源分录Id + */ + @TableField("srcentryid") + private Integer srcentryid; + + /** + * 课程详细描述 + */ + @TableField("course_desc") + private String courseDesc; + + /** + * 课程封面图 + */ + @TableField("course_cover") + private String courseCover; + + /** + * 一级专业分类 + */ + @TableField("first_profession") + private String firstProfession; + + /** + * 二级专业细分分类 + */ + @TableField("second_profession") + private String secondProfession; + + /** + * 授课讲师ID集合 + */ + @TableField("teacher_ids") + private String teacherIds; + + /** + * 课程搜索关键字 + */ + @TableField("keywords") + private String keywords; + + /** + * 课程启用状态 + */ + @TableField("is_enabled") + private Integer isEnabled; + + /** + * 学习人脸抓拍核验开关 + */ + @TableField("face_capture") + private Integer faceCapture; + + /** + * 人脸抓拍时间间隔 + */ + @TableField("capture_interval") + private Integer captureInterval; + + /** + * 人脸核验连续失败次数上限 + */ + @TableField("capture_times") + private Integer captureTimes; + + /** + * 课程课件权限范围 + */ + @TableField("visible_scope") + private Integer visibleScope; + + /** + * 指定可见部门ID/人员ID集合(逗号分隔) + */ + @TableField("scope_ids") + private String scopeIds; + + /** + * 课程学习有效期类型 + */ + @TableField("validity_type") + private Integer validityType; + + /** + * 课程自定义学习开始时间 + */ + @TableField("start_time") + private Date startTime; + + /** + * 课程自定义学习结束时间 + */ + @TableField("end_time") + private Date endTime; + + /** + * 课程结业完成规则 + */ + @TableField("completion_rule") + private String completionRule; + + /** + * 课程发布状态 + */ + @TableField("status") + private Integer status; + + /** + * 课程全程 + */ + @TableField("course_name") + private String courseName; +} diff --git a/common/common-association/src/main/java/apelet/association/model/CourseCourseware.java b/common/common-association/src/main/java/apelet/association/model/CourseCourseware.java new file mode 100644 index 0000000..276f835 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/CourseCourseware.java @@ -0,0 +1,131 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 课程课件表 + */ +@Data +@TableName("course_courseware") +public class CourseCourseware { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 创建人登录名称 + */ + @TableField("create_user_id") + private String createUserId; + + /** + * 创建日期 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新人登录名称 + */ + @TableField("update_user_id") + private String updateUserId; + + /** + * 更新日期 + */ + @TableField("update_time") + private Date updateTime; + + /** + * 逻辑删除标记(1: 正常 -1: 已删除) + */ + @TableField("deleted_flag") + private Integer deletedFlag; + + /** + * 关联所属课程ID外键 + */ + @TableField("course_id") + private Long courseId; + + /** + * 编码 + */ + @TableField("number") + private String number; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 父表id + */ + @TableField("parent_id") + private Long parentId; + + /** + * 课件名称 + */ + @TableField("courseware_name") + private String coursewareName; + + /** + * 课件文件类型 + */ + @TableField("file_type") + private Integer fileType; + + /** + * 课件阿里云OSS存储预览下载地址 + */ + @TableField("file_url") + private String fileUrl; + + /** + * 课件总页数 + */ + @TableField("page_count") + private Integer pageCount; + + /** + * 课件排序序号 + */ + @TableField("sort") + private Integer sort; + + /** + * PPT顺序学习锁定开关 + */ + @TableField("is_seq_lock") + private Integer isSeqLock; + + /** + * 课件每页最低停留学习时长 + */ + @TableField("min_stay_time") + private Integer minStayTime; + + + /** + * 用户ID + */ + @TableField(exist = false) + private Long userId; + + /** + * 当前进度 + */ + @TableField(exist = false) + private String progress; + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/model/CourseVideo.java b/common/common-association/src/main/java/apelet/association/model/CourseVideo.java new file mode 100644 index 0000000..f1770a4 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/CourseVideo.java @@ -0,0 +1,180 @@ +package apelet.association.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.time.LocalDateTime; + +/** + * 课程视频表 + */ +@Data +@TableName("course_video") +public class CourseVideo { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** + * 创建人登录名称 + */ + @TableField("create_user_id") + private String createUserId; + + /** + * 创建日期 + */ + @TableField("create_time") + private LocalDateTime createTime; + + /** + * 更新人登录名称 + */ + @TableField("update_user_id") + private String updateUserId; + + /** + * 更新日期 + */ + @TableField("update_time") + private LocalDateTime updateTime; + + /** + * 逻辑删除标记(1: 正常 -1: 已删除) + */ + @TableField("deleted_flag") + private Integer deletedFlag; + + /** + * 编码 + */ + @TableField("number") + private String number; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 父表id + */ + @TableField("parent_id") + private Long parentId; + + /** + * 课程表id + */ + @TableField("course_id") + private Long courseId; + + /** + * 视频章节名 + */ + @TableField("video_name") + private String videoName; + + /** + * 视频内容关键字 + */ + @TableField("video_keywords") + private String videoKeywords; + + /** + * 视频上传管理员用户ID + */ + @TableField("author_id") + private Long authorId; + + /** + * 视频阿里云OSS存储播放地址 + */ + @TableField("video_url") + private String videoUrl; + + /** + * 视频章节封面图OSS地址 + */ + @TableField("video_cover") + private String videoCover; + + /** + * 视频总长 + */ + @TableField("video_duration") + private Integer videoDuration; + + /** + * 视频章节排序序号 + */ + @TableField("sort") + private Integer sort; + + /** + * 流程状态 + */ + @TableField("flow_status") + private Integer flowStatus; + + /** + * 流程最新状态 + */ + @TableField("flow_approval_status") + private Integer flowApprovalStatus; + + /** + * 流程实例id + */ + @TableField("pro_ins_id") + private String proInsId; + + /** + * 状态 + */ + @TableField("billstatus") + private String billstatus; + + /** + * 公司 + */ + @TableField("org") + private Integer org; + + /** + * 来源单据ID + */ + @TableField("srcbillid") + private Integer srcbillid; + + /** + * 来源单据编码 + */ + @TableField("srcbillnumber") + private Integer srcbillnumber; + + /** + * 来源分录Id + */ + @TableField("srcentryid") + private Integer srcentryid; + + + /** + * 用户ID + */ + @TableField(exist = false) + private Long userId; + + /** + * 当前进度 + */ + @TableField(exist = false) + private String progress; + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/model/Exam.java b/common/common-association/src/main/java/apelet/association/model/Exam.java new file mode 100644 index 0000000..56781eb --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/Exam.java @@ -0,0 +1,175 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.time.LocalDateTime; + +/** + * 考试实体 + */ +@Data +@TableName("exam") +public class Exam { + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) + @TableField("id") + private Long id; + + /** + * 创建人登录名称 + */ + @TableField("create_user_id") + private String createUserId; + + /** + * 创建日期 + */ + @TableField("create_time") + private LocalDateTime createTime; + + /** + * 更新人登录名称 + */ + @TableField("update_user_id") + private String updateUserId; + + /** + * 更新日期 + */ + @TableField("update_time") + private LocalDateTime updateTime; + + /** + * 逻辑删除标记(1: 正常 -1: 已删除) + */ + @TableField("deleted_flag") + private Integer deletedFlag; + + /** + * 编码 + */ + @TableField("number") + private String number; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 流程状态 + */ + @TableField("flow_status") + private Integer flowStatus; + + /** + * 流程最新状态 + */ + @TableField("flow_approval_status") + private Integer flowApprovalStatus; + + /** + * 流程实例id + */ + @TableField("pro_ins_id") + private String proInsId; + + /** + * 状态 + */ + @TableField("billstatus") + private String billstatus; + + /** + * 公司 + */ + @TableField("org") + private Integer org; + + /** + * 来源单据ID + */ + @TableField("srcbillid") + private Integer srcbillid; + + /** + * 来源单据编码 + * 注意:数据库字段是int类型,不适合存储长编码,业务注意! + */ + @TableField("srcbillnumber") + private Integer srcbillnumber; + + /** + * 来源分录Id + */ + @TableField("srcentryid") + private Integer srcentryid; + + /** + * 考试分类 + */ + @TableField("type") + private Integer type; + + /** + * 满分 + */ + @TableField("full_marks") + private Integer fullMarks; + + /** + * 及格分 + */ + @TableField("passing_score") + private Integer passingScore; + + /** + * 开始时间 + */ + @TableField("start_time") + private LocalDateTime startTime; + + /** + * 结束时间 + */ + @TableField("end_time") + private LocalDateTime endTime; + + /** + * 时长 + */ + @TableField("duration") + private Integer duration; + + /** + * 公布考试结果 + */ + @TableField("is_announce_result") + private Integer isAnnounceResult; + + /** + * 公布考试答案 + */ + @TableField("is_announce_answer") + private Integer isAnnounceAnswer; + + /** + * 题库 + */ + @TableField("question_bank_id") + private Long questionBankId; + + /** + * 状态 + */ + @TableField("status") + private Integer status; +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/model/ExamQuestions.java b/common/common-association/src/main/java/apelet/association/model/ExamQuestions.java new file mode 100644 index 0000000..be3ddd3 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/ExamQuestions.java @@ -0,0 +1,81 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 试题 + */ +@Data +@TableName("exam_questions") +public class ExamQuestions { + + /** 主键ID */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** 创建人ID */ + @TableField(value = "create_user_id") + private String createUserId; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新人ID */ + @TableField(value = "update_user_id") + private String updateUserId; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + + /** 逻辑删除标记(0未删除 1已删除) */ + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** 编号 */ + @TableField(value = "number") + private String number; + + /** 试题名称 */ + @TableField(value = "name") + private String name; + + /** 试题类型(1单选题 2多选题 3判断题 4填空题 5简答题) */ + @TableField(value = "type") + private Integer type; + + /** 试题图片 */ + @TableField(value = "exam_picture") + private String examPicture; + + /** 答案 */ + @TableField(value = "answer") + private String answer; + + /** 试题解析 */ + @TableField(value = "analysis") + private String analysis; + + /** 分数 */ + @TableField(value = "score") + private Double score; + + /** 难度(1简单 2中等 3困难) */ + @TableField(value = "difficulty") + private Integer difficulty; + + /** 启用状态(0禁用 1启用) */ + @TableField(value = "enabled") + private Integer enabled; + + + @TableField(exist = false) + private List examQuestionsEntryList; + +} diff --git a/common/common-association/src/main/java/apelet/association/model/ExamQuestionsEntry.java b/common/common-association/src/main/java/apelet/association/model/ExamQuestionsEntry.java new file mode 100644 index 0000000..380e3d8 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/ExamQuestionsEntry.java @@ -0,0 +1,53 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 试题选项 + */ +@Data +@TableName("exam_questions_entry") +public class ExamQuestionsEntry { + + /** 主键ID */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** 创建人ID */ + @TableField(value = "create_user_id") + private String createUserId; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新人ID */ + @TableField(value = "update_user_id") + private String updateUserId; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + + /** 逻辑删除标记(0未删除 1已删除) */ + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** 选项编号(如A、B、C、D) */ + @TableField(value = "number") + private String number; + + /** 选项内容 */ + @TableField(value = "name") + private String name; + + /** 所属试题ID */ + @TableField(value = "parent_id") + private Long parentId; + + +} diff --git a/common/common-association/src/main/java/apelet/association/model/QuestionBank.java b/common/common-association/src/main/java/apelet/association/model/QuestionBank.java new file mode 100644 index 0000000..92bcb45 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/QuestionBank.java @@ -0,0 +1,77 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 题库 + */ +@Data +@TableName("question_bank") +public class QuestionBank { + + /** 主键ID */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** 创建人ID */ + @TableField(value = "create_user_id") + private String createUserId; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新人ID */ + @TableField(value = "update_user_id") + private String updateUserId; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + + /** 逻辑删除标记(0未删除 1已删除) */ + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** 编号 */ + @TableField(value = "number") + private String number; + + /** 题库名称 */ + @TableField(value = "name") + private String name; + + /** 一级专业/行业 */ + @TableField(value = "first_profession") + private String firstProfession; + + /** 二级专业/行业 */ + @TableField(value = "second_profession") + private String secondProfession; + + /** 题库说明 */ + @TableField(value = "description") + private String description; + + /** 启用状态(0禁用 1启用) */ + @TableField(value = "enabled") + private Integer enabled; + + /** 可见范围(1全部可见 2指定可见) */ + @TableField(value = "scope") + private String scope; + + /** 试题数量 */ + @TableField(value = "count") + private Integer count; + + /** 可见范围ID列表(逗号分隔的部门/用户ID) */ + @TableField(value = "scope_ids") + private String scopeIds; + + +} diff --git a/common/common-association/src/main/java/apelet/association/model/QuestionBankEntry.java b/common/common-association/src/main/java/apelet/association/model/QuestionBankEntry.java new file mode 100644 index 0000000..594afbc --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/QuestionBankEntry.java @@ -0,0 +1,56 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 题库试题分录 + */ +@Data +@TableName("question_bank_entry") +public class QuestionBankEntry { + + /** 主键ID */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** 创建人ID */ + @TableField(value = "create_user_id") + private String createUserId; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新人ID */ + @TableField(value = "update_user_id") + private String updateUserId; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + + /** 逻辑删除标记(0未删除 1已删除) */ + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** 编号 */ + @TableField(value = "number") + private String number; + + /** 名称 */ + @TableField(value = "name") + private String name; + + /** 所属题库ID */ + @TableField(value = "parent_id") + private Long parentId; + + /** 试题ID */ + @TableField(value = "exam_questions_id") + private Long examQuestionsId; + +} diff --git a/common/common-association/src/main/java/apelet/association/model/UserCourseProgress.java b/common/common-association/src/main/java/apelet/association/model/UserCourseProgress.java new file mode 100644 index 0000000..e5eec47 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/UserCourseProgress.java @@ -0,0 +1,109 @@ +package apelet.association.model; // 请根据你的实际包名修改 + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 课程进度表(新)实体类 + */ +@Data +@TableName("user_course_progressn") +public class UserCourseProgress implements Serializable { + + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 创建人登录名称 + */ + @TableField("create_user_id") + private String createUserId; + + /** + * 创建日期 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新人登录名称 + */ + @TableField("update_user_id") + private String updateUserId; + + /** + * 更新日期 + */ + @TableField("update_time") + private Date updateTime; + + /** + * 逻辑删除标记(1: 正常 -1: 已删除) + */ + @TableField("deleted_flag") + private Integer deletedFlag; + + /** + * 编码 + */ + @TableField("number") + private String number; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 状态 + */ + @TableField("billstatus") + private String billstatus; + + /** + * 公司 + */ + @TableField("org") + private Integer org; + + /** + * 用户进度(百分比) + */ + @TableField("progress") + private Integer progress; + + /** + * 当前进度 + */ + @TableField("current_progress") + private Integer currentProgress; + + /** + * 用户id + */ + @TableField("user_id") + private Long userId; + + /** + * 视频ID + */ + @TableField("video_id") + private Long videoId; + + /** + * 课件ID + */ + @TableField("courseware_id") + private Long coursewareId; +} diff --git a/common/common-association/src/main/java/apelet/association/model/UserExercise.java b/common/common-association/src/main/java/apelet/association/model/UserExercise.java new file mode 100644 index 0000000..c0c877e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/model/UserExercise.java @@ -0,0 +1,93 @@ +package apelet.association.model; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 用户答题记录 + */ +@Data +@TableName("user_exercise") +public class UserExercise { + + /** 主键ID */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** 创建人ID(答题用户ID) */ + @TableField(value = "create_user_id") + private String createUserId; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新人ID */ + @TableField(value = "update_user_id") + private String updateUserId; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + + /** 逻辑删除标记(0未删除 1已删除) */ + @TableField(value = "deleted_flag") + private Integer deletedFlag; + + /** 编号 */ + @TableField(value = "number") + private String number; + + /** 名称 */ + @TableField(value = "name") + private String name; + + /** 题库ID */ + @TableField(value = "question_bank_id") + private Long questionBankId; + + /** 试题ID */ + @TableField(value = "exam_questions_id") + private Long examQuestionsId; + + /** 入会申请ID */ + @TableField(value = "membership_apply_id") + private Long membershipApplyId; + + /** 用户答案 */ + @TableField(value = "answer") + private String answer; + + /** 是否正确(0错误 1正确) */ + @TableField(value = "is_correct") + private Integer isCorrect; + + /** 得分 */ + @TableField(value = "score") + private Double score; + + /** 答题耗时(秒) */ + @TableField(value = "exercise_time") + private String exerciseTime; + + /** 课程ID */ + @TableField(value = "course_id") + private Long courseId; + + /** 批次号 */ + @TableField(value = "batch") + private String batch; + + /** 考试ID */ + @TableField(value = "exam_id") + private Long examId; + + /** 类型 (1: 刷题, 2: 考试)*/ + @TableField(value = "type") + private Integer type; + + +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java index c4533b8..9612633 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java @@ -11,7 +11,7 @@ import apelet.common.online.model.constant.AttributeEnum; */ public class ActivityInfoUpdatePlugin extends ListPlugin { - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; public ActivityInfoUpdatePlugin() { ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java index b17e969..0d0087e 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java @@ -14,7 +14,7 @@ import apelet.common.orm.impl.Selector; */ public class ActivitySchedulePlugin extends ListPlugin { - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; public ActivitySchedulePlugin() { ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java index f147a63..65817b9 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java @@ -3,8 +3,10 @@ package apelet.association.plugin.active; import apelet.association.utils.MyFileUtil; import apelet.association.utils.QRCodeUtil; import apelet.common.core.exception.MyRuntimeException; -import apelet.common.core.object.*; -import apelet.common.core.upload.*; +import apelet.common.core.object.Model; +import apelet.common.core.object.ObjectCollection; +import apelet.common.core.object.ObjectValue; +import apelet.common.core.upload.UploadResponseInfo; import apelet.common.core.util.ApplicationContextHolder; import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.abstractplugin.ListPlugin; @@ -23,8 +25,8 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile; -import java.io.*; -import java.util.HashMap; +import java.io.File; +import java.io.IOException; import java.util.Map; /** @@ -34,15 +36,15 @@ import java.util.Map; @Slf4j public class ActivitySignConfigPlugin extends ListPlugin { - private MyFileUtil myFileUtil; - private QRCodeUtil qrCodeUtil; + private final MyFileUtil myFileUtil; + private final QRCodeUtil qrCodeUtil; - private OnlineTableService onlineTableService; - private OnlineColumnService onlineColumnService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OnlineTableService onlineTableService; + private final OnlineColumnService onlineColumnService; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - private OnlineDatasourceService onlineDatasourceService; + private final OnlineDatasourceService onlineDatasourceService; public ActivitySignConfigPlugin() { @@ -63,7 +65,7 @@ public class ActivitySignConfigPlugin extends ListPlugin { this.setWidgetAttribute("activityId", AttributeEnum.VALUE_CHANGE, parentParams); Filter filter = new Filter(); filter.add(new FilterItem("activity_id", FilterItem.equals, activityId)); - ObjectCollection data = ormGenDataSourceUtil.query( "activity_sign_config", filter, new Selector(), new Sorter()); + ObjectCollection data = ormGenDataSourceUtil.query("activity_sign_config", filter, new Selector(), new Sorter()); if (data != null && !data.isEmpty()) { ObjectValue object = data.getObject(0); this.setWidgetAttribute("id", AttributeEnum.VALUE_CHANGE, object.get("id")); @@ -98,11 +100,11 @@ public class ActivitySignConfigPlugin extends ListPlugin { Model model = dto.getModel(); if ("button1778742711763".equals(widgetVariableName)) { - if (StringUtils.isNotBlank(objectValue.getString("sign_in_code")) && - StringUtils.isNotBlank(objectValue.getString("sign_out_code"))) { - showWarningMessage("当前已存在二维码, 请勿重复生产!!!"); - return; - } +// if (StringUtils.isNotBlank(objectValue.getString("sign_in_code")) && +// StringUtils.isNotBlank(objectValue.getString("sign_out_code"))) { +// showWarningMessage("当前已存在二维码, 请勿重复生产!!!"); +// return; +// } // 生成二维码 String savePath = System.getProperty("user.dir") + "\\zz-resource\\qrcode"; @@ -115,14 +117,14 @@ public class ActivitySignConfigPlugin extends ListPlugin { OnlineDatasource onlineDatasource = onlineDatasourceService.getById(model.getDatasourceId()); OnlineTable table = onlineTableService.getOnlineTableFromCache(onlineDatasource.getMasterTableId()); - String checkIn = "https://localhost:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 1; + String checkIn = "http://192.168.100.22:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 1; byte[] checkInQr = qrCodeUtil.generateQrCode(checkIn, 350, 350); checkInFile = MyFileUtil.writeToFile(checkInQr, savePath, "qrcode-" + System.currentTimeMillis() + ".png"); MultipartFile checkInMultipart = MyFileUtil.readFileAsMultipartFile(checkInFile, "image/png"); UploadResponseInfo checkInUpload = myFileUtil.uploadMyFile(table, "sign_in_code", true, checkInMultipart); this.setWidgetAttribute("signInCode", AttributeEnum.VALUE_CHANGE, checkInUpload); - String checkOut = "https://localhost:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 2; + String checkOut = "http://192.168.100.22:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 2; byte[] checkOutQr = qrCodeUtil.generateQrCode(checkOut, 300, 300); checkOutFile = MyFileUtil.writeToFile(checkOutQr, savePath, "qrcode-" + System.currentTimeMillis() + ".png"); MultipartFile checkOutMultipart = MyFileUtil.readFileAsMultipartFile(checkOutFile, "image/png"); diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java index 5502993..7356ab3 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java @@ -22,7 +22,7 @@ import java.util.Map; */ public class CompetitionActivitiesListPlugin extends ListPlugin { - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; public CompetitionActivitiesListPlugin() { ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); @@ -39,7 +39,7 @@ public class CompetitionActivitiesListPlugin extends ListPlugin { String labelId = object != null && StringUtils.isNotEmpty(object.getString("id")) ? object.getString("id") : "0"; filter1.add(new FilterItem("label", FilterItem.equals, labelId)); - }else{ + } else { filter1.add(new FilterItem("label", FilterItem.equals, -1)); } return filter1; @@ -47,7 +47,7 @@ public class CompetitionActivitiesListPlugin extends ListPlugin { @Override public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { - if(widgetVariableName.equals("作品投稿")){ + if (widgetVariableName.equals("作品投稿")) { List rowDatas = getDto().getModel().getRowDatas(); if (rowDatas.size() != 1) { showWarningMessage("请选择一条数据!!!"); diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java new file mode 100644 index 0000000..3718f70 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java @@ -0,0 +1,39 @@ +package apelet.association.plugin.active; + +import apelet.common.core.object.ObjectCollection; +import apelet.common.core.object.ObjectValue; +import apelet.common.core.util.ApplicationContextHolder; +import apelet.common.generator.utils.OrmGenDataSourceUtil; +import apelet.common.online.abstractplugin.ListPlugin; +import apelet.common.online.model.constant.AttributeEnum; +import apelet.common.orm.impl.Filter; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import com.alibaba.fastjson.JSONArray; + +/** + * 大赛活动详情插件 + */ +public class CompetitionDetailsPlugin extends ListPlugin { + + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public CompetitionDetailsPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + setWidgetAttribute("id", AttributeEnum.SHOW, false); + Filter filter = new Filter(); + filter.add(new FilterItem("association_activity_id",FilterItem.equals, objectValue.get("id"))); + ObjectCollection collection = ormGenDataSourceUtil.query("competition_entries", filter, new Selector()); + JSONArray jsonArray = new JSONArray(); + collection.forEach(f -> { + jsonArray.add(f.getValues()); + }); + setWidgetAttribute("table1783059589608", AttributeEnum.ADD_ROWS, jsonArray); + } + +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java index 94b9540..8183f48 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java @@ -9,11 +9,11 @@ import apelet.common.online.model.constant.AttributeEnum; import java.util.Map; /** - * 作品投稿 编辑插件 + * 作品投稿 编辑插件 */ public class SubmissionWorksUpdatePlugin extends ListPlugin { - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; public SubmissionWorksUpdatePlugin() { ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); @@ -26,8 +26,8 @@ public class SubmissionWorksUpdatePlugin extends ListPlugin { if (eventParams != null && !eventParams.isEmpty()) { this.setWidgetAttribute("associationActivityId", AttributeEnum.VALUE_CHANGE, eventParams); } - if(objectValue.get("id") != null){ - this.setWidgetAttribute("id", AttributeEnum.SHOW,false); + if (objectValue.get("id") != null) { + this.setWidgetAttribute("id", AttributeEnum.SHOW, false); } } @@ -38,7 +38,7 @@ public class SubmissionWorksUpdatePlugin extends ListPlugin { @Override public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { - if("保存".equals(widgetVariableName)){ + if ("保存".equals(widgetVariableName)) { int views = objectValue.getInt("views"); objectValue.put("views", ++views); try { diff --git a/common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java index e9b49a3..c123aa8 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java @@ -1,39 +1,37 @@ package apelet.association.plugin.businessOpportunities; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; -import apelet.common.online.plugin.OperationResult; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; -import apelet.common.orm.impl.Filter; -import apelet.common.orm.impl.FilterItem; -import apelet.common.orm.impl.Selector; -import apelet.common.orm.impl.SelectorItem; +import apelet.common.orm.impl.*; public class BusinessSaveOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public BusinessSaveOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); // e.addFiledKey("clue_type"); e.addFiledKey("number"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -42,16 +40,16 @@ public class BusinessSaveOpPlugin extends OperationServicePlugIn { selectorClue.getList().add(new SelectorItem("number")); selectorClue.getList().add(new SelectorItem("clue_type")); Filter filter = new Filter(); - filter.add(new FilterItem("number","=",bill.get("number"))); - ObjectCollection clue = ormGenDataSourceUtil().query("member_clue",filter,selectorClue); - if(clue.size() == 1){ + filter.add(new FilterItem("number", "=", bill.get("number"))); + ObjectCollection clue = ormGenDataSourceUtil.query("member_clue", filter, selectorClue); + if (clue.size() == 1) { ObjectValue clueItem = clue.getObject(0); - clueItem.put("clue_type","4"); - ormGenDataSourceUtil().update("member_clue", clueItem, selectorClue); + clueItem.put("clue_type", "4"); + ormGenDataSourceUtil.update("member_clue", clueItem, selectorClue); } - }catch (Exception ex) { - throw new RuntimeException(ex); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java index f517bc6..0d3f52f 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java @@ -1,11 +1,11 @@ package apelet.association.plugin.clueManage; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.*; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; @@ -17,45 +17,45 @@ import apelet.common.orm.impl.SelectorItem; */ public class ClueActivateOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ClueActivateOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("clue_type"); e.addFiledKey("billstatus"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 ObjectValue bill = modelCollcetion.getObject(i); - if(bill.get("clue_type").equals("2")){ + if (bill.get("clue_type").equals("2")) { bill.put("clue_type", "0"); bill.put("billstatus", "A"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("clue_type")); selector.getList().add(new SelectorItem("billstatus")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - } - else { + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } else { OperationResult operationResult = this.getOperationResult(); operationResult.setSuccess(false); operationResult.setMessage("有状态不为放弃的数据"); } - }catch (Exception ex) { - throw new RuntimeException(ex); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java index 044d2e9..64717e7 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.clueManage; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,39 +8,38 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class ClueAuditOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ClueAuditOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("clue_type"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 ObjectValue bill = modelCollcetion.getObject(i); - bill.put("clue_type", "2"); - Selector selector = new Selector(); - selector.getList().add(new SelectorItem("clue_type")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + bill.put("clue_type", "2"); + Selector selector = new Selector(); + selector.getList().add(new SelectorItem("clue_type")); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java index b623cd8..4c64b60 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java @@ -1,21 +1,21 @@ package apelet.association.plugin.clueManage; -import apelet.association.utils.CreatNumberUtils; import apelet.common.core.object.ObjectValue; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; + + public class ClueManageFormPlugin extends ExecutePluginParent { + + @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); -// this.setAttribute("seekInfo","11"); -// this.setWidgetAttribute("number", AttributeEnum.VALUE_CHANGE, "123"); - CreatNumberUtils creatNumberUtils = new CreatNumberUtils(); - if(objectValue.get("clue_type") == null){ - this.setWidgetAttribute("clueType", AttributeEnum.VALUE_CHANGE,"0"); + if (objectValue.get("clue_type") == null) { + this.setWidgetAttribute("clueType", AttributeEnum.VALUE_CHANGE, "0"); } - if(objectValue.get("clue_type") == null){ - this.setWidgetAttribute("billstatus", AttributeEnum.VALUE_CHANGE,"A"); + if (objectValue.get("clue_type") == null) { + this.setWidgetAttribute("billstatus", AttributeEnum.VALUE_CHANGE, "A"); } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java index 0c8f6f7..93c45fd 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.clueManage; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,29 +8,29 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class ClueSubmitOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ClueSubmitOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("clue_type"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -37,10 +38,10 @@ public class ClueSubmitOpPlugin extends OperationServicePlugIn { bill.put("clue_type", "1"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("clue_type")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java index 738edfd..592989b 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java @@ -4,16 +4,15 @@ import apelet.common.core.object.ObjectValue; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; -public class courseFormPlugin extends ExecutePluginParent -{ +public class courseFormPlugin extends ExecutePluginParent { @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); - if(objectValue.get("isEnabled") == null){ - this.setWidgetAttribute("isEnabled", AttributeEnum.VALUE_CHANGE,0); + if (objectValue.get("isEnabled") == null) { + this.setWidgetAttribute("isEnabled", AttributeEnum.VALUE_CHANGE, 0); } - if(objectValue.get("faceCapture") == null){ - this.setWidgetAttribute("faceCapture", AttributeEnum.VALUE_CHANGE,0); + if (objectValue.get("faceCapture") == null) { + this.setWidgetAttribute("faceCapture", AttributeEnum.VALUE_CHANGE, 0); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java index de3a6fe..798a965 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java @@ -4,12 +4,12 @@ import apelet.common.core.object.ObjectValue; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; -public class CourseCoursewareFromPlugin extends ExecutePluginParent{ +public class CourseCoursewareFromPlugin extends ExecutePluginParent { @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); - if(objectValue.get("isSeqLock") == null){ - this.setWidgetAttribute("isSeqLock", AttributeEnum.VALUE_CHANGE,0); + if (objectValue.get("isSeqLock") == null) { + this.setWidgetAttribute("isSeqLock", AttributeEnum.VALUE_CHANGE, 0); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java index 0f75309..82ed37d 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.courseVideo; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectValue; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; @@ -9,9 +10,10 @@ import com.alibaba.fastjson.JSONObject; import org.bytedeco.javacv.FFmpegFrameGrabber; import java.io.File; -import java.net.URL; public class CourseVideoFormPlugin extends ExecutePluginParent { + + @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); @@ -30,24 +32,20 @@ public class CourseVideoFormPlugin extends ExecutePluginParent { JSONObject item = fileJson.getJSONObject(0); String realName = item.getString("fileRealName"); String fullFilePath = item.getString("uploadPath") + "/" + item.getString("filename"); - File file = new File(fullFilePath); - - long durationSec = 0; FFmpegFrameGrabber grabber = null; try { // 核心:直接传入字符串,自动识别本地文件 / 网络URL grabber = new FFmpegFrameGrabber(fullFilePath); grabber.start(); - // 微秒 → 毫秒 → 秒 long totalMicroSeconds = grabber.getLengthInTime(); long totalMs = totalMicroSeconds / 1000; durationSec = totalMs / 1000; } catch (Exception e) { - throw new RuntimeException("解析音视频时长失败,资源地址:" + fullFilePath, e); + throw new MyRuntimeException("解析音视频时长失败,资源地址:" + fullFilePath, e); } finally { // 强制释放资源,避免句柄、网络连接泄漏 if (grabber != null) { diff --git a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java index 8533e12..e7f04f4 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java @@ -1,6 +1,9 @@ package apelet.association.plugin.electronicJournal; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectValue; +import apelet.common.core.util.ApplicationContextHolder; +import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; import apelet.common.orm.impl.Selector; @@ -8,21 +11,26 @@ import apelet.common.orm.impl.SelectorItem; public class ElectronicJournalFormPlugin extends ExecutePluginParent { + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ElectronicJournalFormPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); Object viewCount = objectValue.get("view_count"); - if(viewCount == null){ - this.setWidgetAttribute("viewCount", AttributeEnum.VALUE_CHANGE,"0"); - } - else{ - objectValue.put("view_count",(Integer)viewCount+1); + if (viewCount == null) { + this.setWidgetAttribute("viewCount", AttributeEnum.VALUE_CHANGE, "0"); + } else { + objectValue.put("view_count", (Integer) viewCount + 1); Selector selector = new Selector(); selector.getList().add(new SelectorItem("view_count")); try { - ormGenDataSourceUtil().update(objectValue.getTableName(), objectValue, selector); + ormGenDataSourceUtil.update(objectValue.getTableName(), objectValue, selector); } catch (Exception e) { - throw new RuntimeException(e); + throw new MyRuntimeException(e.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java index 2154df2..180f3ec 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java @@ -18,15 +18,14 @@ public class ElectronicJournalListPlugin extends ListPlugin { OnlineEventPluginExecuteDto filter1 = this.getDto(); ArrayList filterDtoList = (ArrayList) filter1.getListParams().get("filterDtoList"); Filter filter = new Filter(); - if(!filterDtoList.isEmpty()){ - OnlineFilterDto onlineFilterDto = (OnlineFilterDto) filterDtoList.get(0); - Object filterFile = onlineFilterDto.getColumnValue(); - filter.add(new FilterItem("journal_category","=",filterFile)); + if (!filterDtoList.isEmpty()) { + OnlineFilterDto onlineFilterDto = filterDtoList.get(0); + Object filterFile = onlineFilterDto.getColumnValue(); + filter.add(new FilterItem("journal_category", "=", filterFile)); - } - else { + } else { filter = new Filter(); - } + } return filter; } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java index 29c438c..6df2d5e 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.electronicJournal; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,30 +8,29 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class ElectronicJournalOfflineOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public ElectronicJournalOfflineOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("publish_status"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -38,9 +38,9 @@ public class ElectronicJournalOfflineOpPlugin extends OperationServicePlugIn { bill.put("publish_status", "2"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("publish_status")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java index f80e436..dc1a649 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.electronicJournal; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,29 +8,28 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class ElectronicJournalOnlineOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public ElectronicJournalOnlineOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("publish_status"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -37,9 +37,9 @@ public class ElectronicJournalOnlineOpPlugin extends OperationServicePlugIn { bill.put("publish_status", "1"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("publish_status")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java index b0b21db..048bc9e 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.expertManage; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.object.TokenData; @@ -8,7 +9,6 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; @@ -20,24 +20,24 @@ import apelet.common.orm.impl.SelectorItem; */ public class ExpertManageAuditOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public ExpertManageAuditOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("flow_user"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -45,13 +45,13 @@ public class ExpertManageAuditOpPlugin extends OperationServicePlugIn { TokenData tokenData = TokenData.takeFromRequest(); Long userId = tokenData.getUserId(); - ObjectValue user = ormGenDataSourceUtil().queryOne("xy_sys_user",userId); - bill.put("flow_user", user); - Selector selector = new Selector(); - selector.getList().add(new SelectorItem("flow_user")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ObjectValue user = ormGenDataSourceUtil.queryOne("xy_sys_user", userId); + bill.put("flow_user", user); + Selector selector = new Selector(); + selector.getList().add(new SelectorItem("flow_user")); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java index e53e1e5..05398e5 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java @@ -1,14 +1,13 @@ package apelet.association.plugin.expertManage; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; -import apelet.common.core.object.TokenData; import apelet.common.core.util.ApplicationContextHolder; import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; @@ -23,24 +22,24 @@ import java.util.Date; * @Description:专家管理审核操作插件 */ public class ExpertManageSubmitOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public ExpertManageSubmitOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("apply_time"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -48,9 +47,9 @@ public class ExpertManageSubmitOpPlugin extends OperationServicePlugIn { bill.put("apply_time", Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant())); Selector selector = new Selector(); selector.getList().add(new SelectorItem("apply_time")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java index e914306..151a2b0 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java @@ -1,6 +1,9 @@ package apelet.association.plugin.fileLibraryMange; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectValue; +import apelet.common.core.util.ApplicationContextHolder; +import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.abstractplugin.ExecutePluginParent; import apelet.common.online.model.constant.AttributeEnum; import apelet.common.orm.impl.Selector; @@ -10,27 +13,50 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.File; -import java.io.FileInputStream; public class FileLibrayFormPlugin extends ExecutePluginParent { + + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public FileLibrayFormPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + + /** + * 格式化文件大小 + * 小于1MB显示KB,大于等于1MB显示MB,返回带单位字符串 + */ + public static String formatFileSize(long sizeByte) { + final long ONE_MB = 1048576L; + final long ONE_KB = 1024L; + if (sizeByte < ONE_MB) { + // 转KB保留1位小数 + double kb = (double) sizeByte / ONE_KB; + return String.format("%.1f KB", kb); + } else { + // 转MB保留1位小数 + double mb = (double) sizeByte / ONE_MB; + return String.format("%.1f MB", mb); + } + } + @Override public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); Object viewCount = objectValue.get("read_count"); - if(objectValue.get("classification") == null){ - this.setWidgetAttribute("classification", AttributeEnum.VALUE_CHANGE,"0"); + if (objectValue.get("classification") == null) { + this.setWidgetAttribute("classification", AttributeEnum.VALUE_CHANGE, "0"); } - if(viewCount == null){ - this.setWidgetAttribute("readCount", AttributeEnum.VALUE_CHANGE,"0"); - } - else{ - objectValue.put("read_count",(Integer)viewCount+1); + if (viewCount == null) { + this.setWidgetAttribute("readCount", AttributeEnum.VALUE_CHANGE, "0"); + } else { + objectValue.put("read_count", (Integer) viewCount + 1); Selector selector = new Selector(); selector.getList().add(new SelectorItem("read_count")); try { - ormGenDataSourceUtil().update(objectValue.getTableName(), objectValue, selector); + ormGenDataSourceUtil.update(objectValue.getTableName(), objectValue, selector); } catch (Exception e) { - throw new RuntimeException(e); + throw new MyRuntimeException(e); } } } @@ -39,13 +65,12 @@ public class FileLibrayFormPlugin extends ExecutePluginParent { public void change(String widgetVariableName, ObjectValue objectValue) { super.change(widgetVariableName, objectValue); Object fileName = objectValue.get("file_name"); - if(fileName == null){ - this.setWidgetAttribute("fileType", AttributeEnum.VALUE_CHANGE,null); - this.setWidgetAttribute("fileSize", AttributeEnum.VALUE_CHANGE,null); - this.setWidgetAttribute("fileName", AttributeEnum.DISABLED,false); - } - else { - this.setWidgetAttribute("fileName", AttributeEnum.DISABLED,true); + if (fileName == null) { + this.setWidgetAttribute("fileType", AttributeEnum.VALUE_CHANGE, null); + this.setWidgetAttribute("fileSize", AttributeEnum.VALUE_CHANGE, null); + this.setWidgetAttribute("fileName", AttributeEnum.DISABLED, false); + } else { + this.setWidgetAttribute("fileName", AttributeEnum.DISABLED, true); } } @@ -55,14 +80,14 @@ public class FileLibrayFormPlugin extends ExecutePluginParent { super.uploadSuccess(widgetVariableName, objectValue); Object fileName = objectValue.get("file_name"); - if(fileName != null){ + if (fileName != null) { JSONArray fileJson = JSON.parseArray(fileName.toString()); - if(!fileJson.isEmpty()){ - this.setWidgetAttribute("fileName", AttributeEnum.DISABLED,true); + if (!fileJson.isEmpty()) { + this.setWidgetAttribute("fileName", AttributeEnum.DISABLED, true); } JSONObject item = fileJson.getJSONObject(0); String realName = item.getString("fileRealName"); - String fullFilePath = item.getString("uploadPath")+"/"+item.getString("filename"); + String fullFilePath = item.getString("uploadPath") + "/" + item.getString("filename"); File file = new File(fullFilePath); @@ -72,8 +97,8 @@ public class FileLibrayFormPlugin extends ExecutePluginParent { // 获取文件类型(根据文件名后缀) String fileType = getFileType(realName); - this.setWidgetAttribute("fileType", AttributeEnum.VALUE_CHANGE,fileType); - this.setWidgetAttribute("fileSize", AttributeEnum.VALUE_CHANGE,formatFileSize(fileSize)); + this.setWidgetAttribute("fileType", AttributeEnum.VALUE_CHANGE, fileType); + this.setWidgetAttribute("fileSize", AttributeEnum.VALUE_CHANGE, formatFileSize(fileSize)); } else { System.out.println("文件不存在:" + fullFilePath); @@ -82,24 +107,6 @@ public class FileLibrayFormPlugin extends ExecutePluginParent { } } - /** - * 格式化文件大小 - * 小于1MB显示KB,大于等于1MB显示MB,返回带单位字符串 - */ - public static String formatFileSize(long sizeByte) { - final long ONE_MB = 1048576L; - final long ONE_KB = 1024L; - if (sizeByte < ONE_MB) { - // 转KB保留1位小数 - double kb = (double) sizeByte / ONE_KB; - return String.format("%.1f KB", kb); - } else { - // 转MB保留1位小数 - double mb = (double) sizeByte / ONE_MB; - return String.format("%.1f MB", mb); - } - } - // ===================== 工具方法:获取文件类型 ===================== private String getFileType(String fileName) { if (fileName == null || !fileName.contains(".")) { diff --git a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java index 00b4567..ec460a7 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java @@ -14,13 +14,12 @@ public class FileLibrayListPlugin extends ListPlugin { OnlineEventPluginExecuteDto filter1 = this.getDto(); ArrayList filterDtoList = (ArrayList) filter1.getListParams().get("filterDtoList"); Filter filter = new Filter(); - if(!filterDtoList.isEmpty()){ - OnlineFilterDto onlineFilterDto = (OnlineFilterDto) filterDtoList.get(0); + if (!filterDtoList.isEmpty()) { + OnlineFilterDto onlineFilterDto = filterDtoList.get(0); Object filterFile = onlineFilterDto.getColumnValue(); - filter.add(new FilterItem("classification","=",filterFile)); + filter.add(new FilterItem("classification", "=", filterFile)); - } - else { + } else { filter = new Filter(); } return filter; diff --git a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java index bd66f06..058f34a 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.fileLibraryMange; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,30 +8,30 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class FileLibrayOfflineOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public FileLibrayOfflineOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("publish_status"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -38,9 +39,9 @@ public class FileLibrayOfflineOpPlugin extends OperationServicePlugIn { bill.put("publish_status", "2"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("publish_status")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java index e36760d..35202d4 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.fileLibraryMange; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,30 +8,29 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; public class FileLibrayOnlineOpPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public FileLibrayOnlineOpPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("publish_status"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -38,9 +38,9 @@ public class FileLibrayOnlineOpPlugin extends OperationServicePlugIn { bill.put("publish_status", "1"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("publish_status")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java index a1530a6..256ea94 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java @@ -1,14 +1,8 @@ package apelet.association.plugin.member; -import apelet.common.core.object.ObjectCollection; -import apelet.common.core.object.ObjectValue; -import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.abstractplugin.ListPlugin; import apelet.common.orm.impl.Filter; import apelet.common.orm.impl.FilterItem; -import apelet.common.online.plugin.BeforeExecuteOperationArgs; -import apelet.common.online.plugin.OperationResult; -import apelet.common.online.plugin.OperationServicePlugIn; /** * @ClassName: MembershipApplyListFilterPlugin diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java index 56b3344..e62157c 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java @@ -32,7 +32,7 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent { * 按钮点击事件 * 点击按钮时,以弹窗方式打开 membershipFeePay 表单 * - * @param buttonKey 按钮标识 + * @param buttonKey 按钮标识 * @param objectValue 当前表单数据对象 */ @Override @@ -48,7 +48,7 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent { showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL); showParameter.setStatus(ViewStatus.EDIT); Map customParam = new HashMap<>(); - customParam.put("id"," "); + customParam.put("id", " "); showParameter.setCustomParam(customParam); super.showForm(showParameter); } diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java index ed081b8..70c8a39 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java @@ -18,9 +18,9 @@ public class MembershipPayShowHidePlugin extends ExecutePluginParent { public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); String membershipType = objectValue.getString("membershipType"); - if (Objects.equals(membershipType, "E")){ + if (Objects.equals(membershipType, "E")) { super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, true); - }else { + } else { super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, false); } } @@ -29,10 +29,10 @@ public class MembershipPayShowHidePlugin extends ExecutePluginParent { public void change(String widgetVariableName, ObjectValue objectValue) { super.change(widgetVariableName, objectValue); String membershipType = objectValue.getString("membership_type"); - if (Objects.equals(widgetVariableName, "membershipType")){ - if (Objects.equals(membershipType, "E")){ + if (Objects.equals(widgetVariableName, "membershipType")) { + if (Objects.equals(membershipType, "E")) { super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, true); - }else { + } else { super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, false); } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java index abb56d7..64e45d0 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java @@ -11,7 +11,6 @@ import apelet.common.online.model.constant.ShowTypeEnum; import apelet.common.online.model.constant.ViewStatus; import apelet.common.orm.impl.Filter; import apelet.common.orm.impl.FilterItem; -import apelet.common.orm.impl.Selector; import java.util.HashMap; import java.util.List; @@ -26,28 +25,23 @@ import java.util.Map; */ public class UnitNameChangePopupPlugin extends ListPlugin { - private OrmGenDataSourceUtil ormGenDataSourceUtil; - - public UnitNameChangePopupPlugin() { - ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); - } - /** * 目标表单ID - membership_apply 表单在平台中的表单ID */ private static final String TARGET_FORM_ID = "2048951917157027840"; - - /** * 传递到弹窗的参数key - 单据ID */ private static final String PARAM_BILL_ID = "sourceBillId"; - /** * 传递到弹窗的参数key - 单据编号 */ private static final String PARAM_BILL_NUMBER = "sourceBillNumber"; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + public UnitNameChangePopupPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } @Override protected Filter getFilter() { @@ -67,6 +61,11 @@ public class UnitNameChangePopupPlugin extends ListPlugin { @Override public void buttonTriggered(String buttonKey, ObjectValue objectValue) { OnlineEventPluginExecuteDto dto = getDto(); + + if("新建".equals(buttonKey)) { + return; + } + List rowDatas = dto.getModel().getRowDatas(); if (rowDatas == null || rowDatas.size() != 1) { showWarningMessage("请先在列表中选中一条单据"); @@ -75,6 +74,7 @@ public class UnitNameChangePopupPlugin extends ListPlugin { } Map data = rowDatas.get(0); if ("变更".equals(buttonKey)) { + // 调用 showForm 打开入会申请表单(新建空表单,不加载任何已有记录) ShowParameter showParameter = new ShowParameter(); showParameter.setFormId(TARGET_FORM_ID); @@ -88,13 +88,23 @@ public class UnitNameChangePopupPlugin extends ListPlugin { showParameter.setCustomParam(customParam); super.showForm(showParameter); } - if ("退会".equals(buttonKey)) { this.showConfirm("withdrawal", "确定是否退出协会?"); this.cancelOperate(); - return; } + if("查看历史".equals(buttonKey)){ + ShowParameter showParameter = new ShowParameter(); + showParameter.setFormId("2071862530363363328"); + showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL); + showParameter.setStatus(ViewStatus.VIEW); + + // 设置自定义参数 + Map customParam = new HashMap<>(); + customParam.put("id", data.get("id")); + showParameter.setCustomParam(customParam); + super.showForm(showParameter); + } } @@ -105,11 +115,10 @@ public class UnitNameChangePopupPlugin extends ListPlugin { if ((Integer) clickResult.get("result") == 1) {//confirm Map data = getDto().getModel().getRowDatas().get(0); Object id = data.get("id"); - ObjectValue value = ormGenDataSourceUtil.queryOne("membership_apply", id); - value.put("deleted_flag", "0"); - value.put("billstatus", "0"); + Filter filter = new Filter(); + filter.add(new FilterItem("id", FilterItem.equals, id)); try { - ormGenDataSourceUtil.update("membership_apply", value, new Selector()); + ormGenDataSourceUtil.delete("membership_apply", filter); } catch (Exception e) { throw new MyRuntimeException(e.getMessage()); } diff --git a/common/common-association/src/main/java/apelet/association/plugin/question/DoPracticeProblemsSavePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/question/DoPracticeProblemsSavePlugin.java new file mode 100644 index 0000000..3ecaaca --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/question/DoPracticeProblemsSavePlugin.java @@ -0,0 +1,66 @@ +package apelet.association.plugin.question; + +import apelet.common.core.object.ObjectCollection; +import apelet.common.core.object.ObjectValue; +import apelet.common.online.abstractplugin.ListPlugin; +import apelet.common.online.dto.OnlineEventPluginExecuteDto; +import apelet.common.online.model.constant.AttributeEnum; +import apelet.common.orm.impl.Filter; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import org.apache.commons.lang3.StringUtils; + +import java.util.Map; + +/** + * 刷题 插件 + */ +public class DoPracticeProblemsSavePlugin extends ListPlugin { + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + + this.setWidgetAttribute("answer", AttributeEnum.SHOW, false); + + this.setWidgetAttribute("analysis", AttributeEnum.SHOW, false); + + if(objectValue.getString("type").equals("4")){ + this.setWidgetAttribute("block1782895105921", AttributeEnum.SHOW, false); + this.setWidgetAttribute("table1782871009238", AttributeEnum.SHOW, false); + + this.setWidgetAttribute("flowStatus", AttributeEnum.REQUIRED, true); + }else{ + this.setWidgetAttribute("flowStatus", AttributeEnum.SHOW, false); + } + if(StringUtils.isEmpty(objectValue.getString("exam_picture"))){ + this.setWidgetAttribute("examPicture", AttributeEnum.SHOW, false); + } + } + + + @Override + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { + if(widgetVariableName.equals("确认")){ + this.cancelOperate(); + return; + } + if(widgetVariableName.equals("下一题")){ + Map eventParams = getDto().getEventParams(); + Filter filter = new Filter(); + filter.add(new FilterItem("batchNumber", FilterItem.equals, eventParams.get("batch"))); + filter.add(new FilterItem("exam_questions_id", FilterItem.equals, objectValue.get("id"))); + filter.add(new FilterItem("question_bank_id", FilterItem.equals, eventParams.get("question_bank_id"))); + ObjectCollection collection = ormGenDataSourceUtil().query("user_exercise", filter, new Selector()); + if (collection.isEmpty()) { + + } + + } + } + + + @Override + public void rowClick(String widgetVariableName, ObjectValue objectValue) { + super.rowClick(widgetVariableName, objectValue); + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java new file mode 100644 index 0000000..23aa429 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java @@ -0,0 +1,74 @@ +package apelet.association.plugin.question; + + +import apelet.common.core.object.ObjectCollection; +import apelet.common.core.object.ObjectValue; +import apelet.common.core.object.TokenData; +import apelet.common.online.abstractplugin.ListPlugin; +import apelet.common.online.model.ShowParameter; +import apelet.common.online.model.constant.ShowTypeEnum; +import apelet.common.online.model.constant.ViewStatus; +import cn.hutool.core.util.IdUtil; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class QuestionBankListPlugin extends ListPlugin { + + public QuestionBankListPlugin() { + + } + + @Override + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { + if ("刷题".equals(widgetVariableName)) { + List rowDatas = getDto().getModel().getRowDatas(); + if (rowDatas == null || rowDatas.size() != 1) { + showWarningMessage("请先在列表中选中一条单据"); + this.cancelOperate(); + return; + } + Map data = rowDatas.get(0); + + ObjectValue questionBank = ormGenDataSourceUtil().queryOne("question_bank", data.get("id")); + ObjectCollection collection = questionBank.getObjectCollection("question_bank_entry"); + if (collection == null || collection.isEmpty()) { + this.showWarningMessage("题库下没有试题, 请先添加试题!!!"); + this.cancelOperate(); + return; + } + long batchNumber = IdUtil.getSnowflakeNextId(); + collection.forEach(f -> { + ObjectValue userExercise = new ObjectValue("user_exercise"); + userExercise.put("question_bank_id", questionBank); + userExercise.put("exam_questions_id", f.getObjectValue("exam_questions_id")); + userExercise.put("membership_apply_id", TokenData.takeFromRequest().getUserId()); + userExercise.put("batch", batchNumber); + userExercise.put("is_correct", 0); + try { + ormGenDataSourceUtil().addNew(userExercise.getTableName(), userExercise); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + ObjectValue object = collection.getObject(0); + ObjectValue examQuestions = object.getObjectValue("exam_questions_id"); + ShowParameter showParameter = new ShowParameter(); + showParameter.setFormId("2072135972052537344"); + showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_PAGE); + showParameter.setStatus(ViewStatus.EDIT); + showParameter.setPkId(examQuestions.getString("id")); + // 设置自定义参数 + Map customParam = new HashMap<>(); + customParam.put("question_bank_id", questionBank.getString("id")); + customParam.put("exam_questions_id", examQuestions.getString("id")); + customParam.put("membership_apply_id", TokenData.takeFromRequest().getUserId()); + customParam.put("batchNumber", batchNumber); + showParameter.setCustomParam(customParam); + super.showForm(showParameter); + } + + } + +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java index 287f611..f25b70c 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.quotation; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,20 +8,19 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.*; /* 弹窗确认后,保存数据库 */ public class ConfirmPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + + private final OrmGenDataSourceUtil ormGenDataSourceUtil; public ConfirmPlugin() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); @@ -28,12 +28,12 @@ public class ConfirmPlugin extends OperationServicePlugIn { } @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); if (ormGenDataSourceUtil == null) { - throw new RuntimeException("ORM工具类初始化失败,无法执行数据库操作"); + throw new MyRuntimeException("ORM工具类初始化失败,无法执行数据库操作"); } if (modelCollcetion != null && !modelCollcetion.isEmpty()) { @@ -55,15 +55,15 @@ public class ConfirmPlugin extends OperationServicePlugIn { ObjectValue oldBill = oldCollection.getObject(0); oldBill.put("status", "4"); oldBill.put("canaelreason", reason); - oldBill.put("billstatus","A"); + oldBill.put("billstatus", "A"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("status")); selector.getList().add(new SelectorItem("canaelreason")); selector.getList().add(new SelectorItem("billstatus")); ormGenDataSourceUtil.update(oldBill.getTableName(), oldBill, selector); - }catch (Exception ex) { + } catch (Exception ex) { // 抛出运行时异常,使事务回滚 - throw new RuntimeException("更新单据状态失败: " + ex.getMessage(), ex); + throw new MyRuntimeException("更新单据状态失败: " + ex.getMessage(), ex); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java index 62785fb..d423550 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java @@ -10,9 +10,9 @@ import apelet.common.orm.impl.FilterItem; */ public class ContractPlugin extends ListPlugin { @Override - protected Filter getFilter(){ + protected Filter getFilter() { Filter filter = new Filter(); - filter.add(new FilterItem("status",FilterItem.equals,"3")); + filter.add(new FilterItem("status", FilterItem.equals, "3")); return filter; } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java index 4da0d25..8fb5886 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java @@ -33,18 +33,18 @@ public class OpenPopupPlugin extends ListPlugin { * @param objectValue 数据 */ @Override - public void buttonTriggered(String widgetVariableName, ObjectValue objectValue){ + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { super.buttonTriggered(widgetVariableName, objectValue); - if (BUTTON_KEY.equals(widgetVariableName)){ + if (BUTTON_KEY.equals(widgetVariableName)) { //打开弹窗 ShowParameter showParameter = new ShowParameter(); showParameter.setFormId(FORM_ID.toString()); showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL); showParameter.setStatus(ViewStatus.EDIT); // 传参 - Map map = new HashMap<>(); + Map map = new HashMap<>(); // 为弹窗中的隐藏字段标识 - map.put("id",""); + map.put("id", ""); // 设置参数 showParameter.setCustomParam(map); super.showForm(showParameter); diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java index a222136..95bd51b 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java @@ -15,16 +15,16 @@ import java.util.Map; */ public class PopupGetIdPlugin extends ExecutePluginParent { @Override - public void formCreated(String widgetVariableName, ObjectValue objectValue){ + public void formCreated(String widgetVariableName, ObjectValue objectValue) { OnlineEventPluginExecuteDto dto = getDto(); Map rowData = dto.getModel().getRowData(); - if (rowData != null && !rowData.isEmpty()){ + if (rowData != null && !rowData.isEmpty()) { Collection values = rowData.values(); Object firstValue = values.iterator().next(); JSONArray jsonArray = (JSONArray) firstValue; JSONObject item = jsonArray.getJSONObject(0); String id = item.getString("id"); - this.setWidgetAttribute("id", AttributeEnum.VALUE_CHANGE,id); + this.setWidgetAttribute("id", AttributeEnum.VALUE_CHANGE, id); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java index d1d4f9e..061404d 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java @@ -10,52 +10,59 @@ import apelet.common.online.model.constant.AttributeEnum; import liquibase.repackaged.org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; /* 报价单插件 */ public class QuotationPlugin extends ExecutePluginParent { - private static final OrmGenDataSourceUtil ORM_GEN_DATA_SOURCE_UTIL = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public QuotationPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + @Override - public void formCreated(String widgetVariableName, ObjectValue objectValue){ + public void formCreated(String widgetVariableName, ObjectValue objectValue) { super.formCreated(widgetVariableName, objectValue); //获取当前登录的用户ID TokenData tokenData = TokenData.takeFromRequest(); Long userId = tokenData.getUserId(); //查询当前用户信息 - ObjectValue sysUserInfo = ORM_GEN_DATA_SOURCE_UTIL.queryOne("xy_sys_user", userId); - //赋值 - if (sysUserInfo != null){ - this.setWidgetAttribute("managerperson", AttributeEnum.VALUE_CHANGE, sysUserInfo); - } + Map hashMap = new HashMap<>(); + hashMap.put("id", userId); + hashMap.put("show_name", tokenData.getLoginName()); + this.setWidgetAttribute("managerperson", AttributeEnum.VALUE_CHANGE, hashMap); //设置报价单状态 //获取id long id = objectValue.getLong("id"); - if(id == 0){ - this.setWidgetAttribute("status",AttributeEnum.VALUE_CHANGE,"1"); - this.setWidgetAttribute("billstatus",AttributeEnum.VALUE_CHANGE,"A"); + if (id == 0) { + this.setWidgetAttribute("status", AttributeEnum.VALUE_CHANGE, "1"); + this.setWidgetAttribute("billstatus", AttributeEnum.VALUE_CHANGE, "A"); //设置总价初始值为0 - this.setWidgetAttribute("qty",AttributeEnum.VALUE_CHANGE,0); + this.setWidgetAttribute("qty", AttributeEnum.VALUE_CHANGE, 0); } //获取报价单状态 String status = objectValue.getString("status"); - if(!("4").equals(status)){ + if (!("4").equals(status)) { //隐藏取消原因 - this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,false); + this.setWidgetAttribute("canaelreason", AttributeEnum.SHOW, false); } } @Override - public void change(String widgetVariableName, ObjectValue objectValue){ + public void change(String widgetVariableName, ObjectValue objectValue) { super.change(widgetVariableName, objectValue); //获取报价单状态 String status = objectValue.getString("status"); //若status为"4" - if(status.equals("4")){ - this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,true); - }else { - this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,false); + if (status.equals("4")) { + this.setWidgetAttribute("canaelreason", AttributeEnum.SHOW, true); + } else { + this.setWidgetAttribute("canaelreason", AttributeEnum.SHOW, false); } //获取单据体 @@ -63,28 +70,26 @@ public class QuotationPlugin extends ExecutePluginParent { // 总金额 BigDecimal allTotalAmount = BigDecimal.ZERO; //判断是否有数据 - if (quotationE != null && !quotationE.isEmpty()){ - for (int i = 0; i < quotationE.size(); i++ ){ + if (quotationE != null && !quotationE.isEmpty()) { + for (int i = 0; i < quotationE.size(); i++) { // 获取行数据 ObjectValue row = quotationE.getObject(i); //获取指导折扣价 + BigDecimal num = row.getBigDecimal("num"); + BigDecimal price = row.getBigDecimal("price"); BigDecimal discount = row.getBigDecimal("discount"); // 判空处理 - if (discount == null) { - discount = BigDecimal.ZERO; + if (num == null || price == null) { + continue; } - //获取数量 - int num = row.getInt("num"); - - // 计算总价 = 折扣价 * 数量 - BigDecimal totalAmount = discount.multiply(BigDecimal.valueOf(num)); - allTotalAmount = allTotalAmount.add(totalAmount); + BigDecimal decimal = price.subtract(discount); + allTotalAmount = allTotalAmount.add(decimal.multiply(num)); } - this.setWidgetAttribute("qty",AttributeEnum.VALUE_CHANGE,allTotalAmount); + this.setWidgetAttribute("qty", AttributeEnum.VALUE_CHANGE, allTotalAmount); } //获取项目类型 String type = objectValue.getString("type"); type = StringUtils.removeEnd(type, ","); - this.setWidgetAttribute("type",AttributeEnum.VALUE_CHANGE,type); + this.setWidgetAttribute("type", AttributeEnum.VALUE_CHANGE, type); } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java index d84b423..ffe870d 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.quotation; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,7 +8,6 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; @@ -16,12 +16,10 @@ import apelet.common.orm.impl.SelectorItem; */ public class ReviewPastPlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public ReviewPastPlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } @Override @@ -31,23 +29,23 @@ public class ReviewPastPlugin extends OperationServicePlugIn { } @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 ObjectValue bill = modelCollcetion.getObject(i); bill.put("status", "3"); - bill.put("billstatus","C"); + bill.put("billstatus", "C"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("status")); selector.getList().add(new SelectorItem("billstatus")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java index 0d2d4d5..8106781 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.quotation; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,7 +8,6 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; @@ -15,12 +15,11 @@ import apelet.common.orm.impl.SelectorItem; 审核驳回插件 */ public class ReviewRefusePlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ReviewRefusePlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } @Override @@ -30,23 +29,23 @@ public class ReviewRefusePlugin extends OperationServicePlugIn { } @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 ObjectValue bill = modelCollcetion.getObject(i); bill.put("status", "1"); - bill.put("billstatus","A"); + bill.put("billstatus", "A"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("status")); selector.getList().add(new SelectorItem("billstatus")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java index 74f77bf..4c2252d 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java @@ -1,5 +1,6 @@ package apelet.association.plugin.quotation; +import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectValue; import apelet.common.core.util.ApplicationContextHolder; @@ -7,31 +8,30 @@ import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.online.plugin.BeginOperationTransactionArgs; import apelet.common.online.plugin.OperationServicePlugIn; import apelet.common.online.plugin.OperationServicePlugInArgs; -import apelet.common.online.service.impl.OnlineFormServiceImpl; import apelet.common.orm.impl.Selector; import apelet.common.orm.impl.SelectorItem; //提交后修改状态 public class StatusChangePlugin extends OperationServicePlugIn { - private OnlineFormServiceImpl onlineFormService; - private OrmGenDataSourceUtil ormGenDataSourceUtil; + private final OrmGenDataSourceUtil ormGenDataSourceUtil; - public void AuditOperationServicePlugIn() { - onlineFormService = ApplicationContextHolder.getBean("onlineFormService"); - ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil"); + public StatusChangePlugin() { + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); } + @Override public void onPreparePropertys(OperationServicePlugInArgs e) { e.addFiledKey("id"); e.addFiledKey("status"); } + @Override - public void beginOperationTransaction(BeginOperationTransactionArgs e){ + public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); ObjectCollection modelCollcetion = e.getModelCollcetion(); - if(modelCollcetion != null && !modelCollcetion.isEmpty()){ + if (modelCollcetion != null && !modelCollcetion.isEmpty()) { for (int i = 0; i < modelCollcetion.size(); i++) { try { // 获取单据对象 @@ -39,9 +39,9 @@ public class StatusChangePlugin extends OperationServicePlugIn { bill.put("status", "2"); Selector selector = new Selector(); selector.getList().add(new SelectorItem("status")); - ormGenDataSourceUtil().update(bill.getTableName(), bill, selector); - }catch (Exception ex) { - throw new RuntimeException(ex); + ormGenDataSourceUtil.update(bill.getTableName(), bill, selector); + } catch (Exception ex) { + throw new MyRuntimeException(ex.getMessage()); } } } diff --git a/common/common-association/src/main/java/apelet/association/service/CourseCoursewareService.java b/common/common-association/src/main/java/apelet/association/service/CourseCoursewareService.java new file mode 100644 index 0000000..a613e76 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/CourseCoursewareService.java @@ -0,0 +1,25 @@ +package apelet.association.service; + +import apelet.association.model.CourseCourseware; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface CourseCoursewareService extends IService { + + /** + * 保存课件学习记录 + * + * @param courseCourseware + */ + void saveCoursewareLearning(CourseCourseware courseCourseware); + + /** + * 获取课件学习进度 + * @param courseId 课程ID + * @param userId 用户ID + * @return + */ + Object getCourseLearningProgress(Long courseId, Long userId); + + + +} diff --git a/common/common-association/src/main/java/apelet/association/service/CourseService.java b/common/common-association/src/main/java/apelet/association/service/CourseService.java new file mode 100644 index 0000000..8434e34 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/CourseService.java @@ -0,0 +1,11 @@ +package apelet.association.service; + +import apelet.association.model.Course; +import apelet.association.model.CourseCourseware; +import apelet.association.model.CourseVideo; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface CourseService extends IService { + + +} diff --git a/common/common-association/src/main/java/apelet/association/service/CourseVideoService.java b/common/common-association/src/main/java/apelet/association/service/CourseVideoService.java new file mode 100644 index 0000000..50c289e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/CourseVideoService.java @@ -0,0 +1,29 @@ +package apelet.association.service; + +import apelet.association.model.CourseVideo; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface CourseVideoService extends IService { + + /** + * 保存视频学习记录 + * + * @param courseVideo + */ + void saveVideoLearning(CourseVideo courseVideo); + + + /** + * 获取课程视频学习进度 + * + * @param videoId + * @param userId + * @return + */ + Object getVideoLearningProgress(Long videoId, Long userId); + + long getByteOffsetByTime(Long videoId, Long userId); + +} + + diff --git a/common/common-association/src/main/java/apelet/association/service/ExamQuestionsEntryService.java b/common/common-association/src/main/java/apelet/association/service/ExamQuestionsEntryService.java new file mode 100644 index 0000000..4783cbb --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/ExamQuestionsEntryService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + + +import apelet.association.model.ExamQuestionsEntry; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ExamQuestionsEntryService extends IService { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/service/ExamQuestionsService.java b/common/common-association/src/main/java/apelet/association/service/ExamQuestionsService.java new file mode 100644 index 0000000..63847b2 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/ExamQuestionsService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + + +import apelet.association.model.ExamQuestions; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ExamQuestionsService extends IService { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/service/ExamService.java b/common/common-association/src/main/java/apelet/association/service/ExamService.java new file mode 100644 index 0000000..d284466 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/ExamService.java @@ -0,0 +1,10 @@ +package apelet.association.service; + +import apelet.association.model.Course; +import apelet.association.model.Exam; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ExamService extends IService { + + +} diff --git a/common/common-association/src/main/java/apelet/association/service/QuestionBankEntryService.java b/common/common-association/src/main/java/apelet/association/service/QuestionBankEntryService.java new file mode 100644 index 0000000..8c9e2e2 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/QuestionBankEntryService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + + +import apelet.association.model.QuestionBankEntry; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface QuestionBankEntryService extends IService { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/service/QuestionBankService.java b/common/common-association/src/main/java/apelet/association/service/QuestionBankService.java new file mode 100644 index 0000000..34ae46d --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/QuestionBankService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + + +import apelet.association.model.QuestionBank; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface QuestionBankService extends IService { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/service/UserCourseProgressService.java b/common/common-association/src/main/java/apelet/association/service/UserCourseProgressService.java new file mode 100644 index 0000000..c2baa13 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/UserCourseProgressService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + +import apelet.association.model.UserCourseProgress; +import com.baomidou.mybatisplus.extension.service.IService; + + +public interface UserCourseProgressService extends IService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/UserExerciseService.java b/common/common-association/src/main/java/apelet/association/service/UserExerciseService.java new file mode 100644 index 0000000..1634be3 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/UserExerciseService.java @@ -0,0 +1,9 @@ +package apelet.association.service; + + +import apelet.association.model.UserExercise; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface UserExerciseService extends IService { + +} \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/service/impl/CourseCoursewareServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/CourseCoursewareServiceImpl.java new file mode 100644 index 0000000..977c589 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/CourseCoursewareServiceImpl.java @@ -0,0 +1,57 @@ +package apelet.association.service.impl; + +import apelet.association.dao.CourseCoursewareMapper; +import apelet.association.dao.UserExerciseMapper; +import apelet.association.model.CourseCourseware; +import apelet.association.model.UserCourseProgress; +import apelet.association.model.UserExercise; +import apelet.association.service.CourseCoursewareService; +import apelet.association.service.UserCourseProgressService; +import apelet.association.service.UserExerciseService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class CourseCoursewareServiceImpl extends ServiceImpl + implements CourseCoursewareService { + + @Autowired + private UserCourseProgressService userCourseProgressService; + + @Override + public void saveCoursewareLearning(CourseCourseware courseCourseware) { + UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper() + .eq(UserCourseProgress::getUserId, courseCourseware.getUserId()) + .eq(UserCourseProgress::getCoursewareId, courseCourseware.getId())); + String progress = courseCourseware.getProgress(); + int pageCount = courseCourseware.getPageCount(); + int progressPercentage = Integer.parseInt(progress) / pageCount; + if(userCourseProgress == null){ + userCourseProgress = new UserCourseProgress(); + } + userCourseProgress.setCreateTime(new Date()); + userCourseProgress.setUserId(courseCourseware.getUserId()); + userCourseProgress.setCoursewareId(courseCourseware.getId()); + userCourseProgress.setProgress(progressPercentage); + userCourseProgress.setCurrentProgress(Integer.valueOf(progress)); + userCourseProgressService.saveOrUpdate(userCourseProgress); + } + + + + @Override + public Object getCourseLearningProgress(Long courseId, Long userId) { + UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper() + .eq(UserCourseProgress::getUserId, userId) + .eq(UserCourseProgress::getCoursewareId, courseId)); + if(userCourseProgress != null){ + return userCourseProgress.getCurrentProgress(); + } + return 0; + } + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/CourseServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/CourseServiceImpl.java new file mode 100644 index 0000000..a48d813 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/CourseServiceImpl.java @@ -0,0 +1,21 @@ +package apelet.association.service.impl; + +import apelet.association.dao.CourseCoursewareMapper; +import apelet.association.dao.CourseMapper; +import apelet.association.model.Course; +import apelet.association.model.CourseCourseware; +import apelet.association.model.CourseVideo; +import apelet.association.service.CourseCoursewareService; +import apelet.association.service.CourseService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class CourseServiceImpl extends ServiceImpl implements CourseService { + + + + + + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/CourseVideoServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/CourseVideoServiceImpl.java new file mode 100644 index 0000000..b7e8f8e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/CourseVideoServiceImpl.java @@ -0,0 +1,70 @@ +package apelet.association.service.impl; + +import apelet.association.dao.CourseMapper; +import apelet.association.dao.CourseVideoMapper; +import apelet.association.model.Course; +import apelet.association.model.CourseVideo; +import apelet.association.model.UserCourseProgress; +import apelet.association.service.CourseService; +import apelet.association.service.CourseVideoService; +import apelet.association.service.UserCourseProgressService; +import apelet.common.core.exception.MyRuntimeException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.bytedeco.javacv.FFmpegFrameGrabber; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.util.Date; + +@Service +public class CourseVideoServiceImpl extends ServiceImpl + implements CourseVideoService { + + @Autowired + private UserCourseProgressService userCourseProgressService; + + @Override + public void saveVideoLearning(CourseVideo courseVideo) { + UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper() + .eq(UserCourseProgress::getUserId, courseVideo.getUserId()) + .eq(UserCourseProgress::getVideoId, courseVideo.getId())); + if (userCourseProgress == null) { + userCourseProgress = new UserCourseProgress(); + } + String progress = courseVideo.getProgress(); + int videoDuration = courseVideo.getVideoDuration(); + int progressPercentage = Integer.parseInt(progress) / videoDuration; + userCourseProgress.setCreateTime(new Date()); + userCourseProgress.setVideoId(courseVideo.getId()); + userCourseProgress.setUserId(courseVideo.getUserId()); + userCourseProgress.setProgress(progressPercentage); + userCourseProgress.setCurrentProgress(Integer.valueOf(progress)); + userCourseProgressService.saveOrUpdate(userCourseProgress); + } + + @Override + public Object getVideoLearningProgress(Long videoId, Long userId) { + UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper() + .eq(UserCourseProgress::getUserId, userId) + .eq(UserCourseProgress::getVideoId, videoId)); + if (userCourseProgress != null) { + return userCourseProgress.getCurrentProgress(); + } + return 0; + } + + @Override + public long getByteOffsetByTime(Long videoId, Long userId) { + UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper() + .eq(UserCourseProgress::getUserId, userId) + .eq(UserCourseProgress::getVideoId, videoId)); + if (userCourseProgress == null || userCourseProgress.getCurrentProgress() == null + || userCourseProgress.getCurrentProgress() <= 0) { + return 0L; + } + return userCourseProgress.getCurrentProgress(); + } +} + diff --git a/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsEntryServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsEntryServiceImpl.java new file mode 100644 index 0000000..a12d942 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsEntryServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.ExamQuestionsEntryMapper; +import apelet.association.model.ExamQuestionsEntry; +import apelet.association.service.ExamQuestionsEntryService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class ExamQuestionsEntryServiceImpl extends ServiceImpl + implements ExamQuestionsEntryService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsServiceImpl.java new file mode 100644 index 0000000..e6edf75 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.ExamQuestionsMapper; +import apelet.association.model.ExamQuestions; +import apelet.association.service.ExamQuestionsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class ExamQuestionsServiceImpl extends ServiceImpl + implements ExamQuestionsService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/ExamServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/ExamServiceImpl.java new file mode 100644 index 0000000..732ab59 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/ExamServiceImpl.java @@ -0,0 +1,20 @@ +package apelet.association.service.impl; + +import apelet.association.dao.CourseMapper; +import apelet.association.dao.ExamMapper; +import apelet.association.model.Course; +import apelet.association.model.Exam; +import apelet.association.service.CourseService; +import apelet.association.service.ExamService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class ExamServiceImpl extends ServiceImpl implements ExamService { + + + + + + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankEntryServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankEntryServiceImpl.java new file mode 100644 index 0000000..89d2a4f --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankEntryServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.QuestionBankEntryMapper; +import apelet.association.model.QuestionBankEntry; +import apelet.association.service.QuestionBankEntryService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class QuestionBankEntryServiceImpl extends ServiceImpl + implements QuestionBankEntryService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankServiceImpl.java new file mode 100644 index 0000000..e4a7717 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/QuestionBankServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.QuestionBankMapper; +import apelet.association.model.QuestionBank; +import apelet.association.service.QuestionBankService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class QuestionBankServiceImpl extends ServiceImpl + implements QuestionBankService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/UserCourseProgressServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/UserCourseProgressServiceImpl.java new file mode 100644 index 0000000..afb5d61 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/UserCourseProgressServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.UserCourseProgressMapper; +import apelet.association.model.UserCourseProgress; +import apelet.association.service.UserCourseProgressService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class UserCourseProgressServiceImpl extends ServiceImpl + implements UserCourseProgressService { + +} diff --git a/common/common-association/src/main/java/apelet/association/service/impl/UserExerciseServiceImpl.java b/common/common-association/src/main/java/apelet/association/service/impl/UserExerciseServiceImpl.java new file mode 100644 index 0000000..53a693f --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/service/impl/UserExerciseServiceImpl.java @@ -0,0 +1,13 @@ +package apelet.association.service.impl; + +import apelet.association.dao.UserExerciseMapper; +import apelet.association.model.UserExercise; +import apelet.association.service.UserExerciseService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class UserExerciseServiceImpl extends ServiceImpl + implements UserExerciseService { + +} diff --git a/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java b/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java index 31fe821..3098e7c 100644 --- a/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java +++ b/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java @@ -18,18 +18,17 @@ import java.util.Date; @Component public class UserRenewalReminderTask { - @Autowired - OrmGenDataSourceUtil ormGenDataSourceUtil; - // 提前 30 天提醒 private static final int REMIND_BEFORE_DAYS = 30; // 会员年度天数(固定 365) private static final int YEAR_DAYS = 365; + @Autowired + private OrmGenDataSourceUtil ormGenDataSourceUtil; @Scheduled(cron = "0 0 1 * * ?") - public void sendRemind(){ + public void sendRemind() { ObjectCollection collection = ormGenDataSourceUtil.query("membership_apply", new Filter(), new Selector()); - if(collection == null){ + if (collection == null) { return; } for (int i = 0; i < collection.size(); i++) { diff --git a/common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java b/common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java index ccb8544..9b9e920 100644 --- a/common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java +++ b/common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java @@ -10,18 +10,18 @@ import java.util.Map; public class DataTransformationUtil { - public static List> objectCollectionToList(ObjectCollection oc) { + public static List> objectCollectionToList(ObjectCollection oc) { - List> list = new ArrayList<>(); - if(oc == null || oc.isEmpty()){ - return list; - } - for (int i = 0; i < oc.size(); i++) { - ObjectValue object = oc.getObject(i); - JSONObject jsonObject = new JSONObject(object.getValues()); - list.add(jsonObject); - } - return list; - } + List> list = new ArrayList<>(); + if (oc == null || oc.isEmpty()) { + return list; + } + for (int i = 0; i < oc.size(); i++) { + ObjectValue object = oc.getObject(i); + JSONObject jsonObject = new JSONObject(object.getValues()); + list.add(jsonObject); + } + return list; + } } diff --git a/common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java b/common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java index db6f8a1..d629927 100644 --- a/common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java +++ b/common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java @@ -7,7 +7,6 @@ import apelet.common.online.config.OnlineProperties; import apelet.common.online.model.OnlineColumn; import apelet.common.online.model.OnlineTable; import apelet.common.online.model.constant.FieldKind; - import liquibase.util.BooleanUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -26,16 +25,6 @@ public class MyFileUtil { @Autowired private OnlineProperties onlineProperties; - - public UploadResponseInfo uploadMyFile(OnlineTable table, String fieldName, Boolean asImg, MultipartFile multipartFile) throws IOException { - ResponseResult verifyResult = this.doVerifyUpDownloadFileColumn(table, fieldName, asImg); - OnlineColumn uploadColumn = verifyResult.getData(); - UploadStoreTypeEnum uploadStoreType = UploadStoreTypeEnum.values()[uploadColumn.getUploadFileSystemType()]; - BaseUpDownloader upDownloader = upDownloaderFactory.get(uploadStoreType); - return upDownloader.doUpload(null, onlineProperties.getUploadFileBaseDir(), table.getModelName(), fieldName, asImg, multipartFile); - } - - public static MultipartFile createMultipartFile(String filePath, String fileName) { Path path = Paths.get(filePath); return new MultipartFile() { @@ -89,7 +78,6 @@ public class MyFileUtil { }; } - public static void saveFileToLocal(byte[] qrCodeByte, String savePath, String fileName) throws IOException { // 1. 创建文件夹 File folder = new File(savePath); @@ -110,6 +98,35 @@ public class MyFileUtil { } } + public static File writeToFile(byte[] qrBytes, String dirPath, String fileName) throws IOException { + Path dir = Paths.get(dirPath); + if (!Files.exists(dir)) { + Files.createDirectories(dir); + } + Path filePath = dir.resolve(fileName); + try (FileOutputStream fos = new FileOutputStream(filePath.toFile())) { + fos.write(qrBytes); + } + return filePath.toFile(); + } + + public static MultipartFile readFileAsMultipartFile(File file, String contentType) throws IOException { + return new CustomMultipartFile(file, contentType); + } + + // ==================== 步骤3:获取 InputStream ==================== + public static InputStream getInputStream(MultipartFile multipartFile) throws IOException { + return multipartFile.getInputStream(); + } + + public UploadResponseInfo uploadMyFile(OnlineTable table, String fieldName, Boolean asImg, MultipartFile multipartFile) throws IOException { + ResponseResult verifyResult = this.doVerifyUpDownloadFileColumn(table, fieldName, asImg); + OnlineColumn uploadColumn = verifyResult.getData(); + UploadStoreTypeEnum uploadStoreType = UploadStoreTypeEnum.values()[uploadColumn.getUploadFileSystemType()]; + BaseUpDownloader upDownloader = upDownloaderFactory.get(uploadStoreType); + return upDownloader.doUpload(null, onlineProperties.getUploadFileBaseDir(), table.getModelName(), fieldName, asImg, multipartFile); + } + private ResponseResult doVerifyUpDownloadFileColumn( OnlineTable table, String fieldName, Boolean asImage) { OnlineColumn column = null; @@ -134,29 +151,6 @@ public class MyFileUtil { return ResponseResult.success(column); } - - public static File writeToFile(byte[] qrBytes, String dirPath, String fileName) throws IOException { - Path dir = Paths.get(dirPath); - if (!Files.exists(dir)) { - Files.createDirectories(dir); - } - Path filePath = dir.resolve(fileName); - try (FileOutputStream fos = new FileOutputStream(filePath.toFile())) { - fos.write(qrBytes); - } - return filePath.toFile(); - } - - - public static MultipartFile readFileAsMultipartFile(File file, String contentType) throws IOException { - return new CustomMultipartFile(file, contentType); - } - - // ==================== 步骤3:获取 InputStream ==================== - public static InputStream getInputStream(MultipartFile multipartFile) throws IOException { - return multipartFile.getInputStream(); - } - // ==================== 自定义 MultipartFile 实现 ==================== public static class CustomMultipartFile implements MultipartFile { diff --git a/common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java b/common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java index c1dd83c..715d242 100644 --- a/common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java +++ b/common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java @@ -1,5 +1,6 @@ package apelet.association.utils; +import apelet.common.core.exception.MyRuntimeException; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; @@ -14,7 +15,6 @@ import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @@ -49,17 +49,17 @@ public class QRCodeUtil { } catch (Exception e) { e.printStackTrace(); - throw new RuntimeException("生成二维码失败"); + throw new MyRuntimeException("生成二维码失败"); } } - /** * 生成二维码字节流(可直接返回给前端) + * * @param content 二维码内容:即你的网页 URL - * @param width 宽度 - * @param height 高度 + * @param width 宽度 + * @param height 高度 * @return 图片字节数组 */ public byte[] generateQrCode(String content, int width, int height) throws Exception { @@ -71,8 +71,8 @@ public class QRCodeUtil { QRCodeWriter writer = new QRCodeWriter(); var bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write(image, "PNG", baos); - return baos.toByteArray(); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ImageIO.write(image, "PNG", byteArrayOutputStream); + return byteArrayOutputStream.toByteArray(); } } \ No newline at end of file diff --git a/common/common-association/src/main/java/apelet/association/utils/VideoCvUtil.java b/common/common-association/src/main/java/apelet/association/utils/VideoCvUtil.java new file mode 100644 index 0000000..93092f4 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/utils/VideoCvUtil.java @@ -0,0 +1,126 @@ +package apelet.association.utils; + +import apelet.association.vo.VideoMeta; +import org.bytedeco.javacv.FFmpegFrameGrabber; +import org.bytedeco.javacv.Frame; +import org.bytedeco.javacv.Java2DFrameConverter; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; + +public class VideoCvUtil { + + + /** + * 获取视频元信息 + * + * @param videoPath 本地视频绝对路径 + */ + public static VideoMeta getVideoMeta(String videoPath) throws Exception { + // Create a File object from the provided video path + File videoFile = new File(videoPath); + if (!videoFile.exists()) { + throw new IllegalArgumentException("视频文件不存在"); + } + FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile); + try { + grabber.start(); + VideoMeta meta = new VideoMeta(); + meta.setWidth(grabber.getImageWidth()); + meta.setHeight(grabber.getImageHeight()); + // 总时长:微秒 → 秒 + meta.setDuration(grabber.getLengthInTime() / 1000000.0); + meta.setFrameRate(grabber.getFrameRate()); + // 旋转角度 + meta.setRotate((int) grabber.getDisplayRotation()); + return meta; + } finally { + closeGrabber(grabber); + } + } + + /** + * 视频截图 + * + * @param videoPath 视频路径 + * @param outputImagePath 输出图片路径 + * @param seekSecond 在第几秒截取 + * @return 是否截图成功 + */ + public static boolean captureImage(String videoPath, String outputImagePath, double seekSecond) { + FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoPath); + Java2DFrameConverter converter = new Java2DFrameConverter(); + try { + grabber.start(); + // 定位到指定时间(微秒) + grabber.setTimestamp((long) (seekSecond * 1000000)); + Frame frame = grabber.grabFrame(); + if (frame == null || frame.image == null) { + return false; + } + BufferedImage bufferedImage = converter.convert(frame); + // 处理视频旋转(手机竖拍视频画面颠倒) + bufferedImage = rotateImage(bufferedImage, (int) grabber.getDisplayRotation()); + ImageIO.write(bufferedImage, "jpg", new File(outputImagePath)); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + closeGrabber(grabber); + } + // converter 无需手动关闭 + } + + /** + * 关闭资源,防止文件句柄泄露 + */ + private static void closeGrabber(FFmpegFrameGrabber grabber) { + if (grabber != null) { + try { + grabber.stop(); + grabber.close(); + } catch (Exception ignored) { + } + } + } + + /** + * 根据旋转角度修正图片 + */ + private static BufferedImage rotateImage(BufferedImage src, int rotate) { + if (rotate == 0) { + return src; + } + int w = src.getWidth(); + int h = src.getHeight(); + java.awt.geom.AffineTransform transform = new java.awt.geom.AffineTransform(); + switch (rotate) { + case 90: + transform.translate(h, 0); + transform.rotate(Math.PI / 2); + return createRotatedImage(src, transform, h, w); + case 180: + transform.translate(w, h); + transform.rotate(Math.PI); + return createRotatedImage(src, transform, w, h); + case 270: + transform.translate(0, w); + transform.rotate(-Math.PI / 2); + return createRotatedImage(src, transform, h, w); + default: + return src; + } + } + + private static BufferedImage createRotatedImage(BufferedImage src, java.awt.geom.AffineTransform transform, int width, int height) { + BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); + java.awt.Graphics2D g2d = dest.createGraphics(); + g2d.drawImage(src, transform, null); + g2d.dispose(); + return dest; + } + + +} diff --git a/common/common-association/src/main/java/apelet/association/vo/VideoMeta.java b/common/common-association/src/main/java/apelet/association/vo/VideoMeta.java new file mode 100644 index 0000000..b3f90d0 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/vo/VideoMeta.java @@ -0,0 +1,19 @@ +package apelet.association.vo; + +import lombok.Data; + +@Data +public class VideoMeta { + + /** 视频宽度 */ + private Integer width; + /** 视频高度 */ + private Integer height; + /** 总时长(秒,保留小数) */ + private Double duration; + /** 帧率 */ + private Double frameRate; + /** 视频旋转角度(部分手机拍摄视频存在旋转) */ + private Integer rotate; + +}