2 weeks ago
parent
commit
becd90b006
  1. 5
      application-tenant/tenant-admin/pom.xml
  2. 3
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java
  3. 1
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java
  4. 3
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java
  5. 1
      application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java
  6. 16
      application-tenant/tenant-admin/src/main/resources/application-config.yml
  7. 2
      application-tenant/tenant-admin/src/main/resources/bootstrap.yml
  8. 12
      application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml
  9. 8
      common/common-association/pom.xml
  10. 4
      common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java
  11. 171
      common/common-association/src/main/java/apelet/association/controller/CourseController.java
  12. 183
      common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java
  13. 8
      common/common-association/src/main/java/apelet/association/dao/CourseCoursewareMapper.java
  14. 7
      common/common-association/src/main/java/apelet/association/dao/CourseMapper.java
  15. 8
      common/common-association/src/main/java/apelet/association/dao/CourseVideoMapper.java
  16. 8
      common/common-association/src/main/java/apelet/association/dao/ExamMapper.java
  17. 8
      common/common-association/src/main/java/apelet/association/dao/ExamQuestionsEntryMapper.java
  18. 8
      common/common-association/src/main/java/apelet/association/dao/ExamQuestionsMapper.java
  19. 8
      common/common-association/src/main/java/apelet/association/dao/QuestionBankEntryMapper.java
  20. 8
      common/common-association/src/main/java/apelet/association/dao/QuestionBankMapper.java
  21. 8
      common/common-association/src/main/java/apelet/association/dao/UserCourseProgressMapper.java
  22. 8
      common/common-association/src/main/java/apelet/association/dao/UserExerciseMapper.java
  23. 10
      common/common-association/src/main/java/apelet/association/dto/QuestionBankDto.java
  24. 24
      common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java
  25. 224
      common/common-association/src/main/java/apelet/association/model/Course.java
  26. 131
      common/common-association/src/main/java/apelet/association/model/CourseCourseware.java
  27. 180
      common/common-association/src/main/java/apelet/association/model/CourseVideo.java
  28. 175
      common/common-association/src/main/java/apelet/association/model/Exam.java
  29. 81
      common/common-association/src/main/java/apelet/association/model/ExamQuestions.java
  30. 53
      common/common-association/src/main/java/apelet/association/model/ExamQuestionsEntry.java
  31. 77
      common/common-association/src/main/java/apelet/association/model/QuestionBank.java
  32. 56
      common/common-association/src/main/java/apelet/association/model/QuestionBankEntry.java
  33. 109
      common/common-association/src/main/java/apelet/association/model/UserCourseProgress.java
  34. 93
      common/common-association/src/main/java/apelet/association/model/UserExercise.java
  35. 2
      common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java
  36. 2
      common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java
  37. 38
      common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java
  38. 6
      common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java
  39. 39
      common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java
  40. 10
      common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java
  41. 38
      common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java
  42. 28
      common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java
  43. 30
      common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java
  44. 16
      common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java
  45. 23
      common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java
  46. 11
      common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java
  47. 6
      common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java
  48. 10
      common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java
  49. 22
      common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java
  50. 13
      common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java
  51. 22
      common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java
  52. 22
      common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java
  53. 30
      common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java
  54. 23
      common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java
  55. 89
      common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java
  56. 9
      common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java
  57. 23
      common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java
  58. 22
      common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java
  59. 6
      common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java
  60. 4
      common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java
  61. 10
      common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java
  62. 41
      common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java
  63. 66
      common/common-association/src/main/java/apelet/association/plugin/question/DoPracticeProblemsSavePlugin.java
  64. 74
      common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java
  65. 20
      common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java
  66. 4
      common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java
  67. 8
      common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java
  68. 6
      common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java
  69. 65
      common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java
  70. 22
      common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java
  71. 23
      common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java
  72. 22
      common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java
  73. 25
      common/common-association/src/main/java/apelet/association/service/CourseCoursewareService.java
  74. 11
      common/common-association/src/main/java/apelet/association/service/CourseService.java
  75. 29
      common/common-association/src/main/java/apelet/association/service/CourseVideoService.java
  76. 9
      common/common-association/src/main/java/apelet/association/service/ExamQuestionsEntryService.java
  77. 9
      common/common-association/src/main/java/apelet/association/service/ExamQuestionsService.java
  78. 10
      common/common-association/src/main/java/apelet/association/service/ExamService.java
  79. 9
      common/common-association/src/main/java/apelet/association/service/QuestionBankEntryService.java
  80. 9
      common/common-association/src/main/java/apelet/association/service/QuestionBankService.java
  81. 9
      common/common-association/src/main/java/apelet/association/service/UserCourseProgressService.java
  82. 9
      common/common-association/src/main/java/apelet/association/service/UserExerciseService.java
  83. 57
      common/common-association/src/main/java/apelet/association/service/impl/CourseCoursewareServiceImpl.java
  84. 21
      common/common-association/src/main/java/apelet/association/service/impl/CourseServiceImpl.java
  85. 70
      common/common-association/src/main/java/apelet/association/service/impl/CourseVideoServiceImpl.java
  86. 13
      common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsEntryServiceImpl.java
  87. 13
      common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsServiceImpl.java
  88. 20
      common/common-association/src/main/java/apelet/association/service/impl/ExamServiceImpl.java
  89. 13
      common/common-association/src/main/java/apelet/association/service/impl/QuestionBankEntryServiceImpl.java
  90. 13
      common/common-association/src/main/java/apelet/association/service/impl/QuestionBankServiceImpl.java
  91. 13
      common/common-association/src/main/java/apelet/association/service/impl/UserCourseProgressServiceImpl.java
  92. 13
      common/common-association/src/main/java/apelet/association/service/impl/UserExerciseServiceImpl.java
  93. 9
      common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java
  94. 24
      common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java
  95. 64
      common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java
  96. 16
      common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java
  97. 126
      common/common-association/src/main/java/apelet/association/utils/VideoCvUtil.java
  98. 19
      common/common-association/src/main/java/apelet/association/vo/VideoMeta.java

