From 6a4011ad4ab652e8de024bf01a8439b2e248ec6f Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Fri, 12 Jan 2024 21:15:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E9=9B=86;=E8=B0=83=E6=95=B4=E4=B8=8E?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=85=88=E5=AD=A6=E5=90=8E=E4=BB=98;?= =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E5=AE=9A=E6=97=B6=E5=99=A8=E9=97=AE=E9=A2=98?= =?UTF-8?q?;=E6=B7=BB=E5=8A=A0=E4=BA=91=E6=95=B0=E6=8D=AE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dto/CloudClassCardRecordDto.java | 9 +- .../api/cloudDb/core/dto/CloudClassDto.java | 1 + .../core/dto/CloudClassStudentDto.java | 1 + .../api/cloudDb/core/dto/CloudCourseDto.java | 18 +- .../core/dto/CloudCourseStudentDto.java | 33 +- .../api/cloudDb/core/dto/CloudOrderDto.java | 2 + .../api/cloudDb/core/dto/CloudStudentDto.java | 7 + .../handler/CloudClassCardHandler.java | 10 +- .../cloudDb/handler/CloudCourseHandler.java | 6 +- Cpop-Core/sql/QRTZ.sql | 132 +++--- .../com/cpop/generator/CpopGenerator.java | 6 +- .../business/entity/EasyLearnOrder.java | 1 + .../business/entity/EasyLearnOrderDetail.java | 22 + .../business/entity/EasyLearnOrderExtend.java | 45 +- .../com/cpop/mall/web/CpopWxPayTests.java | 9 +- Cpop-Oam/Cpop-Oam-Web/Dockerfile | 4 + .../com/cpop/oam/web/CpopCloudDbTests.java | 2 - .../com/cpop/oam/web/CpopImportTests.java | 32 ++ .../cpop/oam/web/CpopOldDataSyncTests.java | 444 ++++++++++++++++++ .../backstage/CloudDataController.java | 5 +- .../oam/business/entity/BusinessDetail.java | 5 + .../oam/business/entity/BusinessStaff.java | 6 + .../service/impl/BusinessServiceImpl.java | 63 ++- .../service/impl/DataImportServiceImpl.java | 20 +- .../service/impl/DutyServiceImpl.java | 2 +- .../vo/TaskWorkOrderRecordListVo.java | 2 +- .../cpop/oam/framework/config/InitConfig.java | 13 + .../framework/tasks/OamScheduledTasks.java | 4 +- .../com/cpop/system/business/bo/MenuBo.java | 1 + .../cpop/system/business/bo/StoreRenewBo.java | 65 +++ .../business/bo/SyncBrandAndStoreBo.java | 12 + .../business/controller/StoreController.java | 31 +- .../cpop/system/business/entity/Store.java | 10 + .../system/business/entity/StoreRenew.java | 10 + .../business/service/StoreRenewService.java | 8 + .../service/impl/BrandServiceImpl.java | 3 +- .../service/impl/StoreRenewServiceImpl.java | 85 ++++ .../service/impl/StoreServiceImpl.java | 3 +- .../framework/constant/SystemRedisKey.java | 14 + 39 files changed, 1026 insertions(+), 120 deletions(-) create mode 100644 Cpop-Oam/Cpop-Oam-Web/Dockerfile create mode 100644 Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopOldDataSyncTests.java create mode 100644 Cpop-System/src/main/java/com/cpop/system/business/bo/StoreRenewBo.java create mode 100644 Cpop-System/src/main/java/com/cpop/system/framework/constant/SystemRedisKey.java diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassCardRecordDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassCardRecordDto.java index a979ebe..2525d96 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassCardRecordDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassCardRecordDto.java @@ -51,6 +51,7 @@ public class CloudClassCardRecordDto { /** * 课卡名 */ + @SerializedName("periodName") private String cardName; /** @@ -80,7 +81,13 @@ public class CloudClassCardRecordDto { /** * 关联员工 */ - @SerializedName("_staffid") + @SerializedName("staffName") private String relevanceStaffName; + /** + * 关联员工id + */ + @SerializedName("_staffid") + private String relevanceStaffId; + } diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassDto.java index e5a82c8..b3a5efc 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassDto.java @@ -29,6 +29,7 @@ public class CloudClassDto { /** * 班主任 */ + @SerializedName("staffName") private String classTeacherName; /** diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassStudentDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassStudentDto.java index 30591bd..34fc008 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassStudentDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudClassStudentDto.java @@ -17,6 +17,7 @@ public class CloudClassStudentDto { /** * 班级名 */ + @SerializedName("classesName") private String className; /** diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseDto.java index 2449929..9440626 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseDto.java @@ -23,13 +23,19 @@ public class CloudCourseDto { /** * 绑定班级 */ - @SerializedName("_classesId") + @SerializedName("classesName") private String bindClass; + /** + * 班级id + */ + @SerializedName("_classId") + private String classId; + /** * 课程名 */ - @SerializedName("classesName") + @SerializedName("name") private String courseName; /** @@ -59,9 +65,15 @@ public class CloudCourseDto { /** * 导师 */ - @SerializedName("_staffid") + @SerializedName("staffName") private String supervisor; + /** + * 导师id + */ + @SerializedName("_staffid") + private String supervisorId; + /** * 创建时间 */ diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseStudentDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseStudentDto.java index 000ef89..a2cefcb 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseStudentDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudCourseStudentDto.java @@ -26,29 +26,52 @@ public class CloudCourseStudentDto { @SerializedName("_studentid") private String studentId; + /** + * 学员名 + */ + private String studentName; + /** * 客户id */ @SerializedName("_customerid") private String customerId; + /** + * 客户名 + */ + private String customerName; + /** * 班级id */ @SerializedName("_classesid") private String classId; + /** + * 班名 + */ + @SerializedName("classesName") + private String className; + /** * 课程名 */ - private String name; + @SerializedName("name") + private String courseName; /** * 导师 */ - @SerializedName("_staffid") + @SerializedName("staffName") private String supervisor; + /** + * 导师id + */ + @SerializedName("_staffid") + private String supervisorId; + /** * 上课时间 */ @@ -96,6 +119,12 @@ public class CloudCourseStudentDto { @SerializedName("_periodid") private String cardId; + /** + * 扣除课卡名 + */ + @SerializedName("periodName") + private String cardName; + /** * 状态操作时间 */ diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudOrderDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudOrderDto.java index 34936c1..5e60f2e 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudOrderDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudOrderDto.java @@ -28,6 +28,7 @@ public class CloudOrderDto { /** * 关联课卡名 */ + @SerializedName("periodName") private String classCardName; /** @@ -99,6 +100,7 @@ public class CloudOrderDto { /** * 顾问名 */ + @SerializedName("staffName") private String counselorName; } diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudStudentDto.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudStudentDto.java index dedf655..f2650c4 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudStudentDto.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/core/dto/CloudStudentDto.java @@ -23,6 +23,11 @@ public class CloudStudentDto { @SerializedName("_customerid") private String customerId; + /** + * 顾客名 + */ + private String customerName; + /** * 学员名 */ @@ -48,10 +53,12 @@ public class CloudStudentDto { /** * 学员绑定课卡 */ + @SerializedName("periodName") private String studentBindCard; /** * 学员绑定班级 */ + @SerializedName("classesName") private String studentBindClass; } diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudClassCardHandler.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudClassCardHandler.java index 9878639..fee239d 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudClassCardHandler.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudClassCardHandler.java @@ -6,12 +6,14 @@ import com.cpop.api.cloudDb.core.dto.CloudClassCardDto; import com.cpop.api.cloudDb.core.dto.CloudClassCardRecordDto; import com.cpop.api.cloudDb.core.dto.CloudClassStudentDto; import com.cpop.common.utils.StringUtils; +import com.cpop.core.base.entity.ExtendPage; import com.cpop.core.base.exception.UtilException; import com.mybatisflex.core.paginate.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import java.util.HashMap; import java.util.List; /** @@ -67,13 +69,19 @@ public class CloudClassCardHandler { //校区id jsonBody.put("storeId", storeId); JSONObject jsonObject = restTemplate.postForObject(CloudDbUrl.DATA_CLOUD, jsonBody, JSONObject.class); - Page page = Page.of(pageNum, pageSize); + ExtendPage page = ExtendPage.of(pageNum, pageSize); if (jsonObject != null) { if (jsonObject.getBoolean("success")) { List courseDtoList = jsonObject.getJSONArray("list").toJavaList(CloudClassCardDto.class); page.setRecords(courseDtoList); page.setTotalPage(jsonObject.getInteger("total")); page.setTotalRow(jsonObject.getInteger("total")); + HashMap extendParams = new HashMap<>(); + //总课时 + extendParams.put("totalClassHours",jsonObject.getString("allNumber")); + //总金额 + extendParams.put("totalAmount",jsonObject.getString("allAmount")); + page.setExtendParams(extendParams); return page; } else { throw new UtilException(jsonObject.getString("error")); diff --git a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudCourseHandler.java b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudCourseHandler.java index c04119b..431ec19 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudCourseHandler.java +++ b/Cpop-Api/src/main/java/com/cpop/api/cloudDb/handler/CloudCourseHandler.java @@ -40,9 +40,10 @@ public class CloudCourseHandler { * @param endDate 结束日期 * @param storeId 云校区id * @param courseId 云课程id + * @param classId 云课程id * @return Page */ - public Page getCoursePage(Integer pageNum, Integer pageSize, String startDate, String endDate, String storeId, String courseId) { + public Page getCoursePage(Integer pageNum, Integer pageSize, String startDate, String endDate, String storeId, String courseId,String classId) { JSONObject jsonBody = new JSONObject(); jsonBody.put("_type", "courseContent"); //分页参数 @@ -56,6 +57,9 @@ public class CloudCourseHandler { if (StringUtils.isNotBlank(courseId)){ jsonBody.put("courseId", courseId); } + if (StringUtils.isNotBlank(classId)) { + jsonBody.put("classId", classId); + } //校区id jsonBody.put("storeId", storeId); JSONObject jsonObject = restTemplate.postForObject(CloudDbUrl.DATA_CLOUD, jsonBody, JSONObject.class); diff --git a/Cpop-Core/sql/QRTZ.sql b/Cpop-Core/sql/QRTZ.sql index 021c371..a8e552d 100644 --- a/Cpop-Core/sql/QRTZ.sql +++ b/Cpop-Core/sql/QRTZ.sql @@ -22,14 +22,14 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `BLOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_BLOB_TRIGGERS @@ -40,11 +40,11 @@ CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_CALENDARS`; CREATE TABLE `QRTZ_CALENDARS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `CALENDAR` blob NOT NULL, PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_CALENDARS @@ -55,14 +55,14 @@ CREATE TABLE `QRTZ_CALENDARS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`; CREATE TABLE `QRTZ_CRON_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_CRON_TRIGGERS @@ -73,19 +73,19 @@ CREATE TABLE `QRTZ_CRON_TRIGGERS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`; CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `FIRED_TIME` bigint(0) NOT NULL, `SCHED_TIME` bigint(0) NOT NULL, `PRIORITY` int(0) NOT NULL, - `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE, INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE, @@ -93,7 +93,7 @@ CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_FIRED_TRIGGERS @@ -104,20 +104,20 @@ CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; CREATE TABLE `QRTZ_JOB_DETAILS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `JOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE, INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_JOB_DETAILS @@ -128,10 +128,10 @@ CREATE TABLE `QRTZ_JOB_DETAILS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_LOCKS`; CREATE TABLE `QRTZ_LOCKS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_LOCKS @@ -143,10 +143,10 @@ INSERT INTO `QRTZ_LOCKS` VALUES ('RockBladeScheduler', 'TRIGGER_ACCESS'); -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`; CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_PAUSED_TRIGGER_GRPS @@ -157,12 +157,12 @@ CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`; CREATE TABLE `QRTZ_SCHEDULER_STATE` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `LAST_CHECKIN_TIME` bigint(0) NOT NULL, `CHECKIN_INTERVAL` bigint(0) NOT NULL, PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_SCHEDULER_STATE @@ -173,15 +173,15 @@ CREATE TABLE `QRTZ_SCHEDULER_STATE` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `REPEAT_COUNT` bigint(0) NOT NULL, `REPEAT_INTERVAL` bigint(0) NOT NULL, `TIMES_TRIGGERED` bigint(0) NOT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_SIMPLE_TRIGGERS @@ -192,23 +192,23 @@ CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, `INT_PROP_1` int(0) NULL DEFAULT NULL, `INT_PROP_2` int(0) NULL DEFAULT NULL, `LONG_PROP_1` bigint(0) NULL DEFAULT NULL, `LONG_PROP_2` bigint(0) NULL DEFAULT NULL, `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, - `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_SIMPROP_TRIGGERS @@ -219,20 +219,20 @@ CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( -- ---------------------------- DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; CREATE TABLE `QRTZ_TRIGGERS` ( - `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, `NEXT_FIRE_TIME` bigint(0) NULL DEFAULT NULL, `PREV_FIRE_TIME` bigint(0) NULL DEFAULT NULL, `PRIORITY` int(0) NULL DEFAULT NULL, - `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `START_TIME` bigint(0) NOT NULL, `END_TIME` bigint(0) NULL DEFAULT NULL, - `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, `MISFIRE_INSTR` smallint(0) NULL DEFAULT NULL, `JOB_DATA` blob NULL, PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, @@ -249,7 +249,7 @@ CREATE TABLE `QRTZ_TRIGGERS` ( INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE, INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE, CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of QRTZ_TRIGGERS diff --git a/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java b/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java index 56a42cf..8276257 100644 --- a/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java +++ b/Cpop-Generator/src/main/java/com/cpop/generator/CpopGenerator.java @@ -40,17 +40,17 @@ public class CpopGenerator { /** * 输出路径 */ - private static final String EXPORT_URL = "/Cpop-System"; + private static final String EXPORT_URL = "/Cpop-Oam"; /** * 模块 */ - private static final String EXPORT_ITEM = "system"; + private static final String EXPORT_ITEM = "oam"; /** * 表前缀 */ - private static final String TABLE_PREFIX = "cp_sys_"; + private static final String TABLE_PREFIX = "cp_oam_"; /** * 主入口 diff --git a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrder.java b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrder.java index ac8081f..796e06b 100644 --- a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrder.java +++ b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrder.java @@ -11,6 +11,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; /** * 果酱-放心学订单表 实体类。 diff --git a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderDetail.java b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderDetail.java index 25f0ed8..3e0bcdf 100644 --- a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderDetail.java +++ b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderDetail.java @@ -56,13 +56,35 @@ public class EasyLearnOrderDetail extends BaseEntity implements Serializable { */ private BigDecimal amount; + /** + * 实际支付金额 + */ + private BigDecimal actualPrice; + /** * 详情描述 */ private String detailDesc; + /** + * 计划详情名称 + */ + private String detailName; + /** + * 【计划明细状态】 计划明细状态 + * 可选取值: + * NOT_USED: 本计划详情还未使用 + * USING: 本计划详情使用中,已有对应的服务订单 + * USED: 本计划详情已使用,对应的服务订单已完成支付 + * SIGN_PLAN_DETAIL_CANCEL: 本计划详情已取消使用,对应的服务订单已取消 + */ + private Integer detailStatus; + /** + * 支付时间 + */ + private LocalDateTime payTime; /** diff --git a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderExtend.java b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderExtend.java index abf3ac5..767650a 100644 --- a/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderExtend.java +++ b/Cpop-Jambox/src/main/java/com/cpop/jambox/business/entity/EasyLearnOrderExtend.java @@ -37,9 +37,19 @@ public class EasyLearnOrderExtend extends BaseEntity implements Serializable { private String orderId; /** - * 期数 + * 【目前用户进行到的计划详情序号】 序号从1开始,顺序按照创建计划时传入的计划详情顺序,0代表无任何详情开始使用 */ - private Integer periodNumber; + private Integer goingDetailNo; + + /** + * 计划id(系统内部计划id) + */ + private String planId; + + /** + * 签约计划id + */ + private String signPlanId; /** * 下期还款日 @@ -56,6 +66,37 @@ public class EasyLearnOrderExtend extends BaseEntity implements Serializable { */ private String subMchId; + /** + * 【计划签约状态】 计划签约状态 + * 可选取值: + * UNSIGNED: 用户未签约 + * SIGNED: 用户已签约 + * SIGN_PLAN_CANCEL: 签约计划已取消 + * COMPLETE: 签约计划的所有计划详情已经全部完成 + * EXPIRE: 签约计划已过期 + */ + private Integer extendStatus; + + /** + * 【签约计划取消类型】 签约计划取消类型 + * 可选取值: + * NOT_CANCEL: 用户已签约协议未取消 + * USER: 用户取消已签约的协议 + * MERCHANT: 商户取消已签约的协议 + * REVOKE_SERVICE: 用户解除服务授权时取消服务下的已签约协议 + */ + private Integer extendCancelType; + + /** + * 取消时间 + */ + private LocalDateTime cancelTime; + + /** + * 取消原因 + */ + private String cancelReason; + /** * 逻辑删除(0否1是) */ diff --git a/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/CpopWxPayTests.java b/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/CpopWxPayTests.java index f53410f..eb61693 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/CpopWxPayTests.java +++ b/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/CpopWxPayTests.java @@ -98,7 +98,8 @@ public class CpopWxPayTests { @Test public void reverse() throws WxPayException { WxPayOrderReverseRequest wxPayOrderReverseRequest = new WxPayOrderReverseRequest(); - wxPayOrderReverseRequest.setOutTradeNo("97945902236385280"); + //wxPayOrderReverseRequest.setOutTradeNo("97945902236385280"); + wxPayOrderReverseRequest.setOutTradeNo("1732752269107220540"); wxPayOrderReverseRequest.setSubMchId("1661323640"); wxPayService.reverseOrder(wxPayOrderReverseRequest); } @@ -134,8 +135,8 @@ public class CpopWxPayTests { @Test public void getOrderInfo() throws WxPayException { WxPayConfig config = wxPayService.getConfig(); - config.setSubMchId("1661323640"); - WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder(null, "97976926051770368"); + config.setSubMchId("1650816616"); + WxPayOrderQueryResult wxPayOrderQueryResult = wxPayService.queryOrder("01020033210023615210000000008091", null); System.out.println(wxPayOrderQueryResult); } @@ -162,7 +163,7 @@ public class CpopWxPayTests { */ @Test public void getProfitSharingResult() throws WxPayException { - ProfitSharingV3Result profitSharingV3Result = wxPayService.getProfitSharingService().profitSharingQueryV3("97976952480079872", "4200002127202312282719627535", "1661323640"); + ProfitSharingV3Result profitSharingV3Result = wxPayService.getProfitSharingService().profitSharingQueryV3("1714609621691420672", "4200002015202310186547802213", "1650816616"); System.out.println(profitSharingV3Result); } diff --git a/Cpop-Oam/Cpop-Oam-Web/Dockerfile b/Cpop-Oam/Cpop-Oam-Web/Dockerfile new file mode 100644 index 0000000..c60ac55 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:8-jdk +LABEL authors="Lost" +ADD ./target/Cpop-Oam-Web.jar Cpop-Oam-Web.jar +ENTRYPOINT ["sh", "-c", "java -jar Cpop-Oam-Web.jar --spring.profiles.active=prod,core,jambox"] \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCloudDbTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCloudDbTests.java index fd78776..1e55e94 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCloudDbTests.java +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopCloudDbTests.java @@ -1,7 +1,6 @@ package com.cpop.oam.web; import com.alibaba.fastjson.JSONObject; -import com.cpop.api.cloudDb.core.dto.CloudCourseStudentDto; import com.cpop.api.cloudDb.core.dto.CloudCourseStudentListDto; import com.cpop.api.cloudDb.core.dto.CloudCustomerDto; import com.cpop.api.cloudDb.core.dto.CloudOrderDto; @@ -9,7 +8,6 @@ import com.cpop.api.cloudDb.handler.CloudCourseHandler; import com.cpop.api.cloudDb.handler.CloudCustomerStudentHandler; import com.cpop.api.cloudDb.handler.CloudOrderHandler; import com.cpop.core.utils.SpringUtils; -import com.google.gson.JsonObject; import com.mybatisflex.core.paginate.Page; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopImportTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopImportTests.java index acfe11b..65af0a4 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopImportTests.java +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopImportTests.java @@ -2,6 +2,7 @@ package com.cpop.oam.web; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.annotation.JSONField; import com.cpop.common.utils.StringUtils; import com.cpop.common.utils.bean.BeanUtils; @@ -1608,4 +1609,35 @@ public class CpopImportTests { //导入营业执照相关信息 } } + + /** + * 更新报销上传文件 + * @author DB + * @since 2024/1/8 + */ + @Test + public void updateReimburseUploadFileData() { + FinanceReimburseService financeReimburseService = SpringUtils.getBean(FinanceReimburseService.class); + List list = financeReimburseService.list(); + List updateEnetyList = new ArrayList<>(); + list.forEach(item -> { + if (StringUtils.isNotBlank(item.getAttachmentUrl())){ + JSONArray jsonArray = JSONArray.parseArray(item.getAttachmentUrl()); + JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(0).toString()); + String[] split = jsonObject.getString("url").split(","); + if (split.length > 1) { + List> urls = new ArrayList<>(); + for (int i = 0; i < split.length; i++) { + Map map = new HashMap<>(); + map.put("name", "旧数据无名字"); + map.put("url", split[i]); + urls.add(map); + } + item.setAttachmentUrl(JSONArray.toJSONString(urls)); + updateEnetyList.add(item); + } + } + }); + financeReimburseService.updateBatch(updateEnetyList); + } } diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopOldDataSyncTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopOldDataSyncTests.java new file mode 100644 index 0000000..e4b0a51 --- /dev/null +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopOldDataSyncTests.java @@ -0,0 +1,444 @@ +package com.cpop.oam.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.cpop.common.utils.StringUtils; +import com.cpop.core.base.enums.OrderSource; +import com.cpop.core.utils.SpringUtils; +import com.cpop.jambox.business.entity.*; +import com.cpop.jambox.business.service.*; +import com.cpop.pay.framewok.handler.wxPay.WxPayHandler; +import com.cpop.system.business.entity.Store; +import com.cpop.system.business.entity.WxPayScore; +import com.cpop.system.business.entity.WxPayScoreDetail; +import com.cpop.system.business.service.StoreService; +import com.cpop.system.business.service.WxPayScoreDetailService; +import com.cpop.system.business.service.WxPayScoreService; +import com.github.binarywang.wxpay.bean.payscore.PartnerUserSignPlanEntity; +import com.github.binarywang.wxpay.bean.payscore.PayScorePlanDetailResult; +import com.github.binarywang.wxpay.bean.payscore.WxPartnerPayScoreSignPlanResult; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingV3Result; +import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest; +import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryV3Request; +import com.github.binarywang.wxpay.bean.request.WxPayPartnerOrderQueryV3Request; +import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult; +import com.github.binarywang.wxpay.bean.result.WxPayPartnerOrderQueryV3Result; +import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.service.PartnerPayScoreSignPlanService; +import com.github.binarywang.wxpay.service.WxPayService; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.core.datasource.DataSourceKey; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.row.*; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.cpop.jambox.business.entity.table.EasyLearnOrderDetailTableDef.EASY_LEARN_ORDER_DETAIL; +import static com.cpop.jambox.business.entity.table.EasyLearnOrderExtendTableDef.EASY_LEARN_ORDER_EXTEND; +import static com.cpop.jambox.business.entity.table.EasyLearnOrderTableDef.EASY_LEARN_ORDER; +import static com.cpop.jambox.business.entity.table.StoreExtendTableDef.STORE_EXTEND; +import static com.cpop.system.business.entity.table.StoreTableDef.STORE; +import static com.cpop.system.business.entity.table.WxPayScoreTableDef.WX_PAY_SCORE; + +/** + * 旧数据同步 + * @author DB + * @version 1.0.0 + * @since 2024-01-11 17:28 + */ +@Slf4j +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = {"prod","core"}) +public class CpopOldDataSyncTests { + + @Autowired + private WxPayHandler wxPayHandler; + + /** + * 同步旧校区数据 + * @author DB + * @since 2024/1/11 + */ + @Test + public void syncOldStoreData(){ + List rowList = null; + try { + //查询旧表 + DataSourceKey.use("jambox"); + rowList = DbChain.table("t_mechanism_info") + .select("tmi.X as longitude") + .select("tmi.store_id as storeCloudId") + .select("tmi.Y as latitude") + .select("tmi.charge_phone as phone") + .select("tmi.address as storeAddr") + .select("tmi.charge_name as personCharge") + .from("t_mechanism_info").as("tmi") + .where("tmi.store_id is not null") + .list(); + } finally { + DataSourceKey.clear(); + } + //获取所有校区 + Map storeMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreCloudId, StoreExtend::getStoreId)); + rowList.forEach(item->{ + item.set("id",storeMap.get(item.getString("storeCloudId"))); + }); + + List filterList = rowList.stream().filter(item -> StringUtils.isNotBlank(item.getString("id"))).collect(Collectors.toList()); + SpringUtils.getBean(StoreService.class).updateBatch(RowUtil.toEntityList(filterList, Store.class)); + } + + /** + * 同步旧数据一次一次支付 + * @author DB + * @since 2024/1/12 + */ + @Test + public void syncOldEasyLearnPayScorePlanData() { + List rowList = null; + try { + //查询旧表 + DataSourceKey.use("jambox"); + rowList = DbChain.table("j_wechat_pay_plan") + .select("merchant_plan_no") + .select("sub_merch_id as subMchId") + .from("j_wechat_pay_plan") + .where("is_month = 0") + .list(); + } finally { + DataSourceKey.clear(); + } + WxPayService wxPayService = wxPayHandler.getWxPayService(); + WxPayScoreService wxPayScoreService = SpringUtils.getBean(WxPayScoreService.class); + WxPayScoreDetailService wxPayScoreDetailService = SpringUtils.getBean(WxPayScoreDetailService.class); + rowList.forEach(item -> { + WxPartnerPayScoreSignPlanResult result = null; + try { + result = wxPayService.getPartnerPayScoreSignPlanService().queryPlans(item.getString("merchantPlanNo"), item.getString("subMchId")); + WxPayScore wxPayScore = new WxPayScore(); + wxPayScore.setId(result.getMerchantPlanNo()) + .setOutPlanId(result.getPlanId()) + .setSignAccount(result.getSubMchid()) + .setPlanName(result.getPlanName()) + .setPlanDuration(Integer.valueOf(result.getPlanDuration())) + .setDeductionQuantity(Integer.valueOf(result.getDeductionQuantity())) + .setTotalActualPrice(result.getTotalActualPrice()) + .setTotalOriginalPrice(result.getTotalActualPrice()) + .setPlanSource(OrderSource.EASY_LEARN.toString()); + wxPayScoreService.save(wxPayScore); + //计划详情 + List planDetailList = result.getPlanDetailList(); + List wxPayScoreDetails = new ArrayList<>(); + planDetailList.forEach(inner -> { + WxPayScoreDetail wxPayScoreDetail = new WxPayScoreDetail(); + wxPayScoreDetail.setSysWxPayScoreId(wxPayScore.getId()) + .setPlanDetailNo(inner.getPlanDetailNo()) + .setOriginalPrice(inner.getOriginalPrice()) + .setActualPrice(inner.getActualPrice()) + .setPlanDiscountDescription(inner.getPlanDiscountDescription()) + .setPlanDetailName(inner.getPlanDetailName()); + wxPayScoreDetails.add(wxPayScoreDetail); + }); + wxPayScoreDetailService.saveBatch(wxPayScoreDetails); + } catch (WxPayException e) { + throw new RuntimeException(e); + } + }); + } + + @Test + public void syncOldEasyLearnSignPayScorePlanData() throws WxPayException { + List rowList = null; + try { + //查询旧表 + DataSourceKey.use("jambox"); + rowList = DbChain.table("j_commodity_ticket") + .select("jct.wx_order_id as orderId") + .select("jct.name as customerName") + .select("jct.phone as customerPhone") + .select("jct.store_id as storeCloudId") + .select("jct.card_no as productId") + .select("jwpp.merchant_plan_no") + .select("jwpp.sub_merch_id as subMchId") + .from("j_commodity_ticket").as("jct") + .leftJoin("j_wechat_pay_plan").as("jwpp").on("jwpp.template_id = jct.commodity_id") + .where("jwpp.is_month = 0") + .and("jct.deleted = 1") + .and("jct.ticket_type = 1") + .and("jct.pay_status = 'PAY'") + .and("jct.deleted = 1") + .and("jct.card_no is not null") + .list(); + } finally { + DataSourceKey.clear(); + } + Map storeMap = Db.selectListByQuery(QueryWrapper.create() + .select(STORE.ID, STORE.BRAND_ID, STORE_EXTEND.STORE_CLOUD_ID) + .from(STORE) + .leftJoin(STORE_EXTEND).on(STORE_EXTEND.STORE_ID.eq(STORE.ID)) + .where(STORE_EXTEND.STORE_CLOUD_ID.in(rowList.stream().map(item -> item.getString("storeCloudId")).collect(Collectors.toList())))) + .stream().collect(Collectors.toMap(item -> item.getString("storeCloudId"), item -> item)); + WxPayService wxPayService = wxPayHandler.getWxPayService(); + WxPayScoreService wxPayScoreService = SpringUtils.getBean(WxPayScoreService.class); + List payScoreList = wxPayScoreService.list(); + Map wxPayScoreMap = payScoreList.stream().collect(Collectors.toMap(WxPayScore::getOutPlanId, item -> item)); + List easyLearnOrderDetails = new ArrayList<>(); + List easyLearnOrderExtends = new ArrayList<>(); + List easyLearnOrders = new ArrayList<>(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"); + rowList.forEach(item->{ + try { + PartnerUserSignPlanEntity partnerUserSignPlanEntity = wxPayService.getPartnerPayScoreSignPlanService() + .queryUserSignPlans(item.getString("orderId"), item.getString("subMchId")); + EasyLearnOrder easyLearnOrder = new EasyLearnOrder(); + String storeCloudId = item.getString("storeCloudId"); + Integer extendStatus = changeStatus(partnerUserSignPlanEntity.getSignState()); + partnerUserSignPlanEntity.getSignedDetailList().forEach(inner->{ + EasyLearnOrderDetail easyLearnOrderDetail = new EasyLearnOrderDetail(); + BigDecimal payPrice = BigDecimal.valueOf(inner.getActualPayPrice()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + easyLearnOrderDetail.setId(inner.getMerchantPlanDetailNo()) + .setOrderId(partnerUserSignPlanEntity.getMerchantSignPlanNo()) + .setOutOrderNo(inner.getOrderId()) + .setAmount(BigDecimal.valueOf(inner.getActualPrice()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)) + .setActualPrice(payPrice) + .setPeriodNo(inner.getPlanDetailNo()) + .setDetailDesc(inner.getPlanDiscountDescription()) + .setDetailName(inner.getPlanDetailName()) + .setDetailStatus(changeDetailStatus(inner.getPlanDetailState())) + .setCreateTime(LocalDateTime.now()); + if (StringUtils.isNotBlank(inner.getUseTime())){ + easyLearnOrderDetail.setPayTime(LocalDateTime.parse(inner.getUseTime(),dateTimeFormatter)); + } + if (inner.getPlanDetailState().equals("FINISHED")) { + if (easyLearnOrder.getTotalPayAmount() == null) { + easyLearnOrder.setTotalPayAmount(payPrice); + } else { + easyLearnOrder.setTotalPayAmount(easyLearnOrder.getTotalPayAmount().add(payPrice)); + } + } + easyLearnOrderDetails.add(easyLearnOrderDetail); + }); + easyLearnOrder.setId(partnerUserSignPlanEntity.getMerchantSignPlanNo()) + .setOrderContent(partnerUserSignPlanEntity.getPlanName()) + .setOrderStatus(1) + .setOutOrderNo(partnerUserSignPlanEntity.getSignPlanId()) + .setBrandId(storeMap.get(storeCloudId).getString("brandId")) + .setStoreId(storeMap.get(storeCloudId).getString("id")) + .setCustomerName(item.getString("customerName")) + .setCustomerPhone(item.getString("customerPhone")) + .setTotalAmount(BigDecimal.valueOf(partnerUserSignPlanEntity.getTotalActualPrice()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)) + .setTotalPayAmount(BigDecimal.ZERO) + .setOrderType(0) + .setRate(OrderSource.EASY_LEARN.getRate()) + .setProductId(item.getString("productId")) + .setCreateTime(LocalDateTime.parse(partnerUserSignPlanEntity.getSignTime(),dateTimeFormatter)); + easyLearnOrders.add(easyLearnOrder); + EasyLearnOrderExtend easyLearnOrderExtend = new EasyLearnOrderExtend(); + easyLearnOrderExtend.setOrderId(partnerUserSignPlanEntity.getMerchantSignPlanNo()) + .setGoingDetailNo(partnerUserSignPlanEntity.getGoingDetailNo()) + .setPlanId(wxPayScoreMap.get(partnerUserSignPlanEntity.getPlanId()).getId()) + .setSignPlanId(partnerUserSignPlanEntity.getSignPlanId()) + .setSubMchId(partnerUserSignPlanEntity.getSubMchid()) + .setExtendStatus(extendStatus) + .setExtendCancelType(changeCancelType(partnerUserSignPlanEntity.getCancelSignType())) + .setCancelReason(partnerUserSignPlanEntity.getCancelReason()) + .setCreateTime(LocalDateTime.parse(partnerUserSignPlanEntity.getSignTime(),dateTimeFormatter)); + if (StringUtils.isNotBlank(partnerUserSignPlanEntity.getCancelSignTime())){ + easyLearnOrderExtend.setCancelTime(LocalDateTime.parse(partnerUserSignPlanEntity.getCancelSignTime(),dateTimeFormatter)); + } + easyLearnOrderExtends.add(easyLearnOrderExtend); + } catch (WxPayException e) { + throw new RuntimeException(e); + } + }); + SpringUtils.getBean(EasyLearnOrderService.class).saveBatch(easyLearnOrders); + SpringUtils.getBean(EasyLearnOrderExtendService.class).saveBatch(easyLearnOrderExtends); + SpringUtils.getBean(EasyLearnOrderDetailService.class).saveBatch(easyLearnOrderDetails); + } + + private Integer changeStatus(String signStatus) { + switch (signStatus) { + case "UNSIGNED": + return 0; + case "SIGNED": + return 1; + case "SIGN_PLAN_CANCEL": + return 2; + case "COMPLETE": + return 3; + default: + return 4; + } + } + + private Integer changeCancelType(String cancelType) { + switch (cancelType) { + case "NOT_CANCEL": + return 0; + case "USER": + return 1; + case "MERCHANT": + return 2; + default: + return 3; + } + } + + private Integer changeDetailStatus(String detailStatus){ + switch (detailStatus) { + case "NOT_USED": + return 0; + case "USING": + return 1; + case "USED": + return 2; + default: + return 3; + } + } + + /** + * 导入到旧库,已核销的数据 + * @author DB + * @since 2024/1/12 + */ + @Test + public void importEasyLearnDataToOldDataBase(){ + List brandList = null; + List storeList = null; + List ticketList = null; + List list = SpringUtils.getBean(EasyLearnOrderExtendService.class).queryChain().where(EASY_LEARN_ORDER_EXTEND.EXTEND_STATUS.in(2, 3)).list(); + try { + //查询旧表 + DataSourceKey.use("jambox"); + brandList = DbChain.table("t_brand_info") + .select("id") + .select("brand_id as brandCloudId") + .from("t_brand_info").as("jct") + .where("deleted = 1") + .list(); + storeList = DbChain.table("t_mechanism_info") + .select("mechanism_id as id") + .select("store_id as storeCloudId") + .from("t_mechanism_info") + .where("deleted = 1") + .list(); + List collect = list.stream().map(EasyLearnOrderExtend::getOrderId).collect(Collectors.toList()); + ticketList = DbChain.table("j_commodity_ticket") + .select("user_id") + .select("wx_order_id") + .from("j_commodity_ticket") + .in("wx_order_id", collect) + .list(); + } finally { + DataSourceKey.clear(); + } + Map brandMap = brandList.stream().collect(Collectors.toMap(item -> item.getString("brandCloudId"), item -> item.getString("id"))); + Map storeMap = storeList.stream().collect(Collectors.toMap(item -> item.getString("storeCloudId"), item -> item.getString("id"))); + Map brandCloudMap = SpringUtils.getBean(BrandExtendService.class).list().stream().collect(Collectors.toMap(BrandExtend::getBrandId, BrandExtend::getBrandCloudId)); + Map storeCloudMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreId, StoreExtend::getStoreCloudId)); + Map orderMap = SpringUtils.getBean(EasyLearnOrderService.class).queryChain() + .where(EASY_LEARN_ORDER.ID.in(list.stream().map(EasyLearnOrderExtend::getOrderId).collect(Collectors.toSet()))) + .list() + .stream().collect(Collectors.toMap(EasyLearnOrder::getId, item -> item)); + Map wxOrderMap = ticketList.stream().collect(Collectors.toMap(item -> item.getString("wxOrderId"), item -> item.getString("userId"))); + //获取签约计划 + Map wxPayScoreMap = SpringUtils.getBean(WxPayScoreService.class).queryChain() + .where(WX_PAY_SCORE.ID.in(list.stream().map(EasyLearnOrderExtend::getPlanId).collect(Collectors.toSet()))) + .list().stream().collect(Collectors.toMap(WxPayScore::getId, item -> item)); + List rows = new ArrayList<>(); + list.forEach(item -> { + EasyLearnOrder easyLearnOrder = orderMap.get(item.getOrderId()); + Row row = Row.ofKey(RowKey.of("refund_id", KeyType.Auto)); + row.set("brand_id", brandMap.get(brandCloudMap.get(easyLearnOrder.getBrandId()))); + row.set("mechanism_id", storeMap.get(storeCloudMap.get(easyLearnOrder.getStoreId()))); + row.set("type", "先学后付次付"); + row.set("type_id",item.getOrderId()); + row.set("name", easyLearnOrder.getCustomerName()); + row.set("phone", easyLearnOrder.getCustomerPhone()); + row.set("product_name",easyLearnOrder.getOrderContent()); + row.set("reason",item.getCancelReason()); + WxPayScore wxPayScore = wxPayScoreMap.get(item.getPlanId()); + BigDecimal bigDecimal = BigDecimal.valueOf(wxPayScore.getTotalOriginalPrice()); + BigDecimal oncePrice = bigDecimal.divide(BigDecimal.valueOf(wxPayScore.getDeductionQuantity()), 2, RoundingMode.HALF_UP); + row.set("price",oncePrice.multiply(BigDecimal.valueOf(item.getGoingDetailNo()))); + row.set("wx_order_id",item.getOrderId()); + row.set("ticket_time",item.getCancelTime()); + row.set("refund_name",easyLearnOrder.getCustomerName()); + row.set("creation_time",item.getCancelTime()); + row.set("last_modification_date",item.getCancelTime()); + row.set("creation_by",wxOrderMap.get(item.getOrderId())); + row.set("last_modified",wxOrderMap.get(item.getOrderId())); + rows.add(row); + }); + try { + //查询旧表 + DataSourceKey.use("jambox"); + Db.insertBatch("j_contract_refund",rows); + } finally { + DataSourceKey.clear(); + } + } + + @Test + public void getSharingData() throws WxPayException { + List rowList = null; + try { + //查询旧表 + DataSourceKey.use("jambox"); + rowList = DbChain.table("j_wx_pay_profit_sharing") + .select("id") + .select("sub_mch_id") + .select("out_order_no") + .select("transaction_id") + .list(); + } finally { + DataSourceKey.clear(); + } + WxPayService wxPayService = wxPayHandler.getWxPayService(); + List rows = new ArrayList<>(); + rowList.forEach(item->{ + try { + ProfitSharingV3Result profitSharingV3Result = wxPayService.getProfitSharingService().profitSharingQueryV3(item.getString("outOrderNo"), + item.getString("transactionId"),item.getString("subMchId")); + //查询原订单 + WxPayPartnerOrderQueryV3Request wxPayOrderQueryV3Request = new WxPayPartnerOrderQueryV3Request(); + wxPayOrderQueryV3Request.setSubMchId(item.getString("subMchId")); + wxPayOrderQueryV3Request.setTransactionId(item.getString("transactionId")); + WxPayPartnerOrderQueryV3Result wxPayPartnerOrderQueryV3Result = wxPayService.queryPartnerOrderV3(wxPayOrderQueryV3Request); + Row row = new Row(); + String[] split = wxPayPartnerOrderQueryV3Result.getAttach().split("\\|"); + row.set("aaa",profitSharingV3Result.getOutOrderNo()); + row.set("bbb",split[1]); + rows.add(row); + } catch (WxPayException e) { + throw new RuntimeException(e); + } + }); + try { + //查询旧表 + DataSourceKey.use("jambox"); + Db.insertBatch("asds", rows); + } finally { + DataSourceKey.clear(); + } + + } + +} diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/CloudDataController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/CloudDataController.java index fcf81bc..e62bee5 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/CloudDataController.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/CloudDataController.java @@ -109,8 +109,9 @@ public class CloudDataController { @ApiParam("开始日期") @RequestParam(value = "startDate", required = false) String startDate, @ApiParam("结束日期") @RequestParam(value = "endDate", required = false) String endDate, @ApiParam("校区Id") @RequestParam("storeId") String storeId, - @ApiParam("课程id") @RequestParam(value = "courseId", required = false) String courseId) { - Page coursePage = cloudCourseHandler.getCoursePage(page, pageSize, startDate, endDate, storeId, courseId); + @ApiParam("课程id") @RequestParam(value = "courseId", required = false) String courseId, + @ApiParam("班id") @RequestParam(value = "classId", required = false) String classId) { + Page coursePage = cloudCourseHandler.getCoursePage(page, pageSize, startDate, endDate, storeId, courseId, classId); return R.ok(coursePage); } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessDetail.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessDetail.java index 0dcc022..3c7fc99 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessDetail.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessDetail.java @@ -40,6 +40,11 @@ public class BusinessDetail extends BaseEntity implements Serializable { @Id private String businessId; + /** + * 事务员工id + */ + private String businessStaffId; + /** * 品牌id */ diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessStaff.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessStaff.java index d92a6af..90fb2c9 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessStaff.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/entity/BusinessStaff.java @@ -27,6 +27,12 @@ import lombok.experimental.Accessors; @Table(value = "cp_oam_business_staff", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false) public class BusinessStaff extends BaseEntity implements Serializable { + /** + * 主键 + */ + @Id + private String id; + /** * 事务id */ diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/BusinessServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/BusinessServiceImpl.java index 2567bc1..2347477 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/BusinessServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/BusinessServiceImpl.java @@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cpop.common.utils.StringUtils; import com.cpop.common.utils.bean.BeanUtils; -import com.cpop.core.base.entity.LoginUser; import com.cpop.core.base.entity.PageDomain; import com.cpop.core.base.exception.ServiceException; import com.cpop.core.utils.SecurityUtils; @@ -28,8 +27,12 @@ import com.cpop.oam.business.service.BusinessStaffService; import com.cpop.oam.business.vo.BusinessInfoPageVo; import com.cpop.oam.business.vo.BusinessPageVo; import com.cpop.oam.business.vo.PersonBusinessInfoVo; +import com.cpop.system.business.bo.StoreRenewBo; import com.cpop.system.business.entity.Store; +import com.cpop.system.business.entity.StoreSign; +import com.cpop.system.business.service.StoreRenewService; import com.cpop.system.business.service.StoreService; +import com.cpop.system.business.service.StoreSignService; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; @@ -39,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.URL; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -51,6 +55,7 @@ import static com.cpop.oam.business.entity.table.BusinessTableDef.BUSINESS; import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; import static com.cpop.system.business.entity.table.BrandTableDef.BRAND; import static com.cpop.system.business.entity.table.StoreLicenseTableDef.STORE_LICENSE; +import static com.cpop.system.business.entity.table.StoreSignTableDef.STORE_SIGN; import static com.cpop.system.business.entity.table.StoreTableDef.STORE; import static com.mybatisflex.core.query.QueryMethods.distinct; import static com.mybatisflex.core.query.QueryMethods.select; @@ -79,12 +84,12 @@ public class BusinessServiceImpl extends ServiceImpl i QueryWrapper queryWrapper = QueryWrapper.create(); //运营人员 if (loginUserInfo.getInteger("staffType") == 1) { - queryWrapper.leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS.ID)) + queryWrapper + .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS.ID)) .and(BUSINESS_STAFF.STAFF_ID.eq(loginUserInfo.getString("id"))); } return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()), - queryWrapper - .select(BUSINESS.ID, BUSINESS.BUSINESS_LEVEL, BUSINESS.BUSINESS_TYPE, BUSINESS.DESC, BUSINESS.START_DATE, BUSINESS.END_DATE, BUSINESS.ALL_SURPLUS_QUANTITY, BUSINESS.REMARK, BUSINESS.STATUS) + queryWrapper.select(BUSINESS.ID, BUSINESS.BUSINESS_LEVEL, BUSINESS.BUSINESS_TYPE, BUSINESS.DESC, BUSINESS.START_DATE, BUSINESS.END_DATE, BUSINESS.ALL_SURPLUS_QUANTITY, BUSINESS.REMARK, BUSINESS.STATUS) //员工表 .select(STAFF.NAME.as(BusinessPageVo::getInitiatorName)) .leftJoin(STAFF).on(STAFF.ID.eq(BUSINESS.INITIATOR_ID)) @@ -158,10 +163,11 @@ public class BusinessServiceImpl extends ServiceImpl i if (bo.getButtJoint().isEmpty()){ throw new ServiceException("对接人不能为空"); } - //导入数据 - List businessDistributeDataList = new ArrayList<>(); - List businessStaffList = new ArrayList<>(); + //员工相关数据 + BusinessStaffService businessStaffService = SpringUtils.getBean(BusinessStaffService.class); bo.getButtJoint().forEach(item -> { + //导入数据 + List businessDistributeDataList = new ArrayList<>(); //对接文件 JSONObject jsonObject = JSONArray.parseArray(item.getBusinessDocUrl()).getJSONObject(0); String url = jsonObject.getString("url"); @@ -188,6 +194,10 @@ public class BusinessServiceImpl extends ServiceImpl i if (businessDistributeDataList.isEmpty()) { throw new ServiceException("导入的excel存在空文件,请检查后重新操作"); } + //负责员工 + BusinessStaff businessStaff = BeanUtils.mapToClass(item, BusinessStaff.class); + businessStaff.setBusinessId(businessId).setSurplusQuantity(businessDistributeDataList.size()).setStaffId(item.getStaffId()); + businessStaffService.save(businessStaff); List businessDetails = SpringUtils.getBean(StoreService.class).queryChain() .select(STORE.BRAND_ID, STORE.ID.as(BusinessDetail::getStoreId)) .where(STORE.ID.in(businessDistributeDataList.stream().map(BusinessDistributeDto::getStoreId).collect(Collectors.toSet()))) @@ -197,17 +207,13 @@ public class BusinessServiceImpl extends ServiceImpl i } businessDetails.forEach(inner -> { inner.setBusinessId(businessId); + inner.setBusinessStaffId(businessStaff.getId()); }); //保存详情 SpringUtils.getBean(BusinessDetailService.class).saveBatch(businessDetails); - //负责员工 - BusinessStaff businessStaff = BeanUtils.mapToClass(item, BusinessStaff.class); - businessStaff.setBusinessId(businessId).setSurplusQuantity(businessDetails.size()); - businessStaffList.add(businessStaff); + //批量录入 flag.updateAndGet(v -> v + businessDetails.size()); }); - //保存负责员工 - SpringUtils.getBean(BusinessStaffService.class).saveBatch(businessStaffList); return flag.get(); } @@ -249,7 +255,7 @@ public class BusinessServiceImpl extends ServiceImpl i //获取所有无人处理的校区 .or(STORE.ID.notIn(select(distinct(BUSINESS_DETAIL.STORE_ID)) .from(BUSINESS_DETAIL) - .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS_DETAIL.BUSINESS_ID)) + .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.ID.eq(BUSINESS_DETAIL.BUSINESS_STAFF_ID)) .where(BUSINESS_STAFF.STAFF_ID.ne(loginUserInfo.getString("id")) .and(BUSINESS_DETAIL.STORE_ID.isNotNull())) ))); @@ -269,7 +275,7 @@ public class BusinessServiceImpl extends ServiceImpl i .leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID)) .leftJoin(STORE_LICENSE).on(STORE_LICENSE.STORE_ID.eq(STORE.ID)) .leftJoin(BUSINESS_DETAIL).on(BUSINESS_DETAIL.STORE_ID.eq(STORE.ID)) - .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS_DETAIL.BUSINESS_ID)) + .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.ID.eq(BUSINESS_DETAIL.BUSINESS_STAFF_ID)) .leftJoin(STAFF).on(STAFF.ID.eq(BUSINESS_STAFF.STAFF_ID)) //品牌或校区名模糊查询 .and(BRAND.BRAND_NAME.like(bo.getBrandOrStore()).or(STORE.STORE_NAME.like(bo.getBrandOrStore()))) @@ -312,7 +318,7 @@ public class BusinessServiceImpl extends ServiceImpl i .select(STORE.STORE_NAME, STORE.PERSON_CHARGE, STORE.PHONE, STORE.ID.as(BusinessInfoPageVo::getStoreId)) //营业执照 .select(STORE_LICENSE.LICENSE_NAME, STORE_LICENSE.LICENSE_USER_NAME, STORE_LICENSE.LICENSE_ADDR) - .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.BUSINESS_ID.eq(BUSINESS_DETAIL.BUSINESS_ID)) + .leftJoin(BUSINESS_STAFF).on(BUSINESS_STAFF.ID.eq(BUSINESS_DETAIL.BUSINESS_STAFF_ID)) .leftJoin(STAFF).on(STAFF.ID.eq(BUSINESS_STAFF.STAFF_ID)) .leftJoin(BRAND).on(BRAND.ID.eq(BUSINESS_DETAIL.BRAND_ID)) .leftJoin(STORE).on(STORE.ID.eq(BUSINESS_DETAIL.STORE_ID)) @@ -348,8 +354,14 @@ public class BusinessServiceImpl extends ServiceImpl i businessDetail = new BusinessDetail(); //获取校区数据 Store store = SpringUtils.getBean(StoreService.class).getById(bo.getStoreId()); + JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo(); + //获取事务员工 + BusinessStaff businessStaff = SpringUtils.getBean(BusinessStaffService.class).getOne(QueryWrapper.create() + .where(BUSINESS_STAFF.BUSINESS_ID.eq(bo.getBusinessId())) + .and(BUSINESS_STAFF.STAFF_ID.eq(loginUserInfo.getString("id")))); businessDetail.setBrandId(store.getBrandId()).setStoreId(store.getId()).setBusinessId(bo.getBusinessId()); - businessDetail.setDetailStatus(bo.getDetailStatus()).setDetailDesc(bo.getDetailDesc()).setDetailRecordTime(LocalDateTime.now()); + businessDetail.setDetailStatus(bo.getDetailStatus()).setDetailDesc(bo.getDetailDesc()).setDetailRecordTime(LocalDateTime.now()) + .setBusinessStaffId(businessStaff.getId()); //新增或修改 businessDetailService.save(businessDetail); } @@ -370,6 +382,23 @@ public class BusinessServiceImpl extends ServiceImpl i .where(BUSINESS_STAFF.BUSINESS_ID.eq(businessDetail.getBusinessId())) .and(BUSINESS_STAFF.STAFF_ID.eq(loginUserInfo.getString("id"))) .update(); + //机构签约 + if (business.getBusinessType()== 1){ + //校区自动延期一年 + StoreSignService storeSignService = SpringUtils.getBean(StoreSignService.class); + StoreSign storeSign = storeSignService.getOne(QueryWrapper.create().where(STORE_SIGN.STORE_ID.eq(bo.getStoreId()))); + if (storeSign == null) { + storeSign = new StoreSign(); + storeSign.setStoreId(bo.getStoreId()); + storeSign.setSignStaffId(loginUserInfo.getString("id")); + storeSignService.save(storeSign); + } + /*storeSign.setSignStaffId(loginUserInfo.getString("id")); + StoreRenewService storeRenewService = SpringUtils.getBean(StoreRenewService.class); + StoreRenewBo storeRenewBo = new StoreRenewBo(); + storeRenewBo.setStoreId(bo.getStoreId()).setRenewType(1).setRenewDesc("机构签约自动续费一年").setRenewDate(LocalDate.now().plusYears(1)); + storeRenewService.storeRenew(storeRenewBo);*/ + } } } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DataImportServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DataImportServiceImpl.java index b78033e..2711ee8 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DataImportServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DataImportServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.exception.ExcelDataConvertException; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; +import com.cpop.api.tencent.wxWork.handler.WebHookSendHandler; import com.cpop.common.utils.StringUtils; import com.cpop.common.utils.bean.BeanUtils; import com.cpop.core.base.entity.PageDomain; @@ -23,6 +24,7 @@ import com.cpop.oam.business.bo.DataImportPageBo; import com.cpop.oam.business.dto.DataImportDto; import com.cpop.oam.business.dto.DataImportParamsDto; import com.cpop.oam.business.vo.DataImportPageVo; +import com.cpop.oam.framework.constant.WebHookKeyConstant; import com.cpop.system.business.vo.SysFileVo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; @@ -38,6 +40,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import static com.alibaba.excel.cache.Ehcache.BATCH_COUNT; @@ -114,8 +117,23 @@ public class DataImportServiceImpl extends ServiceImpl(), + "==========有一条校区数据导入失败==========\n" + + "导入id:" + dataImport.getId() + "\n" + + "校区id:" + dataImport.getStoreId() + "\n", + true); + } catch (IOException ex) { + throw new ServiceException("发送消息通知失败!"); + } + } } /** diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java index 7298730..9c03821 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/DutyServiceImpl.java @@ -145,7 +145,7 @@ public class DutyServiceImpl extends ServiceImpl implements Du LocalDate now = LocalDate.now(); //获取当天值班员工 Duty one = this.queryChain().where(DUTY.DUTY_DATE.eq(now)).one(); - if (one != null){ + if (one != null) { //获取当天技术值班人员 StaffDto staff = DbChain.table(SYS_USER).select(SYS_USER.PHONE_NUMBER, STAFF.NAME).from(SYS_USER) .leftJoin(STAFF).on(STAFF.USER_ID.eq(SYS_USER.ID)) diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java index 678a5e8..568fc28 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderRecordListVo.java @@ -48,7 +48,7 @@ public class TaskWorkOrderRecordListVo { * 员工类型(0:技术人员;1:售后人员;2:管理人员) */ @ApiModelProperty("员工类型(0:技术人员;1:售后人员;2:管理人员)") - private String recordStaffType; + private Integer recordStaffType; /** * 记录内容 diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/config/InitConfig.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/config/InitConfig.java index ffce44d..780dabb 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/framework/config/InitConfig.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/config/InitConfig.java @@ -2,14 +2,25 @@ package com.cpop.oam.framework.config; import com.cpop.core.base.enums.InitRoleEnum; import com.cpop.core.utils.SpringUtils; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.service.TaskService; import com.cpop.system.business.entity.Role; import com.cpop.system.business.service.RoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.time.Duration; +import java.time.LocalDate; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; import static org.springframework.integration.config.xml.IntegrationNamespaceUtils.ROLE; /** @@ -19,6 +30,7 @@ import static org.springframework.integration.config.xml.IntegrationNamespaceUti * @version 1.0.0 */ @Component +@Slf4j public class InitConfig { /** @@ -26,6 +38,7 @@ public class InitConfig { */ @PostConstruct public void init() { + log.info("===========================项目启动角色初始化==========================="); // 检查角色初始化 RoleService roleService = SpringUtils.getBean(RoleService.class); for (InitRoleEnum value : InitRoleEnum.values()) { diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/OamScheduledTasks.java b/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/OamScheduledTasks.java index 9b6bada..1a66f35 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/OamScheduledTasks.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/framework/tasks/OamScheduledTasks.java @@ -27,6 +27,7 @@ import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; */ @Slf4j @Configuration +@Profile("prod") public class OamScheduledTasks { @Autowired @@ -38,7 +39,6 @@ public class OamScheduledTasks { * @date 2023/11/22 18:08 * @return: void */ - @Profile(value = "prod") @Scheduled(cron = "0 0 9 * * *") public void dutyNotice() { dutyService.dutyNotice(); @@ -49,7 +49,6 @@ public class OamScheduledTasks { * @author DB * @since 2023/12/10 */ - @Profile(value = "prod") @Scheduled(cron = "0 20 0 * * *") public void syncImportData() throws InterruptedException { log.info("==============开始同步校区数据==========="); @@ -70,7 +69,6 @@ public class OamScheduledTasks { * @author DB * @since 2023/12/11 */ - @Profile(value = {"prod", "test"}) @Scheduled(cron = "0 10 0 * * *") public void checkTaskWhetherFinish() { log.info("==============开始检查进行中任务==========="); diff --git a/Cpop-System/src/main/java/com/cpop/system/business/bo/MenuBo.java b/Cpop-System/src/main/java/com/cpop/system/business/bo/MenuBo.java index c950766..211c514 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/bo/MenuBo.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/bo/MenuBo.java @@ -109,6 +109,7 @@ public class MenuBo implements Serializable { /** * 是否忽略KeepAlive缓存 */ + @NotNull(message = "是否忽略KeepAlive缓存不能为空") @ApiModelProperty("是否忽略KeepAlive缓存") private Boolean ignoreKeepAlive; diff --git a/Cpop-System/src/main/java/com/cpop/system/business/bo/StoreRenewBo.java b/Cpop-System/src/main/java/com/cpop/system/business/bo/StoreRenewBo.java new file mode 100644 index 0000000..000b252 --- /dev/null +++ b/Cpop-System/src/main/java/com/cpop/system/business/bo/StoreRenewBo.java @@ -0,0 +1,65 @@ +package com.cpop.system.business.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author DB + * @version 1.0.0 + * @since 2024-01-11 14:41 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "StoreRenewBo", description = "校区续费请求") +public class StoreRenewBo { + + /** + * 校区id + */ + @NotBlank(message = "校区id不能为空") + @ApiModelProperty(value = "校区id", required = true) + private String storeId; + + /** + * 续费金额 + */ + @ApiModelProperty(value = "续费金额") + private BigDecimal renewAmount = BigDecimal.ZERO; + + /** + * 续费日期 + */ + @NotNull(message = "不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "续费日期", required = true) + private LocalDate renewDate; + + /** + * 续费描述 + */ + @NotBlank(message = "续费描述不能为空") + @ApiModelProperty(value = "续费描述", required = true) + private String renewDesc; + + /** + * 附件 + */ + @NotBlank(message = "附件不能为空") + @ApiModelProperty(value = "附件", required = true) + private String annexUrl; + + /** + * 类型(0:续费;1:延期) + */ + @NotNull(message = "类型不能为空") + @ApiModelProperty(value = "类型(0:续费;1:延期)", required = true) + private Integer renewType; +} diff --git a/Cpop-System/src/main/java/com/cpop/system/business/bo/SyncBrandAndStoreBo.java b/Cpop-System/src/main/java/com/cpop/system/business/bo/SyncBrandAndStoreBo.java index 9c79a88..65b0125 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/bo/SyncBrandAndStoreBo.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/bo/SyncBrandAndStoreBo.java @@ -118,5 +118,17 @@ public class SyncBrandAndStoreBo { */ @ApiModelProperty(value = "营业执照图片地址") private String licensePicUrl; + + /** + * 经度 + */ + @ApiModelProperty(value = "经度") + private String longitude; + + /** + * 纬度 + */ + @ApiModelProperty(value = "纬度") + private String latitude; } } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/controller/StoreController.java b/Cpop-System/src/main/java/com/cpop/system/business/controller/StoreController.java index 2e8e3a4..b6bdcb4 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/controller/StoreController.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/controller/StoreController.java @@ -2,15 +2,16 @@ package com.cpop.system.business.controller; import com.cpop.core.base.R; import com.cpop.system.business.bo.StorePageBo; +import com.cpop.system.business.bo.StoreRenewBo; +import com.cpop.system.business.service.StoreRenewService; import com.cpop.system.business.vo.StorePageVo; import com.mybatisflex.core.paginate.Page; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import com.cpop.system.business.service.StoreService; -import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; /** @@ -27,12 +28,15 @@ public class StoreController { @Autowired private StoreService storeService; + @Autowired + private StoreRenewService storeRenewService; + /** - * @Description: 查询校区分页列表 - * @param bo + * 查询校区分页列表 + * @param bo 请求参数 * @return R> - * @Author Administrator - * @Date: 2023/6/7 0007 10:18 + * @author Administrator + * @since 2023/6/7 0007 10:18 */ @PreAuthorize("@aps.hasPermission('brandStore:store:list')") @ApiOperation("查询校区分页列表") @@ -42,4 +46,17 @@ public class StoreController { return R.ok(pageVo); } + /** + * 校区续费 + * @author DB + * @since 2024/1/11 + * @param bo 请求参数 + * @return R + */ + @ApiOperation("校区续费") + @PutMapping("/storeRenew") + public R storeRenew(@RequestBody @Validated StoreRenewBo bo) { + storeRenewService.storeRenew(bo); + return R.ok(); + } } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/entity/Store.java b/Cpop-System/src/main/java/com/cpop/system/business/entity/Store.java index e62baf5..7dc4bc2 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/entity/Store.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/entity/Store.java @@ -82,6 +82,16 @@ public class Store extends BaseEntity implements Serializable { */ private String wxMchId; + /** + * 经度 + */ + private String longitude; + + /** + * 纬度 + */ + private String latitude; + /** * 逻辑删除(0否1是) */ diff --git a/Cpop-System/src/main/java/com/cpop/system/business/entity/StoreRenew.java b/Cpop-System/src/main/java/com/cpop/system/business/entity/StoreRenew.java index fd0cfbe..954e95b 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/entity/StoreRenew.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/entity/StoreRenew.java @@ -63,6 +63,16 @@ public class StoreRenew extends BaseEntity implements Serializable { */ private String renewDesc; + /** + * 附件 + */ + private String annexUrl; + + /** + * 类型(0:续费;1:延期) + */ + private Integer renewType; + /** * 逻辑删除(0否1是) */ diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/StoreRenewService.java b/Cpop-System/src/main/java/com/cpop/system/business/service/StoreRenewService.java index 55e611d..d231cca 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/StoreRenewService.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/StoreRenewService.java @@ -1,5 +1,6 @@ package com.cpop.system.business.service; +import com.cpop.system.business.bo.StoreRenewBo; import com.mybatisflex.core.service.IService; import com.cpop.system.business.entity.StoreRenew; @@ -11,4 +12,11 @@ import com.cpop.system.business.entity.StoreRenew; */ public interface StoreRenewService extends IService { + /** + * 校区续费 + * @author DB + * @since 2024/1/11 + * @param bo 请求参数 + */ + void storeRenew(StoreRenewBo bo); } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/BrandServiceImpl.java b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/BrandServiceImpl.java index 18b3c65..019ae90 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/BrandServiceImpl.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/BrandServiceImpl.java @@ -108,10 +108,9 @@ public class BrandServiceImpl extends ServiceImpl implements try { DataSourceKey.use("jambox"); storeList = Db.selectListByQuery(QueryWrapper.create() - .select("store_id as storeCloudId","mechanism as storeName","address") + .select("store_id as storeCloudId", "mechanism as storeName", "address as storeAddr", "charge_name as personCharge", "charge_phone as phone", "X as longitude", "Y as latitude") .from("t_mechanism_info") .where("brand_id = ?", jamboxBrandId)); - } finally { DataSourceKey.clear(); } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreRenewServiceImpl.java b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreRenewServiceImpl.java index 4674da7..052dec6 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreRenewServiceImpl.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreRenewServiceImpl.java @@ -1,10 +1,39 @@ package com.cpop.system.business.service.impl; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.StringUtils; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.service.RedisService; +import com.cpop.core.service.impl.RedisServiceImpl; +import com.cpop.core.utils.SecurityUtils; +import com.cpop.core.utils.SpringUtils; +import com.cpop.system.business.bo.StoreRenewBo; +import com.cpop.system.business.service.StoreSignService; +import com.cpop.system.framework.constant.SystemRedisKey; +import com.mybatisflex.core.datasource.DataSourceKey; +import com.mybatisflex.core.row.DbChain; +import com.mybatisflex.core.row.Row; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.cpop.system.business.entity.StoreRenew; import com.cpop.system.business.mapper.StoreRenewMapper; import com.cpop.system.business.service.StoreRenewService; +import org.bouncycastle.util.StoreException; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.TimeoutUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisClientConfig; + +import javax.annotation.Resource; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.TimeUnit; + +import static com.cpop.system.business.entity.table.StoreSignTableDef.STORE_SIGN; /** * 校区续费表 服务层实现。 @@ -15,4 +44,60 @@ import org.springframework.stereotype.Service; @Service("storeRenewService") public class StoreRenewServiceImpl extends ServiceImpl implements StoreRenewService { + /** + * 校区续费 + * @author DB + * @since 2024/1/11 + * @param bo 请求参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void storeRenew(StoreRenewBo bo) { + StoreRenew storeRenew = BeanUtils.mapToClass(bo, StoreRenew.class); + JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo(); + storeRenew.setRenewStaffId(loginUserInfo.getString("id")); + this.save(storeRenew); + //修改校区签约到期时间 + SpringUtils.getBean(StoreSignService.class).updateChain() + .set(STORE_SIGN.EXPIRE_DATE, bo.getRenewDate()) + .where(STORE_SIGN.STORE_ID.eq(bo.getStoreId())) + .update(); + //修改缓存 + SpringUtils.getBean(RedisService.class).setCacheObject(SystemRedisKey.STORE_SIGN_EXPIRE_DATE + bo.getStoreId(), + bo.getRenewDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + , 24, TimeUnit.HOURS); + storeRenewOld(bo,loginUserInfo); + } + + /** + * 同步更新旧校区数据 + * @author DB + * @since 2024/1/11 + * @param bo 请求参数 + */ + @Deprecated + private void storeRenewOld(StoreRenewBo bo,JSONObject loginUserInfo) { + //线上 + if (StringUtils.equals(SpringUtils.getActiveProfile(), "prod")) { + //获取云校区 + Row storeExtend = DbChain.table("cp_j_store_extend").select("store_cloud_id").where("store_id = ?", bo.getStoreId()).one(); + try { + DataSourceKey.use("jambox"); + //修改数据库 + DbChain.table("t_signContract_mechanism") + .set("end_time", bo.getRenewDate()) + .set("last_modified", loginUserInfo.getString("id")) + .where("deleted = 1") + .and("store_id = ?", storeExtend.getString("storeCloudId")) + .update(); + } finally { + DataSourceKey.clear(); + } + Jedis jedis = new Jedis("106.52.49.102", 6333); + jedis.auth("Jambox.123*"); + jedis.select(1); + jedis.set("endTime" + storeExtend.getString("storeCloudId"), bo.getRenewDate().toString()); + jedis.expire("endTime" + bo.getStoreId(), TimeoutUtils.toMillis(24, TimeUnit.MINUTES)); + } + } } diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreServiceImpl.java b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreServiceImpl.java index 850da2c..8f61425 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreServiceImpl.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/StoreServiceImpl.java @@ -61,8 +61,9 @@ public class StoreServiceImpl extends ServiceImpl implements return this.getMapper().paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()), QueryWrapper.create().select(STORE.ID, STORE.STORE_NAME, STORE.SOURCE_TYPE, STORE.CREATE_TIME, STORE.STORE_ADDR, STORE.PERSON_CHARGE, STORE.PHONE, STORE.HAVE_ACTIVE, STORE.HAVE_COUNSELOR) .select(STORE_SIGN.EXPIRE_DATE) - .select(BRAND.BRAND_NAME).from(STORE) + .select(BRAND.BRAND_NAME,BRAND.ID.as(StorePageVo::getBrandId)) .select("cp_j_store_extend.store_cloud_id as storeCloudId") + .from(STORE) .leftJoin(STORE_SIGN).on(STORE_SIGN.STORE_ID.eq(STORE.ID)) .leftJoin(BRAND).on(BRAND.ID.eq(STORE.BRAND_ID)) .leftJoin("cp_j_store_extend").on("`cp_j_store_extend`.`store_id` = `cp_sys_store`.`id`") diff --git a/Cpop-System/src/main/java/com/cpop/system/framework/constant/SystemRedisKey.java b/Cpop-System/src/main/java/com/cpop/system/framework/constant/SystemRedisKey.java new file mode 100644 index 0000000..3bb5f2a --- /dev/null +++ b/Cpop-System/src/main/java/com/cpop/system/framework/constant/SystemRedisKey.java @@ -0,0 +1,14 @@ +package com.cpop.system.framework.constant; + +/** + * @author DB + * @version 1.0.0 + * @since 2024-01-11 15:33 + */ +public interface SystemRedisKey { + + /** + * 校区到期日期 + */ + String STORE_SIGN_EXPIRE_DATE = "oam:storeSign:expireDate:"; +}