Merge remote-tracking branch 'origin/main'

# Conflicts:
#	src/main/resources/db/menu/init_tour_menu.sql
#	src/main/resources/db/tour_setting_create.sql
#	src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js
#	src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js
#	src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js
This commit is contained in:
2026-07-14 16:27:39 +08:00
95 changed files with 1273 additions and 2238 deletions
@@ -49,7 +49,7 @@ public class Sys_user extends BaseModel implements Serializable {
@Column
@Comment("性别")
@ColDefine(type = ColType.VARCHAR, width = 10)
@DataCenterColumn(name = "", key = "XBM", dict = "USER_SEX")
@DataCenterColumn(name = "", key = "XB", dict = "USER_SEX")
private String sex;
@Column
@@ -266,6 +266,11 @@ public class Sys_user extends BaseModel implements Serializable {
@DataCenterColumn(name = "单位", key = "SZDWH")
private String unitId;
@Column
@Comment("三级单位ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String threeUnitId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 100)
private String unitPath;
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.event.role.RoleEventMsg;
@@ -50,6 +51,8 @@ import java.util.stream.Collectors;
@Slf4j
@IocBean
public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService {
private static final int BATCH_SIZE = 500;
private static final int ROLE_DELETE_BATCH_SIZE = 50;
@Inject
private Dao dao;
@@ -180,6 +183,21 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
List<Sys_user_history> histories = new CopyOnWriteArrayList<>();
List<String> addMemberUserIds = Collections.synchronizedList(new ArrayList<>());
List<String> removeMemberUserIds = Collections.synchronizedList(new ArrayList<>());
Set<String> sourceLoginNames = sources.stream()
.map(Sys_user_source::getLoginname)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
List<String> leaveUserIds = sysUsers.stream()
.filter(user -> StrUtil.isNotBlank(user.getLoginname()))
.filter(user -> !sourceLoginNames.contains(user.getLoginname()))
.map(Sys_user::getId)
.toList();
List<String> leaveMemberUserIds = sysUsers.stream()
.filter(user -> StrUtil.isNotBlank(user.getLoginname()))
.filter(user -> !sourceLoginNames.contains(user.getLoginname()))
.filter(user -> Boolean.TRUE.equals(user.getMember()))
.map(Sys_user::getId)
.toList();
// 处理每条数据
for (Sys_user_source source : sources) {
@@ -235,7 +253,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
CompletableFuture<Void> insertTask = CompletableFuture.runAsync(() -> {
log.info("新增用户: {} 个", needInitUserList.size());
// 分批处理,每批200条
List<List<Sys_user>> batches = ListUtil.split(needInitUserList, 500);
List<List<Sys_user>> batches = ListUtil.split(needInitUserList, BATCH_SIZE);
batches.forEach(batch -> {
try {
dao.fastInsert(batch);
@@ -260,7 +278,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
if (!roleList.isEmpty()) {
// 分批处理角色分配
List<List<Sys_user_role>> roleBatches = ListUtil.split(roleList, 500);
List<List<Sys_user_role>> roleBatches = ListUtil.split(roleList, BATCH_SIZE);
roleBatches.forEach(batch -> {
try {
dao.fastInsert(batch);
@@ -282,7 +300,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
CompletableFuture<Void> updateTask = CompletableFuture.runAsync(() -> {
log.info("更新用户: {} 个", needDoUpdateList.size());
// 分批处理,每批200条
List<List<Sys_user>> batches = ListUtil.split(needDoUpdateList, 500);
List<List<Sys_user>> batches = ListUtil.split(needDoUpdateList, BATCH_SIZE);
batches.forEach(batch -> {
try {
dao.updateIgnoreNull(batch);
@@ -294,6 +312,65 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
updateTasks.add(updateTask);
}
if (Lang.isNotEmpty(leaveUserIds)) {
CompletableFuture<Void> leaveTask = CompletableFuture.runAsync(() -> {
log.info("数据源缺失用户转为不在岗并取消会员: {} 个", leaveUserIds.size());
List<List<String>> batches = ListUtil.split(leaveUserIds, BATCH_SIZE);
batches.forEach(batch -> {
try {
/*
* 本次拉取批次中没有出现、但系统用户表仍存在的人员,按离岗处理:
* 1. userState 写为“不在岗”,用于后续人员状态筛选和业务判断;
* 2. member 写为 false,避免仍按会员身份参与后续业务判断。
*/
dao.update(Sys_user.class, Chain.make("userState", "不在岗").add("member", false), Cnd.where("id", "in", batch));
} catch (Exception e) {
log.error("批量更新数据源缺失用户状态异常", e);
}
});
}, executorService);
updateTasks.add(leaveTask);
}
if (Lang.isNotEmpty(leaveMemberUserIds)) {
CompletableFuture<Void> leaveMemberRoleTask = CompletableFuture.runAsync(() -> {
log.info("数据源缺失会员移除会员角色: {} 个", leaveMemberUserIds.size());
List<List<String>> batches = ListUtil.split(leaveMemberUserIds, ROLE_DELETE_BATCH_SIZE);
batches.forEach(batch -> {
try {
/*
* 只对原本是会员的缺失人员移除会员角色,并缩小删除批次,
* 降低 sys_user_role 大批量 DELETE 时的锁等待概率。
*/
dao.clear(Sys_user_role.class, Cnd.where("userId", "in", batch).and("roleId", "=", memberRole.getId()));
} catch (Exception e) {
log.error("批量移除数据源缺失会员角色异常", e);
}
});
}, executorService);
updateTasks.add(leaveMemberRoleTask);
}
if (Lang.isNotEmpty(histories)) {
CompletableFuture<Void> historyTask = CompletableFuture.runAsync(() -> {
log.info("添加历史记录: {} 条", histories.size());
/*
* 历史记录基于更新前的 sys_user 与 sys_user_source 生成,必须纳入本次更新等待范围。
* 继续使用线程池和批量插入,避免主线程逐条写入拖慢更新接口。
*/
List<List<Sys_user_history>> batches = ListUtil.split(histories, 500);
batches.forEach(batch -> {
try {
dao.fastInsert(batch);
} catch (Exception e) {
log.error("批量添加历史记录异常", e);
throw new RuntimeException(e);
}
});
}, executorService);
updateTasks.add(historyTask);
}
// 等待用户数据更新完成
try {
// 设置超时时间,避免无限等待
@@ -307,22 +384,6 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
return "更新失败: " + e.getMessage();
}
// 3. 异步添加历史记录 - 不等待完成
if (Lang.isNotEmpty(histories)) {
executorService.execute(() -> {
log.info("添加历史记录: {} 条", histories.size());
// 分批处理历史记录
List<List<Sys_user_history>> batches = ListUtil.split(histories, 500);
batches.forEach(batch -> {
try {
dao.fastInsert(batch);
} catch (Exception e) {
log.error("批量添加历史记录异常", e);
}
});
});
}
/* // 4. 异步添加会员角色 - 不等待完成
if (Lang.isNotEmpty(addMemberUserIds)) {
executorService.execute(() -> {
@@ -384,7 +445,7 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
log.info("全量更新用户数据完成,耗时: {} 毫秒", (endTime - startTime));
return "更新完成: 新增用户 " + needInitUserList.size() + " 个, 更新用户 " + needDoUpdateList.size()
+ " 个, 待添加会员 " + addMemberUserIds.size() + " 个, 待移除会员 " + removeMemberUserIds.size() + "";
+ " 个, 数据源缺失转不在岗 " + leaveUserIds.size() + " 个, 待添加会员 " + addMemberUserIds.size() + " 个, 待移除会员 " + removeMemberUserIds.size() + "";
}
/**
@@ -453,8 +514,8 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
NutMap change = NutMap.NEW();
change.put("fieldName", "单位");
change.put("field", "unitId");
change.put("sourceValue", unitIdNameMap.get(user.getUnitId()));
change.put("newValue", unitIdNameMap.get(user.getUnitId()));
change.put("sourceValue", getUnitChangeValue(user.getUnitId()));
change.put("newValue", getUnitChangeValue(source.getUnitId()));
changeList.add(change);
// 单位异动发送订阅消息,清空原单位的所有角色
@@ -470,8 +531,8 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
// 生成变更信息描述
String changeInfos = changeList.stream()
.map(v -> v.getString("fieldName") + "" +
HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "" +
HtmlUtil.cleanHtmlTag(v.getString("newValue")))
HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v.getString("sourceValue"), "")) + "" +
HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v.getString("newValue"), "")))
.collect(Collectors.joining(""));
// 设置历史记录信息
@@ -481,4 +542,15 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService
return history;
}
/**
* 获取单位变更记录展示值。
* 入参 unitId 为系统用户旧单位或数据源新单位ID;返回值优先使用单位名称,查不到名称时保留单位ID,避免变更记录为空导致更新中断。
*/
private String getUnitChangeValue(String unitId) {
if (StrUtil.isBlank(unitId)) {
return "";
}
return StrUtil.blankToDefault(unitIdNameMap.get(unitId), unitId);
}
}
@@ -21,6 +21,7 @@ import com.budwk.app.sys.annotation.DataCenterColumn;
import com.budwk.app.sys.enums.Api2FinanceFiledMap;
import com.budwk.app.sys.models.Sys_data_dict;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_source;
import com.budwk.app.sys.services.SysDataUnitPullService;
@@ -158,6 +159,8 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
} catch (Exception e) {
sysUser.setBirthday(null);
}
} else if ("LXNY".equals(mapping.key)) {
mapping.field.set(sysUser, normalizeArrivalAtSchoolDate(raw.getStr(mapping.key)));
} else {
mapping.field.set(sysUser, raw.getStr(mapping.key));
}
@@ -170,6 +173,9 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
}
}
sysUser.setUnitName(raw.getStr("SZDW"));
sysUser.setUnitId(resolveSourceUnitId(raw.getStr("SZDWH")));
// 设置拉取时间
sysUser.setPullTime(nowDate);
@@ -199,6 +205,27 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
}
}
/**
* 规范化信息中心返回的来校时间。
* 入参 arrivalAtSchoolDate 对应信息中心 LXNY 字段,允许 yyyy-MM-dd 或 yyyy-MM
* 返回值用于 sys_user_source.arrivalAtSchoolDate 和后续 sys_user.arrivalAtSchoolDate,年月格式统一补为当月 01 日。
*/
private String normalizeArrivalAtSchoolDate(String arrivalAtSchoolDate) {
String dateText = StrUtil.trim(arrivalAtSchoolDate);
if (StrUtil.isBlank(dateText)) {
return dateText;
}
if (dateText.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
String[] parts = dateText.split("-");
return parts[0] + "-" + StrUtil.padPre(parts[1], 2, '0') + "-" + StrUtil.padPre(parts[2], 2, '0');
}
if (dateText.matches("\\d{4}-\\d{1,2}")) {
String[] parts = dateText.split("-");
return parts[0] + "-" + StrUtil.padPre(parts[1], 2, '0') + "-01";
}
return dateText;
}
/**
* 获取信息中心开放平台访问令牌。
* 返回值为接口后续调用使用的 access_token 字符串。
@@ -315,6 +342,22 @@ public class SysDataUserPullServiceImpl extends BaseServiceImpl<Sys_user_source>
return new ArrayList<>(userMap.values());
}
/**
* 根据接口返回的所在单位号转换数据源用户单位。
* 入参 rawUnitId 对应人员接口 SZDWH:5位表示三级单位,需要写入其二级父单位;其他长度保持接口原值。
* 返回值为 sys_user_source.unitId 使用的单位ID,找不到三级单位或父级为空时保留接口原始单位号,避免人员数据丢失。
*/
private String resolveSourceUnitId(String rawUnitId) {
if (StrUtil.isBlank(rawUnitId) || rawUnitId.length() != 5) {
return rawUnitId;
}
Sys_unit unit = dao().fetch(Sys_unit.class, rawUnitId);
if (unit == null || StrUtil.isBlank(unit.getParentId())) {
return rawUnitId;
}
return unit.getParentId();
}
@Async
private void updateDict(List<Sys_user_source> userSources) {
//判断是否要更新在职状态字典
@@ -137,7 +137,7 @@ public class CommonController {
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("unit.unionId", "=", unionId);
cnd.and("unit.unitTypeCode", "=", "1");
cnd.and("unit.unitLevel", "=", "2");
cnd.asc("unit.unitcode");
sql.setCondition(cnd);
List<NutMap> unitList = sysUserService.listMap(sql);
@@ -220,9 +220,11 @@ public class ActivitySportsServiceImpl extends BaseServiceImpl<ActivitySchool> i
ev.allName DESC,
u.unionname DESC,
app.`team` asc
""").setParam("id", id);
""").setParam("id", id)
.setVar("cnd", "");
if (Strings.isNotBlank(unionId)) {
sql.setVar("cnd", "and u.unionid='" + unionId + "'");
sql.setVar("cnd", "and u.unionid = @unionId");
sql.setParam("unionId", unionId);
}
List<Record> list = list(sql);
String activityName;
@@ -425,6 +425,7 @@ public class ClubStatisticsController {
}
private Sql generateSql(String clubId, Boolean auditState, String userState, String sex, Boolean giveMoney) {
// 注册流程按社团去重后再关联,避免换届等流程复用社团ID时将会员人数重复统计。
Sql sql = Sqls.create("""
SELECT
club.id,
@@ -438,11 +439,22 @@ public class ClubStatisticsController {
sum( CASE WHEN ('CLUB_PRESIDENT' MEMBER OF (cu.roleCode) or 'CLUB_VICE_PRESIDENT' MEMBER OF (cu.roleCode) or 'CLUB_SECRETARY' MEMBER OF (cu.roleCode) or 'CLUB_VICE_SECRETARY' MEMBER OF (cu.roleCode)) AND 1 = 1 $myCondition THEN 1 ELSE 0 END ) AS governing_body
FROM
sys_club club
INNER JOIN (
SELECT DISTINCT registerInstance.businessNo
FROM wf_process_instance registerInstance
INNER JOIN wf_process_define registerDefine
ON registerDefine.id = registerInstance.processDefineId
WHERE registerInstance.state = @finishedState
AND registerInstance.delFlag = 0
AND registerDefine.name = @registerProcessKey
AND registerDefine.delFlag = 0
) registeredClub ON registeredClub.businessNo = club.id
LEFT JOIN club_user cu ON cu.clubId = club.id
LEFT JOIN sys_user su ON cu.userId = su.id
LEFT JOIN wf_process_instance ins ON ins.businessNo = club.id
$condition
""");
sql.setParam("finishedState", ProcessInstanceStateEnum.FINISHED.getCode());
sql.setParam("registerProcessKey", "XHZC");
Cnd cnd = Cnd.NEW();
if (auditState != null) {
List<SysClubExamineRegister> examineRegisters = sysClubService.dao().query(SysClubExamineRegister.class, Cnd.where("year(registerDate)", "=", DateUtil.thisYear()));
@@ -458,7 +470,6 @@ public class ClubStatisticsController {
List<String> myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList();
cnd.and("club.id", "in", myClubId);
}
cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode());
cnd.andEX("club.id", "=", clubId);
cnd.and("club.dismiss", "=", false);
cnd.groupBy("club.id");
@@ -13,6 +13,13 @@ import java.util.List;
public interface SysClubExamineService extends BaseService<SysClubExamineRegister> {
/**
* 按会员入会、退休、退会时间统计指定年度的在职和退休人数变化。
*
* @param clubId 社团ID
* @param year 统计年度
* @return 在职和退休人员的年初、增加、减少、年末人数
*/
List<NutMap> getClubUserNum(@Valid String clubId, Integer year);
List<NutMap> getJgUser(@Valid String clubId);
@@ -10,7 +10,6 @@ import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.club.model.SysClub;
@@ -32,14 +31,15 @@ import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@IocBean(args = {"refer:dao"})
public class SysClubExamineServiceImpl extends BaseServiceImpl<SysClubExamineRegister> implements SysClubExamineService {
@Inject
private SysDictService sysDictService;
@Inject
private SysClubService sysClubService;
@@ -49,128 +49,244 @@ public class SysClubExamineServiceImpl extends BaseServiceImpl<SysClubExamineReg
@Override
public List<NutMap> getClubUserNum(String clubId, Integer year) {
// 定义统计的用户状态类型
List<String> userStateList = List.of("在职", "退休");
List<NutMap> result = new ArrayList<>();
Date yearStart = DateUtil.parse(year + "-01-01 00:00:00");
Date nextYearStart = DateUtil.parse((year + 1) + "-01-01 00:00:00");
List<MembershipPeriod> membershipPeriods = getMembershipPeriods(clubId);
NutMap activeResult = createUserChangeResult("在职");
NutMap retiredResult = createUserChangeResult("退休");
// 查询上一年度考核登记数据(用于获取年初人数)
SysClubExamineRegister examineRegister = dao().fetch(SysClubExamineRegister.class,
Cnd.where("year", "=", year - 1).and("clubId", "=", clubId));
for (MembershipPeriod period : membershipPeriods) {
// 非正常历史会员没有退会时间且没有已完成退会申请时,无法确定所属年度,不计入统计。
if (!period.normal && period.exitTime == null) {
continue;
}
if (isMemberAtYearBoundary(period, yearStart)) {
increaseResult(classifyAtBoundary(period, yearStart), activeResult, retiredResult, "yearFirstNum");
}
if (isInYear(period.joinTime, yearStart, nextYearStart)) {
increaseResult(classifyAtEvent(period, period.joinTime), activeResult, retiredResult, "yearAddNum");
}
if (isInYear(period.exitTime, yearStart, nextYearStart)) {
increaseResult(classifyBeforeEvent(period, period.exitTime), activeResult, retiredResult, "yearReduceNum");
}
// 退休发生在会员有效期内时,作为在职减少一人、退休增加一人处理。
if (isInYear(period.retireDate, yearStart, nextYearStart)
&& period.joinTime.before(period.retireDate)
&& (period.exitTime == null || period.exitTime.after(period.retireDate))) {
increaseResult("在职", activeResult, retiredResult, "yearReduceNum");
increaseResult("退休", activeResult, retiredResult, "yearAddNum");
}
if (isMemberAtYearBoundary(period, nextYearStart)) {
increaseResult(classifyAtBoundary(period, nextYearStart), activeResult, retiredResult, "thisYearNum");
}
}
return List.of(activeResult, retiredResult);
}
// 构建社团用户申请记录查询SQL(关联用户信息、流程实例)
Sql sql = Sqls.create("""
/**
* 合并旧系统会员生命周期与新系统已完成申请,生成可用于年度统计的入退会区间。
* 旧系统记录负责迁移历史,新系统申请只补充旧记录缺失的退会时间和迁移后新增的入会周期。
*/
private List<MembershipPeriod> getMembershipPeriods(String clubId) {
Sql legacySql = Sqls.create("""
SELECT
cu.*,
year(cu.applyDate) as applyYear,
cu.userId,
CAST(cu.joinTime AS DATETIME) joinTime,
STR_TO_DATE(NULLIF(cu.changeTime, ''), '%Y-%m-%d %H:%i:%s') exitTime,
cu.isNormal,
u.userState,
u.retireDate
FROM
club_user_apply cu
LEFT JOIN sys_user u ON cu.userId = u.id
LEFT JOIN wf_process_instance ins ON ins.businessNo = cu.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("cu.clubId", "=", clubId);
cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode());
cnd.groupBy("cu.clubId, cu.userId, cu.mode");
sql.setCondition(cnd);
List<NutMap> userList = listMap(sql);
FROM sys_club_user cu
LEFT JOIN sys_user u ON u.id = cu.userId
WHERE cu.clubId = @clubId
AND cu.status = 5
AND cu.joinTime IS NOT NULL
AND cu.joinTime <> ''
""").setParam("clubId", clubId);
List<MembershipPeriod> periods = listMap(legacySql).stream()
.map(row -> new MembershipPeriod(
row.getString("userId"),
row.getTime("joinTime"),
row.getTime("exitTime"),
!Boolean.FALSE.equals(row.getBoolean("isNormal")),
true,
row.getString("userState"),
row.getTime("retireDate")
))
.filter(period -> period.joinTime != null)
.collect(Collectors.toCollection(ArrayList::new));
// 遍历在职/退休状态,分别统计人员变动数据
for (String userState : userStateList) {
NutMap nutMap = new NutMap();
nutMap.addv("userState", userState);
Sql applySql = Sqls.create("""
SELECT
cu.userId,
cu.mode,
cu.applyDate,
cu.joinTime,
cu.exitTime,
u.userState,
u.retireDate
FROM club_user_apply cu
LEFT JOIN sys_user u ON u.id = cu.userId
WHERE cu.clubId = @clubId
AND COALESCE(cu.delFlag, 0) = 0
AND EXISTS (
SELECT 1
FROM wf_process_instance ins
WHERE ins.businessNo = cu.id
AND ins.state = @finishedState
)
ORDER BY cu.applyDate, cu.mode
""")
.setParam("clubId", clubId)
.setParam("finishedState", ProcessInstanceStateEnum.FINISHED.getCode());
List<NutMap> applications = listMap(applySql);
applications.sort(Comparator.comparing(row -> row.getTime("applyDate"), Comparator.nullsLast(Date::compareTo)));
// 根据用户状态匹配对应的人员类型集合
List<String> personTypeList = switch (userState) {
case "在职" -> List.of("在职", "在岗");
case "退休" -> List.of("退休", "退休【变号】");
default -> new ArrayList<>();
};
// 过滤出符合当前人员类型的用户(非空判断避免NPE)
List<NutMap> personTypeUsers = userList.stream()
.filter(u -> StrUtil.isNotBlank(u.getString("userState"))
&& personTypeList.contains(u.getString("userState")))
.collect(Collectors.toList());
// 初始化年末人数为0
int thisYearNum = 0;
if (!Lang.isEmpty(personTypeUsers)) {
// 统计年末人数:加入社团且无退出记录的用户数量
List<String> exitUserIds = personTypeUsers.stream()
.filter(u -> u.getInt("mode") == 0)
.map(u -> u.getString("userId"))
.toList();
thisYearNum = (int) personTypeUsers.stream()
.filter(u -> u.getInt("mode") == 1)
.filter(u -> !exitUserIds.contains(u.getString("userId")))
.count();
for (NutMap application : applications) {
Date applyDate = application.getTime("applyDate");
Boolean mode = application.getBoolean("mode");
if (applyDate == null || mode == null) {
continue;
}
// 统计今年退休人数:已入会且退休日期在本年度的用户
int retireCount = (int) personTypeUsers.stream()
.filter(u -> u.getTime("retireDate") != null
&& u.getInt("mode") == 1
&& DateUtil.year(u.getTime("retireDate")) == year)
.count();
// 封装年初人数:从上一年度登记数据中获取,无数据则为0
if (Lang.isNotEmpty(examineRegister) && Lang.isNotEmpty(examineRegister.getChangeUserNum())) {
JSONObject uState = examineRegister.getChangeUserNum().stream()
.filter(c -> c.getStr("userState").equals(userState))
.findFirst()
.orElse(null);
nutMap.addv("yearFirstNum", Lang.isEmpty(uState) ? 0 : uState.getInt("thisYearNum"));
if (mode) {
mergeJoinApplication(periods, application, applyDate);
} else {
nutMap.addv("yearFirstNum", 0);
mergeExitApplication(periods, application, applyDate);
}
// 统计年度增加相关数据
int joinThisYear = (int) personTypeUsers.stream()
.filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year)
.count();
int thisYearJoinAndRetire = (int) userList.stream()
.filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year
&& u.getTime("retireDate") != null
&& DateUtil.year(u.getTime("retireDate")) == year)
.count();
int beforeYearJoinAndRetire = (int) userList.stream()
.filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year
&& u.getTime("retireDate") != null
&& DateUtil.year(u.getTime("retireDate")) < year)
.count();
// 按用户状态封装年度增加人数
nutMap.addv("yearAddNum", "在职".equals(userState)
? joinThisYear + thisYearJoinAndRetire
: beforeYearJoinAndRetire + retireCount);
// 统计年度减少相关数据
int quitThisYear = (int) personTypeUsers.stream()
.filter(u -> u.getInt("mode") == 0 && u.getInt("applyYear") == year)
.count();
// 在职人员年度减少:退休人数+主动退出人数;退休人员仅统计主动退出
if ("在职".equals(userState)) {
int retireThisYear = (int) userList.stream()
.filter(u -> u.getTime("retireDate") != null
&& DateUtil.year(u.getTime("retireDate")) == year)
.count();
nutMap.addv("yearReduceNum", retireThisYear + quitThisYear);
} else {
nutMap.addv("yearReduceNum", quitThisYear);
}
// 封装年末人数
nutMap.addv("thisYearNum", thisYearNum);
result.add(nutMap);
}
return result;
return periods;
}
/**
* 已迁移的入会申请与旧会员记录精确对应时不重复新增;迁移后的新申请以审核申请时间作为入会时间。
*/
private void mergeJoinApplication(List<MembershipPeriod> periods, NutMap application, Date applyDate) {
String userId = application.getString("userId");
Date applicationJoinTime = application.getTime("joinTime");
boolean representedByLegacy = periods.stream()
.filter(period -> period.legacy && Objects.equals(period.userId, userId))
.filter(period -> Objects.equals(period.joinTime, applicationJoinTime))
.anyMatch(period -> period.exitTime == null || !applyDate.after(period.exitTime));
boolean representedByNewPeriod = periods.stream()
.filter(period -> !period.legacy && Objects.equals(period.userId, userId))
.anyMatch(period -> isMemberAt(period, applyDate));
if (representedByLegacy || representedByNewPeriod) {
return;
}
periods.add(new MembershipPeriod(
userId,
applyDate,
null,
true,
false,
application.getString("userState"),
application.getTime("retireDate")
));
}
/**
* 退会申请优先关闭入会时间相同的会员周期;新系统复入会后再退会时关闭最近的有效周期。
*/
private void mergeExitApplication(List<MembershipPeriod> periods, NutMap application, Date applyDate) {
String userId = application.getString("userId");
Date applicationJoinTime = application.getTime("joinTime");
Date exitTime = application.getTime("exitTime") == null ? applyDate : application.getTime("exitTime");
MembershipPeriod target = periods.stream()
.filter(period -> Objects.equals(period.userId, userId))
.filter(period -> Objects.equals(period.joinTime, applicationJoinTime))
.filter(period -> period.exitTime == null)
.max(Comparator.comparing(period -> period.joinTime))
.orElse(null);
if (target == null) {
target = periods.stream()
.filter(period -> Objects.equals(period.userId, userId))
.filter(period -> period.exitTime == null && !period.joinTime.after(exitTime))
.max(Comparator.comparing(period -> period.joinTime))
.orElse(null);
}
if (target != null) {
target.exitTime = exitTime;
}
}
private NutMap createUserChangeResult(String userState) {
return NutMap.NEW()
.addv("userState", userState)
.addv("yearFirstNum", 0)
.addv("yearAddNum", 0)
.addv("yearReduceNum", 0)
.addv("thisYearNum", 0);
}
private void increaseResult(String userState, NutMap activeResult, NutMap retiredResult, String field) {
NutMap result = "退休".equals(userState) ? retiredResult : "在职".equals(userState) ? activeResult : null;
if (result != null) {
result.put(field, result.getInt(field) + 1);
}
}
private boolean isInYear(Date date, Date yearStart, Date nextYearStart) {
return date != null && !date.before(yearStart) && date.before(nextYearStart);
}
private boolean isMemberAt(MembershipPeriod period, Date date) {
return !period.joinTime.after(date) && (period.exitTime == null || period.exitTime.after(date));
}
private boolean isMemberAtYearBoundary(MembershipPeriod period, Date boundary) {
return period.joinTime.before(boundary) && (period.exitTime == null || !period.exitTime.before(boundary));
}
private String classifyAtBoundary(MembershipPeriod period, Date boundary) {
if (period.retireDate != null) {
return period.retireDate.before(boundary) ? "退休" : "在职";
}
return normalizeUserState(period.userState);
}
private String classifyAtEvent(MembershipPeriod period, Date eventTime) {
if (period.retireDate != null) {
return period.retireDate.after(eventTime) ? "在职" : "退休";
}
return normalizeUserState(period.userState);
}
private String classifyBeforeEvent(MembershipPeriod period, Date eventTime) {
if (period.retireDate != null) {
return period.retireDate.before(eventTime) ? "退休" : "在职";
}
return normalizeUserState(period.userState);
}
private String normalizeUserState(String userState) {
if (List.of("在职", "在岗").contains(userState)) {
return "在职";
}
if (List.of("退休", "退休【变号】").contains(userState)) {
return "退休";
}
return null;
}
private static class MembershipPeriod {
private final String userId;
private final Date joinTime;
private Date exitTime;
private final boolean normal;
private final boolean legacy;
private final String userState;
private final Date retireDate;
private MembershipPeriod(String userId, Date joinTime, Date exitTime, boolean normal, boolean legacy,
String userState, Date retireDate) {
this.userId = userId;
this.joinTime = joinTime;
this.exitTime = exitTime;
this.normal = normal;
this.legacy = legacy;
this.userState = userState;
this.retireDate = retireDate;
}
}
@Override
@@ -15,6 +15,7 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.club.model.ClubUser;
import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.club.param.ClubUserPageForm;
import com.budwk.app.zhgh.club.service.SysClubInfoManageService;
import com.budwk.app.zhgh.club.service.SysClubService;
@@ -41,6 +42,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
@@ -227,19 +229,23 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
public Pagination<ClubUserCommonPageVo> exitManagePageData(ClubUserPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.clubId,
info.userId,
info.roleCode AS applyRoleCode,
info.clubPosition,
info.email,
info.mobile,
info.birthday,
info.avatar,
info.sameTimeJoinOtherClubSituation,
info.awardsExperience,
COALESCE(info.id, scu.id) AS id,
scu.clubId,
scu.userId,
COALESCE(info.roleCode, scu.roleCode) AS applyRoleCode,
COALESCE(info.clubPosition, scu.position) AS clubPosition,
COALESCE(info.email, scu.email, u.email) AS email,
COALESCE(info.mobile, u.mobile) AS mobile,
COALESCE(info.birthday, u.birthday) AS birthday,
COALESCE(info.avatar, scu.avatar, u.avatar) AS avatar,
COALESCE(info.sameTimeJoinOtherClubSituation, scu.sameTimeJoinOtherClubSituation) AS sameTimeJoinOtherClubSituation,
COALESCE(info.awardsExperience, scu.awardsExperience) AS awardsExperience,
info.signature,
info.applyDate,
COALESCE(
info.applyDate,
STR_TO_DATE(scu.changeTime, '%Y-%m-%d %H:%i:%s'),
STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(scu.exitAuditList, '$[0].auditTime')), '%Y-%m-%d %H:%i:%s')
) AS applyDate,
u.username AS userName,
u.loginname AS loginName,
u.sex,
@@ -247,24 +253,32 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
u.userState,
club.clubName,
u.unitname AS unitName,
DATE_FORMAT(IFNULL(info.joinTime, club.foundTime), '%Y-%m-%d %H:%i:%s') AS joinTime,
DATE_FORMAT(info.exitTime, '%Y-%m-%d %H:%i:%s') AS exitTime,
COALESCE(scu.joinTime, DATE_FORMAT(club.foundTime, '%Y-%m-%d %H:%i:%s')) AS joinTime,
COALESCE(
DATE_FORMAT(info.exitTime, '%Y-%m-%d %H:%i:%s'),
JSON_UNQUOTE(JSON_EXTRACT(scu.exitAuditList, '$[0].auditTime')),
scu.changeTime
) AS exitTime,
IF(info.id IS NULL, 'DIRECT_REMOVE', 'AUDIT_EXIT') AS exitType,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId
FROM
club_user_apply info
LEFT JOIN sys_club club ON club.id = info.clubId
LEFT JOIN vw_user u ON u.id = info.userId
sys_club_user scu
LEFT JOIN club_user_apply info ON info.clubId = scu.clubId
AND info.userId = scu.userId
AND info.mode = false
LEFT JOIN sys_club club ON club.id = scu.clubId
INNER JOIN vw_user u ON u.id = scu.userId
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
AND ins.state = 20
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("info.mode", "=", false);
cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode());
cnd.andEX("info.clubId", "=", pageForm.getClubId());
cnd.and("scu.isNormal", "=", false);
cnd.andEX("scu.clubId", "=", pageForm.getClubId());
cnd.andEX("u.personType", "=", pageForm.getPersonType());
cnd.andEX("u.userState", "=", pageForm.getUserState());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
@@ -273,15 +287,17 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name())) {
List<String> clubIdList = commonService.findUserRoleByRoleCode(List.of(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_VICE_PRESIDENT.name(), RoleConstant.CLUB_SECRETARY.name(), RoleConstant.CLUB_VICE_SECRETARY.name(), RoleConstant.CLUB_OPERATOR.name()));
List<Sys_user_role> clubList = dao().query(Sys_user_role.class, Cnd.where("roleId", "in", clubIdList).and("userId", "=", SecurityUtil.getUserId()).and("clubId", "is not", null));
cnd.and("info.clubId", "in", clubList.stream().map(Sys_user_role::getClubId).toList());
cnd.and("scu.clubId", "in", clubList.stream().map(Sys_user_role::getClubId).toList());
}
cnd.groupBy("info.id");
cnd.desc("info.applyDate");
cnd.groupBy("scu.id");
cnd.desc("exitTime");
sql.setCondition(cnd);
Pagination<ClubUserCommonPageVo> pagination = listPageVO(pageForm, sql, ClubUserCommonPageVo.class);
List<ClubUserCommonPageVo> list = pagination.getList(ClubUserCommonPageVo.class);
for (ClubUserCommonPageVo vo : list) {
vo.setRoleName(SysClubUserServiceImpl.convertRoleName(List.of(vo.getApplyRoleCode())));
if (StrUtil.isNotBlank(vo.getApplyRoleCode())) {
vo.setRoleName(SysClubUserServiceImpl.convertRoleName(List.of(vo.getApplyRoleCode())));
}
}
pagination.setList(list);
return pagination;
@@ -291,7 +307,30 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
public ClubUserJoinVo exitManageInfo(String id) {
Sql sql = Sqls.create("""
SELECT
cua.*,
COALESCE(cua.id, scu.id) AS id,
scu.clubId,
scu.userId,
COALESCE(cua.roleCode, scu.roleCode) AS roleCode,
COALESCE(cua.clubPosition, scu.position) AS clubPosition,
COALESCE(cua.email, scu.email, u.email) AS email,
COALESCE(cua.mobile, u.mobile) AS mobile,
COALESCE(cua.birthday, u.birthday) AS birthday,
COALESCE(cua.avatar, scu.avatar, u.avatar) AS avatar,
COALESCE(cua.sameTimeJoinOtherClubSituation, scu.sameTimeJoinOtherClubSituation) AS sameTimeJoinOtherClubSituation,
COALESCE(cua.awardsExperience, scu.awardsExperience) AS awardsExperience,
cua.signature,
COALESCE(
cua.applyDate,
STR_TO_DATE(scu.changeTime, '%Y-%m-%d %H:%i:%s'),
STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(scu.exitAuditList, '$[0].auditTime')), '%Y-%m-%d %H:%i:%s')
) AS applyDate,
STR_TO_DATE(scu.joinTime, '%Y-%m-%d %H:%i:%s') AS joinTime,
COALESCE(
cua.exitTime,
STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(scu.exitAuditList, '$[0].auditTime')), '%Y-%m-%d %H:%i:%s'),
STR_TO_DATE(scu.changeTime, '%Y-%m-%d %H:%i:%s')
) AS exitTime,
IF(cua.id IS NULL, 'DIRECT_REMOVE', 'AUDIT_EXIT') AS exitType,
club.clubName,
u.loginname AS loginName,
u.username AS userName,
@@ -304,10 +343,14 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
u.academicDegree,
u.position
FROM
club_user_apply cua
LEFT JOIN vw_user u ON u.id = cua.userId
LEFT JOIN sys_club club ON club.id = cua.clubId
WHERE cua.id = @id
sys_club_user scu
LEFT JOIN club_user_apply cua ON cua.clubId = scu.clubId
AND cua.userId = scu.userId
AND cua.mode = false
LEFT JOIN vw_user u ON u.id = scu.userId
LEFT JOIN sys_club club ON club.id = scu.clubId
WHERE scu.isNormal = false
AND COALESCE(cua.id, scu.id) = @id
""");
sql.setParam("id", id);
return fetchVO(sql, ClubUserJoinVo.class);
@@ -346,7 +389,11 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl<ClubCommonPage
NutMap nutMap = NutMap.NEW();
nutMap.put("id", "0");
nutMap.put("clubName", Globals.AppName);
nutMap.put("children", sysClubService.getMyManageClub());
// 社团管理树只按社团编号展示,避免影响公共社团列表的原有排序。
List<SysClub> clubList = sysClubService.getMyManageClub().stream()
.sorted(Comparator.comparing(SysClub::getClubCode, Comparator.nullsLast(String::compareTo)))
.toList();
nutMap.put("children", clubList);
result.add(nutMap);
return result;
}
@@ -31,6 +31,7 @@ public class ClubUserCommonPageVo extends ClubUser {
private String unionId;
private String joinTime;
private String exitTime;
private String exitType;
private String applyRoleCode;
private String roleName;
@@ -23,4 +23,5 @@ public class ClubUserJoinVo extends ClubUserApply {
private String academicDegree;
private String position;
private String clubName;
private String exitType;
}
@@ -262,7 +262,7 @@ public class HonorManageController {
excelExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20));
excelExportEntity.add(new ExcelExportEntity("单位", "unitName", 20));
excelExportEntity.add(new ExcelExportEntity("奖项", "prize", 20));
excelExportEntity.add(new ExcelExportEntity("荣誉", "honorLevel", 20));
excelExportEntity.add(new ExcelExportEntity("荣誉", "honorLevel", 20));
excelExportEntity.add(new ExcelExportEntity("授予单位", "grantUnit", 20));
excelExportEntity.add(new ExcelExportEntity("授予时间", "grantDate", 20));
excelExportEntity.add(new ExcelExportEntity("奖项介质", "awardType", 20));
@@ -276,7 +276,7 @@ public class HonorManageController {
excelExportEntity.add(new ExcelExportEntity("会员人数", "memberNumber", 10));
excelExportEntity.add(new ExcelExportEntity("工会小组数", "unionGroupNumber", 10));
excelExportEntity.add(new ExcelExportEntity("奖项", "prize", 20));
excelExportEntity.add(new ExcelExportEntity("荣誉", "honorLevel", 20));
excelExportEntity.add(new ExcelExportEntity("荣誉", "honorLevel", 20));
excelExportEntity.add(new ExcelExportEntity("授予单位", "grantUnit", 20));
excelExportEntity.add(new ExcelExportEntity("参加比赛名称", "gameName", 20));
excelExportEntity.add(new ExcelExportEntity("授予时间", "grantDate", 20));
@@ -124,6 +124,13 @@ public class UnionReimburseCollectController {
return unionReimburseService.updateActuallyAmount(id, realMoney);
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
public Result updateReimburseProject(String id, String reimburseProject) {
return unionReimburseService.updateReimburseProject(id, reimburseProject);
}
@At
@Ok("void")
@SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
@@ -45,6 +45,11 @@ public class UnionReimburseDesc extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 200)
private String fileDesc;
@Column
@Comment("报销项目提示")
@ColDefine(type = ColType.VARCHAR, width = 500)
private String projectTip;
@Column
@Comment("排序字段")
@Prev({
@@ -69,6 +69,11 @@ public interface UnionReimburseService extends BaseService<UnionReimburse> {
*/
Result updateActuallyAmount(String id, Double realMoney);
/**
* 修改非慰问报销记录的活动项目。
*/
Result updateReimburseProject(String id, String reimburseProject);
/**
* 批量审核选中的待审核报销申请。
*
@@ -66,6 +66,13 @@ import java.util.stream.Collectors;
@Slf4j
@IocBean(args = {"refer:dao"})
public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> implements UnionReimburseService {
/** 非慰问报销项目允许在三个活动项目之间切换。 */
private static final Set<String> ACTIVITY_REIMBURSE_PROJECTS = Set.of(
"UNION_REIMBURSE_PROJECT_2",
"UNION_REIMBURSE_PROJECT_3",
"UNION_REIMBURSE_PROJECT_4"
);
@Inject
private SysFileService sysFileService;
@Inject
@@ -424,6 +431,11 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
if (dbRecord == null) {
return Result.error("未找到对应的报销记录");
}
// 实际报销金额不得超过申请金额,避免绕过前端校验直接修改数据。
BigDecimal declaredMoney = getDeclaredApplyMoney(dbRecord);
if (newMoney.compareTo(declaredMoney) > 0) {
return Result.error("实际报销金额不能超过申请金额:" + declaredMoney.toPlainString());
}
if (Integer.valueOf(3).equals(dbRecord.getStateId()) && !skipBudgetDeduct(dbRecord)) {
OutlayUseDetail oldDetail = dao().fetch(OutlayUseDetail.class, Cnd.where("outlayReimburseId", "=", dbRecord.getId()));
BigDecimal oldMoney = oldDetail != null && oldDetail.getAdjustMoney() != null
@@ -439,6 +451,28 @@ public class UnionReimburseServiceImpl extends BaseServiceImpl<UnionReimburse> i
return Result.success();
}
@Override
public Result updateReimburseProject(String id, String reimburseProject) {
if (!isAdmin()) {
return Result.error("无权修改报销项目");
}
if (StrUtil.hasBlank(id, reimburseProject)) {
return Result.error("报销记录ID和报销项目不能为空");
}
UnionReimburse dbRecord = this.fetch(id);
if (dbRecord == null) {
return Result.error("未找到对应的报销记录");
}
// 慰问记录与活动项目字段不同,只允许活动项目之间切换。
if (!ACTIVITY_REIMBURSE_PROJECTS.contains(dbRecord.getReimburseProject())
|| !ACTIVITY_REIMBURSE_PROJECTS.contains(reimburseProject)) {
return Result.error("慰问记录不可修改,报销项目只能在三个活动项目之间切换");
}
dbRecord.setReimburseProject(reimburseProject);
this.updateIgnoreNull(dbRecord);
return Result.success();
}
private void normalizeInvoiceDetails(UnionReimburse unionReimburse) {
if (unionReimburse.getInvoiceDetails() == null) {
unionReimburse.setInvoiceDetails(new ArrayList<>());
@@ -63,6 +63,11 @@ public class AidFundMemberHistory extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 20)
private String personType;
@Column
@Comment("人员属性")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String userAttribute;
@Column
@Comment("在职状态")
@ColDefine(type = ColType.VARCHAR, width = 10)
@@ -64,4 +64,9 @@ public class AidFundMemberPay extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 10)
private String userState;
@Column
@Comment("人员属性")
@ColDefine(type = ColType.VARCHAR, width = 20)
private String userAttribute;
}
@@ -393,6 +393,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
*/
private String getAnalysisPersonFilterSql(MemberStatisticsPageForm pageForm, String alias) {
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(getAnalysisInSql(alias, "personType", pageForm.getPersonTypes()));
sqlBuilder.append(getAnalysisInSql(alias, "aidFundMemberUserType", pageForm.getAidFundMemberUserTypes()));
sqlBuilder.append(getAnalysisInSql(alias, "userAttribute", pageForm.getUserAttributes()));
return sqlBuilder.toString();
@@ -498,6 +499,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
sql.setVar("yearCnd", new Static(" AND u.`year` = %d".formatted(currentYear)));
// sql.setVar("abbr", new Static("his"));
}
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
cnd.andEX("u.userAttribute", "in", pageForm.getUserAttributes());
cnd.andEX("u.aidFundMemberUserType", "in", pageForm.getAidFundMemberUserTypes());
cnd.groupBy("un.id", "un.unionCode", "un.name");
@@ -539,6 +541,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl<Sys_user> imple
sql.setVar("table", new Static("member_history"));
sql.setVar("yearCnd", new Static(" AND u.`year` = %d".formatted(currentYear)));
}
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
cnd.andEX("u.userAttribute", "in", pageForm.getUserAttributes());
cnd.andEX("u.aidFundMemberUserType", "in", pageForm.getAidFundMemberUserTypes());
cnd.and("un.unitLevel", "=", 2);
@@ -46,6 +46,9 @@ public class WelfareFilterUserPageForm extends PageForm {
@ApiModelProperty("人员类型")
private String[] personTypes;
@ApiModelProperty("人员属性")
private String[] userAttributes;
@ApiModelProperty("聘用方式")
private String[] preparedBys;
@@ -444,11 +444,13 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
u.userState,
u.unitId,
u.unitName,
threeUnit.name AS threeUnitName,
u.unionId,
u.unionName,
u.member
FROM
vw_user u
LEFT JOIN sys_unit threeUnit ON threeUnit.id = u.threeUnitId
LEFT JOIN welfare_list w ON u.id = w.userId AND w.projectId = @projectId
$condition
""");
@@ -471,6 +473,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
cnd.andEX("u.unionId", "=", pageForm.getUnionId());
cnd.andEX("u.unitId", "in", pageForm.getUnitIds());
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
cnd.andEX("u.userAttribute", "in", pageForm.getUserAttributes());
cnd.andEX("u.preparedBy", "in", pageForm.getPreparedBys());
cnd.andEX("u.userState", "in", pageForm.getUserStates());
cnd.andEX("u.member","=",pageForm.getIsMember());
@@ -523,6 +526,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl<WelfareList> impleme
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "in", pageForm.getUnitIds());
cnd.andEX("personType", "in", pageForm.getPersonTypes());
cnd.andEX("userAttribute", "in", pageForm.getUserAttributes());
cnd.andEX("preparedBy", "in", pageForm.getPreparedBys());
cnd.andEX("userState", "in", pageForm.getUserStates());
cnd.andEX("member","=",pageForm.getIsMember());
@@ -1,8 +0,0 @@
ALTER TABLE `asset`
MODIFY COLUMN `assetUnitPrice` DECIMAL(18, 2) NULL COMMENT '单价';
ALTER TABLE `asset_depreciation_record`
MODIFY COLUMN `assetAllMoney` DECIMAL(18, 2) NULL COMMENT '资产全部的价值',
MODIFY COLUMN `assetSurplusMoney` DECIMAL(18, 2) NULL COMMENT '剩余价值',
MODIFY COLUMN `assetDepreciationMoney` DECIMAL(18, 2) NULL COMMENT '累计折旧多少钱',
MODIFY COLUMN `assetAverageMonthMoney` DECIMAL(18, 2) NULL COMMENT '平均一个月多少钱';
@@ -1,3 +0,0 @@
ALTER TABLE `build_home_little_house`
ADD COLUMN `mapX` DECIMAL(8,4) NULL COMMENT '地图X坐标百分比' AFTER `mediaFiles`,
ADD COLUMN `mapY` DECIMAL(8,4) NULL COMMENT '地图Y坐标百分比' AFTER `mapX`;
@@ -1,3 +0,0 @@
ALTER TABLE `build_home_little_house`
ADD COLUMN `unitId` VARCHAR(32) NULL COMMENT '单位ID' AFTER `unitName`,
ADD COLUMN `mediaFiles` JSON NULL COMMENT '图片视频资料' AFTER `openTime`;
@@ -1,2 +0,0 @@
ALTER TABLE `honor`
ADD COLUMN `photoFiles` JSON NULL COMMENT '荣誉照片' AFTER `files`;
@@ -1,72 +0,0 @@
CREATE TABLE IF NOT EXISTS learning_course_outline (
id VARCHAR(32) NOT NULL COMMENT 'ID',
courseId VARCHAR(32) NULL COMMENT '所属课程ID',
courseName VARCHAR(100) NULL COMMENT '所属课程名称',
parentId VARCHAR(32) NULL COMMENT '父节点ID',
nodeType VARCHAR(20) NULL COMMENT '节点类型',
title VARCHAR(100) NULL COMMENT '章/节标题',
subtitle VARCHAR(200) NULL COMMENT '副标题',
description LONGTEXT NULL COMMENT '简介',
sortOrder INT NULL COMMENT '排序值',
required TINYINT(1) NULL COMMENT '是否必学',
status VARCHAR(20) NULL COMMENT '状态',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id),
INDEX idx_learning_outline_course (courseId),
INDEX idx_learning_outline_parent (parentId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育课程大纲';
CREATE TABLE IF NOT EXISTS learning_outline_resource (
id VARCHAR(32) NOT NULL COMMENT 'ID',
courseId VARCHAR(32) NULL COMMENT '所属课程ID',
outlineId VARCHAR(32) NULL COMMENT '所属章/节ID',
resourceTitle VARCHAR(100) NULL COMMENT '资料标题',
resourceType VARCHAR(20) NULL COMMENT '资料类型',
fileExt VARCHAR(20) NULL COMMENT '文件扩展名',
fileData LONGTEXT NULL COMMENT '附件',
durationSeconds INT NULL COMMENT '视频/音频时长',
sortOrder INT NULL COMMENT '排序值',
required TINYINT(1) NULL COMMENT '是否必学',
allowPreview TINYINT(1) NULL COMMENT '是否允许预览',
allowDownload TINYINT(1) NULL COMMENT '是否允许下载',
status VARCHAR(20) NULL COMMENT '状态',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id),
INDEX idx_learning_resource_course (courseId),
INDEX idx_learning_resource_outline (outlineId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育大纲资料';
CREATE TABLE IF NOT EXISTS learning_study_rule (
id VARCHAR(32) NOT NULL COMMENT 'ID',
courseId VARCHAR(32) NULL COMMENT '所属课程ID',
targetType VARCHAR(20) NULL COMMENT '规则对象类型',
targetId VARCHAR(32) NULL COMMENT '规则对象ID',
required TINYINT(1) NULL COMMENT '是否必学',
studyMode VARCHAR(20) NULL COMMENT '学习方式',
completionRule VARCHAR(50) NULL COMMENT '完成规则',
completePercent INT NULL COMMENT '完成比例',
minStudySeconds INT NULL COMMENT '最少学习时长',
unlockRule VARCHAR(20) NULL COMMENT '解锁规则',
allowSkip TINYINT(1) NULL COMMENT '是否允许跳过',
allowDrag TINYINT(1) NULL COMMENT '是否允许拖动',
pauseCountTime TINYINT(1) NULL COMMENT '暂停是否计时',
hiddenCountTime TINYINT(1) NULL COMMENT '页面隐藏是否计时',
inactiveCountTime TINYINT(1) NULL COMMENT '长时间无操作是否计时',
status VARCHAR(20) NULL COMMENT '状态',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id),
INDEX idx_learning_rule_target (targetType, targetId),
INDEX idx_learning_rule_course (courseId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育学习规则';
@@ -1,27 +0,0 @@
CREATE TABLE IF NOT EXISTS learning_course (
id VARCHAR(32) NOT NULL COMMENT 'ID',
courseName VARCHAR(100) NULL COMMENT '课程名称',
courseTypeId VARCHAR(32) NULL COMMENT '课程类型',
lecturerName VARCHAR(100) NULL COMMENT '授课讲师',
lecturerInfo VARCHAR(500) NULL COMMENT '讲师基本信息',
courseIntro LONGTEXT NULL COMMENT '课程简介',
suitablePeople VARCHAR(500) NULL COMMENT '适合人群',
learningGoal VARCHAR(500) NULL COMMENT '学习目标',
coursePeriod VARCHAR(50) NULL COMMENT '课程周期',
openType VARCHAR(20) NULL COMMENT '开课类型',
startTime DATETIME NULL COMMENT '开始时间',
endTime DATETIME NULL COMMENT '结束时间',
status VARCHAR(20) NULL COMMENT '课程状态',
recommendFlags VARCHAR(500) NULL COMMENT '推荐标识',
courseTags VARCHAR(500) NULL COMMENT '课程标签',
targetType VARCHAR(20) NULL COMMENT '学习对象',
targetOrgText VARCHAR(500) NULL COMMENT '指定组织',
sortNum INT NULL COMMENT '排序编码',
cover VARCHAR(500) NULL COMMENT '课程封面',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育课程';
@@ -1,2 +0,0 @@
ALTER TABLE learning_course_type
ADD COLUMN remark VARCHAR(500) NULL COMMENT '备注';
@@ -1,2 +0,0 @@
ALTER TABLE learning_study_record
ADD COLUMN lastPositionSeconds INT NULL COMMENT '最近播放位置(秒)' AFTER studySeconds;
@@ -1,52 +0,0 @@
CREATE TABLE IF NOT EXISTS learning_study_record (
id VARCHAR(32) NOT NULL COMMENT 'ID',
userId VARCHAR(32) NULL COMMENT '学习人ID',
loginName VARCHAR(120) NULL COMMENT '工号',
userName VARCHAR(100) NULL COMMENT '姓名',
unionId VARCHAR(32) NULL COMMENT '所属分工会ID',
unionName VARCHAR(100) NULL COMMENT '所属分工会',
courseId VARCHAR(32) NULL COMMENT '课程ID',
courseName VARCHAR(100) NULL COMMENT '课程名称',
outlineId VARCHAR(32) NULL COMMENT '章节ID',
outlineName VARCHAR(100) NULL COMMENT '章节名称',
firstStudyTime DATETIME NULL COMMENT '第一次进入时间',
latestStudyTime DATETIME NULL COMMENT '最近学习时间',
studySeconds INT NULL COMMENT '累计有效学习时长(秒)',
lastPositionSeconds INT NULL COMMENT '最近播放位置(秒)',
requiredSeconds INT NULL COMMENT '要求学习时长(秒)',
progressPercent INT NULL COMMENT '学习进度',
completeStatus VARCHAR(20) NULL COMMENT '完成状态',
completedAt DATETIME NULL COMMENT '完成时间',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id),
UNIQUE KEY idx_learning_record_user_course_outline (userId, courseId, outlineId),
INDEX idx_learning_record_union (unionId),
INDEX idx_learning_record_course (courseId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育学习记录';
CREATE TABLE IF NOT EXISTS learning_study_segment (
id VARCHAR(32) NOT NULL COMMENT 'ID',
recordId VARCHAR(32) NULL COMMENT '学习记录ID',
userId VARCHAR(32) NULL COMMENT '学习人ID',
courseId VARCHAR(32) NULL COMMENT '课程ID',
outlineId VARCHAR(32) NULL COMMENT '章节ID',
resourceId VARCHAR(32) NULL COMMENT '资源ID',
resourceName VARCHAR(100) NULL COMMENT '资源名称',
startTime DATETIME NULL COMMENT '开始时间',
endTime DATETIME NULL COMMENT '结束时间',
lastHeartbeatTime DATETIME NULL COMMENT '最近心跳时间',
activeSeconds INT NULL COMMENT '本时段有效学习时长(秒)',
state VARCHAR(20) NULL COMMENT '状态',
createdBy VARCHAR(32) NULL COMMENT '创建人',
createdAt BIGINT NULL COMMENT '创建时间',
updatedBy VARCHAR(32) NULL COMMENT '修改人',
updatedAt BIGINT NULL COMMENT '修改时间',
delFlag TINYINT(1) NULL COMMENT '删除标记',
PRIMARY KEY (id),
INDEX idx_learning_segment_record (recordId),
INDEX idx_learning_segment_user_state (userId, state)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习教育学习时段';
@@ -1,50 +0,0 @@
/* cms_menu_01 */
update sys_menu set location=10 where path='0001'
/* cms_menu_02 */
update sys_menu set location=8 where path='0002'
/* cms_menu_03 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('02e86a61e99746bea34236ea73dd52a5','','0003','CMS','CMS','menu','','','ti-world','1','0','cms',NULL,'9','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895671','0')
/* cms_menu_04 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('077cb6be4c7c41cc8955ee045a4f0286','68cdbf694f71445c8587a20234d6fe31','0003000300020001','添加链接','Add','data','','','','0','0','cms.link.link.add',NULL,'47','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897043','0')
/* cms_menu_05 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17500ef3a9e44b4fabb240162a164fcb','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020003','删除文章','Delete','data','','','','0','0','cms.content.article.delete',NULL,'40','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896170','0')
/* cms_menu_06 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('31ed2243077c44448cce26abfd5ae574','9822bafbe3454dfd8e8b974ebc304d03','0003000300010002','修改分类','Edit','data','','','','0','0','cms.link.class.edit',NULL,'44','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896957','0')
/* cms_menu_07 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('33aed9298643424783116e0cf0f7fcbe','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020001','添加文章','Add','data','','','','0','0','cms.content.article.add',NULL,'38','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896151','0')
/* cms_menu_08 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('36e0faf5062b4f6b95d4167cbb1f8fea','68cdbf694f71445c8587a20234d6fe31','0003000300020002','修改链接','Edit','data','','','','0','0','cms.link.link.edit',NULL,'48','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897051','0')
/* cms_menu_09 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3c24111091ad4a70ad2d9cc361311d2f','68cdbf694f71445c8587a20234d6fe31','0003000300020003','删除链接','Delete','data','','','','0','0','cms.link.link.delete',NULL,'49','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897060','0')
/* cms_menu_10 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3f330d729ca34dc9825c46122be1bfae','02e86a61e99746bea34236ea73dd52a5','00030003','广告链接','AD','menu','','','ti-link','1','0','cms.link',NULL,'41','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468896230','0')
/* cms_menu_11 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4781372b00bb4d52b429b58e72b80c68','b2631bbdbf824cc4b74d819c87962c0d','0003000200010001','添加栏目','Add','data','','','','0','0','cms.content.channel.add',NULL,'33','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896049','0')
/* cms_menu_12 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('50ba60ee650e4c739e6abc3ab71e4960','b2631bbdbf824cc4b74d819c87962c0d','0003000200010004','栏目排序','Sort','data','','','','0','0','cms.content.channel.sort',NULL,'36','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896092','0')
/* cms_menu_13 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6075fc0cf0ef441b9d93cc3cab3445bf','6b6de8c720c645a1808e1c3e9ccbfc90','000300020002','文章管理','Article','menu','/platform/cms/article','data-pjax','','1','0','cms.content.article',NULL,'37','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896141','0')
/* cms_menu_14 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('68cdbf694f71445c8587a20234d6fe31','3f330d729ca34dc9825c46122be1bfae','000300030002','链接管理','Link','menu','/platform/cms/link/link','data-pjax','','1','0','cms.link.link',NULL,'46','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897031','0')
/* cms_menu_15 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6b6de8c720c645a1808e1c3e9ccbfc90','02e86a61e99746bea34236ea73dd52a5','00030002','内容管理','Content','menu','','','ti-pencil-alt','1','0','cms.content',NULL,'31','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895990','0')
/* cms_menu_16 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7125a72beee34b21ab3df9bf01b7bce6','9822bafbe3454dfd8e8b974ebc304d03','0003000300010003','删除分类','Delete','data','','','','0','0','cms.link.class.delete',NULL,'45','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896968','0')
/* cms_menu_17 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('73a29d3f99224426b5a87c92da122275','d1e991ad38a8424daf9f7eb000ee27f4','0003000100010001','保存配置','Save','data','','','','0','0','cms.site.settings.save',NULL,'30','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895899','0')
/* cms_menu_18 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7db6207d0dab4d6e95a7eee4f2efe875','9822bafbe3454dfd8e8b974ebc304d03','0003000300010001','添加分类','Add','data','','','','0','0','cms.link.class.add',NULL,'43','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896947','0')
/* cms_menu_19 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9822bafbe3454dfd8e8b974ebc304d03','3f330d729ca34dc9825c46122be1bfae','000300030001','链接分类','Class','menu','/platform/cms/link/class','data-pjax','','1','0','cms.link.class',NULL,'42','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896932','0')
/* cms_menu_20 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b2631bbdbf824cc4b74d819c87962c0d','6b6de8c720c645a1808e1c3e9ccbfc90','000300020001','栏目管理','Channel','menu','/platform/cms/channel','data-pjax','','1','0','cms.content.channel',NULL,'32','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896018','0')
/* cms_menu_21 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d1e991ad38a8424daf9f7eb000ee27f4','d920314e925c451da6d881e7a29743b7','000300010001','网站配置','Settings','menu','/platform/cms/site','data-pjax','','1','0','cms.site.settings',NULL,'29','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895881','0')
/* cms_menu_22 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d920314e925c451da6d881e7a29743b7','02e86a61e99746bea34236ea73dd52a5','00030001','站点管理','Site','menu','','','ti-world','1','0','cms.site',NULL,'28','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895821','0')
/* cms_menu_23 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e461c62a1d5441619cd35612f3b40691','b2631bbdbf824cc4b74d819c87962c0d','0003000200010002','修改栏目','Edit','data','','','','0','0','cms.content.channel.edit',NULL,'34','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896060','0')
/* cms_menu_24 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ef9f436c61654ec09efbfa79a40061cf','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020002','修改文章','Edit','data','','','','0','0','cms.content.article.edit',NULL,'39','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896159','0')
/* cms_menu_25 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f6fba69c3b704d79834b8bd2cc753729','b2631bbdbf824cc4b74d819c87962c0d','0003000200010003','删除栏目','Delete','data','','','','0','0','cms.content.channel.delete',NULL,'35','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896072','0')
@@ -1,103 +0,0 @@
/* wx_menu_01 */
update sys_menu set location=10 where path='0001'
/* wx_menu_02 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b0edc6861a494b79b97990dc05f0a524','','0002','微信','Wechat','menu','','','fa fa-weixin','1','0','wx',NULL,'8','1','','1467471229','0')
/* wx_menu_03 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e4256d7b0ffc4a02906cf900322b6213','b0edc6861a494b79b97990dc05f0a524','00020001','微信会员','Member','menu','','','fa fa-user','1','0','wx.user',NULL,'1','1','','1467471292','0')
/* wx_menu_04 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b19b23b0459a4754bf1fb8cb234450f2','e4256d7b0ffc4a02906cf900322b6213','000200010001','会员列表','List','menu','/platform/wx/user/index','data-pjax','','1','0','wx.user.list',NULL,'2','0','','1467471357','0')
/* wx_menu_05 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4dc997fef71e4862b9db22de8e99a618','b19b23b0459a4754bf1fb8cb234450f2','0002000100010001','同步会员信息','Sync','data','','','','0','0','wx.user.list.sync',NULL,'0','0','','1467473044','0')
/* wx_menu_06 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9f20a757a6bc40ddbb650c70debbf660','b0edc6861a494b79b97990dc05f0a524','00020002','消息管理','Message','menu','','','ti-pencil-alt','1','0','wx.msg',NULL,'3','1','','1467471415','0')
/* wx_menu_07 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f426468abf714b1599729f8c36ebbb0d','9f20a757a6bc40ddbb650c70debbf660','000200020001','会员消息','Msg','menu','/platform/wx/msg/user','data-pjax','','1','0','wx.msg.user',NULL,'4','1','','1467471478','0')
/* wx_menu_08 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1734e586e96941268a4c5248b593cef9','f426468abf714b1599729f8c36ebbb0d','0002000200010001','回复消息','Reply','data','','','','0','0','wx.msg.user.reply',NULL,'0','0','','1467473127','0')
/* wx_menu_09 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6bb17a41f6394ed0a8a6faf5ff781354','9f20a757a6bc40ddbb650c70debbf660','000200020002','群发消息','Mass','menu','/platform/wx/msg/mass','data-pjax','','1','0','wx.msg.mass',NULL,'5','0','','1467471561','0')
/* wx_menu_10 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('56d0658c5a8848818ac05e8ffa5c0570','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020001','添加图文','Add','data','','','','0','0','wx.msg.mass.addNews',NULL,'0','0','','1467473338','0')
/* wx_menu_11 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ce709456e867425297955b3c40406d7e','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020002','删除图文','Delete','data','','','','0','0','wx.msg.mass.delNews',NULL,'0','0','','1467473363','0')
/* wx_menu_12 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3099f497480c4b1987bce3f3a26c3fb4','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020003','群发消息','Push','data','','','','0','0','wx.msg.mass.pushNews',NULL,'0','0','','1467473400','0')
/* wx_menu_13 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4cd8e4e9519e4cff95465194fdcc8d88','b0edc6861a494b79b97990dc05f0a524','00020003','自动回复','AutoReply','menu','','','ti-back-left','1','0','wx.reply',NULL,'6','1','','1467471610','0')
/* wx_menu_14 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36fd6','4cd8e4e9519e4cff95465194fdcc8d88','000200030001','文本内容','Txt','menu','/platform/wx/reply/txt','data-pjax','','1','0','wx.reply.txt',NULL,'7','0','','1467471884','0')
/* wx_menu_15 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc2b6','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010001','添加文本','Add','data','','','','0','0','wx.reply.txt.add',NULL,'0','0','','1467473460','0')
/* wx_menu_16 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b9d5','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010002','修改文本','Edit','data','','','','0','0','wx.reply.txt.edit',NULL,'0','0','','1467473519','0')
/* wx_menu_17 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc1764653dc','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010003','删除文本','Delete','data','','','','0','0','wx.reply.txt.delete',NULL,'0','0','','1467473540','0')
/* wx_menu_18 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36f99','4cd8e4e9519e4cff95465194fdcc8d88','000200030005','图片内容','Img','menu','/platform/wx/reply/img','data-pjax','','1','0','wx.reply.img',NULL,'8','0','','1467471884','0')
/* wx_menu_19 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc216','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050001','添加图片','Add','data','','','','0','0','wx.reply.img.add',NULL,'0','0','','1467473460','0')
/* wx_menu_20 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b925','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050002','修改图片','Edit','data','','','','0','0','wx.reply.img.edit',NULL,'0','0','','1467473519','0')
/* wx_menu_21 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc17646533c','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050003','删除图片','Delete','data','','','','0','0','wx.reply.img.delete',NULL,'0','0','','1467473540','0')
/* wx_menu_22 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17e1ee23ca1443f1bc886c2f5eb7c24b','4cd8e4e9519e4cff95465194fdcc8d88','000200030002','图文内容','News','menu','/platform/wx/reply/news','data-pjax','','1','0','wx.reply.news',NULL,'9','0','','1467471926','0')
/* wx_menu_23 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2275cb125710414e91b617dd7c62f12c','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020001','添加图文','add','data','','','','0','0','wx.reply.news.add',NULL,'0','0','','1467473585','0')
/* wx_menu_24 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a972ce655cb4c84809d58668b655900','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020002','修改图文','Edit','data','','','','0','0','wx.reply.news.edit',NULL,'0','0','','1467473596','0')
/* wx_menu_25 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fc52d5284b8f4522802383c1ef732242','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020003','删除图文','Delete','data','','','','0','0','wx.reply.news.delete',NULL,'0','0','','1467473606','0')
/* wx_menu_26 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2cb327ad59b140828fd26eb2a46cb948','4cd8e4e9519e4cff95465194fdcc8d88','000200030003','关注自动回复','Follow','menu','/platform/wx/reply/conf/follow','data-pjax','','1','0','wx.reply.follow',NULL,'10','0','','1467472280','0')
/* wx_menu_27 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('dd965b2c1dfd493fb5efc7e4bcac99d4','2cb327ad59b140828fd26eb2a46cb948','0002000300030001','添加绑定','Add','data','','','','0','0','wx.reply.follow.add',NULL,'0','0','','1467474026','0')
/* wx_menu_28 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('30a5e70a1456447ebf90b5546e9bc321','2cb327ad59b140828fd26eb2a46cb948','0002000300030002','修改绑定','Edit','data','','','','0','0','wx.reply.follow.edit',NULL,'0','0','','1467474056','0')
/* wx_menu_29 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2a63040409094f1e9dc535dd78ce15b7','2cb327ad59b140828fd26eb2a46cb948','0002000300030003','删除绑定','Delete','data','','','','0','0','wx.reply.follow.delete',NULL,'0','0','','1467474080','0')
/* wx_menu_30 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0706112ff5dc46e388064a99bcdb0561','4cd8e4e9519e4cff95465194fdcc8d88','000200030004','关键词回复','Keyword','menu','/platform/wx/reply/conf/keyword','data-pjax','','1','0','wx.reply.keyword',NULL,'11','0','','1467472362','0')
/* wx_menu_31 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e864c78aba63448892cbcb6a3a7f4da7','0706112ff5dc46e388064a99bcdb0561','0002000300040001','添加绑定','Add','data','','','','0','0','wx.reply.keyword.add',NULL,'0','0','','1467474113','0')
/* wx_menu_32 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ff6cd243a77c4ae98dacf6149c816c75','0706112ff5dc46e388064a99bcdb0561','0002000300040002','修改绑定','Edit','data','','','','0','0','wx.reply.keyword.edit',NULL,'0','0','','1467474125','0')
/* wx_menu_33 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('733d3f35d49f45af99ca9220048583ba','0706112ff5dc46e388064a99bcdb0561','0002000300040003','删除绑定','Delete','data','','','','0','0','wx.reply.keyword.delete',NULL,'0','0','','1467474136','0')
/* wx_menu_34 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('bcf64d623fdd4519ae345b7a08c071a1','b0edc6861a494b79b97990dc05f0a524','00020004','微信配置','Config','menu','','','fa fa-weixin','1','0','wx.conf',NULL,'12','1','','1467472498','0')
/* wx_menu_35 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('66cc21d7ce104dd6877cbce114c59fb3','bcf64d623fdd4519ae345b7a08c071a1','000200040001','帐号配置','Account','menu','/platform/wx/conf/account','data-pjax','','1','0','wx.conf.account',NULL,'13','0','','1467472624','0')
/* wx_menu_36 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('309dc29ad3c34408a68df8f867a5c9ff','66cc21d7ce104dd6877cbce114c59fb3','0002000400010001','添加帐号','Add','data','','','','0','0','wx.conf.account.add',NULL,'0','0','','1467474187','0')
/* wx_menu_37 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('96554b09a2dd4f82bab7546fa59acd35','66cc21d7ce104dd6877cbce114c59fb3','0002000400010002','修改帐号','Edit','data','','','','0','0','wx.conf.account.edit',NULL,'0','0','','1467474197','0')
/* wx_menu_38 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d568f4c2b687404e8aec7b9edcae5767','66cc21d7ce104dd6877cbce114c59fb3','0002000400010003','删除帐号','Delete','data','','','','0','0','wx.conf.account.delete',NULL,'0','0','','1467474209','0')
/* wx_menu_39 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2fab774f8b6d40cb9d7e187babab2d91','bcf64d623fdd4519ae345b7a08c071a1','000200040002','菜单配置','Menu','menu','/platform/wx/conf/menu','data-pjax','','1','0','wx.conf.menu',NULL,'14','0','','1467472649','0')
/* wx_menu_40 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('45d958ca78304f25b51f6c71cf66f6d8','2fab774f8b6d40cb9d7e187babab2d91','0002000400020001','添加菜单','Add','data','','','','0','0','wx.conf.menu.add',NULL,'0','0','','1467474283','0')
/* wx_menu_41 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('44da90bc76a5419a841f4924333f7a66','2fab774f8b6d40cb9d7e187babab2d91','0002000400020002','修改菜单','Edit','data','','','','0','0','wx.conf.menu.edit',NULL,'0','0','','1467474294','0')
/* wx_menu_42 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9a9557177d334c209cf73c3817fe3b63','2fab774f8b6d40cb9d7e187babab2d91','0002000400020003','删除菜单','Delete','data','','','','0','0','wx.conf.menu.delete',NULL,'0','0','','1467474304','0')
/* wx_menu_43 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a43d291e0c94ad88c8b690009279e34','2fab774f8b6d40cb9d7e187babab2d91','0002000400020004','保存排序','Save','data','','','','0','0','wx.conf.menu.sort',NULL,'0','0','','1467474314','0')
/* wx_menu_44 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('5244f5c38eb24b918e9ad64d456daa38','2fab774f8b6d40cb9d7e187babab2d91','0002000400020005','推送到微信','Push','data','','','','0','0','wx.conf.menu.push',NULL,'0','0','','1467474330','0')
/* wx_menu_45 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6afc5075913d4df4b44a6476080e35a0','b0edc6861a494b79b97990dc05f0a524','00020005','模板消息','Template','menu','','','ti-notepad','1','0','wx.tpl',NULL,'50','1','','1470406797','0')
/* wx_menu_46 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1385ae887e5c4b8aa33fbf228be7f907','6afc5075913d4df4b44a6476080e35a0','000200050001','模板编号','Id','menu','/platform/wx/tpl/id','data-pjax','','1','0','wx.tpl.id',NULL,'51','0','','1470406854','0')
/* wx_menu_47 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e6b6224617b04090a76e46a4b048fb96','1385ae887e5c4b8aa33fbf228be7f907','0002000500010001','添加编号','Add','data','','','','0','0','wx.tpl.id.add',NULL,'54','0','','1470407055','0')
/* wx_menu_48 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3888f05aa4064f788ba7ec51c495ce7c','1385ae887e5c4b8aa33fbf228be7f907','0002000500010002','删除编号','Delete','data','','','','0','0','wx.tpl.id.delete',NULL,'55','0','','1470407068','0')
/* wx_menu_49 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('cabbe834a7474675b899e8442b5c2604','6afc5075913d4df4b44a6476080e35a0','000200050002','模板列表','List','menu','/platform/wx/tpl/list','data-pjax','','1','0','wx.tpl.list',NULL,'52','0','','1470406883','0')
/* wx_menu_50 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('a11163584dfe456cbfd6fb2d4b74391b','cabbe834a7474675b899e8442b5c2604','0002000500020001','获取列表','Get','data','','','','0','0','wx.tpl.list.get',NULL,'56','0','','1470407390','0')
/* wx_menu_51 */
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c76a84f871d047db955dd1465c845ac1','6afc5075913d4df4b44a6476080e35a0','000200050003','发送记录','Log','menu','/platform/wx/tpl/log','data-pjax','','1','0','wx.tpl.log',NULL,'53','0','','1470406926','0')
@@ -1,91 +0,0 @@
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT
'a0f47f6a6d734c8b9c6ce5c0dfd80001',
'',
LPAD(IFNULL(MAX(CAST(path AS UNSIGNED)), 0) + 1, 4, '0'),
'学习教育平台',
'Learning',
'menu',
'',
'',
'ti-book',
1,
0,
'learning',
NULL,
990,
1,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
'PC',
NULL,
NULL,
'x',
0,
0
FROM sys_menu
WHERE (parentId = '' OR parentId IS NULL)
AND CHAR_LENGTH(path) = 4
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80002', p.id, CONCAT(p.path, '0001'), '课程类型设置', 'Course Type', 'menu', '/platform/learning/course/type', 'data-pjax', '', 1, 0, 'learning.course.type', NULL, 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'k', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.course.type') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80003', p.id, CONCAT(p.path, '0002'), '课程管理', 'Course Manage', 'menu', '/platform/learning/course/manage', 'data-pjax', '', 1, 0, 'learning.course.manage', NULL, 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'k', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.course.manage') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80004', p.id, CONCAT(p.path, '0003'), '章节内容管理', 'Chapter Content', 'menu', '/platform/learning/chapter/content', 'data-pjax', '', 1, 0, 'learning.chapter.content', NULL, 3, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'z', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.chapter.content') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80005', p.id, CONCAT(p.path, '0004'), '课程展示', 'Course Display', 'menu', '/platform/learning/course/display', 'data-pjax', '', 1, 0, 'learning.course.display', NULL, 4, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'k', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.course.display') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80006', p.id, CONCAT(p.path, '0005'), '学习活动管理', 'Activity Manage', 'menu', '/platform/learning/activity/manage', 'data-pjax', '', 1, 0, 'learning.activity.manage', NULL, 5, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'x', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.activity.manage') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80007', p.id, CONCAT(p.path, '0006'), '学习统计', 'Learning Statistics', 'menu', '/platform/learning/statistics', 'data-pjax', '', 1, 0, 'learning.statistics', NULL, 6, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'x', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.statistics') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'a0f47f6a6d734c8b9c6ce5c0dfd80008', p.id, CONCAT(p.path, '0007'), '我的学习记录', 'My Learning Record', 'menu', '/platform/learning/my/record', 'data-pjax', '', 1, 0, 'learning.my.record', NULL, 7, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'w', 0, 0
FROM sys_menu p
WHERE p.permission = 'learning'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'learning.my.record') t);
INSERT INTO sys_role_menu (roleId, menuId)
SELECT r.id, m.id
FROM sys_role r
JOIN sys_menu m ON m.permission IN (
'learning',
'learning.course.type',
'learning.course.manage',
'learning.chapter.content',
'learning.course.display',
'learning.activity.manage',
'learning.statistics',
'learning.my.record'
)
LEFT JOIN sys_role_menu rm ON rm.roleId = r.id AND rm.menuId = m.id
WHERE r.code = 'SYSADMIN'
AND rm.roleId IS NULL;
@@ -1,160 +0,0 @@
-- 问卷服务菜单初始化
-- 使用 permission 做幂等判断,避免同一环境重复执行时插入重复菜单。
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT
'f6c0c37d2d7a4a22b5c7b1a1qsv0001',
'',
LPAD(IFNULL(MAX(CAST(path AS UNSIGNED)), 0) + 1, 4, '0'),
'日常办公',
'Day Office Work',
'menu',
'',
'',
'ti-briefcase',
1,
0,
'dayofficework',
NULL,
600,
1,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
'PC',
NULL,
NULL,
'r',
0,
0
FROM sys_menu
WHERE (parentId = '' OR parentId IS NULL)
AND CHAR_LENGTH(path) = 4
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'dayofficework') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT
'f6c0c37d2d7a4a22b5c7b1a1qsv0002',
p.id,
CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')),
'问卷服务',
'Questionnaire Service',
'menu',
'',
'',
'fa fa-list-alt',
1,
0,
'qsv',
NULL,
1,
1,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
'PC',
p.moduleId,
NULL,
'w',
0,
0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'dayofficework'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'f6c0c37d2d7a4a22b5c7b1a1qsv0003', p.id, CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')), '问卷管理', 'Questionnaire Manage', 'menu', '/platform/qsv/activity', 'data-pjax', '', 1, 0, 'qsv.activity', NULL, 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', p.moduleId, NULL, 'w', 0, 0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'qsv'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv.activity') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'f6c0c37d2d7a4a22b5c7b1a1qsv0004', p.id, CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')), '题库管理', 'Question Bank', 'menu', '/platform/qsv/bank', 'data-pjax', '', 1, 0, 'qsv.bank', NULL, 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', p.moduleId, NULL, 't', 0, 0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'qsv'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv.bank') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'f6c0c37d2d7a4a22b5c7b1a1qsv0005', p.id, CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')), '调查统计', 'Survey Statistics', 'menu', '/platform/qsv/survey', 'data-pjax', '', 1, 0, 'qsv.survey', NULL, 3, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', p.moduleId, NULL, 'd', 0, 0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'qsv'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv.survey') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'f6c0c37d2d7a4a22b5c7b1a1qsv0006', p.id, CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')), '答题排行', 'Quiz Rank', 'menu', '/platform/qsv/quizRank', 'data-pjax', '', 1, 0, 'qsv.quiz.rank', NULL, 4, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', p.moduleId, NULL, 'd', 0, 0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'qsv'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv.quiz.rank') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT 'f6c0c37d2d7a4a22b5c7b1a1qsv0007', p.id, CONCAT(p.path, LPAD(IFNULL(MAX(CAST(SUBSTRING(c.path, CHAR_LENGTH(p.path) + 1, 4) AS UNSIGNED)), 0) + 1, 4, '0')), '在线答题', 'Online Quiz', 'menu', '/platform/qsv/online', 'data-pjax', '', 1, 0, 'qsv.online', NULL, 5, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', p.moduleId, NULL, 'z', 0, 0
FROM sys_menu p
LEFT JOIN sys_menu c ON c.parentId = p.id AND CHAR_LENGTH(c.path) = CHAR_LENGTH(p.path) + 4
WHERE p.permission = 'qsv'
GROUP BY p.id, p.path, p.moduleId
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'qsv.online') t);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT
'f6c0c37d2d7a4a22b5c7b1a1qsv0008',
'',
LPAD(IFNULL(MAX(CAST(path AS UNSIGNED)), 0) + 1, 4, '0'),
'问卷服务',
'Questionnaire Service',
'menu',
'/platform/h5/qsv',
'data-pjax',
'',
1,
0,
'h5.qsv',
NULL,
601,
0,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
'H5',
NULL,
'/assets/mobile/svg/qsv/icon.svg',
'w',
1,
1
FROM sys_menu
WHERE (parentId = '' OR parentId IS NULL)
AND CHAR_LENGTH(path) = 4
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'h5.qsv') t);
-- 给系统管理员默认授权,其他角色可在角色管理中按需分配。
INSERT INTO sys_role_menu (roleId, menuId)
SELECT r.id, m.id
FROM sys_role r
JOIN sys_menu m ON m.permission IN (
'dayofficework',
'qsv',
'qsv.activity',
'qsv.bank',
'qsv.survey',
'qsv.quiz.rank',
'qsv.online',
'h5.qsv'
)
LEFT JOIN sys_role_menu rm ON rm.roleId = r.id AND rm.menuId = m.id
WHERE r.code = 'SYSADMIN'
AND rm.roleId IS NULL;
@@ -1,64 +0,0 @@
-- Home work template menu. Prefer a sibling of sys.homeActivity, then sys.manager, then sys.
INSERT INTO sys_menu (
id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt,
delFlag, platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService
)
SELECT
'e6ed122326a8492fa7f415f97eaf4f01',
parent.id,
CONCAT(parent.path, LPAD(IFNULL(child.maxNo, 0) + 1, 4, '0')),
'Work Template',
'Work Template',
'menu',
'/platform/sys/worktemplate',
'data-pjax',
'',
1,
0,
'sys.worktemplate',
NULL,
IFNULL(child.maxLocation, 0) + 1,
0,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
'',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
'PC',
NULL,
NULL,
'g',
0,
0
FROM (
SELECT p.*
FROM sys_menu p
WHERE p.id = (SELECT h.parentId FROM sys_menu h WHERE h.permission = 'sys.homeActivity' LIMIT 1)
OR p.permission IN ('sys.manager', 'sys')
ORDER BY
CASE
WHEN p.id = (SELECT h.parentId FROM sys_menu h WHERE h.permission = 'sys.homeActivity' LIMIT 1) THEN 0
WHEN p.permission = 'sys.manager' THEN 1
ELSE 2
END
LIMIT 1
) parent
LEFT JOIN (
SELECT parentId,
MAX(CAST(RIGHT(path, 4) AS UNSIGNED)) AS maxNo,
MAX(location) AS maxLocation
FROM sys_menu
GROUP BY parentId
) child ON child.parentId = parent.id
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE permission = 'sys.worktemplate'
);
INSERT INTO sys_role_menu (roleId, menuId)
SELECT r.id, m.id
FROM sys_role r
JOIN sys_menu m ON m.permission = 'sys.worktemplate'
LEFT JOIN sys_role_menu rm ON rm.roleId = r.id AND rm.menuId = m.id
WHERE r.code = 'SYSADMIN'
AND rm.roleId IS NULL;
@@ -1,49 +0,0 @@
INSERT INTO sys_menu (
id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt,
delFlag, processKey, platform, moduleId, isQuickEntry, picIcon, initialPinyinName,
isRecommendApp, isRecommendService
)
SELECT
'2a46a3fd5e284b0ea508264bd7f6ab31',
'5ba858277fa44aaf958b32055468f52a',
'000100040004',
'高级工具',
NULL,
'menu',
'/platform/sys/data/tool',
'data-pjax',
NULL,
1,
0,
'sys.data.advanced.tool',
NULL,
588,
0,
'29847d7826aa415a92d03b9576d01d3f',
UNIX_TIMESTAMP(NOW()) * 1000,
'29847d7826aa415a92d03b9576d01d3f',
UNIX_TIMESTAMP(NOW()) * 1000,
0,
NULL,
'PC',
NULL,
0,
NULL,
'g',
0,
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE permission = 'sys.data.advanced.tool'
);
INSERT INTO sys_role_menu (roleId, menuId)
SELECT
oldMap.roleId,
newMenu.id
FROM sys_role_menu oldMap
JOIN sys_menu oldMenu ON oldMenu.id = oldMap.menuId AND oldMenu.permission = 'sys.data.user.pull'
JOIN sys_menu newMenu ON newMenu.permission = 'sys.data.advanced.tool'
LEFT JOIN sys_role_menu existsMap ON existsMap.roleId = oldMap.roleId AND existsMap.menuId = newMenu.id
WHERE existsMap.roleId IS NULL;
@@ -1,3 +0,0 @@
ALTER TABLE qsv_subject
ADD COLUMN option_layout VARCHAR(20) DEFAULT 'VERTICAL' COMMENT '投票选项排列方式',
ADD COLUMN option_columns INT DEFAULT 1 COMMENT '投票选项横向列数';
-62
View File
@@ -1,62 +0,0 @@
/*QUARTZ_23*/
CREATE TABLE sys_qrtz_job_details(SCHED_NAME VARCHAR2(120) NOT NULL,JOB_NAME VARCHAR2(200) NOT NULL,JOB_GROUP VARCHAR2(200) NOT NULL,DESCRIPTION VARCHAR2(250) NULL,JOB_CLASS_NAME VARCHAR2(250) NOT NULL, IS_DURABLE VARCHAR2(1) NOT NULL,IS_NONCONCURRENT VARCHAR2(1) NOT NULL,IS_UPDATE_DATA VARCHAR2(1) NOT NULL,REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,JOB_DATA BLOB NULL,CONSTRAINT JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
/*QUARTZ_24*/
CREATE TABLE sys_qrtz_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,JOB_NAME VARCHAR2(200) NOT NULL, JOB_GROUP VARCHAR2(200) NOT NULL,DESCRIPTION VARCHAR2(250) NULL,NEXT_FIRE_TIME NUMBER(13) NULL,PREV_FIRE_TIME NUMBER(13) NULL,PRIORITY NUMBER(13) NULL,TRIGGER_STATE VARCHAR2(16) NOT NULL,TRIGGER_TYPE VARCHAR2(8) NOT NULL,START_TIME NUMBER(13) NOT NULL,END_TIME NUMBER(13) NULL,CALENDAR_NAME VARCHAR2(200) NULL,MISFIRE_INSTR NUMBER(2) NULL,JOB_DATA BLOB NULL,CONSTRAINT TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES sys_qrtz_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
/*QUARTZ_25*/
CREATE TABLE sys_qrtz_simple_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL, REPEAT_COUNT NUMBER(7) NOT NULL,REPEAT_INTERVAL NUMBER(12) NOT NULL,TIMES_TRIGGERED NUMBER(10) NOT NULL,CONSTRAINT SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_26*/
CREATE TABLE sys_qrtz_cron_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL, CRON_EXPRESSION VARCHAR2(120) NOT NULL, TIME_ZONE_ID VARCHAR2(80),CONSTRAINT CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_27*/
CREATE TABLE sys_qrtz_simprop_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,STR_PROP_1 VARCHAR2(512) NULL,STR_PROP_2 VARCHAR2(512) NULL,STR_PROP_3 VARCHAR2(512) NULL,INT_PROP_1 NUMBER(10) NULL,INT_PROP_2 NUMBER(10) NULL,LONG_PROP_1 NUMBER(13) NULL,LONG_PROP_2 NUMBER(13) NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR2(1) NULL,BOOL_PROP_2 VARCHAR2(1) NULL,CONSTRAINT SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_28*/
CREATE TABLE sys_qrtz_blob_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,BLOB_DATA BLOB NULL,CONSTRAINT BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_29*/
CREATE TABLE sys_qrtz_calendars(SCHED_NAME VARCHAR2(120) NOT NULL,CALENDAR_NAME VARCHAR2(200) NOT NULL,CALENDAR BLOB NOT NULL,CONSTRAINT CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
/*QUARTZ_30*/
CREATE TABLE sys_qrtz_paused_trigger_grps(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,CONSTRAINT PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
/*QUARTZ_31*/
CREATE TABLE sys_qrtz_fired_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,ENTRY_ID VARCHAR2(95) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,INSTANCE_NAME VARCHAR2(200) NOT NULL,FIRED_TIME NUMBER(13) NOT NULL,SCHED_TIME NUMBER(13) NOT NULL,PRIORITY NUMBER(13) NOT NULL,STATE VARCHAR2(16) NOT NULL,JOB_NAME VARCHAR2(200) NULL,JOB_GROUP VARCHAR2(200) NULL,IS_NONCONCURRENT VARCHAR2(1) NULL,REQUESTS_RECOVERY VARCHAR2(1) NULL,CONSTRAINT FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID))
/*QUARTZ_32*/
CREATE TABLE sys_qrtz_scheduler_state (SCHED_NAME VARCHAR2(120) NOT NULL,INSTANCE_NAME VARCHAR2(200) NOT NULL,LAST_CHECKIN_TIME NUMBER(13) NOT NULL,CHECKIN_INTERVAL NUMBER(13) NOT NULL,CONSTRAINT SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
/*QUARTZ_33*/
CREATE TABLE sys_qrtz_locks(SCHED_NAME VARCHAR2(120) NOT NULL,LOCK_NAME VARCHAR2(40) NOT NULL, CONSTRAINT LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME))
/*QUARTZ_34*/
create index qz_j_req_recovery on sys_qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY)
/*QUARTZ_35*/
create index qz_j_grp on sys_qrtz_job_details(SCHED_NAME,JOB_GROUP)
/*QUARTZ_36*/
create index qz_t_j on sys_qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
/*QUARTZ_37*/
create index qz_t_jg on sys_qrtz_triggers(SCHED_NAME,JOB_GROUP)
/*QUARTZ_38*/
create index qz_t_c on sys_qrtz_triggers(SCHED_NAME,CALENDAR_NAME)
/*QUARTZ_39*/
create index qz_t_g on sys_qrtz_triggers(SCHED_NAME,TRIGGER_GROUP)
/*QUARTZ_40*/
create index qz_t_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_STATE)
/*QUARTZ_41*/
create index qz_t_n_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_42*/
create index qz_t_n_g_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_43*/
create index qz_t_next_fire_time on sys_qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME)
/*QUARTZ_44*/
create index qz_t_nft_st on sys_qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME)
/*QUARTZ_45*/
create index qz_t_nft_misfire on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME)
/*QUARTZ_46*/
create index qz_t_nft_st_misfire on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE)
/*QUARTZ_47*/
create index qz_t_nft_st_misfire_grp on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_48*/
create index qz_ft_trig_inst_name on sys_qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME)
/*QUARTZ_49*/
create index qz_ft_inst_job_req_rcvry on sys_qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY)
/*QUARTZ_50*/
create index qz_ft_j_g on sys_qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
/*QUARTZ_51*/
create index qz_ft_jg on sys_qrtz_fired_triggers(SCHED_NAME,JOB_GROUP)
/*QUARTZ_52*/
create index qz_ft_t_g on sys_qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
/*QUARTZ_53*/
create index qz_ft_tg on sys_qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP)
-84
View File
@@ -1,84 +0,0 @@
/*QUARTZ_01*/
DROP TABLE IF EXISTS SYS_QRTZ_FIRED_TRIGGERS;
/*QUARTZ_02*/
DROP TABLE IF EXISTS SYS_QRTZ_PAUSED_TRIGGER_GRPS;
/*QUARTZ_03*/
DROP TABLE IF EXISTS SYS_QRTZ_SCHEDULER_STATE;
/*QUARTZ_04*/
DROP TABLE IF EXISTS SYS_QRTZ_LOCKS;
/*QUARTZ_05*/
DROP TABLE IF EXISTS SYS_QRTZ_SIMPLE_TRIGGERS;
/*QUARTZ_06*/
DROP TABLE IF EXISTS SYS_QRTZ_SIMPROP_TRIGGERS;
/*QUARTZ_07*/
DROP TABLE IF EXISTS SYS_QRTZ_CRON_TRIGGERS;
/*QUARTZ_08*/
DROP TABLE IF EXISTS SYS_QRTZ_BLOB_TRIGGERS;
/*QUARTZ_09*/
DROP TABLE IF EXISTS SYS_QRTZ_TRIGGERS;
/*QUARTZ_10*/
DROP TABLE IF EXISTS SYS_QRTZ_JOB_DETAILS;
/*QUARTZ_11*/
DROP TABLE IF EXISTS SYS_QRTZ_CALENDARS;
/*QUARTZ_12*/
CREATE TABLE SYS_QRTZ_JOB_DETAILS(SCHED_NAME VARCHAR(120) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,JOB_CLASS_NAME VARCHAR(250) NOT NULL,IS_DURABLE VARCHAR(1) NOT NULL,IS_NONCONCURRENT VARCHAR(1) NOT NULL,IS_UPDATE_DATA VARCHAR(1) NOT NULL,REQUESTS_RECOVERY VARCHAR(1) NOT NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB;
/*QUARTZ_13*/
CREATE TABLE SYS_QRTZ_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,JOB_NAME VARCHAR(200) NOT NULL,JOB_GROUP VARCHAR(200) NOT NULL,DESCRIPTION VARCHAR(250) NULL,NEXT_FIRE_TIME BIGINT(13) NULL,PREV_FIRE_TIME BIGINT(13) NULL,PRIORITY INTEGER NULL,TRIGGER_STATE VARCHAR(16) NOT NULL,TRIGGER_TYPE VARCHAR(8) NOT NULL,START_TIME BIGINT(13) NOT NULL,END_TIME BIGINT(13) NULL,CALENDAR_NAME VARCHAR(200) NULL,MISFIRE_INSTR SMALLINT(2) NULL,JOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)REFERENCES SYS_QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))ENGINE=InnoDB;
/*QUARTZ_14*/
CREATE TABLE SYS_QRTZ_SIMPLE_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,REPEAT_COUNT BIGINT(7) NOT NULL,REPEAT_INTERVAL BIGINT(12) NOT NULL,TIMES_TRIGGERED BIGINT(10) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;
/*QUARTZ_15*/
CREATE TABLE SYS_QRTZ_CRON_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,CRON_EXPRESSION VARCHAR(120) NOT NULL,TIME_ZONE_ID VARCHAR(80),PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;
/*QUARTZ_16*/
CREATE TABLE SYS_QRTZ_SIMPROP_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 INT NULL,INT_PROP_2 INT NULL,LONG_PROP_1 BIGINT NULL,LONG_PROP_2 BIGINT NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR(1) NULL,BOOL_PROP_2 VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;
/*QUARTZ_17*/
CREATE TABLE SYS_QRTZ_BLOB_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,BLOB_DATA BLOB NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))ENGINE=InnoDB;
/*QUARTZ_18*/
CREATE TABLE SYS_QRTZ_CALENDARS (SCHED_NAME VARCHAR(120) NOT NULL,CALENDAR_NAME VARCHAR(200) NOT NULL,CALENDAR BLOB NOT NULL,PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))ENGINE=InnoDB;
/*QUARTZ_19*/
CREATE TABLE SYS_QRTZ_PAUSED_TRIGGER_GRPS (SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))ENGINE=InnoDB;
/*QUARTZ_20*/
CREATE TABLE SYS_QRTZ_FIRED_TRIGGERS (SCHED_NAME VARCHAR(120) NOT NULL,ENTRY_ID VARCHAR(95) NOT NULL,TRIGGER_NAME VARCHAR(200) NOT NULL,TRIGGER_GROUP VARCHAR(200) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,FIRED_TIME BIGINT(13) NOT NULL,SCHED_TIME BIGINT(13) NOT NULL,PRIORITY INTEGER NOT NULL,STATE VARCHAR(16) NOT NULL,JOB_NAME VARCHAR(200) NULL,JOB_GROUP VARCHAR(200) NULL,IS_NONCONCURRENT VARCHAR(1) NULL,REQUESTS_RECOVERY VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,ENTRY_ID))ENGINE=InnoDB;
/*QUARTZ_21*/
CREATE TABLE SYS_QRTZ_SCHEDULER_STATE (SCHED_NAME VARCHAR(120) NOT NULL,INSTANCE_NAME VARCHAR(200) NOT NULL,LAST_CHECKIN_TIME BIGINT(13) NOT NULL,CHECKIN_INTERVAL BIGINT(13) NOT NULL,PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))ENGINE=InnoDB;
/*QUARTZ_22*/
CREATE TABLE SYS_QRTZ_LOCKS (SCHED_NAME VARCHAR(120) NOT NULL,LOCK_NAME VARCHAR(40) NOT NULL,PRIMARY KEY (SCHED_NAME,LOCK_NAME))ENGINE=InnoDB;
/*QUARTZ_23*/
CREATE INDEX IDX_SYS_QRTZ_01 ON SYS_QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
/*QUARTZ_24*/
CREATE INDEX IDX_SYS_QRTZ_02 ON SYS_QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);
/*QUARTZ_25*/
CREATE INDEX IDX_SYS_QRTZ_03 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
/*QUARTZ_26*/
CREATE INDEX IDX_SYS_QRTZ_04 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
/*QUARTZ_27*/
CREATE INDEX IDX_SYS_QRTZ_05 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
/*QUARTZ_28*/
CREATE INDEX IDX_SYS_QRTZ_06 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
/*QUARTZ_29*/
CREATE INDEX IDX_SYS_QRTZ_07 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
/*QUARTZ_30*/
CREATE INDEX IDX_SYS_QRTZ_08 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
/*QUARTZ_31*/
CREATE INDEX IDX_SYS_QRTZ_09 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
/*QUARTZ_32*/
CREATE INDEX IDX_SYS_QRTZ_10 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
/*QUARTZ_33*/
CREATE INDEX IDX_SYS_QRTZ_11 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
/*QUARTZ_34*/
CREATE INDEX IDX_SYS_QRTZ_12 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
/*QUARTZ_35*/
CREATE INDEX IDX_SYS_QRTZ_13 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
/*QUARTZ_36*/
CREATE INDEX IDX_SYS_QRTZ_14 ON SYS_QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
/*QUARTZ_37*/
CREATE INDEX IDX_SYS_QRTZ_15 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
/*QUARTZ_38*/
CREATE INDEX IDX_SYS_QRTZ_16 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
/*QUARTZ_39*/
CREATE INDEX IDX_SYS_QRTZ_17 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
/*QUARTZ_40*/
CREATE INDEX IDX_SYS_QRTZ_18 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
/*QUARTZ_41*/
CREATE INDEX IDX_SYS_QRTZ_19 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
/*QUARTZ_42*/
CREATE INDEX IDX_SYS_QRTZ_20 ON SYS_QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
-62
View File
@@ -1,62 +0,0 @@
/*QUARTZ_23*/
CREATE TABLE sys_qrtz_job_details(SCHED_NAME VARCHAR2(120) NOT NULL,JOB_NAME VARCHAR2(200) NOT NULL,JOB_GROUP VARCHAR2(200) NOT NULL,DESCRIPTION VARCHAR2(250) NULL,JOB_CLASS_NAME VARCHAR2(250) NOT NULL, IS_DURABLE VARCHAR2(1) NOT NULL,IS_NONCONCURRENT VARCHAR2(1) NOT NULL,IS_UPDATE_DATA VARCHAR2(1) NOT NULL,REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,JOB_DATA BLOB NULL,CONSTRAINT JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
/*QUARTZ_24*/
CREATE TABLE sys_qrtz_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,JOB_NAME VARCHAR2(200) NOT NULL, JOB_GROUP VARCHAR2(200) NOT NULL,DESCRIPTION VARCHAR2(250) NULL,NEXT_FIRE_TIME NUMBER(13) NULL,PREV_FIRE_TIME NUMBER(13) NULL,PRIORITY NUMBER(13) NULL,TRIGGER_STATE VARCHAR2(16) NOT NULL,TRIGGER_TYPE VARCHAR2(8) NOT NULL,START_TIME NUMBER(13) NOT NULL,END_TIME NUMBER(13) NULL,CALENDAR_NAME VARCHAR2(200) NULL,MISFIRE_INSTR NUMBER(2) NULL,JOB_DATA BLOB NULL,CONSTRAINT TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES sys_qrtz_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
/*QUARTZ_25*/
CREATE TABLE sys_qrtz_simple_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL, REPEAT_COUNT NUMBER(7) NOT NULL,REPEAT_INTERVAL NUMBER(12) NOT NULL,TIMES_TRIGGERED NUMBER(10) NOT NULL,CONSTRAINT SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_26*/
CREATE TABLE sys_qrtz_cron_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL, CRON_EXPRESSION VARCHAR2(120) NOT NULL, TIME_ZONE_ID VARCHAR2(80),CONSTRAINT CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_27*/
CREATE TABLE sys_qrtz_simprop_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,STR_PROP_1 VARCHAR2(512) NULL,STR_PROP_2 VARCHAR2(512) NULL,STR_PROP_3 VARCHAR2(512) NULL,INT_PROP_1 NUMBER(10) NULL,INT_PROP_2 NUMBER(10) NULL,LONG_PROP_1 NUMBER(13) NULL,LONG_PROP_2 NUMBER(13) NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR2(1) NULL,BOOL_PROP_2 VARCHAR2(1) NULL,CONSTRAINT SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_28*/
CREATE TABLE sys_qrtz_blob_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,BLOB_DATA BLOB NULL,CONSTRAINT BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),CONSTRAINT BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES sys_qrtz_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
/*QUARTZ_29*/
CREATE TABLE sys_qrtz_calendars(SCHED_NAME VARCHAR2(120) NOT NULL,CALENDAR_NAME VARCHAR2(200) NOT NULL,CALENDAR BLOB NOT NULL,CONSTRAINT CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
/*QUARTZ_30*/
CREATE TABLE sys_qrtz_paused_trigger_grps(SCHED_NAME VARCHAR2(120) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,CONSTRAINT PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
/*QUARTZ_31*/
CREATE TABLE sys_qrtz_fired_triggers(SCHED_NAME VARCHAR2(120) NOT NULL,ENTRY_ID VARCHAR2(95) NOT NULL,TRIGGER_NAME VARCHAR2(200) NOT NULL,TRIGGER_GROUP VARCHAR2(200) NOT NULL,INSTANCE_NAME VARCHAR2(200) NOT NULL,FIRED_TIME NUMBER(13) NOT NULL,SCHED_TIME NUMBER(13) NOT NULL,PRIORITY NUMBER(13) NOT NULL,STATE VARCHAR2(16) NOT NULL,JOB_NAME VARCHAR2(200) NULL,JOB_GROUP VARCHAR2(200) NULL,IS_NONCONCURRENT VARCHAR2(1) NULL,REQUESTS_RECOVERY VARCHAR2(1) NULL,CONSTRAINT FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID))
/*QUARTZ_32*/
CREATE TABLE sys_qrtz_scheduler_state (SCHED_NAME VARCHAR2(120) NOT NULL,INSTANCE_NAME VARCHAR2(200) NOT NULL,LAST_CHECKIN_TIME NUMBER(13) NOT NULL,CHECKIN_INTERVAL NUMBER(13) NOT NULL,CONSTRAINT SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
/*QUARTZ_33*/
CREATE TABLE sys_qrtz_locks(SCHED_NAME VARCHAR2(120) NOT NULL,LOCK_NAME VARCHAR2(40) NOT NULL, CONSTRAINT LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME))
/*QUARTZ_34*/
create index qz_j_req_recovery on sys_qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY)
/*QUARTZ_35*/
create index qz_j_grp on sys_qrtz_job_details(SCHED_NAME,JOB_GROUP)
/*QUARTZ_36*/
create index qz_t_j on sys_qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
/*QUARTZ_37*/
create index qz_t_jg on sys_qrtz_triggers(SCHED_NAME,JOB_GROUP)
/*QUARTZ_38*/
create index qz_t_c on sys_qrtz_triggers(SCHED_NAME,CALENDAR_NAME)
/*QUARTZ_39*/
create index qz_t_g on sys_qrtz_triggers(SCHED_NAME,TRIGGER_GROUP)
/*QUARTZ_40*/
create index qz_t_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_STATE)
/*QUARTZ_41*/
create index qz_t_n_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_42*/
create index qz_t_n_g_state on sys_qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_43*/
create index qz_t_next_fire_time on sys_qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME)
/*QUARTZ_44*/
create index qz_t_nft_st on sys_qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME)
/*QUARTZ_45*/
create index qz_t_nft_misfire on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME)
/*QUARTZ_46*/
create index qz_t_nft_st_misfire on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE)
/*QUARTZ_47*/
create index qz_t_nft_st_misfire_grp on sys_qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE)
/*QUARTZ_48*/
create index qz_ft_trig_inst_name on sys_qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME)
/*QUARTZ_49*/
create index qz_ft_inst_job_req_rcvry on sys_qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY)
/*QUARTZ_50*/
create index qz_ft_j_g on sys_qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
/*QUARTZ_51*/
create index qz_ft_jg on sys_qrtz_fired_triggers(SCHED_NAME,JOB_GROUP)
/*QUARTZ_52*/
create index qz_ft_t_g on sys_qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
/*QUARTZ_53*/
create index qz_ft_tg on sys_qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP)
-281
View File
@@ -1,281 +0,0 @@
/*QUARTZ_01*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_SYS_QRTZ_TRIGGERS_SYS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
ALTER TABLE [dbo].[SYS_QRTZ_TRIGGERS] DROP CONSTRAINT FK_SYS_QRTZ_TRIGGERS_SYS_QRTZ_JOB_DETAILS
/*QUARTZ_02*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_SYS_QRTZ_CRON_TRIGGERS_SYS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
ALTER TABLE [dbo].[SYS_QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_SYS_QRTZ_CRON_TRIGGERS_SYS_QRTZ_TRIGGERS
/*QUARTZ_03*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_SYS_QRTZ_SIMPLE_TRIGGERS_SYS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
ALTER TABLE [dbo].[SYS_QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_SYS_QRTZ_SIMPLE_TRIGGERS_SYS_QRTZ_TRIGGERS
/*QUARTZ_04*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_SYS_QRTZ_SIMPROP_TRIGGERS_SYS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
ALTER TABLE [dbo].[SYS_QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_SYS_QRTZ_SIMPROP_TRIGGERS_SYS_QRTZ_TRIGGERS
/*QUARTZ_05*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_CALENDARS]
/*QUARTZ_06*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_CRON_TRIGGERS]
/*QUARTZ_07*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_BLOB_TRIGGERS]
/*QUARTZ_08*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_FIRED_TRIGGERS]
/*QUARTZ_09*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_PAUSED_TRIGGER_GRPS]
/*QUARTZ_10*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_SCHEDULER_STATE]
/*QUARTZ_11*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_LOCKS]
/*QUARTZ_12*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_JOB_DETAILS]
/*QUARTZ_13*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_SIMPLE_TRIGGERS]
/*QUARTZ_14*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_SIMPROP_TRIGGERS]
/*QUARTZ_15*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SYS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
DROP TABLE [dbo].[SYS_QRTZ_TRIGGERS]
/*QUARTZ_16*/
CREATE TABLE [dbo].[SYS_QRTZ_CALENDARS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[CALENDAR_NAME] [VARCHAR] (200) NOT NULL ,
[CALENDAR] [IMAGE] NOT NULL
) ON [PRIMARY]
/*QUARTZ_17*/
CREATE TABLE [dbo].[SYS_QRTZ_CRON_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[CRON_EXPRESSION] [VARCHAR] (120) NOT NULL ,
[TIME_ZONE_ID] [VARCHAR] (80)
) ON [PRIMARY]
/*QUARTZ_18*/
CREATE TABLE [dbo].[SYS_QRTZ_FIRED_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[ENTRY_ID] [VARCHAR] (95) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[INSTANCE_NAME] [VARCHAR] (200) NOT NULL ,
[FIRED_TIME] [BIGINT] NOT NULL ,
[SCHED_TIME] [BIGINT] NOT NULL ,
[PRIORITY] [INTEGER] NOT NULL ,
[STATE] [VARCHAR] (16) NOT NULL,
[JOB_NAME] [VARCHAR] (200) NULL ,
[JOB_GROUP] [VARCHAR] (200) NULL ,
[IS_NONCONCURRENT] [VARCHAR] (1) NULL ,
[REQUESTS_RECOVERY] [VARCHAR] (1) NULL
) ON [PRIMARY]
/*QUARTZ_19*/
CREATE TABLE [dbo].[SYS_QRTZ_PAUSED_TRIGGER_GRPS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL
) ON [PRIMARY]
/*QUARTZ_20*/
CREATE TABLE [dbo].[SYS_QRTZ_SCHEDULER_STATE] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[INSTANCE_NAME] [VARCHAR] (200) NOT NULL ,
[LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,
[CHECKIN_INTERVAL] [BIGINT] NOT NULL
) ON [PRIMARY]
/*QUARTZ_21*/
CREATE TABLE [dbo].[SYS_QRTZ_LOCKS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[LOCK_NAME] [VARCHAR] (40) NOT NULL
) ON [PRIMARY]
/*QUARTZ_22*/
CREATE TABLE [dbo].[SYS_QRTZ_JOB_DETAILS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[JOB_NAME] [VARCHAR] (200) NOT NULL ,
[JOB_GROUP] [VARCHAR] (200) NOT NULL ,
[DESCRIPTION] [VARCHAR] (250) NULL ,
[JOB_CLASS_NAME] [VARCHAR] (250) NOT NULL ,
[IS_DURABLE] [VARCHAR] (1) NOT NULL ,
[IS_NONCONCURRENT] [VARCHAR] (1) NOT NULL ,
[IS_UPDATE_DATA] [VARCHAR] (1) NOT NULL ,
[REQUESTS_RECOVERY] [VARCHAR] (1) NOT NULL ,
[JOB_DATA] [IMAGE] NULL
) ON [PRIMARY]
/*QUARTZ_23*/
CREATE TABLE [dbo].[SYS_QRTZ_SIMPLE_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[REPEAT_COUNT] [BIGINT] NOT NULL ,
[REPEAT_INTERVAL] [BIGINT] NOT NULL ,
[TIMES_TRIGGERED] [BIGINT] NOT NULL
) ON [PRIMARY]
/*QUARTZ_24*/
CREATE TABLE [dbo].[SYS_QRTZ_SIMPROP_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[STR_PROP_1] [VARCHAR] (512) NULL,
[STR_PROP_2] [VARCHAR] (512) NULL,
[STR_PROP_3] [VARCHAR] (512) NULL,
[INT_PROP_1] [INT] NULL,
[INT_PROP_2] [INT] NULL,
[LONG_PROP_1] [BIGINT] NULL,
[LONG_PROP_2] [BIGINT] NULL,
[DEC_PROP_1] [NUMERIC] (13,4) NULL,
[DEC_PROP_2] [NUMERIC] (13,4) NULL,
[BOOL_PROP_1] [VARCHAR] (1) NULL,
[BOOL_PROP_2] [VARCHAR] (1) NULL,
) ON [PRIMARY]
/*QUARTZ_25*/
CREATE TABLE [dbo].[SYS_QRTZ_BLOB_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[BLOB_DATA] [IMAGE] NULL
) ON [PRIMARY]
/*QUARTZ_26*/
CREATE TABLE [dbo].[SYS_QRTZ_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[JOB_NAME] [VARCHAR] (200) NOT NULL ,
[JOB_GROUP] [VARCHAR] (200) NOT NULL ,
[DESCRIPTION] [VARCHAR] (250) NULL ,
[NEXT_FIRE_TIME] [BIGINT] NULL ,
[PREV_FIRE_TIME] [BIGINT] NULL ,
[PRIORITY] [INTEGER] NULL ,
[TRIGGER_STATE] [VARCHAR] (16) NOT NULL ,
[TRIGGER_TYPE] [VARCHAR] (8) NOT NULL ,
[START_TIME] [BIGINT] NOT NULL ,
[END_TIME] [BIGINT] NULL ,
[CALENDAR_NAME] [VARCHAR] (200) NULL ,
[MISFIRE_INSTR] [SMALLINT] NULL ,
[JOB_DATA] [IMAGE] NULL
) ON [PRIMARY]
/*QUARTZ_27*/
ALTER TABLE [dbo].[SYS_QRTZ_CALENDARS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[CALENDAR_NAME]
) ON [PRIMARY]
/*QUARTZ_28*/
ALTER TABLE [dbo].[SYS_QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON [PRIMARY]
/*QUARTZ_29*/
ALTER TABLE [dbo].[SYS_QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[ENTRY_ID]
) ON [PRIMARY]
/*QUARTZ_30*/
ALTER TABLE [dbo].[SYS_QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_GROUP]
) ON [PRIMARY]
/*QUARTZ_31*/
ALTER TABLE [dbo].[SYS_QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[INSTANCE_NAME]
) ON [PRIMARY]
/*QUARTZ_32*/
ALTER TABLE [dbo].[SYS_QRTZ_LOCKS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_LOCKS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[LOCK_NAME]
) ON [PRIMARY]
/*QUARTZ_33*/
ALTER TABLE [dbo].[SYS_QRTZ_JOB_DETAILS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[JOB_NAME],
[JOB_GROUP]
) ON [PRIMARY]
/*QUARTZ_34*/
ALTER TABLE [dbo].[SYS_QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON [PRIMARY]
/*QUARTZ_35*/
ALTER TABLE [dbo].[SYS_QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON [PRIMARY]
/*QUARTZ_36*/
ALTER TABLE [dbo].[SYS_QRTZ_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_SYS_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON [PRIMARY]
/*QUARTZ_37*/
ALTER TABLE [dbo].[SYS_QRTZ_CRON_TRIGGERS] ADD
CONSTRAINT [FK_SYS_QRTZ_CRON_TRIGGERS_SYS_QRTZ_TRIGGERS] FOREIGN KEY
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) REFERENCES [dbo].[SYS_QRTZ_TRIGGERS] (
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON DELETE CASCADE
/*QUARTZ_38*/
ALTER TABLE [dbo].[SYS_QRTZ_SIMPLE_TRIGGERS] ADD
CONSTRAINT [FK_SYS_QRTZ_SIMPLE_TRIGGERS_SYS_QRTZ_TRIGGERS] FOREIGN KEY
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) REFERENCES [dbo].[SYS_QRTZ_TRIGGERS] (
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON DELETE CASCADE
/*QUARTZ_39*/
ALTER TABLE [dbo].[SYS_QRTZ_SIMPROP_TRIGGERS] ADD
CONSTRAINT [FK_SYS_QRTZ_SIMPROP_TRIGGERS_SYS_QRTZ_TRIGGERS] FOREIGN KEY
(
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) REFERENCES [dbo].[SYS_QRTZ_TRIGGERS] (
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
) ON DELETE CASCADE
/*QUARTZ_40*/
ALTER TABLE [dbo].[SYS_QRTZ_TRIGGERS] ADD
CONSTRAINT [FK_SYS_QRTZ_TRIGGERS_SYS_QRTZ_JOB_DETAILS] FOREIGN KEY
(
[SCHED_NAME],
[JOB_NAME],
[JOB_GROUP]
) REFERENCES [dbo].[SYS_QRTZ_JOB_DETAILS] (
[SCHED_NAME],
[JOB_NAME],
[JOB_GROUP]
)
@@ -1,3 +0,0 @@
ALTER TABLE `site_cug_info`
ADD COLUMN `segmented_open_hours` JSON NULL COMMENT '分段预约场次信息' AFTER `open_hours`,
ADD COLUMN `full_day_open_hour` JSON NULL COMMENT '全天候预约时间段' AFTER `segmented_open_hours`;
@@ -1,3 +0,0 @@
ALTER TABLE `site_cug_info`
ADD COLUMN `reserve_time_type` INT NULL DEFAULT 1 COMMENT '预约时间段类型(1分段预约,2全天候预约)' AFTER `not_apply_time_list`,
ADD COLUMN `open_hours` JSON NULL COMMENT '场次信息' AFTER `reserve_time_type`;
@@ -1,2 +0,0 @@
ALTER TABLE `site_cug_info`
ADD COLUMN `site_photo` VARCHAR(255) NULL COMMENT '场地照片' AFTER `introduce`;
@@ -1,2 +0,0 @@
ALTER TABLE `sys_config`
MODIFY COLUMN `configValue` TEXT;
@@ -1,2 +0,0 @@
ALTER TABLE `sys_home_template`
ADD COLUMN `templateFile` varchar(1000) DEFAULT NULL COMMENT 'template file' AFTER `templateIcon`;
@@ -1,2 +0,0 @@
ALTER TABLE `sys_home_template`
ADD COLUMN `templateIcon` varchar(255) DEFAULT NULL COMMENT 'template icon' AFTER `templateName`;
@@ -1,6 +0,0 @@
ALTER TABLE `sys_home_template`
ADD COLUMN `templateName` varchar(50) DEFAULT NULL COMMENT 'display template name' AFTER `name`;
UPDATE `sys_home_template`
SET `templateName` = `name`
WHERE (`templateName` IS NULL OR `templateName` = '');
@@ -1,26 +0,0 @@
CREATE TABLE IF NOT EXISTS `sys_home_template` (
`id` varchar(32) NOT NULL COMMENT 'business id',
`name` varchar(50) DEFAULT NULL COMMENT 'template name',
`templateName` varchar(50) DEFAULT NULL COMMENT 'display template name',
`templateIcon` varchar(255) DEFAULT NULL COMMENT 'template icon',
`templateFile` varchar(1000) DEFAULT NULL COMMENT 'template file',
`cover` varchar(255) DEFAULT NULL COMMENT 'template cover',
`content` text COMMENT 'template content',
`url` varchar(1000) DEFAULT NULL COMMENT 'pc url',
`h5Url` varchar(1000) DEFAULT NULL COMMENT 'h5 url',
`allowUserGroupId` int DEFAULT NULL COMMENT 'allowed user group id',
`allowUserSql` varchar(1000) DEFAULT NULL COMMENT 'allowed user sql',
`enable` tinyint(1) DEFAULT 0 COMMENT 'enabled',
`classPath` varchar(500) DEFAULT NULL COMMENT 'source class path',
`top` tinyint(1) DEFAULT 0 COMMENT 'top flag',
`push` tinyint(1) DEFAULT 0 COMMENT 'push flag',
`sortNo` int DEFAULT 0 COMMENT 'sort number',
`startDate` datetime DEFAULT NULL COMMENT 'start date',
`endDate` datetime DEFAULT NULL COMMENT 'end date',
`createdBy` varchar(32) DEFAULT NULL,
`createdAt` bigint DEFAULT NULL,
`updatedBy` varchar(32) DEFAULT NULL,
`updatedAt` bigint DEFAULT NULL,
`delFlag` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='home work template';
-253
View File
@@ -1,253 +0,0 @@
-- 普惠疗休养系统字典初始化。
-- 执行后可在 /platform/sys/dict 页面看到:疗休养(Tour) -> 组织形式/疗休养类型/线路类型/床型。
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict001', '', '9500', '疗休养', '普惠疗休养平台字典', 'Tour', 0, 9500, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'Tour') t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict002', p.id, CONCAT(p.path, '0001'), '组织形式', '疗休养组织形式', 'organizationType', 0, 1, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'Tour'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'organizationType' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict003', p.id, CONCAT(p.path, '0001'), '校工会组织', '疗休养组织形式', 'schoolUnion', 0, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'organizationType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'schoolUnion' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict004', p.id, CONCAT(p.path, '0002'), '分工会组织', '疗休养组织形式', 'branchUnion', 0, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'organizationType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'branchUnion' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict005', p.id, CONCAT(p.path, '0003'), '个人组织', '疗休养组织形式', 'personal', 0, 3, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'organizationType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'personal' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict006', p.id, CONCAT(p.path, '0002'), '疗休养类型', '疗休养类型', 'tourType', 0, 2, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'Tour'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'tourType' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict007', p.id, CONCAT(p.path, '0001'), '普惠性疗休养', '疗休养类型', 'inclusiveTour', 0, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'tourType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'inclusiveTour' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict008', p.id, CONCAT(p.path, '0002'), '优秀职工疗休养', '疗休养类型', 'excellentWorkerTour', 0, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'tourType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'excellentWorkerTour' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict009', p.id, CONCAT(p.path, '0003'), '线路类型', '线路类型', 'lineType', 0, 3, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'Tour'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'lineType' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict010', p.id, CONCAT(p.path, '0001'), '省内线路', '线路类型', 'inProvinceLine', 0, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'lineType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'inProvinceLine' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict011', p.id, CONCAT(p.path, '0002'), '省外线路', '线路类型', 'outProvinceLine', 0, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'lineType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'outProvinceLine' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict020', p.id, CONCAT(p.path, '0004'), '床型', '床型', 'bedType', 0, 4, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'Tour'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'bedType' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict021', p.id, CONCAT(p.path, '0001'), '双人床', '床型', 'doubleBed', 0, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'bedType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'doubleBed' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict022', p.id, CONCAT(p.path, '0002'), '单人床', '床型', 'singleBed', 0, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'bedType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'singleBed' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict023', p.id, CONCAT(p.path, '0003'), '大床', '床型', 'kingBed', 0, 3, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'bedType'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'kingBed' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict012', '', '9600', '亲属关系', '亲属关系', 'familyRelationship', 0, 9600, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'familyRelationship') t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict013', p.id, CONCAT(p.path, '0001'), '直系亲属', '亲属关系', 'directRelative', 0, 1, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'familyRelationship'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'directRelative' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict014', p.id, CONCAT(p.path, '0001'), '父亲', '直系亲属', 'father', 0, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'father' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict015', p.id, CONCAT(p.path, '0002'), '母亲', '直系亲属', 'mother', 0, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'mother' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict016', p.id, CONCAT(p.path, '0003'), '丈夫', '直系亲属', 'husband', 0, 3, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'husband' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict017', p.id, CONCAT(p.path, '0004'), '妻子', '直系亲属', 'wife', 0, 4, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'wife' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict018', p.id, CONCAT(p.path, '0005'), '儿子', '直系亲属', 'son', 0, 5, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'son' AND `parentId` = p.id) t);
INSERT INTO `sys_dict` (
`id`, `parentId`, `path`, `name`, `remark`, `code`, `disabled`, `location`, `hasChildren`,
`createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`
)
SELECT
'b7c63f0c73a44a9a8c4f3d3bdict019', p.id, CONCAT(p.path, '0006'), '女儿', '直系亲属', 'daughter', 0, 6, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0
FROM `sys_dict` p
WHERE p.`code` = 'directRelative'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM `sys_dict` WHERE `code` = 'daughter' AND `parentId` = p.id) t);
UPDATE `sys_dict` SET `hasChildren` = 1 WHERE `code` IN ('Tour', 'organizationType', 'tourType', 'lineType', 'bedType', 'familyRelationship', 'directRelative');
@@ -1,7 +0,0 @@
-- Add matter reference so signup records are unique per travel period/matter.
ALTER TABLE `tour_ledger`
ADD COLUMN `matterId` varchar(32) DEFAULT NULL COMMENT '报名事项ID' AFTER `signupTime`;
ALTER TABLE `tour_ledger`
ADD KEY `idx_tour_ledger_matter` (`matterId`),
ADD KEY `idx_tour_ledger_matter_job` (`matterId`, `jobNo`);
@@ -1,2 +0,0 @@
ALTER TABLE `tour_ledger`
ADD COLUMN `overCostReimbursed` tinyint(1) DEFAULT 0 COMMENT '报销超出费用' AFTER `reimbursed`;
@@ -1,9 +0,0 @@
-- 疗休养台账查询加速索引。
ALTER TABLE `tour_ledger`
ADD KEY `idx_tour_ledger_year_signup` (`year`, `delFlag`, `signupTime`),
ADD KEY `idx_tour_ledger_year_line` (`year`, `lineId`, `delFlag`),
ADD KEY `idx_tour_ledger_year_union_type` (`year`, `unionId`, `lineType`, `delFlag`),
ADD KEY `idx_tour_ledger_year_job` (`year`, `jobNo`, `delFlag`);
ALTER TABLE `wf_process_instance`
ADD KEY `idx_wf_process_instance_business_state` (`businessNo`, `state`);
@@ -1,21 +0,0 @@
-- 直系亲属线路报名信息表,独立于普通携带亲属信息表。
CREATE TABLE IF NOT EXISTS `tour_ledger_direct_relative` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`ledgerId` varchar(32) DEFAULT NULL COMMENT '台账ID',
`relativeName` varchar(100) DEFAULT NULL COMMENT '亲属姓名',
`unitName` varchar(100) DEFAULT NULL COMMENT '所在单位',
`relationshipCode` varchar(50) DEFAULT NULL COMMENT '亲属关系编码',
`relationshipName` varchar(50) DEFAULT NULL COMMENT '亲属关系',
`lineId` varchar(32) DEFAULT NULL COMMENT '线路ID',
`lineName` varchar(100) DEFAULT NULL COMMENT '线路名称',
`travelStartTime` varchar(20) DEFAULT NULL COMMENT '出行开始日期',
`travelEndTime` varchar(20) DEFAULT NULL COMMENT '出行结束日期',
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
KEY `idx_tour_ledger_direct_relative_ledger` (`ledgerId`),
KEY `idx_tour_ledger_direct_relative_line` (`lineId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养直系亲属线路报名信息';
@@ -1,10 +0,0 @@
-- 线路管理增加创建人和所在单位业务字段。
ALTER TABLE `tour_line`
ADD COLUMN `creatorUserId` varchar(32) DEFAULT NULL COMMENT '创建人ID' AFTER `travelAgencyId`,
ADD COLUMN `creatorName` varchar(100) DEFAULT NULL COMMENT '创建人' AFTER `creatorUserId`,
ADD COLUMN `unitId` varchar(32) DEFAULT NULL COMMENT '所在单位ID' AFTER `creatorName`,
ADD COLUMN `unitName` varchar(100) DEFAULT NULL COMMENT '所在单位' AFTER `unitId`;
ALTER TABLE `tour_line`
ADD KEY `idx_tour_line_creator` (`creatorUserId`),
ADD KEY `idx_tour_line_unit` (`unitId`);
@@ -1,3 +0,0 @@
-- 线路管理增加是否直系亲属线路字段,默认否。
ALTER TABLE `tour_line`
ADD COLUMN `directFamilyUnitLine` tinyint(1) DEFAULT 0 COMMENT '是否直系亲属线路' AFTER `openFlag`;
@@ -1,3 +0,0 @@
-- 线路管理增加是否对外开放字段,默认是。
ALTER TABLE `tour_line`
ADD COLUMN `openFlag` tinyint(1) DEFAULT 1 COMMENT '是否对外开放' AFTER `mobileThumb`;
@@ -1,7 +0,0 @@
-- 疗休养事项增加创建人字段。
ALTER TABLE `tour_matter`
ADD COLUMN `creatorUserId` varchar(32) DEFAULT NULL COMMENT '创建人ID' AFTER `settingId`,
ADD COLUMN `creatorName` varchar(100) DEFAULT NULL COMMENT '创建人' AFTER `creatorUserId`;
ALTER TABLE `tour_matter`
ADD KEY `idx_tour_matter_creator` (`creatorUserId`);
@@ -1,26 +0,0 @@
-- 疗休养事项批次表。
CREATE TABLE IF NOT EXISTS `tour_matter_batch` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`matterId` varchar(32) DEFAULT NULL COMMENT '事项ID',
`lineId` varchar(32) DEFAULT NULL COMMENT '线路ID',
`batchName` varchar(100) DEFAULT NULL COMMENT '批次名称',
`signupStartTime` varchar(20) DEFAULT NULL COMMENT '报名开始时间',
`signupEndTime` varchar(20) DEFAULT NULL COMMENT '报名结束时间',
`travelStartTime` varchar(20) DEFAULT NULL COMMENT '出行开始时间',
`travelEndTime` varchar(20) DEFAULT NULL COMMENT '出行结束时间',
`changeDeadline` varchar(20) DEFAULT NULL COMMENT '变更截止时间',
`contactName` varchar(30) DEFAULT NULL COMMENT '联系人',
`contactPhone` varchar(30) DEFAULT NULL COMMENT '联系方式',
`minGroupPeople` int DEFAULT NULL COMMENT '最少成团人数',
`maxGroupPeople` int DEFAULT NULL COMMENT '最多成团人数',
`estimatedCost` decimal(10,2) DEFAULT NULL COMMENT '预计费用',
`enabled` tinyint(1) DEFAULT 1 COMMENT '状态',
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
KEY `idx_tour_matter_batch_matter` (`matterId`),
KEY `idx_tour_matter_batch_line` (`lineId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养事项批次';
@@ -1,25 +0,0 @@
-- 疗休养事项表。
CREATE TABLE IF NOT EXISTS `tour_matter` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`year` int DEFAULT NULL COMMENT '年度',
`matterName` varchar(100) DEFAULT NULL COMMENT '事项名称',
`settingId` varchar(32) DEFAULT NULL COMMENT '疗休养配置ID',
`creatorUserId` varchar(32) DEFAULT NULL COMMENT '创建人ID',
`creatorName` varchar(100) DEFAULT NULL COMMENT '创建人',
`unionId` varchar(32) DEFAULT NULL COMMENT '所属工会ID',
`organizationType` varchar(100) DEFAULT NULL COMMENT '组织形式',
`mobileThumb` varchar(500) DEFAULT NULL COMMENT '移动端缩略图',
`enabled` tinyint(1) DEFAULT 1 COMMENT '事项状态',
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tour_matter_year_name` (`year`, `matterName`),
KEY `idx_tour_matter_year` (`year`),
KEY `idx_tour_matter_creator` (`creatorUserId`),
KEY `idx_tour_matter_setting` (`settingId`),
KEY `idx_tour_matter_union` (`unionId`),
KEY `idx_tour_matter_org_type` (`organizationType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养事项';
@@ -1,6 +0,0 @@
-- Add activity user scope reference for tour settings.
ALTER TABLE `tour_setting`
ADD COLUMN `activityGroupId` varchar(32) DEFAULT NULL COMMENT '可参加人员范围ID' AFTER `tourType`;
ALTER TABLE `tour_setting`
ADD KEY `idx_tour_setting_activity_group` (`activityGroupId`);
@@ -1,3 +0,0 @@
-- 疗休养配置增加周期允许次数字段。
ALTER TABLE `tour_setting`
ADD COLUMN `cycleAllowedTimes` int DEFAULT NULL COMMENT '周期允许次数' AFTER `cycleTotalCost`;
@@ -1,2 +0,0 @@
ALTER TABLE `tour_setting`
ADD COLUMN `cycleTotalCost` int DEFAULT NULL COMMENT '周期内总费用' AFTER `cycleEndYear`;
@@ -1,4 +0,0 @@
-- Add optional cycle year range for tour settings.
ALTER TABLE `tour_setting`
ADD COLUMN `cycleStartYear` int DEFAULT NULL COMMENT '周期开始年度' AFTER `outProvinceRatio`,
ADD COLUMN `cycleEndYear` int DEFAULT NULL COMMENT '周期结束年度' AFTER `cycleStartYear`;
@@ -1,3 +0,0 @@
-- 疗休养配置增加是否填报床位信息字段,默认开启以兼容历史配置。
ALTER TABLE `tour_setting`
ADD COLUMN `fillBedInfo` tinyint(1) DEFAULT 1 COMMENT '是否填报床位信息' AFTER `allowFamily`;
@@ -1,3 +0,0 @@
ALTER TABLE `tour_setting`
ADD COLUMN `outProvinceRatioType` varchar(50) DEFAULT '当年报名人数' COMMENT '省外人数占比类型' AFTER `outProvinceRatio`,
ADD COLUMN `outProvinceFixedPeople` int DEFAULT 0 COMMENT '省外固定人数' AFTER `outProvinceRatioType`;
+6 -25
View File
@@ -5,7 +5,6 @@ CREATE TABLE IF NOT EXISTS `tour_setting` (
`year` int DEFAULT NULL COMMENT '年度',
`configName` varchar(100) DEFAULT NULL COMMENT '疗休养配置名称',
`tourType` varchar(50) DEFAULT NULL COMMENT '疗休养类型',
`travelPeopleQuota` int DEFAULT 0 COMMENT '出行人数指标',
`activityGroupId` varchar(32) DEFAULT NULL COMMENT '可参加人员范围ID',
`sortNo` int DEFAULT NULL COMMENT '排序编号',
`minGroupPeople` int DEFAULT NULL COMMENT '最少成团人数',
@@ -34,7 +33,7 @@ CREATE TABLE IF NOT EXISTS `tour_setting` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养配置';
-- 疗休养配置标段表。
-- 标段先挂在配置上维护,后续线路、服务单位、报名等模块可继续通过 lotId 做业务关联。
-- 标段先挂在配置上维护,后续线路、旅行社、报名等模块可继续通过 lotId 做业务关联。
CREATE TABLE IF NOT EXISTS `tour_setting_lot` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`settingId` varchar(32) DEFAULT NULL COMMENT '所属配置ID',
@@ -52,30 +51,12 @@ CREATE TABLE IF NOT EXISTS `tour_setting_lot` (
KEY `idx_tour_setting_lot_value` (`lotValue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养配置标段';
-- 疗休养配置分工会人员分配表。
CREATE TABLE IF NOT EXISTS `tour_setting_union_quota` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`settingId` varchar(32) DEFAULT NULL COMMENT '所属疗休养配置ID',
`unionId` varchar(32) DEFAULT NULL COMMENT '分工会ID',
`unionName` varchar(100) DEFAULT NULL COMMENT '分工会名称',
`peopleQuota` int DEFAULT 0 COMMENT '人员数量',
`createdBy` varchar(32) DEFAULT NULL COMMENT '创建人',
`createdAt` bigint DEFAULT NULL COMMENT '创建时间',
`updatedBy` varchar(32) DEFAULT NULL COMMENT '修改人',
`updatedAt` bigint DEFAULT NULL COMMENT '修改时间',
`delFlag` tinyint(1) DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tour_setting_union_quota_setting_union` (`settingId`, `unionId`),
KEY `idx_tour_setting_union_quota_setting` (`settingId`),
KEY `idx_tour_setting_union_quota_union` (`unionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疗休养配置分工会人员分配';
-- 服务单位管理表。
-- 旅行社管理表。
CREATE TABLE IF NOT EXISTS `tour_travel_agency` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`year` int DEFAULT NULL COMMENT '年度',
`agencyCode` varchar(50) DEFAULT NULL COMMENT '服务单位编号',
`agencyName` varchar(100) DEFAULT NULL COMMENT '服务单位名称',
`agencyCode` varchar(50) DEFAULT NULL COMMENT '旅行社编号',
`agencyName` varchar(100) DEFAULT NULL COMMENT '旅行社名称',
`contactName` varchar(30) DEFAULT NULL COMMENT '联系人',
`contactPhone` varchar(30) DEFAULT NULL COMMENT '联系人手机',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
@@ -91,7 +72,7 @@ CREATE TABLE IF NOT EXISTS `tour_travel_agency` (
UNIQUE KEY `uk_tour_travel_agency_year_code` (`year`, `agencyCode`),
KEY `idx_tour_travel_agency_name` (`agencyName`),
KEY `idx_tour_travel_agency_contact` (`contactName`, `contactPhone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养服务单位';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='普惠疗休养旅行社';
-- 线路管理表。
CREATE TABLE IF NOT EXISTS `tour_line` (
@@ -99,7 +80,7 @@ CREATE TABLE IF NOT EXISTS `tour_line` (
`year` int DEFAULT NULL COMMENT '创建年度',
`lineCode` varchar(50) DEFAULT NULL COMMENT '线路编号',
`lineName` varchar(100) DEFAULT NULL COMMENT '线路名称',
`travelAgencyId` varchar(32) DEFAULT NULL COMMENT '服务单位ID',
`travelAgencyId` varchar(32) DEFAULT NULL COMMENT '旅行社ID',
`creatorUserId` varchar(32) DEFAULT NULL COMMENT '创建人ID',
`creatorName` varchar(100) DEFAULT NULL COMMENT '创建人',
`unitId` varchar(32) DEFAULT NULL COMMENT '所在单位ID',
@@ -1,2 +0,0 @@
ALTER TABLE `tour_setting_lot`
ADD COLUMN `allowOverReimbursement` tinyint(1) DEFAULT 0 COMMENT '允许超出报销' AFTER `activityCost`;
@@ -78,10 +78,10 @@ layout("/layouts/platform.html"){
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
<el-table-column prop="arrivalAtSchoolDate" label="来校时间" sortable width="120"></el-table-column>
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
<!-- <el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
<el-table-column prop="position" label="干部职务" sortable width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>-->
<el-table-column prop="unitName" label="单位" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="unitId" label="单位编码" sortable width="120"></el-table-column>
<el-table-column prop="political" label="政治面貌" sortable></el-table-column>
@@ -71,10 +71,10 @@ layout("/layouts/platform.html"){
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
<el-table-column prop="arrivalAtSchoolDate" label="来校年月" sortable width="120"></el-table-column>
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
<!--<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
<el-table-column prop="position" label="职务" sortable width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>-->
<el-table-column prop="unitName" label="单位" show-overflow-tooltip sortable width="120"></el-table-column>
<el-table-column prop="unitId" label="单位编码" sortable width="120"></el-table-column>
<el-table-column prop="political" label="政治面貌" sortable></el-table-column>
@@ -120,9 +120,9 @@ layout("/layouts/platform.html"){
</div>
</el-timeline-item>
</el-timeline>
<span slot="footer" class="dialog-footer" v-loading="updateLoading">
<span slot="footer" class="dialog-footer">
<el-button @click="updateDialog = false" :disabled="updateLoading">取 消</el-button>
<el-button type="primary" @click="execUpdate" :disabled="updateLoading">确 定</el-button>
<el-button type="primary" @click="execUpdate" :disabled="updateLoading" :loading="updateLoading">确 定</el-button>
</span>
</el-dialog>
</div>
@@ -38,6 +38,13 @@ layout("/layouts/platform.html"){
<el-table-column label="身份" prop="roleName" show-overflow-tooltip></el-table-column>
<el-table-column label="入会时间" prop="joinTime" show-overflow-tooltip></el-table-column>
<el-table-column label="退会时间" prop="exitTime" show-overflow-tooltip></el-table-column>
<el-table-column label="退出方式" width="110">
<template v-slot="{row}">
<el-tag :type="row.exitType === 'AUDIT_EXIT' ? 'success' : 'info'" size="mini">
{{ exitTypeName(row) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template v-slot="{row}">
<el-button size="mini" type="primary" @click="onView(row)">查看</el-button>
@@ -76,14 +83,17 @@ layout("/layouts/platform.html"){
async getClubList() {
const resp = await this.$axios.post("/platform/club/infoManage/exitManage/getClubList")
if (resp.code === 0) {
this.clubList = resp.data
this.$set(this, "clubList", resp.data)
}
},
exitTypeName(row) {
return row.exitType === "AUDIT_EXIT" ? "审核退会" : "直接移出"
},
async pageData() {
const resp = await this.$axios.post("/platform/club/infoManage/exitManage/pageData", this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
this.$set(this, "tableData", resp.data.list)
this.$set(this.pageForm, "totalCount", resp.data.totalCount)
} else {
this.$message.warning(resp.msg)
}
@@ -1,58 +1,60 @@
const clubExitInfo = {
template:
/*language=HTML*/
`
<div>
<div class="process-title">
退会信息
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions border>
<el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format('YYYY-MM-DD')}}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{viewData.mobile}}</el-descriptions-item>
<el-descriptions-item label="电子信箱">{{viewData.email}}</el-descriptions-item>
<el-descriptions-item label="分工会">{{viewData.unionName}}</el-descriptions-item>
<el-descriptions-item label="部门" :span="2">{{viewData.unitName}}</el-descriptions-item>
<el-descriptions-item label="职务">{{viewData.position}}</el-descriptions-item>
<el-descriptions-item label="职称" :span="2">{{viewData.technicalTitle}}</el-descriptions-item>
<el-descriptions-item label="学历">{{viewData.education}}</el-descriptions-item>
<el-descriptions-item label="学位" :span="2">{{viewData.academicDegree}}</el-descriptions-item>
<el-descriptions-item label="同时参加其他社团情况" :span="3">{{viewData.sameTimeJoinOtherClubSituation}}</el-descriptions-item>
<el-descriptions-item label="文化、体育方面的活动经历、获奖情况" :span="3">{{viewData.awardsExperience}}</el-descriptions-item>
<el-descriptions-item label="照片" :span="3">
<img :src="viewData.avatar" alt="" style="width: 120px;height: 150px" v-if="viewData.avatar">
</el-descriptions-item>
<el-descriptions-item label="签字" :span="3">
<el-image v-if="viewData.signature" :src="viewData.signature" class="signature-image"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
<template v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
</el-descriptions>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>
</el-descriptions>
</div>
</template>
<snaker-chart ref="snakerChartRef"></snaker-chart>
</div>
`,
[
'<div>',
' <div class="process-title">',
' 退会信息',
' <el-link v-if="row.instanceId" type="primary" @click="openChart">点击查看流程图</el-link>',
' </div>',
' <el-descriptions border>',
' <el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>',
' <el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>',
' <el-descriptions-item label="退出方式">{{getExitTypeName()}}</el-descriptions-item>',
' <el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>',
' <el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format(\'YYYY-MM-DD\')}}</el-descriptions-item>',
' <el-descriptions-item label="联系电话">{{viewData.mobile}}</el-descriptions-item>',
' <el-descriptions-item label="电子信箱">{{viewData.email}}</el-descriptions-item>',
' <el-descriptions-item label="分工会">{{viewData.unionName}}</el-descriptions-item>',
' <el-descriptions-item label="部门" :span="2">{{viewData.unitName}}</el-descriptions-item>',
' <el-descriptions-item label="职务">{{viewData.position}}</el-descriptions-item>',
' <el-descriptions-item label="职称" :span="2">{{viewData.technicalTitle}}</el-descriptions-item>',
' <el-descriptions-item label="学历">{{viewData.education}}</el-descriptions-item>',
' <el-descriptions-item label="学位" :span="2">{{viewData.academicDegree}}</el-descriptions-item>',
' <el-descriptions-item label="同时参加其他社团情况" :span="3">{{viewData.sameTimeJoinOtherClubSituation}}</el-descriptions-item>',
' <el-descriptions-item label="文化、体育方面的活动经历、获奖情况" :span="3">{{viewData.awardsExperience}}</el-descriptions-item>',
' <el-descriptions-item label="照片" :span="3">',
' <img :src="viewData.avatar" alt="" style="width: 120px;height: 150px" v-if="viewData.avatar">',
' </el-descriptions-item>',
' <el-descriptions-item label="签字" :span="3">',
' <el-image v-if="viewData.signature" :src="viewData.signature" class="signature-image"></el-image>',
' <span v-else>暂无</span>',
' </el-descriptions-item>',
' </el-descriptions>',
' <template v-for="task in doneTasks">',
' <div class="mt10">',
' <div class="process-title">{{ task.displayName }}</div>',
' <el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-if="task.ext.isFirstTaskNode">',
' <el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>',
' <el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>',
' <el-descriptions-item label="办理结果">',
' <dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>',
' </el-descriptions-item>',
' </el-descriptions>',
' <el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>',
' <el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>',
' <el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>',
' <el-descriptions-item label="办理结果">',
' <dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>',
' </el-descriptions-item>',
' <el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>',
' </el-descriptions>',
' </div>',
' </template>',
' <snaker-chart ref="snakerChartRef"></snaker-chart>',
' <slot></slot>',
'</div>'
].join(''),
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
@@ -63,33 +65,43 @@ const clubExitInfo = {
},
methods: {
onOpen(row) {
this.row = row
this.$set(this, "row", row || {})
this.$set(this, "viewData", {})
this.$set(this, "doneTasks", [])
this.$axios.post("/platform/club/infoManage/exitManage/info", { id: row.id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
this.$set(this, "viewData", res.data || {})
}
})
this.getDoneTasks()
if (row.instanceId) {
this.getDoneTasks()
}
},
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
this.$set(this, "doneTasks", res.data || [])
}
})
},
openChart(){
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
getExitTypeName() {
const exitType = this.row.exitType || this.viewData.exitType
return exitType === "AUDIT_EXIT" ? "审核退会" : "直接移出"
},
openChart() {
if (this.row.instanceId) {
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
}
},
style: /*language=CSS*/ `
.el-descriptions-item__label {
width: 200px;
min-width: 200px;
max-width: 200px;
}
.el-tabs__header {
margin: 0;
}
`
style: /*language=CSS*/ [
'.el-descriptions-item__label {',
' width: 200px;',
' min-width: 200px;',
' max-width: 200px;',
'}',
'.el-tabs__header {',
' margin: 0;',
'}'
].join('')
}
@@ -35,6 +35,8 @@
<el-table-column label="姓名" prop="userName" show-overflow-tooltip sortable></el-table-column>
<el-table-column label="性别" prop="sex" show-overflow-tooltip sortable></el-table-column>
<el-table-column label="电话" prop="mobile" show-overflow-tooltip></el-table-column>
<el-table-column label="人员类型" prop="personType" show-overflow-tooltip sortable></el-table-column>
<el-table-column label="在职状态" prop="userState" show-overflow-tooltip sortable></el-table-column>
<el-table-column label="所属单位" prop="unitName" sortable show-overflow-tooltip></el-table-column>
<el-table-column label="身份" prop="roleName" show-overflow-tooltip></el-table-column>
<el-table-column label="入会时间" prop="joinTime" show-overflow-tooltip sortable></el-table-column>
@@ -20,7 +20,12 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="人员状态:">
<dict-select clearable code="USER_STATE" placeholder="请选择人员状态" v-model="pageForm.userState"></dict-select>
<el-select clearable placeholder="请选择人员状态" v-model="pageForm.userState">
<el-option label="在职" value="在职"></el-option>
<el-option label="在岗" value="在岗"></el-option>
<el-option label="退休" value="退休"></el-option>
<el-option label="不在岗" value="不在岗"></el-option>
</el-select>
</search-item>
<search-item label="性别:">
<el-select clearable filterable placeholder="请选择性别" v-model="pageForm.sex">
@@ -27,8 +27,8 @@ layout("/layouts/platform.html"){
:value="o.id"></el-option>
</el-select>
</search-item>
<search-item label="荣誉别">
<el-select v-model="pageForm.honorLevel" placeholder="请选择荣誉别" clearable>
<search-item label="荣誉别">
<el-select v-model="pageForm.honorLevel" placeholder="请选择荣誉别" clearable>
<el-option v-for="o in honorLevelList" :key="o.id" :label="o.name" :value="o.id"></el-option>
</el-select>
</search-item>
@@ -77,7 +77,7 @@ layout("/layouts/platform.html"){
sortable></el-table-column>
<!--<el-table-column prop="prizeDesc" label="奖项说明" ></el-table-column>-->
<el-table-column prop="typeName" label="荣誉类型"></el-table-column>
<el-table-column prop="levelName" label="别"
<el-table-column prop="levelName" label="荣誉类别"
sortable></el-table-column>
<el-table-column prop="grantUnit" label="授予单位"
show-overflow-tooltip></el-table-column>
@@ -185,7 +185,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>-->
<el-col :span="6">
<el-form-item label="别">{{ viewData.levelName }}</el-form-item>
<el-form-item label="荣誉类别">{{ viewData.levelName }}</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="授予单位">{{ viewData.grantUnit }}</el-form-item>
@@ -303,9 +303,9 @@ layout("/layouts/platform.html"){
prize +
"&honorLevel=" +
honorLevel +
"&userName" +
"&userName=" +
userName +
"&unitName" +
"&unitName=" +
unitName
},
openEdit(row) {
@@ -96,6 +96,9 @@ layout("/layouts/platform.html"){
{{item.name}}
</el-radio>
</el-radio-group>
<span class="ml10 text-danger" v-if="getProjectTipByProject(formData.reimburseProject)">
{{getProjectTipByProject(formData.reimburseProject)}}
</span>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="经办人">{{formData.userName}}({{formData.loginName}})</el-descriptions-item>
@@ -400,145 +403,6 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="支付信息" :span="3">
<div class="mb10">
<el-button type="primary" size="mini" @click="addPaymentInfo">新增支付信息</el-button>
</div>
<el-table class="payment-info-table" :data="paymentInfoRows" border empty-text="暂无支付信息" style="width: 100%">
<el-table-column label="支付方式" min-width="160">
<template slot-scope="scope">
<el-form-item :prop="'paymentDetails.' + scope.$index + '.paymentWay'"
:rules="paymentDetailRules.paymentWay">
<el-select v-model="scope.row.paymentWay"
clearable
placeholder="请选择支付方式"
style="width: 100%"
@change="handlePaymentWayChange(scope.row)">
<el-option
v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY"
:key="item.code"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="金额" min-width="140">
<template slot-scope="scope">
<el-form-item :prop="'paymentDetails.' + scope.$index + '.money'"
:rules="paymentDetailRules.money">
<el-input v-model="scope.row.money" placeholder="请输入金额"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="付款人" min-width="240">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.payer'"
:rules="paymentDetailRules.payer">
<el-select style="width: 100%"
v-model="scope.row.payer"
@change="payerUserChange(scope.row)"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethodForPayer(scope.row)">
<el-option
v-for="item in scope.row.payerOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="户名" min-width="180">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankUserName'"
:rules="paymentDetailRules.bankUserName">
<el-select
v-model="scope.row.bankUserName"
@change="handleBankUserNameChange(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入户名"
style="width: 100%">
<el-option
v-for="(item, index) in getBankHistoryUserNames(scope.row)"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="开户行" min-width="220">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankOfDeposit'"
:rules="paymentDetailRules.bankOfDeposit">
<el-select
v-model="scope.row.bankOfDeposit"
@change="fillBankInfoFromHistory(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入开户行名称"
style="width: 100%">
<el-option
v-for="(item, index) in scope.row.historyData"
:key="index"
:label="item.bankOfDeposit"
:value="item.bankOfDeposit">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="银行卡号" min-width="220">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankCardNumber'"
:rules="paymentDetailRules.bankCardNumber">
<el-select
v-model="scope.row.bankCardNumber"
@change="fillBankInfoFromHistory(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入银行卡号"
style="width: 100%">
<el-option
v-for="(item, index) in scope.row.historyData"
:key="index"
:label="item.bankCardNumber"
:value="item.bankCardNumber">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="120">
<template slot-scope="scope">
<el-button type="text" style="color: #f56c6c;" @click="deletePaymentInfo(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-descriptions-item>
<el-descriptions-item label="参加随行人员" :span="3"
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
<el-form-item prop="participants" label="参加随行人员">
@@ -563,7 +427,8 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :span="3">
<el-descriptions-item :span="3"
v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
<template slot="label">
附件
</template>
@@ -619,6 +484,148 @@ layout("/layouts/platform.html"){
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<div class="invoice-field-title">支付信息</div>
<div>
<div class="mb10">
<el-button type="primary" size="mini" @click="addPaymentInfo">新增支付信息</el-button>
</div>
<el-table class="payment-info-table" :data="paymentInfoRows" border empty-text="暂无支付信息" style="width: 100%">
<el-table-column label="支付方式" min-width="160">
<template slot-scope="scope">
<el-form-item :prop="'paymentDetails.' + scope.$index + '.paymentWay'"
:rules="paymentDetailRules.paymentWay">
<el-select v-model="scope.row.paymentWay"
clearable
placeholder="请选择支付方式"
style="width: 100%"
@change="handlePaymentWayChange(scope.row)">
<el-option
v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY"
:key="item.code"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="金额" min-width="140">
<template slot-scope="scope">
<el-form-item :prop="'paymentDetails.' + scope.$index + '.money'"
:rules="paymentDetailRules.money">
<el-input v-model="scope.row.money" placeholder="请输入金额"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="付款人" min-width="240">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.payer'"
:rules="paymentDetailRules.payer">
<el-select style="width: 100%"
v-model="scope.row.payer"
@change="payerUserChange(scope.row)"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethodForPayer(scope.row)">
<el-option
v-for="item in scope.row.payerOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="户名" min-width="180">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankUserName'"
:rules="paymentDetailRules.bankUserName">
<el-select
v-model="scope.row.bankUserName"
@change="handleBankUserNameChange(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入户名"
style="width: 100%">
<el-option
v-for="(item, index) in getBankHistoryUserNames(scope.row)"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="开户行" min-width="220">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankOfDeposit'"
:rules="paymentDetailRules.bankOfDeposit">
<el-select
v-model="scope.row.bankOfDeposit"
@change="fillBankInfoFromHistory(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入开户行名称"
style="width: 100%">
<el-option
v-for="(item, index) in scope.row.historyData"
:key="index"
:label="item.bankOfDeposit"
:value="item.bankOfDeposit">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="银行卡号" min-width="220">
<template slot-scope="scope">
<el-form-item v-if="isPrivatePayment(scope.row)"
:prop="'paymentDetails.' + scope.$index + '.bankCardNumber'"
:rules="paymentDetailRules.bankCardNumber">
<el-select
v-model="scope.row.bankCardNumber"
@change="fillBankInfoFromHistory(scope.row)"
clearable
filterable
allow-create
default-first-option
placeholder="请输入银行卡号"
style="width: 100%">
<el-option
v-for="(item, index) in scope.row.historyData"
:key="index"
:label="item.bankCardNumber"
:value="item.bankCardNumber">
</el-option>
</el-select>
</el-form-item>
<span v-else>无需填写</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="120">
<template slot-scope="scope">
<el-button type="text" style="color: #f56c6c;" @click="deletePaymentInfo(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="24">
<div class="invoice-toolbar">
<div>
@@ -819,7 +826,21 @@ layout("/layouts/platform.html"){
{required: true, message: "请填写联系方式", trigger: ["change", "blur"]},
{pattern: /^(1[3-9]\d{9}|0\d{2,3}-?\d{7,8})$/, message: "请输入正确的联系方式", trigger: "blur"}
],
files: [{required: true, message: "请上传附件", trigger: ["change", "blur"]}],
files: [{
validator: (rule, value, callback) => {
// 慰问项目不展示附件上传,提交时无需校验附件。
if (this.formData.reimburseProject === "UNION_REIMBURSE_PROJECT_1") {
callback()
return
}
if (!value || value.length === 0) {
callback(new Error("请上传附件"))
return
}
callback()
},
trigger: ["change", "blur"]
}],
userSign: [{required: true, message: "请签名", trigger: ["change", "blur"]}],
// certifierUserId: [{required: true, message: "请填写认证人", trigger: ["change", "blur"]}],
@@ -1205,6 +1226,11 @@ layout("/layouts/platform.html"){
this.rebuildInvoiceSummary()
this.normalizeFundBalance()
}
this.$nextTick(() => {
if (this.$refs.formRef) {
this.$refs.formRef.clearValidate("files")
}
})
},
openInvoiceDialog(mode, row, index) {
this.invoiceDialogMode = mode
@@ -1561,10 +1587,10 @@ layout("/layouts/platform.html"){
return new Promise((resolve) => {
this.rebuildInvoiceSummary()
const paymentDetails = this.preparePaymentDetailsForSubmit()
this.$refs.formRef.validate((valid) => {
this.$refs.formRef.validate((valid, invalidFields) => {
if (valid) {
if (!this.validatePaymentDetailsBeforeSubmit(paymentDetails)) {
this.$set(this, "activeTabName", "basic")
this.$set(this, "activeTabName", "invoice")
resolve(false)
return
}
@@ -1581,6 +1607,12 @@ layout("/layouts/platform.html"){
this.normalizeFundBalance()
resolve(true)
} else {
// 支付信息已移至发票信息页,支付明细校验失败时跳转到对应页签。
const paymentDetailInvalid = Object.keys(invalidFields || {})
.some((field) => field.indexOf("paymentDetails.") === 0)
if (paymentDetailInvalid) {
this.$set(this, "activeTabName", "invoice")
}
this.$message.warning("请完善必填信息")
resolve(false)
}
@@ -1592,7 +1624,7 @@ layout("/layouts/platform.html"){
const isValid = await this.validateBeforeSubmit()
if (!isValid) return
this.$confirm("您确定要提交吗?", "提示", {
this.$confirm("您确定要提交吗?审核通过后可前往我的报销打印!", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
@@ -1612,7 +1644,7 @@ layout("/layouts/platform.html"){
const isValid = await this.validateBeforeSubmit()
if (!isValid) return
this.$confirm("您确定要提交吗?", "提示", {
this.$confirm("您确定要提交吗?审核通过后可前往我的报销打印!", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
@@ -1650,6 +1682,14 @@ layout("/layouts/platform.html"){
const project = this.descOptions.find(item => item.reimburseProject === projectCode);
return project ? project.fileDesc : '';
},
// 根据当前选择的报销项目获取管理端配置的提示内容。
getProjectTipByProject(projectCode) {
if (!this.descOptions || !Array.isArray(this.descOptions)) {
return '';
}
const project = this.descOptions.find(item => item.reimburseProject === projectCode);
return project ? project.projectTip : '';
},
// 新建申请默认优先选择分工会经费;若当前用户没有对应权限,则按页面可见权限回退到其它经费来源。
getDefaultFundSource() {
if (this.$auth.hasPermission("unionReimburse.fgh")) {
@@ -62,11 +62,17 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column prop="reimburseProject" label="报销项目" sortable="custom">
<template slot-scope="{row}">
<span v-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">慰问</span>
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">文体活动</span>
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_3'">日常活动</span>
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_4'">专项活动</span>
<span v-else>{{ row.reimburseProject }}</span>
<el-select v-if="isAdmin && row.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'"
:value="row.reimburseProject"
size="mini"
style="width: 120px"
@change="updateReimburseProject(row, $event)">
<el-option v-for="item in activityReimburseProjectOptions"
:key="item.code"
:label="item.name"
:value="item.code"></el-option>
</el-select>
<span v-else>{{ getReimburseProjectName(row.reimburseProject) }}</span>
</template>
</el-table-column>
<el-table-column label="备注">
@@ -106,6 +112,7 @@ layout("/layouts/platform.html"){
<el-form :model="editFormData" :rules="editFormRules" ref="editForm" label-width="120px">
<el-form-item label="实际报销金额" prop="realMoney">
<el-input v-model="editFormData.realMoney" placeholder="请输入实际报销金额"></el-input>
<div class="text-muted mt5">申请金额:{{ editFormData.maxMoney }}</div>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -137,7 +144,8 @@ layout("/layouts/platform.html"){
editDialogVisible: false,
editFormData: {
realMoney: '',
id: '' // 报销记录ID
id: '', // 报销记录ID
maxMoney: '0.00' // 申请金额上限
},
editFormRules: {
realMoney: [
@@ -151,12 +159,50 @@ layout("/layouts/platform.html"){
computed: {
isAdmin() {
return this.$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])
},
activityReimburseProjectOptions() {
const activityProjectCodes = [
"UNION_REIMBURSE_PROJECT_2",
"UNION_REIMBURSE_PROJECT_3",
"UNION_REIMBURSE_PROJECT_4"
]
return (this.dict.type.UNION_REIMBURSE_PROJECT || [])
.filter((item) => activityProjectCodes.includes(item.code))
}
},
methods: {
formatCreateTime(value) {
return value && this.$moment(value).isValid() ? this.$moment(value).format("YYYY-MM-DD HH:mm:ss") : ""
},
getReimburseProjectName(reimburseProject) {
const project = (this.dict.type.UNION_REIMBURSE_PROJECT || [])
.find((item) => item.code === reimburseProject)
return project ? project.name : reimburseProject
},
async updateReimburseProject(row, reimburseProject) {
if (reimburseProject === row.reimburseProject) {
return
}
try {
await this.$confirm("确定修改该记录的报销项目吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
const res = await this.$axios.post("/platform/unionReimburse/collect/updateReimburseProject", {
id: row.id,
reimburseProject: reimburseProject
})
if (res.code === 0) {
this.$set(row, "reimburseProject", reimburseProject)
this.$message.success("报销项目修改成功")
} else {
this.$message.error(res.msg)
}
} catch (error) {
// 取消确认时保持列表原项目,不修改页面数据。
}
},
onView(row) {
this.$refs.guava.edit(()=>{
this.showApprovalForm = false
@@ -179,8 +225,10 @@ layout("/layouts/platform.html"){
},
openEdit(row) {
// 初始化编辑表单数据
this.editFormData.id = row.id;
this.editFormData.realMoney = row.realMoney || '';
const applyMoney = row.money != null ? row.money : row.condolenceMoney
this.$set(this.editFormData, "id", row.id)
this.$set(this.editFormData, "realMoney", row.realMoney || '')
this.$set(this.editFormData, "maxMoney", Number(applyMoney || 0).toFixed(2))
this.editDialogVisible = true;
},
@@ -195,6 +243,10 @@ layout("/layouts/platform.html"){
saveFinallyMoney() {
this.$refs.editForm.validate((valid) => {
if (valid) {
if (Number(this.editFormData.realMoney) > Number(this.editFormData.maxMoney)) {
this.$message.error("实际报销金额不能超过申请金额:" + this.editFormData.maxMoney)
return
}
this.$axios.post("/platform/unionReimburse/collect/updateActuallyAmount", {
id: this.editFormData.id,
realMoney: this.editFormData.realMoney
@@ -14,6 +14,10 @@ const basicForm = {
<el-input type="text" v-model="formData.fileDesc" maxlength="50"
placeholder="请填写附件说明"></el-input>
</el-form-item>
<el-form-item label="报销项目提示" prop="projectTip">
<el-input type="textarea" v-model="formData.projectTip" maxlength="500" show-word-limit
placeholder="请填写报销项目提示"></el-input>
</el-form-item>
</el-form-item>
</el-form>
@@ -84,6 +84,7 @@ layout("/layouts/platform.html"){
{prop: 'code', label: '项目编码'},
{prop: 'name', label: '项目名称'},
{prop: 'fileDesc', label: '附件说明'},
{prop: 'projectTip', label: '报销项目提示'},
// {prop: 'isUploadFile', label: '是否上传附件'},
],
}
@@ -20,8 +20,6 @@ const COMMON_QUERY = {
userStates: [],
personTypes: [],
preparedBys: [],
userAttribute: '',
userAttributes: [],
}
}
},
@@ -31,8 +29,6 @@ const COMMON_QUERY = {
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
// 多选值沿用现有数组参数的JSON提交口径,便于后端稳定绑定List。
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
this.$emit('search', pageForm)
},
async initData(){
@@ -63,12 +63,7 @@
<el-descriptions-item label="工作单位">
<el-form-item prop="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
disabled @change="getUnionName(formData.unitId)"
v-model="formData.unitId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属工会">
@@ -278,6 +273,18 @@
}
},
methods: {
normalizeUnitField() {
if (!this.formData || !this.formData.unitId) {
return
}
const unitId = String(this.formData.unitId)
this.$set(this.formData, "unitId", unitId)
const unit = this.units.find(v => String(v.id) === unitId)
if (unit) {
this.$set(this.formData, "unitName", unit.name)
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
}
},
// 提交
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
@@ -446,7 +453,7 @@
this.$set(this.formData, "userState", userState)
this.$set(this.formData, "personType", personType)
this.$set(this.formData, "unitName", unit ? unit.name : unitName)
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
this.$set(this.formData, "unitId", unit ? String(unit.id) : unitId)
this.$set(this.formData, "unionName", union ? union.name : unionName)
this.$set(this.formData, "unionId", union ? union.id : unionId)
@@ -458,8 +465,9 @@
},
},
async created() {
this.init()
await this.init()
this.units = await this.$businessTool.listUnit()
this.normalizeUnitField()
await this.validateApply()
}
})
@@ -69,12 +69,7 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="工作单位">
<el-form-item prop="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
disabled @change="getUnionName(formData.unitId)"
v-model="formData.unitId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属工会">
@@ -326,6 +321,18 @@ layout("/layouts/platform.html"){
}
},
methods: {
normalizeUnitField() {
if (!this.formData || !this.formData.unitId) {
return
}
const unitId = String(this.formData.unitId)
this.$set(this.formData, "unitId", unitId)
const unit = this.units.find(v => String(v.id) === unitId)
if (unit) {
this.$set(this.formData, "unitName", unit.name)
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
}
},
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
@@ -453,7 +460,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, "personType", personType)
this.$set(this.formData, "preparedBy", preparedBy)
this.$set(this.formData, "unitName", unit ? unit.name : unitName)
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
this.$set(this.formData, "unitId", unit ? String(unit.id) : unitId)
this.$set(this.formData, "unionName", union ? union.name : unionName)
this.$set(this.formData, "unionId", union ? union.id : unionId)
@@ -465,11 +472,10 @@ layout("/layouts/platform.html"){
}
}
},
created() {
this.init()
this.$businessTool.listUnit().then((data) => {
this.units = data
})
async created() {
await this.init()
this.units = await this.$businessTool.listUnit()
this.normalizeUnitField()
}
})
</script>
@@ -92,12 +92,7 @@ const MEMBER_CHANGE = {
<template>
<el-descriptions-item label="工作单位">
<el-form-item prop="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
:disabled="allowFields('unitId')" @change="getUnionName"
v-model="formData.unitId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属工会">
@@ -194,9 +189,10 @@ const MEMBER_CHANGE = {
<el-descriptions-item label="福利会员状态">
<el-form-item prop="welfareMember">
<el-radio-group v-model="formData.welfareMember" size="small">
<el-radio border :label="true">福利会员</el-radio>
<el-radio border :label="false">福利会员</el-radio>
<el-radio-group v-model="formData.welfareMember" size="small" class="welfare-member-radio-group"
style="display: flex; align-items: center; flex-wrap: nowrap; white-space: nowrap;">
<el-radio border :label="true" style="flex-shrink: 0;">福利会员</el-radio>
<el-radio border :label="false" style="flex-shrink: 0;">非福利会员</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
@@ -366,9 +362,21 @@ const MEMBER_CHANGE = {
},
methods: {
getUnionName(val){
debugger
const data = this.units.find(v => v.id === val)
this.$set(this.formData, 'unionName', data ? data.unionName : '')
const data = this.units.find(v => String(v.id) === String(val))
this.$set(this.formData, 'unitName', data ? data.name : '')
this.$set(this.formData, 'unionName', data ? (data.unionName || data.unionname || '') : '')
},
normalizeUnitField() {
if (!this.formData || !this.formData.unitId) {
return
}
const unitId = String(this.formData.unitId)
this.$set(this.formData, "unitId", unitId)
let unit = this.units.find(v => String(v.id) === unitId)
if (unit) {
this.$set(this.formData, "unitName", unit.name)
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
}
},
allowFields(prop) {
return !this.allowChangeFields.map(v => v.code).includes(prop)
@@ -407,14 +415,15 @@ const MEMBER_CHANGE = {
this.isShow = true
this.user = this.$store.state.user
}
this.getFormDataValue(this.id)
await this.getFormDataValue(this.id)
this.allowChangeFields = await this.$businessTool.getDictOptions("ALLOW_CHANGE_FIELDS")
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
this.units = await this.$businessTool.listUnit()
this.unions = await this.$businessTool.listUnion()
} else {
this.units = await this.$businessTool.listUnit(this.user.union.id)
this.units = await this.$businessTool.listUnit()
}
this.normalizeUnitField()
},
async getUserById(userId){
const resp = await $.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
@@ -424,7 +433,7 @@ const MEMBER_CHANGE = {
},
getFormDataValue(id){
if (id) {
$.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
return $.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
if (res.code === 0) {
this.formData = res.data
this.formData.unionid = this.user.unionid
@@ -485,7 +494,7 @@ const MEMBER_CHANGE = {
this.$set(this.formData, "userAttribute", userAttribute)
this.$set(this.formData, "aidFundMemberUserType", aidFundMemberUserType)
this.$set(this.formData, "unitName", unit ? unit.name : null)
this.$set(this.formData, "unitId", unit ? unit.id : null)
this.$set(this.formData, "unitId", unit ? String(unit.id) : null)
this.$set(this.formData, "unionName", union ? union.name : null)
this.$set(this.formData, "unionId", union ? union.id : null)
@@ -504,6 +513,14 @@ const MEMBER_CHANGE = {
.el-descriptions-item__label {
width: 15% !important;
}
.welfare-member-radio-group {
display: flex;
align-items: center;
flex-wrap: nowrap;
}
.welfare-member-radio-group .el-radio {
margin-right: 12px;
}
`
}
@@ -38,10 +38,11 @@ layout("/layouts/platform.html"){
<!-- <dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"-->
<!-- code="USER_PREPARED_BY_TYPE"></dict-select>-->
<!-- </search-item>-->
<search-item label="人员分类">
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"
code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>
<!-- 临时屏蔽“人员分类”查询字段,不删除配置,后续需要可恢复。-->
<!-- <search-item label="人员分类">-->
<!-- <dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"-->
<!-- code="AIDFUND_MEMBER_USER_TYPE"></dict-select>-->
<!-- </search-item>-->
<search-item label="人员属性">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
@@ -544,16 +545,21 @@ layout("/layouts/platform.html"){
{ prop: "sex", label: "性别", width: 120},
{ prop: "birthday", label: "出生年月", width: 120, sortable: true },
{ prop: "nationality", label: "国籍", width: 120, sortable: true, checked: 0 },
{ prop: "nation", label: "民族", width: 120, sortable: true},
// 临时屏蔽“民族”列表字段,不删除配置,后续需要可恢复。
// { prop: "nation", label: "民族", width: 120, sortable: true},
{ prop: "mobile", label: "联系电话", width: 120 },
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
// 临时屏蔽“政治面貌”列表字段,不删除配置,后续需要可恢复。
// { prop: "political", label: "政治面貌", width: 120, sortable: true},
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
{ prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
// 临时隐藏原人员类型位置,人员类型显示到原“人员分类”位置。
// { prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
// { prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
{ prop: "aidFundMemberUserType", label: "人员类", width: 120, sortable: true },
{ prop: "personType", label: "人员类", width: 120, sortable: true },
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
@@ -73,17 +73,17 @@ const MEMBER_INFO = {
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
<!-- 4 -->
<el-descriptions-item label="人员属性">{{ viewData.userAttribute }}</el-descriptions-item>
<el-descriptions-item label="职称">{{ viewData.professionalTitle }}</el-descriptions-item>
<el-descriptions-item label="职级">{{ viewData.professionalLevel }}</el-descriptions-item>
<el-descriptions-item label="岗位系列">{{ viewData.positionSeries }}</el-descriptions-item>
<!-- 5 -->
<el-descriptions-item label="岗位系列">{{ viewData.positionSeries }}</el-descriptions-item>
<el-descriptions-item label="行政级别(管理岗位)">{{ viewData.administrativeLevel }}</el-descriptions-item>
<el-descriptions-item label="岗级">{{ viewData.positionLevel }}</el-descriptions-item>
<el-descriptions-item label="行政岗级">{{ viewData.administrativePositionLevel }}</el-descriptions-item>
<el-descriptions-item label="人员分类">{{ viewData.aidFundMemberUserType }}</el-descriptions-item>
<el-descriptions-item label="人员属性">{{ viewData.userAttribute }}</el-descriptions-item>
<el-descriptions-item label="行政岗级">{{ viewData.administrativePositionLevel }}</el-descriptions-item>
<el-descriptions-item label="人员分类" v-if="false">{{ viewData.aidFundMemberUserType }}</el-descriptions-item>
</el-descriptions>
</div>
`,
@@ -46,7 +46,7 @@ layout("/layouts/platform.html"){
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
</search-item>
<search-item label="人员分类">
<search-item label="人员分类" v-if="false">
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>
<search-item label="人员属性">
@@ -46,7 +46,7 @@ layout("/layouts/platform.html"){
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
</search-item>
<search-item label="人员分类">
<search-item label="人员分类" v-if="false">
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>
<search-item label="人员属性">
@@ -82,6 +82,30 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">人员类型:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
class="query-tag-item"
v-for="item in personTypeOptions"
:key="item.code"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)">
{{ item.name }}
</el-tag>
<span class="query-tag-actions">
<el-link type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()">清空
</el-link>
<el-link :underline="false"
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
type="success">全部
</el-link>
</span>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员分类:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
@@ -211,11 +235,13 @@ layout("/layouts/platform.html"){
},
unions: [],
units: [],
personTypeOptions: [],
aidFundMemberUserTypeOptions: [],
userAttributeOptions: [],
pageForm: {
currentYear: moment().format("YYYY"),
queryType: "fgh",
personTypes: [],
userAttributes: [],
aidFundMemberUserTypes: []
},
@@ -239,6 +265,9 @@ layout("/layouts/platform.html"){
this.units = data
})
}
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
this.personTypeOptions = data
})
this.$businessTool.getDictOptions("AIDFUND_MEMBER_USER_TYPE").then((data) => {
this.aidFundMemberUserTypeOptions = data
})
@@ -249,6 +278,7 @@ layout("/layouts/platform.html"){
pageData() {
// 统计接口按 JSON 字符串接收多选条件,这里统一在提交前做转换,保证人员分类和人员属性都能正确过滤。
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
@@ -259,6 +289,13 @@ layout("/layouts/platform.html"){
})
},
tagClick(key,code) {
if (key === "personTypes") {
if (this.pageForm.personTypes.includes(code)) {
this.pageForm.personTypes.splice(this.pageForm.personTypes.indexOf(code), 1)
} else {
this.pageForm.personTypes.push(code)
}
}
if (key === "userAttributes") {
if (this.pageForm.userAttributes.includes(code)) {
this.pageForm.userAttributes.splice(this.pageForm.userAttributes.indexOf(code), 1)
@@ -163,7 +163,8 @@ layout("/layouts/platform.html"){
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
{ prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
@@ -88,7 +88,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员分类</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
@@ -82,6 +82,30 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">人员类型:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
class="query-tag-item"
v-for="item in personTypeOptions"
:key="item.code"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)">
{{ item.name }}
</el-tag>
<span class="query-tag-actions">
<el-link type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()">清空
</el-link>
<el-link :underline="false"
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
type="success">全部
</el-link>
</span>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员分类:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
@@ -173,10 +197,12 @@ layout("/layouts/platform.html"){
},
unions: [],
units: [],
personTypeOptions: [],
userAttributeOptions: [],
pageForm: {
currentYear: moment().format("YYYY"),
queryType: "fgh",
personTypes: [],
userAttributes: [],
aidFundMemberUserTypes: []
},
@@ -200,6 +226,9 @@ layout("/layouts/platform.html"){
this.units = data
})
}
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
this.personTypeOptions = data
})
this.$businessTool.getDictOptions("AIDFUND_MEMBER_USER_TYPE").then((data) => {
this.aidFundMemberUserTypeOptions = data
})
@@ -208,6 +237,13 @@ layout("/layouts/platform.html"){
})
},
tagClick(key,code) {
if (key === "personTypes") {
if (this.pageForm.personTypes.includes(code)) {
this.pageForm.personTypes.splice(this.pageForm.personTypes.indexOf(code), 1)
} else {
this.pageForm.personTypes.push(code)
}
}
if (key === "userAttributes") {
if (this.pageForm.userAttributes.includes(code)) {
this.pageForm.userAttributes.splice(this.pageForm.userAttributes.indexOf(code), 1)
@@ -227,6 +263,7 @@ layout("/layouts/platform.html"){
pageData() {
const pageForm = clone(this.pageForm)
// 统计接口按 JSON 字符串接收多选条件,这里把人员分类和人员属性统一成同一提交口径。
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
@@ -84,6 +84,13 @@ const filterUser = {
v-model="pageForm.personTypes"></dict-select>
</search-item>
<search-item label="人员属性:">
<dict-select clearable code="USER_ATTRIBUTE"
multiple
collapse-tags
placeholder="请选择人员属性"
v-model="pageForm.userAttributes"></dict-select>
</search-item>
<search-item label="在职状态:">
<dict-select clearable code="USER_STATE"
@@ -152,6 +159,7 @@ const filterUser = {
userStates: [],
personTypes: [],
preparedBys: [],
userAttributes: [],
unitIds: []
},
sexOptions: ["男", "女"],
@@ -165,7 +173,8 @@ const filterUser = {
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "threeUnitName", label: "三级单位", sortable: true }
]
}
},
@@ -186,9 +195,10 @@ const filterUser = {
this.$set(this.pageForm, "birthday", null)
this.$set(this.pageForm, "birthMonths", [])
this.$set(this.pageForm, "unionId", null)
this.$set(this.pageForm, "unitId", null)
this.$set(this.pageForm, "unitIds", [])
this.$set(this.pageForm, "personTypes", [])
this.$set(this.pageForm, "preparedBys", [])
this.$set(this.pageForm, "userAttributes", [])
this.$set(this.pageForm, "userStates", [])
this.$set(this.pageForm, "isMember", null)
},
@@ -3,7 +3,7 @@ const welfareOption = {
<div class="welfare-option">
<el-card shadow="never">
<el-table :data="welfareList" border style="width: 100%; margin-top: 20px;">
<el-table-column align="center" header-align="center" label="福利名称">
<el-table-column align="center" header-align="center" label="福利名称" min-width="520">
<template slot-scope="{row}">
<el-input
v-model="row.optionName"
@@ -12,6 +12,16 @@ const welfareOption = {
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="系统默认选择" width="140">
<template slot-scope="{$index}">
<el-radio
v-model="systemDefaultPlaceholderIndex"
:label="$index">
&nbsp;
</el-radio>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="图片" width="200">
<template slot-scope="{row}">
<file-upload :upload_number="1" :value.sync="row.imgUrl"
@@ -22,22 +32,22 @@ const welfareOption = {
upload_result_category="interval"></file-upload>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="说明" width="120">
<template slot-scope="{row, $index}">
<el-button
type="text"
<el-button
type="text"
@click="openDescription(row, $index)">
{{ row.description ? '编辑说明' : '添加说明' }}
</el-button>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<template slot-scope="{$index}">
<el-button
<el-button
type="danger"
icon="el-icon-delete"
icon="el-icon-delete"
circle
size="mini"
@click="deleteOption($index)">
@@ -48,7 +58,6 @@ const welfareOption = {
<el-button type="primary" size="small" @click="addOption">添加福利选项</el-button>
</el-card>
<!-- 说明编辑对话框 -->
<el-dialog
title="编辑福利说明"
:visible.sync="descriptionDialog.visible"
@@ -57,8 +66,8 @@ const welfareOption = {
:close-on-click-modal="false">
<text-editor v-model="descriptionDialog.content"></text-editor>
<span slot="footer" class="dialog-footer">
<el-button @click="descriptionDialog.visible = false"> </el-button>
<el-button type="primary" @click="saveDescription"> </el-button>
<el-button @click="descriptionDialog.visible = false">取消</el-button>
<el-button type="primary" @click="saveDescription">确定</el-button>
</span>
</el-dialog>
</div>
@@ -74,6 +83,7 @@ const welfareOption = {
data() {
return {
welfareList: [],
systemDefaultPlaceholderIndex: null,
descriptionDialog: {
visible: false,
content: '',
@@ -111,6 +121,11 @@ const welfareOption = {
type: 'warning'
}).then(() => {
this.welfareList.splice(index, 1);
if (this.systemDefaultPlaceholderIndex === index) {
this.systemDefaultPlaceholderIndex = null;
} else if (this.systemDefaultPlaceholderIndex > index) {
this.systemDefaultPlaceholderIndex--;
}
this.updateSortNumbers();
});
},
@@ -158,7 +173,7 @@ const welfareOption = {
style: /*language=CSS*/ `
/deep/ .welfare-option {
}
/deep/ .welfare-option .el-card__body{
@@ -182,6 +197,10 @@ const welfareOption = {
transform: translate(-50%, -50%);
}
/deep/ .welfare-option .el-radio__label {
padding-left: 0;
}
/deep/ .preview-image {
width: 100%;
height: 100%;
@@ -34,6 +34,9 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never" v-loading="tableLoading">
<table-tool label="工会列表">
<el-button @click="exportByWelfareOptions" icon="el-icon-printer" size="small" type="primary">按福利选项导出</el-button>
<el-button :disabled="!pageForm.projectId" @click="remindUnSelectedPlaceholder" icon="el-icon-bell" size="small" type="primary">
提醒未选择人员
</el-button>
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','SCHOOL_UNION_WELFARE_ADMIN'])">
<el-button :disabled="!pageForm.projectId" @click="exportSummary" icon="el-icon-printer" size="small" type="primary">
导出汇总表
@@ -107,6 +110,9 @@ layout("/layouts/platform.html"){
}
},
methods: {
remindUnSelectedPlaceholder() {
this.$message.info("提醒未选择人员功能待开发")
},
// 导出汇总表
exportSummary() {
this.$downLoad("/platform/welfare/statistics/exportSummary", {
@@ -439,6 +439,11 @@ layout("/layouts/platform_h5.html"){
required
is-link
></van-field>
<van-cell v-if="getProjectTipByProject(formData.reimburseProject)">
<template #title>
<span style="color: #ee0a24; text-align: left;">报销提示:{{getProjectTipByProject(formData.reimburseProject)}}</span>
</template>
</van-cell>
<van-popup position="bottom" round v-model:show="showReimburseProjectPicker">
<van-picker :columns="reimburseProjectColumns" @cancel="closePopup('showReimburseProjectPicker')"
@confirm="onReimburseProjectConfirm" show-toolbar></van-picker>
@@ -528,120 +533,6 @@ layout("/layouts/platform_h5.html"){
-->
</van-cell-group>
<van-cell-group class="form-section">
<div class="payment-section">
<div class="payment-toolbar">
<span>支付信息</span>
<van-button native-type="button" size="small" type="primary" icon="plus" @click="addPaymentInfo">新增</van-button>
</div>
<div class="invoice-tip" v-if="!paymentInfoRows.length">请至少维护一条支付信息。</div>
<van-swipe
ref="paymentSwipe"
class="payment-swipe"
:loop="false"
:show-indicators="false"
@change="handlePaymentSwipeChange"
v-if="paymentInfoRows.length">
<van-swipe-item v-for="(item, index) in paymentInfoRows" :key="index">
<div class="payment-detail-item">
<div class="payment-detail-title">
<div class="payment-title-left">
<span>支付信息{{index + 1}}</span>
<span class="payment-index-text">{{index + 1}} / {{paymentInfoRows.length}}</span>
</div>
<van-tag v-if="item.paymentWayName" type="primary">{{item.paymentWayName}}</van-tag>
</div>
<van-field
v-model="item.paymentWayName"
label="支付方式"
readonly
placeholder="请选择支付方式"
@click="openPaymentWayPicker(item, index)"
clickable
required
is-link
></van-field>
<van-field
label="金额"
v-model="item.money"
placeholder="请输入金额"
type="number"
required
></van-field>
<template v-if="isPrivatePayment(item)">
<van-field
v-model="item.payerName"
label="付款人"
readonly
placeholder="请选择付款人"
@click="openPayerSelect(item, index)"
clickable
required
is-link
></van-field>
<van-field
label="户名"
v-model="item.bankUserName"
placeholder="请输入户名"
required
></van-field>
<van-field
label="开户行"
v-model="item.bankOfDeposit"
placeholder="请输入开户行"
required
></van-field>
<van-field
label="银行卡号"
v-model="item.bankCardNumber"
placeholder="请输入银行卡号"
required
></van-field>
</template>
<div class="payment-detail-actions">
<div class="payment-nav-buttons">
<span class="payment-nav-btn" :class="{active: currentPaymentIndex > 0}" @click="showPrevPayment">
<van-icon name="arrow-left"></van-icon>
</span>
<span class="payment-nav-btn" :class="{active: currentPaymentIndex < paymentInfoRows.length - 1}" @click="showNextPayment">
<van-icon name="arrow"></van-icon>
</span>
</div>
<van-button class="payment-delete-btn" native-type="button" size="small" plain type="danger" icon="delete-o" @click="deletePaymentInfo(index)">删除</van-button>
</div>
</div>
</van-swipe-item>
</van-swipe>
<div class="payment-dots" v-if="paymentInfoRows.length > 1">
<span class="payment-dot" :class="{active: index === currentPaymentIndex}" v-for="(item, index) in paymentInfoRows"></span>
</div>
</div>
<van-popup position="bottom" round v-model:show="showPaymentWayPicker">
<van-picker :columns="paymentWayColumns" @cancel="closePopup('showPaymentWayPicker')"
@confirm="onPaymentWayConfirm" show-toolbar></van-picker>
</van-popup>
<van-action-sheet v-model="payerSelectShow" title="付款人" class="height100">
<van-search
v-model="payerSearchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入工号或姓名选择付款人"
@input="payerRemoteMethod"
@clear="payerRemoteMethod"
shape="round"
></van-search>
<div class="van-action-sheet__content mt5" v-if="payerOptions && payerOptions.length>0">
<template v-for="item in payerOptions">
<van-button native-type="button" @click="payerUserChange(item)"
class="van-action-sheet__item van-hairline--bottom">
<span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>
</van-button>
</template>
</div>
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>
</van-cell-group>
<van-cell-group :title="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1' ? '慰问信息' : '活动信息'" class="form-section">
<template v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
@@ -921,6 +812,120 @@ layout("/layouts/platform_h5.html"){
</template>
</van-field>
</van-cell-group>
<van-cell-group class="form-section">
<div class="payment-section">
<div class="payment-toolbar">
<span>支付信息</span>
<van-button native-type="button" size="small" type="primary" icon="plus" @click="addPaymentInfo">新增</van-button>
</div>
<div class="invoice-tip" v-if="!paymentInfoRows.length">请至少维护一条支付信息。</div>
<van-swipe
ref="paymentSwipe"
class="payment-swipe"
:loop="false"
:show-indicators="false"
@change="handlePaymentSwipeChange"
v-if="paymentInfoRows.length">
<van-swipe-item v-for="(item, index) in paymentInfoRows" :key="index">
<div class="payment-detail-item">
<div class="payment-detail-title">
<div class="payment-title-left">
<span>支付信息{{index + 1}}</span>
<span class="payment-index-text">{{index + 1}} / {{paymentInfoRows.length}}</span>
</div>
<van-tag v-if="item.paymentWayName" type="primary">{{item.paymentWayName}}</van-tag>
</div>
<van-field
v-model="item.paymentWayName"
label="支付方式"
readonly
placeholder="请选择支付方式"
@click="openPaymentWayPicker(item, index)"
clickable
required
is-link
></van-field>
<van-field
label="金额"
v-model="item.money"
placeholder="请输入金额"
type="number"
required
></van-field>
<template v-if="isPrivatePayment(item)">
<van-field
v-model="item.payerName"
label="付款人"
readonly
placeholder="请选择付款人"
@click="openPayerSelect(item, index)"
clickable
required
is-link
></van-field>
<van-field
label="户名"
v-model="item.bankUserName"
placeholder="请输入户名"
required
></van-field>
<van-field
label="开户行"
v-model="item.bankOfDeposit"
placeholder="请输入开户行"
required
></van-field>
<van-field
label="银行卡号"
v-model="item.bankCardNumber"
placeholder="请输入银行卡号"
required
></van-field>
</template>
<div class="payment-detail-actions">
<div class="payment-nav-buttons">
<span class="payment-nav-btn" :class="{active: currentPaymentIndex > 0}" @click="showPrevPayment">
<van-icon name="arrow-left"></van-icon>
</span>
<span class="payment-nav-btn" :class="{active: currentPaymentIndex < paymentInfoRows.length - 1}" @click="showNextPayment">
<van-icon name="arrow"></van-icon>
</span>
</div>
<van-button class="payment-delete-btn" native-type="button" size="small" plain type="danger" icon="delete-o" @click="deletePaymentInfo(index)">删除</van-button>
</div>
</div>
</van-swipe-item>
</van-swipe>
<div class="payment-dots" v-if="paymentInfoRows.length > 1">
<span class="payment-dot" :class="{active: index === currentPaymentIndex}" v-for="(item, index) in paymentInfoRows"></span>
</div>
</div>
<van-popup position="bottom" round v-model:show="showPaymentWayPicker">
<van-picker :columns="paymentWayColumns" @cancel="closePopup('showPaymentWayPicker')"
@confirm="onPaymentWayConfirm" show-toolbar></van-picker>
</van-popup>
<van-action-sheet v-model="payerSelectShow" title="付款人" class="height100">
<van-search
v-model="payerSearchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入工号或姓名选择付款人"
@input="payerRemoteMethod"
@clear="payerRemoteMethod"
shape="round"
></van-search>
<div class="van-action-sheet__content mt5" v-if="payerOptions && payerOptions.length>0">
<template v-for="item in payerOptions">
<van-button native-type="button" @click="payerUserChange(item)"
class="van-action-sheet__item van-hairline--bottom">
<span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>
</van-button>
</template>
</div>
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>
</van-cell-group>
<van-cell-group title="电子发票" class="form-section" v-if="formData.reimburseProject">
<van-field label="报销金额"
v-model="formData.money"
@@ -1186,6 +1191,7 @@ layout("/layouts/platform_h5.html"){
clubOptions: [],
condolenceOptions: [],
typeOptions: [],
descOptions: [],
// 添加报销项目原始数据列表
reimburseProjectList: [],
// 添加日期选择器相关变量
@@ -2025,7 +2031,7 @@ layout("/layouts/platform_h5.html"){
}
this.$dialog.confirm({
title: "温馨提示",
message: "您确定要提交吗?"
message: "您确定要提交吗?审核通过后可前往pc端我的报销打印!"
}).then(() => {
this.$axios.post("/platform/unionReimburse/apply/submit", { data: JSON.stringify(this.buildSubmitFormData(paymentDetails)) })
.then(res => {
@@ -2064,7 +2070,7 @@ layout("/layouts/platform_h5.html"){
}
this.$dialog.confirm({
title: "温馨提示",
message: "您确定要提交吗?"
message: "您确定要提交吗?审核通过后可前往pc端我的报销打印!"
}).then(() => {
this.$axios.post("/platform/unionReimburse/apply/submitAgain", {
data: JSON.stringify(this.buildSubmitFormData(paymentDetails)),
@@ -2195,6 +2201,23 @@ layout("/layouts/platform_h5.html"){
const matchedFundSource = this.reimburseFundSourceColumns.find(item => item.value === code)
return matchedFundSource ? matchedFundSource.text : ""
},
// 查询管理端配置的报销项目提示。
queryProjectDesc() {
return this.$axios.post("/platform/unionReimburse/desc/queryFileDesc")
.then((resp) => {
if (resp.code === 0) {
this.$set(this, "descOptions", resp.data || [])
}
})
},
// 根据当前选择的报销项目获取管理端配置的提示内容。
getProjectTipByProject(projectCode) {
if (!this.descOptions || !Array.isArray(this.descOptions)) {
return ""
}
const project = this.descOptions.find(item => item.reimburseProject === projectCode)
return project ? project.projectTip : ""
},
async initDictOptions() {
// 报销类别
const reimburseTypeData = await this.$businessTool.getDictOptions("UNION_REIMBURSE_TYPE")
@@ -2558,6 +2581,7 @@ layout("/layouts/platform_h5.html"){
async created() {
await this.initDictOptions()
await this.queryProjectDesc()
await this.queryCondolenceType()
await this.queryClubs()
await this.init()