5
application-tenant/tenant-admin/pom.xml

@ -149,6 +149,11 @@ @@ -149,6 +149,11 @@
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-msg-notice</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-association</artifactId>
<version>1.0.0</version>
</dependency>

3
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/TenantAdminApplication.java

@ -15,9 +15,10 @@ import org.springframework.scheduling.annotation.EnableScheduling; @@ -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) {

1
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/FilterConfig.java

@ -42,6 +42,7 @@ public class FilterConfig { @@ -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);

3
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/MultiDataSourceConfig.java

@ -21,8 +21,7 @@ import java.util.Map; @@ -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")

1
application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java

@ -1080,6 +1080,7 @@ public class LoginController { @@ -1080,6 +1080,7 @@ public class LoginController {
}
List<SysMenu> 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<String> permSet = null;

16
application-tenant/tenant-admin/src/main/resources/application-config.yml

@ -86,13 +86,13 @@ knife4j: @@ -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: @@ -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: @@ -153,7 +153,7 @@ common-redis:
lockWatchdogTimeout: 60000
# redis 密码,空可以不填。
password:
database: 0
database: 1
pool:
# 连接池数量。
poolSize: 20

2
application-tenant/tenant-admin/src/main/resources/bootstrap.yml

@ -2,7 +2,7 @@ spring: @@ -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

12
application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml

@ -5,7 +5,7 @@ logging: @@ -5,7 +5,7 @@ logging:
config: classpath:logback-spring.xml
server:
port: 8077
port: 8099
application:
# Jwt令牌加密的签名值。该值的长度要超过10个字符(过短会报错)。
@ -133,7 +133,7 @@ sequence: @@ -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: @@ -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: @@ -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

8
common/common-association/pom.xml

@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
<artifactId>javacv-platform</artifactId>
<version>1.5.13</version>
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-msg-notice</artifactId>
@ -35,6 +36,11 @@ @@ -35,6 +36,11 @@
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-aliyun-oss</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-generator</artifactId>
<version>1.0.0</version>
</dependency>
@ -63,6 +69,8 @@ @@ -63,6 +69,8 @@
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>

4
common/common-association/src/main/java/apelet/association/controller/AssociationActivitiesController.java

@ -14,7 +14,9 @@ import org.apache.commons.lang3.StringUtils; @@ -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

171
common/common-association/src/main/java/apelet/association/controller/CourseController.java

@ -0,0 +1,171 @@ @@ -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();
}
}

