From 37a31d6f4c68e06feb2fc875fe4dc3be761c6d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BD=8A?= <23> Date: Thu, 13 Aug 2026 11:14:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application-tenant/tenant-admin/pom.xml | 4 +- .../java/apelet/tenantadmin/config/CorsConfig.java | 16 +++ .../upms/controller/LoginController.java | 30 ++---- .../src/main/resources/application-config.yml | 2 +- .../src/main/resources/tenant-admin-dev.yml | 8 +- common/common-association/pom.xml | 6 +- .../apelet/association/config/FrontendConfig.java | 16 +++ .../controller/DoPracticeProblemsController.java | 21 +++- .../association/controller/HomeController.java | 71 +++++++++++++ .../apelet/association/dto/UserExerciseDto.java | 12 +-- .../plugin/active/ActivityInfoDetailsPlugin.java | 110 +++++++++++++++++++++ .../active/ActivityRegistrationSavePlugin.java | 15 +++ .../active/ActivityRegistrationUpdatePlugin.java | 98 ++++++++++++++++++ .../plugin/active/ActivitySignConfigPlugin.java | 16 +-- .../plugin/active/CompetitionDetailsPlugin.java | 7 +- .../plugin/member/MembershipFeePayPlugin.java | 72 ++++++++++++++ .../plugin/member/MembershipPayPopupPlugin.java | 29 +++--- .../plugin/member/UnitNameChangePopupPlugin.java | 25 +++++ .../plugin/question/QuestionBankListPlugin.java | 6 +- .../task/ContractPaymentReminderTask.java | 30 ++++++ .../association/task/UserRenewalReminderTask.java | 68 ++++++------- common/common-qy/pom.xml | 4 +- pom.xml | 2 +- 23 files changed, 559 insertions(+), 109 deletions(-) create mode 100644 application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/CorsConfig.java create mode 100644 common/common-association/src/main/java/apelet/association/config/FrontendConfig.java create mode 100644 common/common-association/src/main/java/apelet/association/controller/HomeController.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoDetailsPlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationSavePlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationUpdatePlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/plugin/member/MembershipFeePayPlugin.java create mode 100644 common/common-association/src/main/java/apelet/association/task/ContractPaymentReminderTask.java diff --git a/application-tenant/tenant-admin/pom.xml b/application-tenant/tenant-admin/pom.xml index eb54156..b2ab632 100644 --- a/application-tenant/tenant-admin/pom.xml +++ b/application-tenant/tenant-admin/pom.xml @@ -84,7 +84,7 @@ apelet common-online - 1.0.0 + 1.0.3 apelet @@ -140,7 +140,7 @@ apelet common-orm - 1.0.0 + 1.0.2 apelet diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/CorsConfig.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/CorsConfig.java new file mode 100644 index 0000000..0fc7bd5 --- /dev/null +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/config/CorsConfig.java @@ -0,0 +1,16 @@ +package apelet.tenantadmin.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") // 允许所有源 + .allowedMethods("*") // 允许所有请求方法 + .allowedHeaders("*"); // 允许所有请求头 + } +} diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java index 9516e0e..970b03b 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/LoginController.java @@ -1144,33 +1144,15 @@ public class LoginController { String sessionId = user.getLoginName() + "_" + deviceType + "_" + MyCommonUtil.generateUuid(); JSONObject jsonData = this.createResponseData(user, sessionId); TokenData tokenData = this.buildTokenData(user, sessionId, deviceType); - String zwcjName = null; - try { - String result = (String)EasUtil.executeOsfServiceWs("com.kingdee.shr.custom.plat.osf.service.GetPersonalDataService" - ,user.getLoginName(),new HashMap()); - JSONObject personData = JSONObject.parseObject(result); - tokenData.setPersonId((String) personData.get("personId")); - jsonData.put("personData", JSONObject.parseObject(result)); - zwcjName = (String)personData.get("zwcjName"); - }catch(Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } this.putTokenDataToSessionCache(tokenData); // 这里手动将TokenData存入request,便于OperationLogAspect统一处理操作日志。 TokenData.addToRequest(tokenData); List mobileEntryList; - String roleId = getShrRole(zwcjName); - if(!StringUtils.isEmpty(roleId)){ - mobileEntryList = mobileEntryService.getMobileEntryListByRoleIds(roleId); - }else{ - if (isAdmin) { - mobileEntryList = mobileEntryService.getAllListByOrder(SHOW_ORDER_FIELD); - } else { - mobileEntryList = mobileEntryService.getMobileEntryListByRoleIds(tokenData.getRoleIds()); - } + if (isAdmin) { + mobileEntryList = mobileEntryService.getAllListByOrder(SHOW_ORDER_FIELD); + } else { + mobileEntryList = mobileEntryService.getMobileEntryListByRoleIds(tokenData.getRoleIds()); } - jsonData.put("mobileEntryList", mobileEntryList); Set permSet = new HashSet<>(); if (!isAdmin) { @@ -1205,8 +1187,6 @@ public class LoginController { sysPermService.putUserSysPermCache(sessionId, user.getUserId(), permSet); sysDataPermService.putDataPermCache(sessionId, user.getUserId(), user.getDeptId()); } - - return jsonData; } @@ -1552,4 +1532,6 @@ public class LoginController { private List permCodeList; private List permList; } + + } diff --git a/application-tenant/tenant-admin/src/main/resources/application-config.yml b/application-tenant/tenant-admin/src/main/resources/application-config.yml index f753b89..f0748e1 100644 --- a/application-tenant/tenant-admin/src/main/resources/application-config.yml +++ b/application-tenant/tenant-admin/src/main/resources/application-config.yml @@ -92,7 +92,7 @@ aliyun: accessKey: LTAI5t5fEgzRRtdmBvczVS6r secretKey: uESFiyyi6EwCkM5w4a4pbx6TmVhqgx bucketName: yy-test12 - + nginxOssUrl: minio: enabled: false diff --git a/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml b/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml index d622b1e..0ff9796 100644 --- a/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml +++ b/application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml @@ -218,9 +218,9 @@ spring: password: X7&9p8L2@6z4K7!8 driverClassName: com.mysql.cj.jdbc.Driver name: tenant-admin - initialSize: 10 - minIdle: 10 - maxActive: 50 + initialSize: 5 + minIdle: 5 + maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 @@ -229,7 +229,7 @@ spring: maxOpenPreparedStatements: 20 validationQuery: SELECT 'x' testWhileIdle: true - testOnBorrow: false + testOnBorrow: true testOnReturn: false connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 filters: stat,wall diff --git a/common/common-association/pom.xml b/common/common-association/pom.xml index 8740d9b..e97366e 100644 --- a/common/common-association/pom.xml +++ b/common/common-association/pom.xml @@ -42,17 +42,17 @@ apelet common-generator - 1.0.0 + 1.0.2 apelet common-online - 1.0.0 + 1.0.3 common-orm apelet - 1.0.0 + 1.0.2 common-msg-notice diff --git a/common/common-association/src/main/java/apelet/association/config/FrontendConfig.java b/common/common-association/src/main/java/apelet/association/config/FrontendConfig.java new file mode 100644 index 0000000..74b3a6e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/config/FrontendConfig.java @@ -0,0 +1,16 @@ +package apelet.association.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Data +public class FrontendConfig { + +// @Value("${frontend.address}") + public String address; + + +} + diff --git a/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java b/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java index 4b73ddd..03412dc 100644 --- a/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java +++ b/common/common-association/src/main/java/apelet/association/controller/DoPracticeProblemsController.java @@ -74,8 +74,10 @@ public class DoPracticeProblemsController { long batchNumber = IdUtil.getSnowflakeNextId(); result.put("batchNumber", batchNumber); - collection.forEach(f -> { - ObjectValue examQuestions = f.getObjectValue("exam_questions_id"); + for (int i = 0; i < collection.size(); i++) { + ObjectValue object = collection.getObject(i); + + ObjectValue examQuestions = object.getObjectValue("exam_questions_id"); list.add(examQuestions.getString("id")); ObjectValue userExercise = new ObjectValue("user_exercise"); @@ -92,7 +94,9 @@ public class DoPracticeProblemsController { } catch (Exception e) { throw new RuntimeException(e); } - }); + + } + List> examQuestionsList = new ArrayList<>(); result.put("examQuestionsList", examQuestionsList); @@ -101,7 +105,9 @@ public class DoPracticeProblemsController { 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) { + for (int i = 0; i < examQuestions.size(); i++) { + ObjectValue examQuestion = examQuestions.getObject(i); + Map hashMap = new HashMap<>(); hashMap.put("id", examQuestion.getString("id")); hashMap.put("no", no); @@ -118,11 +124,16 @@ public class DoPracticeProblemsController { hashMap.put("difficulty", examQuestion.getString("difficulty")); ObjectCollection examQuestionsEntry = examQuestion.getObjectCollection("exam_questions_entry"); List> option = new ArrayList<>(); - examQuestionsEntry.forEach(f -> option.add(f.getValues())); + for (int i1 = 0; i1 < examQuestionsEntry.size(); i1++) { + ObjectValue object = examQuestionsEntry.getObject(i1); + option.add(object.getValues()); + } hashMap.put("options", option); examQuestionsList.add(hashMap); no++; + } + return ResponseResult.success(result); } diff --git a/common/common-association/src/main/java/apelet/association/controller/HomeController.java b/common/common-association/src/main/java/apelet/association/controller/HomeController.java new file mode 100644 index 0000000..794bb3b --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/controller/HomeController.java @@ -0,0 +1,71 @@ +package apelet.association.controller; + +import apelet.common.core.object.ObjectCollection; +import apelet.common.core.object.ResponseResult; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + + +/** + * 课程管理 + */ +@RestController +@RequestMapping("/tenantadmin/home") +public class HomeController { + + @Autowired + private OrmGenDataSourceUtil ormGenDataSourceUtil; + + @PostMapping("/homeData") + public ResponseResult homeData() { + HashMap map = new HashMap<>(); + //报名审核 + map.put("ApplicationReview", 0); + + //会费逾期 + ObjectCollection feePay = ormGenDataSourceUtil.query("membership_fee_pay", new Filter(), new Selector()); + ArrayList objects = new ArrayList<>(); + for (int i = 0; i < feePay.size(); i++) { + objects.add(feePay.getObject(i).getValues()); + } + Map> parentMap = objects.stream().collect(Collectors.groupingBy(m -> m.get("parent_id"))); + AtomicInteger OverdueMembershipFees = new AtomicInteger(); + parentMap.forEach((k, v) -> { + // 是否存在任意一条 end_time > 当前时间 + boolean anyAfterNow = v.stream() + .anyMatch(m2 -> { + Object endTimeObj = m2.get("end_time"); + if(endTimeObj == null){ + return false; + } + Date endTime = (Date) endTimeObj; + // end_time > 当前时间 + return endTime.after(new Date()); + }); + if(anyAfterNow){ + OverdueMembershipFees.getAndIncrement(); + } + + }); + map.put("OverdueMembershipFees", OverdueMembershipFees.get()); + + + // 入会申请 + Filter filter = new Filter(); + filter.add(new FilterItem("billstatus", FilterItem.not_equals, "C")); + ObjectCollection membershipApply = ormGenDataSourceUtil.query("membership_apply", filter, new Selector()); + map.put("MembershipApplication", membershipApply.size()); + + return ResponseResult.success(map); + } + + +} diff --git a/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java b/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java index 816a5ae..812ed28 100644 --- a/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java +++ b/common/common-association/src/main/java/apelet/association/dto/UserExerciseDto.java @@ -1,19 +1,19 @@ package apelet.association.dto; -import apelet.association.model.UserExercise; +import apelet.association.model.*; import lombok.Data; import org.flowable.spring.security.UserDto; import java.util.List; @Data -public class UserExerciseDto { +public class UserExerciseDto extends ExamQuestions { - // 考试id - Long examId; + // 考试 + Exam exam; - // 题库id - Long questionBankId; + // 题库 + QuestionBank questionBank; // 答题用户id Long userId; diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoDetailsPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoDetailsPlugin.java new file mode 100644 index 0000000..e3736ec --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityInfoDetailsPlugin.java @@ -0,0 +1,110 @@ +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.ObjectValue; +import apelet.common.core.upload.UploadResponseInfo; +import apelet.common.core.util.ApplicationContextHolder; +import apelet.common.core.util.RsaUtil; +import apelet.common.generator.utils.OrmGenDataSourceUtil; +import apelet.common.online.abstractplugin.ListPlugin; +import apelet.common.online.dto.OnlineEventPluginExecuteDto; +import apelet.common.online.model.OnlineDatasource; +import apelet.common.online.model.OnlineTable; +import apelet.common.online.model.constant.AttributeEnum; +import apelet.common.online.service.OnlineDatasourceService; +import apelet.common.online.service.OnlineTableService; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import apelet.common.orm.impl.SelectorItem; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * 活动详情 + */ +public class ActivityInfoDetailsPlugin extends ListPlugin { + + + private final OrmGenDataSourceUtil ormGenDataSourceUtil; + private final MyFileUtil myFileUtil; + private final QRCodeUtil qrCodeUtil; + private final OnlineDatasourceService onlineDatasourceService; + private final OnlineTableService onlineTableService; + + + public ActivityInfoDetailsPlugin() { + myFileUtil = ApplicationContextHolder.getBean(MyFileUtil.class); + qrCodeUtil = ApplicationContextHolder.getBean(QRCodeUtil.class); + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + onlineDatasourceService = ApplicationContextHolder.getBean(OnlineDatasourceService.class); + onlineTableService = ApplicationContextHolder.getBean(OnlineTableService.class); + } + + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + this.setWidgetAttribute("id", AttributeEnum.SHOW, false); + + } + + @Override + public void change(String widgetVariableName, ObjectValue objectValue) { + + } + + @Override + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { + if (widgetVariableName.equals("button1786587153460")) { + String registrationQr = objectValue.getString("registration_qr"); + if(StringUtils.isNotEmpty(registrationQr)){ + this.showErrorMessage("当前已存在报名二维码, 请勿重复生成!!!"); + return; + } + OnlineEventPluginExecuteDto dto = getDto(); + String savePath = System.getProperty("user.dir") + "\\zz-resource\\qrcode"; + File QRFile = null; + try { + OnlineDatasource onlineDatasource = onlineDatasourceService.getById(dto.getModel().getDatasourceId()); + OnlineTable table = onlineTableService.getOnlineTableFromCache(onlineDatasource.getMasterTableId()); + // 生成 报名二维码 + long id = objectValue.getLong("id"); + + String url = "http://58.48.135.5:8069" + "/#/?" + + "loginName=" + "admin" + + "&password=" + "123456" + + "&entryId=" + "2087413611113746432" + + "&bindType=" + "1" + + "&onlineFormId=" + "2087385700075835392" + + "&activeId=" + id; + + byte[] checkInQr = qrCodeUtil.generateQrCode(url, 350, 350); + QRFile = MyFileUtil.writeToFile(checkInQr, savePath, "qrcode-" + System.currentTimeMillis() + ".png"); + MultipartFile checkInMultipart = MyFileUtil.readFileAsMultipartFile(QRFile, "image/png"); + UploadResponseInfo registrationQR = myFileUtil.uploadMyFile(table, "registration_qr", true, checkInMultipart); + this.setWidgetAttribute("registrationQr", AttributeEnum.VALUE_CHANGE, registrationQR); + + objectValue.put("registration_qr", "["+new JSONObject(BeanUtil.beanToMap(registrationQR)).toJSONString()+"]"); + Selector selector = new Selector(); + selector.getList().add(new SelectorItem("registration_qr")); + ormGenDataSourceUtil.update(objectValue.getTableName(), objectValue, selector); + + } catch (Exception e) { + throw new MyRuntimeException(e.getMessage()); + } finally { + QRFile.delete(); + } + + + } + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationSavePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationSavePlugin.java new file mode 100644 index 0000000..3999fc7 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationSavePlugin.java @@ -0,0 +1,15 @@ +package apelet.association.plugin.active; + +import apelet.common.core.object.ObjectValue; +import apelet.common.online.plugin.EndOperationTransactionArgs; +import apelet.common.online.plugin.OperationServicePlugIn; + +public class ActivityRegistrationSavePlugin extends OperationServicePlugIn { + + + @Override + public void endOperationTransaction(EndOperationTransactionArgs e) { + ObjectValue objectValue = e.getModel(); + + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationUpdatePlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationUpdatePlugin.java new file mode 100644 index 0000000..389ce54 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivityRegistrationUpdatePlugin.java @@ -0,0 +1,98 @@ +package apelet.association.plugin.active; + +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.abstractplugin.ListPlugin; +import apelet.common.online.dto.OnlineEventPluginExecuteDto; +import apelet.common.online.model.constant.AttributeEnum; +import apelet.common.online.plugin.EndOperationTransactionArgs; +import apelet.common.online.plugin.OperationServicePlugIn; +import apelet.common.orm.impl.Filter; +import apelet.common.orm.impl.FilterItem; +import apelet.common.orm.impl.Selector; +import com.alibaba.fastjson.JSONObject; + +public class ActivityRegistrationUpdatePlugin extends ListPlugin { + + private OrmGenDataSourceUtil ormGenDataSourceUtil; + + public ActivityRegistrationUpdatePlugin() { + + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + + setWidgetAttribute("id", AttributeEnum.SHOW, false); + + JSONObject eventparams = JSONObject.parseObject(objectValue.getString("eventparams")); + JSONObject jsonObject = eventparams.getJSONObject("urlParams"); + String activeId = jsonObject.getString("activeId"); + if(activeId == null){ + throw new MyRuntimeException("活动id不能为空"); + } + ObjectValue active = ormGenDataSourceUtil.queryOne("association_activity", activeId); + + this.setWidgetAttribute("name", AttributeEnum.VALUE_CHANGE, active.get("name")); + this.setWidgetAttribute("startDate", AttributeEnum.VALUE_CHANGE, active.get("start_time")); + this.setWidgetAttribute("endDate", AttributeEnum.VALUE_CHANGE, active.get("end_time")); + + this.setWidgetAttribute("parentId", AttributeEnum.VALUE_CHANGE, active.get("id")); + this.setWidgetAttribute("parentId", AttributeEnum.SHOW, false); + + } + + + @Override + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { + + String unitName = objectValue.getString("unit_name"); + String person = objectValue.getString("person"); + String phone = objectValue.getString("phone"); + String parentId = objectValue.getString("parent_id"); + + Filter filter1 = new Filter(); + filter1.add(new FilterItem("unit_name", FilterItem.equals, unitName)); + filter1.add(new FilterItem("person", FilterItem.equals, person)); + filter1.add(new FilterItem("phone", FilterItem.equals, phone)); + filter1.add(new FilterItem("parent_id", FilterItem.equals, parentId)); + ObjectCollection collection = ormGenDataSourceUtil.query("activity_register", filter1, new Selector()); + if(!collection.isEmpty()){ + this.showWarningMessage("当前单位联系人已报名成功, 请勿重复提交!!!"); + this.cancelOperate(); + return; + } + ObjectValue activityRegister = new ObjectValue("activity_register"); + activityRegister.put("unit_name", unitName); + activityRegister.put("person", person); + activityRegister.put("phone", phone); + activityRegister.put("parent_id", parentId); + + Filter filter = new Filter(); + filter.add(new FilterItem("unit_name", FilterItem.equals, unitName)); + ObjectCollection membershipApplyList = ormGenDataSourceUtil.query("membership_apply", filter, new Selector()); + + filter = new Filter(); + filter.add(new FilterItem("name", FilterItem.equals, person)); + ObjectCollection expertManageList = ormGenDataSourceUtil.query("expert_manage", filter, new Selector()); + + if(membershipApplyList != null && !membershipApplyList.isEmpty()){ + ObjectValue object = membershipApplyList.getObject(0); + activityRegister.put("membership_apply_id", object); + }else if(expertManageList != null && !expertManageList.isEmpty()){ + ObjectValue object = expertManageList.getObject(0); + activityRegister.put("expert_manage_id", object); + } + try { + ormGenDataSourceUtil.addNew(activityRegister.getTableName(), activityRegister); + } catch (Exception e) { + throw new MyRuntimeException(e.getMessage()); + } + this.showMessage("保存成功"); + this.cancelOperate(); + } +} diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java index 65817b9..73d6f9a 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/ActivitySignConfigPlugin.java @@ -36,6 +36,8 @@ import java.util.Map; @Slf4j public class ActivitySignConfigPlugin extends ListPlugin { + private final String url = "http://58.48.135.5:8069"; + private final MyFileUtil myFileUtil; private final QRCodeUtil qrCodeUtil; @@ -100,11 +102,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"; @@ -117,14 +119,14 @@ public class ActivitySignConfigPlugin extends ListPlugin { OnlineDatasource onlineDatasource = onlineDatasourceService.getById(model.getDatasourceId()); OnlineTable table = onlineTableService.getOnlineTableFromCache(onlineDatasource.getMasterTableId()); - String checkIn = "http://192.168.100.22:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 1; + String checkIn = url + "/#/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 = "http://192.168.100.22:8080/#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 2; + String checkOut = url + "#/pages/login/routerHdView?activityId=" + activityId + "&activityName=" + activityName + "&type=" + 2; byte[] checkOutQr = qrCodeUtil.generateQrCode(checkOut, 300, 300); checkOutFile = MyFileUtil.writeToFile(checkOutQr, savePath, "qrcode-" + System.currentTimeMillis() + ".png"); MultipartFile checkOutMultipart = MyFileUtil.readFileAsMultipartFile(checkOutFile, "image/png"); diff --git a/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java index 3718f70..2b9f304 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/active/CompetitionDetailsPlugin.java @@ -30,9 +30,10 @@ public class CompetitionDetailsPlugin extends ListPlugin { 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()); - }); + for (int i = 0; i < collection.size(); i++) { + jsonArray.add(collection.getObject(i).getValues()); + } + setWidgetAttribute("table1783059589608", AttributeEnum.ADD_ROWS, jsonArray); } diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipFeePayPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipFeePayPlugin.java new file mode 100644 index 0000000..1982e84 --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipFeePayPlugin.java @@ -0,0 +1,72 @@ +package apelet.association.plugin.member; + +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.abstractplugin.ExecutePluginParent; +import apelet.common.online.dto.OnlineEventPluginExecuteDto; +import apelet.common.online.model.ShowParameter; +import apelet.common.online.model.constant.AttributeEnum; +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.sql.Date; +import java.util.HashMap; +import java.util.Map; + + +public class MembershipFeePayPlugin extends ExecutePluginParent { + + private OrmGenDataSourceUtil ormGenDataSourceUtil; + + public MembershipFeePayPlugin(){ + ormGenDataSourceUtil = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class); + } + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + super.formCreated(widgetVariableName, objectValue); + OnlineEventPluginExecuteDto dto = getDto(); + Map eventParams = dto.getEventParams(); + if (eventParams != null) { + this.setWidgetAttribute("parentId", AttributeEnum.VALUE_CHANGE, eventParams.get("id")); + this.setWidgetAttribute("parentId", AttributeEnum.SHOW, false); + + this.setWidgetAttribute("membershipDate", AttributeEnum.VALUE_CHANGE, eventParams.get("create_time")); + this.setWidgetAttribute("membershipType", AttributeEnum.VALUE_CHANGE, eventParams.get("membership_type")); + } + + } + + @Override + public void buttonTriggered(String widgetVariableName, ObjectValue objectValue) { + if(widgetVariableName.equals("保存")){ + String parentId = objectValue.getString("parent_id"); + + Date startTime1= objectValue.getDate("membership_date"); + Date endTime1 = objectValue.getDate("end_time"); + + Filter filter = new Filter(); + filter.add(new FilterItem("parent_id", FilterItem.equals, parentId)); + ObjectCollection collection = ormGenDataSourceUtil.query(objectValue.getTableName(), filter, new Selector()); + for (int i = 0; i < collection.size(); i++) { + ObjectValue object = collection.getObject(i); + + Date startTime2= object.getDate("membership_date"); + Date endTime2 = object.getDate("end_time"); + // 判断 startTime - endTime 和 startTime2 - endTime2 是否存在交集 + + if (startTime1.before(endTime2) && startTime2.before(endTime1)) { + // 存在交集,抛出异常 + throw new MyRuntimeException("会费已缴纳, 请勿重复缴纳!!!"); + } + } + } + } +} + diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java index e62157c..60091c8 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/MembershipPayPopupPlugin.java @@ -22,11 +22,6 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent { */ private static final Object FORM_ID = "2049040032123064320"; - /** - * 触发按钮的标识 - 对应表单上按钮的 key/标识 - * 点击此按钮时触发弹窗 - */ - private static final String BUTTON_KEY = "会费缴纳"; /** * 按钮点击事件 @@ -38,19 +33,21 @@ public class MembershipPayPopupPlugin extends ExecutePluginParent { @Override public void buttonTriggered(String buttonKey, ObjectValue objectValue) { // 仅响应指定按钮的点击事件 - if (!BUTTON_KEY.equals(buttonKey)) { - return; + if ("会费缴纳".equals(buttonKey)) { + // 调用 showForm 打开 membershipFeePay 表单 + ShowParameter showParameter = new ShowParameter(); + showParameter.setFormId(FORM_ID.toString()); + showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL); + showParameter.setStatus(ViewStatus.EDIT); + Map customParam = new HashMap<>(); + customParam.putAll(objectValue.getValues()); + showParameter.setCustomParam(customParam); + super.showForm(showParameter); + + } - // 调用 showForm 打开 membershipFeePay 表单 - ShowParameter showParameter = new ShowParameter(); - showParameter.setFormId(FORM_ID.toString()); - showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL); - showParameter.setStatus(ViewStatus.EDIT); - Map customParam = new HashMap<>(); - customParam.put("id", " "); - showParameter.setCustomParam(customParam); - super.showForm(showParameter); + } } diff --git a/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java index 64e45d0..61d1290 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/member/UnitNameChangePopupPlugin.java @@ -50,6 +50,31 @@ public class UnitNameChangePopupPlugin extends ListPlugin { return filter; } + + @Override + protected void afterLoadData(List> dataList) { + super.afterLoadData(dataList); + } + + @Override + public void afterLoadFormData(String widgetVariableName, ObjectValue objectValue) { + super.afterLoadFormData(widgetVariableName, objectValue); + + } + + @Override + public void beforeLoadTableData(String widgetVariableName, ObjectValue objectValue) { + OnlineEventPluginExecuteDto dto = getDto(); + super.beforeLoadTableData(widgetVariableName, objectValue); + + } + + @Override + public void formCreated(String widgetVariableName, ObjectValue objectValue) { + super.formCreated(widgetVariableName, objectValue); + + } + /** * 按钮点击事件(列表按钮) * 点击"变更"按钮时,通过 getSelectData 获取列表中选中行的单据数据, diff --git a/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java b/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java index 23aa429..6fe2428 100644 --- a/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java +++ b/common/common-association/src/main/java/apelet/association/plugin/question/QuestionBankListPlugin.java @@ -39,7 +39,8 @@ public class QuestionBankListPlugin extends ListPlugin { return; } long batchNumber = IdUtil.getSnowflakeNextId(); - collection.forEach(f -> { + for (int i = 0; i < collection.size(); i++) { + ObjectValue f = collection.getObject(i); ObjectValue userExercise = new ObjectValue("user_exercise"); userExercise.put("question_bank_id", questionBank); userExercise.put("exam_questions_id", f.getObjectValue("exam_questions_id")); @@ -51,7 +52,8 @@ public class QuestionBankListPlugin extends ListPlugin { } catch (Exception e) { throw new RuntimeException(e); } - }); + } + ObjectValue object = collection.getObject(0); ObjectValue examQuestions = object.getObjectValue("exam_questions_id"); ShowParameter showParameter = new ShowParameter(); diff --git a/common/common-association/src/main/java/apelet/association/task/ContractPaymentReminderTask.java b/common/common-association/src/main/java/apelet/association/task/ContractPaymentReminderTask.java new file mode 100644 index 0000000..3f2d37e --- /dev/null +++ b/common/common-association/src/main/java/apelet/association/task/ContractPaymentReminderTask.java @@ -0,0 +1,30 @@ +package apelet.association.task; + + +import apelet.common.generator.utils.OrmGenDataSourceUtil; +import apelet.common.orm.impl.Filter; +import apelet.msgnotice.service.SystemMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +public class ContractPaymentReminderTask { + + // 提前 30 天提醒 + private static final int REMIND_BEFORE_DAYS = 7; + + @Autowired + private OrmGenDataSourceUtil ormGenDataSourceUtil; + + @Autowired + private SystemMessageService systemMessageService; + + @Scheduled(cron = "0 0 1 * * ?") + public void sendRemind() { + Filter filter = new Filter(); + +// ormGenDataSourceUtil.query("", ) + } + +} diff --git a/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java b/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java index 3098e7c..858fed9 100644 --- a/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java +++ b/common/common-association/src/main/java/apelet/association/task/UserRenewalReminderTask.java @@ -6,6 +6,8 @@ import apelet.common.core.object.ObjectValue; import apelet.common.generator.utils.OrmGenDataSourceUtil; import apelet.common.orm.impl.Filter; import apelet.common.orm.impl.Selector; +import apelet.msgnotice.dto.SendSystemMessageDto; +import apelet.msgnotice.service.SystemMessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Component; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.Date; @Component @@ -20,11 +23,13 @@ public class UserRenewalReminderTask { // 提前 30 天提醒 private static final int REMIND_BEFORE_DAYS = 30; - // 会员年度天数(固定 365) - private static final int YEAR_DAYS = 365; + @Autowired private OrmGenDataSourceUtil ormGenDataSourceUtil; + @Autowired + private SystemMessageService systemMessageService; + @Scheduled(cron = "0 0 1 * * ?") public void sendRemind() { ObjectCollection collection = ormGenDataSourceUtil.query("membership_apply", new Filter(), new Selector()); @@ -33,40 +38,37 @@ public class UserRenewalReminderTask { } for (int i = 0; i < collection.size(); i++) { ObjectValue objectValue = collection.getObject(i); - Date registTime = objectValue.getDate("regist_time"); - if (needRemind(registTime)) { - // TODO 发送消息提示续费 - + ObjectCollection feePay = objectValue.getObjectCollection("membership_fee_pay"); + Date endTime = null; + for (int j = 0; j < feePay.size(); j++) { + if (j == 0) { + endTime = feePay.getObject(j).getDate("end_time"); + } else { + Date endTime1 = feePay.getObject(j).getDate("end_time"); + if (endTime1.after(endTime)) { + endTime = endTime1; + } + } + } + // 判断 Date endTime 30天后是否是今天 + LocalDate endLocalDate = endTime.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + // endTime +30天 + LocalDate plus30Day = endLocalDate.plusDays(30); + // 获取今天日期 + LocalDate today = LocalDate.now(); + if (plus30Day.isEqual(today)) { + // 发送消息提醒 + SendSystemMessageDto sendSystemMessageDto = new SendSystemMessageDto(); + sendSystemMessageDto.setTitle("会员续费提醒"); + sendSystemMessageDto.setContent("您的会员期限还有30天到期,请及时续费。"); + sendSystemMessageDto.setRecipientUserIds(Arrays.asList(objectValue.getLong("membership_manger_id"))); + systemMessageService.sendSystemMessage(sendSystemMessageDto); } - - } - - - } - - - public boolean needRemind(Date date) { - LocalDate today = LocalDate.now(); - LocalDate join = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - - if (today.isBefore(join)) { - return false; } - // 入会到今天总天数 - long totalDays = ChronoUnit.DAYS.between(join, today); - // 第几个年度(从 1 开始) - int yearIndex = (int) (totalDays / YEAR_DAYS) + 1; - - // 该年度到期日 - LocalDate expireDate = join.plusDays((long) YEAR_DAYS * yearIndex); - - // 提醒开始日:到期前 30 天 - LocalDate remindStart = expireDate.minusDays(REMIND_BEFORE_DAYS); - - // 今天在 [remindStart, expireDate] 区间内,则提醒 - return !today.isBefore(remindStart) && !today.isAfter(expireDate); } - } diff --git a/common/common-qy/pom.xml b/common/common-qy/pom.xml index 88684a1..6871b25 100644 --- a/common/common-qy/pom.xml +++ b/common/common-qy/pom.xml @@ -26,12 +26,12 @@ apelet common-generator - 1.0.0 + 1.0.2 apelet common-orm - 1.0.0 + 1.0.2 diff --git a/pom.xml b/pom.xml index 386b01c..f504ec9 100644 --- a/pom.xml +++ b/pom.xml @@ -289,7 +289,7 @@ apelet common-orm - 1.0.0 + 1.0.2