修订数据库排序集;调整与导入先学后付;修订定时器问题;添加云数据查询

This commit is contained in:
DB 2024-01-12 21:15:01 +08:00
parent ef8ff160ca
commit 6a4011ad4a
39 changed files with 1026 additions and 120 deletions

View File

@ -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;
}

View File

@ -29,6 +29,7 @@ public class CloudClassDto {
/**
* 班主任
*/
@SerializedName("staffName")
private String classTeacherName;
/**

View File

@ -17,6 +17,7 @@ public class CloudClassStudentDto {
/**
* 班级名
*/
@SerializedName("classesName")
private String className;
/**

View File

@ -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;
/**
* 创建时间
*/

View File

@ -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;
/**
* 状态操作时间
*/

View File

@ -28,6 +28,7 @@ public class CloudOrderDto {
/**
* 关联课卡名
*/
@SerializedName("periodName")
private String classCardName;
/**
@ -99,6 +100,7 @@ public class CloudOrderDto {
/**
* 顾问名
*/
@SerializedName("staffName")
private String counselorName;
}

View File

@ -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;
}

View File

@ -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<CloudClassCardDto> page = Page.of(pageNum, pageSize);
ExtendPage<CloudClassCardDto> page = ExtendPage.of(pageNum, pageSize);
if (jsonObject != null) {
if (jsonObject.getBoolean("success")) {
List<CloudClassCardDto> courseDtoList = jsonObject.getJSONArray("list").toJavaList(CloudClassCardDto.class);
page.setRecords(courseDtoList);
page.setTotalPage(jsonObject.getInteger("total"));
page.setTotalRow(jsonObject.getInteger("total"));
HashMap<String, Object> 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"));

View File

@ -40,9 +40,10 @@ public class CloudCourseHandler {
* @param endDate 结束日期
* @param storeId 云校区id
* @param courseId 云课程id
* @param classId 云课程id
* @return Page<CloudCustomerDto>
*/
public Page<CloudCourseDto> getCoursePage(Integer pageNum, Integer pageSize, String startDate, String endDate, String storeId, String courseId) {
public Page<CloudCourseDto> 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);

View File

@ -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

View File

@ -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_";
/**
* 主入口

View File

@ -11,6 +11,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 果酱-放心学订单表 实体类

View File

@ -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;
/**

View File

@ -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是
*/

View File

@ -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);
}

View File

@ -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"]

View File

@ -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;

View File

@ -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<FinanceReimburse> list = financeReimburseService.list();
List<FinanceReimburse> 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<Map<String, String>> urls = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
Map<String, String> 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);
}
}

View File

@ -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<Row> 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<String, String> 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<Row> 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<Row> 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<PayScorePlanDetailResult> planDetailList = result.getPlanDetailList();
List<WxPayScoreDetail> 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<Row> 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<String, Row> 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<WxPayScore> payScoreList = wxPayScoreService.list();
Map<String, WxPayScore> wxPayScoreMap = payScoreList.stream().collect(Collectors.toMap(WxPayScore::getOutPlanId, item -> item));
List<EasyLearnOrderDetail> easyLearnOrderDetails = new ArrayList<>();
List<EasyLearnOrderExtend> easyLearnOrderExtends = new ArrayList<>();
List<EasyLearnOrder> 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<Row> brandList = null;
List<Row> storeList = null;
List<Row> ticketList = null;
List<EasyLearnOrderExtend> 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<String> 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<String, String> brandMap = brandList.stream().collect(Collectors.toMap(item -> item.getString("brandCloudId"), item -> item.getString("id")));
Map<String, String> storeMap = storeList.stream().collect(Collectors.toMap(item -> item.getString("storeCloudId"), item -> item.getString("id")));
Map<String, String> brandCloudMap = SpringUtils.getBean(BrandExtendService.class).list().stream().collect(Collectors.toMap(BrandExtend::getBrandId, BrandExtend::getBrandCloudId));
Map<String, String> storeCloudMap = SpringUtils.getBean(StoreExtendService.class).list().stream().collect(Collectors.toMap(StoreExtend::getStoreId, StoreExtend::getStoreCloudId));
Map<String, EasyLearnOrder> 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<String, String> wxOrderMap = ticketList.stream().collect(Collectors.toMap(item -> item.getString("wxOrderId"), item -> item.getString("userId")));
//获取签约计划
Map<String, WxPayScore> 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<Row> 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<Row> 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<Row> 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();
}
}
}

View File

@ -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<CloudCourseDto> 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<CloudCourseDto> coursePage = cloudCourseHandler.getCoursePage(page, pageSize, startDate, endDate, storeId, courseId, classId);
return R.ok(coursePage);
}