183
common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java

@ -0,0 +1,183 @@ @@ -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<String, Object> 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<String> 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<Map<String, Object>> 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<String, Object> 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<Map<String, Object>> 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<String, Object> result = new HashMap<>();
Exam exam = examService.getById(id);
result.put("exam", exam);
Long questionBankId = exam.getQuestionBankId();
// 题库
List<QuestionBankEntry> questionBankEntryList = questionBankEntryService.list(new LambdaQueryWrapper<QuestionBankEntry>().eq(
QuestionBankEntry::getParentId, questionBankId));
List<Long> collect = questionBankEntryList.stream().map(QuestionBankEntry::getExamQuestionsId).collect(Collectors.toList());
// 题库试题
List<ExamQuestions> examQuestionsList = examQuestionsService.list(new LambdaQueryWrapper<ExamQuestions>().in(ExamQuestions::getId, collect));
// 试题选项
List<ExamQuestionsEntry> examQuestionsEntries = examQuestionsEntryService.list(new LambdaQueryWrapper<ExamQuestionsEntry>().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();
}
}

8
common/common-association/src/main/java/apelet/association/dao/CourseCoursewareMapper.java

@ -0,0 +1,8 @@ @@ -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<CourseCourseware> {
}

7
common/common-association/src/main/java/apelet/association/dao/CourseMapper.java

@ -0,0 +1,7 @@ @@ -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<Course> {
}

8
common/common-association/src/main/java/apelet/association/dao/CourseVideoMapper.java

@ -0,0 +1,8 @@ @@ -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<CourseVideo> {
}

8
common/common-association/src/main/java/apelet/association/dao/ExamMapper.java

@ -0,0 +1,8 @@ @@ -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<Exam> {
}

8
common/common-association/src/main/java/apelet/association/dao/ExamQuestionsEntryMapper.java

@ -0,0 +1,8 @@ @@ -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<ExamQuestionsEntry> {
}

8
common/common-association/src/main/java/apelet/association/dao/ExamQuestionsMapper.java

@ -0,0 +1,8 @@ @@ -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<ExamQuestions> {
}

8
common/common-association/src/main/java/apelet/association/dao/QuestionBankEntryMapper.java

@ -0,0 +1,8 @@ @@ -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<QuestionBankEntry> {
}

8
common/common-association/src/main/java/apelet/association/dao/QuestionBankMapper.java

@ -0,0 +1,8 @@ @@ -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<QuestionBank> {
}

8
common/common-association/src/main/java/apelet/association/dao/UserCourseProgressMapper.java

@ -0,0 +1,8 @@ @@ -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<UserCourseProgress> {
}

8
common/common-association/src/main/java/apelet/association/dao/UserExerciseMapper.java

@ -0,0 +1,8 @@ @@ -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<UserExercise> {
}

10
common/common-association/src/main/java/apelet/association/dto/QuestionBankDto.java

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
package apelet.association.dto;
import apelet.association.model.QuestionBank;
import java.io.Serializable;
public class QuestionBankDto extends QuestionBank implements Serializable {
}

24
common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java

@ -0,0 +1,24 @@ @@ -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<UserExercise> userExerciseList;
}

224
common/common-association/src/main/java/apelet/association/model/Course.java

@ -0,0 +1,224 @@ @@ -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;
}

131
common/common-association/src/main/java/apelet/association/model/CourseCourseware.java

@ -0,0 +1,131 @@ @@ -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;
}

180
common/common-association/src/main/java/apelet/association/model/CourseVideo.java

@ -0,0 +1,180 @@ @@ -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;
}

175
common/common-association/src/main/java/apelet/association/model/Exam.java

@ -0,0 +1,175 @@ @@ -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;
}

81
common/common-association/src/main/java/apelet/association/model/ExamQuestions.java

@ -0,0 +1,81 @@ @@ -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<ExamQuestionsEntry> examQuestionsEntryList;
}

53
common/common-association/src/main/java/apelet/association/model/ExamQuestionsEntry.java

@ -0,0 +1,53 @@ @@ -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;
}

77
common/common-association/src/main/java/apelet/association/model/QuestionBank.java

@ -0,0 +1,77 @@ @@ -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;
}

56
common/common-association/src/main/java/apelet/association/model/QuestionBankEntry.java

@ -0,0 +1,56 @@ @@ -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;
}

109
common/common-association/src/main/java/apelet/association/model/UserCourseProgress.java

@ -0,0 +1,109 @@ @@ -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;
}

93
common/common-association/src/main/java/apelet/association/model/UserExercise.java

@ -0,0 +1,93 @@ @@ -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;
}

2
common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoUpdatePlugin.java

@ -11,7 +11,7 @@ import apelet.common.online.model.constant.AttributeEnum; @@ -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);

2
common/common-association/src/main/java/apelet/association/plugin/active/ActivitySchedulePlugin.java

@ -14,7 +14,7 @@ import apelet.common.orm.impl.Selector; @@ -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);

38
common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java

@ -3,8 +3,10 @@ package apelet.association.plugin.active; @@ -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; @@ -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; @@ -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 { @@ -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 { @@ -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 { @@ -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");

6
common/common-association/src/main/java/apelet/association/plugin/active/CompetitionActivitiesListPlugin.java

@ -22,7 +22,7 @@ import java.util.Map; @@ -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 { @@ -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 { @@ -47,7 +47,7 @@ public class CompetitionActivitiesListPlugin extends ListPlugin {
@Override
public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) {
if(widgetVariableName.equals("作品投稿")){
if (widgetVariableName.equals("作品投稿")) {
List<Map> rowDatas = getDto().getModel().getRowDatas();
if (rowDatas.size() != 1) {
showWarningMessage("请选择一条数据!!!");

39
common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java

@ -0,0 +1,39 @@ @@ -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);
}
}

10
common/common-association/src/main/java/apelet/association/plugin/active/SubmissionWorksUpdatePlugin.java

@ -9,11 +9,11 @@ import apelet.common.online.model.constant.AttributeEnum; @@ -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 { @@ -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 { @@ -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 {

38
common/common-association/src/main/java/apelet/association/plugin/businessOpportunities/BusinessSaveOpPlugin.java

@ -1,39 +1,37 @@ @@ -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 { @@ -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());
}
}
}

28
common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueActivateOpPlugin.java

@ -1,11 +1,11 @@ @@ -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; @@ -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());
}
}
}

30
common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueAuditOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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());
}
}
}

16
common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueManageFormPlugin.java

@ -1,21 +1,21 @@ @@ -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");
}
}

23
common/common-association/src/main/java/apelet/association/plugin/clueManage/ClueSubmitOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

11
common/common-association/src/main/java/apelet/association/plugin/course/courseFormPlugin.java

@ -4,16 +4,15 @@ import apelet.common.core.object.ObjectValue; @@ -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);
}
}
}

6
common/common-association/src/main/java/apelet/association/plugin/courseCourseware/CourseCoursewareFromPlugin.java

@ -4,12 +4,12 @@ import apelet.common.core.object.ObjectValue; @@ -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);
}
}
}