View File

@ -40,6 +40,11 @@ public class BusinessDetail extends BaseEntity implements Serializable {
@Id
private String businessId;
/**
* 事务员工id
*/
private String businessStaffId;
/**
* 品牌id
*/

View File

@ -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
*/

View File

@ -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<BusinessMapper, Business> 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<BusinessMapper, Business> i
if (bo.getButtJoint().isEmpty()){
throw new ServiceException("对接人不能为空");
}
//导入数据
List<BusinessDistributeDto> businessDistributeDataList = new ArrayList<>();
List<BusinessStaff> businessStaffList = new ArrayList<>();
//员工相关数据
BusinessStaffService businessStaffService = SpringUtils.getBean(BusinessStaffService.class);
bo.getButtJoint().forEach(item -> {
//导入数据
List<BusinessDistributeDto> 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<BusinessMapper, Business> 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<BusinessDetail> 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<BusinessMapper, Business> 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<BusinessMapper, Business> 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<BusinessMapper, Business> 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<BusinessMapper, Business> 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<BusinessMapper, Business> 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<BusinessMapper, Business> 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);*/
}
}
}

View File

@ -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<DataImportMapper, DataImp
} else {
dataImportParamsDto.setStoreId(dataImport.getStoreId());
}
SpringUtils.getBean(RestTemplate.class).postForObject(JamboxCloudUrl.DATA_IMPORT, dataImportParamsDto, String.class);
this.updateChain().set(DATA_IMPORT.IMPORT_STATUS, true).where(DATA_IMPORT.ID.eq(dataImport.getId())).update();
try {
SpringUtils.getBean(RestTemplate.class).postForObject(JamboxCloudUrl.DATA_IMPORT, dataImportParamsDto, String.class);
} catch (Exception e) {
//数据导入异常通知
try {
SpringUtils.getBean(WebHookSendHandler.class)
.webHookSendText(WebHookKeyConstant.PRODUCT_BOT,
new ArrayList<>(),
"==========有一条校区数据导入失败==========\n" +
"导入id:" + dataImport.getId() + "\n" +
"校区id:" + dataImport.getStoreId() + "\n",
true);
} catch (IOException ex) {
throw new ServiceException("发送消息通知失败!");
}
}
}
/**

View File

@ -145,7 +145,7 @@ public class DutyServiceImpl extends ServiceImpl<DutyMapper, Duty> 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))

View File

@ -48,7 +48,7 @@ public class TaskWorkOrderRecordListVo {
* 员工类型(0:技术人员;1:售后人员;2:管理人员)
*/
@ApiModelProperty("员工类型(0:技术人员;1:售后人员;2:管理人员)")
private String recordStaffType;
private Integer recordStaffType;
/**
* 记录内容

View File

@ -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()) {

View File

@ -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("==============开始检查进行中任务===========");

View File

@ -109,6 +109,7 @@ public class MenuBo implements Serializable {
/**
* 是否忽略KeepAlive缓存
*/
@NotNull(message = "是否忽略KeepAlive缓存不能为空")
@ApiModelProperty("是否忽略KeepAlive缓存")
private Boolean ignoreKeepAlive;

View File

@ -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;
}

View File

@ -118,5 +118,17 @@ public class SyncBrandAndStoreBo {
*/
@ApiModelProperty(value = "营业执照图片地址")
private String licensePicUrl;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
private String longitude;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
private String latitude;
}
}

View File

@ -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<PageVo<CampusPageListVo>>
* @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<Void>
*/
@ApiOperation("校区续费")
@PutMapping("/storeRenew")
public R<Void> storeRenew(@RequestBody @Validated StoreRenewBo bo) {
storeRenewService.storeRenew(bo);
return R.ok();
}
}

View File

@ -82,6 +82,16 @@ public class Store extends BaseEntity implements Serializable {
*/
private String wxMchId;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
/**
* 逻辑删除0否1是
*/

View File

@ -63,6 +63,16 @@ public class StoreRenew extends BaseEntity implements Serializable {
*/
private String renewDesc;
/**
* 附件
*/
private String annexUrl;
/**
* 类型(0:续费;1:延期)
*/
private Integer renewType;
/**
* 逻辑删除0否1是
*/

View File

@ -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<StoreRenew> {
/**
* 校区续费
* @author DB
* @since 2024/1/11
* @param bo 请求参数
*/
void storeRenew(StoreRenewBo bo);
}

View File

@ -108,10 +108,9 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> 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();
}

View File

@ -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<StoreRenewMapper, StoreRenew> 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));
}
}
}

View File

@ -61,8 +61,9 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> 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`")

View File

@ -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:";
}