10
common/common-association/src/main/java/apelet/association/plugin/courseVideo/CourseVideoFormPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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) {

22
common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalFormPlugin.java

@ -1,6 +1,9 @@ @@ -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; @@ -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());
}
}
}

13
common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalListPlugin.java

@ -18,15 +18,14 @@ public class ElectronicJournalListPlugin extends ListPlugin { @@ -18,15 +18,14 @@ public class ElectronicJournalListPlugin extends ListPlugin {
OnlineEventPluginExecuteDto filter1 = this.getDto();
ArrayList<OnlineFilterDto> filterDtoList = (ArrayList<OnlineFilterDto>) 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;
}
}

22
common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOfflineOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

22
common/common-association/src/main/java/apelet/association/plugin/electronicJournal/ElectronicJournalOnlineOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

30
common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageAuditOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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; @@ -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 { @@ -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());
}
}
}

23
common/common-association/src/main/java/apelet/association/plugin/expertManage/ExpertManageSubmitOpPlugin.java

@ -1,14 +1,13 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

89
common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayFormPlugin.java

@ -1,6 +1,9 @@ @@ -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; @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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(".")) {

9
common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayListPlugin.java

@ -14,13 +14,12 @@ public class FileLibrayListPlugin extends ListPlugin { @@ -14,13 +14,12 @@ public class FileLibrayListPlugin extends ListPlugin {
OnlineEventPluginExecuteDto filter1 = this.getDto();
ArrayList<OnlineFilterDto> filterDtoList = (ArrayList<OnlineFilterDto>) 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;

23
common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOfflineOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

22
common/common-association/src/main/java/apelet/association/plugin/fileLibraryMange/FileLibrayOnlineOpPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

6
common/common-association/src/main/java/apelet/association/plugin/member/MembershipApplyListFilterPlugin.java

@ -1,14 +1,8 @@ @@ -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

4
common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java

@ -32,7 +32,7 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent { @@ -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 { @@ -48,7 +48,7 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent {
showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL);
showParameter.setStatus(ViewStatus.EDIT);
Map<String, Object> customParam = new HashMap<>();
customParam.put("id"," ");
customParam.put("id", " ");
showParameter.setCustomParam(customParam);
super.showForm(showParameter);
}

10
common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayShowHidePlugin.java

@ -18,9 +18,9 @@ public class MembershipPayShowHidePlugin extends ExecutePluginParent { @@ -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 { @@ -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);
}
}

41
common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java

@ -11,7 +11,6 @@ import apelet.common.online.model.constant.ShowTypeEnum; @@ -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; @@ -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 { @@ -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<Map> rowDatas = dto.getModel().getRowDatas();
if (rowDatas == null || rowDatas.size() != 1) {
showWarningMessage("请先在列表中选中一条单据");
@ -75,6 +74,7 @@ public class UnitNameChangePopupPlugin extends ListPlugin { @@ -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 { @@ -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<String, Object> customParam = new HashMap<>();
customParam.put("id", data.get("id"));
showParameter.setCustomParam(customParam);
super.showForm(showParameter);
}
}
@ -105,11 +115,10 @@ public class UnitNameChangePopupPlugin extends ListPlugin { @@ -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());
}

66
common/common-association/src/main/java/apelet/association/plugin/question/DoPracticeProblemsSavePlugin.java

@ -0,0 +1,66 @@ @@ -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);
}
}

74
common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java

@ -0,0 +1,74 @@ @@ -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<Map> 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<String, Object> 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);
}
}
}

20
common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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 { @@ -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);
}
}
}

4
common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java

@ -10,9 +10,9 @@ import apelet.common.orm.impl.FilterItem; @@ -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;
}
}

8
common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java

@ -33,18 +33,18 @@ public class OpenPopupPlugin extends ListPlugin { @@ -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<String,Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
// 为弹窗中的隐藏字段标识
map.put("id","");
map.put("id", "");
// 设置参数
showParameter.setCustomParam(map);
super.showForm(showParameter);

6
common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java

@ -15,16 +15,16 @@ import java.util.Map; @@ -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<String, Object> rowData = dto.getModel().getRowData();
if (rowData != null && !rowData.isEmpty()){
if (rowData != null && !rowData.isEmpty()) {
Collection<Object> 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);
}
}
}

65
common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java

@ -10,52 +10,59 @@ import apelet.common.online.model.constant.AttributeEnum; @@ -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<String, Object> 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 { @@ -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);
}
}

22
common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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; @@ -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 { @@ -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());
}
}
}

23
common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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; @@ -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 { @@ -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());
}
}
}

22
common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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());
}
}
}

25
common/common-association/src/main/java/apelet/association/service/CourseCoursewareService.java

@ -0,0 +1,25 @@ @@ -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<CourseCourseware> {
/**
* 保存课件学习记录
*
* @param courseCourseware
*/
void saveCoursewareLearning(CourseCourseware courseCourseware);
/**
* 获取课件学习进度
* @param courseId 课程ID
* @param userId 用户ID
* @return
*/
Object getCourseLearningProgress(Long courseId, Long userId);
}

11
common/common-association/src/main/java/apelet/association/service/CourseService.java

@ -0,0 +1,11 @@ @@ -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<Course> {
}

29
common/common-association/src/main/java/apelet/association/service/CourseVideoService.java

@ -0,0 +1,29 @@ @@ -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<CourseVideo> {
/**
* 保存视频学习记录
*
* @param courseVideo
*/
void saveVideoLearning(CourseVideo courseVideo);
/**
* 获取课程视频学习进度
*
* @param videoId
* @param userId
* @return
*/
Object getVideoLearningProgress(Long videoId, Long userId);
long getByteOffsetByTime(Long videoId, Long userId);
}

9
common/common-association/src/main/java/apelet/association/service/ExamQuestionsEntryService.java

@ -0,0 +1,9 @@ @@ -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<ExamQuestionsEntry> {
}

9
common/common-association/src/main/java/apelet/association/service/ExamQuestionsService.java

@ -0,0 +1,9 @@ @@ -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<ExamQuestions> {
}

10
common/common-association/src/main/java/apelet/association/service/ExamService.java

@ -0,0 +1,10 @@ @@ -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<Exam> {
}

9
common/common-association/src/main/java/apelet/association/service/QuestionBankEntryService.java

@ -0,0 +1,9 @@ @@ -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<QuestionBankEntry> {
}

9
common/common-association/src/main/java/apelet/association/service/QuestionBankService.java

@ -0,0 +1,9 @@ @@ -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<QuestionBank> {
}

9
common/common-association/src/main/java/apelet/association/service/UserCourseProgressService.java

@ -0,0 +1,9 @@ @@ -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<UserCourseProgress> {
}

9
common/common-association/src/main/java/apelet/association/service/UserExerciseService.java

@ -0,0 +1,9 @@ @@ -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<UserExercise> {
}

57
common/common-association/src/main/java/apelet/association/service/impl/CourseCoursewareServiceImpl.java

@ -0,0 +1,57 @@ @@ -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<CourseCoursewareMapper, CourseCourseware>
implements CourseCoursewareService {
@Autowired
private UserCourseProgressService userCourseProgressService;
@Override
public void saveCoursewareLearning(CourseCourseware courseCourseware) {
UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper<UserCourseProgress>()
.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<UserCourseProgress>()
.eq(UserCourseProgress::getUserId, userId)
.eq(UserCourseProgress::getCoursewareId, courseId));
if(userCourseProgress != null){
return userCourseProgress.getCurrentProgress();
}
return 0;
}
}

21
common/common-association/src/main/java/apelet/association/service/impl/CourseServiceImpl.java

@ -0,0 +1,21 @@ @@ -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<CourseMapper, Course> implements CourseService {
}

70
common/common-association/src/main/java/apelet/association/service/impl/CourseVideoServiceImpl.java

@ -0,0 +1,70 @@ @@ -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<CourseVideoMapper, CourseVideo>
implements CourseVideoService {
@Autowired
private UserCourseProgressService userCourseProgressService;
@Override
public void saveVideoLearning(CourseVideo courseVideo) {
UserCourseProgress userCourseProgress = userCourseProgressService.getOne(new LambdaQueryWrapper<UserCourseProgress>()
.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<UserCourseProgress>()
.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<UserCourseProgress>()
.eq(UserCourseProgress::getUserId, userId)
.eq(UserCourseProgress::getVideoId, videoId));
if (userCourseProgress == null || userCourseProgress.getCurrentProgress() == null
|| userCourseProgress.getCurrentProgress() <= 0) {
return 0L;
}
return userCourseProgress.getCurrentProgress();
}
}

13
common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsEntryServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<ExamQuestionsEntryMapper, ExamQuestionsEntry>
implements ExamQuestionsEntryService {
}

13
common/common-association/src/main/java/apelet/association/service/impl/ExamQuestionsServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<ExamQuestionsMapper, ExamQuestions>
implements ExamQuestionsService {
}

20
common/common-association/src/main/java/apelet/association/service/impl/ExamServiceImpl.java

@ -0,0 +1,20 @@ @@ -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<ExamMapper, Exam> implements ExamService {
}

13
common/common-association/src/main/java/apelet/association/service/impl/QuestionBankEntryServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<QuestionBankEntryMapper, QuestionBankEntry>
implements QuestionBankEntryService {
}

13
common/common-association/src/main/java/apelet/association/service/impl/QuestionBankServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<QuestionBankMapper, QuestionBank>
implements QuestionBankService {
}

13
common/common-association/src/main/java/apelet/association/service/impl/UserCourseProgressServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<UserCourseProgressMapper, UserCourseProgress>
implements UserCourseProgressService {
}

13
common/common-association/src/main/java/apelet/association/service/impl/UserExerciseServiceImpl.java

@ -0,0 +1,13 @@ @@ -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<UserExerciseMapper, UserExercise>
implements UserExerciseService {
}

9
common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java

@ -18,18 +18,17 @@ import java.util.Date; @@ -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++) {

24
common/common-association/src/main/java/apelet/association/utils/DataTransformationUtil.java

@ -10,18 +10,18 @@ import java.util.Map; @@ -10,18 +10,18 @@ import java.util.Map;
public class DataTransformationUtil {
public static List<Map<String, Object>> objectCollectionToList(ObjectCollection oc) {
public static List<Map<String, Object>> objectCollectionToList(ObjectCollection oc) {
List<Map<String, Object>> 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<Map<String, Object>> 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;
}
}

64
common/common-association/src/main/java/apelet/association/utils/MyFileUtil.java

@ -7,7 +7,6 @@ import apelet.common.online.config.OnlineProperties; @@ -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 { @@ -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<OnlineColumn> 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 { @@ -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 { @@ -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<OnlineColumn> 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<OnlineColumn> doVerifyUpDownloadFileColumn(
OnlineTable table, String fieldName, Boolean asImage) {
OnlineColumn column = null;
@ -134,29 +151,6 @@ public class MyFileUtil { @@ -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 {

16
common/common-association/src/main/java/apelet/association/utils/QRCodeUtil.java

@ -1,5 +1,6 @@ @@ -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; @@ -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 { @@ -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 { @@ -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();
}
}

126
common/common-association/src/main/java/apelet/association/utils/VideoCvUtil.java

@ -0,0 +1,126 @@ @@ -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;
}
}

19
common/common-association/src/main/java/apelet/association/vo/VideoMeta.java

@ -0,0 +1,19 @@ @@ -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;
}
Loading…
Cancel
Save